diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-06-12 10:47:42 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-14 03:05:41 +0200 |
commit | 0137f092af12110c427f05358f7b207ea95ea341 (patch) | |
tree | f314b8d0f744c4822af8f0d8890ecd9983a284d7 /src/plugins/platforms/windows | |
parent | 1539e8e310ee3da8ae44a4b5b28d0f72b1345eb4 (diff) |
Introduce QPA API for size grip handling.
- Introduce API to do size grip handling (mouse press
and move).
- Move Windows code to Windows plugin.
- Move X11 code to XCB plugin and activate it.
Change-Id: I2f61d6ddc1fa07447e668554d41ecc820efca23f
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src/plugins/platforms/windows')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsmousehandler.cpp | 10 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowswindow.cpp | 26 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowswindow.h | 5 |
3 files changed, 40 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowsmousehandler.cpp b/src/plugins/platforms/windows/qwindowsmousehandler.cpp index 2a98b7f404..48d43857e9 100644 --- a/src/plugins/platforms/windows/qwindowsmousehandler.cpp +++ b/src/plugins/platforms/windows/qwindowsmousehandler.cpp @@ -151,6 +151,16 @@ bool QWindowsMouseHandler::translateMouseEvent(QWindow *window, HWND hwnd, return true; } compressMouseMove(&msg); + // 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)) ; + platformWindow->clearFlag(QWindowsWindow::SizeGripOperation); + return true; + } + } const QPoint client(GET_X_LPARAM(msg.lParam), GET_Y_LPARAM(msg.lParam)); // Enter new window: track to generate leave event. if (m_windowUnderMouse != window) { diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index b96d61561c..e49b215422 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1402,6 +1402,32 @@ void QWindowsWindow::setMouseGrabEnabled_sys(bool grab) } } +static inline DWORD cornerToWinOrientation(Qt::Corner corner) +{ + switch (corner) { + case Qt::TopLeftCorner: + return 0xf004; // SZ_SIZETOPLEFT; + case Qt::TopRightCorner: + return 0xf005; // SZ_SIZETOPRIGHT + case Qt::BottomLeftCorner: + return 0xf007; // SZ_SIZEBOTTOMLEFT + case Qt::BottomRightCorner: + return 0xf008; // SZ_SIZEBOTTOMRIGHT + } + return 0; +} + +bool QWindowsWindow::startSystemResize(const QPoint &, Qt::Corner corner) +{ + if (!GetSystemMenu(m_data.hwnd, FALSE)) + return false; + + ReleaseCapture(); + PostMessage(m_data.hwnd, WM_SYSCOMMAND, cornerToWinOrientation(corner), 0); + setFlag(SizeGripOperation); + return true; +} + #ifndef Q_OS_WINCE // maybe available on some SDKs revisit WM_GETMINMAXINFO void QWindowsWindow::getSizeHints(MINMAXINFO *mmi) const { diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h index ee45be18cd..2fd401029e 100644 --- a/src/plugins/platforms/windows/qwindowswindow.h +++ b/src/plugins/platforms/windows/qwindowswindow.h @@ -122,7 +122,8 @@ public: OpenGLSurface = 0x10, OpenGLDoubleBuffered = 0x20, OpenGlPixelFormatInitialized = 0x40, - BlockedByModal = 0x80 + BlockedByModal = 0x80, + SizeGripOperation = 0x100 }; struct WindowData @@ -173,6 +174,8 @@ public: virtual bool setKeyboardGrabEnabled(bool grab); virtual bool setMouseGrabEnabled(bool grab); + virtual bool startSystemResize(const QPoint &pos, Qt::Corner corner); + Qt::WindowState windowState_sys() const; Qt::WindowStates windowStates_sys() const; |