From 05bef7fba76e03d200c61e3ba5a6d342ccd761ef Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 21 Jan 2011 15:11:29 +0000 Subject: [PATCH] user-accounts: Avoid multiple language dialogues If the changed signal was emitted again before we got a chance to create the language dialogue in the idle handler, we'd end up with two (or more) dialogues. --- panels/user-accounts/um-user-panel.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c index c24fec29c..c05c7b06d 100644 --- a/panels/user-accounts/um-user-panel.c +++ b/panels/user-accounts/um-user-panel.c @@ -71,6 +71,7 @@ struct _UmUserPanelPrivate { GtkWidget *lock_button; GPermission *permission; GtkWidget *language_chooser; + guint language_chooser_idle; UmAccountDialog *account_dialog; UmPasswordDialog *password_dialog; @@ -653,6 +654,8 @@ finish_language_chooser (UmUserPanelPrivate *d) gtk_window_present (GTK_WINDOW (d->language_chooser)); gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE); + d->language_chooser_idle = 0; + return FALSE; } @@ -687,12 +690,16 @@ language_changed (UmEditableCombo *combo, return; } + /* Already in flight? */ + if (d->language_chooser_idle > 0) + return; + cursor = gdk_cursor_new (GDK_WATCH); gdk_window_set_cursor (gtk_widget_get_window (gtk_widget_get_toplevel (d->notebook)), cursor); gdk_cursor_unref (cursor); - g_idle_add ((GSourceFunc)finish_language_chooser, d); + d->language_chooser_idle = g_idle_add ((GSourceFunc)finish_language_chooser, d); } static void @@ -1259,6 +1266,10 @@ um_user_panel_dispose (GObject *object) um_photo_dialog_free (priv->photo_dialog); priv->photo_dialog = NULL; } + if (priv->language_chooser_idle > 0) { + g_source_remove (priv->language_chooser_idle); + priv->language_chooser_idle = 0; + } if (priv->language_chooser) { gtk_widget_destroy (priv->language_chooser); priv->language_chooser = NULL;