From 5ef174949682cd50a28499217496348559ac3800 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Mon, 11 Dec 2006 20:57:44 +0000 Subject: [PATCH] don't message "Image saved" from here. 2006-12-11 Sven Neumann * app/actions/file-commands.c: don't message "Image saved" from here. * app/core/gimpimage.[ch]: introduced new signal "saved". * app/file/file-save.c (file_save): call gimp_image_saved() from here. * app/display/gimpdisplay-handlers.c: connect to GimpImage::saved and show the "Image saved" message. Makes it show up on all displays and regardless of how the file was saved. * app/display/gimpdisplay.c: fixed typo in comment. --- ChangeLog | 14 ++++++++++++++ app/actions/file-commands.c | 24 +++++++++++++----------- app/core/gimpimage.c | 29 +++++++++++++++++++++++++++++ app/core/gimpimage.h | 5 +++++ app/display/gimpdisplay-handlers.c | 24 ++++++++++++++++++++++++ app/display/gimpdisplay.c | 2 +- app/file/file-save.c | 2 ++ 7 files changed, 88 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index ccb004adb0..09699a7dc9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2006-12-11 Sven Neumann + + * app/actions/file-commands.c: don't message "Image saved" from here. + + * app/core/gimpimage.[ch]: introduced new signal "saved". + + * app/file/file-save.c (file_save): call gimp_image_saved() from here. + + * app/display/gimpdisplay-handlers.c: connect to GimpImage::saved + and show the "Image saved" message. Makes it show up on all displays + and regardless of how the file was saved. + + * app/display/gimpdisplay.c: fixed typo in comment. + 2006-12-11 Sven Neumann * app/actions/file-actions.c diff --git a/app/actions/file-commands.c b/app/actions/file-commands.c index 2b3f48f2ba..a98e7eb397 100644 --- a/app/actions/file-commands.c +++ b/app/actions/file-commands.c @@ -220,7 +220,6 @@ file_save_cmd_callback (GtkAction *action, GimpPDBStatusType status; GError *error = NULL; GList *list; - gchar *filename; for (list = gimp_action_groups_from_name ("file"); list; @@ -235,14 +234,9 @@ file_save_cmd_callback (GtkAction *action, uri, save_proc, GIMP_RUN_WITH_LAST_VALS, FALSE, &error); - filename = file_utils_uri_display_name (uri); - switch (status) { case GIMP_PDB_SUCCESS: - gimp_message (image->gimp, G_OBJECT (display), GIMP_MESSAGE_INFO, - _("Image saved to '%s'"), - filename); break; case GIMP_PDB_CANCEL: @@ -251,14 +245,22 @@ file_save_cmd_callback (GtkAction *action, break; default: - gimp_message (image->gimp, G_OBJECT (display), GIMP_MESSAGE_ERROR, - _("Saving '%s' failed:\n\n%s"), - filename, error->message); - g_clear_error (&error); + { + gchar *filename; + + filename = file_utils_uri_display_name (uri); + + gimp_message (image->gimp, G_OBJECT (display), + GIMP_MESSAGE_ERROR, + _("Saving '%s' failed:\n\n%s"), + filename, error->message); + + g_free (filename); + g_clear_error (&error); + } break; } - g_free (filename); for (list = gimp_action_groups_from_name ("file"); list; diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 8b5900bdeb..9be2fdc361 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -95,6 +95,7 @@ enum SELECTION_CONTROL, CLEAN, DIRTY, + SAVED, UPDATE, UPDATE_GUIDE, UPDATE_SAMPLE_POINT, @@ -355,6 +356,16 @@ gimp_image_class_init (GimpImageClass *klass) G_TYPE_NONE, 1, GIMP_TYPE_DIRTY_MASK); + gimp_image_signals[SAVED] = + g_signal_new ("saved", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GimpImageClass, saved), + NULL, NULL, + gimp_marshal_VOID__STRING, + G_TYPE_NONE, 1, + G_TYPE_STRING); + gimp_image_signals[UPDATE] = g_signal_new ("update", G_TYPE_FROM_CLASS (klass), @@ -489,6 +500,7 @@ gimp_image_class_init (GimpImageClass *klass) klass->clean = NULL; klass->dirty = NULL; + klass->saved = NULL; klass->update = NULL; klass->update_guide = NULL; klass->update_sample_point = NULL; @@ -1923,6 +1935,23 @@ gimp_image_clean_all (GimpImage *image) g_signal_emit (image, gimp_image_signals[CLEAN], 0); } +/** + * gimp_image_saved: + * @image: + * @uri: + * + * Emits the "saved" signal, indicating that @image was saved to the + * location specified by @uri. + */ +void +gimp_image_saved (GimpImage *image, + const gchar *uri) +{ + g_return_if_fail (GIMP_IS_IMAGE (image)); + g_return_if_fail (uri != NULL); + + g_signal_emit (image, gimp_image_signals[SAVED], 0, uri); +} /* flush this image's displays */ diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h index 3d576cf0c6..a5c3cbdfa6 100644 --- a/app/core/gimpimage.h +++ b/app/core/gimpimage.h @@ -201,6 +201,9 @@ struct _GimpImageClass GimpDirtyMask dirty_mask); void (* dirty) (GimpImage *image, GimpDirtyMask dirty_mask); + void (* saved) (GimpImage *image, + const gchar *uri); + void (* update) (GimpImage *image, gint x, gint y, @@ -255,6 +258,8 @@ gchar * gimp_image_get_filename (const GimpImage *image); void gimp_image_set_save_proc (GimpImage *image, GimpPlugInProcedure *proc); GimpPlugInProcedure * gimp_image_get_save_proc (const GimpImage *image); +void gimp_image_saved (GimpImage *image, + const gchar *uri); void gimp_image_set_resolution (GimpImage *image, gdouble xres, diff --git a/app/display/gimpdisplay-handlers.c b/app/display/gimpdisplay-handlers.c index 374b895292..1eea4122ee 100644 --- a/app/display/gimpdisplay-handlers.c +++ b/app/display/gimpdisplay-handlers.c @@ -30,6 +30,8 @@ #include "gimpdisplay.h" #include "gimpdisplay-handlers.h" +#include "gimp-intl.h" + /* local function prototypes */ @@ -42,6 +44,9 @@ static void gimp_display_update_handler (GimpProjection *projection, GimpDisplay *display); static void gimp_display_flush_handler (GimpImage *image, GimpDisplay *display); +static void gimp_display_saved_handler (GimpImage *image, + const gchar *uri, + GimpDisplay *display); /* public functions */ @@ -73,6 +78,9 @@ gimp_display_connect (GimpDisplay *display, g_signal_connect (image, "flush", G_CALLBACK (gimp_display_flush_handler), display); + g_signal_connect (image, "saved", + G_CALLBACK (gimp_display_saved_handler), + display); } void @@ -83,6 +91,9 @@ gimp_display_disconnect (GimpDisplay *display) g_return_if_fail (GIMP_IS_DISPLAY (display)); g_return_if_fail (GIMP_IS_IMAGE (display->image)); + g_signal_handlers_disconnect_by_func (display->image, + gimp_display_saved_handler, + display); g_signal_handlers_disconnect_by_func (display->image, gimp_display_flush_handler, display); @@ -128,3 +139,16 @@ gimp_display_flush_handler (GimpImage *image, { gimp_display_flush (display); } + +static void +gimp_display_saved_handler (GimpImage *image, + const gchar *uri, + GimpDisplay *display) +{ + gchar *filename = file_utils_uri_display_name (uri); + + gimp_message (image->gimp, G_OBJECT (display), GIMP_MESSAGE_INFO, + _("Image saved to '%s'"), filename); + + g_free (filename); +} diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index fc3f61ec57..6b84e637ec 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -326,7 +326,7 @@ gimp_display_new (GimpImage *image, g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL); - /* If there isn't an interface, never create a displaylay */ + /* If there isn't an interface, never create a display */ if (image->gimp->no_interface) return NULL; diff --git a/app/file/file-save.c b/app/file/file-save.c index a53830a97b..137345fa5f 100644 --- a/app/file/file-save.c +++ b/app/file/file-save.c @@ -173,6 +173,8 @@ file_save (GimpImage *image, gimp_image_clean_all (image); } + gimp_image_saved (image, uri); + documents = GIMP_DOCUMENT_LIST (image->gimp->documents); imagefile = gimp_document_list_add_uri (documents, uri,