diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index cb2ea149d3..617ba92bee 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -660,6 +660,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_settings_section_chat_settings" = "Chat Settings"; "lng_settings_replace_emojis" = "Replace emoji automatically"; +"lng_settings_system_text_replace" = "System text replacements"; "lng_settings_suggest_emoji" = "Suggest emoji replacements"; "lng_settings_suggest_animated_emoji" = "Suggest animated emoji"; "lng_settings_suggest_by_emoji" = "Suggest popular stickers by emoji"; diff --git a/Telegram/SourceFiles/boxes/add_contact_box.cpp b/Telegram/SourceFiles/boxes/add_contact_box.cpp index c6becf7bc1..0e81390e3c 100644 --- a/Telegram/SourceFiles/boxes/add_contact_box.cpp +++ b/Telegram/SourceFiles/boxes/add_contact_box.cpp @@ -577,7 +577,8 @@ void GroupInfoBox::prepare() { _title->setMaxLength(Ui::EditPeer::kMaxGroupChannelTitle); _title->setInstantReplaces(Ui::InstantReplaces::Default()); _title->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); Ui::Emoji::SuggestionsController::Init( getDelegate()->outerContainer(), _title, @@ -593,7 +594,8 @@ void GroupInfoBox::prepare() { _description->setMaxLength(Ui::EditPeer::kMaxChannelDescription); _description->setInstantReplaces(Ui::InstantReplaces::Default()); _description->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); _description->setSubmitSettings( Core::App().settings().sendSubmitWay()); diff --git a/Telegram/SourceFiles/boxes/create_poll_box.cpp b/Telegram/SourceFiles/boxes/create_poll_box.cpp index 1b7751b70b..516adc2273 100644 --- a/Telegram/SourceFiles/boxes/create_poll_box.cpp +++ b/Telegram/SourceFiles/boxes/create_poll_box.cpp @@ -177,7 +177,8 @@ void InitField( not_null session) { field->setInstantReplaces(Ui::InstantReplaces::Default()); field->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); auto options = Ui::Emoji::SuggestionsController::Options(); options.suggestExactFirstWord = false; Ui::Emoji::SuggestionsController::Init( @@ -954,7 +955,8 @@ not_null CreatePollBox::setupSolution( solution->setMaxLength(kSolutionLimit + kErrorLimit); solution->setInstantReplaces(Ui::InstantReplaces::Default()); solution->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); solution->setMarkdownReplacesEnabled(rpl::single( Ui::MarkdownEnabledState{ Ui::MarkdownEnabled{ { Ui::InputField::kTagBold, diff --git a/Telegram/SourceFiles/boxes/edit_todo_list_box.cpp b/Telegram/SourceFiles/boxes/edit_todo_list_box.cpp index 59960a2f47..db06a123ba 100644 --- a/Telegram/SourceFiles/boxes/edit_todo_list_box.cpp +++ b/Telegram/SourceFiles/boxes/edit_todo_list_box.cpp @@ -185,7 +185,8 @@ void InitField( not_null session) { field->setInstantReplaces(Ui::InstantReplaces::Default()); field->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); auto options = Ui::Emoji::SuggestionsController::Options(); options.suggestExactFirstWord = false; Ui::Emoji::SuggestionsController::Init( diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp index 2d1ad710eb..45d9c93af5 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_info_box.cpp @@ -662,7 +662,8 @@ object_ptr Controller::createTitleEdit() { result->entity()->setMaxLength(Ui::EditPeer::kMaxGroupChannelTitle); result->entity()->setInstantReplaces(Ui::InstantReplaces::Default()); result->entity()->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); Ui::Emoji::SuggestionsController::Init( _wrap->window(), result->entity(), @@ -770,7 +771,8 @@ object_ptr Controller::createDescriptionEdit() { result->entity()->setMaxLength(Ui::EditPeer::kMaxChannelDescription); result->entity()->setInstantReplaces(Ui::InstantReplaces::Default()); result->entity()->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); result->entity()->setSubmitSettings( Core::App().settings().sendSubmitWay()); Ui::Emoji::SuggestionsController::Init( diff --git a/Telegram/SourceFiles/chat_helpers/message_field.cpp b/Telegram/SourceFiles/chat_helpers/message_field.cpp index e3c97e1305..5a603a0c87 100644 --- a/Telegram/SourceFiles/chat_helpers/message_field.cpp +++ b/Telegram/SourceFiles/chat_helpers/message_field.cpp @@ -156,7 +156,8 @@ void EditLinkBox( st::markdownLinkFieldPadding); text->setInstantReplaces(Ui::InstantReplaces::Default()); text->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); Ui::Emoji::SuggestionsController::Init( box->getDelegate()->outerContainer(), text, @@ -514,7 +515,8 @@ void InitMessageFieldHandlers(MessageFieldHandlersArgs &&args) { }); field->setInstantReplaces(Ui::InstantReplaces::Default()); field->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); field->setMarkdownReplacesEnabled(rpl::single(Ui::MarkdownEnabledState{ Ui::MarkdownEnabled{ std::move(args.allowMarkdownTags) } })); @@ -604,7 +606,8 @@ Fn)> FactcheckFieldIniter( }); field->setInstantReplaces(Ui::InstantReplaces::Default()); field->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); field->setMarkdownReplacesEnabled(rpl::single( Ui::MarkdownEnabledState{ Ui::MarkdownEnabled{ diff --git a/Telegram/SourceFiles/core/core_settings.cpp b/Telegram/SourceFiles/core/core_settings.cpp index 5c3d95cf22..593271e4bf 100644 --- a/Telegram/SourceFiles/core/core_settings.cpp +++ b/Telegram/SourceFiles/core/core_settings.cpp @@ -259,7 +259,7 @@ QByteArray Settings::serialize() const { + sizeof(ushort) + sizeof(qint32) // _notificationsDisplayChecksum + Serialize::bytearraySize(callPanelPosition) - + sizeof(qint32) * 3; // _cornerReply + _systemAccentColorEnabled + _usePlatformTranslation + + sizeof(qint32) * 4; auto result = QByteArray(); result.reserve(size); @@ -427,7 +427,8 @@ QByteArray Settings::serialize() const { << callPanelPosition << qint32(_cornerReply.current() ? 1 : 0) << qint32(_systemAccentColorEnabled ? 1 : 0) - << qint32(_usePlatformTranslation ? 1 : 0); + << qint32(_usePlatformTranslation ? 1 : 0) + << qint32(_systemTextReplace.current() ? 1 : 0); } Ensures(result.size() == size); @@ -565,6 +566,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { ? 1 : 0; qint32 usePlatformTranslation = _usePlatformTranslation ? 1 : 0; + qint32 systemTextReplace = _systemTextReplace.current() ? 1 : 0; stream >> themesAccentColors; if (!stream.atEnd()) { @@ -914,6 +916,9 @@ void Settings::addFromSerialized(const QByteArray &serialized) { if (!stream.atEnd()) { stream >> usePlatformTranslation; } + if (!stream.atEnd()) { + stream >> systemTextReplace; + } if (stream.status() != QDataStream::Ok) { LOG(("App Error: " "Bad data for Core::Settings::constructFromSerialized()")); @@ -989,6 +994,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) { _loopAnimatedStickers = (loopAnimatedStickers == 1); _largeEmoji = (largeEmoji == 1); _replaceEmoji = (replaceEmoji == 1); + _systemTextReplace = (systemTextReplace == 1); _suggestEmoji = (suggestEmoji == 1); _suggestStickersByEmoji = (suggestStickersByEmoji == 1); _spellcheckerEnabled = (spellcheckerEnabled == 1); @@ -1508,6 +1514,7 @@ void Settings::resetOnLastLogout() { _loopAnimatedStickers = true; _largeEmoji = true; _replaceEmoji = true; + _systemTextReplace = true; _suggestEmoji = true; _suggestStickersByEmoji = true; _suggestAnimatedEmoji = true; diff --git a/Telegram/SourceFiles/core/core_settings.h b/Telegram/SourceFiles/core/core_settings.h index 75f2e29216..83bd41c850 100644 --- a/Telegram/SourceFiles/core/core_settings.h +++ b/Telegram/SourceFiles/core/core_settings.h @@ -469,6 +469,18 @@ public: [[nodiscard]] rpl::producer replaceEmojiChanges() const { return _replaceEmoji.changes(); } + void setSystemTextReplace(bool value) { + _systemTextReplace = value; + } + [[nodiscard]] bool systemTextReplace() const { + return _systemTextReplace.current(); + } + [[nodiscard]] rpl::producer systemTextReplaceValue() const { + return _systemTextReplace.value(); + } + [[nodiscard]] rpl::producer systemTextReplaceChanges() const { + return _systemTextReplace.changes(); + } [[nodiscard]] bool suggestEmoji() const { return _suggestEmoji; } @@ -1049,6 +1061,7 @@ private: bool _loopAnimatedStickers = true; rpl::variable _largeEmoji = true; rpl::variable _replaceEmoji = true; + rpl::variable _systemTextReplace = true; bool _suggestEmoji = true; bool _suggestStickersByEmoji = true; bool _suggestAnimatedEmoji = true; diff --git a/Telegram/SourceFiles/settings/sections/settings_advanced.cpp b/Telegram/SourceFiles/settings/sections/settings_advanced.cpp index b85b53e104..26fed4dd52 100644 --- a/Telegram/SourceFiles/settings/sections/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_advanced.cpp @@ -535,6 +535,22 @@ void BuildSystemIntegrationSection(SectionBuilder &builder) { }, warnBeforeQuit->lifetime()); } + const auto systemReplace = builder.addCheckbox({ + .id = u"advanced/system_text_replace"_q, + .title = tr::lng_settings_system_text_replace(), + .checked = settings->systemTextReplace(), + .keywords = { u"text"_q, u"replace"_q, u"system"_q }, + }); + if (systemReplace) { + systemReplace->checkedChanges( + ) | rpl::filter([=](bool checked) { + return (checked != settings->systemTextReplace()); + }) | rpl::on_next([=](bool checked) { + settings->setSystemTextReplace(checked); + Core::App().saveSettingsDelayed(); + }, systemReplace->lifetime()); + } + #ifndef OS_MAC_STORE const auto roundIconEnabled = [=] { const auto digest = base::Platform::CurrentCustomAppIconDigest(); diff --git a/Telegram/SourceFiles/settings/sections/settings_information.cpp b/Telegram/SourceFiles/settings/sections/settings_information.cpp index fd0376c5be..db8a54fc45 100644 --- a/Telegram/SourceFiles/settings/sections/settings_information.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_information.cpp @@ -693,7 +693,8 @@ void SetupBio( bio->changes() | rpl::on_next(updated, bio->lifetime()); bio->setInstantReplaces(Ui::InstantReplaces::Default()); bio->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); Ui::Emoji::SuggestionsController::Init( container->window(), bio, diff --git a/Telegram/SourceFiles/support/support_helper.cpp b/Telegram/SourceFiles/support/support_helper.cpp index da298ace5b..7fa1202a40 100644 --- a/Telegram/SourceFiles/support/support_helper.cpp +++ b/Telegram/SourceFiles/support/support_helper.cpp @@ -94,7 +94,8 @@ EditInfoBox::EditInfoBox( Core::App().settings().sendSubmitWay()); _field->setInstantReplaces(Ui::InstantReplaces::Default()); _field->setInstantReplacesEnabled( - Core::App().settings().replaceEmojiValue()); + Core::App().settings().replaceEmojiValue(), + Core::App().settings().systemTextReplaceValue()); _field->setMarkdownReplacesEnabled(true); _field->setEditLinkCallback( DefaultEditLinkCallback(controller->uiShow(), _field)); diff --git a/Telegram/lib_ui b/Telegram/lib_ui index f6af49a763..a0d830f2bd 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit f6af49a763c8254606c8ff0cddd31d551228a100 +Subproject commit a0d830f2bd39b215545001431f4ce581d28e676b