summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-11-07 12:10:57 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-11-07 12:10:57 +1000
commit7b1799e06a0535f0e2e441d2acca220024e6d209 (patch)
tree0bb2a15157a71f2cdf27830684c11c22bda2d635
parent6d16cb0164585662b15e616acd95518885be5274 (diff)
Add a "whitebar" for touch ownership testing
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--multitouch.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/multitouch.c b/multitouch.c
index 743ca96..7234a76 100644
--- a/multitouch.c
+++ b/multitouch.c
@@ -25,6 +25,7 @@ static void usage(void)
printf("Usage:\n");
printf(" Grey window: normal touch surface\n");
printf(" Black bar left: grabs the touchpoint, no ownership\n");
+ printf(" White bar left: grabs the touchpoint, with ownership\n");
}
enum TouchState {
@@ -53,6 +54,7 @@ struct multitouch {
Window root;
Window win;
Window blackbar;
+ Window whitebar;
GC gc;
Visual *visual;
int xi_opcode;
@@ -117,9 +119,15 @@ static void init_windows(struct multitouch *mt)
win = XCreateSimpleWindow(mt->dpy, mt->root, 0, 0, mt->width, mt->height,
0, 0, WhitePixel(mt->dpy, mt->screen_no));
+ mt->win = win;
- subwin = XCreateSimpleWindow(mt->dpy, win, 0, 0, 50, mt->height, 0, 0,
+ subwin = XCreateSimpleWindow(mt->dpy, win, 0, 0, 50, mt->height/2, 0, 0,
BlackPixel(mt->dpy, mt->screen_no));
+ mt->blackbar = subwin;
+
+ subwin = XCreateSimpleWindow(mt->dpy, win, 0, mt->height/2, 50, mt->height/2, 0, 0,
+ WhitePixel(mt->dpy, mt->screen_no));
+ mt->whitebar = subwin;
/* select for touch events on main window */
XSelectInput(mt->dpy, win, ExposureMask);
@@ -138,8 +146,6 @@ static void init_windows(struct multitouch *mt)
XISelectEvents(mt->dpy, win, &evmask, 1);
- mt->win = win;
- mt->blackbar = subwin;
/* grab touch events on blackbar */
modifiers.modifiers = XIAnyModifier;
@@ -147,6 +153,12 @@ static void init_windows(struct multitouch *mt)
XINoOwnerEvents, &evmask, 1, &modifiers) != 0)
error("Failed to establish passive grab on blackbar\n");
+ /* grab touch events with ownership on whitebar */
+ XISetMask(mask, XI_TouchOwnership);
+ if (XIGrabTouchBegin(mt->dpy, XIAllMasterDevices, mt->whitebar,
+ XINoOwnerEvents, &evmask, 1, &modifiers) != 0)
+ error("Failed to establish passive grab on blackbar\n");
+
XSync(mt->dpy, False);
}