[gnome-control-center] region: Make locale comparison quicker



commit 41c56ba6bbebf2da3eb8cba9462f57f206930e7e
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Nov 23 18:58:02 2012 +0100

    region: Make locale comparison quicker
    
    No need to hit D-Bus every time.

 panels/region/gnome-region-panel-lang.c |   21 ++++++++++++++-------
 1 files changed, 14 insertions(+), 7 deletions(-)
---
diff --git a/panels/region/gnome-region-panel-lang.c b/panels/region/gnome-region-panel-lang.c
index a5ef664..cd33dc5 100644
--- a/panels/region/gnome-region-panel-lang.c
+++ b/panels/region/gnome-region-panel-lang.c
@@ -36,6 +36,7 @@
 
 static GDBusProxy *proxy = NULL;
 static GDBusProxy *sm_proxy = NULL;
+static char *old_locale = NULL;
 
 static void
 logout_requested (GtkButton *button,
@@ -60,13 +61,11 @@ logout_requested (GtkButton *button,
 		g_variant_unref (res);
 }
 
-static gboolean
-is_old_locale (const char *new_locale)
+static void
+set_old_locale (void)
 {
 	GError *error = NULL;
 	GVariant *variant;
-	char *old_locale;
-	gboolean ret = FALSE;
 
 	variant = g_dbus_proxy_call_sync (sm_proxy,
 					  "GetLocale",
@@ -78,18 +77,24 @@ is_old_locale (const char *new_locale)
 	if (variant == NULL) {
 		g_warning ("Could not get current locale: %s", error->message);
 		g_error_free (error);
-		return FALSE;
+		return;
 	}
 
 	g_variant_get (variant, "(s)", &old_locale);
 
+	g_variant_unref (variant);
+}
+
+static gboolean
+is_old_locale (const char *new_locale)
+{
+	gboolean ret = FALSE;
+
 	g_debug ("Comparing locale '%s' (old) and '%s' (new)",
 		 old_locale, new_locale);
 	if (g_strcmp0 (old_locale, new_locale) == 0)
 		ret = TRUE;
 
-	g_free (old_locale);
-
 	return ret;
 }
 
@@ -328,6 +333,8 @@ setup_language (GtkBuilder *builder)
 		g_error_free (error);
 	} else {
 		g_object_weak_ref (G_OBJECT (treeview), (GWeakNotify) g_object_unref, sm_proxy);
+		set_old_locale ();
+		g_object_weak_ref (G_OBJECT (treeview), (GWeakNotify) g_free, old_locale);
 	}
 
 	/* Add user languages */



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