diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index ab50a4318..2d6126197 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -422,6 +422,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_settings_spellchecker" = "Spell checker"; "lng_settings_system_spellchecker" = "Use system spell checker"; +"lng_settings_custom_spellchecker" = "Use spell checker"; "lng_settings_manage_dictionaries" = "Manage dictionaries"; "lng_settings_manage_enabled_dictionary" = "Dictionary is enabled"; diff --git a/Telegram/SourceFiles/settings/settings_advanced.cpp b/Telegram/SourceFiles/settings/settings_advanced.cpp index 3e613ee5a..d2e61809d 100644 --- a/Telegram/SourceFiles/settings/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/settings_advanced.cpp @@ -33,6 +33,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_settings.h" #ifndef TDESKTOP_DISABLE_SPELLCHECK +#include "boxes/dictionaries_manager.h" #include "spellcheck/platform/platform_spellcheck.h" #endif // !TDESKTOP_DISABLE_SPELLCHECK @@ -250,28 +251,56 @@ void SetupUpdate(not_null container) { bool HasSystemSpellchecker() { #ifdef TDESKTOP_DISABLE_SPELLCHECK return false; -#else - return Platform::Spellchecker::IsAvailable(); #endif // TDESKTOP_DISABLE_SPELLCHECK + return true; } void SetupSpellchecker( not_null controller, not_null container) { +#ifndef TDESKTOP_DISABLE_SPELLCHECK const auto session = &controller->session(); - AddButton( + const auto isSystem = Platform::Spellchecker::IsSystemSpellchecker(); + const auto button = AddButton( container, - tr::lng_settings_system_spellchecker(), + isSystem + ? tr::lng_settings_system_spellchecker() + : tr::lng_settings_custom_spellchecker(), st::settingsButton )->toggleOn( rpl::single(session->settings().spellcheckerEnabled()) - )->toggledValue( + ); + + button->toggledValue( ) | rpl::filter([=](bool enabled) { return (enabled != session->settings().spellcheckerEnabled()); }) | rpl::start_with_next([=](bool enabled) { session->settings().setSpellcheckerEnabled(enabled); session->saveSettingsDelayed(); }, container->lifetime()); + + if (isSystem) { + return; + } + + const auto sliding = container->add( + object_ptr>( + container, + object_ptr(container))); + + AddButton( + sliding->entity(), + tr::lng_settings_manage_dictionaries(), + st::settingsButton + )->addClickHandler([=] { + Ui::show(Box(session)); + }); + + button->toggledValue( + ) | rpl::start_with_next([=](bool enabled) { + sliding->toggle(enabled, anim::type::normal); + }, container->lifetime()); +#endif // !TDESKTOP_DISABLE_SPELLCHECK } bool HasTray() {