diff --git a/src/RoomList.cc b/src/RoomList.cc
index 0274cefe..30be6cf6 100644
--- a/src/RoomList.cc
+++ b/src/RoomList.cc
@@ -47,7 +47,7 @@ RoomList::RoomList(QSharedPointer<MatrixClient> client,
scrollArea_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea_->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
scrollArea_->setWidgetResizable(true);
- scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignLeft | Qt::AlignVCenter);
+ scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignTop | Qt::AlignVCenter);
scrollAreaContents_ = new QWidget(this);
@@ -181,6 +181,8 @@ RoomList::setInitialRooms(const QMap<QString, QSharedPointer<RoomSettings>> &set
if (rooms_.isEmpty())
return;
+ setFilterRooms(filterRooms_);
+
auto first_room = rooms_.first();
first_room->setPressedState(true);
@@ -271,6 +273,8 @@ RoomList::highlightSelectedRoom(const QString &room_id)
qobject_cast<QWidget *>(it.value().data()));
}
}
+
+ selectedRoom_ = room_id;
}
void
@@ -374,6 +378,46 @@ RoomList::closeLeaveRoomDialog(bool leaving, const QString &room_id)
}
void
+RoomList::setFilterRooms(bool filterRooms)
+{
+ filterRooms_ = filterRooms;
+
+ for (int i = 0; i < contentsLayout_->count(); i++) {
+ // If roomFilter_ contains the room for the current RoomInfoListItem,
+ // show the list item, otherwise hide it
+ RoomInfoListItem *listitem =
+ (RoomInfoListItem *)contentsLayout_->itemAt(i)->widget();
+
+ if (listitem != nullptr) {
+ if (!filterRooms) {
+ contentsLayout_->itemAt(i)->widget()->show();
+ } else if (roomFilter_.contains(listitem->roomId())) {
+ contentsLayout_->itemAt(i)->widget()->show();
+ } else {
+ contentsLayout_->itemAt(i)->widget()->hide();
+ }
+ }
+ }
+
+ if (filterRooms_ && !roomFilter_.contains(selectedRoom_)) {
+ RoomInfoListItem *firstVisibleRoom = nullptr;
+ for (int i = 0; i < contentsLayout_->count(); i++) {
+ QWidget *item = contentsLayout_->itemAt(i)->widget();
+ if (item != nullptr && item->isVisible()) {
+ firstVisibleRoom = (RoomInfoListItem *)item;
+ break;
+ }
+ }
+ if (firstVisibleRoom != nullptr) {
+ highlightSelectedRoom(firstVisibleRoom->roomId());
+ }
+ } else {
+ scrollArea_->ensureWidgetVisible(
+ qobject_cast<QWidget *>(rooms_.value(selectedRoom_).data()));
+ }
+}
+
+void
RoomList::paintEvent(QPaintEvent *)
{
QStyleOption opt;
@@ -394,6 +438,13 @@ RoomList::syncInvites(const std::map<std::string, mtx::responses::InvitedRoom> &
}
void
+RoomList::setRoomFilter(QList<QString> room_ids)
+{
+ roomFilter_ = room_ids;
+ setFilterRooms(true);
+}
+
+void
RoomList::addInvitedRoom(const QString &room_id, const mtx::responses::InvitedRoom &room)
{
auto room_item = new RoomInfoListItem(room_id, room, scrollArea_);
|