2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
12 #include "ecore_x_private.h"
16 #include "Ecore_Input.h"
19 int _ecore_x_xi2_opcode = -1;
22 static XIDeviceInfo *_ecore_x_xi2_devs = NULL;
23 static int _ecore_x_xi2_num = 0;
27 _ecore_x_input_init(void)
31 int major = 2, minor = 0;
33 if (!XQueryExtension(_ecore_x_disp, "XInputExtension",
34 &_ecore_x_xi2_opcode, &event, &error))
36 _ecore_x_xi2_opcode = -1;
40 if (XIQueryVersion(_ecore_x_disp, &major, &minor) == BadRequest)
42 _ecore_x_xi2_opcode = -1;
45 _ecore_x_xi2_devs = XIQueryDevice(_ecore_x_disp, XIAllDevices,
51 _ecore_x_input_shutdown(void)
54 if (_ecore_x_xi2_devs)
56 XIFreeDeviceInfo(_ecore_x_xi2_devs);
57 _ecore_x_xi2_devs = NULL;
60 _ecore_x_xi2_opcode = -1;
65 _ecore_x_input_handler(XEvent* xevent)
68 XIDeviceEvent *evd = (XIDeviceEvent *)(xevent->xcookie.data);
69 int devid = evd->deviceid;
71 //printf("deviceID = %d\n", devid);
72 switch (xevent->xcookie.evtype)
78 evd->event_x, evd->event_y,
79 evd->root_x, evd->root_y,
81 (evd->child ? evd->child : evd->event),
87 evd->event_x, evd->event_y,
88 evd->root_x, evd->root_y);
92 (ECORE_EVENT_MOUSE_BUTTON_DOWN,
96 evd->event_x, evd->event_y,
97 evd->root_x, evd->root_y,
99 (evd->child ? evd->child : evd->event),
105 evd->event_x, evd->event_y,
106 evd->root_x, evd->root_y);
108 case XI_ButtonRelease:
110 (ECORE_EVENT_MOUSE_BUTTON_UP,
114 evd->event_x, evd->event_y,
115 evd->root_x, evd->root_y,
117 (evd->child ? evd->child : evd->event),
123 evd->event_x, evd->event_y,
124 evd->root_x, evd->root_y);
131 ecore_x_input_multi_select(Ecore_X_Window win)
136 if (!_ecore_x_xi2_devs) return 0;
138 LOGFN(__FILE__, __LINE__, __FUNCTION__);
139 for (i = 0; i < _ecore_x_xi2_num; i++)
141 XIDeviceInfo *dev = &(_ecore_x_xi2_devs[i]);
143 if (dev->use == XIFloatingSlave)
145 XIEventMask eventmask;
146 unsigned char mask[1] = { 0 };
148 eventmask.deviceid = dev->deviceid;
149 eventmask.mask_len = sizeof(mask);
150 eventmask.mask = mask;
151 XISetMask(mask, XI_ButtonPress);
152 XISetMask(mask, XI_ButtonRelease);
153 XISetMask(mask, XI_Motion);
154 XISelectEvents(_ecore_x_disp, win, &eventmask, 1);