From 40ddc38a7b933190dec607360de8cbdc2528a68a Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Thu, 2 Feb 2023 09:02:01 +0100 Subject: [PATCH] Support WindowTitleHint and FramelessWindowHint in QWasmWindow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WindowTitleHint now correctly enables/disables the window title, and FramelessWindowHint correctly enables/disables the window frame. Change-Id: I6f98f0a53af828606748308c6b5bd5d492cef9d2 Reviewed-by: Aleksandr Reviakin Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/wasm/qwasmcssstyle.cpp | 12 +++++++++--- src/plugins/platforms/wasm/qwasmwindow.cpp | 9 +++++---- src/plugins/platforms/wasm/qwasmwindow.h | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/plugins/platforms/wasm/qwasmcssstyle.cpp b/src/plugins/platforms/wasm/qwasmcssstyle.cpp index 0002c05d39..3efe450495 100644 --- a/src/plugins/platforms/wasm/qwasmcssstyle.cpp +++ b/src/plugins/platforms/wasm/qwasmcssstyle.cpp @@ -39,7 +39,7 @@ const char *Style = R"css( box-shadow: rgb(0 0 0 / 20%) 0px 10px 16px 0px, rgb(0 0 0 / 19%) 0px 6px 20px 0px; } -.qt-window.has-title-bar { +.qt-window.has-frame { border: var(--border-width) solid lightgray; caret-color: transparent; } @@ -49,7 +49,7 @@ const char *Style = R"css( display: none; } -.qt-window.has-title-bar:not(.maximized) .resize-outline { +.qt-window.has-frame:not(.maximized) .resize-outline { display: block; } @@ -125,17 +125,23 @@ const char *Style = R"css( padding-bottom: 4px; } -.qt-window.has-title-bar .title-bar { +.qt-window.has-frame .title-bar { display: flex; } .title-bar .window-name { + display: none; font-family: 'Lucida Grande'; white-space: nowrap; user-select: none; overflow: hidden; } + +.qt-window.has-title .title-bar .window-name { + display: block; +} + .title-bar .spacer { flex-grow: 1 } diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index 1fff58c403..e0156584e5 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -358,8 +358,9 @@ void QWasmWindow::onActivationChanged(bool active) void QWasmWindow::setWindowFlags(Qt::WindowFlags flags) { m_flags = flags; - dom::syncCSSClassWith(m_qtWindow, "has-title-bar", hasTitleBar()); + dom::syncCSSClassWith(m_qtWindow, "has-frame", hasFrame()); dom::syncCSSClassWith(m_qtWindow, "has-shadow", !flags.testFlag(Qt::NoDropShadowWindowHint)); + dom::syncCSSClassWith(m_qtWindow, "has-title", flags.testFlag(Qt::WindowTitleHint)); dom::syncCSSClassWith(m_qtWindow, "transparent-for-input", flags.testFlag(Qt::WindowTransparentForInput)); @@ -421,7 +422,7 @@ void QWasmWindow::applyWindowState() else newGeom = normalGeometry(); - dom::syncCSSClassWith(m_qtWindow, "has-title-bar", hasTitleBar()); + dom::syncCSSClassWith(m_qtWindow, "has-frame", hasFrame()); dom::syncCSSClassWith(m_qtWindow, "maximized", isMaximized); m_nonClientArea->titleBar()->setRestoreVisible(isMaximized); @@ -518,9 +519,9 @@ void QWasmWindow::requestUpdate() m_compositor->requestUpdateWindow(this, QWasmCompositor::UpdateRequestDelivery); } -bool QWasmWindow::hasTitleBar() const +bool QWasmWindow::hasFrame() const { - return !m_state.testFlag(Qt::WindowFullScreen) && m_flags.testFlag(Qt::WindowTitleHint) + return !m_state.testFlag(Qt::WindowFullScreen) && !m_flags.testFlag(Qt::FramelessWindowHint) && !windowIsPopupType(m_flags); } diff --git a/src/plugins/platforms/wasm/qwasmwindow.h b/src/plugins/platforms/wasm/qwasmwindow.h index 6c1c4a5adb..7daa74184f 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.h +++ b/src/plugins/platforms/wasm/qwasmwindow.h @@ -91,7 +91,7 @@ private: friend class QWasmScreen; void invalidate(); - bool hasTitleBar() const; + bool hasFrame() const; bool hasMaximizeButton() const; void applyWindowState();