* [PULL 00/11] Ui 20200520 patches
@ 2020-05-20 8:43 Gerd Hoffmann
2020-05-20 8:43 ` [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure Gerd Hoffmann
` (11 more replies)
0 siblings, 12 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Gerd Hoffmann, Paolo Bonzini
The following changes since commit debe78ce14bf8f8940c2bdf3ef387505e9e035a9:
Merge remote-tracking branch 'remotes/rth/tags/pull-fpu-20200515' into staging (2020-05-15 19:51:16 +0100)
are available in the Git repository at:
git://git.kraxel.org/qemu tags/ui-20200520-pull-request
for you to fetch changes up to 7b23d121f913709306e678a3289edc813f3a7463:
ui: increase min required GTK version to 3.22.0 (2020-05-19 09:06:44 +0200)
----------------------------------------------------------------
ui: windows keyboard fixes for gtk & sdl.
ui: require GTK 3.22 or newer.
----------------------------------------------------------------
Volker Rümelin (11):
ui/win32-kbd-hook: handle AltGr in a hook procedure
ui/gtk: fix handling of AltGr key on Windows
ui/gkt: release all keys on grab-broken-event
ui/gtk: remove unused code
ui/gtk: remove unused variable ignore_keys
ui/sdl2: fix handling of AltGr key on Windows
ui/sdl2: start in full screen with grab enabled
ui/sdl2-input: use trace-events to debug key events
ui/gtk: don't pass on win keys without keyboard grab
ui/gtk: use native keyboard scancodes on Windows
ui: increase min required GTK version to 3.22.0
configure | 2 +-
include/ui/win32-kbd-hook.h | 14 +++
stubs/win32-kbd-hook.c | 18 ++++
ui/gtk.c | 194 +++++++++++++++++-------------------
ui/sdl2-input.c | 3 +
ui/sdl2.c | 33 +++++-
ui/win32-kbd-hook.c | 102 +++++++++++++++++++
stubs/Makefile.objs | 1 +
ui/Makefile.objs | 3 +
ui/trace-events | 3 +
10 files changed, 264 insertions(+), 109 deletions(-)
create mode 100644 include/ui/win32-kbd-hook.h
create mode 100644 stubs/win32-kbd-hook.c
create mode 100644 ui/win32-kbd-hook.c
--
2.18.4
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-22 17:15 ` Philippe Mathieu-Daudé
2020-05-20 8:43 ` [PULL 02/11] ui/gtk: fix handling of AltGr key on Windows Gerd Hoffmann
` (10 subsequent siblings)
11 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Import win32 keyboard hooking code from project spice-gtk. This
patch removes the extra left control key up/down input events
inserted by Windows for the right alt key up/down input events
with international keyboard layouts. Additionally there's some
code to grab the keyboard.
The next patches will use this code.
Only Windows needs this.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-1-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/ui/win32-kbd-hook.h | 14 +++++
stubs/win32-kbd-hook.c | 18 +++++++
ui/win32-kbd-hook.c | 102 ++++++++++++++++++++++++++++++++++++
stubs/Makefile.objs | 1 +
ui/Makefile.objs | 3 ++
5 files changed, 138 insertions(+)
create mode 100644 include/ui/win32-kbd-hook.h
create mode 100644 stubs/win32-kbd-hook.c
create mode 100644 ui/win32-kbd-hook.c
diff --git a/include/ui/win32-kbd-hook.h b/include/ui/win32-kbd-hook.h
new file mode 100644
index 000000000000..4bd9f00f973f
--- /dev/null
+++ b/include/ui/win32-kbd-hook.h
@@ -0,0 +1,14 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef UI_WIN32_KBD_HOOK_H
+#define UI_WIN32_KBD_HOOK_H
+
+void win32_kbd_set_window(void *hwnd);
+void win32_kbd_set_grab(bool grab);
+
+#endif
diff --git a/stubs/win32-kbd-hook.c b/stubs/win32-kbd-hook.c
new file mode 100644
index 000000000000..1a084b081ab6
--- /dev/null
+++ b/stubs/win32-kbd-hook.c
@@ -0,0 +1,18 @@
+/*
+ * Win32 keyboard hook stubs
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * (at your option) any later version. See the COPYING file in the
+ * top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "ui/win32-kbd-hook.h"
+
+void win32_kbd_set_window(void *hwnd)
+{
+}
+
+void win32_kbd_set_grab(bool grab)
+{
+}
diff --git a/ui/win32-kbd-hook.c b/ui/win32-kbd-hook.c
new file mode 100644
index 000000000000..1ac237db9e9d
--- /dev/null
+++ b/ui/win32-kbd-hook.c
@@ -0,0 +1,102 @@
+/*
+ * This work is licensed under the terms of the GNU GPL, version 2 or
+ * (at your option) any later version. See the COPYING file in the
+ * top-level directory.
+ *
+ * The win32 keyboard hooking code was imported from project spice-gtk.
+ */
+
+#include "qemu/osdep.h"
+#include "sysemu/sysemu.h"
+#include "ui/win32-kbd-hook.h"
+
+static Notifier win32_unhook_notifier;
+static HHOOK win32_keyboard_hook;
+static HWND win32_window;
+static DWORD win32_grab;
+
+static LRESULT CALLBACK keyboard_hook_cb(int code, WPARAM wparam, LPARAM lparam)
+{
+ if (win32_window && code == HC_ACTION && win32_window == GetFocus()) {
+ KBDLLHOOKSTRUCT *hooked = (KBDLLHOOKSTRUCT *)lparam;
+
+ if (wparam != WM_KEYUP) {
+ DWORD dwmsg = (hooked->flags << 24) |
+ ((hooked->scanCode & 0xff) << 16) | 1;
+
+ switch (hooked->vkCode) {
+ case VK_CAPITAL:
+ /* fall through */
+ case VK_SCROLL:
+ /* fall through */
+ case VK_NUMLOCK:
+ /* fall through */
+ case VK_LSHIFT:
+ /* fall through */
+ case VK_RSHIFT:
+ /* fall through */
+ case VK_RCONTROL:
+ /* fall through */
+ case VK_LMENU:
+ /* fall through */
+ case VK_RMENU:
+ break;
+
+ case VK_LCONTROL:
+ /*
+ * When pressing AltGr, an extra VK_LCONTROL with a special
+ * scancode with bit 9 set is sent. Let's ignore the extra
+ * VK_LCONTROL, as that will make AltGr misbehave.
+ */
+ if (hooked->scanCode & 0x200) {
+ return 1;
+ }
+ break;
+
+ default:
+ if (win32_grab) {
+ SendMessage(win32_window, wparam, hooked->vkCode, dwmsg);
+ return 1;
+ }
+ break;
+ }
+
+ } else {
+ switch (hooked->vkCode) {
+ case VK_LCONTROL:
+ if (hooked->scanCode & 0x200) {
+ return 1;
+ }
+ break;
+ }
+ }
+ }
+
+ return CallNextHookEx(NULL, code, wparam, lparam);
+}
+
+static void keyboard_hook_unhook(Notifier *n, void *data)
+{
+ UnhookWindowsHookEx(win32_keyboard_hook);
+ win32_keyboard_hook = NULL;
+}
+
+void win32_kbd_set_window(void *hwnd)
+{
+ if (hwnd && !win32_keyboard_hook) {
+ /* note: the installing thread must have a message loop */
+ win32_keyboard_hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboard_hook_cb,
+ GetModuleHandle(NULL), 0);
+ if (win32_keyboard_hook) {
+ win32_unhook_notifier.notify = keyboard_hook_unhook;
+ qemu_add_exit_notifier(&win32_unhook_notifier);
+ }
+ }
+
+ win32_window = hwnd;
+}
+
+void win32_kbd_set_grab(bool grab)
+{
+ win32_grab = grab;
+}
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index 45be5dc0ed78..6a9e3135e8f9 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -32,6 +32,7 @@ stub-obj-y += trace-control.o
stub-obj-y += uuid.o
stub-obj-y += vm-stop.o
stub-obj-y += vmstate.o
+stub-obj-y += win32-kbd-hook.o
stub-obj-y += fd-register.o
stub-obj-y += qmp_memory_device.o
stub-obj-y += target-monitor-defs.o
diff --git a/ui/Makefile.objs b/ui/Makefile.objs
index e6da6ff047fd..504b19647977 100644
--- a/ui/Makefile.objs
+++ b/ui/Makefile.objs
@@ -15,6 +15,9 @@ common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o
common-obj-$(CONFIG_COCOA) += cocoa.o
common-obj-$(CONFIG_VNC) += $(vnc-obj-y)
common-obj-$(call lnot,$(CONFIG_VNC)) += vnc-stubs.o
+ifneq (,$(findstring m,$(CONFIG_SDL)$(CONFIG_GTK)))
+common-obj-$(CONFIG_WIN32) += win32-kbd-hook.o
+endif
# ui-sdl module
common-obj-$(CONFIG_SDL) += sdl.mo
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 02/11] ui/gtk: fix handling of AltGr key on Windows
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
2020-05-20 8:43 ` [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 03/11] ui/gkt: release all keys on grab-broken-event Gerd Hoffmann
` (9 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Wire up the keyboard hooking code on Windows to fix the AltGr
key and improve keyboard grabbing.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-2-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 83f2f5d49b2a..a0b10a140330 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -38,6 +38,10 @@
#include "ui/console.h"
#include "ui/gtk.h"
+#ifdef G_OS_WIN32
+#include <gdk/gdkwin32.h>
+#endif
+#include "ui/win32-kbd-hook.h"
#include <glib/gi18n.h>
#include <locale.h>
@@ -428,6 +432,16 @@ static void gd_widget_reparent(GtkWidget *from, GtkWidget *to,
g_object_unref(G_OBJECT(widget));
}
+static void *gd_win32_get_hwnd(VirtualConsole *vc)
+{
+#ifdef G_OS_WIN32
+ return gdk_win32_window_get_impl_hwnd(
+ gtk_widget_get_window(vc->window ? vc->window : vc->s->window));
+#else
+ return NULL;
+#endif
+}
+
/** DisplayState Callbacks **/
static void gd_update(DisplayChangeListener *dcl,
@@ -1451,6 +1465,7 @@ static void gd_grab_keyboard(VirtualConsole *vc, const char *reason)
}
}
+ win32_kbd_set_grab(true);
#if GTK_CHECK_VERSION(3, 20, 0)
gd_grab_update(vc, true, vc->s->ptr_owner == vc);
#else
@@ -1472,6 +1487,7 @@ static void gd_ungrab_keyboard(GtkDisplayState *s)
}
s->kbd_owner = NULL;
+ win32_kbd_set_grab(false);
#if GTK_CHECK_VERSION(3, 20, 0)
gd_grab_update(vc, false, vc->s->ptr_owner == vc);
#else
@@ -1614,12 +1630,22 @@ static gboolean gd_leave_event(GtkWidget *widget, GdkEventCrossing *crossing,
return TRUE;
}
+static gboolean gd_focus_in_event(GtkWidget *widget,
+ GdkEventFocus *event, gpointer opaque)
+{
+ VirtualConsole *vc = opaque;
+
+ win32_kbd_set_window(gd_win32_get_hwnd(vc));
+ return TRUE;
+}
+
static gboolean gd_focus_out_event(GtkWidget *widget,
- GdkEventCrossing *crossing, gpointer opaque)
+ GdkEventFocus *event, gpointer opaque)
{
VirtualConsole *vc = opaque;
GtkDisplayState *s = vc->s;
+ win32_kbd_set_window(NULL);
gtk_release_modifiers(s);
return TRUE;
}
@@ -1878,6 +1904,8 @@ static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
G_CALLBACK(gd_enter_event), vc);
g_signal_connect(vc->gfx.drawing_area, "leave-notify-event",
G_CALLBACK(gd_leave_event), vc);
+ g_signal_connect(vc->gfx.drawing_area, "focus-in-event",
+ G_CALLBACK(gd_focus_in_event), vc);
g_signal_connect(vc->gfx.drawing_area, "focus-out-event",
G_CALLBACK(gd_focus_out_event), vc);
g_signal_connect(vc->gfx.drawing_area, "configure-event",
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 03/11] ui/gkt: release all keys on grab-broken-event
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
2020-05-20 8:43 ` [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure Gerd Hoffmann
2020-05-20 8:43 ` [PULL 02/11] ui/gtk: fix handling of AltGr key on Windows Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 04/11] ui/gtk: remove unused code Gerd Hoffmann
` (8 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
There is no way to grab the Ctrl-Alt-Del key combination on
Windows. This key combination will leave all three keys in a
stuck condition. This patch uses the grab-broken-event to
release the keys.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-3-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/ui/gtk.c b/ui/gtk.c
index a0b10a140330..655b26de384e 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1142,6 +1142,25 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
return TRUE;
}
+static gboolean gd_grab_broken_event(GtkWidget *widget,
+ GdkEventGrabBroken *event, void *opaque)
+{
+#ifdef CONFIG_WIN32
+ /*
+ * On Windows the Ctrl-Alt-Del key combination can't be grabbed. This
+ * key combination leaves all three keys in a stuck condition. We use
+ * the grab-broken-event to release all keys.
+ */
+ if (event->keyboard) {
+ VirtualConsole *vc = opaque;
+ GtkDisplayState *s = vc->s;
+
+ gtk_release_modifiers(s);
+ }
+#endif
+ return TRUE;
+}
+
static gboolean gd_event(GtkWidget *widget, GdkEvent *event, void *opaque)
{
if (event->type == GDK_MOTION_NOTIFY) {
@@ -1910,6 +1929,8 @@ static void gd_connect_vc_gfx_signals(VirtualConsole *vc)
G_CALLBACK(gd_focus_out_event), vc);
g_signal_connect(vc->gfx.drawing_area, "configure-event",
G_CALLBACK(gd_configure), vc);
+ g_signal_connect(vc->gfx.drawing_area, "grab-broken-event",
+ G_CALLBACK(gd_grab_broken_event), vc);
} else {
g_signal_connect(vc->gfx.drawing_area, "key-press-event",
G_CALLBACK(gd_text_key_down), vc);
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 04/11] ui/gtk: remove unused code
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (2 preceding siblings ...)
2020-05-20 8:43 ` [PULL 03/11] ui/gkt: release all keys on grab-broken-event Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 05/11] ui/gtk: remove unused variable ignore_keys Gerd Hoffmann
` (7 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
This code was last used before commit 2ec78706d1 "ui: convert
GTK and SDL1 frontends to keycodemapdb".
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-4-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 655b26de384e..0e9503a0d1d9 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -112,15 +112,6 @@
# define VTE_CHECK_VERSION(a, b, c) 0
#endif
-/* Some older mingw versions lack this constant or have
- * it conditionally defined */
-#ifdef _WIN32
-# ifndef MAPVK_VK_TO_VSC
-# define MAPVK_VK_TO_VSC 0
-# endif
-#endif
-
-
#define HOTKEY_MODIFIERS (GDK_CONTROL_MASK | GDK_MOD1_MASK)
static const guint16 *keycode_map;
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 05/11] ui/gtk: remove unused variable ignore_keys
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (3 preceding siblings ...)
2020-05-20 8:43 ` [PULL 04/11] ui/gtk: remove unused code Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 06/11] ui/sdl2: fix handling of AltGr key on Windows Gerd Hoffmann
` (6 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Since the removal of GTK2 code in commit 89d85cde75 the code
around ignore_keys is unused. See commit 1a01716a30 "gtk: Avoid
accel key leakage into guest on console switch" why it was only
needed for GTK2.
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-5-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 0e9503a0d1d9..354dd90e1898 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -168,8 +168,6 @@ struct GtkDisplayState {
bool external_pause_update;
- bool ignore_keys;
-
DisplayOptions *opts;
};
@@ -1095,14 +1093,8 @@ static gboolean gd_text_key_down(GtkWidget *widget,
static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
{
VirtualConsole *vc = opaque;
- GtkDisplayState *s = vc->s;
int qcode;
- if (s->ignore_keys) {
- s->ignore_keys = (key->type == GDK_KEY_PRESS);
- return TRUE;
- }
-
#ifdef WIN32
/* on windows, we ought to ignore the reserved key event? */
if (key->hardware_keycode == 0xff)
@@ -1204,7 +1196,6 @@ static void gd_menu_switch_vc(GtkMenuItem *item, void *opaque)
gtk_notebook_set_current_page(nb, page);
gtk_widget_grab_focus(vc->focus);
}
- s->ignore_keys = false;
}
static void gd_accel_switch_vc(void *opaque)
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 06/11] ui/sdl2: fix handling of AltGr key on Windows
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (4 preceding siblings ...)
2020-05-20 8:43 ` [PULL 05/11] ui/gtk: remove unused variable ignore_keys Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 07/11] ui/sdl2: start in full screen with grab enabled Gerd Hoffmann
` (5 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Wire up the keyboard hooking code on Windows to fix the AltGr
key and improve keyboard grabbing.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-6-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/sdl2.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 61c7956da334..79c1ea29d223 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -30,6 +30,7 @@
#include "ui/sdl2.h"
#include "sysemu/runstate.h"
#include "sysemu/sysemu.h"
+#include "ui/win32-kbd-hook.h"
static int sdl2_num_outputs;
static struct sdl2_console *sdl2_console;
@@ -220,6 +221,7 @@ static void sdl_grab_start(struct sdl2_console *scon)
}
SDL_SetWindowGrab(scon->real_window, SDL_TRUE);
gui_grab = 1;
+ win32_kbd_set_grab(true);
sdl_update_caption(scon);
}
@@ -227,6 +229,7 @@ static void sdl_grab_end(struct sdl2_console *scon)
{
SDL_SetWindowGrab(scon->real_window, SDL_FALSE);
gui_grab = 0;
+ win32_kbd_set_grab(false);
sdl_show_cursor(scon);
sdl_update_caption(scon);
}
@@ -325,6 +328,19 @@ static int get_mod_state(void)
}
}
+static void *sdl2_win32_get_hwnd(struct sdl2_console *scon)
+{
+#ifdef CONFIG_WIN32
+ SDL_SysWMinfo info;
+
+ SDL_VERSION(&info.version);
+ if (SDL_GetWindowWMInfo(scon->real_window, &info)) {
+ return info.info.win.window;
+ }
+#endif
+ return NULL;
+}
+
static void handle_keydown(SDL_Event *ev)
{
int win;
@@ -544,6 +560,11 @@ static void handle_windowevent(SDL_Event *ev)
sdl2_redraw(scon);
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
+ win32_kbd_set_grab(gui_grab);
+ if (qemu_console_is_graphic(scon->dcl.con)) {
+ win32_kbd_set_window(sdl2_win32_get_hwnd(scon));
+ }
+ /* fall through */
case SDL_WINDOWEVENT_ENTER:
if (!gui_grab && (qemu_input_is_absolute() || absolute_enabled)) {
absolute_mouse_grab(scon);
@@ -558,6 +579,9 @@ static void handle_windowevent(SDL_Event *ev)
scon->ignore_hotkeys = get_mod_state();
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
+ if (qemu_console_is_graphic(scon->dcl.con)) {
+ win32_kbd_set_window(NULL);
+ }
if (gui_grab && !gui_fullscreen) {
sdl_grab_end(scon);
}
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 07/11] ui/sdl2: start in full screen with grab enabled
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (5 preceding siblings ...)
2020-05-20 8:43 ` [PULL 06/11] ui/sdl2: fix handling of AltGr key on Windows Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 08/11] ui/sdl2-input: use trace-events to debug key events Gerd Hoffmann
` (4 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
QEMU with SDL 1.2 display used to enable keyboard and mouse grab-
bing when started in full screen. The SDL 2.0 code tries to do
the same but fails to enable grabbing because sdl_grab_start(0)
returns early. To do it's work the sdl_grab_start() function
needs a pointer to a sdl2_console structure.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-7-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/sdl2.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 79c1ea29d223..b23a8f0a8ebf 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -881,17 +881,16 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
SDL_SetWindowIcon(sdl2_console[0].real_window, icon);
}
- gui_grab = 0;
- if (gui_fullscreen) {
- sdl_grab_start(0);
- }
-
mouse_mode_notifier.notify = sdl_mouse_mode_change;
qemu_add_mouse_mode_change_notifier(&mouse_mode_notifier);
sdl_cursor_hidden = SDL_CreateCursor(&data, &data, 8, 1, 0, 0);
sdl_cursor_normal = SDL_GetCursor();
+ if (gui_fullscreen) {
+ sdl_grab_start(&sdl2_console[0]);
+ }
+
atexit(sdl_cleanup);
}
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 08/11] ui/sdl2-input: use trace-events to debug key events
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (6 preceding siblings ...)
2020-05-20 8:43 ` [PULL 07/11] ui/sdl2: start in full screen with grab enabled Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 09/11] ui/gtk: don't pass on win keys without keyboard grab Gerd Hoffmann
` (3 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-8-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/sdl2-input.c | 3 +++
ui/trace-events | 3 +++
2 files changed, 6 insertions(+)
diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c
index 1f9fe831b30d..f068382209cc 100644
--- a/ui/sdl2-input.c
+++ b/ui/sdl2-input.c
@@ -27,6 +27,7 @@
#include "ui/console.h"
#include "ui/input.h"
#include "ui/sdl2.h"
+#include "trace.h"
void sdl2_process_key(struct sdl2_console *scon,
SDL_KeyboardEvent *ev)
@@ -38,6 +39,8 @@ void sdl2_process_key(struct sdl2_console *scon,
return;
}
qcode = qemu_input_map_usb_to_qcode[ev->keysym.scancode];
+ trace_sdl2_process_key(ev->keysym.scancode, qcode,
+ ev->type == SDL_KEYDOWN ? "down" : "up");
qkbd_state_key_event(scon->kbd, qcode, ev->type == SDL_KEYDOWN);
if (!qemu_console_is_graphic(con)) {
diff --git a/ui/trace-events b/ui/trace-events
index 0dcda393c1d6..5367fd3f1668 100644
--- a/ui/trace-events
+++ b/ui/trace-events
@@ -75,6 +75,9 @@ input_event_abs(int conidx, const char *axis, int value) "con %d, axis %s, value
input_event_sync(void) ""
input_mouse_mode(int absolute) "absolute %d"
+# sdl2-input.c
+sdl2_process_key(int sdl_scancode, int qcode, const char *action) "translated SDL scancode %d to QKeyCode %d (%s)"
+
# spice-display.c
qemu_spice_add_memslot(int qid, uint32_t slot_id, unsigned long virt_start, unsigned long virt_end, int async) "%d %u: host virt 0x%lx - 0x%lx async=%d"
qemu_spice_del_memslot(int qid, uint32_t gid, uint32_t slot_id) "%d gid=%u sid=%u"
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 09/11] ui/gtk: don't pass on win keys without keyboard grab
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (7 preceding siblings ...)
2020-05-20 8:43 ` [PULL 08/11] ui/sdl2-input: use trace-events to debug key events Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 10/11] ui/gtk: use native keyboard scancodes on Windows Gerd Hoffmann
` (2 subsequent siblings)
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Without keyboard grab Windows currently handles the two win keys
and the key events are also sent to the guest. This is undesir-
able. Only one program should handle key events. This patch ap-
plies commit c68f74b02e "win32: do not handle win keys when the
keyboard is not grabbed" from project spice-gtk to ui/gtk.c to
fix this problem.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-9-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 354dd90e1898..1d51e14bb58d 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1095,10 +1095,17 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
VirtualConsole *vc = opaque;
int qcode;
-#ifdef WIN32
+#ifdef G_OS_WIN32
/* on windows, we ought to ignore the reserved key event? */
if (key->hardware_keycode == 0xff)
return false;
+
+ if (!vc->s->kbd_owner) {
+ if (key->hardware_keycode == VK_LWIN ||
+ key->hardware_keycode == VK_RWIN) {
+ return FALSE;
+ }
+ }
#endif
if (key->keyval == GDK_KEY_Pause
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 10/11] ui/gtk: use native keyboard scancodes on Windows
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (8 preceding siblings ...)
2020-05-20 8:43 ` [PULL 09/11] ui/gtk: don't pass on win keys without keyboard grab Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-20 8:43 ` [PULL 11/11] ui: increase min required GTK version to 3.22.0 Gerd Hoffmann
2020-05-21 15:46 ` [PULL 00/11] Ui 20200520 patches Peter Maydell
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Since GTK 3.22 the function gdk_event_get_scancode() is
available. On Windows this function returns keyboard scancodes
and some extended flags. These raw keyboard scancodes are much
better suited for this use case than the half-cooked win32
virtual-key codes because scancodes report the key position on
the keyboard and the positions are independent of national
language settings.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-10-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/gtk.c | 33 +++++++++++++++++++++++++++++----
1 file changed, 29 insertions(+), 4 deletions(-)
diff --git a/ui/gtk.c b/ui/gtk.c
index 1d51e14bb58d..68a5b901c72d 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1026,8 +1026,13 @@ static const guint16 *gd_get_keymap(size_t *maplen)
#ifdef GDK_WINDOWING_WIN32
if (GDK_IS_WIN32_DISPLAY(dpy)) {
trace_gd_keymap_windowing("win32");
+#if GTK_CHECK_VERSION(3, 22, 0)
+ *maplen = qemu_input_map_atset1_to_qcode_len;
+ return qemu_input_map_atset1_to_qcode;
+#else
*maplen = qemu_input_map_win32_to_qcode_len;
return qemu_input_map_win32_to_qcode;
+#endif
}
#endif
@@ -1073,6 +1078,25 @@ static int gd_map_keycode(int scancode)
return keycode_map[scancode];
}
+static int gd_get_keycode(GdkEventKey *key)
+{
+#if defined G_OS_WIN32 && GTK_CHECK_VERSION(3, 22, 0)
+ int scancode = gdk_event_get_scancode((GdkEvent *)key);
+
+ /* translate Windows native scancodes to atset1 keycodes */
+ switch (scancode & (KF_EXTENDED | 0xff)) {
+ case 0x145: /* NUMLOCK */
+ return scancode & 0xff;
+ }
+
+ return scancode & KF_EXTENDED ?
+ 0xe000 | (scancode & 0xff) : scancode & 0xff;
+
+#else
+ return key->hardware_keycode;
+#endif
+}
+
static gboolean gd_text_key_down(GtkWidget *widget,
GdkEventKey *key, void *opaque)
{
@@ -1084,7 +1108,7 @@ static gboolean gd_text_key_down(GtkWidget *widget,
} else if (key->length) {
kbd_put_string_console(con, key->string, key->length);
} else {
- int qcode = gd_map_keycode(key->hardware_keycode);
+ int qcode = gd_map_keycode(gd_get_keycode(key));
kbd_put_qcode_console(con, qcode, false);
}
return TRUE;
@@ -1093,7 +1117,7 @@ static gboolean gd_text_key_down(GtkWidget *widget,
static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
{
VirtualConsole *vc = opaque;
- int qcode;
+ int keycode, qcode;
#ifdef G_OS_WIN32
/* on windows, we ought to ignore the reserved key event? */
@@ -1121,9 +1145,10 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
return TRUE;
}
- qcode = gd_map_keycode(key->hardware_keycode);
+ keycode = gd_get_keycode(key);
+ qcode = gd_map_keycode(keycode);
- trace_gd_key_event(vc->label, key->hardware_keycode, qcode,
+ trace_gd_key_event(vc->label, keycode, qcode,
(key->type == GDK_KEY_PRESS) ? "down" : "up");
qkbd_state_key_event(vc->gfx.kbd, qcode,
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PULL 11/11] ui: increase min required GTK version to 3.22.0
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (9 preceding siblings ...)
2020-05-20 8:43 ` [PULL 10/11] ui/gtk: use native keyboard scancodes on Windows Gerd Hoffmann
@ 2020-05-20 8:43 ` Gerd Hoffmann
2020-05-21 15:46 ` [PULL 00/11] Ui 20200520 patches Peter Maydell
11 siblings, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2020-05-20 8:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Gerd Hoffmann, Paolo Bonzini
From: Volker Rümelin <vr_qemu@t-online.de>
Based on a mail on the qemu-devel mailing list at
https://lists.nongnu.org/archive/html/qemu-devel/2020-05/msg02909.html
and some internet research the GTK3 versions on supported
platforms are:
RHEL-7.4: 3.22.10
RHEL-7.5: 3.22.26
Debian (Stretch): 3.22.11
Debian (Buster): 3.24.5
OpenBSD (Ports): 3.22.30
FreeBSD (Ports): 3.22.29
OpenSUSE Leap 15: 3.22.30
SLE12-SP2: Unknown
SLE15: 3.22.30
Ubuntu (Bionic): 3.22.30
Ubuntu (Focal): 3.24.18
macOS (Homebrew): 3.22.30
This justifies increasing the minimum required GTK version in
QEMU to 3.22.0.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-id: 20200516072014.7766-11-vr_qemu@t-online.de
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
configure | 2 +-
ui/gtk.c | 91 +++++--------------------------------------------------
2 files changed, 9 insertions(+), 84 deletions(-)
diff --git a/configure b/configure
index 26084fc53ad1..2fc05c4465cb 100755
--- a/configure
+++ b/configure
@@ -2897,7 +2897,7 @@ fi
if test "$gtk" != "no"; then
gtkpackage="gtk+-3.0"
gtkx11package="gtk+-x11-3.0"
- gtkversion="3.14.0"
+ gtkversion="3.22.0"
if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
gtk_cflags=$($pkg_config --cflags $gtkpackage)
gtk_libs=$($pkg_config --libs $gtkpackage)
diff --git a/ui/gtk.c b/ui/gtk.c
index 68a5b901c72d..d4b49bd7dafe 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -490,12 +490,7 @@ static void gd_refresh(DisplayChangeListener *dcl)
static GdkDevice *gd_get_pointer(GdkDisplay *dpy)
{
-#if GTK_CHECK_VERSION(3, 20, 0)
return gdk_seat_get_pointer(gdk_display_get_default_seat(dpy));
-#else
- return gdk_device_manager_get_client_pointer(
- gdk_display_get_device_manager(dpy));
-#endif
}
static void gd_mouse_set(DisplayChangeListener *dcl,
@@ -877,27 +872,18 @@ static gboolean gd_motion_event(GtkWidget *widget, GdkEventMotion *motion,
if (!qemu_input_is_absolute() && s->ptr_owner == vc) {
GdkScreen *screen = gtk_widget_get_screen(vc->gfx.drawing_area);
+ GdkDisplay *dpy = gtk_widget_get_display(widget);
+ GdkWindow *win = gtk_widget_get_window(widget);
+ GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
+ GdkRectangle geometry;
int screen_width, screen_height;
int x = (int)motion->x_root;
int y = (int)motion->y_root;
-#if GTK_CHECK_VERSION(3, 22, 0)
- {
- GdkDisplay *dpy = gtk_widget_get_display(widget);
- GdkWindow *win = gtk_widget_get_window(widget);
- GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
- GdkRectangle geometry;
- gdk_monitor_get_geometry(monitor, &geometry);
- screen_width = geometry.width;
- screen_height = geometry.height;
- }
-#else
- {
- screen_width = gdk_screen_get_width(screen);
- screen_height = gdk_screen_get_height(screen);
- }
-#endif
+ gdk_monitor_get_geometry(monitor, &geometry);
+ screen_width = geometry.width;
+ screen_height = geometry.height;
/* In relative mode check to see if client pointer hit
* one of the screen edges, and if so move it back by
@@ -1026,13 +1012,8 @@ static const guint16 *gd_get_keymap(size_t *maplen)
#ifdef GDK_WINDOWING_WIN32
if (GDK_IS_WIN32_DISPLAY(dpy)) {
trace_gd_keymap_windowing("win32");
-#if GTK_CHECK_VERSION(3, 22, 0)
*maplen = qemu_input_map_atset1_to_qcode_len;
return qemu_input_map_atset1_to_qcode;
-#else
- *maplen = qemu_input_map_win32_to_qcode_len;
- return qemu_input_map_win32_to_qcode;
-#endif
}
#endif
@@ -1080,7 +1061,7 @@ static int gd_map_keycode(int scancode)
static int gd_get_keycode(GdkEventKey *key)
{
-#if defined G_OS_WIN32 && GTK_CHECK_VERSION(3, 22, 0)
+#ifdef G_OS_WIN32
int scancode = gdk_event_get_scancode((GdkEvent *)key);
/* translate Windows native scancodes to atset1 keycodes */
@@ -1437,7 +1418,6 @@ static void gd_menu_zoom_fit(GtkMenuItem *item, void *opaque)
gd_update_full_redraw(vc);
}
-#if GTK_CHECK_VERSION(3, 20, 0)
static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr)
{
GdkDisplay *display = gtk_widget_get_display(vc->gfx.drawing_area);
@@ -1461,32 +1441,6 @@ static void gd_grab_update(VirtualConsole *vc, bool kbd, bool ptr)
gdk_seat_ungrab(seat);
}
}
-#else
-static void gd_grab_devices(VirtualConsole *vc, bool grab,
- GdkInputSource source, GdkEventMask mask,
- GdkCursor *cursor)
-{
- GdkDisplay *display = gtk_widget_get_display(vc->gfx.drawing_area);
- GdkDeviceManager *mgr = gdk_display_get_device_manager(display);
- GList *devs = gdk_device_manager_list_devices(mgr, GDK_DEVICE_TYPE_MASTER);
- GList *tmp = devs;
-
- for (tmp = devs; tmp; tmp = tmp->next) {
- GdkDevice *dev = tmp->data;
- if (gdk_device_get_source(dev) != source) {
- continue;
- }
- if (grab) {
- GdkWindow *win = gtk_widget_get_window(vc->gfx.drawing_area);
- gdk_device_grab(dev, win, GDK_OWNERSHIP_NONE, FALSE,
- mask, cursor, GDK_CURRENT_TIME);
- } else {
- gdk_device_ungrab(dev, GDK_CURRENT_TIME);
- }
- }
- g_list_free(devs);
-}
-#endif
static void gd_grab_keyboard(VirtualConsole *vc, const char *reason)
{
@@ -1499,13 +1453,7 @@ static void gd_grab_keyboard(VirtualConsole *vc, const char *reason)
}
win32_kbd_set_grab(true);
-#if GTK_CHECK_VERSION(3, 20, 0)
gd_grab_update(vc, true, vc->s->ptr_owner == vc);
-#else
- gd_grab_devices(vc, true, GDK_SOURCE_KEYBOARD,
- GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
- NULL);
-#endif
vc->s->kbd_owner = vc;
gd_update_caption(vc->s);
trace_gd_grab(vc->label, "kbd", reason);
@@ -1521,11 +1469,7 @@ static void gd_ungrab_keyboard(GtkDisplayState *s)
s->kbd_owner = NULL;
win32_kbd_set_grab(false);
-#if GTK_CHECK_VERSION(3, 20, 0)
gd_grab_update(vc, false, vc->s->ptr_owner == vc);
-#else
- gd_grab_devices(vc, false, GDK_SOURCE_KEYBOARD, 0, NULL);
-#endif
gd_update_caption(s);
trace_gd_ungrab(vc->label, "kbd");
}
@@ -1542,21 +1486,9 @@ static void gd_grab_pointer(VirtualConsole *vc, const char *reason)
}
}
-#if GTK_CHECK_VERSION(3, 20, 0)
gd_grab_update(vc, vc->s->kbd_owner == vc, true);
gdk_device_get_position(gd_get_pointer(display),
NULL, &vc->s->grab_x_root, &vc->s->grab_y_root);
-#else
- gd_grab_devices(vc, true, GDK_SOURCE_MOUSE,
- GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON_MOTION_MASK |
- GDK_SCROLL_MASK,
- vc->s->null_cursor);
- gdk_device_get_position(gd_get_pointer(display),
- NULL, &vc->s->grab_x_root, &vc->s->grab_y_root);
-#endif
vc->s->ptr_owner = vc;
gd_update_caption(vc->s);
trace_gd_grab(vc->label, "ptr", reason);
@@ -1573,17 +1505,10 @@ static void gd_ungrab_pointer(GtkDisplayState *s)
s->ptr_owner = NULL;
display = gtk_widget_get_display(vc->gfx.drawing_area);
-#if GTK_CHECK_VERSION(3, 20, 0)
gd_grab_update(vc, vc->s->kbd_owner == vc, false);
gdk_device_warp(gd_get_pointer(display),
gtk_widget_get_screen(vc->gfx.drawing_area),
vc->s->grab_x_root, vc->s->grab_y_root);
-#else
- gd_grab_devices(vc, false, GDK_SOURCE_MOUSE, 0, NULL);
- gdk_device_warp(gd_get_pointer(display),
- gtk_widget_get_screen(vc->gfx.drawing_area),
- vc->s->grab_x_root, vc->s->grab_y_root);
-#endif
gd_update_caption(s);
trace_gd_ungrab(vc->label, "ptr");
}
--
2.18.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PULL 00/11] Ui 20200520 patches
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
` (10 preceding siblings ...)
2020-05-20 8:43 ` [PULL 11/11] ui: increase min required GTK version to 3.22.0 Gerd Hoffmann
@ 2020-05-21 15:46 ` Peter Maydell
11 siblings, 0 replies; 14+ messages in thread
From: Peter Maydell @ 2020-05-21 15:46 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: Stefan Weil, QEMU Developers, Paolo Bonzini
On Wed, 20 May 2020 at 09:44, Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> The following changes since commit debe78ce14bf8f8940c2bdf3ef387505e9e035a9:
>
> Merge remote-tracking branch 'remotes/rth/tags/pull-fpu-20200515' into staging (2020-05-15 19:51:16 +0100)
>
> are available in the Git repository at:
>
> git://git.kraxel.org/qemu tags/ui-20200520-pull-request
>
> for you to fetch changes up to 7b23d121f913709306e678a3289edc813f3a7463:
>
> ui: increase min required GTK version to 3.22.0 (2020-05-19 09:06:44 +0200)
>
> ----------------------------------------------------------------
> ui: windows keyboard fixes for gtk & sdl.
> ui: require GTK 3.22 or newer.
>
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/5.1
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure
2020-05-20 8:43 ` [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure Gerd Hoffmann
@ 2020-05-22 17:15 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 14+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-22 17:15 UTC (permalink / raw)
To: Gerd Hoffmann, qemu-devel; +Cc: Stefan Weil, Volker Rümelin, Paolo Bonzini
On 5/20/20 10:43 AM, Gerd Hoffmann wrote:
> From: Volker Rümelin <vr_qemu@t-online.de>
>
> Import win32 keyboard hooking code from project spice-gtk. This
> patch removes the extra left control key up/down input events
> inserted by Windows for the right alt key up/down input events
> with international keyboard layouts. Additionally there's some
> code to grab the keyboard.
>
> The next patches will use this code.
>
> Only Windows needs this.
>
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
> Message-id: 20200516072014.7766-1-vr_qemu@t-online.de
This patch content doesn't match exactly the content of the message-id.
There are some build-sys changes.
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
> include/ui/win32-kbd-hook.h | 14 +++++
> stubs/win32-kbd-hook.c | 18 +++++++
> ui/win32-kbd-hook.c | 102 ++++++++++++++++++++++++++++++++++++
> stubs/Makefile.objs | 1 +
> ui/Makefile.objs | 3 ++
> 5 files changed, 138 insertions(+)
> create mode 100644 include/ui/win32-kbd-hook.h
> create mode 100644 stubs/win32-kbd-hook.c
> create mode 100644 ui/win32-kbd-hook.c
[...]
> diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
> index 45be5dc0ed78..6a9e3135e8f9 100644
> --- a/stubs/Makefile.objs
> +++ b/stubs/Makefile.objs
> @@ -32,6 +32,7 @@ stub-obj-y += trace-control.o
> stub-obj-y += uuid.o
> stub-obj-y += vm-stop.o
> stub-obj-y += vmstate.o
> +stub-obj-y += win32-kbd-hook.o
> stub-obj-y += fd-register.o
> stub-obj-y += qmp_memory_device.o
> stub-obj-y += target-monitor-defs.o
> diff --git a/ui/Makefile.objs b/ui/Makefile.objs
> index e6da6ff047fd..504b19647977 100644
> --- a/ui/Makefile.objs
> +++ b/ui/Makefile.objs
> @@ -15,6 +15,9 @@ common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o
> common-obj-$(CONFIG_COCOA) += cocoa.o
> common-obj-$(CONFIG_VNC) += $(vnc-obj-y)
> common-obj-$(call lnot,$(CONFIG_VNC)) += vnc-stubs.o
> +ifneq (,$(findstring m,$(CONFIG_SDL)$(CONFIG_GTK)))
If we limit this object compilation, shouldn't we also limit the stub?
> +common-obj-$(CONFIG_WIN32) += win32-kbd-hook.o
> +endif
>
> # ui-sdl module
> common-obj-$(CONFIG_SDL) += sdl.mo
>
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2020-05-22 17:16 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-20 8:43 [PULL 00/11] Ui 20200520 patches Gerd Hoffmann
2020-05-20 8:43 ` [PULL 01/11] ui/win32-kbd-hook: handle AltGr in a hook procedure Gerd Hoffmann
2020-05-22 17:15 ` Philippe Mathieu-Daudé
2020-05-20 8:43 ` [PULL 02/11] ui/gtk: fix handling of AltGr key on Windows Gerd Hoffmann
2020-05-20 8:43 ` [PULL 03/11] ui/gkt: release all keys on grab-broken-event Gerd Hoffmann
2020-05-20 8:43 ` [PULL 04/11] ui/gtk: remove unused code Gerd Hoffmann
2020-05-20 8:43 ` [PULL 05/11] ui/gtk: remove unused variable ignore_keys Gerd Hoffmann
2020-05-20 8:43 ` [PULL 06/11] ui/sdl2: fix handling of AltGr key on Windows Gerd Hoffmann
2020-05-20 8:43 ` [PULL 07/11] ui/sdl2: start in full screen with grab enabled Gerd Hoffmann
2020-05-20 8:43 ` [PULL 08/11] ui/sdl2-input: use trace-events to debug key events Gerd Hoffmann
2020-05-20 8:43 ` [PULL 09/11] ui/gtk: don't pass on win keys without keyboard grab Gerd Hoffmann
2020-05-20 8:43 ` [PULL 10/11] ui/gtk: use native keyboard scancodes on Windows Gerd Hoffmann
2020-05-20 8:43 ` [PULL 11/11] ui: increase min required GTK version to 3.22.0 Gerd Hoffmann
2020-05-21 15:46 ` [PULL 00/11] Ui 20200520 patches Peter Maydell
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).