summarylogtreecommitdiffstats
path: root/06-sleep_shift.patch
diff options
context:
space:
mode:
authorozgursarier2017-11-12 16:40:31 +0300
committerozgursarier2017-11-12 16:40:31 +0300
commit34d117402eaf3d2e1b63b98156e7faa853183b48 (patch)
tree3c6fbe121301a1320b4a33cafbcd1d66e1db21dc /06-sleep_shift.patch
downloadaur-34d117402eaf3d2e1b63b98156e7faa853183b48.tar.gz
Initial import
Diffstat (limited to '06-sleep_shift.patch')
-rw-r--r--06-sleep_shift.patch95
1 files changed, 95 insertions, 0 deletions
diff --git a/06-sleep_shift.patch b/06-sleep_shift.patch
new file mode 100644
index 000000000000..973cb8702207
--- /dev/null
+++ b/06-sleep_shift.patch
@@ -0,0 +1,95 @@
+From 6d92ce5e4248eec87c831734bff72581721a1026 Mon Sep 17 00:00:00 2001
+From: Colin Watson <cjwatson@ubuntu.com>
+Date: Mon, 13 Jan 2014 12:13:23 +0000
+Subject: Allow Shift to interrupt 'sleep --interruptible'
+
+Upstream would like to consider this at more length. See
+http://lists.gnu.org/archive/html/grub-devel/2009-08/msg00718.html, and
+the rest of the thread for context.
+
+Forwarded: http://lists.gnu.org/archive/html/grub-devel/2009-08/msg00694.html
+Last-Update: 2013-12-04
+
+Patch-Name: sleep_shift.patch
+---
+ grub-core/commands/sleep.c | 27 ++++++++++++++++++++++++++-
+ grub-core/normal/menu.c | 19 +++++++++++++++++++
+ 2 files changed, 45 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/commands/sleep.c b/grub-core/commands/sleep.c
+index e77e7900f..3906b1410 100644
+--- a/grub-core/commands/sleep.c
++++ b/grub-core/commands/sleep.c
+@@ -46,6 +46,31 @@ do_print (int n)
+ grub_refresh ();
+ }
+
++static int
++grub_check_keyboard (void)
++{
++ int mods = 0;
++ grub_term_input_t term;
++
++ if (grub_term_poll_usb)
++ grub_term_poll_usb (0);
++
++ FOR_ACTIVE_TERM_INPUTS(term)
++ {
++ if (term->getkeystatus)
++ mods |= term->getkeystatus (term);
++ }
++
++ if (mods >= 0 &&
++ (mods & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT)) != 0)
++ return 1;
++
++ if (grub_getkey_noblock () == GRUB_TERM_ESC)
++ return 1;
++
++ return 0;
++}
++
+ /* Based on grub_millisleep() from kern/generic/millisleep.c. */
+ static int
+ grub_interruptible_millisleep (grub_uint32_t ms)
+@@ -55,7 +80,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_check_keyboard ())
+ return 1;
+
+ return 0;
+diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c
+index 719e2fb1c..9d0ad4c95 100644
+--- a/grub-core/normal/menu.c
++++ b/grub-core/normal/menu.c
+@@ -615,8 +615,27 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
+ saved_time = grub_get_time_ms ();
+ while (1)
+ {
++ int mods = 0;
++ grub_term_input_t term;
+ int key;
+
++ if (grub_term_poll_usb)
++ grub_term_poll_usb (0);
++
++ FOR_ACTIVE_TERM_INPUTS(term)
++ {
++ if (term->getkeystatus)
++ mods |= term->getkeystatus (term);
++ }
++
++ if (mods >= 0 &&
++ (mods & (GRUB_TERM_STATUS_LSHIFT
++ | GRUB_TERM_STATUS_RSHIFT)) != 0)
++ {
++ timeout = -1;
++ break;
++ }
++
+ key = grub_getkey_noblock ();
+ if (key != GRUB_TERM_NO_KEY)
+ {