Commit eb1cc760 authored by dscho's avatar dscho

SDLvncviewer: upon focus loss, force releasing the Alt keys

When switching windows using the Alt+Tab shortcut, SDLvncviewer would
get the "down" event, but not the "up" event.  This patch provides
a workaround.
Signed-off-by: 's avatarJohannes Schindelin <johannes.schindelin@gmx.de>
parent e12c4ccf
2009-03-07 Johannes E. Schindelin <Johannes.Schindelin@gmx.de>
* client_examples/SDLvncviewer.c: force releasing Alt keys whenr
losing focus. This helps when you switch windows by pressing
Alt+Tab (SDLvncviewer would get the "Alt down" event, but not
the "Alt up" one).
2009-03-07 Johannes E. Schindelin <Johannes.Schindelin@gmx.de>
* client_examples/SDLvncviewer.c: make the viewer resizable
......
......@@ -2,7 +2,6 @@ immediate:
----------
make SDLvncviewer more versatile
- Send modifiers key-up on leave focus,
- test for missing keys (especially "[]{}" with ./examples/mac),
- map Apple/Linux/Windows keys onto each other,
- handle selection
......
......@@ -17,6 +17,8 @@ static int enableResizable, viewOnly, buttonMask;
static int realWidth, realHeight, bytesPerPixel, rowStride;
static char *sdlPixels;
static int rightAltKeyDown, leftAltKeyDown;
static rfbBool resize(rfbClient* client) {
static char first=TRUE;
int width=client->width,height=client->height,
......@@ -376,11 +378,25 @@ static void handleSDLEvent(rfbClient *cl, SDL_Event *e)
break;
SendKeyEvent(cl, SDL_key2rfbKeySym(&e->key),
e->type == SDL_KEYDOWN ? TRUE : FALSE);
if (e->key.keysym.sym == SDLK_RALT)
rightAltKeyDown = e->type == SDL_KEYDOWN;
if (e->key.keysym.sym == SDLK_LALT)
leftAltKeyDown = e->type == SDL_KEYDOWN;
break;
case SDL_QUIT:
rfbClientCleanup(cl);
exit(0);
case SDL_ACTIVEEVENT:
if (!e->active.gain && rightAltKeyDown) {
SendKeyEvent(cl, XK_Alt_R, FALSE);
rightAltKeyDown = FALSE;
rfbClientLog("released right Alt key\n");
}
if (!e->active.gain && leftAltKeyDown) {
SendKeyEvent(cl, XK_Alt_L, FALSE);
leftAltKeyDown = FALSE;
rfbClientLog("released left Alt key\n");
}
break;
case SDL_VIDEORESIZE:
setRealDimension(cl, e->resize.w, e->resize.h);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment