diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2011-11-07 12:10:57 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-11-07 12:10:57 +1000 |
commit | 7b1799e06a0535f0e2e441d2acca220024e6d209 (patch) | |
tree | 0bb2a15157a71f2cdf27830684c11c22bda2d635 | |
parent | 6d16cb0164585662b15e616acd95518885be5274 (diff) |
Add a "whitebar" for touch ownership testing
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | multitouch.c | 18 |
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); } |