Merging r6181 through r6184 from trunk to ogl-es branch

- Changes to touch-input handling on X11


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6185 dfc29bdd-3216-0410-991c-e03cc46cb475
master
cutealien 2021-01-06 14:52:49 +00:00 committed by MoNTE48
parent 1257ee6a4c
commit c3e1d5c86b
1 changed files with 12 additions and 32 deletions

View File

@ -2040,39 +2040,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
}