More keyboard configuration updates
This commit is contained in:
parent
10dec1d365
commit
a2c0811c9b
82
0001-keyboard-stop-setting-current-input-source.patch
Normal file
82
0001-keyboard-stop-setting-current-input-source.patch
Normal file
@ -0,0 +1,82 @@
|
||||
From 7dcd4e1b699a84d14de3c2686d0c6fbea64b2914 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Catanzaro <mcatanzaro@redhat.com>
|
||||
Date: Tue, 22 Aug 2023 12:58:50 -0500
|
||||
Subject: [PATCH 01/11] keyboard: stop setting 'current' input source
|
||||
|
||||
This setting is deprecated and ignored since 3.22. We don't need to set
|
||||
it anymore because nothing uses it. See:
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=766847
|
||||
---
|
||||
gnome-initial-setup/pages/keyboard/gis-keyboard-page.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
index fa41230f..693bb117 100644
|
||||
--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
@@ -84,61 +84,60 @@ set_input_settings (GisKeyboardPage *self)
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
const gchar *type;
|
||||
const gchar *id;
|
||||
GVariantBuilder builder;
|
||||
GSList *l;
|
||||
gboolean is_xkb_source = FALSE;
|
||||
|
||||
type = cc_input_chooser_get_input_type (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
id = cc_input_chooser_get_input_id (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
|
||||
if (g_str_equal (type, "xkb")) {
|
||||
g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
is_xkb_source = TRUE;
|
||||
}
|
||||
|
||||
for (l = priv->system_sources; l; l = l->next) {
|
||||
const gchar *sid = l->data;
|
||||
|
||||
if (g_str_equal (id, sid) && g_str_equal (type, "xkb"))
|
||||
continue;
|
||||
|
||||
g_variant_builder_add (&builder, "(ss)", "xkb", sid);
|
||||
}
|
||||
|
||||
if (!is_xkb_source)
|
||||
g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
|
||||
g_settings_set_value (priv->input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
|
||||
- g_settings_set_uint (priv->input_settings, KEY_CURRENT_INPUT_SOURCE, 0);
|
||||
|
||||
g_settings_apply (priv->input_settings);
|
||||
}
|
||||
|
||||
static void
|
||||
set_localed_input (GisKeyboardPage *self)
|
||||
{
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
const gchar *layout, *variant;
|
||||
GString *layouts;
|
||||
GString *variants;
|
||||
GSList *l;
|
||||
|
||||
if (!priv->localed)
|
||||
return;
|
||||
|
||||
cc_input_chooser_get_layout (CC_INPUT_CHOOSER (priv->input_chooser), &layout, &variant);
|
||||
if (layout == NULL)
|
||||
layout = "";
|
||||
if (variant == NULL)
|
||||
variant = "";
|
||||
|
||||
layouts = g_string_new (layout);
|
||||
variants = g_string_new (variant);
|
||||
|
||||
#define LAYOUT(a) (a[0])
|
||||
#define VARIANT(a) (a[1] ? a[1] : "")
|
||||
for (l = priv->system_sources; l; l = l->next) {
|
||||
const gchar *sid = l->data;
|
||||
gchar **lv = g_strsplit (sid, "+", -1);
|
||||
--
|
||||
2.41.0.rc2
|
||||
|
160
0002-keyboard-write-to-mru-sources-setting-if-it-has-neve.patch
Normal file
160
0002-keyboard-write-to-mru-sources-setting-if-it-has-neve.patch
Normal file
@ -0,0 +1,160 @@
|
||||
From 6dbb638f3bda4d345e280f64c9739fd4026ef78f Mon Sep 17 00:00:00 2001
|
||||
From: Michael Catanzaro <mcatanzaro@redhat.com>
|
||||
Date: Thu, 24 Aug 2023 13:03:07 -0500
|
||||
Subject: [PATCH 02/11] keyboard: write to mru-sources setting if it has never
|
||||
been set before
|
||||
|
||||
This is a port of:
|
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/1893
|
||||
|
||||
In theory, this shouldn't matter during a firstboot scenario as
|
||||
mru-sources should not be touched yet, but gnome-initial-setup may be
|
||||
run in a different ways and it seems useful to be robust here.
|
||||
---
|
||||
.../pages/keyboard/gis-keyboard-page.c | 13 +++++++++++--
|
||||
1 file changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
index 693bb117..ad48d933 100644
|
||||
--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
@@ -17,60 +17,61 @@
|
||||
* Author: Sergey Udaltsov <svu@gnome.org>
|
||||
* Michael Wood <michael.g.wood@intel.com>
|
||||
*
|
||||
* Based on gnome-control-center cc-region-panel.c
|
||||
*/
|
||||
|
||||
#define PAGE_ID "keyboard"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <locale.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <gio/gio.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <polkit/polkit.h>
|
||||
|
||||
#define GNOME_DESKTOP_USE_UNSTABLE_API
|
||||
#include <libgnome-desktop/gnome-languages.h>
|
||||
|
||||
#include "gis-keyboard-page.h"
|
||||
#include "keyboard-resources.h"
|
||||
#include "cc-input-chooser.h"
|
||||
|
||||
#include "cc-common-language.h"
|
||||
|
||||
#include "gis-page-header.h"
|
||||
|
||||
#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.gnome.desktop.input-sources"
|
||||
#define KEY_CURRENT_INPUT_SOURCE "current"
|
||||
#define KEY_INPUT_SOURCES "sources"
|
||||
+#define KEY_MRU_SOURCES "mru-sources"
|
||||
|
||||
struct _GisKeyboardPagePrivate {
|
||||
GtkWidget *input_chooser;
|
||||
|
||||
GDBusProxy *localed;
|
||||
GCancellable *cancellable;
|
||||
GPermission *permission;
|
||||
GSettings *input_settings;
|
||||
|
||||
GSList *system_sources;
|
||||
};
|
||||
typedef struct _GisKeyboardPagePrivate GisKeyboardPagePrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GisKeyboardPage, gis_keyboard_page, GIS_TYPE_PAGE);
|
||||
|
||||
static void
|
||||
gis_keyboard_page_finalize (GObject *object)
|
||||
{
|
||||
GisKeyboardPage *self = GIS_KEYBOARD_PAGE (object);
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
|
||||
if (priv->cancellable)
|
||||
g_cancellable_cancel (priv->cancellable);
|
||||
g_clear_object (&priv->cancellable);
|
||||
|
||||
g_clear_object (&priv->permission);
|
||||
g_clear_object (&priv->localed);
|
||||
g_clear_object (&priv->input_settings);
|
||||
|
||||
g_slist_free_full (priv->system_sources, g_free);
|
||||
@@ -83,63 +84,71 @@ set_input_settings (GisKeyboardPage *self)
|
||||
{
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
const gchar *type;
|
||||
const gchar *id;
|
||||
GVariantBuilder builder;
|
||||
GSList *l;
|
||||
gboolean is_xkb_source = FALSE;
|
||||
|
||||
type = cc_input_chooser_get_input_type (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
id = cc_input_chooser_get_input_id (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
|
||||
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
|
||||
if (g_str_equal (type, "xkb")) {
|
||||
g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
is_xkb_source = TRUE;
|
||||
}
|
||||
|
||||
for (l = priv->system_sources; l; l = l->next) {
|
||||
const gchar *sid = l->data;
|
||||
|
||||
if (g_str_equal (id, sid) && g_str_equal (type, "xkb"))
|
||||
continue;
|
||||
|
||||
g_variant_builder_add (&builder, "(ss)", "xkb", sid);
|
||||
}
|
||||
|
||||
if (!is_xkb_source)
|
||||
g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
|
||||
- g_settings_set_value (priv->input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
|
||||
+ if (type != NULL && id != NULL) {
|
||||
+ GVariantBuilder mru_input_source_builder;
|
||||
|
||||
- g_settings_apply (priv->input_settings);
|
||||
+ g_variant_builder_init (&mru_input_source_builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
+ g_variant_builder_add (&mru_input_source_builder, "(ss)", type, id);
|
||||
+ g_settings_set_value (priv->input_settings, KEY_MRU_SOURCES, g_variant_builder_end (&mru_input_source_builder));
|
||||
+ }
|
||||
+
|
||||
+ g_settings_set_value (priv->input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
|
||||
+
|
||||
+ g_settings_apply (priv->input_settings);
|
||||
}
|
||||
|
||||
static void
|
||||
set_localed_input (GisKeyboardPage *self)
|
||||
{
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
const gchar *layout, *variant;
|
||||
GString *layouts;
|
||||
GString *variants;
|
||||
GSList *l;
|
||||
|
||||
if (!priv->localed)
|
||||
return;
|
||||
|
||||
cc_input_chooser_get_layout (CC_INPUT_CHOOSER (priv->input_chooser), &layout, &variant);
|
||||
if (layout == NULL)
|
||||
layout = "";
|
||||
if (variant == NULL)
|
||||
variant = "";
|
||||
|
||||
layouts = g_string_new (layout);
|
||||
variants = g_string_new (variant);
|
||||
|
||||
#define LAYOUT(a) (a[0])
|
||||
#define VARIANT(a) (a[1] ? a[1] : "")
|
||||
for (l = priv->system_sources; l; l = l->next) {
|
||||
const gchar *sid = l->data;
|
||||
gchar **lv = g_strsplit (sid, "+", -1);
|
||||
|
||||
if (!g_str_equal (LAYOUT (lv), layout) ||
|
||||
--
|
||||
2.41.0.rc2
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 810635287685db53ab320be75c992265370ff215 Mon Sep 17 00:00:00 2001
|
||||
From 58e95126c4256d339a282cc94c23508fd2258a4f Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Thu, 24 Aug 2023 21:19:40 -0400
|
||||
Subject: [PATCH 01/10] keyboard: Get default input sources from gnome-desktop
|
||||
Subject: [PATCH 03/11] keyboard: Get default input sources from gnome-desktop
|
||||
|
||||
Right now, we figure out the default input sources ourselves,
|
||||
based on the current locale and layout information coming from
|
||||
@ -16,15 +16,14 @@ The same time if leverages a gnome-desktop API to fix a bug
|
||||
where cyrillic layouts were getting added without a latin
|
||||
counterpart.
|
||||
---
|
||||
.../pages/keyboard/gis-keyboard-page.c | 313 ++++++------------
|
||||
1 file changed, 105 insertions(+), 208 deletions(-)
|
||||
.../pages/keyboard/gis-keyboard-page.c | 311 ++++++------------
|
||||
1 file changed, 106 insertions(+), 205 deletions(-)
|
||||
|
||||
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
index fa41230f..61556b99 100644
|
||||
index ad48d933..76d0b32a 100644
|
||||
--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
@@ -17,503 +17,400 @@
|
||||
* Author: Sergey Udaltsov <svu@gnome.org>
|
||||
@@ -18,510 +18,411 @@
|
||||
* Michael Wood <michael.g.wood@intel.com>
|
||||
*
|
||||
* Based on gnome-control-center cc-region-panel.c
|
||||
@ -54,6 +53,7 @@ index fa41230f..61556b99 100644
|
||||
#define GNOME_DESKTOP_INPUT_SOURCES_DIR "org.gnome.desktop.input-sources"
|
||||
#define KEY_CURRENT_INPUT_SOURCE "current"
|
||||
#define KEY_INPUT_SOURCES "sources"
|
||||
#define KEY_MRU_SOURCES "mru-sources"
|
||||
+#define KEY_INPUT_OPTIONS "xkb-options"
|
||||
|
||||
struct _GisKeyboardPagePrivate {
|
||||
@ -114,27 +114,28 @@ index fa41230f..61556b99 100644
|
||||
+ gboolean has_latin_layout = FALSE;
|
||||
gboolean is_xkb_source = FALSE;
|
||||
|
||||
- type = cc_input_chooser_get_input_type (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
- id = cc_input_chooser_get_input_id (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
type = cc_input_chooser_get_input_type (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
id = cc_input_chooser_get_input_id (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
|
||||
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
+ g_variant_builder_init (&input_source_builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
+ g_variant_builder_init (&input_options_builder, G_VARIANT_TYPE ("as"));
|
||||
|
||||
- g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
- if (g_str_equal (type, "xkb")) {
|
||||
- g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
- is_xkb_source = TRUE;
|
||||
- }
|
||||
+ if (type != NULL && id != NULL) {
|
||||
+ has_latin_layout = !gnome_input_source_is_non_latin (type, id);
|
||||
+ if (g_str_equal (type, "xkb")) {
|
||||
+ g_variant_builder_add (&input_source_builder, "(ss)", type, id);
|
||||
|
||||
- if (g_str_equal (type, "xkb")) {
|
||||
- g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
- is_xkb_source = TRUE;
|
||||
+ is_xkb_source = TRUE;
|
||||
+ }
|
||||
}
|
||||
|
||||
- for (l = priv->system_sources; l; l = l->next) {
|
||||
- const gchar *sid = l->data;
|
||||
-
|
||||
+ is_xkb_source = TRUE;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- if (g_str_equal (id, sid) && g_str_equal (type, "xkb"))
|
||||
+ for (i = 0; priv->default_input_source_ids && priv->default_input_source_ids[i] != NULL; i++) {
|
||||
+ if (g_str_equal (id, priv->default_input_source_ids[i]) && g_str_equal (type, priv->default_input_source_types[i]))
|
||||
@ -145,31 +146,37 @@ index fa41230f..61556b99 100644
|
||||
+
|
||||
+ if (!gnome_input_source_is_non_latin (priv->default_input_source_types[i], priv->default_input_source_ids[i]))
|
||||
+ has_latin_layout = TRUE;
|
||||
}
|
||||
|
||||
- if (!is_xkb_source)
|
||||
- g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
+ }
|
||||
+
|
||||
+ if (type != NULL && id != NULL) {
|
||||
+ if (!is_xkb_source) {
|
||||
+ g_variant_builder_add (&input_source_builder, "(ss)", type, id);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- g_settings_set_value (priv->input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
|
||||
- g_settings_set_uint (priv->input_settings, KEY_CURRENT_INPUT_SOURCE, 0);
|
||||
+
|
||||
+ if (!has_latin_layout) {
|
||||
+ g_variant_builder_add (&input_source_builder, "(ss)", "xkb", "us");
|
||||
+ }
|
||||
}
|
||||
|
||||
- g_settings_apply (priv->input_settings);
|
||||
- if (!is_xkb_source)
|
||||
- g_variant_builder_add (&builder, "(ss)", type, id);
|
||||
+ for (i = 0; priv->default_input_options[i] != NULL; i++) {
|
||||
+ g_variant_builder_add (&input_options_builder, "s", priv->default_input_options[i]);
|
||||
+ }
|
||||
+
|
||||
|
||||
if (type != NULL && id != NULL) {
|
||||
GVariantBuilder mru_input_source_builder;
|
||||
|
||||
g_variant_builder_init (&mru_input_source_builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
g_variant_builder_add (&mru_input_source_builder, "(ss)", type, id);
|
||||
g_settings_set_value (priv->input_settings, KEY_MRU_SOURCES, g_variant_builder_end (&mru_input_source_builder));
|
||||
}
|
||||
|
||||
- g_settings_set_value (priv->input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&builder));
|
||||
-
|
||||
+ g_settings_set_value (priv->input_settings, KEY_INPUT_SOURCES, g_variant_builder_end (&input_source_builder));
|
||||
+ g_settings_set_value (priv->input_settings, KEY_INPUT_OPTIONS, g_variant_builder_end (&input_options_builder));
|
||||
+ g_settings_set_uint (priv->input_settings, KEY_CURRENT_INPUT_SOURCE, 0);
|
||||
+ g_settings_apply (priv->input_settings);
|
||||
g_settings_apply (priv->input_settings);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -333,11 +340,10 @@ index fa41230f..61556b99 100644
|
||||
- return sources;
|
||||
-}
|
||||
-
|
||||
static void
|
||||
-static void
|
||||
-add_default_keyboard_layout (GDBusProxy *proxy,
|
||||
- GVariantBuilder *builder)
|
||||
+add_default_input_sources (GisKeyboardPage *self)
|
||||
{
|
||||
-{
|
||||
- GSList *sources = get_localed_input (proxy);
|
||||
- sources = g_slist_reverse (sources);
|
||||
-
|
||||
@ -379,11 +385,12 @@ index fa41230f..61556b99 100644
|
||||
- g_object_unref (input_settings);
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
static void
|
||||
-skip_proxy_ready (GObject *source,
|
||||
- GAsyncResult *res,
|
||||
- gpointer data)
|
||||
-{
|
||||
+add_default_input_sources (GisKeyboardPage *self)
|
||||
{
|
||||
- GisKeyboardPage *self = data;
|
||||
- GDBusProxy *proxy;
|
||||
- GError *error = NULL;
|
||||
@ -547,13 +554,14 @@ index fa41230f..61556b99 100644
|
||||
+ GisKeyboardPage *self = data;
|
||||
+ GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
+ g_autoptr (GError) error = NULL;
|
||||
+ gboolean success = FALSE;
|
||||
+ g_auto (GStrv) ids = NULL;
|
||||
+ g_auto (GStrv) types = NULL;
|
||||
+ g_auto (GStrv) options = NULL;
|
||||
+
|
||||
+ ids = gnome_get_default_input_sources_finish (res, &types, &options, &error);
|
||||
+ success = gnome_get_default_input_sources_finish (res, &ids, &types, &options, &error);
|
||||
+
|
||||
+ if (!ids) {
|
||||
+ if (!success) {
|
||||
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
+ g_warning ("Failed to fetch default input sources: %s", error->message);
|
||||
+ return;
|
@ -1,350 +0,0 @@
|
||||
From 17d62c9450b38fa492c245ec3da8ebd5f9a001dc Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 13 Aug 2023 10:30:11 -0400
|
||||
Subject: [PATCH 4/5] gnome-initial-setup: Add OEM mode
|
||||
|
||||
OEM mode is designed to get run when a site has imaged a bunch
|
||||
of machines, and handed them off to the user.
|
||||
|
||||
In this scenario, the user never saw the installer, so we need to
|
||||
ask the user questions that the installer would have normally
|
||||
asked them already.
|
||||
|
||||
For example, the installer likely asks language, but if the user
|
||||
never saw the installer, then we need to ask language again.
|
||||
---
|
||||
gnome-initial-setup/gis-driver.c | 1 +
|
||||
gnome-initial-setup/gis-driver.h | 5 +++--
|
||||
gnome-initial-setup/gnome-initial-setup.c | 22 ++++++++++++++--------
|
||||
3 files changed, 18 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
|
||||
index 75ceac76..d7a69fe1 100644
|
||||
--- a/gnome-initial-setup/gis-driver.c
|
||||
+++ b/gnome-initial-setup/gis-driver.c
|
||||
@@ -20,60 +20,61 @@
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "gnome-initial-setup.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <locale.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef HAVE_WEBKITGTK_6_0
|
||||
#include <webkit/webkit.h>
|
||||
#else
|
||||
#include <webkit2/webkit2.h>
|
||||
#endif
|
||||
|
||||
#include "cc-common-language.h"
|
||||
#include "gis-assistant.h"
|
||||
|
||||
/* Statically include this for now. Maybe later
|
||||
* we'll generate this from glib-mkenums. */
|
||||
GType
|
||||
gis_driver_mode_get_type (void) {
|
||||
static GType enum_type_id = 0;
|
||||
if (G_UNLIKELY (!enum_type_id))
|
||||
{
|
||||
static const GFlagsValue values[] = {
|
||||
{ GIS_DRIVER_MODE_NEW_USER, "GIS_DRIVER_MODE_NEW_USER", "new_user" },
|
||||
{ GIS_DRIVER_MODE_EXISTING_USER, "GIS_DRIVER_MODE_EXISTING_USER", "existing_user" },
|
||||
{ GIS_DRIVER_MODE_LIVE_USER, "GIS_DRIVER_MODE_LIVE_USER", "live_user" },
|
||||
+ { GIS_DRIVER_MODE_OEM, "GIS_DRIVER_MODE_OEM", "oem" },
|
||||
{ GIS_DRIVER_MODE_SYSTEM, "GIS_DRIVER_MODE_SYSTEM", "system" },
|
||||
{ GIS_DRIVER_MODE_ALL, "GIS_DRIVER_MODE_ALL", "all" },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
enum_type_id = g_flags_register_static("GisDriverMode", values);
|
||||
}
|
||||
return enum_type_id;
|
||||
}
|
||||
|
||||
enum {
|
||||
REBUILD_PAGES,
|
||||
LOCALE_CHANGED,
|
||||
LAST_SIGNAL,
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL];
|
||||
|
||||
typedef enum {
|
||||
PROP_MODE = 1,
|
||||
PROP_USERNAME,
|
||||
PROP_SMALL_SCREEN,
|
||||
PROP_PARENTAL_CONTROLS_ENABLED,
|
||||
PROP_FULL_NAME,
|
||||
PROP_AVATAR,
|
||||
} GisDriverProperty;
|
||||
|
||||
static GParamSpec *obj_props[PROP_AVATAR + 1];
|
||||
|
||||
struct _GisDriver {
|
||||
AdwApplication parent_instance;
|
||||
diff --git a/gnome-initial-setup/gis-driver.h b/gnome-initial-setup/gis-driver.h
|
||||
index aedb9a73..49639bef 100644
|
||||
--- a/gnome-initial-setup/gis-driver.h
|
||||
+++ b/gnome-initial-setup/gis-driver.h
|
||||
@@ -18,62 +18,63 @@
|
||||
* Written by:
|
||||
* Jasper St. Pierre <jstpierre@mecheye.net>
|
||||
*/
|
||||
|
||||
#ifndef __GIS_DRIVER_H__
|
||||
#define __GIS_DRIVER_H__
|
||||
|
||||
#include "gis-assistant.h"
|
||||
#include "gis-page.h"
|
||||
#include <act/act-user-manager.h>
|
||||
#include <gdm/gdm-client.h>
|
||||
#include <adwaita.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GIS_TYPE_DRIVER (gis_driver_get_type ())
|
||||
#define GIS_TYPE_DRIVER_MODE (gis_driver_mode_get_type ())
|
||||
|
||||
G_DECLARE_FINAL_TYPE (GisDriver, gis_driver, GIS, DRIVER, AdwApplication)
|
||||
|
||||
typedef enum {
|
||||
UM_LOCAL,
|
||||
UM_ENTERPRISE,
|
||||
NUM_MODES,
|
||||
} UmAccountMode;
|
||||
|
||||
typedef enum {
|
||||
GIS_DRIVER_MODE_NEW_USER = 1 << 0,
|
||||
GIS_DRIVER_MODE_EXISTING_USER = 1 << 1,
|
||||
GIS_DRIVER_MODE_LIVE_USER = 1 << 2,
|
||||
- GIS_DRIVER_MODE_SYSTEM = (GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER),
|
||||
- GIS_DRIVER_MODE_ALL = (GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_LIVE_USER),
|
||||
+ GIS_DRIVER_MODE_OEM = 1 << 3,
|
||||
+ GIS_DRIVER_MODE_SYSTEM = (GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER | GIS_DRIVER_MODE_OEM),
|
||||
+ GIS_DRIVER_MODE_ALL = (GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_LIVE_USER | GIS_DRIVER_MODE_OEM),
|
||||
} GisDriverMode;
|
||||
|
||||
GType gis_driver_mode_get_type (void);
|
||||
|
||||
GisAssistant *gis_driver_get_assistant (GisDriver *driver);
|
||||
|
||||
void gis_driver_set_user_permissions (GisDriver *driver,
|
||||
ActUser *user,
|
||||
const gchar *password);
|
||||
|
||||
void gis_driver_get_user_permissions (GisDriver *driver,
|
||||
ActUser **user,
|
||||
const gchar **password);
|
||||
|
||||
void gis_driver_set_parent_permissions (GisDriver *driver,
|
||||
ActUser *parent,
|
||||
const gchar *password);
|
||||
|
||||
void gis_driver_get_parent_permissions (GisDriver *driver,
|
||||
ActUser **parent,
|
||||
const gchar **password);
|
||||
|
||||
void gis_driver_set_account_mode (GisDriver *driver,
|
||||
UmAccountMode mode);
|
||||
|
||||
UmAccountMode gis_driver_get_account_mode (GisDriver *driver);
|
||||
|
||||
void gis_driver_set_parental_controls_enabled (GisDriver *driver,
|
||||
gboolean parental_controls_enabled);
|
||||
|
||||
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
||||
index 68f00f47..3e4c2c03 100644
|
||||
--- a/gnome-initial-setup/gnome-initial-setup.c
|
||||
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
||||
@@ -24,90 +24,91 @@
|
||||
#include "gnome-initial-setup.h"
|
||||
|
||||
#include <adwaita.h>
|
||||
#include <pwd.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "pages/welcome/gis-welcome-page.h"
|
||||
#include "pages/language/gis-language-page.h"
|
||||
#include "pages/keyboard/gis-keyboard-page.h"
|
||||
#include "pages/network/gis-network-page.h"
|
||||
#include "pages/timezone/gis-timezone-page.h"
|
||||
#include "pages/privacy/gis-privacy-page.h"
|
||||
#include "pages/software/gis-software-page.h"
|
||||
#include "pages/goa/gis-goa-page.h"
|
||||
#include "pages/account/gis-account-pages.h"
|
||||
#include "pages/parental-controls/gis-parental-controls-page.h"
|
||||
#include "pages/password/gis-password-page.h"
|
||||
#include "pages/summary/gis-summary-page.h"
|
||||
#include "pages/install/gis-install-page.h"
|
||||
|
||||
#define VENDOR_PAGES_GROUP "pages"
|
||||
#define VENDOR_SKIP_KEY "skip"
|
||||
#define VENDOR_NEW_USER_ONLY_KEY "new_user_only"
|
||||
#define VENDOR_EXISTING_USER_ONLY_KEY "existing_user_only"
|
||||
#define VENDOR_LIVE_USER_ONLY_KEY "live_user_only"
|
||||
|
||||
static gboolean force_existing_user_mode;
|
||||
static gboolean force_live_user_mode;
|
||||
+static gboolean force_oem_mode;
|
||||
|
||||
static GPtrArray *skipped_pages;
|
||||
|
||||
typedef GisPage *(*PreparePage) (GisDriver *driver);
|
||||
|
||||
typedef struct {
|
||||
const gchar *page_id;
|
||||
PreparePage prepare_page_func;
|
||||
GisDriverMode modes;
|
||||
} PageData;
|
||||
|
||||
#define PAGE(name, modes) { #name, gis_prepare_ ## name ## _page, modes }
|
||||
|
||||
static PageData page_table[] = {
|
||||
PAGE (welcome, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (language, GIS_DRIVER_MODE_ALL),
|
||||
PAGE (keyboard, GIS_DRIVER_MODE_ALL),
|
||||
PAGE (network, GIS_DRIVER_MODE_ALL),
|
||||
- PAGE (privacy, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
+ PAGE (privacy, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_OEM),
|
||||
PAGE (timezone, GIS_DRIVER_MODE_ALL),
|
||||
- PAGE (software, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
- PAGE (goa, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
+ PAGE (software, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_OEM),
|
||||
+ PAGE (goa, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_OEM),
|
||||
/* In live user mode, the account page isn't displayed, it just quietly creates the live user */
|
||||
- PAGE (account, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER),
|
||||
- PAGE (password, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER),
|
||||
+ PAGE (account, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER | GIS_DRIVER_MODE_OEM),
|
||||
+ PAGE (password, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER | GIS_DRIVER_MODE_OEM),
|
||||
#ifdef HAVE_PARENTAL_CONTROLS
|
||||
- PAGE (parental_controls, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
- PAGE (parent_password, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
+ PAGE (parental_controls, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_OEM),
|
||||
+ PAGE (parent_password, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER | GIS_DRIVER_MODE_OEM),
|
||||
#endif
|
||||
- PAGE (summary, GIS_DRIVER_MODE_NEW_USER),
|
||||
+ PAGE (summary, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_OEM),
|
||||
PAGE (install, GIS_DRIVER_MODE_LIVE_USER),
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
#undef PAGE
|
||||
|
||||
static gboolean
|
||||
should_skip_page (const gchar *page_id,
|
||||
gchar **skip_pages)
|
||||
{
|
||||
guint i = 0;
|
||||
|
||||
/* special case welcome. We only want to show it if language
|
||||
* is skipped
|
||||
*/
|
||||
if (strcmp (page_id, "welcome") == 0)
|
||||
return !should_skip_page ("language", skip_pages);
|
||||
|
||||
/* check through our skip pages list for pages we don't want */
|
||||
if (skip_pages) {
|
||||
while (skip_pages[i]) {
|
||||
if (g_strcmp0 (skip_pages[i], page_id) == 0)
|
||||
return TRUE;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -292,81 +293,86 @@ static gboolean
|
||||
initial_setup_disabled_by_anaconda (void)
|
||||
{
|
||||
const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda";
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GKeyFile) key_file = g_key_file_new ();
|
||||
|
||||
if (!g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error)) {
|
||||
if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) &&
|
||||
!g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
|
||||
g_warning ("Could not read %s: %s", file_name, error->message);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return g_key_file_get_boolean (key_file, "General", "post_install_tools_disabled", NULL);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
GisDriver *driver;
|
||||
int status;
|
||||
GOptionContext *context;
|
||||
GisDriverMode mode;
|
||||
|
||||
GOptionEntry entries[] = {
|
||||
{ "existing-user", 0, 0, G_OPTION_ARG_NONE, &force_existing_user_mode,
|
||||
_("Force existing user mode"), NULL },
|
||||
{ "live-user", 0, 0, G_OPTION_ARG_NONE, &force_live_user_mode,
|
||||
_("Force live user mode"), NULL },
|
||||
+ { "oem", 0, 0, G_OPTION_ARG_NONE, &force_oem_mode,
|
||||
+ _("Force OEM mode"), NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
g_unsetenv ("GIO_USE_VFS");
|
||||
|
||||
/* By default, libadwaita reads settings from the Settings portal, which causes
|
||||
* the portal to be started, which causes gnome-keyring to be started. This
|
||||
* interferes with our attempt below to manually start gnome-keyring and set
|
||||
* the login keyring password to a well-known value, which we overwrite with
|
||||
* the user's password once they choose one.
|
||||
*/
|
||||
g_setenv ("ADW_DISABLE_PORTAL", "1", TRUE);
|
||||
|
||||
context = g_option_context_new (_("— GNOME initial setup"));
|
||||
g_option_context_add_main_entries (context, entries, NULL);
|
||||
|
||||
g_option_context_parse (context, &argc, &argv, NULL);
|
||||
|
||||
if (gis_kernel_command_line_has_argument ((const char *[]) { "rd.live.image", "endless.live_boot", NULL }))
|
||||
force_live_user_mode = TRUE;
|
||||
|
||||
+ if (gis_kernel_command_line_has_argument ((const char *[]) { "gnome.oem_mode", NULL }))
|
||||
+ force_oem_mode = TRUE;
|
||||
+
|
||||
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
|
||||
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
|
||||
textdomain (GETTEXT_PACKAGE);
|
||||
|
||||
g_message ("Starting gnome-initial-setup");
|
||||
if (gis_get_mock_mode ())
|
||||
g_message ("Mock mode: changes will not be saved to disk");
|
||||
else
|
||||
g_message ("Production mode: changes will be saved to disk");
|
||||
|
||||
skipped_pages = g_ptr_array_new_with_free_func (destroy_page);
|
||||
mode = get_mode ();
|
||||
|
||||
/* When we are running as the gnome-initial-setup user we
|
||||
* dont have a normal user session and need to initialize
|
||||
* the keyring manually so that we can pass the credentials
|
||||
* along to the new user in the handoff.
|
||||
*/
|
||||
if (mode == GIS_DRIVER_MODE_NEW_USER && !gis_get_mock_mode ())
|
||||
gis_ensure_login_keyring ();
|
||||
|
||||
driver = gis_driver_new (mode);
|
||||
adw_style_manager_set_color_scheme (adw_style_manager_get_default (),
|
||||
ADW_COLOR_SCHEME_PREFER_LIGHT);
|
||||
|
||||
/* On first login, GNOME Shell offers to run a tour. If we also run Initial
|
||||
* Setup, the two immovable, centred windows will sit atop one another.
|
||||
* Until we have the ability to run Initial Setup in the "kiosk" mode, like
|
||||
* it does in new-user mode, disable Initial Setup for existing users.
|
||||
*
|
||||
--
|
||||
2.41.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
From c8246d78f920af9bc2b2971616ca4e199301a2b6 Mon Sep 17 00:00:00 2001
|
||||
From e2aa68d67c1ec4a788a45b366f651b87e4c5ae95 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 15 Aug 2023 10:53:41 -0400
|
||||
Subject: [PATCH 02/10] gnome-initial-setup: Bump GLib required version to 2.70
|
||||
Subject: [PATCH 04/11] gnome-initial-setup: Bump GLib required version to 2.70
|
||||
|
||||
This gives us GStrvBuilder
|
||||
---
|
@ -1,7 +1,7 @@
|
||||
From 658a673feac93493a74a83434abce93e39bff170 Mon Sep 17 00:00:00 2001
|
||||
From f5de1beabc325dc20090d02d85088dfb7f3a0584 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 13 Aug 2023 09:09:56 -0400
|
||||
Subject: [PATCH 03/10] driver: Specify mode via flags instead of boolean
|
||||
Subject: [PATCH 05/11] driver: Specify mode via flags instead of boolean
|
||||
|
||||
At the moment we just have system mode and new user mode,
|
||||
but we're actually going to want other modes (such as
|
@ -1,51 +0,0 @@
|
||||
From fef99a9707d53c3c8f82260994793623f61246aa Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 13 Aug 2023 16:33:49 -0400
|
||||
Subject: [PATCH 5/5] polkit: Add fedora specfic rules
|
||||
|
||||
We should probably add some way to check vendor.conf for the policy
|
||||
updates instead of a hardcoded list.
|
||||
---
|
||||
data/20-gnome-initial-setup.rules.in | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/data/20-gnome-initial-setup.rules.in b/data/20-gnome-initial-setup.rules.in
|
||||
index 881efde9..f5b7d981 100644
|
||||
--- a/data/20-gnome-initial-setup.rules.in
|
||||
+++ b/data/20-gnome-initial-setup.rules.in
|
||||
@@ -1,30 +1,31 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
//
|
||||
// DO NOT EDIT THIS FILE, it will be overwritten on update.
|
||||
//
|
||||
// Allow the gnome-initial-setup user to do certain actions without
|
||||
// being interrupted by password dialogs
|
||||
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (subject.user !== 'gnome-initial-setup')
|
||||
return undefined;
|
||||
|
||||
var actionMatches = (action.id.indexOf('org.freedesktop.hostname1.') === 0 ||
|
||||
action.id.indexOf('org.freedesktop.NetworkManager.') === 0 ||
|
||||
action.id.indexOf('org.freedesktop.locale1.') === 0 ||
|
||||
action.id.indexOf('org.freedesktop.accounts.') === 0 ||
|
||||
action.id.indexOf('org.freedesktop.timedate1.') === 0 ||
|
||||
action.id.indexOf('org.freedesktop.realmd.') === 0 ||
|
||||
action.id.indexOf('com.endlessm.ParentalControls.') === 0 ||
|
||||
action.id.indexOf('org.fedoraproject.thirdparty.') === 0 ||
|
||||
- action.id.indexOf('org.freedesktop.login1.reboot') === 0);
|
||||
+ action.id.indexOf('org.freedesktop.login1.reboot') === 0 ||
|
||||
+ action.id.indexOf('org.fedoraproject.pkexec.liveinst') === 0);
|
||||
|
||||
if (actionMatches) {
|
||||
if (subject.local)
|
||||
return 'yes';
|
||||
else
|
||||
return 'auth_admin';
|
||||
}
|
||||
|
||||
return undefined;
|
||||
});
|
||||
--
|
||||
2.41.0
|
||||
|
@ -1,241 +0,0 @@
|
||||
From 43db755e9027bde74626b9d2f15ee9013c8f7dc6 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Fri, 25 Aug 2023 21:30:42 -0400
|
||||
Subject: [PATCH 05/10] summary: Write uid file with other state files
|
||||
|
||||
When creating a user account gnome-initial-setup writes a file
|
||||
saying what the uid of the new user is, so that GDM can make
|
||||
gnome-initial-setup's configuration available to the user.
|
||||
|
||||
It does this from the summary page, but it would be better to do
|
||||
it more centrally along with other state files so it can be used
|
||||
for modes that don't have the summary page.
|
||||
|
||||
This is important groundwork for a "live user" mode that will
|
||||
get added in a future commit.
|
||||
---
|
||||
gnome-initial-setup/gnome-initial-setup.c | 37 +++++++++++++++++++
|
||||
.../pages/summary/gis-summary-page.c | 24 ------------
|
||||
2 files changed, 37 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
||||
index 49e8e6ca..3635f293 100644
|
||||
--- a/gnome-initial-setup/gnome-initial-setup.c
|
||||
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
||||
@@ -418,61 +418,98 @@ write_state (GisDriver *driver)
|
||||
g_auto(GStrv) visited_pages = NULL;
|
||||
GisAssistant *assistant;
|
||||
GList *pages, *node;
|
||||
|
||||
state = g_key_file_new ();
|
||||
|
||||
builder = g_strv_builder_new ();
|
||||
|
||||
assistant = gis_driver_get_assistant (driver);
|
||||
pages = gis_assistant_get_all_pages (assistant);
|
||||
for (node = pages; node != NULL; node = node->next) {
|
||||
GisPage *page = node->data;
|
||||
g_strv_builder_add (builder, GIS_PAGE_GET_CLASS (page)->page_id);
|
||||
}
|
||||
|
||||
visited_pages = g_strv_builder_end (builder);
|
||||
|
||||
g_key_file_set_string_list (state,
|
||||
VENDOR_PAGES_GROUP,
|
||||
VENDOR_SKIP_KEY,
|
||||
(const char * const *)
|
||||
visited_pages,
|
||||
g_strv_length (visited_pages));
|
||||
|
||||
if (!g_key_file_save_to_file (state, STATE_FILE, &error)) {
|
||||
g_warning ("Unable to save state to %s: %s", STATE_FILE, error->message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+add_uid_file (GisDriver *driver)
|
||||
+{
|
||||
+ gchar *gis_uid_path;
|
||||
+ gchar *uid_str;
|
||||
+ uid_t uid;
|
||||
+ g_autoptr(GError) error = NULL;
|
||||
+ ActUser *user_account = NULL;
|
||||
+
|
||||
+ gis_driver_get_user_permissions (driver, &user_account, NULL);
|
||||
+
|
||||
+ if (user_account == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ uid = act_user_get_uid (user_account);
|
||||
+
|
||||
+ gis_uid_path = g_build_filename (g_get_home_dir (),
|
||||
+ "gnome-initial-setup-uid",
|
||||
+ NULL);
|
||||
+ uid_str = g_strdup_printf ("%u", uid);
|
||||
+
|
||||
+ if (!g_file_set_contents (gis_uid_path, uid_str, -1, &error))
|
||||
+ g_warning ("Unable to create %s: %s", gis_uid_path, error->message);
|
||||
+
|
||||
+ g_free (uid_str);
|
||||
+ g_free (gis_uid_path);
|
||||
+}
|
||||
+
|
||||
void
|
||||
gis_ensure_stamp_files (GisDriver *driver)
|
||||
{
|
||||
g_autofree gchar *done_file = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
+ GisDriverMode driver_mode;
|
||||
|
||||
done_file = g_build_filename (g_get_user_config_dir (), "gnome-initial-setup-done", NULL);
|
||||
if (!g_file_set_contents (done_file, "yes", -1, &error)) {
|
||||
g_warning ("Unable to create %s: %s", done_file, error->message);
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
+ driver_mode = gis_driver_get_mode (driver);
|
||||
+
|
||||
+ /* If we're in a system mode write out which UID the created user is so GDM can make the
|
||||
+ * gnome-initial-setup home directory readable to the created user.
|
||||
+ */
|
||||
+ if (driver_mode & GIS_DRIVER_MODE_SYSTEM)
|
||||
+ add_uid_file (driver);
|
||||
+
|
||||
write_state (driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* gis_get_mock_mode:
|
||||
*
|
||||
* Gets whether gnome-initial-setup has been built for development, and hence
|
||||
* shouldn’t permanently change any system configuration.
|
||||
*
|
||||
* By default, mock mode is enabled when running in a build environment. This
|
||||
* heuristic may be changed in future.
|
||||
*
|
||||
* Returns: %TRUE if in mock mode, %FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
gis_get_mock_mode (void)
|
||||
{
|
||||
return (g_getenv ("UNDER_JHBUILD") != NULL);
|
||||
}
|
||||
diff --git a/gnome-initial-setup/pages/summary/gis-summary-page.c b/gnome-initial-setup/pages/summary/gis-summary-page.c
|
||||
index 0aee2dad..b072f7fc 100644
|
||||
--- a/gnome-initial-setup/pages/summary/gis-summary-page.c
|
||||
+++ b/gnome-initial-setup/pages/summary/gis-summary-page.c
|
||||
@@ -91,110 +91,86 @@ static void
|
||||
on_secret_info_query (GdmUserVerifier *user_verifier,
|
||||
const char *service_name,
|
||||
const char *question,
|
||||
GisSummaryPage *page)
|
||||
{
|
||||
GisSummaryPagePrivate *priv = gis_summary_page_get_instance_private (page);
|
||||
gboolean should_send_password = priv->user_password != NULL;
|
||||
|
||||
g_debug ("PAM module secret info query: %s", question);
|
||||
if (should_send_password) {
|
||||
g_debug ("sending password\n");
|
||||
gdm_user_verifier_call_answer_query (user_verifier,
|
||||
service_name,
|
||||
priv->user_password,
|
||||
NULL, NULL, NULL);
|
||||
priv->user_password = NULL;
|
||||
} else {
|
||||
request_info_query (page, user_verifier, question, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_session_opened (GdmGreeter *greeter,
|
||||
const char *service_name,
|
||||
GisSummaryPage *page)
|
||||
{
|
||||
gdm_greeter_call_start_session_when_ready_sync (greeter, service_name,
|
||||
TRUE, NULL, NULL);
|
||||
}
|
||||
|
||||
-static void
|
||||
-add_uid_file (uid_t uid)
|
||||
-{
|
||||
- gchar *gis_uid_path;
|
||||
- gchar *uid_str;
|
||||
- g_autoptr(GError) error = NULL;
|
||||
-
|
||||
- gis_uid_path = g_build_filename (g_get_home_dir (),
|
||||
- "gnome-initial-setup-uid",
|
||||
- NULL);
|
||||
- uid_str = g_strdup_printf ("%u", uid);
|
||||
-
|
||||
- if (!g_file_set_contents (gis_uid_path, uid_str, -1, &error))
|
||||
- g_warning ("Unable to create %s: %s", gis_uid_path, error->message);
|
||||
-
|
||||
- g_free (uid_str);
|
||||
- g_free (gis_uid_path);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
log_user_in (GisSummaryPage *page)
|
||||
{
|
||||
GisSummaryPagePrivate *priv = gis_summary_page_get_instance_private (page);
|
||||
g_autoptr(GError) error = NULL;
|
||||
GdmGreeter *greeter = NULL;
|
||||
GdmUserVerifier *user_verifier = NULL;
|
||||
|
||||
if (!gis_driver_get_gdm_objects (GIS_PAGE (page)->driver,
|
||||
&greeter, &user_verifier)) {
|
||||
g_warning ("No GDM connection; not initiating login");
|
||||
return;
|
||||
}
|
||||
|
||||
g_signal_connect (user_verifier, "info",
|
||||
G_CALLBACK (on_info), page);
|
||||
g_signal_connect (user_verifier, "problem",
|
||||
G_CALLBACK (on_problem), page);
|
||||
g_signal_connect (user_verifier, "info-query",
|
||||
G_CALLBACK (on_info_query), page);
|
||||
g_signal_connect (user_verifier, "secret-info-query",
|
||||
G_CALLBACK (on_secret_info_query), page);
|
||||
|
||||
g_signal_connect (greeter, "session-opened",
|
||||
G_CALLBACK (on_session_opened), page);
|
||||
|
||||
- /* We are in NEW_USER mode and we want to make it possible for third
|
||||
- * parties to find out which user ID we created.
|
||||
- */
|
||||
- add_uid_file (act_user_get_uid (priv->user_account));
|
||||
-
|
||||
gdm_user_verifier_call_begin_verification_for_user_sync (user_verifier,
|
||||
SERVICE_NAME,
|
||||
act_user_get_user_name (priv->user_account),
|
||||
NULL, &error);
|
||||
|
||||
if (error != NULL)
|
||||
g_warning ("Could not begin verification: %s", error->message);
|
||||
}
|
||||
|
||||
static void
|
||||
done_cb (GtkButton *button, GisSummaryPage *page)
|
||||
{
|
||||
gis_ensure_stamp_files (GIS_PAGE (page)->driver);
|
||||
|
||||
switch (gis_driver_get_mode (GIS_PAGE (page)->driver))
|
||||
{
|
||||
case GIS_DRIVER_MODE_NEW_USER:
|
||||
gis_driver_hide_window (GIS_PAGE (page)->driver);
|
||||
log_user_in (page);
|
||||
break;
|
||||
case GIS_DRIVER_MODE_EXISTING_USER:
|
||||
g_application_quit (G_APPLICATION (GIS_PAGE (page)->driver));
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gis_summary_page_shown (GisPage *page)
|
||||
{
|
||||
--
|
||||
2.41.0.rc2
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 64e82b502c7ed692f360c82478dc35dad55ed051 Mon Sep 17 00:00:00 2001
|
||||
From 7a5d91cc7c84c6eeeb1e68d5469a645a5e177215 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 13 Aug 2023 09:39:07 -0400
|
||||
Subject: [PATCH 06/10] gnome-initial-setup: Add live user mode
|
||||
Subject: [PATCH 06/11] gnome-initial-setup: Add live user mode
|
||||
|
||||
This commit adds a new "live user" mode meant to be run in live image
|
||||
environments.
|
||||
@ -70,7 +70,7 @@ index 02fd21d0..881efde9 100644
|
||||
return undefined;
|
||||
});
|
||||
diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
|
||||
index 98fe2ca6..41cd6e38 100644
|
||||
index d3013063..b18a3808 100644
|
||||
--- a/gnome-initial-setup/gis-driver.c
|
||||
+++ b/gnome-initial-setup/gis-driver.c
|
||||
@@ -19,60 +19,62 @@
|
||||
@ -136,7 +136,7 @@ index 98fe2ca6..41cd6e38 100644
|
||||
struct _GisDriver {
|
||||
AdwApplication parent_instance;
|
||||
|
||||
@@ -767,61 +769,61 @@ static void
|
||||
@@ -764,61 +766,61 @@ static void
|
||||
connect_to_gdm (GisDriver *driver)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
@ -400,10 +400,10 @@ index 5041bddd..10dcd70c 100644
|
||||
+gboolean gis_kernel_command_line_has_argument (const char *arguments[]);
|
||||
+void gis_substitute_word_in_text (char **text, const char *old_word, const char *new_word);
|
||||
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
||||
index 3635f293..0e155cd3 100644
|
||||
index 59955779..bc7a4ee9 100644
|
||||
--- a/gnome-initial-setup/gnome-initial-setup.c
|
||||
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
||||
@@ -14,144 +14,149 @@
|
||||
@@ -14,141 +14,146 @@
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
@ -442,8 +442,6 @@ index 3635f293..0e155cd3 100644
|
||||
#define VENDOR_EXISTING_USER_ONLY_KEY "existing_user_only"
|
||||
+#define VENDOR_LIVE_USER_ONLY_KEY "live_user_only"
|
||||
|
||||
#define STATE_FILE GIS_WORKING_DIR "/state"
|
||||
|
||||
static gboolean force_existing_user_mode;
|
||||
+static gboolean force_live_user_mode;
|
||||
|
||||
@ -520,7 +518,6 @@ index 3635f293..0e155cd3 100644
|
||||
g_autofree char *mode_group = NULL;
|
||||
g_autoptr (GFlagsClass) driver_mode_flags_class = NULL;
|
||||
const GFlagsValue *driver_mode_flags = NULL;
|
||||
g_autoptr (GError) error = NULL;
|
||||
|
||||
/* This code will read the keyfile containing vendor customization options and
|
||||
* look for options under the "pages" group, and supports the following keys:
|
||||
@ -559,7 +556,7 @@ index 3635f293..0e155cd3 100644
|
||||
|
||||
driver_mode_flags_class = g_type_class_ref (GIS_TYPE_DRIVER_MODE);
|
||||
|
||||
@@ -273,130 +278,137 @@ rebuild_pages_cb (GisDriver *driver)
|
||||
@@ -250,130 +255,137 @@ rebuild_pages_cb (GisDriver *driver)
|
||||
driver_mode = gis_driver_get_mode (driver);
|
||||
skip_pages = pages_to_skip_from_file (driver);
|
||||
|
||||
@ -1288,10 +1285,10 @@ index 00000000..e5084e5e
|
||||
+ 'gis-install-page.h'
|
||||
+)
|
||||
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
index 61556b99..44d48fd0 100644
|
||||
index 76d0b32a..1636350f 100644
|
||||
--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
@@ -199,61 +199,61 @@ change_locale_permission_acquired (GObject *source,
|
||||
@@ -210,61 +210,61 @@ change_locale_permission_acquired (GObject *source,
|
||||
{
|
||||
GisKeyboardPage *page = GIS_KEYBOARD_PAGE (data);
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (page);
|
||||
@ -1354,7 +1351,7 @@ index 61556b99..44d48fd0 100644
|
||||
{
|
||||
GisKeyboardPage *self = GIS_KEYBOARD_PAGE (page);
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
@@ -358,61 +358,61 @@ static void
|
||||
@@ -370,61 +370,61 @@ static void
|
||||
gis_keyboard_page_constructed (GObject *object)
|
||||
{
|
||||
GisKeyboardPage *self = GIS_KEYBOARD_PAGE (object);
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 97433b89c94c39c9059344a0e4a562b6ef251675 Mon Sep 17 00:00:00 2001
|
||||
From e0abb46daa5f5e84b35d8e6481c3408d3c377c40 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Wed, 16 Aug 2023 10:47:13 -0400
|
||||
Subject: [PATCH 04/10] initial-setup: Don't show duplicated pages between
|
||||
Subject: [PATCH 07/11] initial-setup: Don't show duplicated pages between
|
||||
modes
|
||||
|
||||
It's possible a user just got asked questions in live mode
|
||||
@ -12,9 +12,9 @@ This commit tracks that information so it doesn't get reasked.
|
||||
---
|
||||
data/meson.build | 6 +++
|
||||
gnome-initial-setup/gis-driver.c | 3 ++
|
||||
gnome-initial-setup/gnome-initial-setup.c | 61 +++++++++++++++++++++++
|
||||
gnome-initial-setup/gnome-initial-setup.c | 65 +++++++++++++++++++++++
|
||||
meson.build | 4 ++
|
||||
4 files changed, 74 insertions(+)
|
||||
4 files changed, 78 insertions(+)
|
||||
|
||||
diff --git a/data/meson.build b/data/meson.build
|
||||
index 6a4ef7df..0bfccf56 100644
|
||||
@ -58,10 +58,10 @@ index 6a4ef7df..0bfccf56 100644
|
||||
+ strip_directory : true
|
||||
+)
|
||||
diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
|
||||
index d3013063..98fe2ca6 100644
|
||||
index b18a3808..41cd6e38 100644
|
||||
--- a/gnome-initial-setup/gis-driver.c
|
||||
+++ b/gnome-initial-setup/gis-driver.c
|
||||
@@ -78,90 +78,93 @@ struct _GisDriver {
|
||||
@@ -80,90 +80,93 @@ struct _GisDriver {
|
||||
|
||||
GtkWindow *main_window;
|
||||
GisAssistant *assistant;
|
||||
@ -156,12 +156,10 @@ index d3013063..98fe2ca6 100644
|
||||
gtk_window_set_child (GTK_WINDOW (driver->main_window), sw);
|
||||
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), child);
|
||||
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
||||
index 59955779..49e8e6ca 100644
|
||||
index bc7a4ee9..2bd2d375 100644
|
||||
--- a/gnome-initial-setup/gnome-initial-setup.c
|
||||
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
||||
@@ -20,60 +20,62 @@
|
||||
*/
|
||||
|
||||
@@ -22,60 +22,62 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "gnome-initial-setup.h"
|
||||
@ -184,15 +182,18 @@ index 59955779..49e8e6ca 100644
|
||||
#include "pages/parental-controls/gis-parental-controls-page.h"
|
||||
#include "pages/password/gis-password-page.h"
|
||||
#include "pages/summary/gis-summary-page.h"
|
||||
#include "pages/install/gis-install-page.h"
|
||||
|
||||
#define VENDOR_PAGES_GROUP "pages"
|
||||
#define VENDOR_SKIP_KEY "skip"
|
||||
#define VENDOR_NEW_USER_ONLY_KEY "new_user_only"
|
||||
#define VENDOR_EXISTING_USER_ONLY_KEY "existing_user_only"
|
||||
#define VENDOR_LIVE_USER_ONLY_KEY "live_user_only"
|
||||
|
||||
+#define STATE_FILE GIS_WORKING_DIR "/state"
|
||||
+
|
||||
static gboolean force_existing_user_mode;
|
||||
static gboolean force_live_user_mode;
|
||||
|
||||
static GPtrArray *skipped_pages;
|
||||
|
||||
@ -210,19 +211,18 @@ index 59955779..49e8e6ca 100644
|
||||
PAGE (welcome, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (language, GIS_DRIVER_MODE_ALL),
|
||||
PAGE (keyboard, GIS_DRIVER_MODE_ALL),
|
||||
PAGE (network, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (network, GIS_DRIVER_MODE_ALL),
|
||||
PAGE (privacy, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (timezone, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (timezone, GIS_DRIVER_MODE_ALL),
|
||||
PAGE (software, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (goa, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (account, GIS_DRIVER_MODE_NEW_USER),
|
||||
PAGE (password, GIS_DRIVER_MODE_NEW_USER),
|
||||
/* In live user mode, the account page isn't displayed, it just quietly creates the live user */
|
||||
PAGE (account, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER),
|
||||
PAGE (password, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_LIVE_USER),
|
||||
#ifdef HAVE_PARENTAL_CONTROLS
|
||||
PAGE (parental_controls, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
PAGE (parent_password, GIS_DRIVER_MODE_NEW_USER | GIS_DRIVER_MODE_EXISTING_USER),
|
||||
#endif
|
||||
PAGE (summary, GIS_DRIVER_MODE_NEW_USER),
|
||||
@@ -89,60 +91,61 @@ should_skip_page (const gchar *page_id,
|
||||
@@ -94,60 +96,61 @@ should_skip_page (const gchar *page_id,
|
||||
guint i = 0;
|
||||
|
||||
/* special case welcome. We only want to show it if language
|
||||
@ -258,8 +258,8 @@ index 59955779..49e8e6ca 100644
|
||||
/* This code will read the keyfile containing vendor customization options and
|
||||
* look for options under the "pages" group, and supports the following keys:
|
||||
* - 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
|
||||
* - new_user_only (optional): list of pages to be skipped for modes other than new_user
|
||||
* - existing_user_only (optional): list of pages to be skipped for modes other than existing_user
|
||||
*
|
||||
* In addition it will look for options under the "{mode} pages" group where {mode} is the
|
||||
* current driver mode for the following keys:
|
||||
@ -284,7 +284,7 @@ index 59955779..49e8e6ca 100644
|
||||
VENDOR_SKIP_KEY, NULL);
|
||||
if (skip_pages != NULL)
|
||||
{
|
||||
@@ -157,60 +160,80 @@ pages_to_skip_from_file (GisDriver *driver)
|
||||
@@ -162,60 +165,80 @@ pages_to_skip_from_file (GisDriver *driver)
|
||||
|
||||
mode_group = g_strdup_printf ("%s pages", driver_mode_flags->value_nick);
|
||||
skip_pages = gis_driver_conf_get_string_list (driver, mode_group,
|
||||
@ -365,7 +365,7 @@ index 59955779..49e8e6ca 100644
|
||||
|
||||
page = data;
|
||||
assistant = gtk_widget_get_ancestor (GTK_WIDGET (page), GIS_TYPE_ASSISTANT);
|
||||
@@ -359,59 +382,97 @@ main (int argc, char *argv[])
|
||||
@@ -371,59 +394,101 @@ main (int argc, char *argv[])
|
||||
* it does in new-user mode, disable Initial Setup for existing users.
|
||||
*
|
||||
* https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/120#note_1019004
|
||||
@ -406,11 +406,15 @@ index 59955779..49e8e6ca 100644
|
||||
+ GisAssistant *assistant;
|
||||
+ GList *pages, *node;
|
||||
+
|
||||
+ assistant = gis_driver_get_assistant (driver);
|
||||
+
|
||||
+ if (assistant == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ state = g_key_file_new ();
|
||||
+
|
||||
+ builder = g_strv_builder_new ();
|
||||
+
|
||||
+ assistant = gis_driver_get_assistant (driver);
|
||||
+ pages = gis_assistant_get_all_pages (assistant);
|
||||
+ for (node = pages; node != NULL; node = node->next) {
|
||||
+ GisPage *page = node->data;
|
@ -1,95 +0,0 @@
|
||||
From 29fbe5dda08df05b193c0a064a58e5f0d9a66a4a Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sat, 19 Aug 2023 15:31:03 -0400
|
||||
Subject: [PATCH 07/10] keyboard: Don't add default input sources if input
|
||||
sources already set
|
||||
|
||||
If the keyboard page gets skipped, it adds default input sources derived
|
||||
from the users locale.
|
||||
|
||||
That is all fine and good, but may stomp on existiing site or distro configuration.
|
||||
|
||||
This commit checks for that kind of thing first, and skips adding the
|
||||
default in that case.
|
||||
---
|
||||
gnome-initial-setup/pages/keyboard/gis-keyboard-page.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
index 44d48fd0..a3be7287 100644
|
||||
--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
@@ -222,60 +222,70 @@ update_input (GisKeyboardPage *self)
|
||||
const gchar *id;
|
||||
|
||||
type = cc_input_chooser_get_input_type (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
id = cc_input_chooser_get_input_id (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
|
||||
set_input_settings (self, type, id);
|
||||
|
||||
if (gis_driver_get_mode (GIS_PAGE (self)->driver) & GIS_DRIVER_MODE_SYSTEM) {
|
||||
if (g_permission_get_allowed (priv->permission)) {
|
||||
set_localed_input (self);
|
||||
} else if (g_permission_get_can_acquire (priv->permission)) {
|
||||
g_permission_acquire_async (priv->permission,
|
||||
NULL,
|
||||
change_locale_permission_acquired,
|
||||
self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gis_keyboard_page_apply (GisPage *page,
|
||||
GCancellable *cancellable)
|
||||
{
|
||||
update_input (GIS_KEYBOARD_PAGE (page));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
add_default_input_sources (GisKeyboardPage *self)
|
||||
{
|
||||
+ GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
+ g_autoptr(GVariant) default_value = NULL;
|
||||
+ g_autoptr(GVariant) value = NULL;
|
||||
+
|
||||
+ default_value = g_settings_get_default_value (priv->input_settings, KEY_INPUT_SOURCES);
|
||||
+ value = g_settings_get_value (priv->input_settings, KEY_INPUT_SOURCES);
|
||||
+
|
||||
+ if (!g_variant_equal (default_value, value))
|
||||
+ return;
|
||||
+
|
||||
set_input_settings (self, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gis_keyboard_page_skip (GisPage *page)
|
||||
{
|
||||
GisKeyboardPage *self = GIS_KEYBOARD_PAGE (page);
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
|
||||
priv->should_skip = TRUE;
|
||||
|
||||
if (priv->default_input_source_ids != NULL)
|
||||
add_default_input_sources (self);
|
||||
}
|
||||
|
||||
static void
|
||||
preselect_input_source (GisKeyboardPage *self)
|
||||
{
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
|
||||
cc_input_chooser_set_input (CC_INPUT_CHOOSER (priv->input_chooser),
|
||||
priv->default_input_source_ids[0],
|
||||
priv->default_input_source_types[0]);
|
||||
}
|
||||
|
||||
static void
|
||||
update_page_complete (GisKeyboardPage *self)
|
||||
{
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
gboolean complete;
|
||||
--
|
||||
2.41.0.rc2
|
||||
|
103
0008-keyboard-Don-t-add-default-input-sources-if-input-so.patch
Normal file
103
0008-keyboard-Don-t-add-default-input-sources-if-input-so.patch
Normal file
@ -0,0 +1,103 @@
|
||||
From f7a5ba24eabf86f5175aac0d4f2d8e322c076e87 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sat, 19 Aug 2023 15:31:03 -0400
|
||||
Subject: [PATCH 08/11] keyboard: Don't add default input sources if input
|
||||
sources already set
|
||||
|
||||
If the keyboard page gets skipped, it adds default input sources derived
|
||||
from the users locale.
|
||||
|
||||
That is all fine and good, but may stomp on existiing site or distro configuration.
|
||||
|
||||
This commit checks for that kind of thing first, and skips adding the
|
||||
default in that case.
|
||||
---
|
||||
gnome-initial-setup/pages/keyboard/gis-keyboard-page.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
index 1636350f..6f440981 100644
|
||||
--- a/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
+++ b/gnome-initial-setup/pages/keyboard/gis-keyboard-page.c
|
||||
@@ -63,70 +63,77 @@ struct _GisKeyboardPagePrivate {
|
||||
typedef struct _GisKeyboardPagePrivate GisKeyboardPagePrivate;
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (GisKeyboardPage, gis_keyboard_page, GIS_TYPE_PAGE);
|
||||
|
||||
static void
|
||||
gis_keyboard_page_finalize (GObject *object)
|
||||
{
|
||||
GisKeyboardPage *self = GIS_KEYBOARD_PAGE (object);
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
|
||||
if (priv->cancellable)
|
||||
g_cancellable_cancel (priv->cancellable);
|
||||
g_clear_object (&priv->cancellable);
|
||||
|
||||
g_clear_object (&priv->permission);
|
||||
g_clear_object (&priv->localed);
|
||||
g_clear_object (&priv->input_settings);
|
||||
g_clear_pointer (&priv->default_input_source_ids, g_strfreev);
|
||||
g_clear_pointer (&priv->default_input_source_types, g_strfreev);
|
||||
g_clear_pointer (&priv->default_input_options, g_strfreev);
|
||||
|
||||
G_OBJECT_CLASS (gis_keyboard_page_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
set_input_settings (GisKeyboardPage *self,
|
||||
const char *type,
|
||||
const char *id)
|
||||
{
|
||||
GisKeyboardPagePrivate *priv = gis_keyboard_page_get_instance_private (self);
|
||||
-
|
||||
+ g_autoptr(GVariant) default_value = NULL;
|
||||
+ g_autoptr(GVariant) value = NULL;
|
||||
GVariantBuilder input_source_builder;
|
||||
GVariantBuilder input_options_builder;
|
||||
size_t i;
|
||||
gboolean has_latin_layout = FALSE;
|
||||
gboolean is_xkb_source = FALSE;
|
||||
|
||||
type = cc_input_chooser_get_input_type (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
id = cc_input_chooser_get_input_id (CC_INPUT_CHOOSER (priv->input_chooser));
|
||||
|
||||
+ default_value = g_settings_get_default_value (priv->input_settings, KEY_INPUT_SOURCES);
|
||||
+ value = g_settings_get_value (priv->input_settings, KEY_INPUT_SOURCES);
|
||||
+
|
||||
+ if (!g_variant_equal (default_value, value))
|
||||
+ return;
|
||||
+
|
||||
g_variant_builder_init (&input_source_builder, G_VARIANT_TYPE ("a(ss)"));
|
||||
g_variant_builder_init (&input_options_builder, G_VARIANT_TYPE ("as"));
|
||||
|
||||
if (type != NULL && id != NULL) {
|
||||
has_latin_layout = !gnome_input_source_is_non_latin (type, id);
|
||||
if (g_str_equal (type, "xkb")) {
|
||||
g_variant_builder_add (&input_source_builder, "(ss)", type, id);
|
||||
|
||||
is_xkb_source = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; priv->default_input_source_ids && priv->default_input_source_ids[i] != NULL; i++) {
|
||||
if (g_str_equal (id, priv->default_input_source_ids[i]) && g_str_equal (type, priv->default_input_source_types[i]))
|
||||
continue;
|
||||
|
||||
g_variant_builder_add (&input_source_builder, "(ss)", priv->default_input_source_types[i], priv->default_input_source_ids[i]);
|
||||
|
||||
if (!gnome_input_source_is_non_latin (priv->default_input_source_types[i], priv->default_input_source_ids[i]))
|
||||
has_latin_layout = TRUE;
|
||||
}
|
||||
|
||||
if (type != NULL && id != NULL) {
|
||||
if (!is_xkb_source) {
|
||||
g_variant_builder_add (&input_source_builder, "(ss)", type, id);
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_latin_layout) {
|
||||
g_variant_builder_add (&input_source_builder, "(ss)", "xkb", "us");
|
||||
--
|
||||
2.41.0.rc2
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e5a05979db85f7a76b1292efb466b3d49e1e0564 Mon Sep 17 00:00:00 2001
|
||||
From 8912009c53aa45c8de0118ae416d5699ca31becf Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 13 Aug 2023 10:30:11 -0400
|
||||
Subject: [PATCH 08/10] gnome-initial-setup: Add OEM mode
|
||||
Subject: [PATCH 09/11] gnome-initial-setup: Add OEM mode
|
||||
|
||||
OEM mode is designed to get run when a site has imaged a bunch
|
||||
of machines, and handed them off to the user.
|
||||
@ -155,7 +155,7 @@ index aedb9a73..49639bef 100644
|
||||
gboolean parental_controls_enabled);
|
||||
|
||||
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
||||
index 0e155cd3..82b8bba9 100644
|
||||
index 2bd2d375..6fe57017 100644
|
||||
--- a/gnome-initial-setup/gnome-initial-setup.c
|
||||
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
||||
@@ -26,90 +26,91 @@
|
@ -1,7 +1,7 @@
|
||||
From 87950841dceb637f6f6da001e283b53527bf5312 Mon Sep 17 00:00:00 2001
|
||||
From 06ff8e13a06aeb92b107e0483198042ab017593e Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 13 Aug 2023 16:33:49 -0400
|
||||
Subject: [PATCH 09/10] polkit: Add fedora specfic rules
|
||||
Subject: [PATCH 10/11] polkit: Add fedora specfic rules
|
||||
|
||||
We should probably add some way to check vendor.conf for the policy
|
||||
updates instead of a hardcoded list.
|
@ -1,7 +1,7 @@
|
||||
From 4c263eb0ab00dbdcea4589fca4dc3a82f18de5eb Mon Sep 17 00:00:00 2001
|
||||
From 6a5a2f04c6db1c6c329fc344f09aa8db53876cbb Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 22 Aug 2023 13:51:40 -0400
|
||||
Subject: [PATCH 10/10] gnome-initial-setup: Read /etc/sysconfig/anaconda
|
||||
Subject: [PATCH 11/11] gnome-initial-setup: Read /etc/sysconfig/anaconda
|
||||
|
||||
Just as /var/lib/gnome-initial-setup/state may show pages the user has
|
||||
already answered, on Fedora, /etc/sysconfig/anaconda shows pages the user has
|
||||
@ -13,7 +13,7 @@ This commit skips those from the --new-user mode as well.
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
|
||||
index 82b8bba9..0ac93fe9 100644
|
||||
index 6fe57017..f9b3923f 100644
|
||||
--- a/gnome-initial-setup/gnome-initial-setup.c
|
||||
+++ b/gnome-initial-setup/gnome-initial-setup.c
|
||||
@@ -172,72 +172,95 @@ pages_to_skip_from_file (GisDriver *driver)
|
@ -3,7 +3,7 @@
|
||||
%global glib_required_version 2.63.1
|
||||
%global gtk_required_version 4.6
|
||||
%global geoclue_version 2.3.1
|
||||
%global gnome_desktop_version 44.0-6
|
||||
%global gnome_desktop_version 44.0-7
|
||||
|
||||
%global tarball_version %%(echo %{version} | tr '~' '.')
|
||||
|
||||
@ -17,16 +17,17 @@ URL: https://wiki.gnome.org/Design/OS/InitialSetup
|
||||
Source0: https://download.gnome.org/sources/%{name}/45/%{name}-%{tarball_version}.tar.xz
|
||||
Source1: vendor.conf
|
||||
|
||||
Patch: 0001-keyboard-Get-default-input-sources-from-gnome-deskto.patch
|
||||
Patch: 0002-gnome-initial-setup-Bump-GLib-required-version-to-2..patch
|
||||
Patch: 0003-driver-Specify-mode-via-flags-instead-of-boolean.patch
|
||||
Patch: 0004-initial-setup-Don-t-show-duplicated-pages-between-mo.patch
|
||||
Patch: 0005-summary-Write-uid-file-with-other-state-files.patch
|
||||
Patch: 0001-keyboard-stop-setting-current-input-source.patch
|
||||
Patch: 0002-keyboard-write-to-mru-sources-setting-if-it-has-neve.patch
|
||||
Patch: 0003-keyboard-Get-default-input-sources-from-gnome-deskto.patch
|
||||
Patch: 0004-gnome-initial-setup-Bump-GLib-required-version-to-2..patch
|
||||
Patch: 0005-driver-Specify-mode-via-flags-instead-of-boolean.patch
|
||||
Patch: 0006-gnome-initial-setup-Add-live-user-mode.patch
|
||||
Patch: 0007-keyboard-Don-t-add-default-input-sources-if-input-so.patch
|
||||
Patch: 0008-gnome-initial-setup-Add-OEM-mode.patch
|
||||
Patch: 0009-polkit-Add-fedora-specfic-rules.patch
|
||||
Patch: 0010-gnome-initial-setup-Read-etc-sysconfig-anaconda.patch
|
||||
Patch: 0007-initial-setup-Don-t-show-duplicated-pages-between-mo.patch
|
||||
Patch: 0008-keyboard-Don-t-add-default-input-sources-if-input-so.patch
|
||||
Patch: 0009-gnome-initial-setup-Add-OEM-mode.patch
|
||||
Patch: 0010-polkit-Add-fedora-specfic-rules.patch
|
||||
Patch: 0011-gnome-initial-setup-Read-etc-sysconfig-anaconda.patch
|
||||
|
||||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: gcc
|
||||
|
Loading…
Reference in New Issue
Block a user