summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2017-05-05 17:53:02 -0400
committerEike Rathke <erack@redhat.com>2017-05-11 00:18:45 +0200
commit5fa3a5cd075bfc6607c76b9be41310a24fec17f2 (patch)
tree544dc047dd0bc21611def6f99ab1c1afe4b5626d
parent6b35505deabbfb9b00d9bc21fa31b95376a0aed0 (diff)
tdf#86001: Pass on the language info from the cell to the engine.
So that it can be used to set the correct language to use to check spelling (or disable it altogether). Reviewed-on: https://gerrit.libreoffice.org/37307 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Kohei Yoshida <libreoffice@kohei.us> (cherry picked from commit eb35ead64b1371ea27420b57387ff1db0cbbbcf6) Conflicts: sc/source/ui/view/gridwin.cxx Change-Id: I4fddd9a7e08ab55476566db98476794b2fc1eb13 Reviewed-on: https://gerrit.libreoffice.org/37308 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
-rw-r--r--sc/source/ui/view/gridwin.cxx27
-rw-r--r--sc/source/ui/view/viewfunc.cxx4
2 files changed, 25 insertions, 6 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 317d1941c1f0..3122880ccf7c 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -30,6 +30,7 @@
#include <editeng/unolingu.hxx>
#include <editeng/langitem.hxx>
#include <editeng/misspellrange.hxx>
+#include <editeng/langitem.hxx>
#include <svx/svdetc.hxx>
#include <editeng/editobj.hxx>
#include <sfx2/dispatch.hxx>
@@ -53,6 +54,8 @@
#include <svx/svdocapt.hxx>
#include <svx/svdpagv.hxx>
+#include <o3tl/make_unique.hxx>
+
#include <com/sun/star/sheet/DataPilotFieldFilter.hpp>
#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
#include <com/sun/star/sheet/DataPilotTableHeaderData.hpp>
@@ -5568,6 +5571,22 @@ bool ScGridWindow::ContinueOnlineSpelling()
{
++nTextCellCount;
+ // NB: For spell-checking, we currently only use the primary
+ // language; not CJK nor CTL.
+ const ScPatternAttr* pPattern = pDoc->GetPattern(nCol, nRow, nTab);
+ LanguageType nCellLang =
+ static_cast<const SvxLanguageItem&>(pPattern->GetItem(ATTR_FONT_LANGUAGE)).GetValue();
+
+ if (nCellLang == LANGUAGE_SYSTEM)
+ nCellLang = Application::GetSettings().GetLanguageTag().getLanguageType(); // never use SYSTEM for spelling
+
+ if (nCellLang == LANGUAGE_NONE)
+ {
+ // No need to spell check this cell.
+ pCell = aIter.GetNext(nCol, nRow);
+ continue;
+ }
+
if (!pEngine)
{
// ScTabEditEngine is needed
@@ -5582,14 +5601,10 @@ bool ScGridWindow::ContinueOnlineSpelling()
uno::Reference<linguistic2::XSpellChecker1> xXSpellChecker1(LinguMgr::GetSpellChecker());
pEngine->SetSpeller(xXSpellChecker1);
+ pEngine->SetDefaultLanguage(ScGlobal::GetEditDefaultLanguage());
}
- const ScPatternAttr* pPattern = pDoc->GetPattern(nCol, nRow, nTab);
- sal_uInt16 nCellLang =
- static_cast<const SvxLanguageItem&>(pPattern->GetItem(ATTR_FONT_LANGUAGE)).GetValue();
- if (nCellLang == LANGUAGE_SYSTEM)
- nCellLang = Application::GetSettings().GetLanguageTag().getLanguageType(); // never use SYSTEM for spelling
- pEngine->SetDefaultLanguage(nCellLang);
+ pEngine->SetDefaultItem(SvxLanguageItem(nCellLang, EE_CHAR_LANGUAGE));
if (eType == CELLTYPE_STRING)
pEngine->SetText(pCell->mpString->getString());
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 0228541fe286..1b5a9b210849 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -904,6 +904,10 @@ void ScViewFunc::ApplyAttributes( const SfxItemSet* pDialogSet,
}
}
+ if (pDialogSet->HasItem(ATTR_FONT_LANGUAGE))
+ // font language has changed. Redo the online spelling.
+ ResetAutoSpell();
+
const SvxBoxItem* pOldOuter = static_cast<const SvxBoxItem*> (&pOldSet->Get( ATTR_BORDER ));
const SvxBoxItem* pNewOuter = static_cast<const SvxBoxItem*> (&pDialogSet->Get( ATTR_BORDER ));
const SvxBoxInfoItem* pOldInner = static_cast<const SvxBoxInfoItem*> (&pOldSet->Get( ATTR_BORDER_INNER ));