summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/qwindowsmousehandler.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-09-05 13:39:25 +0200
committerQt by Nokia <qt-info@nokia.com>2012-09-10 14:09:45 +0200
commit1ea00124f77df1753b3d881810bbed181bbc6fc6 (patch)
tree65e487e74ad0023dc7d9ec89a97329e467d69ded /src/plugins/platforms/windows/qwindowsmousehandler.cpp
parentb625ff4c7b68505b6d299d688734c9c1d448cb80 (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.cpp19
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)) ;