@@ -260,27 +260,18 @@ static void enable_xinput2(void)
260
260
{
261
261
struct x11drv_thread_data * data = x11drv_thread_data ();
262
262
XIEventMask mask ;
263
- XIDeviceInfo * pointer_info ;
264
263
unsigned char mask_bits [XIMaskLen (XI_LASTEVENT )];
265
- int count ;
266
264
267
265
if (!xinput2_available ) return ;
268
266
269
- if (!pXIGetClientPointer ( data -> display , None , & data -> xinput2_pointer )) return ;
270
-
271
267
mask .mask = mask_bits ;
272
268
mask .mask_len = sizeof (mask_bits );
273
269
mask .deviceid = XIAllMasterDevices ;
274
270
memset ( mask_bits , 0 , sizeof (mask_bits ) );
275
271
XISetMask ( mask_bits , XI_DeviceChanged );
276
272
XISetMask ( mask_bits , XI_RawMotion );
277
273
XISetMask ( mask_bits , XI_ButtonPress );
278
-
279
274
pXISelectEvents ( data -> display , DefaultRootWindow ( data -> display ), & mask , 1 );
280
-
281
- pointer_info = pXIQueryDevice ( data -> display , data -> xinput2_pointer , & count );
282
- update_relative_valuators ( pointer_info -> classes , pointer_info -> num_classes );
283
- pXIFreeDeviceInfo ( pointer_info );
284
275
}
285
276
286
277
#endif
@@ -292,20 +283,17 @@ static void disable_xinput2(void)
292
283
{
293
284
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
294
285
struct x11drv_thread_data * data = x11drv_thread_data ();
286
+ unsigned char mask_bits [XIMaskLen (XI_LASTEVENT )];
295
287
XIEventMask mask ;
296
288
297
289
if (!xinput2_available ) return ;
298
290
299
- mask .mask = NULL ;
300
- mask .mask_len = 0 ;
291
+ mask .mask = mask_bits ;
292
+ mask .mask_len = sizeof ( mask_bits ) ;
301
293
mask .deviceid = XIAllMasterDevices ;
302
-
294
+ memset ( mask_bits , 0 , sizeof (mask_bits ) );
295
+ XISetMask ( mask_bits , XI_DeviceChanged );
303
296
pXISelectEvents ( data -> display , DefaultRootWindow ( data -> display ), & mask , 1 );
304
- data -> x_valuator .number = -1 ;
305
- data -> y_valuator .number = -1 ;
306
- data -> x_valuator .value = 0 ;
307
- data -> y_valuator .value = 0 ;
308
- data -> xinput2_pointer = 0 ;
309
297
#endif
310
298
}
311
299
@@ -316,7 +304,10 @@ static void disable_xinput2(void)
316
304
void x11drv_xinput2_init ( struct x11drv_thread_data * data )
317
305
{
318
306
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
307
+ unsigned char mask_bits [XIMaskLen (XI_LASTEVENT )];
319
308
int major = 2 , minor = 2 ;
309
+ XIEventMask mask ;
310
+ int count ;
320
311
321
312
if (!xinput2_available || pXIQueryVersion ( data -> display , & major , & minor ))
322
313
{
@@ -325,6 +316,22 @@ void x11drv_xinput2_init( struct x11drv_thread_data *data )
325
316
return ;
326
317
}
327
318
319
+ mask .mask = mask_bits ;
320
+ mask .mask_len = sizeof (mask_bits );
321
+ mask .deviceid = XIAllMasterDevices ;
322
+ memset ( mask_bits , 0 , sizeof (mask_bits ) );
323
+ XISetMask ( mask_bits , XI_DeviceChanged );
324
+ pXISelectEvents ( data -> display , DefaultRootWindow ( data -> display ), & mask , 1 );
325
+
326
+ if (!pXIGetClientPointer ( data -> display , None , & data -> xinput2_pointer ))
327
+ WARN ( "Failed to get xinput2 master pointer device\n" );
328
+ else
329
+ {
330
+ XIDeviceInfo * pointer_info = pXIQueryDevice ( data -> display , data -> xinput2_pointer , & count );
331
+ update_relative_valuators ( pointer_info -> classes , pointer_info -> num_classes );
332
+ pXIFreeDeviceInfo ( pointer_info );
333
+ }
334
+
328
335
TRACE ( "XInput2 %d.%d available\n" , major , minor );
329
336
#endif
330
337
}
0 commit comments