From 490bdc1dddfb20114ddb8bee6fc021797d13ff03 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 10 Aug 2006 12:08:51 +0000 Subject: Remove the idle source in ::finalize... 2006-08-10 Emmanuele Bassi * gtk/gtkrecentchoosermenu.c: (gtk_recent_chooser_menu_finalize): Remove the idle source in ::finalize... (idle_populate_func), (idle_populate_clean_up): ...and reset the idle source id at the end of the idle loop while we hold the GDK mutex lock. (#350605, reported by Wouter Bolsterlee, patch by Chris Wilson) --- gtk/gtkrecentchoosermenu.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'gtk') diff --git a/gtk/gtkrecentchoosermenu.c b/gtk/gtkrecentchoosermenu.c index 54ee86302e..1e066744b3 100644 --- a/gtk/gtkrecentchoosermenu.c +++ b/gtk/gtkrecentchoosermenu.c @@ -250,6 +250,9 @@ gtk_recent_chooser_menu_finalize (GObject *object) g_signal_handler_disconnect (priv->manager, priv->manager_changed_id); priv->manager_changed_id = 0; + if (priv->populate_id) + g_source_remove (priv->populate_id); + priv->manager = NULL; if (priv->sort_data_destroy) @@ -952,7 +955,10 @@ idle_populate_func (gpointer data) GDK_THREADS_ENTER (); pdata = (MenuPopulateData *) data; - + priv = pdata->menu->priv; + + priv->populate_id = 0; + if (!pdata->items) { pdata->items = gtk_recent_chooser_get_items (GTK_RECENT_CHOOSER (pdata->menu)); @@ -984,7 +990,6 @@ idle_populate_func (gpointer data) } info = g_list_nth_data (pdata->items, pdata->loaded_items); - priv = pdata->menu->priv; /* skip non-local items on request */ if (priv->local_only && @@ -1062,11 +1067,7 @@ check_and_return: static void idle_populate_clean_up (gpointer data) { - MenuPopulateData *pdata = data; - - pdata->menu->priv->populate_id = 0; - - g_slice_free (MenuPopulateData, pdata); + g_slice_free (MenuPopulateData, data); } static void -- cgit v1.2.1