diff options
author | ozgursarier | 2017-11-12 16:40:31 +0300 |
---|---|---|
committer | ozgursarier | 2017-11-12 16:40:31 +0300 |
commit | 34d117402eaf3d2e1b63b98156e7faa853183b48 (patch) | |
tree | 3c6fbe121301a1320b4a33cafbcd1d66e1db21dc /06-sleep_shift.patch | |
download | aur-34d117402eaf3d2e1b63b98156e7faa853183b48.tar.gz |
Initial import
Diffstat (limited to '06-sleep_shift.patch')
-rw-r--r-- | 06-sleep_shift.patch | 95 |
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) + { |