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



commit b142ec6a358d0bd2aad6b987079d4b517d11fae3
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.
    (cherry picked from commit 14f6d5ee443eb5c3d28ed980d1307fd5e07e1c52)

 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]