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 <thomas.hartmann@qt.io>
This commit is contained in:
Miikka Heikkinen
2025-04-04 13:41:15 +03:00
parent 92e969361a
commit 4465b3a183

View File

@@ -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<QApplication>();
#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<QWindow *>(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<QQuickItem *> childItems = renderWindow->contentItem()->childItems();
for (QQuickItem *item : childItems) {
item->setParent(m_window->contentItem());