mirror of
https://github.com/minetest/irrlicht.git
synced 2024-12-24 17:50:31 +01:00
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:
parent
af380df28f
commit
81a392928b
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user