From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: berrange@redhat.com, Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [RFC PATCH v3 3/8] kbd-state: use state tracker for sdl2
Date: Tue, 22 Jan 2019 10:28:09 +0100 [thread overview]
Message-ID: <20190122092814.14919-4-kraxel@redhat.com> (raw)
In-Reply-To: <20190122092814.14919-1-kraxel@redhat.com>
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 <kraxel@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
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 fffbbfaee4..6627fe05b0 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -7,6 +7,7 @@
#include <SDL.h>
#include <SDL_syswm.h>
+#include "ui/kbd-state.h"
#ifdef CONFIG_OPENGL
# include "ui/egl-helpers.h"
#endif
@@ -27,6 +28,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 a10b6e3a08..13ad4a76eb 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
next prev parent reply other threads:[~2019-01-22 9:38 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-22 9:28 [Qemu-devel] [RFC PATCH v3 0/8] ui: add generic keyboard state tracker, fix keymap Gerd Hoffmann
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 1/8] kbd-state: add keyboard state tracker Gerd Hoffmann
2019-01-22 9:47 ` Daniel P. Berrangé
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 2/8] sdl2: remove sdl2_reset_keys() function Gerd Hoffmann
2019-01-22 9:28 ` Gerd Hoffmann [this message]
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 4/8] sdl2: use only QKeyCode in sdl2_process_key() Gerd Hoffmann
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 5/8] kbd-state: use state tracker for gtk Gerd Hoffmann
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 6/8] kbd-state: use state tracker for vnc Gerd Hoffmann
2019-01-22 9:47 ` Daniel P. Berrangé
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 7/8] keymap: pass full keyboard state to keysym2scancode Gerd Hoffmann
2019-01-22 9:28 ` [Qemu-devel] [RFC PATCH v3 8/8] keymap: fix keyup mappings Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190122092814.14919-4-kraxel@redhat.com \
--to=kraxel@redhat.com \
--cc=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).