From 9a11b73c3c3892fb2e1fcdb00e41a3cbba7d626f Mon Sep 17 00:00:00 2001 From: Max Sandholm Date: Wed, 27 Sep 2017 22:04:23 +0300 Subject: [PATCH] Continue implementing room joining and fix an occasional segfault --- include/RoomList.h | 3 +++ src/ChatPage.cc | 2 ++ src/RoomList.cc | 52 ++++++++++++++++++++++++++++++---------------- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/include/RoomList.h b/include/RoomList.h index 3ab60bf3..6af0d1e8 100644 --- a/include/RoomList.h +++ b/include/RoomList.h @@ -44,6 +44,9 @@ public: void clear(); + void addRoom(const QSharedPointer &settings, + const RoomState &state, + const QString &room_id); void removeRoom(const QString &room_id, bool reset); signals: diff --git a/src/ChatPage.cc b/src/ChatPage.cc index 0e2c7908..f83b1011 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -567,6 +567,8 @@ ChatPage::joinedRoom(const QString &room_id) settingsManager_.insert(room_id, QSharedPointer(new RoomSettings(room_id))); + room_list_->addRoom(settingsManager_[room_id], state_manager_[room_id], room_id); + this->changeTopRoomInfo(room_id); } diff --git a/src/RoomList.cc b/src/RoomList.cc index 6d3fd8ab..a776067a 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc @@ -59,28 +59,24 @@ RoomList::RoomList(QSharedPointer client, QWidget *parent) joinRoomButton_ = new QPushButton("Join room", this); topLayout_->addWidget(joinRoomButton_); - connect(joinRoomButton_, &QPushButton::clicked, this, [=]() { - if (joinRoomDialog_ == nullptr) { - joinRoomDialog_ = new JoinRoomDialog(this); - connect(joinRoomDialog_, - SIGNAL(closing(bool, QString)), - this, - SLOT(closeJoinRoomDialog(bool, QString))); - } - - if (joinRoomModal_ == nullptr) { - joinRoomModal_ = new OverlayModal(MainWindow::instance(), joinRoomDialog_); - joinRoomModal_->setDuration(100); - joinRoomModal_->setColor(QColor(55, 55, 55, 170)); - } - - joinRoomModal_->fadeIn(); - }); - connect(client_.data(), SIGNAL(roomAvatarRetrieved(const QString &, const QPixmap &)), this, SLOT(updateRoomAvatar(const QString &, const QPixmap &))); + + connect(joinRoomButton_, &QPushButton::clicked, this, [=]() { + joinRoomDialog_ = new JoinRoomDialog(this); + connect(joinRoomDialog_, + SIGNAL(closing(bool, QString)), + this, + SLOT(closeJoinRoomDialog(bool, QString))); + + joinRoomModal_ = new OverlayModal(MainWindow::instance(), joinRoomDialog_); + joinRoomModal_->setDuration(100); + joinRoomModal_->setColor(QColor(55, 55, 55, 170)); + + joinRoomModal_->fadeIn(); + }); } RoomList::~RoomList() {} @@ -91,6 +87,26 @@ RoomList::clear() rooms_.clear(); } +void +RoomList::addRoom(const QSharedPointer &settings, + const RoomState &state, + const QString &room_id) +{ + RoomInfoListItem *room_item = + new RoomInfoListItem(settings, state, room_id, scrollArea_); + connect( + room_item, &RoomInfoListItem::clicked, + this, &RoomList::highlightSelectedRoom); + connect( + room_item, &RoomInfoListItem::leaveRoom, + client_.data(), &MatrixClient::leaveRoom); + + rooms_.insert(room_id, QSharedPointer(room_item)); + + int pos = contentsLayout_->count() - 1; + contentsLayout_->insertWidget(pos, room_item); +} + void RoomList::removeRoom(const QString &room_id, bool reset) {