summaryrefslogtreecommitdiffstats
path: root/debian/patches
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/Add-StartupWMClass-to-.desktop-file.patch29
-rw-r--r--debian/patches/Update-for-removal-of-WebKitGTK-sandbox-API.patch26
-rw-r--r--debian/patches/driver-Set-a-non-trivial-window-title.patch28
-rw-r--r--debian/patches/keyboard-Correctly-update-labels-for-IBus-engines.patch189
-rw-r--r--debian/patches/keyboard-Resort-refilter-list-when-picking-shortlist.patch96
-rw-r--r--debian/patches/keyboard-Update-filter-and-sort-when-the-display-name-cha.patch46
-rw-r--r--debian/patches/privacy-Move-subtitles-to-separate-labels.patch121
-rw-r--r--debian/patches/reenable-existing-user-mode.patch36
-rw-r--r--debian/patches/series8
9 files changed, 579 insertions, 0 deletions
diff --git a/debian/patches/Add-StartupWMClass-to-.desktop-file.patch b/debian/patches/Add-StartupWMClass-to-.desktop-file.patch
new file mode 100644
index 0000000..c09abb8
--- /dev/null
+++ b/debian/patches/Add-StartupWMClass-to-.desktop-file.patch
@@ -0,0 +1,29 @@
+From: Will Thompson <wjt@endlessos.org>
+Date: Fri, 3 Mar 2023 11:04:52 +0000
+Subject: Add StartupWMClass to .desktop file
+
+Initial Setup's application ID is org.gnome.InitialSetup. This does not
+match the desktop file name. It is too late in the current development
+cycle to rename the desktop file to match.
+
+Instead, allow the shell to associate the initial setup window with its
+desktop file by specifying StartupWMClass.
+
+See https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/179 and
+https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/merge_requests/186
+for more background.
+
+Origin: upstream, 44~rc, commit:87e81b9c80dfb05f43fe62bb5dad62f707f3b824
+---
+ data/gnome-initial-setup.desktop.in.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/data/gnome-initial-setup.desktop.in.in b/data/gnome-initial-setup.desktop.in.in
+index e7aa666..c15fd6e 100644
+--- a/data/gnome-initial-setup.desktop.in.in
++++ b/data/gnome-initial-setup.desktop.in.in
+@@ -10,3 +10,4 @@ Categories=GNOME;GTK;System;
+ OnlyShowIn=GNOME;
+ NoDisplay=true
+ X-GNOME-HiddenUnderSystemd=@systemd_hidden@
++StartupWMClass=org.gnome.InitialSetup
diff --git a/debian/patches/Update-for-removal-of-WebKitGTK-sandbox-API.patch b/debian/patches/Update-for-removal-of-WebKitGTK-sandbox-API.patch
new file mode 100644
index 0000000..a9e150b
--- /dev/null
+++ b/debian/patches/Update-for-removal-of-WebKitGTK-sandbox-API.patch
@@ -0,0 +1,26 @@
+From: Michael Catanzaro <mcatanzaro@redhat.com>
+Date: Thu, 19 Jan 2023 20:07:40 -0600
+Subject: Update for removal of WebKitGTK sandbox API
+
+WebKitGTK 2.39.5 contains an ABI break. The sandbox is now mandatory, so
+the API to enable/disable it is gone.
+
+(cherry picked from commit 1a8f9ecfceb2e3106910b7bf7987f0fc75886670)
+---
+ gnome-initial-setup/gis-driver.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
+index 8459efa..574887c 100644
+--- a/gnome-initial-setup/gis-driver.c
++++ b/gnome-initial-setup/gis-driver.c
+@@ -788,7 +788,9 @@ gis_driver_startup (GApplication *app)
+
+ G_APPLICATION_CLASS (gis_driver_parent_class)->startup (app);
+
++#if !WEBKIT_CHECK_VERSION(2, 39, 5)
+ webkit_web_context_set_sandbox_enabled (context, TRUE);
++#endif
+
+ if (driver->mode == GIS_DRIVER_MODE_NEW_USER)
+ connect_to_gdm (driver);
diff --git a/debian/patches/driver-Set-a-non-trivial-window-title.patch b/debian/patches/driver-Set-a-non-trivial-window-title.patch
new file mode 100644
index 0000000..586d0aa
--- /dev/null
+++ b/debian/patches/driver-Set-a-non-trivial-window-title.patch
@@ -0,0 +1,28 @@
+From: Simon McVittie <smcv@debian.org>
+Date: Mon, 6 Mar 2023 23:34:50 +0000
+Subject: driver: Set a non-trivial window title
+
+When running in "existing user" mode (which isn't done upstream, but
+Debian and Ubuntu re-enable it because they don't have GNOME Tour),
+the window title is visible in Alt+[key above Tab] and the Overview.
+It defaults to "gnome-initial-setup", but looks better if we reuse the
+translated name from the .desktop file.
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+Forwarded: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/merge_requests/191
+---
+ gnome-initial-setup/gis-driver.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
+index 1ddf3c6..8459efa 100644
+--- a/gnome-initial-setup/gis-driver.c
++++ b/gnome-initial-setup/gis-driver.c
+@@ -797,6 +797,7 @@ gis_driver_startup (GApplication *app)
+ "application", app,
+ "icon-name", "preferences-system",
+ "deletable", FALSE,
++ "title", _("Initial Setup"),
+ NULL);
+
+ g_signal_connect (driver->main_window,
diff --git a/debian/patches/keyboard-Correctly-update-labels-for-IBus-engines.patch b/debian/patches/keyboard-Correctly-update-labels-for-IBus-engines.patch
new file mode 100644
index 0000000..3019576
--- /dev/null
+++ b/debian/patches/keyboard-Correctly-update-labels-for-IBus-engines.patch
@@ -0,0 +1,189 @@
+From: Simon McVittie <smcv@debian.org>
+Date: Mon, 6 Mar 2023 22:23:28 +0000
+Subject: keyboard: Correctly update labels for IBus engines
+
+After the port from GTK 3 to 4, in general there's an additional level
+of indirection: the children of priv->input_list are GtkListBoxRow
+objects containing the widget whose user-data is the InputWidget. This
+means we didn't find the InputWidget and therefore couldn't update its
+display name.
+
+Unfortunately, there is one exception to the rule that every child
+of a GtkListBox is a GtkListBoxRow: the placeholder object, in our
+case priv->no_results, is not wrapped in a GtkListBoxRow (see also
+GNOME/gtk#4523). This means that walking the GtkWidget tree seems rather
+fragile: it's difficult to tell whether each child of the GtkListBox
+is a GtkListBoxRow, or the placeholder object priv->no_results, or
+some third type of object that could be added by a future GTK version
+(particularly since there is no particular type-safety here).
+
+Instead of walking the widget tree, maintain our own parallel list of
+known keyboard layouts and other input methods. For this list, we can
+safely assert that every item is something that we put there, with the
+invariant that it's a GtkBox with an InputWidget attached.
+
+This means that we can reliably find the InputWidget, and update its
+associated display name.
+
+Fixes: ad500afc "keyboard: Port to GTK4"
+Bug: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/180
+Signed-off-by: Simon McVittie <smcv@debian.org>
+Bug-Debian: https://bugs.debian.org/1032382
+Forwarded: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/180
+---
+ .../pages/keyboard/cc-input-chooser.c | 56 ++++++++++++----------
+ 1 file changed, 31 insertions(+), 25 deletions(-)
+
+diff --git a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+index 2dd58e9..ae8f2d7 100644
+--- a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
++++ b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+@@ -50,6 +50,7 @@ struct _CcInputChooserPrivate
+ {
+ GtkWidget *filter_entry;
+ GtkWidget *input_list;
++ GPtrArray *input_widget_boxes;
+ GHashTable *inputs;
+
+ GtkWidget *no_results;
+@@ -96,6 +97,11 @@ typedef struct {
+ gboolean is_extra;
+ } InputWidget;
+
++/*
++ * Invariant: for each box in priv->input_widget_boxes,
++ * get_input_widget (row) is non-null and
++ * get_input_widget (row)->box == box
++ */
+ static InputWidget *
+ get_input_widget (GtkWidget *widget)
+ {
+@@ -258,21 +264,20 @@ static void
+ sync_all_checkmarks (CcInputChooser *chooser)
+ {
+ CcInputChooserPrivate *priv;
+- GtkWidget *row;
+ gboolean invalidate = FALSE;
++ gsize i;
+
+ priv = cc_input_chooser_get_instance_private (chooser);
+- row = gtk_widget_get_first_child (priv->input_list);
+- while (row) {
++
++ for (i = 0; i < priv->input_widget_boxes->len; i++) {
+ InputWidget *widget;
+ GtkWidget *child;
+ gboolean should_be_visible;
+
+- child = gtk_list_box_row_get_child (GTK_LIST_BOX_ROW (row));
++ child = g_ptr_array_index (priv->input_widget_boxes, i);
+ widget = get_input_widget (child);
+-
+- if (widget == NULL)
+- break;
++ g_assert (widget != NULL);
++ g_assert (widget->box == child);
+
+ if (priv->id == NULL || priv->type == NULL)
+ should_be_visible = FALSE;
+@@ -287,8 +292,6 @@ sync_all_checkmarks (CcInputChooser *chooser)
+ widget->is_extra = FALSE;
+ invalidate = TRUE;
+ }
+-
+- row = gtk_widget_get_next_sibling (row);
+ }
+
+ if (invalidate) {
+@@ -335,28 +338,26 @@ static void
+ choose_non_extras (CcInputChooser *chooser)
+ {
+ CcInputChooserPrivate *priv;
+- GtkWidget *row;
+ guint count = 0;
++ gsize i;
+
+ priv = cc_input_chooser_get_instance_private (chooser);
+- row = gtk_widget_get_first_child (priv->input_list);
+- while (row) {
++
++ for (i = 0; i < priv->input_widget_boxes->len; i++) {
+ InputWidget *widget;
+ GtkWidget *child;
+
+ if (++count > MIN_ROWS)
+ break;
+
+- child = gtk_list_box_row_get_child (GTK_LIST_BOX_ROW (row));
++ child = g_ptr_array_index (priv->input_widget_boxes, i);
+ widget = get_input_widget (child);
+- if (widget == NULL)
+- break;
++ g_assert (widget != NULL);
++ g_assert (widget->box == child);
+
+ g_debug ("Picking %s (%s:%s) as non-extra",
+ widget->name, widget->type, widget->id);
+ widget->is_extra = FALSE;
+-
+- row = gtk_widget_get_next_sibling (row);
+ }
+
+ /* Changing is_extra above affects the ordering and the visibility
+@@ -391,6 +392,7 @@ add_rows_to_list (CcInputChooser *chooser,
+ g_hash_table_add (priv->inputs, key);
+
+ widget = input_widget_new (chooser, type, id, TRUE);
++ g_ptr_array_add (priv->input_widget_boxes, g_object_ref_sink (widget));
+ gtk_list_box_append (GTK_LIST_BOX (priv->input_list), widget);
+ }
+ }
+@@ -588,21 +590,21 @@ update_ibus_active_sources (CcInputChooser *chooser)
+ {
+ CcInputChooserPrivate *priv;
+ IBusEngineDesc *engine_desc;
+- GtkWidget *child;
+ const gchar *type;
+ const gchar *id;
+ gchar *name;
++ gsize i;
+
+ priv = cc_input_chooser_get_instance_private (chooser);
+- child = gtk_widget_get_first_child (priv->input_list);
+- while (child) {
+- InputWidget *row;
+
+- row = get_input_widget (child);
+- child = gtk_widget_get_next_sibling (child);
++ for (i = 0; i < priv->input_widget_boxes->len; i++) {
++ GtkWidget *child;
++ InputWidget *row;
+
+- if (row == NULL)
+- continue;
++ child = g_ptr_array_index (priv->input_widget_boxes, i);
++ row = get_input_widget (child);
++ g_assert (row != NULL);
++ g_assert (row->box == child);
+
+ type = row->type;
+ id = row->id;
+@@ -774,6 +776,7 @@ cc_input_chooser_finalize (GObject *object)
+
+ g_clear_object (&priv->xkb_info);
+ g_hash_table_unref (priv->inputs);
++ g_clear_pointer (&priv->input_widget_boxes, g_ptr_array_unref);
+ #ifdef HAVE_IBUS
+ g_clear_object (&priv->ibus);
+ if (priv->ibus_cancellable)
+@@ -844,7 +847,10 @@ cc_input_chooser_class_init (CcInputChooserClass *klass)
+ static void
+ cc_input_chooser_init (CcInputChooser *chooser)
+ {
++ CcInputChooserPrivate *priv = cc_input_chooser_get_instance_private (chooser);
++
+ gtk_widget_init_template (GTK_WIDGET (chooser));
++ priv->input_widget_boxes = g_ptr_array_new_with_free_func (g_object_unref);
+ }
+
+ void
diff --git a/debian/patches/keyboard-Resort-refilter-list-when-picking-shortlist.patch b/debian/patches/keyboard-Resort-refilter-list-when-picking-shortlist.patch
new file mode 100644
index 0000000..0378ab0
--- /dev/null
+++ b/debian/patches/keyboard-Resort-refilter-list-when-picking-shortlist.patch
@@ -0,0 +1,96 @@
+From: Will Thompson <wjt@endlessos.org>
+Date: Fri, 3 Mar 2023 13:17:18 +0000
+Subject: keyboard: Resort & refilter list when picking shortlist
+
+Each row of the keyboard layout/input method list has a flag for whether
+it is an "extra" layout, hidden by default, or not. All rows are added
+with the is_extra flag set to TRUE; later, they can be marked as
+non-extra in a few ways:
+
+- The currently-selected layout is (indirectly) marked as non-extra
+- Selecting a layout marks it as non-extra
+- 5 semi-arbitrary layouts are marked as non-extra
+
+To make the list work, the GtkListBox has sort and filter functions set:
+
+- The sort function sorts extra layouts after non-extra layouts
+- The filter function hides extra layouts, unless the user is searching
+ or has clicked the vertical ellipsis to see all layouts
+
+But previously, the sort and filter of the list were not always
+invalidated when one or more layouts' is_extra flags were changed. As a
+result, the list always showed no layouts by default, just the vertical
+ellipsis to see all layouts.
+
+Fix this by invalidating both sort and filter when a layout is marked
+non-extra.
+
+Bug: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/165
+Origin: upstream, 44.rc, commit:151688f670e8c6f5ecc8a7bac686ddcc815cdf11
+---
+ .../pages/keyboard/cc-input-chooser.c | 22 +++++++++++++++++++---
+ 1 file changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+index efba249..2dd58e9 100644
+--- a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
++++ b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+@@ -259,6 +259,7 @@ sync_all_checkmarks (CcInputChooser *chooser)
+ {
+ CcInputChooserPrivate *priv;
+ GtkWidget *row;
++ gboolean invalidate = FALSE;
+
+ priv = cc_input_chooser_get_instance_private (chooser);
+ row = gtk_widget_get_first_child (priv->input_list);
+@@ -271,7 +272,7 @@ sync_all_checkmarks (CcInputChooser *chooser)
+ widget = get_input_widget (child);
+
+ if (widget == NULL)
+- return;
++ break;
+
+ if (priv->id == NULL || priv->type == NULL)
+ should_be_visible = FALSE;
+@@ -280,13 +281,20 @@ sync_all_checkmarks (CcInputChooser *chooser)
+ g_strcmp0 (widget->type, priv->type) == 0;
+ gtk_widget_set_opacity (widget->checkmark, should_be_visible ? 1.0 : 0.0);
+
+- if (widget->is_extra && should_be_visible)
++ if (widget->is_extra && should_be_visible) {
++ g_debug ("Marking selected layout %s (%s:%s) as non-extra",
++ widget->name, widget->type, widget->id);
+ widget->is_extra = FALSE;
++ invalidate = TRUE;
++ }
+
+ row = gtk_widget_get_next_sibling (row);
+ }
+
+- gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->input_list));
++ if (invalidate) {
++ gtk_list_box_invalidate_sort (GTK_LIST_BOX (priv->input_list));
++ gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->input_list));
++ }
+ }
+
+ static GtkWidget *
+@@ -344,10 +352,18 @@ choose_non_extras (CcInputChooser *chooser)
+ if (widget == NULL)
+ break;
+
++ g_debug ("Picking %s (%s:%s) as non-extra",
++ widget->name, widget->type, widget->id);
+ widget->is_extra = FALSE;
+
+ row = gtk_widget_get_next_sibling (row);
+ }
++
++ /* Changing is_extra above affects the ordering and the visibility
++ * of the newly non-extra rows.
++ */
++ gtk_list_box_invalidate_sort (GTK_LIST_BOX (priv->input_list));
++ gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->input_list));
+ }
+
+ static void
diff --git a/debian/patches/keyboard-Update-filter-and-sort-when-the-display-name-cha.patch b/debian/patches/keyboard-Update-filter-and-sort-when-the-display-name-cha.patch
new file mode 100644
index 0000000..ba8d296
--- /dev/null
+++ b/debian/patches/keyboard-Update-filter-and-sort-when-the-display-name-cha.patch
@@ -0,0 +1,46 @@
+From: Simon McVittie <smcv@debian.org>
+Date: Sun, 5 Mar 2023 16:16:12 +0000
+Subject: keyboard: Update filter and sort when the display name changes
+
+The display name in `InputWidget.name` can affect `sort_inputs()`
+and `input_visible()`, so we should update it when we replace the
+placeholder display name with the real one, and tell GTK to update its
+state accordingly.
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+Bug-Debian: https://bugs.debian.org/1032382
+Forwarded: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/180
+---
+ gnome-initial-setup/pages/keyboard/cc-input-chooser.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+index ae8f2d7..b851ec6 100644
+--- a/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
++++ b/gnome-initial-setup/pages/keyboard/cc-input-chooser.c
+@@ -589,6 +589,7 @@ static void
+ update_ibus_active_sources (CcInputChooser *chooser)
+ {
+ CcInputChooserPrivate *priv;
++ gboolean invalidate = FALSE;
+ IBusEngineDesc *engine_desc;
+ const gchar *type;
+ const gchar *id;
+@@ -615,9 +616,16 @@ update_ibus_active_sources (CcInputChooser *chooser)
+ if (engine_desc) {
+ name = engine_get_display_name (engine_desc);
+ gtk_label_set_text (GTK_LABEL (row->label), name);
+- g_free (name);
++ g_clear_pointer (&row->name, g_free);
++ row->name = g_steal_pointer (&name);
++ invalidate = TRUE;
+ }
+ }
++
++ if (invalidate) {
++ gtk_list_box_invalidate_sort (GTK_LIST_BOX (priv->input_list));
++ gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->input_list));
++ }
+ }
+
+ static void
diff --git a/debian/patches/privacy-Move-subtitles-to-separate-labels.patch b/debian/patches/privacy-Move-subtitles-to-separate-labels.patch
new file mode 100644
index 0000000..275aa23
--- /dev/null
+++ b/debian/patches/privacy-Move-subtitles-to-separate-labels.patch
@@ -0,0 +1,121 @@
+From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
+Date: Tue, 14 Mar 2023 15:29:45 -0300
+Subject: privacy: Move subtitles to separate labels
+
+Prior to 71e3e2b4, the subtitles were contained into separate
+GtkLabels connected to the the 'activate-link' signal. That commit
+moved these labels to inside the corresponding AdwActionRows, but
+did not account for the 'activate-link' signal.
+
+To the best of my knowledgethere is currently no way to properly
+support this with libadwaita rows. In addition to that, the latest
+mockup [1] suggest placing these labels beneath the listbox anyway.
+
+Move the subtitle labels to outside the action row, into a separate
+labels beneath the listbox. Connect to the 'activate-link' signal
+again.
+
+[1] https://gitlab.gnome.org/Teams/Design/os-mockups/-/raw/master/initial-setup/initial-setup.png
+
+(cherry picked from commit d230f18dc50bc40977b613845c8d50d1327cacf4)
+
+Bug: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/181
+Bug-Debian: https://bugs.debian.org/1033228
+Forwarded: https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/merge_requests/196
+---
+ .../pages/privacy/gis-privacy-page.c | 6 ++---
+ .../pages/privacy/gis-privacy-page.ui | 31 +++++++++++++++++++++-
+ 2 files changed, 33 insertions(+), 4 deletions(-)
+
+diff --git a/gnome-initial-setup/pages/privacy/gis-privacy-page.c b/gnome-initial-setup/pages/privacy/gis-privacy-page.c
+index 3632142..21e5d48 100644
+--- a/gnome-initial-setup/pages/privacy/gis-privacy-page.c
++++ b/gnome-initial-setup/pages/privacy/gis-privacy-page.c
+@@ -42,7 +42,7 @@ struct _GisPrivacyPagePrivate
+ {
+ GtkWidget *location_switch;
+ GtkWidget *reporting_group;
+- GtkWidget *reporting_row;
++ GtkWidget *reporting_label;
+ GtkWidget *reporting_switch;
+ GSettings *location_settings;
+ GSettings *privacy_settings;
+@@ -82,7 +82,7 @@ update_os_data (GisPrivacyPage *page)
+ subtitle = g_strdup_printf (_("Sends technical reports that have personal information automatically "
+ "removed. Data is collected by %s."), name);
+ }
+- adw_action_row_set_subtitle (ADW_ACTION_ROW (priv->reporting_row), subtitle);
++ gtk_label_set_markup (GTK_LABEL (priv->reporting_label), subtitle);
+ }
+
+ static void
+@@ -244,7 +244,7 @@ gis_privacy_page_class_init (GisPrivacyPageClass *klass)
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), "/org/gnome/initial-setup/gis-privacy-page.ui");
+ gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisPrivacyPage, location_switch);
+ gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisPrivacyPage, reporting_group);
+- gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisPrivacyPage, reporting_row);
++ gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisPrivacyPage, reporting_label);
+ gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisPrivacyPage, reporting_switch);
+ gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), activate_link);
+
+diff --git a/gnome-initial-setup/pages/privacy/gis-privacy-page.ui b/gnome-initial-setup/pages/privacy/gis-privacy-page.ui
+index 84ea8e3..6c48d5f 100644
+--- a/gnome-initial-setup/pages/privacy/gis-privacy-page.ui
++++ b/gnome-initial-setup/pages/privacy/gis-privacy-page.ui
+@@ -25,7 +25,6 @@
+ <object class="AdwActionRow">
+ <property name="use-markup">True</property>
+ <property name="title" translatable="yes">Location Services</property>
+- <property name="subtitle" translatable="yes">Allows applications to determine your geographical location. Uses the Mozilla Location Service (&lt;a href='https://location.services.mozilla.com/privacy'&gt;privacy policy&lt;/a&gt;).</property>
+ <property name="activatable-widget">location_switch</property>
+ <child>
+ <object class="GtkSwitch" id="location_switch">
+@@ -34,11 +33,27 @@
+ </child>
+ </object>
+ </child>
++ <child>
++ <object class="GtkLabel">
++ <property name="margin-top">12</property>
++ <property name="wrap">True</property>
++ <property name="wrap-mode">word-char</property>
++ <property name="use-markup">True</property>
++ <property name="ellipsize">none</property>
++ <property name="xalign">0.0</property>
++ <property name="label" translatable="yes">Allows applications to determine your geographical location. Uses the Mozilla Location Service (&lt;a href='https://location.services.mozilla.com/privacy'&gt;privacy policy&lt;/a&gt;).</property>
++ <signal name="activate-link" handler="activate_link" object="GisPrivacyPage" swapped="no" />
++ <style>
++ <class name="caption" />
++ </style>
++ </object>
++ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwPreferencesGroup" id="reporting_group">
++ <property name="margin-top">12</property>
+ <child>
+ <object class="AdwActionRow" id="reporting_row">
+ <property name="title" translatable="yes">Automatic Problem Reporting</property>
+@@ -50,6 +65,20 @@
+ </child>
+ </object>
+ </child>
++ <child>
++ <object class="GtkLabel" id="reporting_label">
++ <property name="margin-top">12</property>
++ <property name="wrap">True</property>
++ <property name="wrap-mode">word-char</property>
++ <property name="use-markup">True</property>
++ <property name="ellipsize">none</property>
++ <property name="xalign">0.0</property>
++ <signal name="activate-link" handler="activate_link" object="GisPrivacyPage" swapped="no" />
++ <style>
++ <class name="caption" />
++ </style>
++ </object>
++ </child>
+ </object>
+ </child>
+
diff --git a/debian/patches/reenable-existing-user-mode.patch b/debian/patches/reenable-existing-user-mode.patch
new file mode 100644
index 0000000..d149d39
--- /dev/null
+++ b/debian/patches/reenable-existing-user-mode.patch
@@ -0,0 +1,36 @@
+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Date: Thu, 17 Feb 2022 08:17:17 -0500
+Subject: Re-enable existing users mode since gnome-tour isn't in Debian
+
+This reverts commit 43f1870c "Disable existing-user mode".
+
+Forwarded: not-needed
+---
+ gnome-initial-setup/gnome-initial-setup.c | 14 --------------
+ 1 file changed, 14 deletions(-)
+
+diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
+index 113ded3..4d14fea 100644
+--- a/gnome-initial-setup/gnome-initial-setup.c
++++ b/gnome-initial-setup/gnome-initial-setup.c
+@@ -323,20 +323,6 @@ main (int argc, char *argv[])
+ 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.
+- *
+- * https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/120#note_1019004
+- * https://gitlab.gnome.org/GNOME/gnome-initial-setup/-/issues/12
+- */
+- if (mode == GIS_DRIVER_MODE_EXISTING_USER) {
+- g_message ("Skipping gnome-initial-setup for existing user");
+- gis_ensure_stamp_files (driver);
+- exit (EXIT_SUCCESS);
+- }
+-
+ /* We only do this in existing-user mode, because if gdm launches us
+ * in new-user mode and we just exit, gdm's special g-i-s session
+ * never terminates. */
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..5af2d46
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,8 @@
+Add-StartupWMClass-to-.desktop-file.patch
+keyboard-Resort-refilter-list-when-picking-shortlist.patch
+keyboard-Correctly-update-labels-for-IBus-engines.patch
+keyboard-Update-filter-and-sort-when-the-display-name-cha.patch
+driver-Set-a-non-trivial-window-title.patch
+reenable-existing-user-mode.patch
+Update-for-removal-of-WebKitGTK-sandbox-API.patch
+privacy-Move-subtitles-to-separate-labels.patch