summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-07-15 15:02:55 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-07-15 15:02:55 +1000
commit39ac9d85f464ca3195e8b3b2d3f6c3188f83e25e (patch)
tree4a7811c695f3120a23529e546e20e73e970fc267
parenta10f48d2dcd24fc4211d69b388f499398891c577 (diff)
parent852ed7c7064be60acb25a574563e95b4c5800205 (diff)
Merge branch 'test-root-flag'
-rw-r--r--man/xinput.man6
-rw-r--r--src/test_xi2.c115
-rw-r--r--src/xinput.c2
3 files changed, 63 insertions, 60 deletions
diff --git a/man/xinput.man b/man/xinput.man
index 540308b..87be8c7 100644
--- a/man/xinput.man
+++ b/man/xinput.man
@@ -104,9 +104,11 @@ loop displaying events received. If the -proximity is given, ProximityIn
and ProximityOut are registered.
.PP
.TP 8
-.B --test-xi2 [\fIdevice\fP]
+.B --test-xi2 [--root] [\fIdevice\fP]
Register for a number of XI2 events and display them. If a device is given,
-only events on this device are displayed.
+only events on this device are displayed. If --root is given, events are
+selected on the root window only. Otherwise, a new client window is created
+(similar to xev).
.PP
.TP 8
.B --create-master \fIprefix\fP [sendCore] [enable]
diff --git a/src/test_xi2.c b/src/test_xi2.c
index 3139d72..c8dbf34 100644
--- a/src/test_xi2.c
+++ b/src/test_xi2.c
@@ -321,86 +321,87 @@ test_xi2(Display *display,
char *name,
char *desc)
{
- XIEventMask mask;
+ XIEventMask mask[2];
+ XIEventMask *m;
Window win;
int deviceid = -1;
+ int use_root = 0;
int rc;
setvbuf(stdout, NULL, _IOLBF, 0);
+ if (argc >= 1 && strcmp(argv[0], "--root") == 0) {
+ use_root = 1;
+
+ argc--;
+ argv++;
+ }
+
rc = list(display, argc, argv, name, desc);
if (rc != EXIT_SUCCESS)
return rc;
+ if (use_root)
+ win = DefaultRootWindow(display);
+ else
+ win = create_win(display);
+
if (argc >= 1) {
XIDeviceInfo *info;
info = xi2_find_device_info(display, argv[0]);
deviceid = info->deviceid;
}
- win = create_win(display);
/* Select for motion events */
- mask.deviceid = (deviceid == -1) ? XIAllDevices : deviceid;
- mask.mask_len = XIMaskLen(XI_LASTEVENT);
- mask.mask = calloc(mask.mask_len, sizeof(char));
- XISetMask(mask.mask, XI_ButtonPress);
- XISetMask(mask.mask, XI_ButtonRelease);
- XISetMask(mask.mask, XI_KeyPress);
- XISetMask(mask.mask, XI_KeyRelease);
- XISetMask(mask.mask, XI_Motion);
- XISetMask(mask.mask, XI_DeviceChanged);
- XISetMask(mask.mask, XI_Enter);
- XISetMask(mask.mask, XI_Leave);
- XISetMask(mask.mask, XI_FocusIn);
- XISetMask(mask.mask, XI_FocusOut);
+ m = &mask[0];
+ m->deviceid = (deviceid == -1) ? XIAllDevices : deviceid;
+ m->mask_len = XIMaskLen(XI_LASTEVENT);
+ m->mask = calloc(m->mask_len, sizeof(char));
+ XISetMask(m->mask, XI_ButtonPress);
+ XISetMask(m->mask, XI_ButtonRelease);
+ XISetMask(m->mask, XI_KeyPress);
+ XISetMask(m->mask, XI_KeyRelease);
+ XISetMask(m->mask, XI_Motion);
+ XISetMask(m->mask, XI_DeviceChanged);
+ XISetMask(m->mask, XI_Enter);
+ XISetMask(m->mask, XI_Leave);
+ XISetMask(m->mask, XI_FocusIn);
+ XISetMask(m->mask, XI_FocusOut);
#ifdef HAVE_XI22
- XISetMask(mask.mask, XI_TouchBegin);
- XISetMask(mask.mask, XI_TouchUpdate);
- XISetMask(mask.mask, XI_TouchEnd);
+ XISetMask(m->mask, XI_TouchBegin);
+ XISetMask(m->mask, XI_TouchUpdate);
+ XISetMask(m->mask, XI_TouchEnd);
#endif
- if (mask.deviceid == XIAllDevices)
- XISetMask(mask.mask, XI_HierarchyChanged);
- XISetMask(mask.mask, XI_PropertyEvent);
- XISelectEvents(display, win, &mask, 1);
- XMapWindow(display, win);
- XSync(display, False);
-
- {
- XIGrabModifiers modifiers[] = {{0, 0}, {0, 0x10}, {0, 0x1}, {0, 0x11}};
- int nmods = sizeof(modifiers)/sizeof(modifiers[0]);
-
- mask.deviceid = 2;
- memset(mask.mask, 0, mask.mask_len);
- XISetMask(mask.mask, XI_KeyPress);
- XISetMask(mask.mask, XI_KeyRelease);
- XISetMask(mask.mask, XI_ButtonPress);
- XISetMask(mask.mask, XI_ButtonRelease);
- XISetMask(mask.mask, XI_Motion);
- XIGrabButton(display, 2, 1, win, None, GrabModeAsync, GrabModeAsync,
- False, &mask, nmods, modifiers);
- XIGrabKeycode(display, 3, 24 /* q */, win, GrabModeAsync, GrabModeAsync,
- False, &mask, nmods, modifiers);
- XIUngrabButton(display, 3, 1, win, nmods - 2, &modifiers[2]);
- XIUngrabKeycode(display, 3, 24 /* q */, win, nmods - 2, &modifiers[2]);
- }
-
- mask.deviceid = (deviceid == -1) ? XIAllMasterDevices : deviceid;
- memset(mask.mask, 0, mask.mask_len);
- XISetMask(mask.mask, XI_RawKeyPress);
- XISetMask(mask.mask, XI_RawKeyRelease);
- XISetMask(mask.mask, XI_RawButtonPress);
- XISetMask(mask.mask, XI_RawButtonRelease);
- XISetMask(mask.mask, XI_RawMotion);
+ if (m->deviceid == XIAllDevices)
+ XISetMask(m->mask, XI_HierarchyChanged);
+ XISetMask(m->mask, XI_PropertyEvent);
+
+ m = &mask[1];
+ m->deviceid = (deviceid == -1) ? XIAllMasterDevices : deviceid;
+ m->mask_len = XIMaskLen(XI_LASTEVENT);
+ m->mask = calloc(m->mask_len, sizeof(char));
+ XISetMask(m->mask, XI_RawKeyPress);
+ XISetMask(m->mask, XI_RawKeyRelease);
+ XISetMask(m->mask, XI_RawButtonPress);
+ XISetMask(m->mask, XI_RawButtonRelease);
+ XISetMask(m->mask, XI_RawMotion);
#ifdef HAVE_XI22
- XISetMask(mask.mask, XI_RawTouchBegin);
- XISetMask(mask.mask, XI_RawTouchUpdate);
- XISetMask(mask.mask, XI_RawTouchEnd);
+ XISetMask(m->mask, XI_RawTouchBegin);
+ XISetMask(m->mask, XI_RawTouchUpdate);
+ XISetMask(m->mask, XI_RawTouchEnd);
#endif
- XISelectEvents(display, DefaultRootWindow(display), &mask, 1);
- free(mask.mask);
+ XISelectEvents(display, win, &mask[0], use_root ? 2 : 1);
+ if (!use_root) {
+ XISelectEvents(display, DefaultRootWindow(display), &mask[1], 1);
+ XMapWindow(display, win);
+ }
+ XSync(display, False);
- {
+ free(mask[0].mask);
+ free(mask[1].mask);
+
+ if (!use_root) {
XEvent event;
XMaskEvent(display, ExposureMask, &event);
XSelectInput(display, win, 0);
diff --git a/src/xinput.c b/src/xinput.c
index 16a13df..e6e468c 100644
--- a/src/xinput.c
+++ b/src/xinput.c
@@ -101,7 +101,7 @@ static entry drivers[] =
set_clientpointer
},
{ "test-xi2",
- "<device>",
+ "[--root] <device>",
test_xi2,
},
{ "map-to-output",