gboolean expand_checked;
gboolean collapse_unchecked;
gboolean hide_unchecked;
-
+
+ gint idle_id;
FileData *fd;
gchar *key;
};
if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_METADATA)) && fd == pkd->fd) bar_pane_keywords_update(pkd);
}
-static void bar_pane_keywords_changed(GtkTextBuffer *buffer, gpointer data)
+static gboolean bar_pane_keywords_changed_idle_cb(gpointer data)
{
PaneKeywordsData *pkd = data;
bar_pane_keywords_write(pkd);
bar_keyword_tree_sync(pkd);
file_data_register_notify_func(bar_pane_keywords_notify_cb, pkd, NOTIFY_PRIORITY_LOW);
+ pkd->idle_id = -1;
+ return FALSE;
+}
+
+static void bar_pane_keywords_changed(GtkTextBuffer *buffer, gpointer data)
+{
+ PaneKeywordsData *pkd = data;
+
+ if (pkd->idle_id != -1) return;
+ /* higher prio than redraw */
+ pkd->idle_id = g_idle_add_full(G_PRIORITY_HIGH_IDLE, bar_pane_keywords_changed_idle_cb, pkd, NULL);
}
PaneKeywordsData *pkd = data;
if (pkd->click_tpath) gtk_tree_path_free(pkd->click_tpath);
-
+ if (pkd->idle_id != -1) g_source_remove(pkd->idle_id);
file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd);
file_data_unref(pkd->fd);
pkd->key = g_strdup(key);
pkd->expand_checked = TRUE;
+
+ pkd->idle_id = -1;
hbox = gtk_hbox_new(FALSE, PREF_PAD_GAP);