sc/source/ui/docshell/docsh4.cxx |   51 +++++++++++++++++++++++++++++++++++----
 sc/source/ui/view/tabview3.cxx   |    2 +
 2 files changed, 49 insertions(+), 4 deletions(-)

New commits:
commit b8bc9518d523cff59e238f1eefc4ce7e7c844196
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Mon Jan 15 13:50:41 2024 -0400
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Fri Jan 26 19:40:36 2024 +0100

    tdf#34142: fix cell language status
    
    Now the status bar will show the current cell
    language instead of the document language.
    
    Change-Id: I8b6d17b37e7c7bd69abd949a901499613f100649
    Signed-off-by: Henry Castro <hcas...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162123
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Jenkins

diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index 9396b59518fe..813d86785a7a 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -2207,16 +2207,59 @@ void ScDocShell::GetState( SfxItemSet &rSet )
 
             case SID_LANGUAGE_STATUS:
                 {
-                    LanguageType eLatin, eCjk, eCtl;
+                    OUString sLanguage;
+                    sal_uInt16 nLangWhich = 0;
+                    LanguageType eLatin = LANGUAGE_DONTKNOW, eCjk = 
LANGUAGE_DONTKNOW,
+                        eCtl = LANGUAGE_DONTKNOW;
+
+                    if (comphelper::LibreOfficeKit::isActive())
+                    {
+                        GetDocument().GetLanguage( eLatin, eCjk, eCtl );
+                        sLanguage = 
SvtLanguageTable::GetLanguageString(eLatin);
 
-                    GetDocument().GetLanguage( eLatin, eCjk, eCtl );
-                    OUString sLanguage = 
SvtLanguageTable::GetLanguageString(eLatin);
-                    if (comphelper::LibreOfficeKit::isActive()) {
                         if (eLatin == LANGUAGE_NONE)
                             sLanguage += ";-";
                         else
                             sLanguage += ";" + 
LanguageTag(eLatin).getBcp47(false);
                     }
+                    else if (ScTabViewShell* pViewShell = GetBestViewShell())
+                    {
+                        ScMarkData aMark = 
pViewShell->GetViewData().GetMarkData();
+                        SCCOL  nCol = pViewShell->GetViewData().GetCurX();
+                        SCROW  nRow = pViewShell->GetViewData().GetCurY();
+                        SCTAB  nTab = pViewShell->GetViewData().GetTabNo();
+
+                        aMark.SetMarkArea(ScRange(nCol, nRow, nTab));
+                        const ScPatternAttr* pSelAttrs = 
GetDocument().GetSelectionPattern(aMark);
+                        if (pSelAttrs)
+                        {
+                            const SfxItemSet& rItemSet = 
pSelAttrs->GetItemSet();
+                            nLangWhich = 
rItemSet.GetPool()->GetWhich(SID_ATTR_CHAR_LANGUAGE);
+                            if (SfxItemState::SET == 
rItemSet.GetItemState(nLangWhich))
+                                eLatin = static_cast<const 
SvxLanguageItem&>(rItemSet.Get(nLangWhich)).GetLanguage();
+
+                            nLangWhich = 
rItemSet.GetPool()->GetWhich(SID_ATTR_CHAR_CJK_LANGUAGE);
+                            if (SfxItemState::SET == 
rItemSet.GetItemState(nLangWhich))
+                                eCjk = static_cast<const 
SvxLanguageItem&>(rItemSet.Get(nLangWhich)).GetLanguage();
+
+                            nLangWhich = 
rItemSet.GetPool()->GetWhich(SID_ATTR_CHAR_CTL_LANGUAGE);
+                            if (SfxItemState::SET == 
rItemSet.GetItemState(nLangWhich))
+                                eCtl = static_cast<const 
SvxLanguageItem&>(rItemSet.Get(nLangWhich)).GetLanguage();
+
+                            if (eLatin != LANGUAGE_NONE && eLatin != 
LANGUAGE_DONTKNOW)
+                                sLanguage = 
SvtLanguageTable::GetLanguageString(eLatin);
+                            if (eCjk != LANGUAGE_NONE && eCjk != 
LANGUAGE_DONTKNOW)
+                                sLanguage = 
SvtLanguageTable::GetLanguageString(eCjk);
+                            if (eCtl != LANGUAGE_NONE && eCtl != 
LANGUAGE_DONTKNOW)
+                                sLanguage = 
SvtLanguageTable::GetLanguageString(eCtl);
+
+                            if (sLanguage.isEmpty())
+                            {
+                                GetDocument().GetLanguage(eLatin, eCjk, eCtl);
+                                sLanguage = 
SvtLanguageTable::GetLanguageString(eLatin);
+                            }
+                        }
+                    }
                     rSet.Put(SfxStringItem(nWhich, sLanguage));
                 }
                 break;
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index fe78ab3e8385..7de940ce24a9 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -621,6 +621,8 @@ void ScTabView::SelectionChanged(bool bFromPaste)
     rBindings.Invalidate( SID_SORT_ASCENDING );
     rBindings.Invalidate( SID_SORT_DESCENDING );
     rBindings.Invalidate( SID_SELECT_UNPROTECTED_CELLS );
+    if (!comphelper::LibreOfficeKit::isActive())
+        rBindings.Invalidate( SID_LANGUAGE_STATUS );
 
     if (aViewData.GetViewShell()->HasAccessibilityObjects())
         
aViewData.GetViewShell()->BroadcastAccessibility(SfxHint(SfxHintId::ScAccCursorChanged));

Reply via email to