Author: post
Date: 2011-07-10 19:07:58 +0200 (Sun, 10 Jul 2011)
New Revision: 4018

Modified:
   trunk/po/POTFILES.in
   trunk/src/gtk-interface.c
   trunk/src/gtk-interface.h
   trunk/src/rs-cache.c
Log:
Add error notification when unable to save image settings.

Modified: trunk/po/POTFILES.in
===================================================================
--- trunk/po/POTFILES.in        2011-05-01 10:56:00 UTC (rev 4017)
+++ trunk/po/POTFILES.in        2011-07-10 17:07:58 UTC (rev 4018)
@@ -24,6 +24,7 @@
 src/gtk-progress.c
 src/rs-actions.c
 src/rs-batch.c
+src/rs-cache.c
 src/rs-camera-db.c
 src/rs-preview-widget.c
 src/rs-save-dialog.c

Modified: trunk/src/gtk-interface.c
===================================================================
--- trunk/src/gtk-interface.c   2011-05-01 10:56:00 UTC (rev 4017)
+++ trunk/src/gtk-interface.c   2011-07-10 17:07:58 UTC (rev 4018)
@@ -116,9 +116,40 @@
        return(FALSE);
 }
 
+/* This will ensure that notifications doesn't cover important error messages 
*/
+static gboolean blinking_error = FALSE;
+
+static gboolean
+gui_statusbar_blink_helper(guint *msgid)
+{
+       const static GdkColor red = {0, 0xffff, 0x6666, 0x6666 };
+       gdk_threads_enter();
+       if (msgid[1] == 0)
+       {
+               gtk_statusbar_remove(statusbar, 
gtk_statusbar_get_context_id(statusbar, "generic"), *msgid);
+               gtk_widget_modify_bg(GTK_WIDGET(statusbar), GTK_STATE_NORMAL, 
NULL);
+               g_free(msgid);
+               blinking_error = FALSE;
+       }
+       else
+       {
+               if ((msgid[1] & 1) == 0)
+                       
gtk_widget_modify_bg(gtk_statusbar_get_message_area(statusbar)->parent, 
GTK_STATE_NORMAL, &red);
+               else
+                       
gtk_widget_modify_bg(gtk_statusbar_get_message_area(statusbar)->parent, 
GTK_STATE_NORMAL, NULL);
+               g_timeout_add(500, (GSourceFunc) gui_statusbar_blink_helper, 
msgid);
+               msgid[1] --;
+       }
+       gdk_threads_leave();
+       return(FALSE);
+}
+
 void
 gui_status_notify(const char *text)
 {
+       if (blinking_error)
+               return;
+
        guint *msgid;
        msgid = g_new(guint, 1);
        *msgid = gtk_statusbar_push(statusbar, 
gtk_statusbar_get_context_id(statusbar, "generic"), text);
@@ -126,6 +157,18 @@
        return;
 }
 
+void
+gui_status_error(const char *text)
+{
+       guint *msgid;
+       blinking_error = TRUE;
+       msgid = g_new(guint, 2);
+       *msgid = gtk_statusbar_push(statusbar, 
gtk_statusbar_get_context_id(statusbar, "generic"), text);
+       msgid[1] = 10;
+       g_timeout_add(500, (GSourceFunc) gui_statusbar_blink_helper, msgid);
+       return;
+}
+
 guint
 gui_status_push(const char *text)
 {

Modified: trunk/src/gtk-interface.h
===================================================================
--- trunk/src/gtk-interface.h   2011-05-01 10:56:00 UTC (rev 4017)
+++ trunk/src/gtk-interface.h   2011-07-10 17:07:58 UTC (rev 4018)
@@ -29,6 +29,7 @@
 extern void gui_set_busy(gboolean rawstudio_is_busy);
 extern gboolean gui_is_busy(void);
 extern void gui_status_notify(const char *text);
+extern void gui_status_error(const char *text);
 extern guint gui_status_push(const char *text) G_GNUC_WARN_UNUSED_RESULT;
 extern void gui_status_pop(const guint msgid);
 extern void icon_set_flags(const gchar *filename, GtkTreeIter *iter, const 
guint *priority, const gboolean *exported);

Modified: trunk/src/rs-cache.c
===================================================================
--- trunk/src/rs-cache.c        2011-05-01 10:56:00 UTC (rev 4017)
+++ trunk/src/rs-cache.c        2011-07-10 17:07:58 UTC (rev 4018)
@@ -24,6 +24,8 @@
 #include "application.h"
 #include "rs-cache.h"
 #include "rs-photo.h"
+#include "gettext.h"
+#include "gtk-interface.h"
 
 /* This will be written to XML files for making backward compatibility easier 
to implement */
 #define CACHEVERSION 5
@@ -50,6 +52,12 @@
        return(ret);
 }
 
+static void
+notity_save_failed()
+{
+       gui_status_error(_("WARNING: Failed to save image settings! Check you 
have sufficient rights, and free space on your device."));
+}
+
 void
 rs_cache_save(RS_PHOTO *photo, const RSSettingsMask mask)
 {
@@ -61,7 +69,12 @@
 
        cachename = rs_cache_get_name(photo->filename);
        if (!cachename) return;
-       writer = xmlNewTextWriterFilename(cachename, 0); /* fixme, check for 
errors */
+       writer = xmlNewTextWriterFilename(cachename, 0);
+       if (!writer)
+       {
+               notity_save_failed();
+               return;
+       }
        xmlTextWriterSetIndent(writer, 1);
        xmlTextWriterStartDocument(writer, NULL, "ISO-8859-1", NULL);
        xmlTextWriterStartElement(writer, BAD_CAST "rawstudio-cache");
@@ -110,9 +123,11 @@
                rs_cache_save_settings(photo->settings[id], mask, writer);
                xmlTextWriterEndElement(writer);
        }
-       xmlTextWriterEndDocument(writer);
+       int ret = xmlTextWriterEndDocument(writer);
        xmlFreeTextWriter(writer);
        g_free(cachename);
+       if (ret < 0)
+               notity_save_failed();
        return;
 }
 
@@ -559,6 +574,7 @@
 {
        RS_PHOTO *photo;
        RSSettingsMask mask;
+       int ret = 0;
 
        g_assert(filename != NULL);
 
@@ -585,8 +601,13 @@
 
                if (cachename)
                {
-                       writer = xmlNewTextWriterFilename(cachename, 0); /* 
fixme, check for errors */
+                       writer = xmlNewTextWriterFilename(cachename, 0);
                        g_free(cachename);
+                       if (!writer)
+                       {
+                               notity_save_failed();
+                               return;
+                       }
 
                        xmlTextWriterStartDocument(writer, NULL, "ISO-8859-1", 
NULL);
                        xmlTextWriterStartElement(writer, BAD_CAST 
"rawstudio-cache");
@@ -598,7 +619,7 @@
                        if (exported && *exported)
                                xmlTextWriterWriteFormatElement(writer, 
BAD_CAST "exported", "yes");
 
-                       xmlTextWriterEndDocument(writer);
+                       ret = xmlTextWriterEndDocument(writer);
                        xmlFreeTextWriter(writer);
                }
        }
@@ -606,6 +627,8 @@
        /* Free the photo */
        photo->filename = NULL;
        g_object_unref(photo);
+       if (ret < 0)
+               notity_save_failed();
 
        return;
 }


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to