1 Star 0 Fork 50

yangqiming/grub2_3

forked from src-anolis-os/grub2 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0184-EFI-console-Implement-getkeystatus-support.patch 2.20 KB
一键复制 编辑 原始数据 按行查看 历史
geliwei 提交于 2022-04-13 15:15 . update to grub2-2.02-120.el8.src.rpm
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Wed, 6 Jun 2018 16:16:47 +0200
Subject: [PATCH] EFI: console: Implement getkeystatus() support
Implement getkeystatus() support.
Note that if a non-modifier key gets pressed and repeated calls to
getkeystatus() are made then it will return the modifier status at the
time of the non-modifier key, until that key-press gets consumed by a
getkey() call.
This is a side-effect of how the EFI simple-text-input protocol works
and cannot be avoided.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
grub-core/term/efi/console.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c
index 3d36c5c70..92dd4996b 100644
--- a/grub-core/term/efi/console.c
+++ b/grub-core/term/efi/console.c
@@ -223,6 +223,39 @@ grub_console_getkey_ex(struct grub_term_input *term)
return key;
}
+static int
+grub_console_getkeystatus(struct grub_term_input *term)
+{
+ grub_efi_key_data_t key_data;
+ grub_efi_uint32_t kss;
+ int key, mods = 0;
+
+ if (grub_efi_is_finished)
+ return 0;
+
+ if (grub_console_read_key_stroke (term->data, &key_data, &key, 0))
+ return 0;
+
+ kss = key_data.key_state.key_shift_state;
+ if (kss & GRUB_EFI_SHIFT_STATE_VALID)
+ {
+ if (kss & GRUB_EFI_LEFT_SHIFT_PRESSED)
+ mods |= GRUB_TERM_STATUS_LSHIFT;
+ if (kss & GRUB_EFI_RIGHT_SHIFT_PRESSED)
+ mods |= GRUB_TERM_STATUS_RSHIFT;
+ if (kss & GRUB_EFI_LEFT_ALT_PRESSED)
+ mods |= GRUB_TERM_STATUS_LALT;
+ if (kss & GRUB_EFI_RIGHT_ALT_PRESSED)
+ mods |= GRUB_TERM_STATUS_RALT;
+ if (kss & GRUB_EFI_LEFT_CONTROL_PRESSED)
+ mods |= GRUB_TERM_STATUS_LCTRL;
+ if (kss & GRUB_EFI_RIGHT_CONTROL_PRESSED)
+ mods |= GRUB_TERM_STATUS_RCTRL;
+ }
+
+ return mods;
+}
+
static grub_err_t
grub_efi_console_input_init (struct grub_term_input *term)
{
@@ -403,6 +436,7 @@ static struct grub_term_input grub_console_term_input =
{
.name = "console",
.getkey = grub_console_getkey,
+ .getkeystatus = grub_console_getkeystatus,
.init = grub_efi_console_input_init,
};
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yyangqiming/grub2_3.git
git@gitee.com:yyangqiming/grub2_3.git
yyangqiming
grub2_3
grub2_3
a8

搜索帮助