]> source.dussan.org Git - tigervnc.git/commitdiff
Handle right shift better on Windows
authorPierre Ossman <ossman@cendio.se>
Mon, 13 Nov 2017 08:07:59 +0000 (09:07 +0100)
committerPierre Ossman <ossman@cendio.se>
Mon, 13 Nov 2017 14:55:51 +0000 (15:55 +0100)
The shift buttons are a bit buggy on Windows unfortunately, but we
can do slightly better than we're doing today.

vncviewer/Viewport.cxx

index 960a085cfd3d0e2a890b1143aafc32c477eb086a..12624d9c9e0274bde4f8d5cc06a3528fc175e693 100644 (file)
@@ -922,6 +922,11 @@ int Viewport::handleSystemEvent(void *event, void *data)
         vlog.error(_("No symbol for virtual key 0x%02x"), (int)vKey);
     }
 
+    // Windows sends the same vKey for both shifts, so we need to look
+    // at the scan code to tell them apart
+    if ((keySym == XK_Shift_L) && (keyCode == 0x36))
+      keySym = XK_Shift_R;
+
     self->handleKeyPress(keyCode, keySym);
 
     return 1;
@@ -953,6 +958,15 @@ int Viewport::handleSystemEvent(void *event, void *data)
 
     self->handleKeyRelease(keyCode);
 
+    // Windows has a rather nasty bug where it won't send key release
+    // events for a Shift button if the other Shift is still pressed
+    if ((keyCode == 0x2a) || (keyCode == 0x36)) {
+      if (self->downKeySym.count(0x2a))
+        self->handleKeyRelease(0x2a);
+      if (self->downKeySym.count(0x36))
+        self->handleKeyRelease(0x36);
+    }
+
     return 1;
   }
 #elif defined(__APPLE__)