[Spice-devel] [spice-gtk] mingw: Fix non-working AltGr with some layouts

Christophe Fergeau cfergeau at redhat.com
Wed May 15 02:34:55 PDT 2013


From: Mattias Grönlund <mattias at gronlund.se>

Running virt-viewer-x64-0.5.6.msi, on Windows 7, connecting to QEMU using
spice, AltGR key combinations fails (using Swedish keyboard layout both at
server and client).

I suspect that this is a variant of
https://bugzilla.redhat.com/show_bug.cgi?id=904092.

After some debugging, I realized that there is an extra VK_LCONTROL
keypress sent by Windows. This extra VK_LCONTROL will then make the key
e.g. AltGr-< actually be Control-AltGr-<, which is not interpreted as a |
sign.

So in spice-widget.c : keyboard_hook_cb(), I added SPICE_DEBUG lines which
printed out the hooked->scanCode, and realized that this extra VK_LCONTROL
has a very suspect scanCode with bit 9 set. If I instead press the left
Ctrl key, it will also emit VK_LCONTROL, but with bit 9 cleared.

So I just made sure that keyboard_hook_cb(), silently dropped these strange
VK_LCONTROL events, which seems to work for me.
---
 gtk/spice-widget.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
index 7eb9e64..4f74380 100644
--- a/gtk/spice-widget.c
+++ b/gtk/spice-widget.c
@@ -672,11 +672,17 @@ static LRESULT CALLBACK keyboard_hook_cb(int code, WPARAM wparam, LPARAM lparam)
         case VK_NUMLOCK:
         case VK_LSHIFT:
         case VK_RSHIFT:
-        case VK_LCONTROL:
         case VK_RCONTROL:
         case VK_LMENU:
         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:
             SendMessage(win32_window, wparam, hooked->vkCode, dwmsg);
             return 1;
-- 
1.8.2.1



More information about the Spice-devel mailing list