From bcd84518d1c0a8179f8e3c9c36c24e50aad954f8 Mon Sep 17 00:00:00 2001
From: 23rd <23rd@vivaldi.net>
Date: Sun, 3 Nov 2024 18:16:40 +0300
Subject: [PATCH] Added tracking of active chats filter to chats filters strip.

---
 .../SourceFiles/dialogs/dialogs_widget.cpp    |  3 ++-
 .../ui/widgets/chat_filters_tabs_strip.cpp    | 19 +++++++++++++++++--
 .../ui/widgets/chat_filters_tabs_strip.h      |  3 ++-
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp
index 6f6b57298..056f2a159 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp
+++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp
@@ -667,7 +667,8 @@ Widget::Widget(
 				rpl::single(0),
 				[=](int h) { updateControlsGeometry(); },
 				[=](FilterId id) { controller->setActiveChatsFilter(id); },
-				Core::App().settings().chatFiltersHorizontalValue());
+				Core::App().settings().chatFiltersHorizontalValue(),
+				true);
 			_chatFilters->stackUnder(_scroll);
 			_chatFilters->resizeToWidth(width());
 			updateControlsGeometry();
diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp
index 66affaf5c..e29f90e89 100644
--- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp
+++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp
@@ -130,7 +130,8 @@ not_null<Ui::RpWidget*> AddChatFiltersTabsStrip(
 		rpl::producer<int> multiSelectHeightValue,
 		Fn<void(int)> setAddedTopScrollSkip,
 		Fn<void(FilterId)> choose,
-		rpl::producer<bool> additionalToggleOn) {
+		rpl::producer<bool> additionalToggleOn,
+		bool trackActiveChatsFilter) {
 	const auto window = Core::App().findWindow(parent);
 	const auto controller = window ? window->sessionController() : nullptr;
 
@@ -265,7 +266,21 @@ not_null<Ui::RpWidget*> AddChatFiltersTabsStrip(
 				applyFilter(filter);
 			}
 		}();
-		slider->sectionActivated() | rpl::start_with_next([=](int index) {
+		if (trackActiveChatsFilter) {
+			controller->activeChatsFilter(
+			) | rpl::start_with_next([=](FilterId id) {
+				const auto &list = session->data().chatsFilters().list();
+				for (auto i = 0; i < list.size(); ++i) {
+					if (list[i].id() == id) {
+						slider->setActiveSection(i);
+						scrollToIndex(i, anim::type::normal);
+						break;
+					}
+				}
+			}, slider->lifetime());
+		}
+		slider->sectionActivated() | rpl::distinct_until_changed(
+		) | rpl::start_with_next([=](int index) {
 			const auto &filter = filterByIndex(index);
 			state->lastFilterId = filter.id();
 			scrollToIndex(index, anim::type::normal);
diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.h b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.h
index 3a5c1ed59..806a2ee14 100644
--- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.h
+++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.h
@@ -23,6 +23,7 @@ not_null<Ui::RpWidget*> AddChatFiltersTabsStrip(
 	rpl::producer<int> multiSelectHeightValue,
 	Fn<void(int)> setAddedTopScrollSkip,
 	Fn<void(FilterId)> choose,
-	rpl::producer<bool> additionalToggleOn = rpl::single(true));
+	rpl::producer<bool> additionalToggleOn = rpl::single(true),
+	bool trackActiveChatsFilter = false);
 
 } // namespace Ui