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