From 92497f66b819d5862cc221344b102d04c59204f4 Mon Sep 17 00:00:00 2001 From: Vladimir Nadvornik Date: Sat, 7 Jun 2008 09:10:01 +0000 Subject: [PATCH] use new notification in layout and layout_image --- src/layout.c | 116 ++------------------------------------------- src/layout.h | 5 -- src/layout_image.c | 26 ++++++++-- src/layout_image.h | 5 +- src/typedefs.h | 4 -- src/utilops.c | 3 -- 6 files changed, 28 insertions(+), 131 deletions(-) diff --git a/src/layout.c b/src/layout.c index 29489c58..8b078d6b 100644 --- a/src/layout.c +++ b/src/layout.c @@ -906,8 +906,6 @@ static void layout_sync_path(LayoutWindow *lw) { if (!lw->dir_fd) return; - lw->last_version = lw->dir_fd->version; - if (lw->path_entry) gtk_entry_set_text(GTK_ENTRY(lw->path_entry), lw->dir_fd->path); if (lw->vd) vd_set_fd(lw->vd, lw->dir_fd); @@ -1000,23 +998,11 @@ gint layout_set_fd(LayoutWindow *lw, FileData *fd) static void layout_refresh_lists(LayoutWindow *lw) { - if (lw->dir_fd) lw->last_version = lw->dir_fd->version; - if (lw->vd) vd_refresh(lw->vd); if (lw->vf) vf_refresh(lw->vf); } -static void layout_refresh_by_time(LayoutWindow *lw) -{ - layout_refresh_lists(lw); - - if (lw->image && layout_image_get_fd(lw)->version != lw->last_version) // FIXME - move to layout_image and fix - { - layout_image_refresh(lw); - } -} - void layout_refresh(LayoutWindow *lw) { if (!layout_valid(&lw)) return; @@ -1028,24 +1014,6 @@ void layout_refresh(LayoutWindow *lw) if (lw->image) layout_image_refresh(lw); } -static gint layout_check_for_update_cb(gpointer data) -{ - LayoutWindow *lw = data; - - if (!options->update_on_time_change) return TRUE; - - if (lw->dir_fd) - { - if (lw->dir_fd->version != lw->last_version) - { - DEBUG_1("layout path time changed, refreshing..."); - layout_refresh_by_time(lw); - } - } - - return TRUE; -} - void layout_thumb_set(LayoutWindow *lw, gint enable) { if (!layout_valid(&lw)) return; @@ -1827,6 +1795,7 @@ void layout_close(LayoutWindow *lw) } else { + layout_free(lw); /* make leak detection easier */ exit_program(); } } @@ -1842,6 +1811,8 @@ void layout_free(LayoutWindow *lw) gtk_widget_destroy(lw->window); + file_data_unregister_notify_func(layout_image_notify_cb, lw); + if (lw->dir_fd) { file_data_unregister_real_time_monitor(lw->dir_fd); @@ -1988,10 +1959,6 @@ LayoutWindow *layout_new_with_geometry(FileData *dir_fd, gint popped, gint hidde gdk_pixbuf_unref(pixbuf); } - /* set up the time stat timeout */ - lw->last_version = 0; -// lw->last_time_id = g_timeout_add(5000, layout_check_for_update_cb, lw); - if (geometry) { if (!gtk_window_parse_geometry(GTK_WINDOW(lw->window), geometry)) @@ -2005,81 +1972,8 @@ LayoutWindow *layout_new_with_geometry(FileData *dir_fd, gint popped, gint hidde layout_window_list = g_list_append(layout_window_list, lw); - return lw; -} - -/* - *----------------------------------------------------------------------------- - * maintenance (for rename, move, remove) - *----------------------------------------------------------------------------- - */ - -static void layout_real_time_update(LayoutWindow *lw) -{ - /* this resets the last time stamp of path so that a refresh does not occur - * from an internal file operation. FIXME - */ - - if (lw->dir_fd) lw->last_version = lw->dir_fd->version; -} - -static void layout_real_renamed(LayoutWindow *lw, FileData *fd) -{ - if (lw->image) layout_image_maint_renamed(lw, fd); + file_data_register_notify_func(layout_image_notify_cb, lw, NOTIFY_PRIORITY_LOW); -// if (lw->vf && vf_maint_renamed(lw->vf, fd)) - layout_real_time_update(lw); - -} - -static void layout_real_removed(LayoutWindow *lw, FileData *fd, GList *ignore_list) -{ - if (lw->image) layout_image_maint_removed(lw, fd); - -// if (lw->vf && vf_maint_removed(lw->vf, fd, ignore_list)) - layout_real_time_update(lw); -} - -static void layout_real_moved(LayoutWindow *lw, FileData *fd, GList *ignore_list) -{ - if (lw->image) layout_image_maint_moved(lw, fd); - -// if (lw->vf && vf_maint_moved(lw->vf, fd, ignore_list)) - layout_real_time_update(lw); -} - -void layout_maint_renamed(FileData *fd) -{ - GList *work = layout_window_list; - while (work) - { - LayoutWindow *lw = work->data; - work = work->next; - - layout_real_renamed(lw, fd); - } -} - -void layout_maint_removed(FileData *fd, GList *ignore_list) -{ - GList *work = layout_window_list; - while (work) - { - LayoutWindow *lw = work->data; - work = work->next; - - layout_real_removed(lw, fd, ignore_list); - } + return lw; } -void layout_maint_moved(FileData *fd, GList *ignore_list) -{ - GList *work = layout_window_list; - while (work) - { - LayoutWindow *lw = work->data; - work = work->next; - - layout_real_moved(lw, fd, ignore_list); - } -} diff --git a/src/layout.h b/src/layout.h index f0003a25..d1a96ed7 100644 --- a/src/layout.h +++ b/src/layout.h @@ -94,9 +94,4 @@ gint layout_toolbar_hidden(LayoutWindow *lw); void layout_split_change(LayoutWindow *lw, ImageSplitMode mode); -void layout_maint_renamed(FileData *fd); -void layout_maint_removed(FileData *fd, GList *ignore_list); -void layout_maint_moved(FileData *fd, GList *ignore_list); - - #endif diff --git a/src/layout_image.c b/src/layout_image.c index 89ae6d2b..3687300b 100644 --- a/src/layout_image.c +++ b/src/layout_image.c @@ -2047,7 +2047,7 @@ GtkWidget *layout_image_setup_split(LayoutWindow *lw, ImageSplitMode mode) *----------------------------------------------------------------------------- */ -void layout_image_maint_renamed(LayoutWindow *lw, FileData *fd) +static void layout_image_maint_renamed(LayoutWindow *lw, FileData *fd) { FileData *img_fd; @@ -2059,7 +2059,7 @@ void layout_image_maint_renamed(LayoutWindow *lw, FileData *fd) } } -void layout_image_maint_removed(LayoutWindow *lw, FileData *fd) +static void layout_image_maint_removed(LayoutWindow *lw, FileData *fd) { FileData *img_fd; @@ -2088,7 +2088,25 @@ void layout_image_maint_removed(LayoutWindow *lw, FileData *fd) } } -void layout_image_maint_moved(LayoutWindow *lw, FileData *fd) + +void layout_image_notify_cb(FileData *fd, NotifyType type, gpointer data) { - layout_image_maint_renamed(lw, fd); + LayoutWindow *lw = data; + + if (!fd->change) return; + + switch(fd->change->type) + { + case FILEDATA_CHANGE_MOVE: + case FILEDATA_CHANGE_RENAME: + layout_image_maint_renamed(lw, fd); + break; + case FILEDATA_CHANGE_DELETE: + layout_image_maint_removed(lw, fd); + break; + case FILEDATA_CHANGE_COPY: + case FILEDATA_CHANGE_UNSPECIFIED: + break; + } + } diff --git a/src/layout_image.h b/src/layout_image.h index 482cf614..9c96916f 100644 --- a/src/layout_image.h +++ b/src/layout_image.h @@ -78,9 +78,6 @@ gint layout_image_slideshow_paused(LayoutWindow *lw); void layout_image_overlay_toggle(LayoutWindow *lw); -void layout_image_maint_renamed(LayoutWindow *lw, FileData *fd); -void layout_image_maint_removed(LayoutWindow *lw, FileData *fd); -void layout_image_maint_moved(LayoutWindow *lw, FileData *fd); - +void layout_image_notify_cb(FileData *fd, NotifyType type, gpointer data); #endif diff --git a/src/typedefs.h b/src/typedefs.h index 5f4afc29..0c7a3013 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -549,10 +549,6 @@ struct _LayoutWindow gint div_v; gint div_float; - /* directory update check */ - - gint last_version; - /* misc */ GtkWidget *utility_box; diff --git a/src/utilops.c b/src/utilops.c index 1c4bd09d..f9f60d21 100644 --- a/src/utilops.c +++ b/src/utilops.c @@ -245,7 +245,6 @@ void file_data_notify_ci(FileData *fd) case FILEDATA_CHANGE_MOVE: collection_maint_renamed(fd); - layout_maint_moved(fd, NULL); view_window_maint_moved(fd); break; case FILEDATA_CHANGE_COPY: @@ -253,11 +252,9 @@ void file_data_notify_ci(FileData *fd) case FILEDATA_CHANGE_RENAME: collection_maint_renamed(fd); - layout_maint_renamed(fd); view_window_maint_moved(fd); break; case FILEDATA_CHANGE_DELETE: - layout_maint_removed(fd, NULL); view_window_maint_removed(fd, NULL); collection_maint_removed(fd); -- 2.20.1