summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/qwindowswindow.cpp
diff options
context:
space:
mode:
authorYuhang Zhao <2546789017@qq.com>2022-02-14 19:40:16 +0800
committerYuhang Zhao <2546789017@qq.com>2022-03-01 12:29:36 +0800
commit7261c811528c4c05e3abbf4e30e8f0ad668921bb (patch)
tree729c2837f3dca1b00c6417863c9c3c8e4ef13987 /src/plugins/platforms/windows/qwindowswindow.cpp
parent770ea68588f954b8465276908bdfeeb6bcf550e8 (diff)
Windows QPA: fix window style correction for context help button
According to Microsoft Docs [1][2], WS_MINIMIZEBOX and WS_MAXIMIZEBOX must be accompanied by the WS_SYSMENU style, and the WS_EX_CONTEXTHELP style is not compatible with WS_MINIMIZEBOX and WS_MAXIMIZEBOX. This patch adds additional checks for these situations. [1] https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles [2] https://docs.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles Pick-to: 6.3 6.2 Change-Id: If32f8b42e25cfc67ffd1e84cc4b061f21a01042a Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/qwindowswindow.cpp')
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 1594a4057a..d28a3ee675 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -853,13 +853,18 @@ void WindowCreationData::fromWindow(const QWindow *w, const Qt::WindowFlags flag
style |= WS_SYSMENU | WS_BORDER; // QTBUG-2027, dialogs without system menu.
exStyle |= WS_EX_DLGMODALFRAME;
}
- if (flags & Qt::WindowMinimizeButtonHint)
+ const bool showMinimizeButton = flags & Qt::WindowMinimizeButtonHint;
+ if (showMinimizeButton)
style |= WS_MINIMIZEBOX;
- if (shouldShowMaximizeButton(w, flags))
+ const bool showMaximizeButton = shouldShowMaximizeButton(w, flags);
+ if (showMaximizeButton)
style |= WS_MAXIMIZEBOX;
+ if (showMinimizeButton || showMaximizeButton)
+ style |= WS_SYSMENU;
if (tool)
exStyle |= WS_EX_TOOLWINDOW;
- if (flags & Qt::WindowContextHelpButtonHint)
+ if ((flags & Qt::WindowContextHelpButtonHint) && !showMinimizeButton
+ && !showMaximizeButton)
exStyle |= WS_EX_CONTEXTHELP;
} else {
exStyle |= WS_EX_TOOLWINDOW;