diff --git a/src/plugins/qmldesignerbase/utils/windowmanager.cpp b/src/plugins/qmldesignerbase/utils/windowmanager.cpp index a254da69ab0..5b7ed2131fc 100644 --- a/src/plugins/qmldesignerbase/utils/windowmanager.cpp +++ b/src/plugins/qmldesignerbase/utils/windowmanager.cpp @@ -19,11 +19,32 @@ WindowManager::WindowManager() connect(qGuiApp, &QGuiApplication::focusWindowChanged, this, &WindowManager::focusWindowChanged); connect( Core::ICore::instance(), &Core::ICore::coreAboutToClose, this, &WindowManager::aboutToQuit); - connect( - Core::ICore::instance()->mainWindow()->windowHandle(), - &QWindow::visibleChanged, - this, - &WindowManager::mainWindowVisibleChanged); + + if (!connectMainWindowHandle()) + Core::ICore::instance()->mainWindow()->installEventFilter(this); +} + +bool WindowManager::connectMainWindowHandle() +{ + if (QWindow *windowHandle = Core::ICore::instance()->mainWindow()->windowHandle()) { + QMetaObject::Connection success = connect( + windowHandle, + &QWindow::visibleChanged, + this, + &WindowManager::mainWindowVisibleChanged, + Qt::UniqueConnection); + return success; + } + return false; +} + +bool WindowManager::eventFilter(QObject *watched, QEvent *event) +{ + if (watched == Core::ICore::instance()->mainWindow() && event->type() == QEvent::WinIdChange) { + connectMainWindowHandle(); + Core::ICore::instance()->mainWindow()->removeEventFilter(this); + } + return QObject::eventFilter(watched, event); } void WindowManager::registerDeclarativeType() diff --git a/src/plugins/qmldesignerbase/utils/windowmanager.h b/src/plugins/qmldesignerbase/utils/windowmanager.h index 1e74c721bc6..d329b53dc98 100644 --- a/src/plugins/qmldesignerbase/utils/windowmanager.h +++ b/src/plugins/qmldesignerbase/utils/windowmanager.h @@ -35,6 +35,7 @@ signals: private: WindowManager(); + bool connectMainWindowHandle(); + bool eventFilter(QObject *watched, QEvent *event) override; }; - } // namespace QmlDesigner