[gimp/blend-tool-fun: 20/163] app: get_default_folder() is now a class method.



commit 10f5e08990078d99d1acd6f305815ae286e89bca
Author: Jehan <jehan girinstud io>
Date:   Tue Sep 8 23:09:06 2015 +0200

    app: get_default_folder() is now a class method.

 app/widgets/gimpexportdialog.c |   59 ++-----------
 app/widgets/gimpfiledialog.c   |  177 ++++++++++++++++++++++++++--------------
 app/widgets/gimpfiledialog.h   |   40 +++++----
 app/widgets/gimpsavedialog.c   |   66 +++------------
 4 files changed, 161 insertions(+), 181 deletions(-)
---
diff --git a/app/widgets/gimpexportdialog.c b/app/widgets/gimpexportdialog.c
index 897c205..76981a4 100644
--- a/app/widgets/gimpexportdialog.c
+++ b/app/widgets/gimpexportdialog.c
@@ -47,8 +47,6 @@
 #include "gimp-intl.h"
 
 
-static GFile  * gimp_export_dialog_get_default_folder (Gimp *gimp);
-
 G_DEFINE_TYPE (GimpExportDialog, gimp_export_dialog,
                GIMP_TYPE_FILE_DIALOG)
 
@@ -99,17 +97,20 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
                               Gimp             *gimp,
                               GimpImage        *image)
 {
-  GFile *dir_file  = NULL;
-  GFile *name_file = NULL;
-  GFile *ext_file  = NULL;
-  gchar *basename;
+  GimpFileDialog *file_dialog;
+  GFile          *dir_file  = NULL;
+  GFile          *name_file = NULL;
+  GFile          *ext_file  = NULL;
+  gchar          *basename;
 
   g_return_if_fail (GIMP_IS_EXPORT_DIALOG (dialog));
   g_return_if_fail (GIMP_IS_IMAGE (image));
 
-  GIMP_FILE_DIALOG (dialog)->image = image;
+  file_dialog = GIMP_FILE_DIALOG (dialog);
+
+  file_dialog->image = image;
 
-  gimp_file_dialog_set_file_proc (GIMP_FILE_DIALOG (dialog), NULL);
+  gimp_file_dialog_set_file_proc (file_dialog, NULL);
 
   /*
    * Priority of default paths for Export:
@@ -143,7 +144,7 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
                                   GIMP_FILE_EXPORT_LAST_FILE_KEY);
 
   if (! dir_file)
-    dir_file = gimp_export_dialog_get_default_folder (gimp);
+    dir_file = gimp_file_dialog_get_default_folder (file_dialog);
 
   /* Priority of default basenames for Export:
    *
@@ -216,43 +217,3 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
 }
 
 /*  private functions  */
-
-static GFile *
-gimp_export_dialog_get_default_folder (Gimp *gimp)
-{
-  if (gimp->default_folder)
-    {
-      return gimp->default_folder;
-    }
-  else
-    {
-      GFile *file = g_object_get_data (G_OBJECT (gimp),
-                                       "gimp-documents-folder");
-
-      if (! file)
-        {
-          gchar *path;
-
-          /* Make sure it ends in '/' */
-          path = g_build_path (G_DIR_SEPARATOR_S,
-                               g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
-                               G_DIR_SEPARATOR_S,
-                               NULL);
-
-          /* Paranoia fallback, see bug #722400 */
-          if (! path)
-            path = g_build_path (G_DIR_SEPARATOR_S,
-                                 g_get_home_dir (),
-                                 G_DIR_SEPARATOR_S,
-                                 NULL);
-
-          file = g_file_new_for_path (path);
-          g_free (path);
-
-          g_object_set_data_full (G_OBJECT (gimp), "gimp-documents-folder",
-                                  file, (GDestroyNotify) g_object_unref);
-        }
-
-      return file;
-    }
-}
diff --git a/app/widgets/gimpfiledialog.c b/app/widgets/gimpfiledialog.c
index cf2c11a..ee0e227 100644
--- a/app/widgets/gimpfiledialog.c
+++ b/app/widgets/gimpfiledialog.c
@@ -71,73 +71,74 @@ enum
   PROP_FILE_PROCS_ALL_IMAGES
 };
 
