[Goodies-commits] r3890 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sun Jan 27 22:36:45 CET 2008


Author: stephan
Date: 2008-01-27 21:36:45 +0000 (Sun, 27 Jan 2008)
New Revision: 3890

Modified:
   ristretto/trunk/src/main.c
   ristretto/trunk/src/main_window.c
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/navigator.h
Log:
Add new monitor-handle on open-folder (don't add handles on individual files then)



Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c	2008-01-27 17:50:12 UTC (rev 3889)
+++ ristretto/trunk/src/main.c	2008-01-27 21:36:45 UTC (rev 3890)
@@ -294,13 +294,15 @@
                         if(!strcmp(file_media, "image"))
                         {
                             RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, info);
-                            rstto_navigator_add (navigator, entry);
+                            rstto_navigator_add (navigator, entry, TRUE);
                         }
                     }
                     else
                     {
                         GDir *dir = g_dir_open(argv[n], 0, NULL);
                         const gchar *filename = g_dir_read_name(dir);
+                        rstto_navigator_set_monitor_handle_for_dir(navigator, info->path);
+
                         while (filename)
                         {
                             gchar *path_name = g_strconcat(argv[n],  "/", filename, NULL);
@@ -312,7 +314,7 @@
                                 if(!strcmp(file_media, "image"))
                                 {
                                     RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_info);
-                                    rstto_navigator_add (navigator, entry);
+                                    rstto_navigator_add (navigator, entry, FALSE);
                                 }
                                 g_free(file_media);
                                 thunar_vfs_path_unref(file_path);
@@ -381,7 +383,7 @@
                                     if(!strcmp(file_media, "image"))
                                     {
                                         RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_info);
-                                        gint i = rstto_navigator_add (navigator, entry);
+                                        gint i = rstto_navigator_add (navigator, entry, FALSE);
                                         if (path_dir == NULL)
                                         {
                                             if (!strcmp(path_name, argv[1]))
@@ -413,6 +415,8 @@
                     {
                         GDir *dir = g_dir_open(argv[1], 0, NULL);
                         const gchar *filename = g_dir_read_name(dir);
+
+                        rstto_navigator_set_monitor_handle_for_dir(navigator, info->path);
                         while (filename)
                         {
                             gchar *path_name = g_strconcat(path_dir,  "/", filename, NULL);
@@ -424,7 +428,7 @@
                                 if(!strcmp(file_media, "image"))
                                 {
                                     RsttoNavigatorEntry *entry = rstto_navigator_entry_new(navigator, file_info);
-                                    rstto_navigator_add (navigator, entry);
+                                    rstto_navigator_add (navigator, entry, FALSE);
                                 }
                                 g_free(file_media);
                                 thunar_vfs_path_unref(file_path);

Modified: ristretto/trunk/src/main_window.c
===================================================================
--- ristretto/trunk/src/main_window.c	2008-01-27 17:50:12 UTC (rev 3889)
+++ ristretto/trunk/src/main_window.c	2008-01-27 21:36:45 UTC (rev 3890)
@@ -1370,7 +1370,7 @@
             if(!strcmp(file_media, "image"))
             {
                 RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, info);
-                rstto_navigator_add (window->priv->navigator, entry);
+                rstto_navigator_add (window->priv->navigator, entry, TRUE);
                 gchar *uri = thunar_vfs_path_dup_uri(info->path);
                 gtk_recent_manager_add_item(window->priv->manager, uri);
                 g_free(uri);
@@ -1410,6 +1410,14 @@
         GDir *dir = g_dir_open(dir_name, 0, NULL);
         if (dir)
         {
+            ThunarVfsPath *dir_path = thunar_vfs_path_new(dir_name, NULL);
+            if (dir_path)
+            {
+                rstto_navigator_set_monitor_handle_for_dir(window->priv->navigator, dir_path);
+                thunar_vfs_path_unref(dir_path);
+                dir_path = NULL;
+            }
+
             const gchar *filename = g_dir_read_name(dir);
             while (filename)
             {
@@ -1422,7 +1430,7 @@
                     if(!strcmp(file_media, "image"))
                     {
                         RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, info);
-                        rstto_navigator_add (window->priv->navigator, entry);
+                        rstto_navigator_add (window->priv->navigator, entry, FALSE);
                     }
                     g_free(file_media);
                     thunar_vfs_path_unref(path);
@@ -1453,13 +1461,15 @@
             if(strcmp(thunar_vfs_mime_info_get_name(info->mime_info), "inode/directory"))
             {
                 RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, info);
-                rstto_navigator_add (window->priv->navigator, entry);
+                rstto_navigator_add (window->priv->navigator, entry, TRUE);
             }
             else
             {
                 rstto_navigator_clear(window->priv->navigator);
                 gchar *dir_path = thunar_vfs_path_dup_string(info->path);
                 GDir *dir = g_dir_open(dir_path, 0, NULL);
+                rstto_navigator_set_monitor_handle_for_dir(window->priv->navigator, info->path);
+
                 const gchar *filename = g_dir_read_name(dir);
                 while (filename)
                 {
@@ -1472,7 +1482,7 @@
                         if(!strcmp(file_media, "image"))
                         {
                             RsttoNavigatorEntry *entry = rstto_navigator_entry_new(window->priv->navigator, file_info);
-                            rstto_navigator_add (window->priv->navigator, entry);
+                            rstto_navigator_add (window->priv->navigator, entry, FALSE);
                         }
                         g_free(file_media);
                         thunar_vfs_path_unref(file_path);

Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2008-01-27 17:50:12 UTC (rev 3889)
+++ ristretto/trunk/src/navigator.c	2008-01-27 21:36:45 UTC (rev 3890)
@@ -56,6 +56,13 @@
                                    ThunarVfsPath *,
                                    ThunarVfsPath *,
                                    RsttoNavigatorEntry *);
+static void
+cb_rstto_navigator_fs_event (ThunarVfsMonitor *monitor,
+                             ThunarVfsMonitorHandle *handl,
+                             ThunarVfsMonitorEvent event,
+                             ThunarVfsPath *handle_path,
+                             ThunarVfsPath *event_path,
+                             RsttoNavigator *nav);
 
 
 enum
@@ -498,7 +505,7 @@
 }
 
 gint
-rstto_navigator_add (RsttoNavigator *navigator, RsttoNavigatorEntry *entry)
+rstto_navigator_add (RsttoNavigator *navigator, RsttoNavigatorEntry *entry, gboolean with_monitor)
 {
     g_return_val_if_fail(navigator == entry->navigator, -1);
 
@@ -514,7 +521,8 @@
                       NULL);
     }
 
-    entry->monitor_handle = thunar_vfs_monitor_add_file(navigator->monitor, entry->info->path, (ThunarVfsMonitorCallback)cb_rstto_navigator_entry_fs_event, entry);
+    if (with_monitor == TRUE)
+        entry->monitor_handle = thunar_vfs_monitor_add_file(navigator->monitor, entry->info->path, (ThunarVfsMonitorCallback)cb_rstto_navigator_entry_fs_event, entry);
 
     g_signal_emit(G_OBJECT(navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_NEW_ENTRY], 0, g_list_index(navigator->file_list, entry), entry, NULL);
     return g_list_index(navigator->file_list, entry);
@@ -1070,7 +1078,10 @@
     {
         /* fix borked stuff */
         if (time == 0)
+        {
+            g_warning("timeout == 0: defaulting to 40ms");
             time = 40;
+        }
 
         entry->timeout_id = g_timeout_add(time, (GSourceFunc)cb_rstto_navigator_entry_update_image, entry);
     }   
@@ -1171,6 +1182,11 @@
         gint time = gdk_pixbuf_animation_iter_get_delay_time(entry->iter);
         if (time != -1)
         {
+            if (time == 0)
+            {
+                g_warning("timeout == 0: defaulting to 40ms");
+                time = 40;
+            }
             entry->timeout_id = g_timeout_add(time, (GSourceFunc)cb_rstto_navigator_entry_update_image, entry);
         }
         g_signal_emit(G_OBJECT(entry->navigator), rstto_navigator_signals[RSTTO_NAVIGATOR_SIGNAL_ENTRY_MODIFIED], 0, entry, NULL);
@@ -1204,6 +1220,28 @@
     }
 }
 
+static void
+cb_rstto_navigator_fs_event (ThunarVfsMonitor *monitor,
+                             ThunarVfsMonitorHandle *handl,
+                             ThunarVfsMonitorEvent event,
+                             ThunarVfsPath *handle_path,
+                             ThunarVfsPath *event_path,
+                             RsttoNavigator *nav)
+{
+    RsttoNavigatorEntry *entry = NULL;
+    switch (event)
+    {
+        case THUNAR_VFS_MONITOR_EVENT_CHANGED:
+            break;
+        case THUNAR_VFS_MONITOR_EVENT_CREATED:
+            break;
+        case THUNAR_VFS_MONITOR_EVENT_DELETED:
+            break;
+        default:
+            break;
+    }
+}
+
 void
 rstto_navigator_entry_select (RsttoNavigatorEntry *entry)
 {
@@ -1254,3 +1292,18 @@
 {
     nav->max_history = size;
 }
+
+void
+rstto_navigator_set_monitor_handle_for_dir(RsttoNavigator *nav, ThunarVfsPath *dir_path)
+{
+    if (nav->monitor_handle)
+    {
+        thunar_vfs_monitor_remove(nav->monitor, nav->monitor_handle);
+        nav->monitor_handle = NULL;
+    }
+    
+    if (dir_path)
+    {
+        nav->monitor_handle = thunar_vfs_monitor_add_directory(nav->monitor, dir_path, (ThunarVfsMonitorCallback)cb_rstto_navigator_fs_event, nav);
+    }
+}

Modified: ristretto/trunk/src/navigator.h
===================================================================
--- ristretto/trunk/src/navigator.h	2008-01-27 17:50:12 UTC (rev 3889)
+++ ristretto/trunk/src/navigator.h	2008-01-27 21:36:45 UTC (rev 3890)
@@ -47,6 +47,8 @@
 {
     GObject                parent;
     ThunarVfsMonitor      *monitor;
+    ThunarVfsMonitorHandle *monitor_handle;
+
     ThunarVfsThumbFactory *factory;
 
     ThunarVfsPath         *path;
@@ -95,7 +97,7 @@
 rstto_navigator_get_old_position(RsttoNavigator *navigator);
 
 gint
-rstto_navigator_add (RsttoNavigator *navigator, RsttoNavigatorEntry *entry);
+rstto_navigator_add (RsttoNavigator *navigator, RsttoNavigatorEntry *entry, gboolean with_monitor);
 void
 rstto_navigator_remove (RsttoNavigator *navigator, RsttoNavigatorEntry *entry);
 gint
@@ -152,6 +154,8 @@
 rstto_navigator_get_max_history_size(RsttoNavigator *navigator);
 void
 rstto_navigator_set_max_history_size(RsttoNavigator *nav, gdouble size);
+void
+rstto_navigator_set_monitor_handle_for_dir(RsttoNavigator *nav, ThunarVfsPath *dir_path);
 
 G_END_DECLS
 




More information about the Goodies-commits mailing list