xcb: try to repopulate xinput2 devices when needed
And try to not call Q_ASSERT() to avoid crash. Fixes: QTBUG-123554 Pick-to: 6.6 6.5 Change-Id: I9443c5f0ab4ca7a858df9b328f517b48ab8f122d Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> (cherry picked from commit 2862cdb7ba22cc99d1db158888ba0bb32c47e8e8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
c21dc81e15
commit
ed96f3bd2f
@ -813,7 +813,16 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo
|
|||||||
{
|
{
|
||||||
auto *xiDeviceEvent = reinterpret_cast<xcb_input_touch_begin_event_t *>(xiDevEvent);
|
auto *xiDeviceEvent = reinterpret_cast<xcb_input_touch_begin_event_t *>(xiDevEvent);
|
||||||
TouchDeviceData *dev = touchDeviceForId(xiDeviceEvent->sourceid);
|
TouchDeviceData *dev = touchDeviceForId(xiDeviceEvent->sourceid);
|
||||||
Q_ASSERT(dev);
|
if (!dev) {
|
||||||
|
qCDebug(lcQpaXInputEvents) << "didn't find the dev for given sourceid - " << xiDeviceEvent->sourceid
|
||||||
|
<< ", try to repopulate xi2 devices";
|
||||||
|
xi2SetupDevices();
|
||||||
|
dev = touchDeviceForId(xiDeviceEvent->sourceid);
|
||||||
|
if (!dev) {
|
||||||
|
qCDebug(lcQpaXInputEvents) << "still can't find the dev for it, give up.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
const bool firstTouch = dev->touchPoints.isEmpty();
|
const bool firstTouch = dev->touchPoints.isEmpty();
|
||||||
if (xiDeviceEvent->event_type == XCB_INPUT_TOUCH_BEGIN) {
|
if (xiDeviceEvent->event_type == XCB_INPUT_TOUCH_BEGIN) {
|
||||||
QWindowSystemInterface::TouchPoint tp;
|
QWindowSystemInterface::TouchPoint tp;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user