Remove downstream patch for the "Boot Options" menu

Simplify downstream patch for the "Hidden Grub Menu" integration
This commit is contained in:
Hans de Goede 2020-09-03 17:52:20 +02:00
parent 0befe0872a
commit 39115cc8d1
3 changed files with 14 additions and 193 deletions

View File

@ -1,173 +0,0 @@
From 3e5779207e2bfab25978e80ac62e8af8c3685f8e Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Tue, 14 Aug 2018 14:41:43 +0200
Subject: [PATCH 1/2] Add support for new ConfirmedRebootToBootOptions signal
send by org.gnome.SessionManager.EndSessionDialog
In order to allow the user to choose advanced boot-options on systems where
the boot menu is not shown by default at boot, gnome-shell's endSessionDialog.js
may emit a new ConfirmedRebootToBootOptions signal to indicate that
gnome-session should reboot the system in such a way that the boot-menu will
be shown next boot.
This implements the backend for the "Boot Options" button from:
https://wiki.gnome.org/Design/OS/BootOptions
Note that at the moment ConfirmedRebootToBootOptions is just treated as an
alias to ConfirmedReboot, since there is no bootloader agnostic way yet to
indicate the menu should be shown.
For now the FIXME may be patched with a distro specific patch to implement
this for the distro's chosen bootloader. I will start a discussion on
systemd-devel to come up with a distro / bootloader agnostic interface
for this.
---
gnome-session/gsm-manager.c | 28 ++++++++++++++++++++++++++++
gnome-session/gsm-shell.c | 10 ++++++++++
gnome-session/gsm-shell.h | 7 ++++---
3 files changed, 42 insertions(+), 3 deletions(-)
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index d41bdcac..e0c05d82 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -117,6 +117,7 @@ typedef enum
GSM_MANAGER_LOGOUT_NONE,
GSM_MANAGER_LOGOUT_LOGOUT,
GSM_MANAGER_LOGOUT_REBOOT,
+ GSM_MANAGER_LOGOUT_REBOOT_TO_BOOT_OPTIONS,
GSM_MANAGER_LOGOUT_REBOOT_INTERACT,
GSM_MANAGER_LOGOUT_SHUTDOWN,
GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT,
@@ -176,6 +177,7 @@ struct GsmManagerPrivate
guint shell_end_session_dialog_confirmed_logout_id;
guint shell_end_session_dialog_confirmed_shutdown_id;
guint shell_end_session_dialog_confirmed_reboot_id;
+ guint shell_end_session_dialog_confirmed_reboot_to_boot_options_id;
};
enum {
@@ -490,6 +492,7 @@ gsm_manager_quit (GsmManager *manager)
gsm_quit ();
break;
case GSM_MANAGER_LOGOUT_REBOOT:
+ case GSM_MANAGER_LOGOUT_REBOOT_TO_BOOT_OPTIONS:
case GSM_MANAGER_LOGOUT_REBOOT_INTERACT:
gsm_system_complete_shutdown (manager->priv->system);
gsm_quit ();
@@ -1161,6 +1164,7 @@ end_session_or_show_shell_dialog (GsmManager *manager)
type = GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT;
break;
case GSM_MANAGER_LOGOUT_REBOOT:
+ case GSM_MANAGER_LOGOUT_REBOOT_TO_BOOT_OPTIONS:
case GSM_MANAGER_LOGOUT_REBOOT_INTERACT:
type = GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART;
break;
@@ -3450,6 +3454,12 @@ disconnect_shell_dialog_signals (GsmManager *manager)
manager->priv->shell_end_session_dialog_confirmed_reboot_id = 0;
}
+ if (manager->priv->shell_end_session_dialog_confirmed_reboot_to_boot_options_id != 0) {
+ g_signal_handler_disconnect (manager->priv->shell,
+ manager->priv->shell_end_session_dialog_confirmed_reboot_to_boot_options_id);
+ manager->priv->shell_end_session_dialog_confirmed_reboot_to_boot_options_id = 0;
+ }
+
if (manager->priv->shell_end_session_dialog_open_failed_id != 0) {
g_signal_handler_disconnect (manager->priv->shell,
manager->priv->shell_end_session_dialog_open_failed_id);
@@ -3512,6 +3522,14 @@ on_shell_end_session_dialog_confirmed_reboot (GsmShell *shell,
disconnect_shell_dialog_signals (manager);
}
+static void
+on_shell_end_session_dialog_confirmed_reboot_to_boot_options (GsmShell *shell,
+ GsmManager *manager)
+{
+ _handle_end_session_dialog_response (manager, GSM_MANAGER_LOGOUT_REBOOT_TO_BOOT_OPTIONS);
+ disconnect_shell_dialog_signals (manager);
+}
+
static void
connect_shell_dialog_signals (GsmManager *manager)
{
@@ -3547,6 +3565,12 @@ connect_shell_dialog_signals (GsmManager *manager)
"end-session-dialog-confirmed-reboot",
G_CALLBACK (on_shell_end_session_dialog_confirmed_reboot),
manager);
+
+ manager->priv->shell_end_session_dialog_confirmed_reboot_to_boot_options_id =
+ g_signal_connect (manager->priv->shell,
+ "end-session-dialog-confirmed-reboot-to-boot-options",
+ G_CALLBACK (on_shell_end_session_dialog_confirmed_reboot_to_boot_options),
+ manager);
}
static void
@@ -3820,6 +3844,10 @@ do_query_end_session_exit (GsmManager *manager)
case GSM_MANAGER_LOGOUT_REBOOT_INTERACT:
reboot = TRUE;
break;
+ case GSM_MANAGER_LOGOUT_REBOOT_TO_BOOT_OPTIONS:
+ /* FIXME tell bootmanager to show menu on next boot */
+ reboot = TRUE;
+ break;
case GSM_MANAGER_LOGOUT_SHUTDOWN:
case GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT:
shutdown = TRUE;
diff --git a/gnome-session/gsm-shell.c b/gnome-session/gsm-shell.c
index 04cfa2f5..d727232d 100644
--- a/gnome-session/gsm-shell.c
+++ b/gnome-session/gsm-shell.c
@@ -69,6 +69,7 @@ enum {
END_SESSION_DIALOG_CONFIRMED_LOGOUT,
END_SESSION_DIALOG_CONFIRMED_SHUTDOWN,
END_SESSION_DIALOG_CONFIRMED_REBOOT,
+ END_SESSION_DIALOG_CONFIRMED_REBOOT_TO_BOOT_OPTIONS,
NUMBER_OF_SIGNALS
};
@@ -179,6 +180,14 @@ gsm_shell_class_init (GsmShellClass *shell_class)
NULL, NULL, NULL,
G_TYPE_NONE, 0);
+ signals [END_SESSION_DIALOG_CONFIRMED_REBOOT_TO_BOOT_OPTIONS] =
+ g_signal_new ("end-session-dialog-confirmed-reboot-to-boot-options",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GsmShellClass, end_session_dialog_confirmed_reboot_to_boot_options),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
g_type_class_add_private (shell_class, sizeof (GsmShellPrivate));
}
@@ -342,6 +351,7 @@ on_end_session_dialog_dbus_signal (GDBusProxy *proxy,
{ "Canceled", END_SESSION_DIALOG_CANCELED },
{ "ConfirmedLogout", END_SESSION_DIALOG_CONFIRMED_LOGOUT },
{ "ConfirmedReboot", END_SESSION_DIALOG_CONFIRMED_REBOOT },
+ { "ConfirmedRebootToBootOptions", END_SESSION_DIALOG_CONFIRMED_REBOOT_TO_BOOT_OPTIONS },
{ "ConfirmedShutdown", END_SESSION_DIALOG_CONFIRMED_SHUTDOWN },
{ NULL, -1 }
};
diff --git a/gnome-session/gsm-shell.h b/gnome-session/gsm-shell.h
index e236493a..b1cdd457 100644
--- a/gnome-session/gsm-shell.h
+++ b/gnome-session/gsm-shell.h
@@ -64,9 +64,10 @@ struct _GsmShellClass
void (* end_session_dialog_closed) (GsmShell *shell);
void (* end_session_dialog_canceled) (GsmShell *shell);
- void (* end_session_dialog_confirmed_logout) (GsmShell *shell);
- void (* end_session_dialog_confirmed_shutdown) (GsmShell *shell);
- void (* end_session_dialog_confirmed_reboot) (GsmShell *shell);
+ void (* end_session_dialog_confirmed_logout) (GsmShell *shell);
+ void (* end_session_dialog_confirmed_shutdown) (GsmShell *shell);
+ void (* end_session_dialog_confirmed_reboot) (GsmShell *shell);
+ void (* end_session_dialog_confirmed_reboot_to_boot_options) (GsmShell *shell);
};
--
2.23.0

