diff options
author | Liang Qi <liang.qi@qt.io> | 2021-05-26 10:32:04 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2021-06-16 15:53:22 +0200 |
commit | 8e506fdd299d2fa18172209bea316f484e234e19 (patch) | |
tree | d66211c59b20fbd26f7f1d65f8ccacd122c72a03 /src/plugins/platforms/xcb/qxcbconnection.cpp | |
parent | 3ca5b46e5da04672ed0eaeaa6a5b30673705e4c9 (diff) |
xcb: fix QWindow::startSystemMove()/Resize() triggered by mouse
We can't get mouse release event from master pointers after
QXcbWindow::doStartSystemMoveResize() which calls xcb_ungrab_pointer(),
it looks like most X11 WMs work as that.
So we try to get mouse release event from slave pointers.
Based on https://specifications.freedesktop.org/wm-spec/1.4/ar01s04.html
, we need to send _NET_WM_MOVERESIZE_CANCEL when we get mouse release
event.
Task-number: QTBUG-91077
Change-Id: I01e74a01c87b381ee7cd6f20d51a1fa61c0e98fc
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbconnection.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbconnection.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index b19b070a4d..58a4a8ea04 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -86,6 +86,7 @@ Q_LOGGING_CATEGORY(lcQpaXDnd, "qt.qpa.xdnd") QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGrabServer, xcb_visualid_t defaultVisualId, const char *displayName) : QXcbBasicConnection(displayName) + , m_duringSystemMoveResize(false) , m_canGrabServer(canGrabServer) , m_defaultVisualId(defaultVisualId) , m_nativeInterface(nativeInterface) @@ -592,6 +593,8 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event) } case XCB_BUTTON_RELEASE: { auto ev = reinterpret_cast<xcb_button_release_event_t *>(event); + if (m_duringSystemMoveResize && ev->root != XCB_NONE) + abortSystemMoveResize(ev->root); m_keyboard->updateXKBStateFromCore(ev->state); m_buttonState = (m_buttonState & ~0x7) | translateMouseButtons(ev->state); setButtonState(translateMouseButton(ev->detail), false); |