Windows QPA: Fix QWindowsWindowFunctions::SetHasBorderInFullScreen() to work in all cases
- Directly apply the flag in case the platform window exists and is in full screen. - Store as a dynamic property in case the platform window is not created yet. Amends 69839e55c13000ee9bf8d8e9d74b70096a92ae51. Task-number: QTBUG-41309 Task-number: QTBUG-66557 Change-Id: I162baecfae4d07a5d5b59c5401bdb605faa7ab68 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
parent
910cc08f6b
commit
43918feb4a
@ -1077,6 +1077,7 @@ QWindowCreationContext::QWindowCreationContext(const QWindow *w,
|
||||
*/
|
||||
|
||||
const char *QWindowsWindow::embeddedNativeParentHandleProperty = "_q_embedded_native_parent_handle";
|
||||
const char *QWindowsWindow::hasBorderInFullScreenProperty = "_q_has_border_in_fullscreen";
|
||||
|
||||
QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data) :
|
||||
QWindowsBaseWindow(aWindow),
|
||||
@ -1115,6 +1116,8 @@ QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data)
|
||||
|
||||
if (aWindow->isTopLevel())
|
||||
setWindowIcon(aWindow->icon());
|
||||
if (aWindow->property(hasBorderInFullScreenProperty).toBool())
|
||||
setFlag(HasBorderInFullScreen);
|
||||
clearFlag(WithinCreate);
|
||||
}
|
||||
|
||||
@ -2662,15 +2665,26 @@ void QWindowsWindow::setHasBorderInFullScreenStatic(QWindow *window, bool border
|
||||
if (QPlatformWindow *handle = window->handle())
|
||||
static_cast<QWindowsWindow *>(handle)->setHasBorderInFullScreen(border);
|
||||
else
|
||||
qWarning("%s invoked without window handle; call has no effect.", Q_FUNC_INFO);
|
||||
window->setProperty(hasBorderInFullScreenProperty, QVariant(border));
|
||||
}
|
||||
|
||||
void QWindowsWindow::setHasBorderInFullScreen(bool border)
|
||||
{
|
||||
if (testFlag(HasBorderInFullScreen) == border)
|
||||
return;
|
||||
if (border)
|
||||
setFlag(HasBorderInFullScreen);
|
||||
else
|
||||
clearFlag(HasBorderInFullScreen);
|
||||
// Directly apply the flag in case we are fullscreen.
|
||||
if (m_windowState == Qt::WindowFullScreen) {
|
||||
LONG_PTR style = GetWindowLongPtr(handle(), GWL_STYLE);
|
||||
if (border)
|
||||
style |= WS_BORDER;
|
||||
else
|
||||
style &= ~WS_BORDER;
|
||||
SetWindowLongPtr(handle(), GWL_STYLE, style);
|
||||
}
|
||||
}
|
||||
|
||||
QString QWindowsWindow::formatWindowTitle(const QString &title)
|
||||
|
@ -340,6 +340,7 @@ public:
|
||||
static QString formatWindowTitle(const QString &title);
|
||||
|
||||
static const char *embeddedNativeParentHandleProperty;
|
||||
static const char *hasBorderInFullScreenProperty;
|
||||
|
||||
private:
|
||||
inline void show_sys() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user