diff --git a/Telegram/SourceFiles/core/kotato_settings.cpp b/Telegram/SourceFiles/core/kotato_settings.cpp index 1ab5e2484..706684c78 100644 --- a/Telegram/SourceFiles/core/kotato_settings.cpp +++ b/Telegram/SourceFiles/core/kotato_settings.cpp @@ -333,6 +333,10 @@ bool Manager::readCustomFile() { cSetCustomAppIcon(v); } }); + + ReadIntOption(settings, "default_folder_id", [&](auto v) { + cSetDefaultFilterId(v); + }); return true; } @@ -377,6 +381,7 @@ void Manager::writeDefaultFile() { settings.insert(qsl("userpic_corner_type"), cUserpicCornersType()); settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic()); settings.insert(qsl("custom_app_icon"), cCustomAppIcon()); + settings.insert(qsl("default_folder_id"), cDefaultFilterId()); auto settingsScales = QJsonArray(); settings.insert(qsl("scales"), settingsScales); @@ -442,6 +447,7 @@ void Manager::writeCurrentSettings() { settings.insert(qsl("userpic_corner_type"), cUserpicCornersType()); settings.insert(qsl("always_show_top_userpic"), cShowTopBarUserpic()); settings.insert(qsl("custom_app_icon"), cCustomAppIcon()); + settings.insert(qsl("default_folder_id"), cDefaultFilterId()); auto settingsScales = QJsonArray(); auto currentScales = cInterfaceScales(); diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 0b334cc2e..a5997befe 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -687,8 +687,8 @@ void Widget::escape() { } else if (!onCancelSearch()) { if (controller()->activeChatEntryCurrent().key) { emit cancelled(); - } else if (controller()->activeChatsFilterCurrent()) { - controller()->setActiveChatsFilter(FilterId(0)); + } else if (controller()->activeChatsFilterCurrent() != cDefaultFilterId()) { + controller()->setActiveChatsFilter(cDefaultFilterId()); } } else if (!_searchInChat && !App::main()->selectingPeer()) { if (controller()->activeChatEntryCurrent().key) { diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 4b60a46d4..1a508f3a2 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -319,3 +319,6 @@ rpl::producer RecentStickersLimitChanges() { int gUserpicCornersType = 3; bool gShowTopBarUserpic = false; int gCustomAppIcon = 0; + +int gDefaultFilterId = 0; + diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index bedeba54c..8dccab5e1 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -249,3 +249,5 @@ void SetRecentStickersLimit(int limit); DeclareSetting(int, UserpicCornersType); DeclareSetting(bool, ShowTopBarUserpic); DeclareSetting(int, CustomAppIcon); + +DeclareSetting(int, DefaultFilterId); diff --git a/Telegram/SourceFiles/window/window_filters_menu.cpp b/Telegram/SourceFiles/window/window_filters_menu.cpp index 216583320..05510ee64 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.cpp +++ b/Telegram/SourceFiles/window/window_filters_menu.cpp @@ -104,7 +104,7 @@ void FiltersMenu::setup() { ) | rpl::then( filters->changed() ) | rpl::start_with_next([=] { - refresh(); + refresh(true); }, _outer.lifetime()); _activeFilterId = _session->activeChatsFilterCurrent(); @@ -132,7 +132,7 @@ void FiltersMenu::setup() { }); } -void FiltersMenu::refresh() { +void FiltersMenu::refresh(bool firstLoad) { const auto filters = &_session->session().data().chatsFilters(); if (filters->list().empty() || _ignoreRefresh) { return; @@ -156,6 +156,10 @@ void FiltersMenu::refresh() { _reorder->start(); _container->resizeToWidth(_outer.width()); + + if (firstLoad) { + _session->setActiveChatsFilter(cDefaultFilterId()); + } } void FiltersMenu::setupList() { diff --git a/Telegram/SourceFiles/window/window_filters_menu.h b/Telegram/SourceFiles/window/window_filters_menu.h index 34aea5a6b..7c64c5969 100644 --- a/Telegram/SourceFiles/window/window_filters_menu.h +++ b/Telegram/SourceFiles/window/window_filters_menu.h @@ -34,7 +34,7 @@ public: private: void setup(); - void refresh(); + void refresh(bool firstLoad = false); void setupList(); void applyReorder( not_null widget, diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index be2ec4065..fec29732a 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -230,7 +230,8 @@ void SessionController::checkOpenedFilter() { const auto &list = session().data().chatsFilters().list(); const auto i = ranges::find(list, filterId, &Data::ChatFilter::id); if (i == end(list)) { - setActiveChatsFilter(0); + const auto j = ranges::find(list, FilterId(cDefaultFilterId()), &Data::ChatFilter::id); + setActiveChatsFilter(j == end(list) ? 0 : cDefaultFilterId()); } } } @@ -246,8 +247,13 @@ void SessionController::openFolder(not_null folder) { _openedFolder = folder.get(); } -void SessionController::closeFolder() { - _openedFolder = nullptr; +void SessionController::closeFolder(bool force) { + if (cDefaultFilterId() == 0 || force) { + _openedFolder = nullptr; + } else { + setActiveChatsFilter(cDefaultFilterId()); + checkOpenedFilter(); + } } const rpl::variable &SessionController::openedFolder() const { @@ -783,7 +789,7 @@ FilterId SessionController::activeChatsFilterCurrent() const { void SessionController::setActiveChatsFilter(FilterId id) { _activeChatsFilter.force_assign(id); if (id) { - closeFolder(); + closeFolder(true); } if (Adaptive::OneColumn()) { Ui::showChatsList(); diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index ef187d9cc..f6b9f4c47 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -184,7 +184,7 @@ public: rpl::variable searchInChat; bool uniqueChatsInSearchResults() const; void openFolder(not_null folder); - void closeFolder(); + void closeFolder(bool force = false); const rpl::variable &openedFolder() const; void setActiveChatEntry(Dialogs::RowDescriptor row);