]> source.dussan.org Git - tigervnc.git/commitdiff
Handle PrintScreen and SysReq on Windows 43/head
authorPierre Ossman <ossman@cendio.se>
Tue, 30 Sep 2014 15:03:28 +0000 (17:03 +0200)
committerPierre Ossman <ossman@cendio.se>
Tue, 30 Sep 2014 15:03:28 +0000 (17:03 +0200)
This key requires a bit extra care on Windows. We get wildly
different messages depending on if Alt is pressed or not. The symbol
chosen now follows the standard behaviour on X11.

doc/keyboard-test.txt
vncviewer/Viewport.cxx
vncviewer/win32.c

index 2d2b2b696a890d2e677ddb75db28269bf5c23bf9..d59499f72c83fcc115dbf70b48e60b40dd66880c 100644 (file)
@@ -81,6 +81,7 @@ Client
   - Insert, Delete, Home, End, PageUp, PageDown
   - Arrow keys
   - Menu
+  - Alt+PrntScrn sends Sys_Req [Win]
 
 - French layout (AZERTY and inverted shift behaviour for many keys)
 
index 887195ddf82b0abca8bcfc519e7d558450d7a49c..66a784125ea99c7d7c55894a5c6f6e143f41b06c 100644 (file)
@@ -695,6 +695,12 @@ int Viewport::handleSystemEvent(void *event, void *data)
     if (isExtended)
       keyCode |= 0x100;
 
+    // VK_SNAPSHOT sends different scan codes depending on the state of
+    // Alt. This means that we can get different scan codes on press and
+    // release. Force it to be something standard.
+    if (vKey == VK_SNAPSHOT)
+      keyCode = 0x137;
+
     keySym = win32_vkey_to_keysym(vKey, isExtended);
     if (keySym == NoSymbol) {
       if (isExtended)
@@ -720,6 +726,8 @@ int Viewport::handleSystemEvent(void *event, void *data)
       keyCode = MapVirtualKey(vKey, MAPVK_VK_TO_VSC);
     if (isExtended)
       keyCode |= 0x100;
+    if (vKey == VK_SNAPSHOT)
+      keyCode = 0x137;
 
     self->handleKeyRelease(keyCode);
 
index cf4dc49a6878c6ef248becb630d402fccdf306a3..a2132f3547a6813389bd3048192adce56b0842cd 100644 (file)
@@ -148,7 +148,7 @@ static const int vkey_map[][3] = {
   { VK_UP,                  XK_KP_Up,       XK_Up },
   { VK_RIGHT,               XK_KP_Right,    XK_Right },
   { VK_DOWN,                XK_KP_Down,     XK_Down },
-  { VK_SNAPSHOT,            XK_Print,       NoSymbol },
+  { VK_SNAPSHOT,            XK_Sys_Req,     XK_Print },
   { VK_INSERT,              XK_KP_Insert,   XK_Insert },
   { VK_DELETE,              XK_KP_Delete,   XK_Delete },
   { VK_LWIN,                NoSymbol,       XK_Super_L },