public bool Init(AvaloniaX11Platform platform) { _platform = platform; _x11 = platform.Info; _multitouch = platform.Options?.EnableMultiTouch ?? false; var devices = (XIDeviceInfo *)XIQueryDevice(_x11.Display, (int)XiPredefinedDeviceId.XIAllMasterDevices, out int num); for (var c = 0; c < num; c++) { if (devices[c].Use == XiDeviceType.XIMasterPointer) { _pointerDevice = new PointerDeviceInfo(devices[c]); break; } } if (_pointerDevice == null) { return(false); } /* * int mask = 0; * * XISetMask(ref mask, XiEventType.XI_DeviceChanged); * var emask = new XIEventMask * { * Mask = &mask, * Deviceid = _pointerDevice.Id, * MaskLen = XiEventMaskLen * }; * * if (XISelectEvents(_x11.Display, _x11.RootWindow, &emask, 1) != Status.Success) * return false; * return true; */ return(XiSelectEvents(_x11.Display, _x11.RootWindow, new Dictionary <int, List <XiEventType> > { [_pointerDevice.Id] = new List <XiEventType> { XiEventType.XI_DeviceChanged } }) == Status.Success); }