From e67847d43ff9edb7d6aced30b33811948f57a245 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Wed, 18 Oct 2023 14:39:58 +0200 Subject: [PATCH] Use itemChange instead of a connect to windowChanged with itemChange watching SceneChange is more efficient than connecting to the windowChanged signal, also this won't arrive during teardown, aoiding the "destructor already ran" assert. --- src/scripting/windowthumbnailitem.cpp | 10 ++++++++-- src/scripting/windowthumbnailitem.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/scripting/windowthumbnailitem.cpp b/src/scripting/windowthumbnailitem.cpp index 08264cc748..394e6fd28c 100644 --- a/src/scripting/windowthumbnailitem.cpp +++ b/src/scripting/windowthumbnailitem.cpp @@ -106,8 +106,6 @@ WindowThumbnailItem::WindowThumbnailItem(QQuickItem *parent) this, &WindowThumbnailItem::destroyOffscreenTexture); connect(Compositor::self(), &Compositor::compositingToggled, this, &WindowThumbnailItem::updateFrameRenderingConnection); - connect(this, &QQuickItem::windowChanged, - this, &WindowThumbnailItem::updateFrameRenderingConnection); } WindowThumbnailItem::~WindowThumbnailItem() @@ -133,6 +131,14 @@ void WindowThumbnailItem::releaseResources() } } +void WindowThumbnailItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) +{ + if (change == QQuickItem::ItemSceneChange) { + updateFrameRenderingConnection(); + } + QQuickItem::itemChange(change, value); +} + bool WindowThumbnailItem::isTextureProvider() const { return true; diff --git a/src/scripting/windowthumbnailitem.h b/src/scripting/windowthumbnailitem.h index 2af939e12f..11bb12718e 100644 --- a/src/scripting/windowthumbnailitem.h +++ b/src/scripting/windowthumbnailitem.h @@ -45,6 +45,7 @@ public: protected: void releaseResources() override; + void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) override; Q_SIGNALS: void wIdChanged();