[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 09/14] kbd-state: use state tracker for sdl2
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 09/14] kbd-state: use state tracker for sdl2 |
Date: |
Tue, 5 Feb 2019 11:57:53 +0100 |
Use the new keyboard state tracked for sdl2. We can drop the modifier
state tracking from sdl2. Also keyup code is simpler, the state tracker
will take care to not send suspious keyup events to the guest.
Signed-off-by: Gerd Hoffmann <address@hidden>
Reviewed-by: Daniel P. Berrangé <address@hidden>
Message-id: address@hidden
---
include/ui/sdl2.h | 2 ++
ui/sdl2-input.c | 27 ++-------------------------
ui/sdl2.c | 12 +++---------
3 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index 71f5cfc6e3..0875b8d56b 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -10,6 +10,7 @@
# include <SDL_image.h>
#endif
+#include "ui/kbd-state.h"
#ifdef CONFIG_OPENGL
# include "ui/egl-helpers.h"
#endif
@@ -30,6 +31,7 @@ struct sdl2_console {
int idle_counter;
int ignore_hotkeys;
SDL_GLContext winctx;
+ QKbdState *kbd;
#ifdef CONFIG_OPENGL
QemuGLShader *gls;
egl_fb guest_fb;
diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c
index 208266c6a5..22e3336aab 100644
--- a/ui/sdl2-input.c
+++ b/ui/sdl2-input.c
@@ -30,8 +30,6 @@
#include "ui/sdl2.h"
#include "sysemu/sysemu.h"
-static uint8_t modifiers_state[SDL_NUM_SCANCODES];
-
void sdl2_process_key(struct sdl2_console *scon,
SDL_KeyboardEvent *ev)
{
@@ -43,31 +41,10 @@ void sdl2_process_key(struct sdl2_console *scon,
}
qcode = qemu_input_map_usb_to_qcode[ev->keysym.scancode];
-
- /* modifier state tracking */
- switch (ev->keysym.scancode) {
- case SDL_SCANCODE_LCTRL:
- case SDL_SCANCODE_LSHIFT:
- case SDL_SCANCODE_LALT:
- case SDL_SCANCODE_LGUI:
- case SDL_SCANCODE_RCTRL:
- case SDL_SCANCODE_RSHIFT:
- case SDL_SCANCODE_RALT:
- case SDL_SCANCODE_RGUI:
- if (ev->type == SDL_KEYUP) {
- modifiers_state[ev->keysym.scancode] = 0;
- } else {
- modifiers_state[ev->keysym.scancode] = 1;
- }
- break;
- default:
- /* nothing */
- break;
- }
+ qkbd_state_key_event(scon->kbd, qcode, ev->type == SDL_KEYDOWN);
if (!qemu_console_is_graphic(con)) {
- bool ctrl = (modifiers_state[SDL_SCANCODE_LCTRL] ||
- modifiers_state[SDL_SCANCODE_RCTRL]);
+ bool ctrl = qkbd_state_modifier_get(scon->kbd, QKBD_MOD_CTRL);
if (ev->type == SDL_KEYDOWN) {
switch (ev->keysym.scancode) {
case SDL_SCANCODE_RETURN:
diff --git a/ui/sdl2.c b/ui/sdl2.c
index cde7feba91..1277cf28fb 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -38,7 +38,6 @@ static int gui_grab; /* if true, all keyboard/mouse events
are grabbed */
static int gui_saved_grab;
static int gui_fullscreen;
-static int gui_keysym;
static int gui_grab_code = KMOD_LALT | KMOD_LCTRL;
static SDL_Cursor *sdl_cursor_normal;
static SDL_Cursor *sdl_cursor_hidden;
@@ -330,6 +329,7 @@ static void handle_keydown(SDL_Event *ev)
int win;
struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
int gui_key_modifier_pressed = get_mod_state();
+ int gui_keysym = 0;
if (!scon->ignore_hotkeys && gui_key_modifier_pressed && !ev->key.repeat) {
switch (ev->key.keysym.scancode) {
@@ -410,16 +410,9 @@ static void handle_keydown(SDL_Event *ev)
static void handle_keyup(SDL_Event *ev)
{
struct sdl2_console *scon = get_scon_from_window(ev->key.windowID);
- int gui_key_modifier_pressed = get_mod_state();
scon->ignore_hotkeys = false;
-
- if (!gui_key_modifier_pressed) {
- gui_keysym = 0;
- }
- if (!gui_keysym) {
- sdl2_process_key(scon, &ev->key);
- }
+ sdl2_process_key(scon, &ev->key);
}
static void handle_textinput(SDL_Event *ev)
@@ -823,6 +816,7 @@ static void sdl2_display_init(DisplayState *ds,
DisplayOptions *o)
sdl2_console[i].dcl.ops = &dcl_2d_ops;
#endif
sdl2_console[i].dcl.con = con;
+ sdl2_console[i].kbd = qkbd_state_init(con);
register_displaychangelistener(&sdl2_console[i].dcl);
#if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_X11)
--
2.9.3
- [Qemu-devel] [PULL 00/14] Ui 20190205 patches, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 13/14] keymap: pass full keyboard state to keysym2scancode, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 01/14] Remove deprecated -no-frame option, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 04/14] ui/sdl_keysym: Remove obsolete SDL1.2 related code, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 03/14] ui: listen for GDK_SMOOTH_SCROLL events, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 11/14] kbd-state: use state tracker for gtk, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 06/14] ui/egl-helpers: Augment parameter list of egl_texture_blend() to convey scales of viewport, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 05/14] ui/cocoa.m: Fix macOS 10.14 deprecation warnings, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 02/14] ui: don't send any event if delta_y == 0, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 08/14] sdl2: remove sdl2_reset_keys() function, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 09/14] kbd-state: use state tracker for sdl2,
Gerd Hoffmann <=
- [Qemu-devel] [PULL 12/14] kbd-state: use state tracker for vnc, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 10/14] sdl2: use only QKeyCode in sdl2_process_key(), Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 14/14] keymap: fix keyup mappings, Gerd Hoffmann, 2019/02/05
- [Qemu-devel] [PULL 07/14] kbd-state: add keyboard state tracker, Gerd Hoffmann, 2019/02/05
- Re: [Qemu-devel] [PULL 00/14] Ui 20190205 patches, Peter Maydell, 2019/02/05