diff --git a/src/timeline/messagedelegate.cpp b/src/timeline/messagedelegate.cpp index c057fb7e2..676e3f5fb 100644 --- a/src/timeline/messagedelegate.cpp +++ b/src/timeline/messagedelegate.cpp @@ -52,6 +52,9 @@ MessageDelegateBase::~MessageDelegateBase() { for (const auto &incubator : m_activeIncubators) { incubator->clear(); + if (const auto object = qobject_cast(incubator->object())) { + cleanupItem(object); + } delete incubator; } } diff --git a/src/timeline/messagedelegate.h b/src/timeline/messagedelegate.h index 12a9759d7..c7c7945f6 100644 --- a/src/timeline/messagedelegate.h +++ b/src/timeline/messagedelegate.h @@ -235,12 +235,20 @@ private: void hoverLeaveEvent(QHoverEvent *event) override; std::function m_objectInitialCallback = [this](QQuickItem *object) { + if (!object) { + return; + } + object->setParentItem(this); connect(object, &QQuickItem::implicitWidthChanged, this, &MessageDelegateBase::markAsDirty); connect(object, &QQuickItem::implicitHeightChanged, this, &MessageDelegateBase::markAsDirty); connect(object, &QQuickItem::visibleChanged, this, &MessageDelegateBase::markAsDirty); }; std::function m_errorCallback = [this](MessageObjectIncubator *incubator) { + if (!incubator) { + return; + } + if (incubator->object()) { incubator->object()->deleteLater(); }