View File

@ -1,7 +1,7 @@
From 5314490a7e5ce5770059363a84e13e87f3d9669c Mon Sep 17 00:00:00 2001
From e3d6f1c1d342d0c74f2125ea0efa2a9669aaa8df Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Tue, 14 Aug 2018 14:49:59 +0200
Subject: [PATCH 2/2] Fedora: Set grub boot-flags on shutdown / reboot
Subject: [PATCH] Fedora: Set grub boot-flags on shutdown / reboot
Fedora's grub will automatically hide the boot-menu if the previous
boot has set the boot_success flag in grub's environment. This happens
@ -13,18 +13,15 @@ a reboot / shutdown is initiated through gnome-session then the user
is successfully interacting with the system, so set the boot_success
flag from gnome_session for this case to fix reboot from gdm leading to
the boot-menu not being hidden.
Likewise implement ConfirmedRebootMenu handling in a Fedora specific
way (for now) by setting the menu_show_once grub bootflag in this case.
---
gnome-session/gsm-manager.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
gnome-session/gsm-manager.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index e0c05d82..b4d50936 100644
index 6839a02d..589efb02 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -3842,14 +3842,27 @@ do_query_end_session_exit (GsmManager *manager)
@@ -3823,10 +3823,22 @@ do_query_end_session_exit (GsmManager *manager)
break;
case GSM_MANAGER_LOGOUT_REBOOT:
case GSM_MANAGER_LOGOUT_REBOOT_INTERACT:
@ -36,12 +33,6 @@ index e0c05d82..b4d50936 100644
+ system("/usr/sbin/grub2-set-bootflag boot_success");
reboot = TRUE;
break;
case GSM_MANAGER_LOGOUT_REBOOT_TO_BOOT_OPTIONS:
- /* FIXME tell bootmanager to show menu on next boot */
+ /* Fedora specific implementation to show the menu on next boot */
+ system("/usr/sbin/grub2-set-bootflag menu_show_once");
reboot = TRUE;
break;
case GSM_MANAGER_LOGOUT_SHUTDOWN:
case GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT:
+ /*
@ -54,5 +45,5 @@ index e0c05d82..b4d50936 100644
break;
default:
--
2.23.0
2.28.0

View File

@ -9,7 +9,7 @@
Name: gnome-session
Version: 3.37.0
Release: 1%{?dist}
Release: 2%{?dist}
Summary: GNOME session manager
License: GPLv2+
@ -21,10 +21,9 @@ Patch1: gnome-session-3.3.92-nv30.patch
Patch3: gnome-session-3.6.2-swrast.patch
# https://bugzilla.gnome.org/show_bug.cgi?id=772421
Patch4: 0001-check-accelerated-gles-Use-eglGetPlatformDisplay-EXT.patch
# Implement https://wiki.gnome.org/Design/OS/BootOptions
# For https://fedoraproject.org/w/index.php?title=Changes/HiddenGrubMenu
# This should go upstream once systemd has a generic interface for this
Patch5: 0001-Add-support-for-new-ConfirmedRebootToBootOptions-sig.patch
Patch6: 0002-Fedora-Set-grub-boot-flags-on-shutdown-reboot.patch
Patch5: 0001-Fedora-Set-grub-boot-flags-on-shutdown-reboot.patch
BuildRequires: meson
BuildRequires: gcc
@ -130,6 +129,10 @@ Desktop file to add GNOME on wayland to display manager session menu.
%{_userunitdir}/gnome-launched-.scope.d/
%changelog
* Thu Sep 3 2020 Hans de Goede <hdegoede@redhat.com> - 3.37.0-2
- Remove downstream patch for the "Boot Options" menu
- Simplify downstream patch for the "Hidden Grub Menu" integration
* Mon Aug 17 2020 Kalev Lember <klember@redhat.com> - 3.37.0-1
- Update to 3.37.0