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)))
             {

Reply via email to