summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-11-10 16:34:35 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-11-10 16:34:35 +1000
commit6db80193241c00dfa7b37131576eea7de1a864e8 (patch)
tree298b5fe7d1fbade7ca72e1bdd294d2ccade35550
parent55d88994f09b76cab8883055c60fd72d24efb04f (diff)
Accept/Reject the grab after 100 events
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--multitouch.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/multitouch.c b/multitouch.c
index 35b4a39..53c52de 100644
--- a/multitouch.c
+++ b/multitouch.c
@@ -52,6 +52,7 @@ struct grabpoint {
double startx, starty; /* x/y of TouchBegin */
double x, y; /* last recorded x/y position */
Window grab_window;
+ int nevents;
};
struct multitouch {
@@ -449,6 +450,7 @@ static void handle_grabbed_event(struct multitouch *mt, XIDeviceEvent *event)
grab->startx = event->event_x;
grab->starty = event->event_y;
grab->grab_window = event->event;
+ grab->nevents = 0;
break;
} else if (event->evtype != XI_TouchBegin) {
if (grab->state != TSTATE_END && grab->touchid == event->detail)
@@ -463,26 +465,27 @@ static void handle_grabbed_event(struct multitouch *mt, XIDeviceEvent *event)
grab->x = event->event_x;
grab->y = event->event_y;
+ grab->nevents++;
paint_grabs(mt);
expose(mt, 0, 0, mt->width, mt->height);
- switch (event->evtype)
+ if (grab->state != TSTATE_END &&
+ (event->evtype == XI_TouchEnd || (grab->nevents > 100 && event->evtype != XI_TouchOwnership)))
{
- case XI_TouchEnd:
- {
- int mode = XIAcceptTouch;
- if (event->event == mt->whitebar || event->event == mt->whitebar_os)
- mode = XIRejectTouch;
- grab->state = TSTATE_END;
- XIAllowTouchEvents(mt->dpy, event->deviceid, event->detail,
- event->event, mode);
- }
- break;
- case XI_TouchUpdate:
+ int mode = XIAcceptTouch;
+ const char *modestr = "Accept";
+ if (event->event == mt->whitebar || event->event == mt->whitebar_os)
+ {
+ mode = XIRejectTouch;
+ modestr = "Reject";
+ }
+ grab->state = TSTATE_END;
+ msg("%s touch %d on %#lx.\n", modestr, event->detail, event->event);
+ XIAllowTouchEvents(mt->dpy, event->deviceid, event->detail,
+ event->event, mode);
+ } else if (event->evtype == XI_TouchUpdate)
grab->state = TSTATE_UPDATE;
- break;
- }
}
static void handle_ownership(struct multitouch *mt, XITouchOwnershipEvent *event)