diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index 0cb207bc1..7c737d4b5 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -1328,6 +1328,7 @@ void Widget::toggleFiltersMenu(bool enabled) { _chatFilters.get(), &session(), [this](FilterId id) { + _scroll->scrollToY(0); if (controller()->activeChatsFilterCurrent() != id) { controller()->setActiveChatsFilter(id); } diff --git a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp index 6a9f07457..569f139f4 100644 --- a/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp +++ b/Telegram/SourceFiles/ui/widgets/chat_filters_tabs_strip.cpp @@ -381,14 +381,18 @@ not_null AddChatFiltersTabsStrip( state->reorder->finishReordering(); }, slider->lifetime()); } - slider->sectionActivated() | rpl::distinct_until_changed( - ) | rpl::start_with_next([=](int index) { + rpl::single(-1) | rpl::then( + slider->sectionActivated() + ) | rpl::combine_previous( + ) | rpl::start_with_next([=](int was, int index) { if (slider->reordering()) { return; } const auto &filter = filterByIndex(index); - state->lastFilterId = filter.id(); - scrollToIndex(index, anim::type::normal); + if (was != index) { + state->lastFilterId = filter.id(); + scrollToIndex(index, anim::type::normal); + } applyFilter(filter); }, wrap->lifetime()); slider->contextMenuRequested() | rpl::start_with_next([=](int index) {