[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