[gnome-control-center] user-accounts: Fix timeout hack to not crash
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] user-accounts: Fix timeout hack to not crash
- Date: Tue, 25 Jan 2011 18:45:42 +0000 (UTC)
commit 226aa064aa4628754dc8d9ed42893843d59e07eb
Author: Bastien Nocera <hadess hadess net>
Date: Tue Jan 25 18:33:47 2011 +0000
user-accounts: Fix timeout hack to not crash
Could end up crashing the way we implemented it.
panels/user-accounts/um-language-dialog.c | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/panels/user-accounts/um-language-dialog.c b/panels/user-accounts/um-language-dialog.c
index b2c83f0..b79749b 100644
--- a/panels/user-accounts/um-language-dialog.c
+++ b/panels/user-accounts/um-language-dialog.c
@@ -181,6 +181,14 @@ um_add_user_languages (GtkTreeModel *model)
g_hash_table_destroy (user_langs);
}
+static void
+remove_timeout (gpointer data,
+ GObject *where_the_object_was)
+{
+ guint timeout = GPOINTER_TO_UINT (data);
+ g_source_remove (timeout);
+}
+
static gboolean
finish_um_language_chooser (gpointer user_data)
{
@@ -189,6 +197,7 @@ finish_um_language_chooser (gpointer user_data)
GtkTreeModel *model;
GtkWindow *parent;
GHashTable *user_langs;
+ guint timeout;
/* Did we get called after the widget was destroyed? */
if (chooser == NULL)
@@ -204,6 +213,8 @@ finish_um_language_chooser (gpointer user_data)
gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (parent)), NULL);
g_object_set_data (G_OBJECT (chooser), "user-langs", NULL);
+ timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (chooser), "timeout"));
+ g_object_weak_unref (G_OBJECT (chooser), (GWeakNotify) remove_timeout, GUINT_TO_POINTER (timeout));
return FALSE;
}
@@ -220,6 +231,7 @@ um_language_chooser_new (GtkWidget *parent)
GtkTreeModel *model;
GHashTable *user_langs;
GdkCursor *cursor;
+ guint timeout;
builder = gtk_builder_new ();
filename = UIDIR "/language-chooser.ui";
@@ -254,8 +266,9 @@ um_language_chooser_new (GtkWidget *parent)
g_object_set_data_full (G_OBJECT (chooser), "user-langs",
user_langs, (GDestroyNotify) g_hash_table_destroy);
- g_object_add_weak_pointer (G_OBJECT (chooser), (gpointer *) &chooser);
- g_idle_add ((GSourceFunc) finish_um_language_chooser, chooser);
+ timeout = g_idle_add ((GSourceFunc) finish_um_language_chooser, chooser);
+ g_object_set_data (G_OBJECT (chooser), "timeout", GUINT_TO_POINTER (timeout));
+ g_object_weak_ref (G_OBJECT (chooser), (GWeakNotify) remove_timeout, GUINT_TO_POINTER (timeout));
g_object_unref (builder);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]