From 4441133a8bddc24a7e3fe46419d3592395f87ced Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 8 Sep 2015 23:09:06 +0200 Subject: [PATCH] app: get_default_folder() is now a class method. --- app/widgets/gimpexportdialog.c | 59 ++---------- app/widgets/gimpfiledialog.c | 163 ++++++++++++++++++++++----------- app/widgets/gimpfiledialog.h | 40 ++++---- app/widgets/gimpsavedialog.c | 66 +++---------- 4 files changed, 154 insertions(+), 174 deletions(-) diff --git a/app/widgets/gimpexportdialog.c b/app/widgets/gimpexportdialog.c index 897c205e8f..76981a4e01 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); - gimp_file_dialog_set_file_proc (GIMP_FILE_DIALOG (dialog), NULL); + file_dialog->image = image; + + 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 cf2c11a0c2..ee0e227274 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_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 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 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); + 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_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_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_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 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 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 e49d34db4d..fcee7e63ec 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); -void gimp_file_dialog_save_state (GimpFileDialog *dialog, - const gchar *state_name); -void gimp_file_dialog_load_state (GimpFileDialog *dialog, - const gchar *state_name); +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); G_END_DECLS diff --git a/app/widgets/gimpsavedialog.c b/app/widgets/gimpsavedialog.c index a9252d3fab..87ffb12a9b 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) {