summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuhang Zhao <2546789017@qq.com>2022-02-07 18:01:15 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-03-03 02:08:57 +0000
commit591ba65f2a520a4cdc837688438f9c0a52b40fa4 (patch)
tree3a0f25c4fa7dadc92fdaaec40e59a3b89c527be6
parent21166bd3c9828d15f0fa94ddeb733aec28ef2fa0 (diff)
Windows QPA: Add convenient overload to query window frame
To be used in a later commit. As a drive-by, return early in the frameOnPrimaryScreen overload to avoid calling GetWindowLong in cases we don't need them. Change-Id: Ia69f4acbbf3e044073f818f357e614d4c6680d21 Reviewed-by: André de la Rocha <andre.rocha@qt.io> (cherry picked from commit 540745e599517a8c821d0bde2246a3407b95a4ee) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp10
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 4717495009..ce2f30478d 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -986,6 +986,8 @@ QMargins QWindowsGeometryHint::frameOnPrimaryScreen(const QWindow *w, DWORD styl
QMargins QWindowsGeometryHint::frameOnPrimaryScreen(const QWindow *w, HWND hwnd)
{
+ if (!w->isTopLevel() || w->flags().testFlag(Qt::FramelessWindowHint))
+ return {};
return frameOnPrimaryScreen(w, DWORD(GetWindowLongPtr(hwnd, GWL_STYLE)),
DWORD(GetWindowLongPtr(hwnd, GWL_EXSTYLE)));
}
@@ -1022,6 +1024,14 @@ QMargins QWindowsGeometryHint::frame(const QWindow *w, HWND hwnd, DWORD style, D
return frame(w, style, exStyle, dpi);
}
+QMargins QWindowsGeometryHint::frame(const QWindow *w, HWND hwnd)
+{
+ if (!w->isTopLevel() || w->flags().testFlag(Qt::FramelessWindowHint))
+ return {};
+ return frame(w, hwnd, DWORD(GetWindowLongPtrW(hwnd, GWL_STYLE)),
+ DWORD(GetWindowLongPtrW(hwnd, GWL_EXSTYLE)));
+}
+
// For newly created windows.
QMargins QWindowsGeometryHint::frame(const QWindow *w, const QRect &geometry,
DWORD style, DWORD exStyle)
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index 915254dbd8..d18e617c7a 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -66,6 +66,7 @@ struct QWindowsGeometryHint
static QMargins frameOnPrimaryScreen(const QWindow *w, HWND hwnd);
static QMargins frame(const QWindow *w, DWORD style, DWORD exStyle, qreal dpi);
static QMargins frame(const QWindow *w, HWND hwnd, DWORD style, DWORD exStyle);
+ static QMargins frame(const QWindow *w, HWND hwnd);
static QMargins frame(const QWindow *w, const QRect &geometry,
DWORD style, DWORD exStyle);
static bool handleCalculateSize(const QMargins &customMargins, const MSG &msg, LRESULT *result);