59
56
#include <X11/Xlibint.h>
60
57
#include <X11/extensions/XInput.h>
61
58
#include <X11/extensions/extutil.h>
59
#include <X11/extensions/Xge.h>
60
#include <X11/extensions/geproto.h>
65
_XiEventToWire(dpy, re, event, count)
66
register Display *dpy; /* pointer to display structure */
67
register XEvent *re; /* pointer to client event */
68
register xEvent **event; /* wire protocol event */
65
register Display *dpy, /* pointer to display structure */
66
register XEvent *re, /* pointer to client event */
67
register xEvent **event, /* wire protocol event */
71
70
XExtDisplayInfo *info = XInput_find_display(dpy);
74
switch ((re->type & 0x7f) - info->codes->first_event) {
75
case XI_DeviceKeyPress:
76
case XI_DeviceKeyRelease:
78
register XDeviceKeyEvent *ev = (XDeviceKeyEvent *) re;
79
register deviceKeyButtonPointer *kev;
80
register deviceValuator *vev;
83
kev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
85
return (_XUnknownNativeEvent(dpy, re, *event));
86
*event = (xEvent *) kev;
90
kev->event = ev->window;
91
kev->child = ev->subwindow;
95
kev->root_x = ev->x_root;
96
kev->root_y = ev->y_root;
97
kev->state = ev->state;
98
kev->same_screen = ev->same_screen;
99
kev->detail = ev->keycode;
100
kev->deviceid = ev->deviceid | MORE_EVENTS;
102
vev = (deviceValuator *)++ kev;
103
vev->type = info->codes->first_event + XI_DeviceValuator;
104
vev->deviceid = ev->deviceid;
105
vev->device_state = ev->device_state;
106
vev->first_valuator = ev->first_axis;
107
vev->num_valuators = ev->axes_count;
108
i = vev->num_valuators;
113
vev->valuator5 = ev->axis_data[5];
115
vev->valuator4 = ev->axis_data[4];
117
vev->valuator3 = ev->axis_data[3];
119
vev->valuator2 = ev->axis_data[2];
121
vev->valuator1 = ev->axis_data[1];
123
vev->valuator0 = ev->axis_data[0];
128
case XI_ProximityOut:
130
register XProximityNotifyEvent *ev = (XProximityNotifyEvent *) re;
131
register deviceKeyButtonPointer *pev;
132
register deviceValuator *vev;
135
pev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
137
return (_XUnknownNativeEvent(dpy, re, *event));
138
*event = (xEvent *) pev;
140
pev->type = ev->type;
141
pev->root = ev->root;
142
pev->event = ev->window;
143
pev->child = ev->subwindow;
144
pev->time = ev->time;
145
pev->event_x = ev->x;
146
pev->event_y = ev->y;
147
pev->root_x = ev->x_root;
148
pev->root_y = ev->y_root;
149
pev->state = ev->state;
150
pev->same_screen = ev->same_screen;
151
pev->deviceid = ev->deviceid | MORE_EVENTS;
153
vev = (deviceValuator *)++ pev;
154
vev->type = info->codes->first_event + XI_DeviceValuator;
155
vev->deviceid = ev->deviceid;
156
vev->device_state = ev->device_state;
157
vev->first_valuator = ev->first_axis;
158
vev->num_valuators = ev->axes_count;
160
i = vev->num_valuators;
165
vev->valuator5 = ev->axis_data[5];
167
vev->valuator4 = ev->axis_data[4];
169
vev->valuator3 = ev->axis_data[3];
171
vev->valuator2 = ev->axis_data[2];
173
vev->valuator1 = ev->axis_data[1];
175
vev->valuator0 = ev->axis_data[0];
179
case XI_DeviceButtonPress:
180
case XI_DeviceButtonRelease:
182
register XDeviceButtonEvent *ev = (XDeviceButtonEvent *) re;
183
register deviceKeyButtonPointer *bev;
184
register deviceValuator *vev;
187
bev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
189
return (_XUnknownNativeEvent(dpy, re, *event));
190
*event = (xEvent *) bev;
192
bev->type = ev->type;
193
bev->root = ev->root;
194
bev->event = ev->window;
195
bev->child = ev->subwindow;
196
bev->time = ev->time;
197
bev->event_x = ev->x;
198
bev->event_y = ev->y;
199
bev->root_x = ev->x_root;
200
bev->root_y = ev->y_root;
201
bev->state = ev->state;
202
bev->same_screen = ev->same_screen;
203
bev->detail = ev->button;
204
bev->deviceid = ev->deviceid | MORE_EVENTS;
206
vev = (deviceValuator *)++ bev;
207
vev->type = info->codes->first_event + XI_DeviceValuator;
208
vev->deviceid = ev->deviceid;
209
vev->device_state = ev->device_state;
210
vev->first_valuator = ev->first_axis;
211
vev->num_valuators = ev->axes_count;
213
i = vev->num_valuators;
218
vev->valuator5 = ev->axis_data[5];
220
vev->valuator4 = ev->axis_data[4];
222
vev->valuator3 = ev->axis_data[3];
224
vev->valuator2 = ev->axis_data[2];
226
vev->valuator1 = ev->axis_data[1];
228
vev->valuator0 = ev->axis_data[0];
232
case XI_DeviceMotionNotify:
234
register XDeviceMotionEvent *ev = (XDeviceMotionEvent *) re;
235
register deviceKeyButtonPointer *mev;
236
register deviceValuator *vev;
239
mev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
241
return (_XUnknownNativeEvent(dpy, re, *event));
242
*event = (xEvent *) mev;
244
mev->type = ev->type;
245
mev->root = ev->root;
246
mev->event = ev->window;
247
mev->child = ev->subwindow;
248
mev->time = ev->time;
249
mev->event_x = ev->x;
250
mev->event_y = ev->y;
251
mev->root_x = ev->x_root;
252
mev->root_y = ev->y_root;
253
mev->state = ev->state;
254
mev->same_screen = ev->same_screen;
255
mev->detail = ev->is_hint;
256
mev->deviceid = ev->deviceid | MORE_EVENTS;
258
vev = (deviceValuator *)++ mev;
259
vev->type = info->codes->first_event + XI_DeviceValuator;
260
vev->deviceid = ev->deviceid;
261
vev->device_state = ev->device_state;
262
vev->first_valuator = ev->first_axis;
263
vev->num_valuators = ev->axes_count;
265
i = vev->num_valuators;
270
vev->valuator5 = ev->axis_data[5];
272
vev->valuator4 = ev->axis_data[4];
274
vev->valuator3 = ev->axis_data[3];
276
vev->valuator2 = ev->axis_data[2];
278
vev->valuator1 = ev->axis_data[1];
280
vev->valuator0 = ev->axis_data[0];
284
case XI_DeviceFocusIn:
285
case XI_DeviceFocusOut:
287
register XDeviceFocusChangeEvent *ev = (XDeviceFocusChangeEvent *) re;
288
register deviceFocus *fev;
291
fev = (deviceFocus *) Xmalloc(*count * sizeof(xEvent));
293
return (_XUnknownNativeEvent(dpy, re, *event));
294
*event = (xEvent *) fev;
296
fev->type = ev->type;
297
fev->window = ev->window;
298
fev->mode = ev->mode;
299
fev->detail = ev->detail;
300
fev->time = ev->time;
301
fev->deviceid = ev->deviceid;
304
case XI_DeviceMappingNotify:
306
register XDeviceMappingEvent *ev = (XDeviceMappingEvent *) re;
307
register deviceMappingNotify *mev;
310
mev = (deviceMappingNotify *) Xmalloc(*count * sizeof(xEvent));
312
return (_XUnknownNativeEvent(dpy, re, *event));
313
*event = (xEvent *) mev;
315
mev->type = ev->type;
316
mev->firstKeyCode = ev->first_keycode;
317
mev->request = ev->request;
318
mev->count = ev->count;
319
mev->time = ev->time;
320
mev->deviceid = ev->deviceid;
323
case XI_DeviceStateNotify:
325
register XDeviceStateNotifyEvent *ev = (XDeviceStateNotifyEvent *) re;
326
register deviceStateNotify *sev;
327
register xEvent *tev;
328
XInputClass *any = (XInputClass *) & ev->data[0];
329
unsigned char *sav_id;
333
for (i = 0; i < ev->num_classes; i++) {
334
if (any->class == KeyClass) {
335
XKeyStatus *k = (XKeyStatus *) any;
337
if (k->num_keys > 32)
339
} else if (any->class == ButtonClass) {
340
XButtonStatus *b = (XButtonStatus *) any;
342
if (b->num_buttons > 32)
344
} else if (any->class == ValuatorClass) {
345
XValuatorStatus *v = (XValuatorStatus *) any;
347
if (v->num_valuators > 3)
350
any = (XInputClass *) ((char *)any + any->length);
353
sev = (deviceStateNotify *) Xmalloc(*count * sizeof(xEvent));
355
return (_XUnknownNativeEvent(dpy, re, *event));
356
*event = (xEvent *) sev;
357
tev = (xEvent *) (sev + 1);
359
sev->type = ev->type;
360
sev->deviceid = ev->deviceid;
361
sav_id = &(sev->deviceid);
362
sev->time = ev->time;
363
sev->classes_reported = 0;
365
any = (XInputClass *) & ev->data[0];
366
for (i = 0; i < ev->num_classes; i++) {
367
if (any->class == KeyClass) {
368
XKeyStatus *k = (XKeyStatus *) any;
369
register deviceKeyStateNotify *kev;
371
sev->classes_reported |= (1 << KeyClass);
372
sev->num_keys = k->num_keys;
373
memcpy((char *)(sev->keys), (char *)(k->keys), 4);
374
if (k->num_keys > 32) {
375
kev = (deviceKeyStateNotify *) tev++;
376
kev->type = info->codes->first_event +
377
XI_DeviceKeystateNotify;
378
kev->deviceid = ev->deviceid;
379
*sav_id |= MORE_EVENTS;
380
sav_id = &(kev->deviceid);
381
memcpy((char *)(kev->keys), (char *)(&k->keys[4]), 28);
383
} else if (any->class == ButtonClass) {
384
XButtonStatus *b = (XButtonStatus *) any;
385
register deviceButtonStateNotify *bev;
387
sev->classes_reported |= (1 << ButtonClass);
388
sev->num_buttons = b->num_buttons;
389
memcpy((char *)(sev->buttons), (char *)(b->buttons), 4);
390
if (b->num_buttons > 32) {
391
bev = (deviceButtonStateNotify *) tev++;
392
bev->type = info->codes->first_event +
393
XI_DeviceButtonstateNotify;
394
bev->deviceid = ev->deviceid;
395
*sav_id |= MORE_EVENTS;
396
sav_id = &(bev->deviceid);
397
memcpy((char *)(bev->buttons), (char *)(&b->buttons[4]),
400
} else if (any->class == ValuatorClass) {
401
XValuatorStatus *val = (XValuatorStatus *) any;
402
register deviceValuator *vev;
404
sev->classes_reported |= (1 << ValuatorClass);
405
sev->num_valuators = val->num_valuators < 3 ?
406
val->num_valuators : 3;
407
switch (sev->num_valuators) {
409
sev->valuator2 = val->valuators[2];
411
sev->valuator1 = val->valuators[1];
413
sev->valuator0 = val->valuators[0];
415
if (val->num_valuators > 3) {
416
vev = (deviceValuator *) tev++;
417
vev->type = info->codes->first_event + XI_DeviceValuator;
418
vev->deviceid = ev->deviceid;
419
vev->first_valuator = 3;
420
vev->num_valuators = val->num_valuators - 3;
421
*sav_id |= MORE_EVENTS;
422
sav_id = &(vev->deviceid);
423
i = val->num_valuators;
428
vev->valuator2 = val->valuators[5];
430
vev->valuator1 = val->valuators[4];
432
vev->valuator0 = val->valuators[3];
436
any = (XInputClass *) ((char *)any + any->length);
440
case XI_ChangeDeviceNotify:
442
register XChangeDeviceNotifyEvent *ev = (XChangeDeviceNotifyEvent *) re;
443
register changeDeviceNotify *cev;
446
cev = (changeDeviceNotify *) Xmalloc(*count * sizeof(xEvent));
448
return (_XUnknownNativeEvent(dpy, re, *event));
449
*event = (xEvent *) cev;
451
cev->type = ev->type;
452
cev->request = ev->request;
453
cev->time = ev->time;
454
cev->deviceid = ev->deviceid;
458
return (_XUnknownNativeEvent(dpy, re, *event));
73
if ((re->type & 0x7f) != GenericEvent) {
74
switch ((re->type & 0x7f) - info->codes->first_event) {
75
case XI_DeviceKeyPress:
76
case XI_DeviceKeyRelease:
78
register XDeviceKeyEvent *ev = (XDeviceKeyEvent *) re;
79
register deviceKeyButtonPointer *kev;
80
register deviceValuator *vev;
83
kev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
85
return (_XUnknownNativeEvent(dpy, re, *event));
86
*event = (xEvent *) kev;
90
kev->event = ev->window;
91
kev->child = ev->subwindow;
95
kev->root_x = ev->x_root;
96
kev->root_y = ev->y_root;
97
kev->state = ev->state;
98
kev->same_screen = ev->same_screen;
99
kev->detail = ev->keycode;
100
kev->deviceid = ev->deviceid | MORE_EVENTS;
102
vev = (deviceValuator *)++ kev;
103
vev->type = info->codes->first_event + XI_DeviceValuator;
104
vev->deviceid = ev->deviceid;
105
vev->device_state = ev->device_state;
106
vev->first_valuator = ev->first_axis;
107
vev->num_valuators = ev->axes_count;
108
i = vev->num_valuators;
113
vev->valuator5 = ev->axis_data[5];
115
vev->valuator4 = ev->axis_data[4];
117
vev->valuator3 = ev->axis_data[3];
119
vev->valuator2 = ev->axis_data[2];
121
vev->valuator1 = ev->axis_data[1];
123
vev->valuator0 = ev->axis_data[0];
128
case XI_ProximityOut:
130
register XProximityNotifyEvent *ev = (XProximityNotifyEvent *) re;
131
register deviceKeyButtonPointer *pev;
132
register deviceValuator *vev;
135
pev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
137
return (_XUnknownNativeEvent(dpy, re, *event));
138
*event = (xEvent *) pev;
140
pev->type = ev->type;
141
pev->root = ev->root;
142
pev->event = ev->window;
143
pev->child = ev->subwindow;
144
pev->time = ev->time;
145
pev->event_x = ev->x;
146
pev->event_y = ev->y;
147
pev->root_x = ev->x_root;
148
pev->root_y = ev->y_root;
149
pev->state = ev->state;
150
pev->same_screen = ev->same_screen;
151
pev->deviceid = ev->deviceid | MORE_EVENTS;
153
vev = (deviceValuator *)++ pev;
154
vev->type = info->codes->first_event + XI_DeviceValuator;
155
vev->deviceid = ev->deviceid;
156
vev->device_state = ev->device_state;
157
vev->first_valuator = ev->first_axis;
158
vev->num_valuators = ev->axes_count;
160
i = vev->num_valuators;
165
vev->valuator5 = ev->axis_data[5];
167
vev->valuator4 = ev->axis_data[4];
169
vev->valuator3 = ev->axis_data[3];
171
vev->valuator2 = ev->axis_data[2];
173
vev->valuator1 = ev->axis_data[1];
175
vev->valuator0 = ev->axis_data[0];
179
case XI_DeviceButtonPress:
180
case XI_DeviceButtonRelease:
182
register XDeviceButtonEvent *ev = (XDeviceButtonEvent *) re;
183
register deviceKeyButtonPointer *bev;
184
register deviceValuator *vev;
187
bev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
189
return (_XUnknownNativeEvent(dpy, re, *event));
190
*event = (xEvent *) bev;
192
bev->type = ev->type;
193
bev->root = ev->root;
194
bev->event = ev->window;
195
bev->child = ev->subwindow;
196
bev->time = ev->time;
197
bev->event_x = ev->x;
198
bev->event_y = ev->y;
199
bev->root_x = ev->x_root;
200
bev->root_y = ev->y_root;
201
bev->state = ev->state;
202
bev->same_screen = ev->same_screen;
203
bev->detail = ev->button;
204
bev->deviceid = ev->deviceid | MORE_EVENTS;
206
vev = (deviceValuator *)++ bev;
207
vev->type = info->codes->first_event + XI_DeviceValuator;
208
vev->deviceid = ev->deviceid;
209
vev->device_state = ev->device_state;
210
vev->first_valuator = ev->first_axis;
211
vev->num_valuators = ev->axes_count;
213
i = vev->num_valuators;
218
vev->valuator5 = ev->axis_data[5];
220
vev->valuator4 = ev->axis_data[4];
222
vev->valuator3 = ev->axis_data[3];
224
vev->valuator2 = ev->axis_data[2];
226
vev->valuator1 = ev->axis_data[1];
228
vev->valuator0 = ev->axis_data[0];
232
case XI_DeviceMotionNotify:
234
register XDeviceMotionEvent *ev = (XDeviceMotionEvent *) re;
235
register deviceKeyButtonPointer *mev;
236
register deviceValuator *vev;
239
mev = (deviceKeyButtonPointer *) Xmalloc(*count * sizeof(xEvent));
241
return (_XUnknownNativeEvent(dpy, re, *event));
242
*event = (xEvent *) mev;
244
mev->type = ev->type;
245
mev->root = ev->root;
246
mev->event = ev->window;
247
mev->child = ev->subwindow;
248
mev->time = ev->time;
249
mev->event_x = ev->x;
250
mev->event_y = ev->y;
251
mev->root_x = ev->x_root;
252
mev->root_y = ev->y_root;
253
mev->state = ev->state;
254
mev->same_screen = ev->same_screen;
255
mev->detail = ev->is_hint;
256
mev->deviceid = ev->deviceid | MORE_EVENTS;
258
vev = (deviceValuator *)++ mev;
259
vev->type = info->codes->first_event + XI_DeviceValuator;
260
vev->deviceid = ev->deviceid;
261
vev->device_state = ev->device_state;
262
vev->first_valuator = ev->first_axis;
263
vev->num_valuators = ev->axes_count;
265
i = vev->num_valuators;
270
vev->valuator5 = ev->axis_data[5];
272
vev->valuator4 = ev->axis_data[4];
274
vev->valuator3 = ev->axis_data[3];
276
vev->valuator2 = ev->axis_data[2];
278
vev->valuator1 = ev->axis_data[1];
280
vev->valuator0 = ev->axis_data[0];
284
case XI_DeviceFocusIn:
285
case XI_DeviceFocusOut:
287
register XDeviceFocusChangeEvent *ev = (XDeviceFocusChangeEvent *) re;
288
register deviceFocus *fev;
291
fev = (deviceFocus *) Xmalloc(*count * sizeof(xEvent));
293
return (_XUnknownNativeEvent(dpy, re, *event));
294
*event = (xEvent *) fev;
296
fev->type = ev->type;
297
fev->window = ev->window;
298
fev->mode = ev->mode;
299
fev->detail = ev->detail;
300
fev->time = ev->time;
301
fev->deviceid = ev->deviceid;
304
case XI_DeviceMappingNotify:
306
register XDeviceMappingEvent *ev = (XDeviceMappingEvent *) re;
307
register deviceMappingNotify *mev;
310
mev = (deviceMappingNotify *) Xmalloc(*count * sizeof(xEvent));
312
return (_XUnknownNativeEvent(dpy, re, *event));
313
*event = (xEvent *) mev;
315
mev->type = ev->type;
316
mev->firstKeyCode = ev->first_keycode;
317
mev->request = ev->request;
318
mev->count = ev->count;
319
mev->time = ev->time;
320
mev->deviceid = ev->deviceid;
323
case XI_DeviceStateNotify:
325
register XDeviceStateNotifyEvent *ev = (XDeviceStateNotifyEvent *) re;
326
register deviceStateNotify *sev;
327
register xEvent *tev;
328
XInputClass *any = (XInputClass *) & ev->data[0];
329
unsigned char *sav_id;
333
for (i = 0; i < ev->num_classes; i++) {
334
if (any->class == KeyClass) {
335
XKeyStatus *k = (XKeyStatus *) any;
337
if (k->num_keys > 32)
339
} else if (any->class == ButtonClass) {
340
XButtonStatus *b = (XButtonStatus *) any;
342
if (b->num_buttons > 32)
344
} else if (any->class == ValuatorClass) {
345
XValuatorStatus *v = (XValuatorStatus *) any;
347
if (v->num_valuators > 3)
350
any = (XInputClass *) ((char *)any + any->length);
353
sev = (deviceStateNotify *) Xmalloc(*count * sizeof(xEvent));
355
return (_XUnknownNativeEvent(dpy, re, *event));
356
*event = (xEvent *) sev;
357
tev = (xEvent *) (sev + 1);
359
sev->type = ev->type;
360
sev->deviceid = ev->deviceid;
361
sav_id = &(sev->deviceid);
362
sev->time = ev->time;
363
sev->classes_reported = 0;
365
any = (XInputClass *) & ev->data[0];
366
for (i = 0; i < ev->num_classes; i++) {
367
if (any->class == KeyClass) {
368
XKeyStatus *k = (XKeyStatus *) any;
369
register deviceKeyStateNotify *kev;
371
sev->classes_reported |= (1 << KeyClass);
372
sev->num_keys = k->num_keys;
373
memcpy((char *)(sev->keys), (char *)(k->keys), 4);
374
if (k->num_keys > 32) {
375
kev = (deviceKeyStateNotify *) tev++;
376
kev->type = info->codes->first_event +
377
XI_DeviceKeystateNotify;
378
kev->deviceid = ev->deviceid;
379
*sav_id |= MORE_EVENTS;
380
sav_id = &(kev->deviceid);
381
memcpy((char *)(kev->keys), (char *)(&k->keys[4]), 28);
383
} else if (any->class == ButtonClass) {
384
XButtonStatus *b = (XButtonStatus *) any;
385
register deviceButtonStateNotify *bev;
387
sev->classes_reported |= (1 << ButtonClass);
388
sev->num_buttons = b->num_buttons;
389
memcpy((char *)(sev->buttons), (char *)(b->buttons), 4);
390
if (b->num_buttons > 32) {
391
bev = (deviceButtonStateNotify *) tev++;
392
bev->type = info->codes->first_event +
393
XI_DeviceButtonstateNotify;
394
bev->deviceid = ev->deviceid;
395
*sav_id |= MORE_EVENTS;
396
sav_id = &(bev->deviceid);
397
memcpy((char *)(bev->buttons), (char *)(&b->buttons[4]),
400
} else if (any->class == ValuatorClass) {
401
XValuatorStatus *val = (XValuatorStatus *) any;
402
register deviceValuator *vev;
404
sev->classes_reported |= (1 << ValuatorClass);
405
sev->num_valuators = val->num_valuators < 3 ?
406
val->num_valuators : 3;
407
switch (sev->num_valuators) {
409
sev->valuator2 = val->valuators[2];
411
sev->valuator1 = val->valuators[1];
413
sev->valuator0 = val->valuators[0];
415
if (val->num_valuators > 3) {
416
vev = (deviceValuator *) tev++;
417
vev->type = info->codes->first_event + XI_DeviceValuator;
418
vev->deviceid = ev->deviceid;
419
vev->first_valuator = 3;
420
vev->num_valuators = val->num_valuators - 3;
421
*sav_id |= MORE_EVENTS;
422
sav_id = &(vev->deviceid);
423
i = val->num_valuators;
428
vev->valuator2 = val->valuators[5];
430
vev->valuator1 = val->valuators[4];
432
vev->valuator0 = val->valuators[3];
436
any = (XInputClass *) ((char *)any + any->length);
440
case XI_ChangeDeviceNotify:
442
register XChangeDeviceNotifyEvent *ev = (XChangeDeviceNotifyEvent *) re;
443
register changeDeviceNotify *cev;
446
cev = (changeDeviceNotify *) Xmalloc(*count * sizeof(xEvent));
448
return (_XUnknownNativeEvent(dpy, re, *event));
449
*event = (xEvent *) cev;
451
cev->type = ev->type;
452
cev->request = ev->request;
453
cev->time = ev->time;
454
cev->deviceid = ev->deviceid;
458
return (_XUnknownNativeEvent(dpy, re, *event));
460
} else /* if type != GenericEvent */
463
switch (((XGenericEvent*)re)->evtype)
465
case XI_HierarchyChangedNotify:
467
XDeviceHierarchyChangedEvent *ev =
468
(XDeviceHierarchyChangedEvent*)re;
469
XIDeviceHierarchyEvent *dhcev;
471
dhcev = (XIDeviceHierarchyEvent *)Xmalloc(*count * sizeof(xEvent));
473
return (_XUnknownNativeEvent(dpy, re, *event));
475
*event = (xEvent *) dhcev;
476
dhcev->type = ev->type;
477
dhcev->time = ev->time;
481
return (_XUnknownNativeEvent(dpy, re, *event));