diff --git a/external/ispell b/external/ispell index 061c7e52b..b4ac0ab97 160000 --- a/external/ispell +++ b/external/ispell @@ -1 +1 @@ -Subproject commit 061c7e52b507f146396c3b08f289c88ca598fc2f +Subproject commit b4ac0ab9772904732e98d5d402b553556bd4ce78 diff --git a/linphone-app/src/components/other/spell-checker/SpellChecker.cpp b/linphone-app/src/components/other/spell-checker/SpellChecker.cpp index a46732d3c..37ef2c021 100644 --- a/linphone-app/src/components/other/spell-checker/SpellChecker.cpp +++ b/linphone-app/src/components/other/spell-checker/SpellChecker.cpp @@ -23,8 +23,7 @@ #include #include #include -#include "components/core/CoreManager.hpp" -#include "components/settings/SettingsModel.hpp" + #ifdef WIN32 #include @@ -54,7 +53,8 @@ SpellChecker::SpellChecker(QObject *parent) : QSyntaxHighlighter(parent) { connect(graceTimer, SIGNAL(timeout()), SLOT(highlightAfterGracePeriod())); mAvailable = false; - setLanguage(); + if (CoreManager::getInstance()->getSettingsModel()->getSpellCheckerEnabled()) + setLanguage(); } SpellChecker::~SpellChecker () { diff --git a/linphone-app/src/components/other/spell-checker/SpellChecker.hpp b/linphone-app/src/components/other/spell-checker/SpellChecker.hpp index 52564231a..e2d7be64c 100644 --- a/linphone-app/src/components/other/spell-checker/SpellChecker.hpp +++ b/linphone-app/src/components/other/spell-checker/SpellChecker.hpp @@ -35,6 +35,8 @@ #include #include #include "app/App.hpp" +#include "components/core/CoreManager.hpp" +#include "components/settings/SettingsModel.hpp" #ifdef __linux__ #include @@ -57,7 +59,10 @@ public: ~SpellChecker(); // Common - static QString currentLanguage() { return App::getInstance()->getLocale().name();} + static QString currentLanguage() { + QString overrideLocale = CoreManager::getInstance()->getSettingsModel()->getSpellCheckerOverrideLocale(); + return overrideLocale.isEmpty() ? App::getInstance()->getLocale().name() : overrideLocale; + } Q_INVOKABLE void setTextDocument(QQuickTextDocument *textDocument); Q_INVOKABLE int wordPosition(int x, int y); Q_INVOKABLE bool isWordAtPositionValid(int cursorPosition); diff --git a/linphone-app/src/components/other/spell-checker/SpellCheckerLinux.cpp b/linphone-app/src/components/other/spell-checker/SpellCheckerLinux.cpp index 0308ce25c..a9a56a48f 100644 --- a/linphone-app/src/components/other/spell-checker/SpellCheckerLinux.cpp +++ b/linphone-app/src/components/other/spell-checker/SpellCheckerLinux.cpp @@ -19,8 +19,8 @@ */ -#import "SpellChecker.hpp" -#import +#include "SpellChecker.hpp" +#include #include "app/paths/Paths.hpp" #include #include diff --git a/linphone-app/src/components/other/spell-checker/SpellCheckerMacOsNative.mm b/linphone-app/src/components/other/spell-checker/SpellCheckerMacOsNative.mm index 273072464..0b2d4084b 100644 --- a/linphone-app/src/components/other/spell-checker/SpellCheckerMacOsNative.mm +++ b/linphone-app/src/components/other/spell-checker/SpellCheckerMacOsNative.mm @@ -28,12 +28,15 @@ void SpellChecker::setLanguage() { if ([spellChecker setLanguage:locale.toNSString()]) { [spellChecker updatePanels]; qDebug() << LOG_TAG << "Macos native spell checker Language set to " << locale; + mAvailable = true; } else { qWarning() << LOG_TAG << "Macos native spell checker unable to set language to " << locale; } } bool SpellChecker::isValid(QString word) { + if (!mAvailable) + return true; NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; QString locale = SpellChecker::currentLanguage(); bool isValid = [spellChecker checkSpellingOfString:word.toNSString() startingAt:0 language:locale.toNSString() wrap:NO inSpellDocumentWithTag:0 wordCount:nullptr].length == 0; diff --git a/linphone-app/src/components/other/spell-checker/SpellCheckerWindowsNative.cpp b/linphone-app/src/components/other/spell-checker/SpellCheckerWindowsNative.cpp index 9a761216e..975c497db 100644 --- a/linphone-app/src/components/other/spell-checker/SpellCheckerWindowsNative.cpp +++ b/linphone-app/src/components/other/spell-checker/SpellCheckerWindowsNative.cpp @@ -58,12 +58,13 @@ void SpellChecker::setLanguage() { qWarning() << LOG_TAG << "Windows native spell checker unable to create spell checker"; return; } - qWarning() << LOG_TAG << "Windows native spell checker created for locale" << locale; + qDebug() << LOG_TAG << "Windows native spell checker created for locale" << locale; + mAvailable = true; } bool SpellChecker::isValid(QString word) { - if (mNativeSpellChecker == nullptr) + if (!mAvailable) return true; wchar_t *text = reinterpret_cast(word.data()); IEnumSpellingError* enumSpellingError = nullptr; diff --git a/linphone-app/src/components/settings/SettingsModel.cpp b/linphone-app/src/components/settings/SettingsModel.cpp index 92ab848a7..fc2be1dcb 100644 --- a/linphone-app/src/components/settings/SettingsModel.cpp +++ b/linphone-app/src/components/settings/SettingsModel.cpp @@ -1566,6 +1566,14 @@ void SettingsModel::setSavedScreenshotsFolder (const QString &folder) { emit savedScreenshotsFolderChanged(cleanedFolder); } +QString SettingsModel::getSpellCheckerOverrideLocale() const{ + return Utils::coreStringToAppString(mConfig->getString(UiSection, "spell_checker_override_locale", "")); +} + +bool SettingsModel::getSpellCheckerEnabled() const{ + return mConfig->getBool(UiSection, "spell_checker_enabled", true); +} + // ----------------------------------------------------------------------------- static inline string getLegacySavedCallsFolder (const shared_ptr &config) { diff --git a/linphone-app/src/components/settings/SettingsModel.hpp b/linphone-app/src/components/settings/SettingsModel.hpp index 509b4687c..eb0e00bf7 100644 --- a/linphone-app/src/components/settings/SettingsModel.hpp +++ b/linphone-app/src/components/settings/SettingsModel.hpp @@ -589,6 +589,9 @@ public: int getEmojiFontSize() const; void setEmojiFontSize(const int& size); + QString getSpellCheckerOverrideLocale() const; + bool getSpellCheckerEnabled() const; + QString getSavedScreenshotsFolder () const; void setSavedScreenshotsFolder (const QString &folder);