From 4465b3a18317c4430af89ef72339d0082cd12159 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 4 Apr 2025 13:41:15 +0300 Subject: [PATCH] QmlDesigner: Hide root window when rendering using qml-renderer puppet Window needs to have visible set to false as initial property or the window will briefly flash on the screen. Also suppress mac task bar icon. Fixes: QDS-15008 Change-Id: I2ee58b205bbf14ef8928a8adc6052fffa140e6b5 Reviewed-by: Thomas Hartmann --- .../qmlpuppet/qmlpuppet/renderer/qmlrenderer.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/tools/qmlpuppet/qmlpuppet/renderer/qmlrenderer.cpp b/src/tools/qmlpuppet/qmlpuppet/renderer/qmlrenderer.cpp index f445a2804b8..03cb6315725 100644 --- a/src/tools/qmlpuppet/qmlpuppet/renderer/qmlrenderer.cpp +++ b/src/tools/qmlpuppet/qmlpuppet/renderer/qmlrenderer.cpp @@ -22,6 +22,9 @@ constexpr int DEFAULT_MAX_DIM = 1024; void QmlRenderer::initCoreApp() { +#ifdef Q_OS_MACOS + qputenv("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM", "true"); +#endif #if defined QT_WIDGETS_LIB createCoreApp(); #else @@ -144,9 +147,14 @@ bool QmlRenderer::setupRenderer() return false; } - QObject *renderObj = component.create(); + // Window components will flash the window briefly if we don't initialize visible to false + QVariantMap initialProps; + initialProps["visible"] = false; + QObject *renderObj = component.createWithInitialProperties(initialProps); if (renderObj) { + if (!qobject_cast(renderObj)) + renderObj->setProperty("visible", true); #ifdef QUICK3D_MODULE QQuickItem *contentItem3D = nullptr; renderObj->setParent(m_window->contentItem()); @@ -195,11 +203,6 @@ bool QmlRenderer::setupRenderer() // Hack to render Window items: reparent window content to m_window->contentItem() setRenderSize(renderWindow->size()); m_containerItem = m_window->contentItem(); - // Suppress the original window. - // Offscreen position ensures we don't get even brief flash of it. - renderWindow->setVisible(false); - renderWindow->resize(2, 2); - renderWindow->setPosition(-10000, -10000); const QList childItems = renderWindow->contentItem()->childItems(); for (QQuickItem *item : childItems) { item->setParent(m_window->contentItem());