-static void     gimp_file_dialog_progress_iface_init    (GimpProgressInterface *iface);
-
-static void     gimp_file_dialog_set_property           (GObject             *object,
-                                                         guint                property_id,
-                                                         const GValue        *value,
-                                                         GParamSpec          *pspec);
-static void     gimp_file_dialog_get_property           (GObject             *object,
-                                                         guint                property_id,
-                                                         GValue              *value,
-                                                         GParamSpec          *pspec);
-static void     gimp_file_dialog_constructed            (GObject             *object);
-static void     gimp_file_dialog_dispose                (GObject             *object);
-
-static gboolean gimp_file_dialog_delete_event           (GtkWidget           *widget,
-                                                         GdkEventAny         *event);
-static void     gimp_file_dialog_response               (GtkDialog           *dialog,
-                                                         gint                 response_id);
+static void     gimp_file_dialog_progress_iface_init     (GimpProgressInterface *iface);
+
+static void     gimp_file_dialog_set_property            (GObject             *object,
+                                                          guint                property_id,
+                                                          const GValue        *value,
+                                                          GParamSpec          *pspec);
+static void     gimp_file_dialog_get_property            (GObject             *object,
+                                                          guint                property_id,
+                                                          GValue              *value,
+                                                          GParamSpec          *pspec);
+static void     gimp_file_dialog_constructed             (GObject             *object);
+static void     gimp_file_dialog_dispose                 (GObject             *object);
+
+static gboolean gimp_file_dialog_delete_event            (GtkWidget           *widget,
+                                                          GdkEventAny         *event);
+static void     gimp_file_dialog_response                (GtkDialog           *dialog,
+                                                          gint                 response_id);
 static GimpProgress *
-                gimp_file_dialog_progress_start         (GimpProgress        *progress,
-                                                         gboolean             cancellable,
-                                                         const gchar         *message);
-static void     gimp_file_dialog_progress_end           (GimpProgress        *progress);
-static gboolean gimp_file_dialog_progress_is_active     (GimpProgress        *progress);
-static void     gimp_file_dialog_progress_set_text      (GimpProgress        *progress,
-                                                         const gchar         *message);
-static void     gimp_file_dialog_progress_set_value     (GimpProgress        *progress,
-                                                         gdouble              percentage);
-static gdouble  gimp_file_dialog_progress_get_value     (GimpProgress        *progress);
-static void     gimp_file_dialog_progress_pulse         (GimpProgress        *progress);
-static guint32  gimp_file_dialog_progress_get_window_id (GimpProgress        *progress);
-
-static void     gimp_file_dialog_add_user_dir           (GimpFileDialog      *dialog,
-                                                         GUserDirectory       directory);
-static void     gimp_file_dialog_add_preview            (GimpFileDialog      *dialog);
-static void     gimp_file_dialog_add_filters            (GimpFileDialog      *dialog);
-static void     gimp_file_dialog_process_procedure      (GimpPlugInProcedure *file_proc,
-                                                         GtkFileFilter      **filter_out,
-                                                         GtkFileFilter       *all,
-                                                         GtkFileFilter       *all_savable);
-static void     gimp_file_dialog_add_proc_selection     (GimpFileDialog      *dialog);
-
-static void     gimp_file_dialog_selection_changed      (GtkFileChooser      *chooser,
-                                                         GimpFileDialog      *dialog);
-static void     gimp_file_dialog_update_preview         (GtkFileChooser      *chooser,
-                                                         GimpFileDialog      *dialog);
-
-static void     gimp_file_dialog_proc_changed           (GimpFileProcView    *view,
-                                                         GimpFileDialog      *dialog);
-
-static void     gimp_file_dialog_help_func              (const gchar         *help_id,
-                                                         gpointer             help_data);
-static void     gimp_file_dialog_help_clicked           (GtkWidget           *widget,
-                                                         gpointer             dialog);
-
-static gchar  * gimp_file_dialog_pattern_from_extension (const gchar         *extension);
+                gimp_file_dialog_progress_start          (GimpProgress        *progress,
+                                                          gboolean             cancellable,
+                                                          const gchar         *message);
+static void     gimp_file_dialog_progress_end            (GimpProgress        *progress);
+static gboolean gimp_file_dialog_progress_is_active      (GimpProgress        *progress);
+static void     gimp_file_dialog_progress_set_text       (GimpProgress        *progress,
+                                                          const gchar         *message);
+static void     gimp_file_dialog_progress_set_value      (GimpProgress        *progress,
+                                                          gdouble              percentage);
+static gdouble  gimp_file_dialog_progress_get_value      (GimpProgress        *progress);
+static void     gimp_file_dialog_progress_pulse          (GimpProgress        *progress);
+static guint32  gimp_file_dialog_progress_get_window_id  (GimpProgress        *progress);
+
+static void     gimp_file_dialog_add_user_dir            (GimpFileDialog      *dialog,
+                                                          GUserDirectory       directory);
+static void     gimp_file_dialog_add_preview             (GimpFileDialog      *dialog);
+static void     gimp_file_dialog_add_filters             (GimpFileDialog      *dialog);
+static void     gimp_file_dialog_process_procedure       (GimpPlugInProcedure *file_proc,
+                                                          GtkFileFilter      **filter_out,
+                                                          GtkFileFilter       *all,
+                                                          GtkFileFilter       *all_savable);
+static void     gimp_file_dialog_add_proc_selection      (GimpFileDialog      *dialog);
+
+static void     gimp_file_dialog_selection_changed       (GtkFileChooser      *chooser,
+                                                          GimpFileDialog      *dialog);
+static void     gimp_file_dialog_update_preview          (GtkFileChooser      *chooser,
+                                                          GimpFileDialog      *dialog);
+
+static void     gimp_file_dialog_proc_changed            (GimpFileProcView    *view,
+                                                          GimpFileDialog      *dialog);
+
+static void     gimp_file_dialog_help_func               (const gchar         *help_id,
+                                                          gpointer             help_data);
+static void     gimp_file_dialog_help_clicked            (GtkWidget           *widget,
+                                                          gpointer             dialog);
+
+static gchar  * gimp_file_dialog_pattern_from_extension  (const gchar         *extension);
 
 
 static GimpFileDialogState
