app: get_default_folder() is now a class method.

This commit is contained in:
Jehan
2015-09-08 23:09:06 +02:00
parent df2a485907
commit 4441133a8b
4 changed files with 154 additions and 174 deletions

View File

@ -47,8 +47,6 @@
#include "gimp-intl.h" #include "gimp-intl.h"
static GFile * gimp_export_dialog_get_default_folder (Gimp *gimp);
G_DEFINE_TYPE (GimpExportDialog, gimp_export_dialog, G_DEFINE_TYPE (GimpExportDialog, gimp_export_dialog,
GIMP_TYPE_FILE_DIALOG) GIMP_TYPE_FILE_DIALOG)
@ -99,17 +97,20 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
Gimp *gimp, Gimp *gimp,
GimpImage *image) GimpImage *image)
{ {
GFile *dir_file = NULL; GimpFileDialog *file_dialog;
GFile *name_file = NULL; GFile *dir_file = NULL;
GFile *ext_file = NULL; GFile *name_file = NULL;
gchar *basename; GFile *ext_file = NULL;
gchar *basename;
g_return_if_fail (GIMP_IS_EXPORT_DIALOG (dialog)); g_return_if_fail (GIMP_IS_EXPORT_DIALOG (dialog));
g_return_if_fail (GIMP_IS_IMAGE (image)); 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: * Priority of default paths for Export:
@ -143,7 +144,7 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
GIMP_FILE_EXPORT_LAST_FILE_KEY); GIMP_FILE_EXPORT_LAST_FILE_KEY);
if (! dir_file) 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: /* Priority of default basenames for Export:
* *
@ -216,43 +217,3 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
} }
/* private functions */ /* 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;
}
}

View File

@ -71,73 +71,74 @@ enum
PROP_FILE_PROCS_ALL_IMAGES 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, static void gimp_file_dialog_set_property (GObject *object,
guint property_id, guint property_id,
const GValue *value, const GValue *value,
GParamSpec *pspec); GParamSpec *pspec);
static void gimp_file_dialog_get_property (GObject *object, static void gimp_file_dialog_get_property (GObject *object,
guint property_id, guint property_id,
GValue *value, GValue *value,
GParamSpec *pspec); GParamSpec *pspec);
static void gimp_file_dialog_constructed (GObject *object); static void gimp_file_dialog_constructed (GObject *object);
static void gimp_file_dialog_dispose (GObject *object); static void gimp_file_dialog_dispose (GObject *object);
static gboolean gimp_file_dialog_delete_event (GtkWidget *widget, static gboolean gimp_file_dialog_delete_event (GtkWidget *widget,
GdkEventAny *event); GdkEventAny *event);
static void gimp_file_dialog_response (GtkDialog *dialog, static void gimp_file_dialog_response (GtkDialog *dialog,
gint response_id); gint response_id);
static GimpProgress * static GimpProgress *
gimp_file_dialog_progress_start (GimpProgress *progress, gimp_file_dialog_progress_start (GimpProgress *progress,
gboolean cancellable, gboolean cancellable,
const gchar *message); const gchar *message);
static void gimp_file_dialog_progress_end (GimpProgress *progress); static void gimp_file_dialog_progress_end (GimpProgress *progress);
static gboolean gimp_file_dialog_progress_is_active (GimpProgress *progress); static gboolean gimp_file_dialog_progress_is_active (GimpProgress *progress);
static void gimp_file_dialog_progress_set_text (GimpProgress *progress, static void gimp_file_dialog_progress_set_text (GimpProgress *progress,
const gchar *message); const gchar *message);
static void gimp_file_dialog_progress_set_value (GimpProgress *progress, static void gimp_file_dialog_progress_set_value (GimpProgress *progress,
gdouble percentage); gdouble percentage);
static gdouble gimp_file_dialog_progress_get_value (GimpProgress *progress); static gdouble gimp_file_dialog_progress_get_value (GimpProgress *progress);
static void gimp_file_dialog_progress_pulse (GimpProgress *progress); static void gimp_file_dialog_progress_pulse (GimpProgress *progress);
static guint32 gimp_file_dialog_progress_get_window_id (GimpProgress *progress); static guint32 gimp_file_dialog_progress_get_window_id (GimpProgress *progress);
static void gimp_file_dialog_add_user_dir (GimpFileDialog *dialog, static void gimp_file_dialog_add_user_dir (GimpFileDialog *dialog,
GUserDirectory directory); GUserDirectory directory);
static void gimp_file_dialog_add_preview (GimpFileDialog *dialog); static void gimp_file_dialog_add_preview (GimpFileDialog *dialog);
static void gimp_file_dialog_add_filters (GimpFileDialog *dialog); static void gimp_file_dialog_add_filters (GimpFileDialog *dialog);
static void gimp_file_dialog_process_procedure (GimpPlugInProcedure *file_proc, static void gimp_file_dialog_process_procedure (GimpPlugInProcedure *file_proc,
GtkFileFilter **filter_out, GtkFileFilter **filter_out,
GtkFileFilter *all, GtkFileFilter *all,
GtkFileFilter *all_savable); GtkFileFilter *all_savable);
static void gimp_file_dialog_add_proc_selection (GimpFileDialog *dialog); static void gimp_file_dialog_add_proc_selection (GimpFileDialog *dialog);
static void gimp_file_dialog_selection_changed (GtkFileChooser *chooser, static void gimp_file_dialog_selection_changed (GtkFileChooser *chooser,
GimpFileDialog *dialog); GimpFileDialog *dialog);
static void gimp_file_dialog_update_preview (GtkFileChooser *chooser, static void gimp_file_dialog_update_preview (GtkFileChooser *chooser,
GimpFileDialog *dialog); GimpFileDialog *dialog);
static void gimp_file_dialog_proc_changed (GimpFileProcView *view, static void gimp_file_dialog_proc_changed (GimpFileProcView *view,
GimpFileDialog *dialog); GimpFileDialog *dialog);
static void gimp_file_dialog_help_func (const gchar *help_id, static void gimp_file_dialog_help_func (const gchar *help_id,
gpointer help_data); gpointer help_data);
static void gimp_file_dialog_help_clicked (GtkWidget *widget, static void gimp_file_dialog_help_clicked (GtkWidget *widget,
gpointer dialog); 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 static GimpFileDialogState
* gimp_file_dialog_get_state (GimpFileDialog *dialog); * gimp_file_dialog_get_state (GimpFileDialog *dialog);
static void gimp_file_dialog_set_state (GimpFileDialog *dialog, static void gimp_file_dialog_set_state (GimpFileDialog *dialog,
GimpFileDialogState *state); GimpFileDialogState *state);
static void gimp_file_dialog_state_destroy (GimpFileDialogState *state); static void gimp_file_dialog_state_destroy (GimpFileDialogState *state);
static void gimp_file_dialog_real_save_state (GimpFileDialog *dialog, static GFile * gimp_file_dialog_real_get_default_folder (GimpFileDialog *dialog);
const gchar *state_name); static void gimp_file_dialog_real_save_state (GimpFileDialog *dialog,
static void gimp_file_dialog_real_load_state (GimpFileDialog *dialog, const gchar *state_name);
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, G_DEFINE_TYPE_WITH_CODE (GimpFileDialog, gimp_file_dialog,
GTK_TYPE_FILE_CHOOSER_DIALOG, GTK_TYPE_FILE_CHOOSER_DIALOG,
@ -163,6 +164,7 @@ gimp_file_dialog_class_init (GimpFileDialogClass *klass)
dialog_class->response = gimp_file_dialog_response; 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->save_state = gimp_file_dialog_real_save_state;
klass->load_state = gimp_file_dialog_real_load_state; klass->load_state = gimp_file_dialog_real_load_state;
@ -565,6 +567,14 @@ gimp_file_dialog_set_file_proc (GimpFileDialog *dialog,
file_proc); 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 void
gimp_file_dialog_save_state (GimpFileDialog *dialog, gimp_file_dialog_save_state (GimpFileDialog *dialog,
const gchar *state_name) const gchar *state_name)
@ -1038,6 +1048,49 @@ gimp_file_dialog_state_destroy (GimpFileDialogState *state)
g_slice_free (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 static void
gimp_file_dialog_real_save_state (GimpFileDialog *dialog, gimp_file_dialog_real_save_state (GimpFileDialog *dialog,
const gchar *state_name) const gchar *state_name)

View File

@ -66,31 +66,35 @@ struct _GimpFileDialogClass
{ {
GtkFileChooserDialogClass parent_class; GtkFileChooserDialogClass parent_class;
void (* save_state) (GimpFileDialog *dialog, GFile * ( *get_default_folder) (GimpFileDialog *dialog);
const gchar *state_name);
void (* load_state) (GimpFileDialog *dialog, void (* save_state) (GimpFileDialog *dialog,
const gchar *state_name); 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, void gimp_file_dialog_add_extra_widget (GimpFileDialog *dialog,
GtkWidget *widget, GtkWidget *widget,
gboolean expand, gboolean expand,
gboolean fill, gboolean fill,
guint padding); guint padding);
void gimp_file_dialog_set_sensitive (GimpFileDialog *dialog, void gimp_file_dialog_set_sensitive (GimpFileDialog *dialog,
gboolean sensitive); gboolean sensitive);
void gimp_file_dialog_set_file_proc (GimpFileDialog *dialog, void gimp_file_dialog_set_file_proc (GimpFileDialog *dialog,
GimpPlugInProcedure *file_proc); GimpPlugInProcedure *file_proc);
void gimp_file_dialog_save_state (GimpFileDialog *dialog, GFile * gimp_file_dialog_get_default_folder (GimpFileDialog *dialog);
const gchar *state_name);
void gimp_file_dialog_load_state (GimpFileDialog *dialog, void gimp_file_dialog_save_state (GimpFileDialog *dialog,
const gchar *state_name); const gchar *state_name);
void gimp_file_dialog_load_state (GimpFileDialog *dialog,
const gchar *state_name);
G_END_DECLS G_END_DECLS

View File

@ -62,7 +62,6 @@ static void gimp_save_dialog_save_state (GimpFileDialog *dialo
static void gimp_save_dialog_load_state (GimpFileDialog *dialog, static void gimp_save_dialog_load_state (GimpFileDialog *dialog,
const gchar *state_name); 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_add_compat_toggle (GimpSaveDialog *dialog);
static void gimp_save_dialog_compat_toggled (GtkToggleButton *button, static void gimp_save_dialog_compat_toggled (GtkToggleButton *button,
GimpSaveDialog *dialog); GimpSaveDialog *dialog);
@ -173,24 +172,27 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
gboolean close_after_saving, gboolean close_after_saving,
GimpObject *display) GimpObject *display)
{ {
GFile *dir_file = NULL; GimpFileDialog *file_dialog;
GFile *name_file = NULL; GFile *dir_file = NULL;
GFile *ext_file = NULL; GFile *name_file = NULL;
gchar *basename; GFile *ext_file = NULL;
const gchar *version_string; gchar *basename;
gint rle_version; const gchar *version_string;
gint zlib_version; gint rle_version;
gchar *tooltip; gint zlib_version;
gchar *tooltip;
g_return_if_fail (GIMP_IS_SAVE_DIALOG (dialog)); g_return_if_fail (GIMP_IS_SAVE_DIALOG (dialog));
g_return_if_fail (GIMP_IS_IMAGE (image)); 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->save_a_copy = save_a_copy;
dialog->close_after_saving = close_after_saving; dialog->close_after_saving = close_after_saving;
dialog->display_to_close = display; 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: * Priority of default paths for Save:
@ -221,7 +223,7 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
GIMP_FILE_SAVE_LAST_FILE_KEY); GIMP_FILE_SAVE_LAST_FILE_KEY);
if (! dir_file) 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: /* Priority of default basenames for Save:
@ -326,46 +328,6 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
/* private functions */ /* 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 static void
gimp_save_dialog_add_compat_toggle (GimpSaveDialog *dialog) gimp_save_dialog_add_compat_toggle (GimpSaveDialog *dialog)
{ {