desktop/source/lib/init.cxx |   45 ++++++++++++++++++++++++++++----------------
 1 file changed, 29 insertions(+), 16 deletions(-)

New commits:
commit 967c56f7d4c46240a37b2d4dd0a2f577b621f75d
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Tue Jan 17 11:02:13 2023 -0400
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Fri Feb 3 12:32:50 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>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146479
    Tested-by: Jenkins

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index d19d2717ffaa..0e9e2c203fff 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -5399,22 +5399,34 @@ static void getDocLanguages(LibreOfficeKitDocument* 
pThis, uno::Sequence<lang::L
     css::uno::Any aLangStatus;
     pDispatcher->QueryState(SID_LANGUAGE_STATUS, aLangStatus);
 
-    Sequence<OUString> aSeqLang;
-    if (!(aLangStatus >>= aSeqLang))
-        return;
+    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;
+    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);
@@ -5436,9 +5448,9 @@ static void getDocLanguages(LibreOfficeKitDocument* 
pThis, uno::Sequence<lang::L
         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)))
         {
@@ -5446,7 +5458,7 @@ static void getDocLanguages(LibreOfficeKitDocument* 
pThis, uno::Sequence<lang::L
         }
     }
 
-    if (!aSeqLang[3].isEmpty())
+    if (!sGuessText.isEmpty())
     {
         Reference<linguistic2::XLanguageGuessing> xLangGuesser;
         try
@@ -5459,9 +5471,10 @@ static void getDocLanguages(LibreOfficeKitDocument* 
pThis, uno::Sequence<lang::L
 
         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