[gimp/metadata-browser] Bug 681699 - Inapplicable files are listed with 'All images' filter...



commit 93fa32248c7868b1e16283c40e9595eacfae68d3
Author: Michael Natterer <mitch gimp org>
Date:   Sun Sep 2 23:22:21 2012 +0200

    Bug 681699 - Inapplicable files are listed with 'All images' filter...
    
    In order the fix the obvious confusion, add another file filter which
    contains all the types that are savable with the dialog, name it
    either "All XCF images" or "All export images", and make it the
    default filter.

 app/widgets/gimpfiledialog.c |   48 ++++++++++++++++++++++++++++++-----------
 1 files changed, 35 insertions(+), 13 deletions(-)
---
diff --git a/app/widgets/gimpfiledialog.c b/app/widgets/gimpfiledialog.c
index 0603856..30916ef 100644
--- a/app/widgets/gimpfiledialog.c
+++ b/app/widgets/gimpfiledialog.c
@@ -94,12 +94,15 @@ static void     gimp_file_dialog_add_preview            (GimpFileDialog   *dialo
                                                          Gimp             *gimp);
 static void     gimp_file_dialog_add_filters            (GimpFileDialog   *dialog,
                                                          Gimp             *gimp,
+                                                         GimpFileChooserAction
+                                                                           action,
                                                          GSList           *file_procs,
                                                          GSList           *file_procs_all_images);
 static void     gimp_file_dialog_process_procedure      (GimpPlugInProcedure
                                                                           *file_proc,
-                                                         GtkFileFilter    **filter_out,
-                                                         GtkFileFilter    *all);
+                                                         GtkFileFilter   **filter_out,
+                                                         GtkFileFilter    *all,
+                                                         GtkFileFilter    *all_savable);
 static void     gimp_file_dialog_add_proc_selection     (GimpFileDialog   *dialog,
                                                          Gimp             *gimp,
                                                          GSList           *file_procs,
@@ -402,8 +405,7 @@ gimp_file_dialog_new (Gimp                  *gimp,
 
   gimp_file_dialog_add_preview (dialog, gimp);
 
-  gimp_file_dialog_add_filters (dialog,
-                                gimp,
+  gimp_file_dialog_add_filters (dialog, gimp, action,
                                 file_procs,
                                 file_procs_all_images);
 
@@ -774,19 +776,22 @@ gimp_file_dialog_add_preview (GimpFileDialog *dialog,
  * gimp_file_dialog_add_filters:
  * @dialog:
  * @gimp:
+ * @action:
  * @file_procs:            The image types that can be chosen from
- *                         the drop down
+ *                         the file type list
  * @file_procs_all_images: The additional images types shown when
  *                         "All images" is selected
  *
  **/
 static void
-gimp_file_dialog_add_filters (GimpFileDialog *dialog,
-                              Gimp           *gimp,
-                              GSList         *file_procs,
-                              GSList         *file_procs_all_images)
+gimp_file_dialog_add_filters (GimpFileDialog        *dialog,
+                              Gimp                  *gimp,
+                              GimpFileChooserAction  action,
+                              GSList                *file_procs,
+                              GSList                *file_procs_all_images)
 {
   GtkFileFilter *all;
+  GtkFileFilter *all_savable = NULL;
   GSList        *list;
 
   all = gtk_file_filter_new ();
@@ -798,6 +803,16 @@ gimp_file_dialog_add_filters (GimpFileDialog *dialog,
   gtk_file_filter_set_name (all, _("All images"));
   gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), all);
 
+  if (file_procs_all_images)
+    {
+      all_savable = gtk_file_filter_new ();
+      if (action == GIMP_FILE_CHOOSER_ACTION_SAVE)
+        gtk_file_filter_set_name (all_savable, _("All XCF images"));
+      else
+        gtk_file_filter_set_name (all_savable, _("All export images"));
+      gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), all_savable);
+    }
+
   /* Add the normal file procs */
   for (list = file_procs; list; list = g_slist_next (list))
     {
@@ -806,7 +821,7 @@ gimp_file_dialog_add_filters (GimpFileDialog *dialog,
 
       gimp_file_dialog_process_procedure (file_proc,
                                           &filter,
-                                          all);
+                                          all, all_savable);
       if (filter)
         {
           gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog),
@@ -824,10 +839,13 @@ gimp_file_dialog_add_filters (GimpFileDialog *dialog,
 
       gimp_file_dialog_process_procedure (file_proc,
                                           NULL,
-                                          all);
+                                          all, NULL);
     }
 
-  gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), all);
+  if (all_savable)
+    gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), all_savable);
+  else
+    gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), all);
 }
 
 
@@ -836,6 +854,7 @@ gimp_file_dialog_add_filters (GimpFileDialog *dialog,
  * @file_proc:
  * @filter_out:
  * @all:
+ * @all_savable:
  *
  * Creates a #GtkFileFilter of @file_proc and adds the extensions to
  * the @all filter. The returned #GtkFileFilter has a normal ref and
@@ -844,7 +863,8 @@ gimp_file_dialog_add_filters (GimpFileDialog *dialog,
 static void
 gimp_file_dialog_process_procedure (GimpPlugInProcedure  *file_proc,
                                     GtkFileFilter       **filter_out,
-                                    GtkFileFilter        *all)
+                                    GtkFileFilter        *all,
+                                    GtkFileFilter        *all_savable)
 {
   GtkFileFilter *filter = NULL;
   GString       *str    = NULL;
@@ -872,6 +892,8 @@ gimp_file_dialog_process_procedure (GimpPlugInProcedure  *file_proc,
       pattern = gimp_file_dialog_pattern_from_extension (extension);
       gtk_file_filter_add_pattern (filter, pattern);
       gtk_file_filter_add_pattern (all, pattern);
+      if (all_savable)
+        gtk_file_filter_add_pattern (all_savable, pattern);
       g_free (pattern);
 
       if (i == 0)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]