Reapply 'call notify functions in in an idle call'
authorKlaus Ethgen <Klaus@Ethgen.de>
Tue, 2 Oct 2012 22:07:47 +0000 (23:07 +0100)
committerKlaus Ethgen <Klaus@Ethgen.de>
Tue, 2 Oct 2012 22:07:47 +0000 (23:07 +0100)
085be43cb79e04341102a9922e0e0f531454089a did some regression that should
have fixed this.

src/filedata.c

index 4b7e70e..e0d70f0 100644 (file)
@@ -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;