** Fix for bug #529179

2008-04-23  Milan Crha  <mcrha@redhat.com>

	** Fix for bug #529179

	* em-folder-browser.c: (struct _EMFolderBrowserPrivate),
	(labels_changed_idle_cb), (gconf_labels_changed), (emfb_destroy):
	Rebuild search menu rather on idle, then immediately after the change
	in gconf, because other parts may not have this change propagated yet.


svn path=/trunk/; revision=35408
This commit is contained in:
Milan Crha
2008-04-23 09:06:31 +00:00
committed by Milan Crha
parent 4b831234e0
commit 0696568dc9
2 changed files with 32 additions and 2 deletions

View File

@ -1,3 +1,12 @@
2008-04-23 Milan Crha <mcrha@redhat.com>
** Fix for bug #529179
* em-folder-browser.c: (struct _EMFolderBrowserPrivate),
(labels_changed_idle_cb), (gconf_labels_changed), (emfb_destroy):
Rebuild search menu rather on idle, then immediately after the change
in gconf, because other parts may not have this change propagated yet.
2008-04-22 Matthew Barnes <mbarnes@redhat.com>
** Fixes bug #458505

View File

@ -130,6 +130,7 @@ struct _EMFolderBrowserPrivate {
EMMenu *menu; /* toplevel menu manager */
guint labels_change_notify_id; /* mail_config's notify id */
guint labels_change_idle_id; /* rebuild menu on idle, when all know about a change */
};
typedef struct EMFBSearchBarItem {
@ -436,13 +437,27 @@ html_scroll (GtkHTML *html,
}
}
static gboolean
labels_changed_idle_cb (gpointer user_data)
{
EMFolderBrowser *emfb = (EMFolderBrowser*) user_data;
emfb_realize (GTK_WIDGET (emfb));
emfb->priv->labels_change_idle_id = 0;
return FALSE;
}
static void
gconf_labels_changed (GConfClient *client, guint cnxn_id,
GConfEntry *entry, gpointer user_data)
{
EMFolderBrowser *emfb = (EMFolderBrowser*) user_data;
/* regenerate menu option whenever something changed in labels */
if (user_data)
emfb_realize (user_data);
if (emfb && !emfb->priv->labels_change_idle_id)
emfb->priv->labels_change_idle_id = g_idle_add (labels_changed_idle_cb, emfb);
}
static void
@ -580,6 +595,12 @@ emfb_destroy(GtkObject *o)
emfb->priv->labels_change_notify_id = 0;
}
if (emfb->priv->labels_change_idle_id) {
g_source_remove (emfb->priv->labels_change_idle_id);
emfb->priv->labels_change_idle_id = 0;
}
((GtkObjectClass *)emfb_parent)->destroy(o);
}