-              * gimp_file_dialog_get_state              (GimpFileDialog      *dialog);
-static void     gimp_file_dialog_set_state              (GimpFileDialog      *dialog,
-                                                         GimpFileDialogState *state);
-static void     gimp_file_dialog_state_destroy          (GimpFileDialogState *state);
+              * gimp_file_dialog_get_state               (GimpFileDialog      *dialog);
+static void     gimp_file_dialog_set_state               (GimpFileDialog      *dialog,
+                                                          GimpFileDialogState *state);
+static void     gimp_file_dialog_state_destroy           (GimpFileDialogState *state);
 
-static void     gimp_file_dialog_real_save_state        (GimpFileDialog      *dialog,
-                                                         const gchar         *state_name);
-static void     gimp_file_dialog_real_load_state        (GimpFileDialog      *dialog,
-                                                         const gchar         *state_name);
+static GFile  * gimp_file_dialog_real_get_default_folder (GimpFileDialog      *dialog);
+static void     gimp_file_dialog_real_save_state         (GimpFileDialog      *dialog,
+                                                          const gchar         *state_name);
+static void     gimp_file_dialog_real_load_state         (GimpFileDialog      *dialog,
+                                                          const gchar         *state_name);
 
 G_DEFINE_TYPE_WITH_CODE (GimpFileDialog, gimp_file_dialog,
                          GTK_TYPE_FILE_CHOOSER_DIALOG,
@@ -163,6 +164,7 @@ gimp_file_dialog_class_init (GimpFileDialogClass *klass)
 
   dialog_class->response     = gimp_file_dialog_response;
 
+  klass->get_default_folder  = gimp_file_dialog_real_get_default_folder;
   klass->save_state          = gimp_file_dialog_real_save_state;
   klass->load_state          = gimp_file_dialog_real_load_state;
 
@@ -565,6 +567,14 @@ gimp_file_dialog_set_file_proc (GimpFileDialog      *dialog,
                                   file_proc);
 }
 
