diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index f2e809107..0cb207bc1 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -653,7 +653,8 @@ Widget::Widget( } if (session().settings().dialogsFiltersEnabled() - && Core::App().settings().chatFiltersHorizontal()) { + && (Core::App().settings().chatFiltersHorizontal() + || !controller->enoughSpaceForFilters())) { toggleFiltersMenu(true); } } diff --git a/Telegram/SourceFiles/settings/settings_folders.cpp b/Telegram/SourceFiles/settings/settings_folders.cpp index f2ba21dd2..552215041 100644 --- a/Telegram/SourceFiles/settings/settings_folders.cpp +++ b/Telegram/SourceFiles/settings/settings_folders.cpp @@ -844,7 +844,16 @@ void SetupTopContent( } -void SetupView(not_null content) { +void SetupView( + not_null controller, + not_null content) { + const auto wrap = content->add( + object_ptr>( + content, + object_ptr(content))); + wrap->toggleOn(controller->enoughSpaceForFiltersValue()); + content = wrap->entity(); + Ui::AddDivider(content); Ui::AddSkip(content); Ui::AddSubsectionTitle(content, tr::lng_filters_view_subtitle()); @@ -900,7 +909,7 @@ void Folders::setupContent(not_null controller) { _save = SetupFoldersContent(controller, content); - SetupView(content); + SetupView(controller, content); Ui::ResizeFitChild(this, content); } diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index 208ed561c..334af505e 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -566,11 +566,6 @@ void MainWindow::updatePalette() { int MainWindow::computeMinWidth() const { auto result = st::windowMinWidth; - if (const auto session = _controller->sessionController()) { - if (const auto add = session->filtersWidth()) { - result += add; - } - } if (_rightColumn) { result += _rightColumn->width(); } diff --git a/Telegram/SourceFiles/window/window_controller.cpp b/Telegram/SourceFiles/window/window_controller.cpp index da6efc8d1..fb47a4050 100644 --- a/Telegram/SourceFiles/window/window_controller.cpp +++ b/Telegram/SourceFiles/window/window_controller.cpp @@ -230,6 +230,7 @@ void Controller::setupSideBar() { }, _sessionController->lifetime()); if (_sessionController->session().settings().dialogsFiltersEnabled() + && _sessionController->enoughSpaceForFilters() && !Core::App().settings().chatFiltersHorizontal()) { _sessionController->toggleFiltersMenu(true); } else { diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 5c54a79d2..0ec6d195b 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -1315,6 +1315,7 @@ SessionController::SessionController( }, lifetime()); rpl::merge( + enoughSpaceForFiltersValue() | rpl::skip(1) | rpl::to_empty, Core::App().settings().chatFiltersHorizontalChanges() | rpl::to_empty, session->data().chatsFilters().changed() ) | rpl::start_with_next([=] { @@ -1322,7 +1323,8 @@ SessionController::SessionController( crl::on_main(this, [this] { if (SessionNavigation::session().data().chatsFilters().has()) { const auto isHorizontal - = Core::App().settings().chatFiltersHorizontal(); + = Core::App().settings().chatFiltersHorizontal() + || !enoughSpaceForFilters(); content()->toggleFiltersMenu(isHorizontal); toggleFiltersMenu(!isHorizontal); } else { @@ -2588,6 +2590,16 @@ int SessionController::filtersWidth() const { return _filters ? st::windowFiltersWidth : 0; } +bool SessionController::enoughSpaceForFilters() const { + return widget()->width() >= widget()->minimumWidth() + st::windowFiltersWidth; +} + +rpl::producer SessionController::enoughSpaceForFiltersValue() const { + return widget()->widthValue() | rpl::map([=] { + return enoughSpaceForFilters(); + }) | rpl::distinct_until_changed(); +} + rpl::producer SessionController::activeChatsFilter() const { return _activeChatsFilter.value(); } diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 8cb9a590f..f6880bdbe 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -546,6 +546,8 @@ public: } [[nodiscard]] int filtersWidth() const; + [[nodiscard]] bool enoughSpaceForFilters() const; + [[nodiscard]] rpl::producer enoughSpaceForFiltersValue() const; [[nodiscard]] rpl::producer activeChatsFilter() const; [[nodiscard]] FilterId activeChatsFilterCurrent() const; void setActiveChatsFilter(