From 53cb0e79cb99fbbfc0d1feb15c61cae11d4f91ba Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 14 Jan 2026 17:46:29 +0400 Subject: [PATCH] Rewrite settings_shortcuts to new builder pattern Co-Authored-By: Claude Opus 4.5 --- Telegram/CMakeLists.txt | 4 +- .../settings/sections/settings_chat.cpp | 2 +- .../{ => sections}/settings_shortcuts.cpp | 55 +++++++++++++++++-- .../{ => sections}/settings_shortcuts.h | 10 +++- 4 files changed, 61 insertions(+), 10 deletions(-) rename Telegram/SourceFiles/settings/{ => sections}/settings_shortcuts.cpp (91%) rename Telegram/SourceFiles/settings/{ => sections}/settings_shortcuts.h (75%) diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index e1eafe2333..3eeda69612 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -1598,9 +1598,9 @@ PRIVATE settings/settings_privacy_controllers.h settings/settings_scale_preview.cpp settings/settings_scale_preview.h - settings/settings_shortcuts.cpp - settings/settings_shortcuts.h settings/settings_type.h + settings/sections/settings_shortcuts.cpp + settings/sections/settings_shortcuts.h settings/settings_websites.cpp settings/settings_websites.h storage/details/storage_file_utilities.cpp diff --git a/Telegram/SourceFiles/settings/sections/settings_chat.cpp b/Telegram/SourceFiles/settings/sections/settings_chat.cpp index cf85ffb2bc..55474db6c1 100644 --- a/Telegram/SourceFiles/settings/sections/settings_chat.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_chat.cpp @@ -13,7 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/sections/settings_main.h" #include "settings/sections/settings_privacy_security.h" #include "settings/settings_experimental.h" -#include "settings/settings_shortcuts.h" +#include "settings/sections/settings_shortcuts.h" #include "boxes/abstract_box.h" #include "boxes/peers/edit_peer_color_box.h" #include "boxes/connection_box.h" diff --git a/Telegram/SourceFiles/settings/settings_shortcuts.cpp b/Telegram/SourceFiles/settings/sections/settings_shortcuts.cpp similarity index 91% rename from Telegram/SourceFiles/settings/settings_shortcuts.cpp rename to Telegram/SourceFiles/settings/sections/settings_shortcuts.cpp index 8da5a65f1f..65f87a9d09 100644 --- a/Telegram/SourceFiles/settings/settings_shortcuts.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_shortcuts.cpp @@ -5,12 +5,14 @@ the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ -#include "settings/settings_shortcuts.h" +#include "settings/sections/settings_shortcuts.h" #include "base/event_filter.h" #include "core/application.h" #include "core/shortcuts.h" #include "lang/lang_keys.h" +#include "settings/sections/settings_chat.h" +#include "settings/settings_builder.h" #include "ui/text/text_utilities.h" #include "ui/widgets/buttons.h" #include "ui/widgets/labels.h" @@ -18,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/wrap/slide_wrap.h" #include "ui/wrap/vertical_layout.h" #include "ui/vertical_list.h" +#include "window/window_session_controller.h" #include "styles/style_menu_icons.h" #include "styles/style_settings.h" @@ -28,6 +31,8 @@ namespace { namespace S = ::Shortcuts; +using namespace Builder; + struct Labeled { S::Command command = {}; rpl::producer label; @@ -131,7 +136,12 @@ struct Labeled { return result; } -[[nodiscard]] Fn SetupShortcutsContent( +struct SetupShortcutsResult { + Fn save; + QPointer resetButton; +}; + +[[nodiscard]] SetupShortcutsResult SetupShortcutsContent( not_null controller, not_null content) { const auto &defaults = S::KeysDefaults(); @@ -323,7 +333,6 @@ struct Labeled { state->recording = nullptr; InvokeQueued(content, [=] { InvokeQueued(content, [=] { - // Let all the shortcut events propagate first. S::Unpause(); }); }); @@ -399,7 +408,6 @@ struct Labeled { return base::EventFilterResult::Cancel; } else if (!m && !clear && !S::AllowWithoutModifiers(k)) { if (k != Qt::Key_Escape) { - // Intercept this KeyPress event. stopRecording(); } return base::EventFilterResult::Cancel; @@ -474,10 +482,31 @@ struct Labeled { fill(entry); } - return [=] { + return { + .save = [=] {}, + .resetButton = reset, }; } +void BuildShortcutsSection(SectionBuilder &builder) { + builder.add(nullptr, [] { + return SearchEntry{ + .id = u"shortcuts/reset"_q, + .title = tr::lng_shortcuts_reset(tr::now), + .keywords = { u"reset"_q, u"defaults"_q, u"restore"_q }, + }; + }); +} + +const auto kMeta = BuildHelper({ + .id = Shortcuts::Id(), + .parentId = Chat::Id(), + .title = &tr::lng_settings_shortcuts, + .icon = &st::menuIconShortcut, +}, [](SectionBuilder &builder) { + BuildShortcutsSection(builder); +}); + } // namespace Shortcuts::Shortcuts( @@ -500,9 +529,23 @@ rpl::producer Shortcuts::title() { void Shortcuts::setupContent() { const auto content = Ui::CreateChild(this); - _save = SetupShortcutsContent(controller(), content); + auto result = SetupShortcutsContent(controller(), content); + _save = std::move(result.save); + _resetButton = result.resetButton; + + build(content, Builder::ShortcutsSection); Ui::ResizeFitChild(this, content); } +void Shortcuts::showFinished() { + Section::showFinished(); + controller()->checkHighlightControl(u"shortcuts/reset"_q, _resetButton); +} + +namespace Builder { + +SectionBuildMethod ShortcutsSection = kMeta.build; + +} // namespace Builder } // namespace Settings diff --git a/Telegram/SourceFiles/settings/settings_shortcuts.h b/Telegram/SourceFiles/settings/sections/settings_shortcuts.h similarity index 75% rename from Telegram/SourceFiles/settings/settings_shortcuts.h rename to Telegram/SourceFiles/settings/sections/settings_shortcuts.h index d23e8bb5bd..0f7362913c 100644 --- a/Telegram/SourceFiles/settings/settings_shortcuts.h +++ b/Telegram/SourceFiles/settings/sections/settings_shortcuts.h @@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "settings/settings_common_session.h" +#include "settings/settings_type.h" namespace Settings { @@ -18,14 +19,21 @@ public: not_null controller); ~Shortcuts(); + void showFinished() override; + [[nodiscard]] rpl::producer title() override; private: void setupContent(); Fn _save; + QPointer _resetButton; }; -} // namespace Settings +namespace Builder { +extern SectionBuildMethod ShortcutsSection; + +} // namespace Builder +} // namespace Settings