mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
ui/console: Add qemu_text_console_put_linux()
Add a text console helper that accepts Linux input key codes and use it as the common implementation for qemu_text_console_put_qcode(). This lets callers that already use Linux key codes avoid converting them back to QKeyCode. Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260520-input-v3-6-7c9e4c7abe34@rsg.ci.i.u-tokyo.ac.jp>
This commit is contained in:
committed by
Marc-André Lureau
parent
023b08f336
commit
eb0608e88e
@@ -109,6 +109,8 @@ bool qemu_mouse_set(int index, Error **errp);
|
||||
|
||||
void qemu_text_console_put_keysym(QemuTextConsole *s, int keysym);
|
||||
bool qemu_text_console_put_qcode(QemuTextConsole *s, int qcode, bool ctrl);
|
||||
bool qemu_text_console_put_linux(QemuTextConsole *s, unsigned int lnx,
|
||||
bool ctrl);
|
||||
void qemu_text_console_put_string(QemuTextConsole *s, const char *str, int len);
|
||||
|
||||
/* consoles */
|
||||
|
||||
66
ui/console.c
66
ui/console.c
@@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "standard-headers/linux/input-event-codes.h"
|
||||
#include "ui/console.h"
|
||||
#include "ui/vgafont.h"
|
||||
#include "hw/core/qdev.h"
|
||||
@@ -302,36 +303,57 @@ void qemu_text_console_put_keysym(QemuTextConsole *s, int keysym)
|
||||
qemu_text_console_handle_keysym(s, keysym);
|
||||
}
|
||||
|
||||
static const int qcode_to_keysym[Q_KEY_CODE__MAX] = {
|
||||
[Q_KEY_CODE_UP] = QEMU_KEY_UP,
|
||||
[Q_KEY_CODE_DOWN] = QEMU_KEY_DOWN,
|
||||
[Q_KEY_CODE_RIGHT] = QEMU_KEY_RIGHT,
|
||||
[Q_KEY_CODE_LEFT] = QEMU_KEY_LEFT,
|
||||
[Q_KEY_CODE_HOME] = QEMU_KEY_HOME,
|
||||
[Q_KEY_CODE_END] = QEMU_KEY_END,
|
||||
[Q_KEY_CODE_PGUP] = QEMU_KEY_PAGEUP,
|
||||
[Q_KEY_CODE_PGDN] = QEMU_KEY_PAGEDOWN,
|
||||
[Q_KEY_CODE_DELETE] = QEMU_KEY_DELETE,
|
||||
[Q_KEY_CODE_TAB] = QEMU_KEY_TAB,
|
||||
[Q_KEY_CODE_BACKSPACE] = QEMU_KEY_BACKSPACE,
|
||||
static const int linux_to_keysym[] = {
|
||||
[KEY_UP] = QEMU_KEY_UP,
|
||||
[KEY_DOWN] = QEMU_KEY_DOWN,
|
||||
[KEY_RIGHT] = QEMU_KEY_RIGHT,
|
||||
[KEY_LEFT] = QEMU_KEY_LEFT,
|
||||
[KEY_HOME] = QEMU_KEY_HOME,
|
||||
[KEY_END] = QEMU_KEY_END,
|
||||
[KEY_PAGEUP] = QEMU_KEY_PAGEUP,
|
||||
[KEY_PAGEDOWN] = QEMU_KEY_PAGEDOWN,
|
||||
[KEY_DELETE] = QEMU_KEY_DELETE,
|
||||
[KEY_TAB] = QEMU_KEY_TAB,
|
||||
[KEY_BACKSPACE] = QEMU_KEY_BACKSPACE,
|
||||
};
|
||||
|
||||
static const int ctrl_qcode_to_keysym[Q_KEY_CODE__MAX] = {
|
||||
[Q_KEY_CODE_UP] = QEMU_KEY_CTRL_UP,
|
||||
[Q_KEY_CODE_DOWN] = QEMU_KEY_CTRL_DOWN,
|
||||
[Q_KEY_CODE_RIGHT] = QEMU_KEY_CTRL_RIGHT,
|
||||
[Q_KEY_CODE_LEFT] = QEMU_KEY_CTRL_LEFT,
|
||||
[Q_KEY_CODE_HOME] = QEMU_KEY_CTRL_HOME,
|
||||
[Q_KEY_CODE_END] = QEMU_KEY_CTRL_END,
|
||||
[Q_KEY_CODE_PGUP] = QEMU_KEY_CTRL_PAGEUP,
|
||||
[Q_KEY_CODE_PGDN] = QEMU_KEY_CTRL_PAGEDOWN,
|
||||
static const int ctrl_linux_to_keysym[] = {
|
||||
[KEY_UP] = QEMU_KEY_CTRL_UP,
|
||||
[KEY_DOWN] = QEMU_KEY_CTRL_DOWN,
|
||||
[KEY_RIGHT] = QEMU_KEY_CTRL_RIGHT,
|
||||
[KEY_LEFT] = QEMU_KEY_CTRL_LEFT,
|
||||
[KEY_HOME] = QEMU_KEY_CTRL_HOME,
|
||||
[KEY_END] = QEMU_KEY_CTRL_END,
|
||||
[KEY_PAGEUP] = QEMU_KEY_CTRL_PAGEUP,
|
||||
[KEY_PAGEDOWN] = QEMU_KEY_CTRL_PAGEDOWN,
|
||||
};
|
||||
|
||||
bool qemu_text_console_put_qcode(QemuTextConsole *s, int qcode, bool ctrl)
|
||||
{
|
||||
unsigned int lnx = qemu_input_map_qcode_to_linux[qcode];
|
||||
return qemu_text_console_put_linux(s, lnx, ctrl);
|
||||
}
|
||||
|
||||
bool qemu_text_console_put_linux(QemuTextConsole *s, unsigned int lnx,
|
||||
bool ctrl)
|
||||
{
|
||||
size_t maplen;
|
||||
const int *map;
|
||||
int keysym;
|
||||
|
||||
keysym = ctrl ? ctrl_qcode_to_keysym[qcode] : qcode_to_keysym[qcode];
|
||||
if (ctrl) {
|
||||
maplen = ARRAY_SIZE(ctrl_linux_to_keysym);
|
||||
map = ctrl_linux_to_keysym;
|
||||
} else {
|
||||
maplen = ARRAY_SIZE(linux_to_keysym);
|
||||
map = linux_to_keysym;
|
||||
}
|
||||
|
||||
if (lnx >= maplen) {
|
||||
return false;
|
||||
}
|
||||
|
||||
keysym = map[lnx];
|
||||
if (keysym == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user