diff options
Diffstat (limited to 'vnc.c')
-rw-r--r-- | vnc.c | 59 |
1 files changed, 37 insertions, 22 deletions
@@ -398,32 +398,47 @@ static gboolean expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer dat static void send_mouse(struct vnc_window *vnc, int x, int y, int x11state, int x11press, int x11release) { - int rfbstate = 0; + static const struct { + int rfbmask; + int x11mask; + int x11nr; + } buttons[] = { + { + .rfbmask = rfbButton1Mask, + .x11mask = Button1Mask, + .x11nr = Button1, + },{ + .rfbmask = rfbButton2Mask, + .x11mask = Button2Mask, + .x11nr = Button2, + },{ + .rfbmask = rfbButton3Mask, + .x11mask = Button3Mask, + .x11nr = Button3, + },{ + .rfbmask = rfbButton4Mask, + .x11mask = Button4Mask, + .x11nr = Button4, + },{ + .rfbmask = rfbButton5Mask, + .x11mask = Button5Mask, + .x11nr = Button5, + } + }; + int i, rfbstate = 0; if (vnc->viewonly) return; - if (x11state & Button1Mask) - rfbstate |= rfbButton1Mask; - if (x11state & Button2Mask) - rfbstate |= rfbButton2Mask; - if (x11state & Button3Mask) - rfbstate |= rfbButton3Mask; - - if (x11press == Button1) - rfbstate |= rfbButton1Mask; - if (x11press == Button2) - rfbstate |= rfbButton2Mask; - if (x11press == Button3) - rfbstate |= rfbButton3Mask; - - if (x11release == Button1) - rfbstate &= ~rfbButton1Mask; - if (x11release == Button2) - rfbstate &= ~rfbButton2Mask; - if (x11release == Button3) - rfbstate &= ~rfbButton3Mask; - + for (i = 0; i < sizeof(buttons)/sizeof(buttons[0]); i++) { + if (x11state & buttons[i].x11mask) + rfbstate |= buttons[i].rfbmask; + if (x11press == buttons[i].x11nr) + rfbstate |= buttons[i].rfbmask; + if (x11release == buttons[i].x11nr) + rfbstate &= ~buttons[i].rfbmask; + } + if (vnc->debug) fprintf(stderr,"%s: +%d+%d x11state 0x%x rfbstate 0x%x\n", __FUNCTION__, x, y, x11state, rfbstate); |