summaryrefslogtreecommitdiffstats
path: root/vncviewer
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2014-09-30 17:03:28 +0200
committerPierre Ossman <ossman@cendio.se>2014-09-30 17:03:28 +0200
commita7d3dc776552dbe416f0ba63c382ac8ed84b34e1 (patch)
tree9d9d35ad6e706a04c2fbaffb40dce905f51eb8ce /vncviewer
parente7c169d738b07b45c2addac16b351334881ada61 (diff)
downloadtigervnc-a7d3dc776552dbe416f0ba63c382ac8ed84b34e1.tar.gz
tigervnc-a7d3dc776552dbe416f0ba63c382ac8ed84b34e1.zip
Handle PrintScreen and SysReq on Windows
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.
Diffstat (limited to 'vncviewer')
-rw-r--r--vncviewer/Viewport.cxx8
-rw-r--r--vncviewer/win32.c2
2 files changed, 9 insertions, 1 deletions
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 887195dd..66a78412 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -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);
diff --git a/vncviewer/win32.c b/vncviewer/win32.c
index cf4dc49a..a2132f35 100644
--- a/vncviewer/win32.c
+++ b/vncviewer/win32.c
@@ -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 },