[gnome-control-center] user-accounts: Avoid multiple language dialogues
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] user-accounts: Avoid multiple language dialogues
- Date: Fri, 21 Jan 2011 15:13:18 +0000 (UTC)
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]