From eb12c6ac3d9f5e3cfac516fe4fab17d25d603a3e6f79daaaceaaedd775d53e56 Mon Sep 17 00:00:00 2001 From: Christophe Marin Date: Mon, 3 Apr 2023 16:17:07 +0000 Subject: [PATCH] Accepting request 1077015 from home:Vogtinator:qt5.15 - Add patch to fix XInput2 events in big-endian X11 clients (bsc#1204883, QTBUG-105157): * big-endian-scroll.patch OBS-URL: https://build.opensuse.org/request/show/1077015 OBS-URL: https://build.opensuse.org/package/show/KDE:Qt:5.15/libqt5-qtbase?expand=0&rev=48 --- big-endian-scroll.patch | 80 +++++++++++++++++++++++++++++++++++++++++ libqt5-qtbase.changes | 2 ++ libqt5-qtbase.spec | 1 + 3 files changed, 83 insertions(+) create mode 100644 big-endian-scroll.patch diff --git a/big-endian-scroll.patch b/big-endian-scroll.patch new file mode 100644 index 0000000..2ac3ca6 --- /dev/null +++ b/big-endian-scroll.patch @@ -0,0 +1,80 @@ +From c0677d7b69ad304727df96351c557d82e43bd69c Mon Sep 17 00:00:00 2001 +From: q66 +Date: Mon, 3 Apr 2023 14:36:51 +0200 +Subject: [PATCH] Fix scrolling on big endian platforms + +The mask is defined as an array of 4*CARD8, but libxcb and Qt treat +it as array of CARD32, but that only works on little endian platforms. + +Qt 6 switched to the array of 4*CARD8 representation, but that change is rather +complex for a backport but fortunately also not needed because 5.x only uses +32 bits. Use a little-endian CARD32 to have the same effect as 4*CARD8. + +The diff is from https://github.com/void-linux/void-packages/pull/13901, +which is assumed to be the original source. Patch header and description +are from Fabian Vogt . + +Fixes: https://bugreports.qt.io/browse/QTBUG-105157 +--- + src/plugins/platforms/xcb/qxcbconnection_xi2.cpp | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp +index 27a2526df..a21e38a69 100644 +--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp ++++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp +@@ -43,6 +43,7 @@ + #include "qxcbwindow.h" + #include "qtouchdevice.h" + #include "QtCore/qmetaobject.h" ++#include "QtCore/qendian.h" + #include + #include + #include +@@ -66,6 +67,7 @@ void QXcbConnection::xi2SelectStateEvents() + xiEventMask.mask = XCB_INPUT_XI_EVENT_MASK_HIERARCHY; + xiEventMask.mask |= XCB_INPUT_XI_EVENT_MASK_DEVICE_CHANGED; + xiEventMask.mask |= XCB_INPUT_XI_EVENT_MASK_PROPERTY; ++ xiEventMask.mask = qToLittleEndian(xiEventMask.mask); + xcb_input_xi_select_events(xcb_connection(), rootWindow(), 1, &xiEventMask.header); + } + +@@ -90,7 +92,7 @@ void QXcbConnection::xi2SelectDeviceEvents(xcb_window_t window) + qt_xcb_input_event_mask_t mask; + mask.header.deviceid = XCB_INPUT_DEVICE_ALL_MASTER; + mask.header.mask_len = 1; +- mask.mask = bitMask; ++ mask.mask = qToLittleEndian(bitMask); + xcb_void_cookie_t cookie = + xcb_input_xi_select_events_checked(xcb_connection(), window, 1, &mask.header); + xcb_generic_error_t *error = xcb_request_check(xcb_connection(), cookie); +@@ -363,7 +365,7 @@ void QXcbConnection::xi2SelectDeviceEventsCompatibility(xcb_window_t window) + qt_xcb_input_event_mask_t xiMask; + xiMask.header.deviceid = XCB_INPUT_DEVICE_ALL_MASTER; + xiMask.header.mask_len = 1; +- xiMask.mask = mask; ++ xiMask.mask = qToLittleEndian(mask); + + xcb_void_cookie_t cookie = + xcb_input_xi_select_events_checked(xcb_connection(), window, 1, &xiMask.header); +@@ -390,7 +392,7 @@ void QXcbConnection::xi2SelectDeviceEventsCompatibility(xcb_window_t window) + tabletDevices.insert(deviceId); + xiEventMask[i].header.deviceid = deviceId; + xiEventMask[i].header.mask_len = 1; +- xiEventMask[i].mask = mask; ++ xiEventMask[i].mask = qToLittleEndian(mask); + } + xcb_input_xi_select_events(xcb_connection(), window, nrTablets, &(xiEventMask.data()->header)); + } +@@ -406,7 +408,7 @@ void QXcbConnection::xi2SelectDeviceEventsCompatibility(xcb_window_t window) + #endif + xiEventMask[i].header.deviceid = scrollingDevice.deviceId; + xiEventMask[i].header.mask_len = 1; +- xiEventMask[i].mask = mask; ++ xiEventMask[i].mask = qToLittleEndian(mask); + i++; + } + xcb_input_xi_select_events(xcb_connection(), window, i, &(xiEventMask.data()->header)); +-- +2.40.0 + diff --git a/libqt5-qtbase.changes b/libqt5-qtbase.changes index b330d37..92b01a1 100644 --- a/libqt5-qtbase.changes +++ b/libqt5-qtbase.changes @@ -6,6 +6,8 @@ Mon Apr 03 10:48:53 UTC 2023 - Fabian Vogt * Add QImage null check when QOpenGLTexture converts - Add patch to fix return key handling in QGroupBox on GNOME (bsc#1209364): * 0001-Revert-QGnomeTheme-Allow-Space-Return-Enter-and-Sele.patch +- Add patch to fix XInput2 events in big-endian X11 clients (bsc#1204883, QTBUG-105157): + * big-endian-scroll.patch ------------------------------------------------------------------- Thu Mar 16 08:04:12 UTC 2023 - Fabian Vogt diff --git a/libqt5-qtbase.spec b/libqt5-qtbase.spec index 0096948..9b6c25d 100644 --- a/libqt5-qtbase.spec +++ b/libqt5-qtbase.spec @@ -48,6 +48,7 @@ Source4: qtlogging.ini Source99: libqt5-qtbase-rpmlintrc # patches 0-999 are openSUSE and/or non-upstream(able) patches # Patch1: 0001-Revert-QGnomeTheme-Allow-Space-Return-Enter-and-Sele.patch +Patch2: big-endian-scroll.patch Patch3: 0001-Revert-QMenu-hide-when-a-QWidgetAction-fires-the-tri.patch # Proposed: https://bugreports.qt.io/browse/QTBUG-88491 Patch4: 0001-Avoid-SIGABRT-on-platform-plugin-initialization-fail.patch