diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index 2d635434..c580cbc2 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -249,10 +249,13 @@ Control { text: model.roomName textFormat: Text.RichText } - - Label { - text: model.roomParent === "" ? "" : ("[" + model.roomParent + "]") - font.pixelSize: popup.avatarHeight * 0.5 + Loader { + active: Settings.displayParentInSwitcher && model.roomParent !== "" + sourceComponent: Label { + color: model.index == popup.currentIndex ? palette.highlightedText : palette.text + text: "[" + model.roomParent + "]" + font.pixelSize: popup.avatarHeight * 0.5 + } } } } diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 49fb6a59..0376606b 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -75,6 +75,7 @@ UserSettings::load(std::optional profile) sortByAlphabet_ = settings.value("user/sort_by_alphabet", false).toBool(); readReceipts_ = settings.value("user/read_receipts", true).toBool(); theme_ = settings.value("user/theme", defaultTheme_).toString(); + displayParentInSwitcher_ = settings.value("user/display_parent_on_room_switch", true).toBool(); font_ = settings.value("user/font_family", "").toString(); @@ -857,6 +858,16 @@ UserSettings::setOpenVideoExternal(bool state) save(); } +void +UserSettings::setDisplayParentInSwitcher(bool state) +{ + if (state == displayParentInSwitcher_) + return; + displayParentInSwitcher_ = state; + emit displayParentInSwitcherChanged(displayParentInSwitcher_); + save(); +} + void UserSettings::applyTheme() { @@ -931,6 +942,7 @@ UserSettings::save() settings.setValue("expose_dbus_api", exposeDBusApi_); settings.setValue("space_background_maintenance", updateSpaceVias_); settings.setValue("expired_events_background_maintenance", expireEvents_); + settings.setValue("display_parent_on_room_switch", displayParentInSwitcher_); settings.endGroup(); // user @@ -1014,6 +1026,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Communities sidebar"); case ScrollbarsInRoomlist: return tr("Scrollbars in room list"); + case DisplayParentInSwitcher: + return tr("Display room's parent in room switcher"); case Markdown: return tr("Send messages as Markdown"); case InvertEnterKey: @@ -1172,6 +1186,8 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return i->groupView(); case ScrollbarsInRoomlist: return i->scrollbarsInRoomlist(); + case DisplayParentInSwitcher: + return i->displayParentInSwitcher(); case Markdown: return i->markdown(); case InvertEnterKey: @@ -1334,6 +1350,10 @@ UserSettingsModel::data(const QModelIndex &index, int role) const return tr("Show a column containing communities and tags next to the room list."); case ScrollbarsInRoomlist: return tr("Shows scrollbars in the room list and communities list."); + case DisplayParentInSwitcher: + return tr("Display a room's parent in the room switcher. " + "Enabling this option allows distinguishing multiple rooms " + "with the same name"); case Markdown: return tr( "Allow using markdown in messages.\nWhen disabled, all messages are sent as a plain " @@ -1516,6 +1536,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const case StartInTray: case GroupView: case ScrollbarsInRoomlist: + case DisplayParentInSwitcher: case Markdown: case InvertEnterKey: case Bubbles: @@ -1758,6 +1779,13 @@ UserSettingsModel::setData(const QModelIndex &index, const QVariant &value, int } else return false; } + case DisplayParentInSwitcher: { + if (value.userType() == QMetaType::Bool) { + i->setDisplayParentInSwitcher(value.toBool()); + return true; + } else + return false; + } case Markdown: { if (value.userType() == QMetaType::Bool) { i->setMarkdown(value.toBool()); @@ -2253,6 +2281,9 @@ UserSettingsModel::UserSettingsModel(QObject *p) connect(s.get(), &UserSettings::scrollbarsInRoomlistChanged, this, [this]() { emit dataChanged(index(ScrollbarsInRoomlist), index(ScrollbarsInRoomlist), {Value}); }); + connect(s.get(), &UserSettings::displayParentInSwitcherChanged, this, [this]() { + emit dataChanged(index(DisplayParentInSwitcher), index(DisplayParentInSwitcher), {Value}); + }); connect(s.get(), &UserSettings::roomSortingChangedImportance, this, [this]() { emit dataChanged(index(SortByImportance), index(SortByImportance), {Value}); }); diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index 44cf7c84..6a6c8a12 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -121,6 +121,8 @@ class UserSettings final : public QObject Q_PROPERTY(bool updateSpaceVias READ updateSpaceVias WRITE setUpdateSpaceVias NOTIFY updateSpaceViasChanged) Q_PROPERTY(bool expireEvents READ expireEvents WRITE setExpireEvents NOTIFY expireEventsChanged) + Q_PROPERTY(bool displayParentInSwitcher READ displayParentInSwitcher WRITE + setDisplayParentInSwitcher NOTIFY displayParentInSwitcherChanged) UserSettings(); @@ -228,6 +230,7 @@ public: void setExposeDBusApi(bool state); void setUpdateSpaceVias(bool state); void setExpireEvents(bool state); + void setDisplayParentInSwitcher(bool state); QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; } bool messageHoverHighlight() const { return messageHoverHighlight_; } @@ -305,6 +308,7 @@ public: bool exposeDBusApi() const { return exposeDBusApi_; } bool updateSpaceVias() const { return updateSpaceVias_; } bool expireEvents() const { return expireEvents_; } + bool displayParentInSwitcher() const { return displayParentInSwitcher_; } signals: void groupViewStateChanged(bool state); @@ -371,6 +375,7 @@ signals: void exposeDBusApiChanged(bool state); void updateSpaceViasChanged(bool state); void expireEventsChanged(bool state); + void displayParentInSwitcherChanged(bool state); private: // Default to system theme if QT_QPA_PLATFORMTHEME var is set. @@ -447,6 +452,7 @@ private: bool exposeDBusApi_; bool updateSpaceVias_; bool expireEvents_; + bool displayParentInSwitcher_; QSettings settings; @@ -476,6 +482,7 @@ class UserSettingsModel : public QAbstractListModel PrivacyScreen, PrivacyScreenTimeout, ScrollbarsInRoomlist, + DisplayParentInSwitcher, #ifdef NHEKO_DBUS_SYS ExposeDBusApi, #endif