e1531466e1
This change updates grub to the 2.04 release. The new release changed how grub is built, so the bootstrap and bootstrap.conf files have to be added to the dist-git. Also, the gitignore file changed so it has to be updated. Since the patches have been forward ported to 2.04, there's no need for a logic to maintain a patch with the delta between the release and the grub master branch. So the release-to-master.patch is dropped and no longer is updated by the do-rebase script. Also since gnulib isn't part of the grub repository anymore and cloned by the boostrap tool, a gnulib tarball is included as other source file and copied before calling the bootstrap tool. That way grub can be built even in builders that only have access to the sources lookaside cache. Resolves: rhbz#1727279 Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
95 lines
3.3 KiB
Diff
95 lines
3.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Mon, 26 Mar 2018 16:15:53 +0200
|
|
Subject: [PATCH] Accept ESC, F8 and holding SHIFT as user interrupt keys
|
|
|
|
On some devices the ESC key is the hotkey to enter the BIOS/EFI setup
|
|
screen, making it really hard to time pressing it right. Besides that
|
|
ESC is also pretty hard to discover for a user who does not know it
|
|
will unhide the menu.
|
|
|
|
This commit makes F8, which used to be the hotkey to show the Windows
|
|
boot menu during boot for a long long time, also interrupt sleeps /
|
|
stop the menu countdown.
|
|
|
|
This solves the ESC gets into the BIOS setup and also somewhat solves
|
|
the discoverability issue, but leaves the timing issue unresolved.
|
|
|
|
This commit fixes the timing issue by also adding support for keeping
|
|
SHIFT pressed during boot to stop the menu countdown. This matches
|
|
what Ubuntu is doing, which should also help with discoverability.
|
|
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
---
|
|
grub-core/commands/sleep.c | 2 +-
|
|
grub-core/kern/term.c | 16 ++++++++++++++++
|
|
grub-core/normal/menu.c | 2 +-
|
|
include/grub/term.h | 1 +
|
|
4 files changed, 19 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/grub-core/commands/sleep.c b/grub-core/commands/sleep.c
|
|
index e77e7900fac..a1370b710c9 100644
|
|
--- a/grub-core/commands/sleep.c
|
|
+++ b/grub-core/commands/sleep.c
|
|
@@ -55,7 +55,7 @@ grub_interruptible_millisleep (grub_uint32_t ms)
|
|
start = grub_get_time_ms ();
|
|
|
|
while (grub_get_time_ms () - start < ms)
|
|
- if (grub_getkey_noblock () == GRUB_TERM_ESC)
|
|
+ if (grub_key_is_interrupt (grub_getkey_noblock ()))
|
|
return 1;
|
|
|
|
return 0;
|
|
diff --git a/grub-core/kern/term.c b/grub-core/kern/term.c
|
|
index 93bd3378d18..6cae4c23e7a 100644
|
|
--- a/grub-core/kern/term.c
|
|
+++ b/grub-core/kern/term.c
|
|
@@ -138,6 +138,22 @@ grub_getkeystatus (void)
|
|
return status;
|
|
}
|
|
|
|
+int
|
|
+grub_key_is_interrupt (int key)
|
|
+{
|
|
+ /* ESC sometimes is the BIOS setup hotkey and may be hard to discover, also
|
|
+ check F8, which was the key to get the Windows bootmenu for a long time. */
|
|
+ if (key == GRUB_TERM_ESC || key == GRUB_TERM_KEY_F8)
|
|
+ return 1;
|
|
+
|
|
+ /* Pressing keys at the right time during boot is hard to time, also allow
|
|
+ interrupting sleeps / the menu countdown by keeping shift pressed. */
|
|
+ if (grub_getkeystatus() & (GRUB_TERM_STATUS_LSHIFT|GRUB_TERM_STATUS_RSHIFT))
|
|
+ return 1;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
void
|
|
grub_refresh (void)
|
|
{
|
|
diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c
|
|
index 783bde55b9e..046a1fb2c84 100644
|
|
--- a/grub-core/normal/menu.c
|
|
+++ b/grub-core/normal/menu.c
|
|
@@ -655,7 +655,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
|
|
if (entry >= 0)
|
|
break;
|
|
}
|
|
- if (key == GRUB_TERM_ESC)
|
|
+ if (grub_key_is_interrupt (key))
|
|
{
|
|
timeout = -1;
|
|
break;
|
|
diff --git a/include/grub/term.h b/include/grub/term.h
|
|
index c215133383f..2b079c29b80 100644
|
|
--- a/include/grub/term.h
|
|
+++ b/include/grub/term.h
|
|
@@ -328,6 +328,7 @@ void grub_putcode (grub_uint32_t code, struct grub_term_output *term);
|
|
int EXPORT_FUNC(grub_getkey) (void);
|
|
int EXPORT_FUNC(grub_getkey_noblock) (void);
|
|
int EXPORT_FUNC(grub_getkeystatus) (void);
|
|
+int EXPORT_FUNC(grub_key_is_interrupt) (int key);
|
|
void grub_cls (void);
|
|
void EXPORT_FUNC(grub_refresh) (void);
|
|
void grub_puts_terminal (const char *str, struct grub_term_output *term);
|