[Xfce4-commits] <ristretto:master> Monitor for file-changes

Stephan Arts noreply at xfce.org
Sat Apr 21 13:16:02 CEST 2012


Updating branch refs/heads/master
         to 81123eacb58bd57ea9b5cd38715f1e8b6480d3f2 (commit)
       from 8f0c954a0cf4485add78873b3e0e85cf632b3d75 (commit)

commit 81123eacb58bd57ea9b5cd38715f1e8b6480d3f2
Author: Stephan Arts <stephan at xfce.org>
Date:   Sat Apr 21 13:08:50 2012 +0200

    Monitor for file-changes

 src/file.c         |   30 ++++++++++++++++++++++++++++++
 src/file.h         |    3 +++
 src/image_list.c   |   13 ++++++++-----
 src/image_viewer.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 src/main_window.c  |    1 +
 5 files changed, 85 insertions(+), 5 deletions(-)

diff --git a/src/file.c b/src/file.c
index 3961551..e8bd1c1 100644
--- a/src/file.c
+++ b/src/file.c
@@ -41,6 +41,15 @@ static guint rstto_thumbnail_size[] =
     THUMBNAIL_SIZE_VERY_LARGE_SIZE
 };
 
+enum
+{
+    RSTTO_FILE_SIGNAL_CHANGED = 0,
+    RSTTO_FILE_SIGNAL_COUNT
+};
+
+static gint
+rstto_file_signals[RSTTO_FILE_SIGNAL_COUNT];
+
 static void
 rstto_file_init (GObject *);
 static void
@@ -142,6 +151,17 @@ rstto_file_class_init (GObjectClass *object_class)
 
     object_class->set_property = rstto_file_set_property;
     object_class->get_property = rstto_file_get_property;
+
+    rstto_file_signals[RSTTO_FILE_SIGNAL_CHANGED] = g_signal_new("changed",
+            G_TYPE_FROM_CLASS(object_class),
+            G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+            0,
+            NULL,
+            NULL,
+            g_cclosure_marshal_VOID__VOID,
+            G_TYPE_NONE,
+            0,
+            NULL);
 }
 
 /**
@@ -503,3 +523,13 @@ rstto_file_get_thumbnail (
 
     return r_file->priv->thumbnails[size];
 }
+
+void
+rstto_file_changed ( RsttoFile *r_file )
+{
+    g_signal_emit (
+            G_OBJECT (r_file),
+            rstto_file_signals[RSTTO_FILE_SIGNAL_CHANGED],
+            0,
+            NULL);
+}
diff --git a/src/file.h b/src/file.h
index 2a667b4..becb2a0 100644
--- a/src/file.h
+++ b/src/file.h
@@ -106,6 +106,9 @@ rstto_file_set_orientation (
 gboolean
 rstto_file_has_exif ( RsttoFile * );
 
+void
+rstto_file_changed ( RsttoFile * );
+
 
 G_END_DECLS
 
diff --git a/src/image_list.c b/src/image_list.c
index 1660a0a..def69b2 100644
--- a/src/image_list.c
+++ b/src/image_list.c
@@ -671,6 +671,10 @@ rstto_image_list_set_directory (
 
     rstto_image_list_remove_all (image_list);
 
+    rstto_image_list_monitor_dir ( 
+            image_list,
+            dir );
+
     /* Allow all images to be removed by providing NULL to dir */
     if ( NULL != dir )
     {
@@ -773,10 +777,6 @@ cb_rstto_read_file ( gpointer user_data )
             g_object_unref (loader->files[i]);
         }
 
-        rstto_image_list_monitor_dir ( 
-                loader->image_list,
-                loader->dir );
-
         /* This is a hack, use a closure */
         if (loader->image_list->priv->directory_loader != 0)
         {
@@ -845,6 +845,7 @@ cb_file_monitor_changed (
 {
     RsttoImageList *image_list = RSTTO_IMAGE_LIST (user_data);
     RsttoFile *r_file = rstto_file_new (file);
+    GSList *iter = NULL;
 
     switch ( event_type )
     {
@@ -892,6 +893,9 @@ cb_file_monitor_changed (
                         monitor);
             }
             break;
+        case G_FILE_MONITOR_EVENT_CHANGED:
+            rstto_file_changed (r_file);
+            break;
         default:
             break;
     }
@@ -966,7 +970,6 @@ rstto_image_list_iter_class_init(RsttoImageListIterClass *iter_class)
             G_TYPE_NONE,
             0,
             NULL);
-
 }
 
 static void
