aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkraxel <kraxel>2007-02-07 11:43:54 +0000
committerkraxel <kraxel>2007-02-07 11:43:54 +0000
commit73ac639033b04082c2bebb3b7b91a2b53db44383 (patch)
tree94e1f7246e9e9b3355d8011a50a0726486fc242d
parente77bde86e1ac7e5b86181d093342ae40e07bc2d7 (diff)
downloadxenwatch-73ac639033b04082c2bebb3b7b91a2b53db44383.tar.gz
fix mouse handling
-rw-r--r--vnc.c59
1 files changed, 37 insertions, 22 deletions
diff --git a/vnc.c b/vnc.c
index ef15f04..67ace04 100644
--- a/vnc.c
+++ b/vnc.c
@@ -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);