gnome-initial-setup/welcome-screen.patch

234 lines
9.4 KiB
Diff

From 19fe2ffa60b4998be6a77c69e449b30c2df99fb1 Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@igalia.com>
Date: Thu, 15 Feb 2018 21:08:38 -0600
Subject: [PATCH 1/2] Show welcome screen if language page is skipped
We can't *really* skip the language page, because we need to display some
sort of welcome screen. In this case, let's just hide the language
selection element. To make this look decent, the icon needs to be a bit
bigger, and we need to center everything. Turns out, these changes look
fine even when the language page is not skipped, so they don't need to
be conditional on that.
https://bugzilla.gnome.org/show_bug.cgi?id=793501
---
gnome-initial-setup/gnome-initial-setup.c | 7 +-
.../pages/language/gis-language-page.c | 113 +++++++++++++++++----
.../pages/language/gis-language-page.h | 1 +
.../pages/language/gis-language-page.ui | 6 +-
4 files changed, 102 insertions(+), 25 deletions(-)
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index 5671cae..6cca10b 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -186,8 +186,13 @@ rebuild_pages_cb (GisDriver *driver)
if (page_data->new_user_only && !is_new_user)
continue;
- if (should_skip_page (driver, page_data->page_id, skip_pages))
+ if (should_skip_page (driver, page_data->page_id, skip_pages)) {
+ /* Language page is special, because we always want to show the greeeting
+ * even if this page is to be skipped. */
+ if (strcmp (page_data->page_id, "language") == 0)
+ gis_prepare_language_page_without_language_selection (driver);
continue;
+ }
page_data->prepare_page_func (driver);
}
diff --git a/gnome-initial-setup/pages/language/gis-language-page.c b/gnome-initial-setup/pages/language/gis-language-page.c
index ea94c82..2349103 100644
--- a/gnome-initial-setup/pages/language/gis-language-page.c
+++ b/gnome-initial-setup/pages/language/gis-language-page.c
@@ -45,6 +45,7 @@ struct _GisLanguagePagePrivate
GtkWidget *logo;
GtkWidget *welcome_widget;
GtkWidget *language_chooser;
+ gboolean show_language_chooser;
GDBusProxy *localed;
GPermission *permission;
@@ -56,6 +57,53 @@ typedef struct _GisLanguagePagePrivate GisLanguagePagePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (GisLanguagePage, gis_language_page, GIS_TYPE_PAGE);
+enum
+{
+ PROP_0,
+ PROP_SHOW_LANGUAGE_CHOOSER,
+ PROP_LAST,
+};
+
+static GParamSpec *obj_props[PROP_LAST];
+
+static void
+gis_language_page_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GisLanguagePage *page = GIS_LANGUAGE_PAGE (object);
+ GisLanguagePagePrivate *priv = gis_language_page_get_instance_private (page);
+ switch (prop_id)
+ {
+ case PROP_SHOW_LANGUAGE_CHOOSER:
+ g_value_set_boolean (value, priv->show_language_chooser);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gis_language_page_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GisLanguagePage *page = GIS_LANGUAGE_PAGE (object);
+ GisLanguagePagePrivate *priv = gis_language_page_get_instance_private (page);
+ switch (prop_id)
+ {
+ case PROP_SHOW_LANGUAGE_CHOOSER:
+ priv->show_language_chooser = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
static void
set_localed_locale (GisLanguagePage *self)
{
@@ -259,28 +307,33 @@ gis_language_page_constructed (GObject *object)
update_distro_logo (page);
- g_signal_connect (priv->language_chooser, "notify::language",
- G_CALLBACK (language_changed), page);
- g_signal_connect (priv->language_chooser, "confirm",
- G_CALLBACK (language_confirmed), 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 (priv->show_language_chooser)
{
- priv->permission = polkit_permission_new_sync ("org.freedesktop.locale1.set-locale", NULL, NULL, NULL);
-
- bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
- g_dbus_proxy_new (bus,
- G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
- NULL,
- "org.freedesktop.locale1",
- "/org/freedesktop/locale1",
- "org.freedesktop.locale1",
- priv->cancellable,
- (GAsyncReadyCallback) localed_proxy_ready,
- object);
- g_object_unref (bus);
- }
+ 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",
+ G_CALLBACK (language_confirmed), 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)
+ {
+ priv->permission = polkit_permission_new_sync ("org.freedesktop.locale1.set-locale", NULL, NULL, NULL);
+
+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+ g_dbus_proxy_new (bus,
+ G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES,
+ NULL,
+ "org.freedesktop.locale1",
+ "/org/freedesktop/locale1",
+ "org.freedesktop.locale1",
+ priv->cancellable,
+ (GAsyncReadyCallback) localed_proxy_ready,
+ object);
+ g_object_unref (bus);
+ }
+ }
gis_page_set_complete (GIS_PAGE (page), TRUE);
gtk_widget_show (GTK_WIDGET (page));
@@ -321,6 +374,14 @@ gis_language_page_class_init (GisLanguagePageClass *klass)
page_class->locale_changed = gis_language_page_locale_changed;
object_class->constructed = gis_language_page_constructed;
object_class->dispose = gis_language_page_dispose;
+ object_class->get_property = gis_language_page_get_property;
+ object_class->set_property = gis_language_page_set_property;
+
+ obj_props[PROP_SHOW_LANGUAGE_CHOOSER] =
+ g_param_spec_boolean ("show-language-chooser", "", "", TRUE,
+ G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+
+ g_object_class_install_properties (object_class, PROP_LAST, obj_props);
}
static void
@@ -341,3 +402,13 @@ gis_prepare_language_page (GisDriver *driver)
"driver", driver,
NULL));
}
+
+void
+gis_prepare_language_page_without_language_selection (GisDriver *driver)
+{
+ gis_driver_add_page (driver,
+ g_object_new (GIS_TYPE_LANGUAGE_PAGE,
+ "driver", driver,
+ "show-language-chooser", FALSE,
+ NULL));
+}
diff --git a/gnome-initial-setup/pages/language/gis-language-page.h b/gnome-initial-setup/pages/language/gis-language-page.h
index 37b33ab..a3a30f3 100644
--- a/gnome-initial-setup/pages/language/gis-language-page.h
+++ b/gnome-initial-setup/pages/language/gis-language-page.h
@@ -51,6 +51,7 @@ struct _GisLanguagePageClass
GType gis_language_page_get_type (void);
void gis_prepare_language_page (GisDriver *driver);
+void gis_prepare_language_page_without_language_selection (GisDriver *driver);
G_END_DECLS
diff --git a/gnome-initial-setup/pages/language/gis-language-page.ui b/gnome-initial-setup/pages/language/gis-language-page.ui
index 1b98a6d..50605a3 100644
--- a/gnome-initial-setup/pages/language/gis-language-page.ui
+++ b/gnome-initial-setup/pages/language/gis-language-page.ui
@@ -7,13 +7,13 @@
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="halign">center</property>
- <property name="valign">fill</property>
+ <property name="valign">center</property>
<child>
<object class="GtkImage" id="logo">
<property name="visible" bind-source="GisLanguagePage" bind-property="small-screen" bind-flags="invert-boolean|sync-create"/>
<property name="can_focus">False</property>
<property name="margin_top">24</property>
- <property name="pixel_size">96</property>
+ <property name="pixel_size">128</property>
<property name="icon_name">start-here-symbolic</property>
</object>
</child>
@@ -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">True</property>
+ <property name="visible">False</property>
<property name="valign">start</property>
</object>
</child>
--
2.14.3