[gnome-initial-setup] Allow skipping pages only in new/existing user modes



commit b430a6aa3d620f894e63a482ed6570eb70239d7c
Author: Michael Catanzaro <mcatanzaro igalia com>
Date:   Thu Feb 15 21:12:08 2018 -0600

    Allow skipping pages only in new/existing user modes
    
    This makes the skip file a bit more powerful. Instead of specifying
    pages that will always be skipped, it's now possible to specify pages to
    be skipped in just new user mode or just existing user mode. This way we
    can hide pages that are redundant with distro installers in new user
    mode (firstboot), but still show them otherwise.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=793501

 gnome-initial-setup/gnome-initial-setup.c          |   52 ++++++++++++++++----
 .../pages/language/gis-language-page.c             |    2 -
 .../pages/language/gis-language-page.ui            |    2 +-
 3 files changed, 43 insertions(+), 13 deletions(-)
---
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index 594c11e..5888a8c 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -50,7 +50,9 @@
 #include "pages/summary/gis-summary-page.h"
 
 #define VENDOR_PAGES_GROUP "pages"
-#define VENDOR_PAGES_SKIP_KEY "skip"
+#define VENDOR_SKIP_KEY "skip"
+#define VENDOR_NEW_USER_ONLY_KEY "new_user_only"
+#define VENDOR_EXISTING_USER_ONLY_KEY "existing_user_only"
 
 static gboolean force_existing_user_mode;
 
@@ -103,21 +105,40 @@ should_skip_page (GisDriver    *driver,
 }
 
 static gchar **
-pages_to_skip_from_file (void)
+strv_append (gchar **a,
+             gchar **b)
+{
+  guint n = g_strv_length (a);
+  guint m = g_strv_length (b);
+
+  a = g_renew (gchar *, a, n + m + 1);
+  for (guint i = 0; i < m; i++)
+    a[n + i] = g_strdup (b[i]);
+  a[n + m] = NULL;
+
+  return a;
+}
+
+static gchar **
+pages_to_skip_from_file (gboolean is_new_user)
 {
   GKeyFile *skip_pages_file;
   gchar **skip_pages = NULL;
+  gchar **additional_skip_pages = NULL;
   GError *error = NULL;
 
   /* VENDOR_CONF_FILE points to a keyfile containing vendor customization
    * options. This code will look for options under the "pages" group, and
    * supports the following keys:
-   *   - skip (optional): list of pages to be skipped.
+   *   - skip (optional): list of pages to be skipped always
+   *   - new_user_only (optional): list of pages to be skipped in existing user mode
+   *   - existing_user_only (optional): list of pages to be skipped in new user mode
    *
-   * This is how this file would look on a vendor image:
+   * This is how this file might look on a vendor image:
    *
    *   [pages]
-   *   skip=language
+   *   skip=timezone
+   *   existing_user_only=language;keyboard
    */
   skip_pages_file = g_key_file_new ();
   if (!g_key_file_load_from_file (skip_pages_file, VENDOR_CONF_FILE,
@@ -129,8 +150,20 @@ pages_to_skip_from_file (void)
     goto out;
   }
 
-  skip_pages = g_key_file_get_string_list (skip_pages_file, VENDOR_PAGES_GROUP,
-                                           VENDOR_PAGES_SKIP_KEY, NULL, NULL);
+  skip_pages = g_key_file_get_string_list (skip_pages_file,
+                                           VENDOR_PAGES_GROUP,
+                                           VENDOR_SKIP_KEY, NULL, NULL);
+  additional_skip_pages = g_key_file_get_string_list (skip_pages_file,
+                                                      VENDOR_PAGES_GROUP,
+                                                      is_new_user ? VENDOR_EXISTING_USER_ONLY_KEY : 
VENDOR_NEW_USER_ONLY_KEY,
+                                                      NULL, NULL);
+
+  if (!skip_pages && additional_skip_pages) {
+    skip_pages = additional_skip_pages;
+  } else if (skip_pages && additional_skip_pages) {
+    skip_pages = strv_append (skip_pages, additional_skip_pages);
+    g_strfreev (additional_skip_pages);
+  }
 
  out:
   g_key_file_free (skip_pages_file);
@@ -169,9 +202,6 @@ rebuild_pages_cb (GisDriver *driver)
 
   assistant = gis_driver_get_assistant (driver);
   current_page = gis_assistant_get_current_page (assistant);
-
-  skip_pages = pages_to_skip_from_file ();
-
   page_data = page_table;
 
   g_ptr_array_free (skipped_pages, TRUE);
@@ -188,6 +218,8 @@ rebuild_pages_cb (GisDriver *driver)
   }
 
   is_new_user = (gis_driver_get_mode (driver) == GIS_DRIVER_MODE_NEW_USER);
+  skip_pages = pages_to_skip_from_file (is_new_user);
+
   for (; page_data->page_id != NULL; ++page_data) {
     skipped = FALSE;
 
diff --git a/gnome-initial-setup/pages/language/gis-language-page.c 
b/gnome-initial-setup/pages/language/gis-language-page.c
index c5f895c..d0f1c5d 100644
--- a/gnome-initial-setup/pages/language/gis-language-page.c
+++ b/gnome-initial-setup/pages/language/gis-language-page.c
@@ -267,8 +267,6 @@ gis_language_page_constructed (GObject *object)
 
   update_distro_logo (page);
 
-  gtk_widget_show (priv->language_chooser);
-
   g_signal_connect (priv->language_chooser, "notify::language",
                     G_CALLBACK (language_changed), page);
   g_signal_connect (priv->language_chooser, "confirm",
diff --git a/gnome-initial-setup/pages/language/gis-language-page.ui 
b/gnome-initial-setup/pages/language/gis-language-page.ui
index d5e962a..17347ae 100644
--- a/gnome-initial-setup/pages/language/gis-language-page.ui
+++ b/gnome-initial-setup/pages/language/gis-language-page.ui
@@ -30,7 +30,7 @@
           <object class="CcLanguageChooser" id="language_chooser">
             <property name="margin_bottom">18</property>
             <property name="width_request">400</property>
-            <property name="visible">False</property>
+            <property name="visible">True</property>
             <property name="valign">start</property>
           </object>
         </child>


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