Пример #1
0
        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);
        }