write metadata after timeout, image change or dir change
authorVladimir Nadvornik <nadvornik@suse.cz>
Mon, 22 Dec 2008 18:29:25 +0000 (18:29 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Mon, 22 Dec 2008 18:29:25 +0000 (18:29 +0000)
src/layout.c
src/layout_util.c
src/main.c
src/metadata.c
src/metadata.h

index 0302728..db7b504 100644 (file)
@@ -32,6 +32,7 @@
 #include "ui_misc.h"
 #include "ui_tabcomp.h"
 #include "window.h"
+#include "metadata.h"
 
 #ifdef HAVE_LIRC
 #include "lirc.h"
@@ -1045,6 +1046,9 @@ gint layout_set_fd(LayoutWindow *lw, FileData *fd)
                layout_image_set_index(lw, 0);
                }
 
+       if (options->metadata.confirm_on_dir_change)
+               metadata_write_queue_confirm();
+
        return TRUE;
 }
 
index 54df6ab..3ccd7ee 100644 (file)
@@ -43,6 +43,7 @@
 #include "utilops.h"
 #include "view_dir.h"
 #include "window.h"
+#include "metadata.h"
 
 #include <gdk/gdkkeysyms.h> /* for keyboard values */
 
@@ -2036,6 +2037,10 @@ void layout_bars_new_image(LayoutWindow *lw)
 {
        layout_bar_info_new_image(lw);
        layout_bar_exif_new_image(lw);
+
+       /* this should be called here to handle the metadata edited in bars */
+       if (options->metadata.confirm_on_image_change)
+               metadata_write_queue_confirm();
 }
 
 void layout_bars_new_selection(LayoutWindow *lw, gint count)
index 4691618..631a9e5 100644 (file)
@@ -30,6 +30,7 @@
 #include "ui_utildlg.h"
 #include "cache_maint.h"
 #include "thumb.h"
+#include "metadata.h"
 
 #include <gdk/gdkkeysyms.h> /* for keyboard values */
 
@@ -648,6 +649,8 @@ void exit_program(void)
 {
        layout_image_full_screen_stop(NULL);
 
+       if (metadata_write_queue_confirm()) return;
+
        if (exit_confirm_dlg()) return;
 
        exit_program_final();
index 36381ff..8ffec59 100644 (file)
@@ -123,7 +123,16 @@ static void metadata_write_queue_add(FileData *fd)
        metadata_write_queue = g_list_prepend(metadata_write_queue, fd);
        file_data_ref(fd);
 
-       if (metadata_write_idle_id == -1) metadata_write_idle_id = g_idle_add(metadata_write_queue_idle_cb, NULL);
+       if (metadata_write_idle_id != -1) 
+               {
+               g_source_remove(metadata_write_idle_id);
+               metadata_write_idle_id = -1;
+               }
+       
+       if (options->metadata.confirm_timeout > 0)
+               {
+               metadata_write_idle_id = g_timeout_add(options->metadata.confirm_timeout * 1000, metadata_write_queue_idle_cb, NULL);
+               }
 }
 
 
@@ -161,7 +170,7 @@ gboolean metadata_write_queue_remove_list(GList *list)
 }
 
 
-static gboolean metadata_write_queue_idle_cb(gpointer data)
+gboolean metadata_write_queue_confirm()
 {
        GList *work;
        GList *to_approve = NULL;
@@ -184,11 +193,18 @@ static gboolean metadata_write_queue_idle_cb(gpointer data)
        file_util_write_metadata(NULL, to_approve, NULL);
        
        filelist_free(to_approve);
+       
+       return (metadata_write_queue != NULL);
+}
 
+static gboolean metadata_write_queue_idle_cb(gpointer data)
+{
+       metadata_write_queue_confirm();
        metadata_write_idle_id = -1;
        return FALSE;
 }
 
+
 gboolean metadata_write_exif(FileData *fd, FileData *sfd)
 {
        gboolean success;
index 79ce78d..3bda94b 100644 (file)
@@ -16,6 +16,8 @@
 gboolean metadata_write_queue_remove(FileData *fd);
 gboolean metadata_write_queue_remove_list(GList *list);
 gboolean metadata_write_perform(FileData *fd);
+gboolean metadata_write_queue_confirm(void);
+
 
 
 gint metadata_write(FileData *fd, GList *keywords, const gchar *comment);