[gnome-initial-setup/shell/4765: 4/362] driver: set initial language from personality



commit f832d403a65b2165ce4b3187b757d64215409d15
Author: Cosimo Cecchi <cosimo endlessm com>
Date:   Thu Apr 17 15:41:02 2014 -0700

    driver: set initial language from personality

 gnome-initial-setup/gis-driver.c                   |   37 ++++++++++++++++++++
 gnome-initial-setup/gis-driver.h                   |    2 +
 .../pages/language/gis-language-page.c             |   10 +++++-
 3 files changed, 48 insertions(+), 1 deletions(-)
---
diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
index 0dea62b..8836312 100644
--- a/gnome-initial-setup/gis-driver.c
+++ b/gnome-initial-setup/gis-driver.c
@@ -32,6 +32,10 @@
 
 #define GIS_TYPE_DRIVER_MODE (gis_driver_mode_get_type ())
 
+#define PERSONALITY_FILE_PATH "/etc/EndlessOS/personality.conf"
+#define INITIAL_CONFIG_GROUP "Setup"
+#define LANGUAGE_KEY "DefaultLanguage"
+
 /* Statically include this for now. Maybe later
  * we'll generate this from glib-mkenums. */
 GType
@@ -73,6 +77,7 @@ struct _GisDriverPrivate {
   const gchar *user_password;
 
   gchar *lang_id;
+  gchar *lang_override;
 
   GisDriverMode mode;
 };
@@ -87,6 +92,7 @@ gis_driver_finalize (GObject *object)
   GisDriverPrivate *priv = gis_driver_get_instance_private (driver);
 
   g_free (priv->lang_id);
+  g_free (priv->lang_override);
 
   G_OBJECT_CLASS (gis_driver_parent_class)->finalize (object);
 }
@@ -188,6 +194,13 @@ gis_driver_get_mode (GisDriver *driver)
   return priv->mode;
 }
 
+const gchar *
+gis_driver_get_language_override (GisDriver *driver)
+{
+  GisDriverPrivate *priv = gis_driver_get_instance_private (driver);
+  return priv->lang_override;  
+}
+
 static void
 gis_driver_get_property (GObject      *object,
                          guint         prop_id,
@@ -249,6 +262,28 @@ window_realize_cb (GtkWidget *widget, gpointer user_data)
 }
 
 static void
+gis_driver_read_personality_file (GisDriver *driver)
+{
+  GisDriverPrivate *priv = gis_driver_get_instance_private (driver);
+  GKeyFile *keyfile = g_key_file_new ();
+  gchar *language = NULL;
+
+  if (g_key_file_load_from_file (keyfile, PERSONALITY_FILE_PATH,
+                                 G_KEY_FILE_NONE, NULL)) {
+    language = g_key_file_get_string (keyfile, INITIAL_CONFIG_GROUP,
+                                      LANGUAGE_KEY, NULL);
+  }
+
+  g_free (priv->lang_override);
+  priv->lang_override = language;
+  if (language) {
+    setlocale (LC_MESSAGES, language);
+  }
+
+  g_key_file_free (keyfile);
+}
+
+static void
 gis_driver_startup (GApplication *app)
 {
   GisDriver *driver = GIS_DRIVER (app);
@@ -256,6 +291,8 @@ gis_driver_startup (GApplication *app)
 
   G_APPLICATION_CLASS (gis_driver_parent_class)->startup (app);
 
+  gis_driver_read_personality_file (driver);
+
   priv->main_window = g_object_new (GTK_TYPE_APPLICATION_WINDOW,
                                     "application", app,
                                     "type", GTK_WINDOW_TOPLEVEL,
diff --git a/gnome-initial-setup/gis-driver.h b/gnome-initial-setup/gis-driver.h
index ff079df..f382a09 100644
--- a/gnome-initial-setup/gis-driver.h
+++ b/gnome-initial-setup/gis-driver.h
@@ -76,6 +76,8 @@ void gis_driver_set_user_language (GisDriver   *driver,
 
 const gchar *gis_driver_get_user_language (GisDriver   *driver);
 
+const gchar *gis_driver_get_language_override (GisDriver *driver);
+
 GisDriverMode gis_driver_get_mode (GisDriver *driver);
 
 void gis_driver_add_page (GisDriver *driver,
diff --git a/gnome-initial-setup/pages/language/gis-language-page.c 
b/gnome-initial-setup/pages/language/gis-language-page.c
index d7f6bb7..b71723f 100644
--- a/gnome-initial-setup/pages/language/gis-language-page.c
+++ b/gnome-initial-setup/pages/language/gis-language-page.c
@@ -192,6 +192,8 @@ gis_language_page_constructed (GObject *object)
 {
   GisLanguagePage *page = GIS_LANGUAGE_PAGE (object);
   GisLanguagePagePrivate *priv = gis_language_page_get_instance_private (page);
+  GisDriver *driver = GIS_PAGE (page)->driver;
+  const gchar *lang_override;
   GDBusConnection *bus;
 
   g_type_ensure (CC_TYPE_LANGUAGE_CHOOSER);
@@ -201,12 +203,18 @@ gis_language_page_constructed (GObject *object)
   gtk_container_add (GTK_CONTAINER (page), WID ("language-page"));
 
   priv->language_chooser = WID ("language-chooser");
+
+  lang_override = gis_driver_get_language_override (driver);
+  if (lang_override) {
+    cc_language_chooser_set_language (CC_LANGUAGE_CHOOSER (priv->language_chooser), lang_override);
+  }
+
   g_signal_connect (priv->language_chooser, "notify::language",
                     G_CALLBACK (language_changed), page);
 
 
   /* If we're in new user mode then we're manipulating system settings */
-  if (gis_driver_get_mode (GIS_PAGE (page)->driver) == GIS_DRIVER_MODE_NEW_USER)
+  if (gis_driver_get_mode (driver) == GIS_DRIVER_MODE_NEW_USER)
     {
       priv->permission = polkit_permission_new_sync ("org.freedesktop.locale1.set-locale", NULL, NULL, NULL);
 


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