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;