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
This commit is contained in:
cutealien 2021-01-06 14:43:37 +00:00
parent af380df28f
commit 81a392928b

View File

@ -1992,39 +1992,19 @@ void CIrrDeviceLinux::initXInput2()
return; return;
} }
int cnt = 0; // So far we only use XInput2 for touch events.
XIDeviceInfo *di = XIQueryDevice(XDisplay, XIAllDevices, &cnt); // So we enable those and disable all other events for now.
if ( di ) XIEventMask eventMask;
{ unsigned char mask[XIMaskLen(XI_TouchEnd)];
for (int i = 0; i < cnt; ++i) memset(mask, 0, sizeof(mask));
{ eventMask.deviceid = XIAllMasterDevices;
bool hasTouchClass = false; eventMask.mask_len = sizeof(mask);
XIDeviceInfo *dev = &di[i]; eventMask.mask = mask;
for (int j = 0; j < dev->num_classes; ++j) XISetMask(eventMask.mask, XI_TouchBegin);
{ XISetMask(eventMask.mask, XI_TouchUpdate);
if (dev->classes[j]->type == XITouchClass) XISetMask(eventMask.mask, XI_TouchEnd);
{
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);
XISelectEvents(XDisplay, XWindow, &eventMask, 1); XISelectEvents(XDisplay, XWindow, &eventMask, 1);
}
}
XIFreeDeviceInfo(di);
}
#endif #endif
} }