diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2018-03-21 14:50:36 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2018-04-09 10:40:47 +0200 |
commit | da024b1ed2e756887bbed29b57dd634eb8a7ea5a (patch) | |
tree | 86424a21343cfc73a8096f3f957f0e90da8f0f90 /ui | |
parent | 991f366b2f7257cec3d3917f2d6e30b71b01f6e3 (diff) | |
download | qemu-da024b1ed2e756887bbed29b57dd634eb8a7ea5a.zip qemu-da024b1ed2e756887bbed29b57dd634eb8a7ea5a.tar.gz qemu-da024b1ed2e756887bbed29b57dd634eb8a7ea5a.tar.bz2 |
ui: add ctrl modifier support to kbd_put_qcode_console()
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-id: 20180321135041.15768-2-kraxel@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/console.c | 15 | ||||
-rw-r--r-- | ui/gtk.c | 4 | ||||
-rw-r--r-- | ui/sdl2-input.c | 2 |
3 files changed, 16 insertions, 5 deletions
diff --git a/ui/console.c b/ui/console.c index 530a4919..3fb2f4e 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; } @@ -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 605d781..35d35c1 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; } } |