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>bb10
parent
770ea68588
commit
7261c81152
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue