changeset 1455:2545780d4779

fixed keyword tree redrawing
author nadvornik
date Tue, 17 Mar 2009 18:30:53 +0000
parents fbd02e4d709e
children b24391991f7f
files src/bar_keywords.c
diffstat 1 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/bar_keywords.c	Tue Mar 17 00:05:13 2009 +0000
+++ b/src/bar_keywords.c	Tue Mar 17 18:30:53 2009 +0000
@@ -109,7 +109,8 @@
 	gboolean expand_checked;
 	gboolean collapse_unchecked;
 	gboolean hide_unchecked;
-	
+
+	gint idle_id;	
 	FileData *fd;
 	gchar *key;
 };
@@ -416,7 +417,7 @@
 	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;
 
@@ -424,6 +425,17 @@
 	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);
 }
 
 
@@ -1182,7 +1194,7 @@
 	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);
@@ -1214,6 +1226,8 @@
 	pkd->key = g_strdup(key);
 	
 	pkd->expand_checked = TRUE;
+	
+	pkd->idle_id = -1;
 
 	hbox = gtk_hbox_new(FALSE, PREF_PAD_GAP);