From 75f069cb7d63741518f24d91fd7ac050a7e57507 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Thu, 28 Mar 2024 16:40:30 +0100 Subject: [PATCH] SpaceChildrenModel: Handle space being deleted --- src/models/spacechildrenmodel.cpp | 14 +++++++++++--- src/models/spacechildrenmodel.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/models/spacechildrenmodel.cpp b/src/models/spacechildrenmodel.cpp index 8a7933868..89227d70b 100644 --- a/src/models/spacechildrenmodel.cpp +++ b/src/models/spacechildrenmodel.cpp @@ -12,8 +12,8 @@ SpaceChildrenModel::SpaceChildrenModel(QObject *parent) : QAbstractItemModel(parent) + , m_rootItem(new SpaceTreeItem(nullptr)) { - m_rootItem = new SpaceTreeItem(nullptr); } SpaceChildrenModel::~SpaceChildrenModel() @@ -40,6 +40,12 @@ void SpaceChildrenModel::setSpace(NeoChatRoom *space) m_space = space; Q_EMIT spaceChanged(); + refreshModel(); + + if (!m_space) { + return; + } + auto connection = m_space->connection(); connect(connection, &Quotient::Connection::loadedRoomState, this, [this](Quotient::Room *room) { if (m_pendingChildren.contains(room->name())) { @@ -50,8 +56,6 @@ void SpaceChildrenModel::setSpace(NeoChatRoom *space) connect(m_space, &Quotient::Room::changed, this, [this]() { refreshModel(); }); - - refreshModel(); } bool SpaceChildrenModel::loading() const @@ -69,6 +73,10 @@ void SpaceChildrenModel::refreshModel() m_currentJobs.clear(); if (m_space == nullptr) { + beginResetModel(); + delete m_rootItem; + m_rootItem = nullptr; + endResetModel(); return; } diff --git a/src/models/spacechildrenmodel.h b/src/models/spacechildrenmodel.h index 7b7f2b858..7c279d75b 100644 --- a/src/models/spacechildrenmodel.h +++ b/src/models/spacechildrenmodel.h @@ -131,7 +131,7 @@ Q_SIGNALS: void loadingChanged(); private: - NeoChatRoom *m_space = nullptr; + QPointer m_space; SpaceTreeItem *m_rootItem; bool m_loading = false;