diff options
Diffstat (limited to 'dev-qt/qtwayland/files')
-rw-r--r-- | dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch b/dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch new file mode 100644 index 000000000000..1e949fc32355 --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch @@ -0,0 +1,68 @@ +From 90995b07d2d4dbd12b7e527a881bf9d6158e277b Mon Sep 17 00:00:00 2001 +From: Ilya Fedin <fedin-ilja2010@ya.ru> +Date: Sun, 19 Mar 2023 10:24:59 +0400 +Subject: [PATCH] Client: Send release button event on pointer leave + +Fixes: QTBUG-97037 +Pick-to: 6.6 6.5 6.2 5.15 +Change-Id: I151239b276ab5aefe166f5615baf43dab428ce0c +Reviewed-by: David Edmundson <davidedmundson@kde.org> +(cherry picked from commit 8235fa65fe033a94e7a44322d3502f25940092ec) +--- + src/client/qwaylandinputdevice.cpp | 9 +++++++-- + src/client/qwaylandinputdevice_p.h | 1 + + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp +index bc05583a..e562c7a7 100644 +--- a/src/client/qwaylandinputdevice.cpp ++++ b/src/client/qwaylandinputdevice.cpp +@@ -688,8 +688,8 @@ public: + + void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surface *surface) + { ++ releaseButtons(); + invalidateFocus(); +- mButtons = Qt::NoButton; + + mParent->mTime = time; + +@@ -804,6 +804,8 @@ void QWaylandInputDevice::Pointer::pointer_button(uint32_t serial, uint32_t time + default: return; // invalid button number (as far as Qt is concerned) + } + ++ mLastButton = qt_button; ++ + if (state) + mButtons |= qt_button; + else +@@ -842,10 +844,13 @@ void QWaylandInputDevice::Pointer::invalidateFocus() + + void QWaylandInputDevice::Pointer::releaseButtons() + { ++ if (mButtons == Qt::NoButton) ++ return; ++ + mButtons = Qt::NoButton; + + if (auto *window = focusWindow()) { +- ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers()); ++ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mLastButton, mParent->modifiers()); + window->handleMouse(mParent, e); + } + } +diff --git a/src/client/qwaylandinputdevice_p.h b/src/client/qwaylandinputdevice_p.h +index 5795f138..bafe3db2 100644 +--- a/src/client/qwaylandinputdevice_p.h ++++ b/src/client/qwaylandinputdevice_p.h +@@ -346,6 +346,7 @@ public: + QPointF mSurfacePos; + QPointF mGlobalPos; + Qt::MouseButtons mButtons = Qt::NoButton; ++ Qt::MouseButton mLastButton = Qt::NoButton; + #if QT_CONFIG(cursor) + wl_buffer *mCursorBuffer = nullptr; + Qt::CursorShape mCursorShape = Qt::BitmapCursor; +-- +2.41.0 + |