diff --git a/src/image_viewer.c b/src/image_viewer.c
index 3e4a398..d6e7670 100644
--- a/src/image_viewer.c
+++ b/src/image_viewer.c
@@ -199,6 +199,11 @@ rstto_image_viewer_get_property (
         GParamSpec *pspec);
 
 static void
+cb_rstto_image_viewer_file_changed (
+        RsttoFile        *r_file,
+        RsttoImageViewer *viewer );
+
+static void
 rstto_image_viewer_set_motion_state (RsttoImageViewer *viewer, RsttoImageViewerMotionState state);
 
 static gboolean
@@ -429,6 +434,13 @@ rstto_image_viewer_class_init(RsttoImageViewerClass *viewer_class)
             NULL, NULL,
             g_cclosure_marshal_VOID__VOID,
             G_TYPE_NONE, 0);
+    g_signal_new ("status-changed",
+            G_TYPE_FROM_CLASS (object_class),
+            G_SIGNAL_RUN_FIRST,
+            0,
+            NULL, NULL,
+            g_cclosure_marshal_VOID__VOID,
+            G_TYPE_NONE, 0);
     g_signal_new ("files-dnd",
             G_TYPE_FROM_CLASS (object_class),
             G_SIGNAL_RUN_FIRST,
@@ -1594,6 +1606,15 @@ rstto_image_viewer_set_file (
                 } 
 
                 g_object_ref (file);
+                g_signal_connect (
+                        file,
+                        "changed",
+                        G_CALLBACK (cb_rstto_image_viewer_file_changed),
+                        viewer);
+                g_signal_handlers_disconnect_by_func (
+                        viewer->priv->file,
+                        cb_rstto_image_viewer_file_changed,
+                        viewer );
                 g_object_unref (viewer->priv->file);
 
                 viewer->priv->file = file;
@@ -1614,6 +1635,11 @@ rstto_image_viewer_set_file (
         }
         else
         {
+            g_signal_connect (
+                    file,
+                    "changed",
+                    G_CALLBACK (cb_rstto_image_viewer_file_changed),
+                    viewer);
             g_object_ref (file);
             viewer->priv->file = file;
             rstto_image_viewer_load_image (viewer, viewer->priv->file, scale);
@@ -1646,6 +1672,10 @@ rstto_image_viewer_set_file (
         }
         if (viewer->priv->file)
         {
+            g_signal_handlers_disconnect_by_func (
+                    viewer->priv->file,
+                    cb_rstto_image_viewer_file_changed,
+                    viewer );
             g_object_unref (viewer->priv->file);
             viewer->priv->file = NULL;
 
@@ -2902,3 +2932,16 @@ rstto_image_viewer_is_busy (
     }
     return FALSE;
 }
+
+static void
+cb_rstto_image_viewer_file_changed (
+        RsttoFile        *r_file,
+        RsttoImageViewer *viewer )
+{
+    rstto_image_viewer_load_image (
+            viewer,
+            r_file,
+            viewer->priv->scale);
+
+    g_signal_emit_by_name(viewer, "status-changed");
+}
diff --git a/src/main_window.c b/src/main_window.c
index 5147070..77193be 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -1088,6 +1088,7 @@ rstto_main_window_init (RsttoMainWindow *window)
     g_signal_connect(G_OBJECT(window->priv->thumbnailbar), "button-press-event", G_CALLBACK(cb_rstto_main_window_navigationtoolbar_button_press_event), window);
     g_signal_connect(G_OBJECT(window->priv->image_viewer), "size-ready", G_CALLBACK(cb_rstto_main_window_update_statusbar), window);
     g_signal_connect(G_OBJECT(window->priv->image_viewer), "scale-changed", G_CALLBACK(cb_rstto_main_window_update_statusbar), window);
+    g_signal_connect(G_OBJECT(window->priv->image_viewer), "status-changed", G_CALLBACK(cb_rstto_main_window_update_statusbar), window);
     g_signal_connect(G_OBJECT(window->priv->image_viewer), "files-dnd", G_CALLBACK(cb_rstto_main_window_dnd_files), window);
 
     g_signal_connect (


More information about the Xfce4-commits mailing list