diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-09-05 13:39:25 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-09-10 14:09:45 +0200 |
commit | 1ea00124f77df1753b3d881810bbed181bbc6fc6 (patch) | |
tree | 65e487e74ad0023dc7d9ec89a97329e467d69ded /src/plugins/platforms/windows/qwindowsmousehandler.cpp | |
parent | b625ff4c7b68505b6d299d688734c9c1d448cb80 (diff) |
Windows: Implement automatic mouse capture in QPA.
Qt expects the mouse to be captured on any button press
until release.
Remove flags to store capture, use WinAPI GetCapture() instead.
Remove setMouseGrabEnabled_sys(), streamline code.
Replacement for the reverted change
6b5bbc531b30d8ece25425e39843c6ae1af1d045 for QTBUG-25977.
Task-number: QTBUG-27132
Task-number: QTBUG-27039
Task-number: QTBUG-25977
Task-number: QTBUG-26962
Change-Id: If86428eabfadcafd16da10f134a419f833185272
Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsmousehandler.cpp')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsmousehandler.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowsmousehandler.cpp b/src/plugins/platforms/windows/qwindowsmousehandler.cpp index f1e3d70d96..50980100cb 100644 --- a/src/plugins/platforms/windows/qwindowsmousehandler.cpp +++ b/src/plugins/platforms/windows/qwindowsmousehandler.cpp @@ -175,9 +175,26 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd, return true; } compressMouseMove(&msg); + QWindowsWindow *platformWindow = static_cast<QWindowsWindow *>(window->handle()); + // Qt expects the platform plugin to capture the mouse on + // any button press until release. + if (!platformWindow->hasMouseCapture() + && (msg.message == WM_LBUTTONDOWN || msg.message == WM_MBUTTONDOWN + || msg.message == WM_RBUTTONDOWN)) { + platformWindow->setMouseGrabEnabled(true); + platformWindow->setFlag(QWindowsWindow::AutoMouseCapture); + if (QWindowsContext::verboseEvents) + qDebug() << "Automatic mouse capture " << window; + } else if (platformWindow->hasMouseCapture() + && platformWindow->testFlag(QWindowsWindow::AutoMouseCapture) + && (msg.message == WM_LBUTTONUP || msg.message == WM_MBUTTONUP + || msg.message == WM_RBUTTONUP)) { + platformWindow->setMouseGrabEnabled(false); + if (QWindowsContext::verboseEvents) + qDebug() << "Releasing automatic mouse capture " << window; + } // Eat mouse move after size grip drag. if (msg.message == WM_MOUSEMOVE) { - QWindowsWindow *platformWindow = static_cast<QWindowsWindow *>(window->handle()); if (platformWindow->testFlag(QWindowsWindow::SizeGripOperation)) { MSG mouseMsg; while (PeekMessage(&mouseMsg, platformWindow->handle(), WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE)) ; |