diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2017-05-05 17:53:02 -0400 |
---|---|---|
committer | Kohei Yoshida <libreoffice@kohei.us> | 2017-05-06 00:53:37 +0200 |
commit | eb35ead64b1371ea27420b57387ff1db0cbbbcf6 (patch) | |
tree | 1d1cc5c806bce608f052e29a0e7fc0a25281d3ef /sc | |
parent | 274ecb49b70b3f01d47546e3b44317946c106042 (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).
Change-Id: I4fddd9a7e08ab55476566db98476794b2fc1eb13
Reviewed-on: https://gerrit.libreoffice.org/37307
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 27 | ||||
-rw-r--r-- | sc/source/ui/view/viewfunc.cxx | 4 |
2 files changed, 25 insertions, 6 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 7225b78eac40..b0eea09405aa 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> @@ -5379,6 +5382,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 @@ -5393,14 +5412,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); - 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 - 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 9c3ff1118dbd..39c0df61a5c2 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -906,6 +906,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 )); |