diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 5bbfa351..db80ecd5 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -111,7 +111,11 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
connect(sidebarActions_, &SideBarActions::joinRoom, this, &ChatPage::joinRoom);
connect(sidebarActions_, &SideBarActions::createRoom, this, &ChatPage::createRoom);
- user_info_widget_ = new UserInfoWidget(sideBar_);
+ user_info_widget_ = new UserInfoWidget(sideBar_);
+ connect(user_info_widget_, &UserInfoWidget::openGlobalUserProfile, this, [this]() {
+ view_manager_->activeTimeline()->openUserProfile(utils::localUser(), true);
+ });
+
user_mentions_popup_ = new popups::UserMentions();
room_list_ = new RoomList(userSettings, sideBar_);
connect(room_list_, &RoomList::joinRoom, this, &ChatPage::joinRoom);
@@ -267,10 +271,27 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
[this](const QString &groupId) {
current_community_ = groupId;
- if (groupId == "world")
- room_list_->removeFilter();
- else
- room_list_->applyFilter(communitiesList_->roomList(groupId));
+ if (groupId == "world") {
+ auto hidden = communitiesList_->hiddenTagsAndCommunities();
+ std::set<QString> roomsToHide = communitiesList_->roomList(groupId);
+ for (const auto &hiddenTag : hidden) {
+ auto temp = communitiesList_->roomList(hiddenTag);
+ roomsToHide.insert(temp.begin(), temp.end());
+ }
+
+ room_list_->removeFilter(roomsToHide);
+ } else {
+ auto hidden = communitiesList_->hiddenTagsAndCommunities();
+ hidden.erase(current_community_);
+
+ auto roomsToShow = communitiesList_->roomList(groupId);
+ for (const auto &hiddenTag : hidden) {
+ for (const auto &r : communitiesList_->roomList(hiddenTag))
+ roomsToShow.erase(r);
+ }
+
+ room_list_->applyFilter(roomsToShow);
+ }
});
connect(¬ificationsManager,
@@ -1299,8 +1320,10 @@ ChatPage::startChat(QString userid)
mtx::requests::CreateRoom req;
req.preset = mtx::requests::Preset::PrivateChat;
req.visibility = mtx::common::RoomVisibility::Private;
- if (utils::localUser() != userid)
- req.invite = {userid.toStdString()};
+ if (utils::localUser() != userid) {
+ req.invite = {userid.toStdString()};
+ req.is_direct = true;
+ }
emit ChatPage::instance()->createRoom(req);
}
|