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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



ack,

although it still needs the gdk patch, since this solution only work when the widget has the keyboard focus, as explained in original thread.


On Wed, May 15, 2013 at 11:34 AM, Christophe Fergeau <cfergeau@xxxxxxxxxx> wrote:
From: Mattias Grönlund <mattias@xxxxxxxxxxx>

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

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel



--
Marc-André Lureau
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]