From 4e4ffd3cc9c4b27550642c6233ed8a3177065bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Jen=C3=9Fen?= Date: Fri, 4 Apr 2025 17:47:44 +0200 Subject: [PATCH] QmlDesigner: fix windowHandle() is nullptr warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ib5ec37ebce4899cc0af2be44a58928d43ce4c757 Reviewed-by: Henning Gründl --- .../qmldesignerbase/utils/windowmanager.cpp | 31 ++++++++++++++++--- .../qmldesignerbase/utils/windowmanager.h | 3 +- 2 files changed, 28 insertions(+), 6 deletions(-) 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