summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--client_examples/SDLvncviewer.c35
2 files changed, 30 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 24483cc..99a2a20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2009-03-12 Johannes E. Schindelin <Johannes.Schindelin@gmx.de>
+ * client_examples/SDLvncviewer.c: support mouse wheel operations
+
2009-03-08 Johannes E. Schindelin <Johannes.Schindelin@gmx.de>
* 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)
OpenPOWER on IntegriCloud