Show .icc files when selecting color profiles
authorColin Clark <colin.clark@cclark.uk>
Sun, 4 Feb 2018 11:43:05 +0000 (11:43 +0000)
committerColin Clark <colin.clark@cclark.uk>
Sun, 4 Feb 2018 11:43:05 +0000 (11:43 +0000)
Modify tabcomp code to permit filter and filter description to be set.
Modify preferences to filter on .icc when selecting color profiles.

src/cache_maint.c
src/layout.c
src/preferences.c
src/ui_tabcomp.c
src/ui_tabcomp.h

index 4f5ff88..f30e3ff 100644 (file)
@@ -816,7 +816,7 @@ static void cache_manager_render_dialog(GtkWidget *widget, const gchar *path)
        hbox = pref_box_new(cd->group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
        pref_label_new(hbox, _("Folder:"));
 
-       label = tab_completion_new(&cd->entry, path, NULL, NULL);
+       label = tab_completion_new(&cd->entry, path, NULL, NULL, NULL, NULL);
        tab_completion_add_select_button(cd->entry,_("Select folder") , TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
        gtk_widget_show(label);
index f50d683..a609813 100644 (file)
@@ -2123,7 +2123,7 @@ void layout_show_config_window(LayoutWindow *lw)
        pref_label_new(group, _("Home path (empty to use your home directory)"));
        hbox = pref_box_new(group, FALSE, GTK_ORIENTATION_HORIZONTAL, PREF_PAD_SPACE);
 
-       tabcomp = tab_completion_new(&lc->home_path_entry, lc->options.home_path, NULL, NULL);
+       tabcomp = tab_completion_new(&lc->home_path_entry, lc->options.home_path, NULL, NULL, NULL, NULL);
        tab_completion_add_select_button(lc->home_path_entry, NULL, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), tabcomp, TRUE, TRUE, 0);
        gtk_widget_show(tabcomp);
index 8000d3b..3963c8b 100644 (file)
@@ -2284,7 +2284,7 @@ static void config_tab_color(GtkWidget *notebook)
                gtk_widget_show(entry);
                color_profile_input_name_entry[i] = entry;
 
-               tabcomp = tab_completion_new(&entry, options->color_profile.input_file[i], NULL, NULL);
+               tabcomp = tab_completion_new(&entry, options->color_profile.input_file[i], NULL, ".icc", "ICC Files", NULL);
                tab_completion_add_select_button(entry, _("Select color profile"), FALSE);
                gtk_widget_set_size_request(entry, 160, -1);
                gtk_table_attach(GTK_TABLE(table), tabcomp, 2, 3, i + 1, i + 2,
@@ -2304,7 +2304,7 @@ static void config_tab_color(GtkWidget *notebook)
 
        pref_table_label(table, 0, 0, _("Screen:"), 1.0);
        tabcomp = tab_completion_new(&color_profile_screen_file_entry,
-                                    options->color_profile.screen_file, NULL, NULL);
+                                    options->color_profile.screen_file, NULL, ".icc", "ICC Files", NULL);
        tab_completion_add_select_button(color_profile_screen_file_entry, _("Select color profile"), FALSE);
        gtk_widget_set_size_request(color_profile_screen_file_entry, 160, -1);
 #ifdef HAVE_LCMS
@@ -2347,7 +2347,7 @@ static void config_tab_behavior(GtkWidget *notebook)
        pref_spacer(hbox, PREF_PAD_INDENT - PREF_PAD_SPACE);
        pref_label_new(hbox, _("Folder:"));
 
-       tabcomp = tab_completion_new(&safe_delete_path_entry, options->file_ops.safe_delete_path, NULL, NULL);
+       tabcomp = tab_completion_new(&safe_delete_path_entry, options->file_ops.safe_delete_path, NULL, NULL, NULL, NULL);
        tab_completion_add_select_button(safe_delete_path_entry, NULL, TRUE);
        gtk_box_pack_start(GTK_BOX(hbox), tabcomp, TRUE, TRUE, 0);
        gtk_widget_show(tabcomp);
index 950895e..c3fff00 100644 (file)
@@ -87,6 +87,8 @@ struct _TabCompData
        gchar *fd_title;
        gboolean fd_folders_only;
        GtkWidget *fd_button;
+       gchar *filter;
+       gchar *filter_desc;
 
        guint choices;
 };
