mirror of https://github.com/GNOME/gimp.git
app: Add an 'export' mode to the file save dialog
This commit is contained in:
parent
3025dac653
commit
0971d61fc4
|
@ -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));
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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,21 +81,35 @@ 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;
|
||||
|
||||
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);
|
||||
|
||||
state = g_object_get_data (G_OBJECT (gimp), "gimp-file-export-dialog-state");
|
||||
}
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
|
||||
|
||||
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");
|
||||
|
||||
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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue