All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Volker Rümelin" <vr_qemu@t-online.de>
To: "Gerd Hoffmann" <kraxel@redhat.com>,
	"Stefan Weil" <sw@weilnetz.de>,
	"Daniel P . Berrangé" <berrange@redhat.com>
Cc: QEMU <qemu-devel@nongnu.org>
Subject: [PATCH 02/10] ui/gtk: fix handling of AltGr key on Windows
Date: Sun, 10 May 2020 20:42:56 +0200	[thread overview]
Message-ID: <20200510184304.9267-2-vr_qemu@t-online.de> (raw)
In-Reply-To: <2393388c-86c3-4d7e-178e-2c7e6d14a8de@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>
---
 ui/gtk.c | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

diff --git a/ui/gtk.c b/ui/gtk.c
index 83f2f5d49b..68c63532b1 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -38,6 +38,10 @@
 
 #include "ui/console.h"
 #include "ui/gtk.h"
+#ifdef CONFIG_WIN32
+#include <gdk/gdkwin32.h>
+#include "win32-kbd-hook.h"
+#endif
 
 #include <glib/gi18n.h>
 #include <locale.h>
@@ -1451,6 +1455,9 @@ static void gd_grab_keyboard(VirtualConsole *vc, const char *reason)
         }
     }
 
+#ifdef CONFIG_WIN32
+    win32_kbd_set_grab(true);
+#endif
 #if GTK_CHECK_VERSION(3, 20, 0)
     gd_grab_update(vc, true, vc->s->ptr_owner == vc);
 #else
@@ -1472,6 +1479,9 @@ static void gd_ungrab_keyboard(GtkDisplayState *s)
     }
     s->kbd_owner = NULL;
 
+#ifdef CONFIG_WIN32
+    win32_kbd_set_grab(false);
+#endif
 #if GTK_CHECK_VERSION(3, 20, 0)
     gd_grab_update(vc, false, vc->s->ptr_owner == vc);
 #else
@@ -1614,12 +1624,28 @@ static gboolean gd_leave_event(GtkWidget *widget, GdkEventCrossing *crossing,
     return TRUE;
 }
 
+static gboolean gd_focus_in_event(GtkWidget *widget,
+                                  GdkEventFocus *event, gpointer opaque)
+{
+#ifdef CONFIG_WIN32
+    VirtualConsole *vc = opaque;
+    GtkDisplayState *s = vc->s;
+
+    win32_kbd_set_window(gdk_win32_window_get_impl_hwnd(
+        gtk_widget_get_window(vc->window ? vc->window : s->window)));
+#endif
+    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;
 
+#ifdef CONFIG_WIN32
+    win32_kbd_set_window(NULL);
+#endif
     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.26.1



  parent reply	other threads:[~2020-05-10 18:46 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-10 18:42 Patches for ui/gtk and ui/sdl Volker Rümelin
2020-05-10 18:42 ` [PATCH 01/10] ui/win32-kbd-hook: handle AltGr in a hook procedure Volker Rümelin
2020-05-12 11:21   ` Gerd Hoffmann
2020-05-10 18:42 ` Volker Rümelin [this message]
2020-05-12 11:23   ` [PATCH 02/10] ui/gtk: fix handling of AltGr key on Windows Gerd Hoffmann
2020-05-10 18:42 ` [PATCH 03/10] ui/gkt: release all keys on grab-broken-event Volker Rümelin
2020-05-12 11:28   ` Gerd Hoffmann
2020-05-10 18:42 ` [PATCH 04/10] ui/gtk: remove unused code Volker Rümelin
2020-05-12 11:46   ` Philippe Mathieu-Daudé
2020-05-10 18:42 ` [PATCH 05/10] ui/gtk: remove unused variable ignore_keys Volker Rümelin
2020-05-12 11:50   ` Philippe Mathieu-Daudé
2020-05-10 18:43 ` [PATCH 06/10] ui/sdl2: fix handling of AltGr key on Windows Volker Rümelin
2020-05-10 18:43 ` [PATCH 07/10] ui/sdl2: start in full screen with grab enabled Volker Rümelin
2020-05-10 18:43 ` [PATCH 08/10] ui/sdl2-input: use trace-events to debug key events Volker Rümelin
2020-05-12 11:51   ` Philippe Mathieu-Daudé
2020-05-10 18:43 ` [PATCH 09/10] ui/gtk: don't pass on win keys without keyboard grab Volker Rümelin
2020-05-12 11:30   ` Gerd Hoffmann
2020-05-10 18:43 ` [PATCH 10/10] ui/gtk: use native keyboard scancodes on Windows Volker Rümelin
2020-05-12 11:31   ` Daniel P. Berrangé
2020-05-14 20:46     ` Volker Rümelin
2020-05-11  7:56 ` Patches for ui/gtk and ui/sdl Howard Spoelstra

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=20200510184304.9267-2-vr_qemu@t-online.de \
    --to=vr_qemu@t-online.de \
    --cc=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sw@weilnetz.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.