From 75636d69ff56e61cf90285f79f63e001f6086abe Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 16 Feb 2026 12:05:31 +0400 Subject: [PATCH] Return "When window closed" setting section. Fixes #30284. --- .../settings/sections/settings_advanced.cpp | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/Telegram/SourceFiles/settings/sections/settings_advanced.cpp b/Telegram/SourceFiles/settings/sections/settings_advanced.cpp index a72f977b65..6b6aacc594 100644 --- a/Telegram/SourceFiles/settings/sections/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_advanced.cpp @@ -347,6 +347,70 @@ void BuildWindowTitleSection(SectionBuilder &builder) { builder.addSkip(); } +#if !defined Q_OS_WIN && !defined Q_OS_MAC +void BuildWindowCloseBehaviorSection(SectionBuilder &builder) { + using Behavior = Core::Settings::CloseBehavior; + + const auto settings = &Core::App().settings(); + auto shown = Platform::TrayIconSupported() + ? (Core::App().settings().workModeValue( + ) | rpl::map([](Core::Settings::WorkMode mode) { + return (mode == Core::Settings::WorkMode::WindowOnly); + }) | rpl::distinct_until_changed() | rpl::type_erased()) + : rpl::producer(nullptr); + + builder.scope([&] { + builder.addDivider(); + builder.addSkip(); + builder.addSubsectionTitle({ + .id = u"advanced/window_close"_q, + .title = tr::lng_settings_window_close(), + .keywords = { u"close"_q, u"window"_q, u"background"_q, u"quit"_q, u"taskbar"_q, u"minimize"_q }, + }); + + builder.add([settings](const WidgetContext &ctx) { + const auto container = ctx.container.get(); + auto wrap = object_ptr(container); + const auto inner = wrap.data(); + + const auto group = std::make_shared>( + settings->closeBehavior()); + const auto addRadio = [&](Behavior value, const QString &label) { + inner->add( + object_ptr>( + inner, + group, + value, + label, + st::settingsSendType), + st::settingsSendTypePadding); + }; + + addRadio( + Behavior::RunInBackground, + tr::lng_settings_run_in_background(tr::now)); + addRadio( + Behavior::CloseToTaskbar, + tr::lng_settings_close_to_taskbar(tr::now)); + addRadio( + Behavior::Quit, + tr::lng_settings_quit_on_close(tr::now)); + + group->value() | rpl::filter([=](Behavior value) { + return (value != settings->closeBehavior()); + }) | rpl::on_next([=](Behavior value) { + settings->setCloseBehavior(value); + Local::writeSettings(); + }, inner->lifetime()); + + return SectionBuilder::WidgetToAdd{ .widget = std::move(wrap) }; + }); + + builder.addSkip(); + }, std::move(shown)); +} +#endif // !Q_OS_WIN && !Q_OS_MAC + void BuildSystemIntegrationSection(SectionBuilder &builder) { const auto controller = builder.controller(); const auto settings = &Core::App().settings(); @@ -1126,6 +1190,9 @@ const auto kMeta = BuildHelper({ BuildDataStorageSection(builder); BuildAutoDownloadSection(builder); BuildWindowTitleSection(builder); +#if !defined Q_OS_WIN && !defined Q_OS_MAC + BuildWindowCloseBehaviorSection(builder); +#endif BuildSystemIntegrationSection(builder); BuildPerformanceSection(builder); BuildSpellcheckerSection(builder);