diff --git a/include/svl/languageoptions.hxx b/include/svl/languageoptions.hxx index e780ed4751e5..9fd050dd7dd2 100644 --- a/include/svl/languageoptions.hxx +++ b/include/svl/languageoptions.hxx @@ -77,8 +77,9 @@ namespace SvtLanguageOptions */ namespace SvtSystemLanguageOptions { - bool isCJKKeyboardLayoutInstalled(); -}; +bool isCJKKeyboardLayoutInstalled(); +bool isCTLKeyboardLayoutInstalled(); +} #endif // INCLUDED_SVL_LANGUAGEOPTIONS_HXX diff --git a/svl/source/config/ctloptions.cxx b/svl/source/config/ctloptions.cxx index 21418e80072c..5f0de9d9e00c 100644 --- a/svl/source/config/ctloptions.cxx +++ b/svl/source/config/ctloptions.cxx @@ -20,12 +20,18 @@ #include +#include #include #include +#include #include #include +#include +#include +#include #include #include "itemholder2.hxx" +#include #include using namespace ::com::sun::star; @@ -289,6 +295,49 @@ void SvtCTLOptions_Impl::Load() } } + if (!m_bCTLFontEnabled) + { + SvtScriptType nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage(LANGUAGE_SYSTEM); + //system locale is CTL + bool bAutoEnableCTL = bool(nScriptType & SvtScriptType::COMPLEX); + + if (!bAutoEnableCTL) + { + //windows secondary system locale is CTL + OUString sWin16SystemLocale = officecfg::System::L10N::SystemLocale::get(); + LanguageType eSystemLanguage = LANGUAGE_NONE; + if (!sWin16SystemLocale.isEmpty()) + { + eSystemLanguage + = LanguageTag::convertToLanguageTypeWithFallback(sWin16SystemLocale); + } + + if (eSystemLanguage != LANGUAGE_SYSTEM) + { + SvtScriptType nWinScript + = SvtLanguageOptions::GetScriptTypeOfLanguage(eSystemLanguage); + bAutoEnableCTL = bool(nWinScript & SvtScriptType::COMPLEX); + } + + //CTL keyboard is installed + if (!bAutoEnableCTL) + { + bAutoEnableCTL = SvtSystemLanguageOptions::isCTLKeyboardLayoutInstalled(); + } + } + + if (bAutoEnableCTL) + { + m_bCTLFontEnabled = true; + LanguageType nLanguage = SvtSysLocale().GetLanguageTag().getLanguageType(); + //enable sequence checking for the appropriate languages + m_bCTLSequenceChecking = m_bCTLRestricted = m_bCTLTypeAndReplace + = (MsLangId::needsSequenceChecking(nLanguage) + || MsLangId::needsSequenceChecking(LANGUAGE_SYSTEM)); + Commit(); + } + } + m_bIsLoaded = true; } void SvtCTLOptions_Impl::SetCTLFontEnabled( bool _bEnabled ) diff --git a/svl/source/config/languageoptions.cxx b/svl/source/config/languageoptions.cxx index 6391175c8550..df494ccb42f9 100644 --- a/svl/source/config/languageoptions.cxx +++ b/svl/source/config/languageoptions.cxx @@ -132,6 +132,11 @@ namespace SvtSystemLanguageOptions { return isKeyboardLayoutTypeInstalled(css::i18n::ScriptType::ASIAN); } + + bool isCTLKeyboardLayoutInstalled() + { + return isKeyboardLayoutTypeInstalled(css::i18n::ScriptType::COMPLEX); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */