X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=blobdiff_plain;f=src%2Ffiledata.c;h=e0d70f0050b4feb87a8c2a8c861a855049cbc274;hp=4b7e70e4158a5520d6e1f53eae92606c7303535f;hb=336210a46a6e7de9a439b576f9cd45c9d95b3718;hpb=0e46881846cb13fad7218d04b32ed95249c641ab diff --git a/src/filedata.c b/src/filedata.c index 4b7e70e4..e0d70f00 100644 --- a/src/filedata.c +++ b/src/filedata.c @@ -2638,6 +2638,12 @@ GList *file_data_process_groups_in_selection(GList *list, gboolean ungroup, GLis implementation in view_file_list.c */ +typedef struct _NotifyIdleData NotifyIdleData; + +struct _NotifyIdleData { + FileData *fd; + NotifyType type; +}; typedef struct _NotifyData NotifyData; @@ -2711,17 +2717,29 @@ gboolean file_data_unregister_notify_func(FileDataNotifyFunc func, gpointer data } -void file_data_send_notification(FileData *fd, NotifyType type) +gboolean file_data_send_notification_idle_cb(gpointer data) { + NotifyIdleData *nid = (NotifyIdleData *)data; GList *work = notify_func_list; while (work) { NotifyData *nd = (NotifyData *)work->data; - nd->func(fd, type, nd->data); + nd->func(nid->fd, nid->type, nd->data); work = work->next; } + file_data_unref(nid->fd); + g_free(nid); + return FALSE; +} + +void file_data_send_notification(FileData *fd, NotifyType type) +{ + NotifyIdleData *nid = g_new0(NotifyIdleData, 1); + nid->fd = file_data_ref(fd); + nid->type = type; + g_idle_add_full(G_PRIORITY_HIGH, file_data_send_notification_idle_cb, nid, NULL); } static GHashTable *file_data_monitor_pool = NULL;