From 991f366b2f7257cec3d3917f2d6e30b71b01f6e3 Mon Sep 17 00:00:00 2001 From: Elie Tournier Date: Wed, 4 Apr 2018 10:30:40 +0100 Subject: [PATCH 1/6] sdl2: Remove unused epoxy include Signed-off-by: Elie Tournier Message-id: 20180404093040.26009-1-tournier.elie@gmail.com Signed-off-by: Gerd Hoffmann --- ui/sdl2-gl.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/sdl2-gl.c b/ui/sdl2-gl.c index 5e1073a084..c3683e6b65 100644 --- a/ui/sdl2-gl.c +++ b/ui/sdl2-gl.c @@ -32,8 +32,6 @@ #include "ui/sdl2.h" #include "sysemu/sysemu.h" -#include - static void sdl2_set_scanout_mode(struct sdl2_console *scon, bool scanout) { if (scon->scanout_mode == scanout) { From da024b1ed2e756887bbed29b57dd634eb8a7ea5a Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 21 Mar 2018 14:50:36 +0100 Subject: [PATCH 2/6] ui: add ctrl modifier support to kbd_put_qcode_console() Signed-off-by: Gerd Hoffmann Message-id: 20180321135041.15768-2-kraxel@redhat.com Signed-off-by: Gerd Hoffmann --- include/ui/console.h | 2 +- ui/console.c | 15 +++++++++++++-- ui/gtk.c | 4 ++-- ui/sdl2-input.c | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index 6d2c052068..37a8d68d29 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -99,7 +99,7 @@ void hmp_mouse_set(Monitor *mon, const QDict *qdict); #define QEMU_KEY_CTRL_PAGEDOWN 0xe407 void kbd_put_keysym_console(QemuConsole *s, int keysym); -bool kbd_put_qcode_console(QemuConsole *s, int qcode); +bool kbd_put_qcode_console(QemuConsole *s, int qcode, bool ctrl); void kbd_put_string_console(QemuConsole *s, const char *str, int len); void kbd_put_keysym(int keysym); diff --git a/ui/console.c b/ui/console.c index 530a491987..3fb2f4e09f 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1191,11 +1191,22 @@ static const int qcode_to_keysym[Q_KEY_CODE__MAX] = { [Q_KEY_CODE_BACKSPACE] = QEMU_KEY_BACKSPACE, }; -bool kbd_put_qcode_console(QemuConsole *s, int qcode) +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, +}; + +bool kbd_put_qcode_console(QemuConsole *s, int qcode, bool ctrl) { int keysym; - keysym = qcode_to_keysym[qcode]; + keysym = ctrl ? ctrl_qcode_to_keysym[qcode] : qcode_to_keysym[qcode]; if (keysym == 0) { return false; } diff --git a/ui/gtk.c b/ui/gtk.c index ef5bc42094..e98ac4d2fc 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1197,12 +1197,12 @@ static gboolean gd_text_key_down(GtkWidget *widget, QemuConsole *con = vc->gfx.dcl.con; if (key->keyval == GDK_KEY_Delete) { - kbd_put_qcode_console(con, Q_KEY_CODE_DELETE); + kbd_put_qcode_console(con, Q_KEY_CODE_DELETE, false); } else if (key->length) { kbd_put_string_console(con, key->string, key->length); } else { int qcode = gd_map_keycode(key->hardware_keycode); - kbd_put_qcode_console(con, qcode); + kbd_put_qcode_console(con, qcode, false); } return TRUE; } diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index 605d781971..35d35c14c4 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -70,7 +70,7 @@ void sdl2_process_key(struct sdl2_console *scon, kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE); break; default: - kbd_put_qcode_console(con, qcode); + kbd_put_qcode_console(con, qcode, false); break; } } From 34013c379340c5a1ebe0b9a5a63d6e157111d2ec Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 21 Mar 2018 14:50:37 +0100 Subject: [PATCH 3/6] sdl2: track kbd modifier state unconditionally For both grapical and text consoles. Signed-off-by: Gerd Hoffmann Message-id: 20180321135041.15768-3-kraxel@redhat.com Signed-off-by: Gerd Hoffmann --- ui/sdl2-input.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index 35d35c14c4..8d0d9ba17c 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -60,23 +60,7 @@ void sdl2_process_key(struct sdl2_console *scon, qcode = qemu_input_map_usb_to_qcode[ev->keysym.scancode]; - if (!qemu_console_is_graphic(con)) { - if (ev->type == SDL_KEYDOWN) { - switch (ev->keysym.scancode) { - case SDL_SCANCODE_RETURN: - kbd_put_keysym_console(con, '\n'); - break; - case SDL_SCANCODE_BACKSPACE: - kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE); - break; - default: - kbd_put_qcode_console(con, qcode, false); - break; - } - } - return; - } - + /* modifier state tracking */ switch (ev->keysym.scancode) { #if 0 case SDL_SCANCODE_NUMLOCKCLEAR: @@ -99,8 +83,27 @@ void sdl2_process_key(struct sdl2_console *scon, } else { modifiers_state[ev->keysym.scancode] = 1; } - /* fall though */ + break; default: + /* nothing */ + break; + } + + if (!qemu_console_is_graphic(con)) { + if (ev->type == SDL_KEYDOWN) { + switch (ev->keysym.scancode) { + case SDL_SCANCODE_RETURN: + kbd_put_keysym_console(con, '\n'); + break; + case SDL_SCANCODE_BACKSPACE: + kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE); + break; + default: + kbd_put_qcode_console(con, qcode, false); + break; + } + } + } else { qemu_input_event_send_key_qcode(con, qcode, ev->type == SDL_KEYDOWN); } From 3dd2ca54fbec8928cca922dc8edc9a064d33f934 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 21 Mar 2018 14:50:38 +0100 Subject: [PATCH 4/6] sdl2: enable ctrl modifier keys for text consoles Unbreaks ctrl-pageup/pagedown scrollback. Signed-off-by: Gerd Hoffmann Message-id: 20180321135041.15768-4-kraxel@redhat.com Signed-off-by: Gerd Hoffmann --- ui/sdl2-input.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index 8d0d9ba17c..62c2b58ef0 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -90,6 +90,8 @@ void sdl2_process_key(struct sdl2_console *scon, } if (!qemu_console_is_graphic(con)) { + bool ctrl = (modifiers_state[SDL_SCANCODE_LCTRL] || + modifiers_state[SDL_SCANCODE_RCTRL]); if (ev->type == SDL_KEYDOWN) { switch (ev->keysym.scancode) { case SDL_SCANCODE_RETURN: @@ -99,7 +101,7 @@ void sdl2_process_key(struct sdl2_console *scon, kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE); break; default: - kbd_put_qcode_console(con, qcode, false); + kbd_put_qcode_console(con, qcode, ctrl); break; } } From e7824db15814a86d2c1a547d8750962b7e58c7a9 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 21 Mar 2018 14:50:39 +0100 Subject: [PATCH 5/6] sdl2: drop QEMU_KEY_BACKSPACE special case Not needed, kbd_put_qcode_console() will handle that for us. Signed-off-by: Gerd Hoffmann Message-id: 20180321135041.15768-5-kraxel@redhat.com Signed-off-by: Gerd Hoffmann --- ui/sdl2-input.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index 62c2b58ef0..d46411c474 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -97,9 +97,6 @@ void sdl2_process_key(struct sdl2_console *scon, case SDL_SCANCODE_RETURN: kbd_put_keysym_console(con, '\n'); break; - case SDL_SCANCODE_BACKSPACE: - kbd_put_keysym_console(con, QEMU_KEY_BACKSPACE); - break; default: kbd_put_qcode_console(con, qcode, ctrl); break; From 1458da9131c39ca99699b521436d6ce72d7c7981 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 21 Mar 2018 14:50:40 +0100 Subject: [PATCH 6/6] sdl2: drop dead code Leftover from sdl1 -> sdl2 port. Signed-off-by: Gerd Hoffmann Message-id: 20180321135041.15768-6-kraxel@redhat.com Signed-off-by: Gerd Hoffmann --- ui/sdl2-input.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index d46411c474..1378b63dd9 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -62,14 +62,6 @@ void sdl2_process_key(struct sdl2_console *scon, /* modifier state tracking */ switch (ev->keysym.scancode) { -#if 0 - case SDL_SCANCODE_NUMLOCKCLEAR: - case SDL_SCANCODE_CAPSLOCK: - /* SDL does not send the key up event, so we generate it */ - qemu_input_event_send_key_qcode(con, qcode, true); - qemu_input_event_send_key_qcode(con, qcode, false); - return; -#endif case SDL_SCANCODE_LCTRL: case SDL_SCANCODE_LSHIFT: case SDL_SCANCODE_LALT: