desktop/source/lib/init.cxx | 45 ++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-)
New commits: commit a9c45cabdae874f4b1626b2f33dc848367244287 Author: Henry Castro <hcas...@collabora.com> AuthorDate: Tue Jan 17 11:02:13 2023 -0400 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Wed Jan 18 15:45:24 2023 +0000 lok: fix query language status The Calc and Impress return language status as a SfxStringItem, but Writer is a SfxListStringItem. Signed-off-by: Henry Castro <hcas...@collabora.com> Change-Id: I88f77288e422a8f80473f0e33257078cfaa704b8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145675 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 039458f69e22..ec7b82ef086f 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -5408,22 +5408,34 @@ static uno::Any getDocLanguages(LibreOfficeKitDocument* pThis) css::uno::Any aLangStatus; pDispatcher->QueryState(SID_LANGUAGE_STATUS, aLangStatus); - Sequence<OUString> aSeqLang; - if (!(aLangStatus >>= aSeqLang)) - return uno::makeAny(Sequence<lang::Locale>()); + OUString sCurrent; + OUString sKeyboard; + OUString sGuessText; + SvtScriptType eScriptType = SvtScriptType::LATIN | SvtScriptType::ASIAN + | SvtScriptType::COMPLEX; - // (aSeqLang[0] == "Current Language", aSeqLang[1] == "Script Type", - // aSeqLang[2] == "Keyboard Language", aSeqLang[3] == "Guess Text Lang") - if (aSeqLang.getLength() != 4) - return uno::makeAny(Sequence<lang::Locale>()); + Sequence<OUString> aSeqLang; + if (aLangStatus >>= aSeqLang) + { + if (aSeqLang.getLength() == 4) + { + sCurrent = aSeqLang[0]; + eScriptType = static_cast<SvtScriptType>(aSeqLang[1].toInt32()); + sKeyboard = aSeqLang[1]; + sGuessText = aSeqLang[2]; + } + } + else + { + aLangStatus >>= sCurrent; + } LanguageType nLangType; std::set<LanguageType> aLangItems; - SvtScriptType eScriptType = static_cast<SvtScriptType>(aSeqLang[1].toInt32()); - if (!aSeqLang[0].isEmpty()) + if (!sCurrent.isEmpty()) { - nLangType = SvtLanguageTable::GetLanguageType(aSeqLang[0]); + nLangType = SvtLanguageTable::GetLanguageType(sCurrent); if (nLangType != LANGUAGE_DONTKNOW) { aLangItems.insert(nLangType); @@ -5445,9 +5457,9 @@ static uno::Any getDocLanguages(LibreOfficeKitDocument* pThis) aLangItems.insert(nLangType); } - if (!aSeqLang[2].isEmpty()) + if (!sKeyboard.isEmpty()) { - nLangType = SvtLanguageTable::GetLanguageType(aSeqLang[2]); + nLangType = SvtLanguageTable::GetLanguageType(sKeyboard); if (nLangType != LANGUAGE_DONTKNOW && (eScriptType & SvtLanguageOptions::GetScriptTypeOfLanguage(nLangType))) { @@ -5455,7 +5467,7 @@ static uno::Any getDocLanguages(LibreOfficeKitDocument* pThis) } } - if (!aSeqLang[3].isEmpty()) + if (!sGuessText.isEmpty()) { Reference<linguistic2::XLanguageGuessing> xLangGuesser; try @@ -5468,9 +5480,10 @@ static uno::Any getDocLanguages(LibreOfficeKitDocument* pThis) if (xLangGuesser.is()) { - lang::Locale aLocale = xLangGuesser->guessPrimaryLanguage(aSeqLang[3], 0, - aSeqLang[3].getLength()); - nLangType = LanguageTag(aLocale).makeFallback().getLanguageType(); + lang::Locale aLocale = xLangGuesser->guessPrimaryLanguage(sGuessText, 0, + sGuessText.getLength()); + LanguageTag aLanguageTag(aLocale); + nLangType = aLanguageTag.getLanguageType(false); if (nLangType != LANGUAGE_DONTKNOW && (eScriptType & SvtLanguageOptions::GetScriptTypeOfLanguage(nLangType))) {