|
|
|
@ -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) |
|
|
|
|