- /* Select for motion events */
- mask.deviceid = AllDevices;
- mask.mask_len = 2;
- mask.mask = calloc(2, sizeof(char));
- SetBit(mask.mask, XI_ButtonPress);
- SetBit(mask.mask, XI_ButtonRelease);
- SetBit(mask.mask, XI_Motion);
- SetBit(mask.mask, XI_KeyPress);
- SetBit(mask.mask, XI_KeyPress);
- SetBit(mask.mask, XI_DeviceChanged);
- SetBit(mask.mask, XI_Enter);
- SetBit(mask.mask, XI_Leave);
- SetBit(mask.mask, XI_FocusIn);
- SetBit(mask.mask, XI_FocusOut);
- SetBit(mask.mask, XI_HierarchyChanged);
- XISelectEvent(display, win, &mask, 1);
-
- mask.deviceid = AllMasterDevices;
+ {
+ XIGrabModifiers modifiers[] = {{0, 0}, {0, 0x10}, {0, 0x1}, {0, 0x11}};
+ int nmods = sizeof(modifiers)/sizeof(modifiers[0]);
+
+ mask.deviceid = 2;
+ memset(mask.mask, 0, 2);
+ 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 = XIAllMasterDevices;