diff options
author | Pierre Ossman <ossman@cendio.se> | 2014-09-30 17:03:28 +0200 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2014-09-30 17:03:28 +0200 |
commit | a7d3dc776552dbe416f0ba63c382ac8ed84b34e1 (patch) | |
tree | 9d9d35ad6e706a04c2fbaffb40dce905f51eb8ce /vncviewer | |
parent | e7c169d738b07b45c2addac16b351334881ada61 (diff) | |
download | tigervnc-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.cxx | 8 | ||||
-rw-r--r-- | vncviewer/win32.c | 2 |
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 }, |