+GFile *
+gimp_file_dialog_get_default_folder (GimpFileDialog *dialog)
+{
+  g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
+
+  GIMP_FILE_DIALOG_GET_CLASS (dialog)->get_default_folder (dialog);
+}
+
 void
 gimp_file_dialog_save_state (GimpFileDialog *dialog,
                              const gchar    *state_name)
@@ -1038,6 +1048,49 @@ gimp_file_dialog_state_destroy (GimpFileDialogState *state)
   g_slice_free (GimpFileDialogState, state);
 }
 
+static GFile *
+gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog)
+{
+  GFile *file = NULL;
+
+  if (dialog->gimp->default_folder)
+    {
+      file = dialog->gimp->default_folder;
+    }
+  else
+    {
+      /* The default folder is "Documents" for all file dialogs.
+       * Children can reimplement this. */
+      file = g_object_get_data (G_OBJECT (dialog->gimp),
+                                "gimp-documents-folder");
+
+      if (! file)
+        {
+          gchar *path;
+
+          /* Make sure it ends in '/' */
+          path = g_build_path (G_DIR_SEPARATOR_S,
+                               g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
+                               G_DIR_SEPARATOR_S,
+                               NULL);
+
+          /* Paranoia fallback, see bug #722400 */
+          if (! path)
+            path = g_build_path (G_DIR_SEPARATOR_S,
+                                 g_get_home_dir (),
+                                 G_DIR_SEPARATOR_S,
+                                 NULL);
+
+          file = g_file_new_for_path (path);
+          g_free (path);
+
+          g_object_set_data_full (G_OBJECT (dialog->gimp), "gimp-documents-folder",
+                                  file, (GDestroyNotify) g_object_unref);
+        }
+    }
+  return file;
+}
+
 static void
 gimp_file_dialog_real_save_state (GimpFileDialog *dialog,
                                   const gchar    *state_name)
diff --git a/app/widgets/gimpfiledialog.h b/app/widgets/gimpfiledialog.h
index e49d34d..fcee7e6 100644
--- a/app/widgets/gimpfiledialog.h
+++ b/app/widgets/gimpfiledialog.h
@@ -66,31 +66,35 @@ struct _GimpFileDialogClass
 {
   GtkFileChooserDialogClass  parent_class;
 
-  void (* save_state) (GimpFileDialog *dialog,
-                       const gchar    *state_name);
-  void (* load_state) (GimpFileDialog *dialog,
-                       const gchar    *state_name);
+  GFile * ( *get_default_folder) (GimpFileDialog *dialog);
+
+  void    (* save_state)         (GimpFileDialog *dialog,
+                                  const gchar    *state_name);
+  void    (* load_state)         (GimpFileDialog *dialog,
+                                  const gchar    *state_name);
 };
 
 
-GType       gimp_file_dialog_get_type       (void) G_GNUC_CONST;
+GType       gimp_file_dialog_get_type           (void) G_GNUC_CONST;
+
+void        gimp_file_dialog_add_extra_widget   (GimpFileDialog       *dialog,
+                                                 GtkWidget            *widget,
+                                                 gboolean              expand,
+                                                 gboolean              fill,
+                                                 guint                 padding);
 
-void        gimp_file_dialog_add_extra_widget (GimpFileDialog       *dialog,
-                                               GtkWidget            *widget,
-                                               gboolean              expand,
-                                               gboolean              fill,
-                                               guint                 padding);
+void        gimp_file_dialog_set_sensitive      (GimpFileDialog       *dialog,
+                                                 gboolean              sensitive);
 
-void        gimp_file_dialog_set_sensitive    (GimpFileDialog       *dialog,
-                                               gboolean              sensitive);
+void        gimp_file_dialog_set_file_proc      (GimpFileDialog       *dialog,
+                                                 GimpPlugInProcedure  *file_proc);
 
-void        gimp_file_dialog_set_file_proc    (GimpFileDialog       *dialog,
-                                               GimpPlugInProcedure  *file_proc);
+GFile     * gimp_file_dialog_get_default_folder (GimpFileDialog       *dialog);
 
