summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2024-03-21 12:34:06 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-24 09:57:30 +0000
commit6c16bf0c60626783a7043f08630f7ae48cee9cc3 (patch)
tree6c12c7b48b935f5710a5809afd7b39f4a7eeb5a0
parent7f3f29b7ab029ccb011be5517ea849fb90168efa (diff)
xcb: try to repopulate xinput2 devices when needed
And try to not call Q_ASSERT() to avoid crash. Fixes: QTBUG-123554 Pick-to: 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> (cherry picked from commit ed96f3bd2f76c7c6b86ffeaaf0083cdec53fff18)
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
index c94b3edb69..4f62a1880b 100644
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
@@ -813,7 +813,16 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo
{
auto *xiDeviceEvent = reinterpret_cast<xcb_input_touch_begin_event_t *>(xiDevEvent);
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();
if (xiDeviceEvent->event_type == XCB_INPUT_TOUCH_BEGIN) {
QWindowSystemInterface::TouchPoint tp;