[gnome-control-center] user-accounts: Avoid multiple language dialogues



commit 05bef7fba76e03d200c61e3ba5a6d342ccd761ef
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Jan 21 15:11:29 2011 +0000

    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 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c
index c24fec2..c05c7b0 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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]