diff --git a/ChangeLog b/ChangeLog index 24483cc..99a2a20 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2009-03-12 Johannes E. Schindelin + * client_examples/SDLvncviewer.c: support mouse wheel operations + 2009-03-08 Johannes E. Schindelin * client_examples/SDLvncviewer.c: support clipboard operations diff --git a/client_examples/SDLvncviewer.c b/client_examples/SDLvncviewer.c index d905f74..a0fd1d9 100644 --- a/client_examples/SDLvncviewer.c +++ b/client_examples/SDLvncviewer.c @@ -6,6 +6,8 @@ struct { int sdl; int rfb; } buttonMapping[]={ {1, rfbButton1Mask}, {2, rfbButton2Mask}, {3, rfbButton3Mask}, + {4, rfbButton4Mask}, + {5, rfbButton5Mask}, {0,0} }; @@ -357,22 +359,39 @@ static void handleSDLEvent(rfbClient *cl, SDL_Event *e) #endif case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEMOTION: { + case SDL_MOUSEMOTION: + { int x, y, state, i; if (viewOnly) break; - state = SDL_GetMouseState(&x, &y); + if (e->type == SDL_MOUSEMOTION) { + x = e->motion.x; + y = e->motion.y; + state = e->motion.state; + } + else { + x = e->button.x; + y = e->button.y; + state = e->button.button; + for (i = 0; buttonMapping[i].sdl; i++) + if (state == buttonMapping[i].sdl) { + state = buttonMapping[i].rfb; + if (e->type == SDL_MOUSEBUTTONDOWN) + buttonMask |= state; + else + buttonMask &= ~state; + break; + } + } if (sdlPixels) { x = x * cl->width / realWidth; y = y * cl->height / realHeight; } - for (buttonMask = 0, i = 0; buttonMapping[i].sdl; i++) - if (state & SDL_BUTTON(buttonMapping[i].sdl)) - buttonMask |= buttonMapping[i].rfb; - SendPointerEvent(cl, x, y, buttonMask); - break; - } + SendPointerEvent(cl, x, y, buttonMask); + buttonMask &= ~(rfbButton4Mask | rfbButton5Mask); + break; + } case SDL_KEYUP: case SDL_KEYDOWN: if (viewOnly)