# HG changeset patch # User nadvornik # Date 1213040497 0 # Node ID d29c2d191c58508adf321e8eb4a338ce1b2d5dad # Parent f1ce599855184ecabad7cea6962fec9bd98615f5 use vficon_refresh for updating diff -r f1ce59985518 -r d29c2d191c58 src/typedefs.h --- a/src/typedefs.h Mon Jun 09 19:00:47 2008 +0000 +++ b/src/typedefs.h Mon Jun 09 19:41:37 2008 +0000 @@ -644,7 +644,7 @@ gint clicked_mark; /* refresh */ - gint refresh_idle_id; /* used only in vflist for now */ + gint refresh_idle_id; }; struct _ViewFileInfoList @@ -679,8 +679,6 @@ gint focus_column; gint show_text; - - gint sync_idle_id; }; struct _SlideShowData diff -r f1ce59985518 -r d29c2d191c58 src/view_file_icon.c --- a/src/view_file_icon.c Mon Jun 09 19:00:47 2008 +0000 +++ b/src/view_file_icon.c Mon Jun 09 19:41:37 2008 +0000 @@ -84,7 +84,8 @@ return id; } - +#if 0 +/* not used */ static gint iconlist_read(FileData *dir_fd, GList **list) { GList *temp; @@ -114,6 +115,7 @@ return TRUE; } +#endif static void iconlist_free(GList *list) { @@ -1748,17 +1750,22 @@ vficon_update_focus(vf); } -static gint vficon_sync_idle_cb(gpointer data) +static gint vficon_refresh_idle_cb(gpointer data) { ViewFile *vf = data; - if (VFICON_INFO(vf, sync_idle_id) == -1) return FALSE; - VFICON_INFO(vf, sync_idle_id) = -1; - - vficon_sync(vf); + vficon_refresh(vf); + vf->refresh_idle_id = -1; return FALSE; } +static void vficon_refresh_idle_cancel(ViewFile *vf) +{ + if (vf->refresh_idle_id != -1) g_source_remove(vf->refresh_idle_id); + vf->refresh_idle_id = -1; +} + +#if 0 static void vficon_sync_idle(ViewFile *vf) { if (VFICON_INFO(vf, sync_idle_id) == -1) @@ -1769,6 +1776,7 @@ VFICON_INFO(vf, sync_idle_id) = g_idle_add_full(G_PRIORITY_HIGH, vficon_sync_idle_cb, vf, NULL); } } +#endif static void vficon_sized_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data) { @@ -2333,7 +2341,7 @@ { ViewFile *vf = data; - if (VFICON_INFO(vf, sync_idle_id) != -1) g_source_remove(VFICON_INFO(vf, sync_idle_id)); + vficon_refresh_idle_cancel(vf); file_data_unregister_notify_func(vficon_notify_cb, vf); @@ -2365,7 +2373,7 @@ VFICON_INFO(vf, show_text) = options->show_icon_names; - VFICON_INFO(vf, sync_idle_id) = -1; + vf->refresh_idle_id = -1; store = gtk_list_store_new(1, G_TYPE_POINTER); vf->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); @@ -2412,6 +2420,47 @@ *----------------------------------------------------------------------------- */ +static void vficon_notify_cb(FileData *fd, NotifyType type, gpointer data) +{ + ViewFile *vf = data; + gboolean refresh; + + if (vf->refresh_idle_id != -1) return; + + refresh = (fd == vf->dir_fd); + + if (!refresh) + { + gchar *base = remove_level_from_path(fd->path); + refresh = (strcmp(base, vf->dir_fd->path) == 0); + g_free(base); + } + + if (type == NOTIFY_TYPE_CHANGE && fd->change) + { + if (!refresh && fd->change->dest) + { + gchar *dest_base = remove_level_from_path(fd->change->dest); + refresh = (strcmp(dest_base, vf->dir_fd->path) == 0); + g_free(dest_base); + } + + if (!refresh && fd->change->source) + { + gchar *source_base = remove_level_from_path(fd->change->source); + refresh = (strcmp(source_base, vf->dir_fd->path) == 0); + g_free(source_base); + } + } + + if (refresh && vf->refresh_idle_id == -1) + { + vf->refresh_idle_id = g_idle_add(vficon_refresh_idle_cb, vf); + } +} + + +#if 0 static gint vficon_maint_find_closest(ViewFile *vf, gint row, gint count, GList *ignore_list) { GList *list = NULL; @@ -2681,3 +2730,4 @@ } } +#endif