[gimp: 10/27] app: Add an 'export' mode to the file save dialog
- From: Martin Nordholts <martinn src gnome org>
- To: svn-commits-list gnome org
- Subject: [gimp: 10/27] app: Add an 'export' mode to the file save dialog
- Date: Sat, 16 May 2009 07:25:12 -0400 (EDT)
commit 0971d61fc4be3e846e3d218595465e0ad64e9061
Author: Martin Nordholts <martinn src gnome org>
Date: Sat Apr 25 10:51:07 2009 +0200
app: Add an 'export' mode to the file save dialog
---
app/actions/file-commands.c | 2 +-
app/dialogs/dialogs-constructors.c | 2 +-
app/dialogs/file-save-dialog.c | 75 ++++++++++++++++++++++++++++--------
app/dialogs/file-save-dialog.h | 3 +-
app/file/gimp-file.h | 1 +
app/widgets/gimpfiledialog.c | 7 +++-
app/widgets/gimpfiledialog.h | 2 +
7 files changed, 72 insertions(+), 20 deletions(-)
diff --git a/app/actions/file-commands.c b/app/actions/file-commands.c
index 9132553..88ad264 100644
--- a/app/actions/file-commands.c
+++ b/app/actions/file-commands.c
@@ -513,7 +513,7 @@ file_save_dialog_show (Gimp *gimp,
gtk_window_set_title (GTK_WINDOW (dialog), title);
gimp_file_dialog_set_save_image (GIMP_FILE_DIALOG (dialog),
- gimp, image, save_a_copy,
+ gimp, image, save_a_copy, FALSE,
close_after_saving);
gtk_window_present (GTK_WINDOW (dialog));
diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c
index fbdcd5c..329d3cb 100644
--- a/app/dialogs/dialogs-constructors.c
+++ b/app/dialogs/dialogs-constructors.c
@@ -125,7 +125,7 @@ dialogs_file_save_new (GimpDialogFactory *factory,
GimpContext *context,
gint view_size)
{
- return file_save_dialog_new (context->gimp);
+ return file_save_dialog_new (context->gimp, FALSE);
}
GtkWidget *
diff --git a/app/dialogs/file-save-dialog.c b/app/dialogs/file-save-dialog.c
index 60c3890..8557428 100644
--- a/app/dialogs/file-save-dialog.c
+++ b/app/dialogs/file-save-dialog.c
@@ -70,6 +70,8 @@ static gboolean file_save_dialog_check_uri (GtkWidget *save_
static gboolean file_save_dialog_uri_will_change (GimpFileDialog *dialog,
Gimp *gimp);
static gchar * file_save_dialog_get_uri (GimpFileDialog *dialog);
+static GSList * file_save_dialog_get_procs (GimpFileDialog *dialog,
+ Gimp *gimp);
static void file_save_dialog_unknown_ext_msg (GimpFileDialog *dialog,
Gimp *gimp);
static gboolean file_save_dialog_use_extension (GtkWidget *save_dialog,
@@ -79,20 +81,34 @@ static gboolean file_save_dialog_use_extension (GtkWidget *save_
/* public functions */
GtkWidget *
-file_save_dialog_new (Gimp *gimp)
+file_save_dialog_new (Gimp *gimp,
+ gboolean export)
{
GtkWidget *dialog;
GimpFileDialogState *state;
- g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
+ if (! export)
+ {
+ dialog = gimp_file_dialog_new (gimp,
+ GIMP_FILE_CHOOSER_ACTION_SAVE,
+ _("Save Image"), "gimp-file-save",
+ GTK_STOCK_SAVE,
+ GIMP_HELP_FILE_SAVE);
+
+ state = g_object_get_data (G_OBJECT (gimp), "gimp-file-save-dialog-state");
+ }
+ else
+ {
+ dialog = gimp_file_dialog_new (gimp,
+ GIMP_FILE_CHOOSER_ACTION_EXPORT,
+ _("Export Image"), "gimp-file-export",
+ GTK_STOCK_SAVE,
+ GIMP_HELP_FILE_EXPORT);
- dialog = gimp_file_dialog_new (gimp,
- GIMP_FILE_CHOOSER_ACTION_SAVE,
- _("Save Image"), "gimp-file-save",
- GTK_STOCK_SAVE,
- GIMP_HELP_FILE_SAVE);
+ state = g_object_get_data (G_OBJECT (gimp), "gimp-file-export-dialog-state");
+ }
- state = g_object_get_data (G_OBJECT (gimp), "gimp-file-save-dialog-state");
+ g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
if (state)
gimp_file_dialog_set_state (GIMP_FILE_DIALOG (dialog), state);
@@ -137,9 +153,18 @@ file_save_dialog_response (GtkWidget *save_dialog,
GimpPlugInProcedure *save_proc;
gulong handler_id;
- g_object_set_data_full (G_OBJECT (gimp), "gimp-file-save-dialog-state",
- gimp_file_dialog_get_state (dialog),
- (GDestroyNotify) gimp_file_dialog_state_destroy);
+ if (! dialog->export)
+ {
+ g_object_set_data_full (G_OBJECT (gimp), "gimp-file-save-dialog-state",
+ gimp_file_dialog_get_state (dialog),
+ (GDestroyNotify) gimp_file_dialog_state_destroy);
+ }
+ else
+ {
+ g_object_set_data_full (G_OBJECT (gimp), "gimp-file-export-dialog-state",
+ gimp_file_dialog_get_state (dialog),
+ (GDestroyNotify) gimp_file_dialog_state_destroy);
+ }
if (response_id != GTK_RESPONSE_OK)
{
@@ -163,7 +188,7 @@ file_save_dialog_response (GtkWidget *save_dialog,
uri,
save_proc,
GIMP_RUN_INTERACTIVE,
- ! dialog->save_a_copy,
+ ! dialog->save_a_copy && ! dialog->export,
FALSE))
{
/* Save was successful, now store the URI in a couple of
@@ -184,6 +209,15 @@ file_save_dialog_response (GtkWidget *save_dialog,
NULL);
}
+ if (! dialog->export)
+ g_object_set_data_full (G_OBJECT (dialog->image->gimp),
+ GIMP_FILE_SAVE_LAST_URI_KEY,
+ g_strdup (uri), (GDestroyNotify) g_free);
+ else
+ g_object_set_data_full (G_OBJECT (dialog->image->gimp),
+ GIMP_FILE_EXPORT_LAST_URI_KEY,
+ g_strdup (uri), (GDestroyNotify) g_free);
+
g_object_set_data_full (G_OBJECT (dialog->image->gimp),
GIMP_FILE_SAVE_LAST_URI_KEY,
g_strdup (uri), (GDestroyNotify) g_free);
@@ -251,9 +285,9 @@ file_save_dialog_check_uri (GtkWidget *save_dialog,
basename = file_utils_uri_display_basename (uri);
save_proc = dialog->file_proc;
- uri_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
+ uri_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
uri, NULL);
- basename_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
+ basename_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
basename, NULL);
GIMP_LOG (SAVE_DIALOG, "URI = %s", uri);
@@ -301,9 +335,9 @@ file_save_dialog_check_uri (GtkWidget *save_dialog,
uri = ext_uri;
basename = ext_basename;
- uri_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
+ uri_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
uri, NULL);
- basename_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
+ basename_proc = file_procedure_find (file_save_dialog_get_procs (dialog, gimp),
basename, NULL);
utf8 = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL);
@@ -503,6 +537,15 @@ file_save_dialog_get_uri (GimpFileDialog *dialog)
return uri;
}
+static GSList *
+file_save_dialog_get_procs (GimpFileDialog *dialog,
+ Gimp *gimp)
+{
+ return (! dialog->export ?
+ gimp->plug_in_manager->save_procs :
+ gimp->plug_in_manager->export_procs);
+}
+
static void
file_save_dialog_unknown_ext_msg (GimpFileDialog *dialog,
Gimp *gimp)
diff --git a/app/dialogs/file-save-dialog.h b/app/dialogs/file-save-dialog.h
index c4ac371..a2ec5ed 100644
--- a/app/dialogs/file-save-dialog.h
+++ b/app/dialogs/file-save-dialog.h
@@ -19,7 +19,8 @@
#define __FILE_SAVE_DIALOG_H__
-GtkWidget * file_save_dialog_new (Gimp *gimp);
+GtkWidget * file_save_dialog_new (Gimp *gimp,
+ gboolean export);
gboolean file_save_dialog_save_image (GimpProgress *progress_and_handler,
Gimp *gimp,
diff --git a/app/file/gimp-file.h b/app/file/gimp-file.h
index 4e826b9..5044107 100644
--- a/app/file/gimp-file.h
+++ b/app/file/gimp-file.h
@@ -24,6 +24,7 @@
/* Data keys for Gimp */
#define GIMP_FILE_OPEN_LAST_URI_KEY "gimp-file-open-last-uri"
#define GIMP_FILE_SAVE_LAST_URI_KEY "gimp-file-save-last-uri"
+#define GIMP_FILE_EXPORT_LAST_URI_KEY "gimp-file-export-last-uri"
/* Data keys for GimpImage */
#define GIMP_FILE_SAVE_A_COPY_URI_KEY "gimp-file-save-a-copy-uri"
diff --git a/app/widgets/gimpfiledialog.c b/app/widgets/gimpfiledialog.c
index e7244e3..4301dc0 100644
--- a/app/widgets/gimpfiledialog.c
+++ b/app/widgets/gimpfiledialog.c
@@ -320,8 +320,11 @@ gimp_file_dialog_new (Gimp *gimp,
break;
case GIMP_FILE_CHOOSER_ACTION_SAVE:
+ case GIMP_FILE_CHOOSER_ACTION_EXPORT:
gtk_action = GTK_FILE_CHOOSER_ACTION_SAVE;
- file_procs = gimp->plug_in_manager->save_procs;
+ file_procs = (action == GIMP_FILE_CHOOSER_ACTION_SAVE ?
+ gimp->plug_in_manager->save_procs :
+ gimp->plug_in_manager->export_procs);
automatic = _("By Extension");
automatic_help_id = GIMP_HELP_FILE_SAVE_BY_EXTENSION;
@@ -461,6 +464,7 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
Gimp *gimp,
GimpImage *image,
gboolean save_a_copy,
+ gboolean export,
gboolean close_after_saving)
{
const gchar *uri = NULL;
@@ -472,6 +476,7 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
dialog->image = image;
dialog->save_a_copy = save_a_copy;
+ dialog->export = export;
dialog->close_after_saving = close_after_saving;
if (save_a_copy)
diff --git a/app/widgets/gimpfiledialog.h b/app/widgets/gimpfiledialog.h
index 34c6d1a..cf4b054 100644
--- a/app/widgets/gimpfiledialog.h
+++ b/app/widgets/gimpfiledialog.h
@@ -43,6 +43,7 @@ struct _GimpFileDialog
GimpImage *image;
gboolean open_as_layers;
gboolean save_a_copy;
+ gboolean export;
gboolean close_after_saving;
GtkWidget *thumb_box;
@@ -85,6 +86,7 @@ void gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
Gimp *gimp,
GimpImage *image,
gboolean save_a_copy,
+ gboolean export,
gboolean close_after_saving);
GimpFileDialogState * gimp_file_dialog_get_state (GimpFileDialog *dialog);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]