diff options
author | kraxel <kraxel> | 2007-02-07 11:43:54 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2007-02-07 11:43:54 +0000 |
commit | 73ac639033b04082c2bebb3b7b91a2b53db44383 (patch) | |
tree | 94e1f7246e9e9b3355d8011a50a0726486fc242d | |
parent | e77bde86e1ac7e5b86181d093342ae40e07bc2d7 (diff) | |
download | xenwatch-73ac639033b04082c2bebb3b7b91a2b53db44383.tar.gz |
fix mouse handling
-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); |