@@ -168,6 +170,9 @@ static void tab_completion_destroy(GtkWidget *widget, gpointer data)
        if (td->fd) file_dialog_close(td->fd);
        g_free(td->fd_title);
 
+       g_free(td->filter);
+       g_free(td->filter_desc);
+
        g_free(td);
 }
 
@@ -738,7 +743,7 @@ GtkWidget *tab_completion_new_with_history(GtkWidget **entry, const gchar *text,
        gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
 
-       tab_completion_add_to_entry(combo_entry, enter_func, data);
+       tab_completion_add_to_entry(combo_entry, enter_func, NULL, NULL, data);
 
        td = g_object_get_data(G_OBJECT(combo_entry), "tab_completion_data");
        if (!td) return NULL; /* this should never happen! */
@@ -821,7 +826,7 @@ void tab_completion_append_to_history(GtkWidget *entry, const gchar *path)
 }
 
 GtkWidget *tab_completion_new(GtkWidget **entry, const gchar *text,
-                             void (*enter_func)(const gchar *, gpointer), gpointer data)
+                             void (*enter_func)(const gchar *, gpointer), const gchar *filter, const gchar *filter_desc, gpointer data)
 {
        GtkWidget *hbox;
        GtkWidget *button;
@@ -838,13 +843,12 @@ GtkWidget *tab_completion_new(GtkWidget **entry, const gchar *text,
        gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        gtk_widget_show(button);
 
-       tab_completion_add_to_entry(newentry, enter_func, data);
-
+       tab_completion_add_to_entry(newentry, enter_func, filter, filter_desc, data);
        if (entry) *entry = newentry;
        return hbox;
 }
 
-void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(const gchar *, gpointer), gpointer data)
+void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(const gchar *, gpointer), const gchar *filter, const gchar *filter_desc, gpointer data)
 {
        TabCompData *td;
        if (!entry)
@@ -858,6 +862,8 @@ void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(const gcha
        td->entry = entry;
        td->enter_func = enter_func;
        td->enter_data = data;
+       td->filter = g_strdup(filter);
+       td->filter_desc = g_strdup(filter_desc);
 
        g_object_set_data(G_OBJECT(td->entry), "tab_completion_data", td);
 
@@ -923,6 +929,8 @@ static void tab_completion_select_show(TabCompData *td)
 {
        const gchar *title;
        const gchar *path;
+       gchar *filter = NULL;
+       gchar *filter_desc = NULL;
 
        if (td->fd)
                {
@@ -938,6 +946,23 @@ static void tab_completion_select_show(TabCompData *td)
 
        generic_dialog_add_message(GENERIC_DIALOG(td->fd), NULL, title, NULL, FALSE);
 
+       if (td->filter)
+               {
+               filter = td->filter;
+               }
+       else
+               {
+               filter = "*";
+               }
+       if (td->filter_desc)
+               {
+               filter_desc = td->filter_desc;
+               }
+       else
+               {
+               filter_desc = _("All files");
+               }
+
        path = gtk_entry_get_text(GTK_ENTRY(td->entry));
        if (strlen(path) == 0) path = NULL;
        if (td->fd_folders_only)
@@ -946,7 +971,7 @@ static void tab_completion_select_show(TabCompData *td)
                }
        else
                {
-               file_dialog_add_path_widgets(td->fd, NULL, path, td->history_key, "*", _("All files"));
+               file_dialog_add_path_widgets(td->fd, NULL, path, td->history_key, filter, filter_desc);
                }
 
        gtk_widget_show(GENERIC_DIALOG(td->fd)->dialog);
index 2ae2e0c..501ac0f 100644 (file)
@@ -30,8 +30,8 @@ const gchar *tab_completion_set_to_last_history(GtkWidget *entry);
 void tab_completion_append_to_history(GtkWidget *entry, const gchar *path);
 
 GtkWidget *tab_completion_new(GtkWidget **entry, const gchar *text,
-                             void (*enter_func)(const gchar *, gpointer), gpointer data);
-void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(const gchar *, gpointer), gpointer data);
+                             void (*enter_func)(const gchar *, gpointer), const gchar *filter, const gchar *filter_desc, gpointer data);
+void tab_completion_add_to_entry(GtkWidget *entry, void (*enter_func)(const gchar *, gpointer), const gchar *filter, const gchar *filter_desc, gpointer data);
 void tab_completion_add_tab_func(GtkWidget *entry, void (*tab_func)(const gchar *, gpointer), gpointer data);
 gchar *remove_trailing_slash(const gchar *path);