-void        gimp_file_dialog_save_state       (GimpFileDialog       *dialog,
-                                               const gchar          *state_name);
-void        gimp_file_dialog_load_state       (GimpFileDialog       *dialog,
-                                               const gchar          *state_name);
+void        gimp_file_dialog_save_state         (GimpFileDialog       *dialog,
+                                                 const gchar          *state_name);
+void        gimp_file_dialog_load_state         (GimpFileDialog       *dialog,
+                                                 const gchar          *state_name);
 
 
 G_END_DECLS
diff --git a/app/widgets/gimpsavedialog.c b/app/widgets/gimpsavedialog.c
index a9252d3..87ffb12 100644
--- a/app/widgets/gimpsavedialog.c
+++ b/app/widgets/gimpsavedialog.c
@@ -62,7 +62,6 @@ static void     gimp_save_dialog_save_state          (GimpFileDialog      *dialo
 static void     gimp_save_dialog_load_state          (GimpFileDialog      *dialog,
                                                       const gchar         *state_name);
 
-static GFile  * gimp_save_dialog_get_default_folder  (Gimp                *gimp);
 static void     gimp_save_dialog_add_compat_toggle   (GimpSaveDialog      *dialog);
 static void     gimp_save_dialog_compat_toggled      (GtkToggleButton     *button,
                                                       GimpSaveDialog      *dialog);
@@ -173,24 +172,27 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
                             gboolean        close_after_saving,
                             GimpObject     *display)
 {
-  GFile       *dir_file  = NULL;
-  GFile       *name_file = NULL;
-  GFile       *ext_file  = NULL;
-  gchar       *basename;
-  const gchar *version_string;
-  gint         rle_version;
-  gint         zlib_version;
-  gchar       *tooltip;
+  GimpFileDialog *file_dialog;
+  GFile          *dir_file  = NULL;
+  GFile          *name_file = NULL;
+  GFile          *ext_file  = NULL;
+  gchar          *basename;
+  const gchar    *version_string;
+  gint            rle_version;
+  gint            zlib_version;
+  gchar          *tooltip;
 
   g_return_if_fail (GIMP_IS_SAVE_DIALOG (dialog));
   g_return_if_fail (GIMP_IS_IMAGE (image));
 
-  GIMP_FILE_DIALOG (dialog)->image = image;
+  file_dialog = GIMP_FILE_DIALOG (dialog);
+
+  file_dialog->image = image;
   dialog->save_a_copy              = save_a_copy;
   dialog->close_after_saving       = close_after_saving;
   dialog->display_to_close         = display;
 
-  gimp_file_dialog_set_file_proc (GIMP_FILE_DIALOG (dialog), NULL);
+  gimp_file_dialog_set_file_proc (file_dialog, NULL);
 
   /*
    * Priority of default paths for Save:
@@ -221,7 +223,7 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
                                   GIMP_FILE_SAVE_LAST_FILE_KEY);
 
   if (! dir_file)
-    dir_file = gimp_save_dialog_get_default_folder (gimp);
+    dir_file = gimp_file_dialog_get_default_folder (file_dialog);
 
 
   /* Priority of default basenames for Save:
@@ -326,46 +328,6 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
 
 /*  private functions  */
 
-static GFile *
-gimp_save_dialog_get_default_folder (Gimp *gimp)
-{
-  if (gimp->default_folder)
-    {
-      return gimp->default_folder;
-    }
-  else
-    {
-      GFile *file = g_object_get_data (G_OBJECT (gimp),
-                                       "gimp-documents-folder");
-
-      if (! file)
-        {
-          gchar *path;
-
-          /* Make sure it ends in '/' */
-          path = g_build_path (G_DIR_SEPARATOR_S,
-                               g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
-                               G_DIR_SEPARATOR_S,
-                               NULL);
-
-          /* Paranoia fallback, see bug #722400 */
-          if (! path)
-            path = g_build_path (G_DIR_SEPARATOR_S,
-                                 g_get_home_dir (),
-                                 G_DIR_SEPARATOR_S,
-                                 NULL);
-
-          file = g_file_new_for_path (path);
-          g_free (path);
-
-          g_object_set_data_full (G_OBJECT (gimp), "gimp-documents-folder",
-                                  file, (GDestroyNotify) g_object_unref);
-        }
-
-      return file;
-    }
-}
-
 static void
 gimp_save_dialog_add_compat_toggle (GimpSaveDialog *dialog)
 {


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