From 81a392928ba5814596462de62b163a0f526c7f7e Mon Sep 17 00:00:00 2001 From: cutealien Date: Wed, 6 Jan 2021 14:43:37 +0000 Subject: [PATCH] Simplify touch-event handling a bit. Discussion to this in https://sourceforge.net/p/irrlicht/patches/322 Basically last solution caused problems as it send fake-mouse events on top of touch-events. For now we can probably just enable touch-events and clear masks for everything else for all devices as we only use the XInput2 events for touch-event handling and nothing else. At least not noticing conflicts with rest of X11 input so far and user TheBrokenRail said this works for him. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6184 dfc29bdd-3216-0410-991c-e03cc46cb475 --- source/Irrlicht/CIrrDeviceLinux.cpp | 44 ++++++++--------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/source/Irrlicht/CIrrDeviceLinux.cpp b/source/Irrlicht/CIrrDeviceLinux.cpp index 832aaf54..2d587e55 100644 --- a/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/source/Irrlicht/CIrrDeviceLinux.cpp @@ -1992,39 +1992,19 @@ void CIrrDeviceLinux::initXInput2() return; } - int cnt = 0; - XIDeviceInfo *di = XIQueryDevice(XDisplay, XIAllDevices, &cnt); - if ( di ) - { - for (int i = 0; i < cnt; ++i) - { - bool hasTouchClass = false; - XIDeviceInfo *dev = &di[i]; - for (int j = 0; j < dev->num_classes; ++j) - { - if (dev->classes[j]->type == XITouchClass) - { - hasTouchClass = true; - break; - } - } - if ( hasTouchClass ) - { - XIEventMask eventMask; - unsigned char mask[XIMaskLen(XI_TouchEnd)]; - memset(mask, 0, sizeof(mask)); - eventMask.deviceid = dev->deviceid; - eventMask.mask_len = sizeof(mask); - eventMask.mask = mask; - XISetMask(eventMask.mask, XI_TouchBegin); - XISetMask(eventMask.mask, XI_TouchUpdate); - XISetMask(eventMask.mask, XI_TouchEnd); + // So far we only use XInput2 for touch events. + // So we enable those and disable all other events for now. + XIEventMask eventMask; + unsigned char mask[XIMaskLen(XI_TouchEnd)]; + memset(mask, 0, sizeof(mask)); + eventMask.deviceid = XIAllMasterDevices; + eventMask.mask_len = sizeof(mask); + eventMask.mask = mask; + XISetMask(eventMask.mask, XI_TouchBegin); + XISetMask(eventMask.mask, XI_TouchUpdate); + XISetMask(eventMask.mask, XI_TouchEnd); - XISelectEvents(XDisplay, XWindow, &eventMask, 1); - } - } - XIFreeDeviceInfo(di); - } + XISelectEvents(XDisplay, XWindow, &eventMask, 1); #endif }