summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenry Castro <hcastro@collabora.com>2017-10-13 20:47:29 -0400
committerJan Holesovsky <kendy@collabora.com>2017-10-26 21:07:22 +0200
commit514c93d9741ce4bc12edf38eadb0e268aae80a90 (patch)
tree272cec0e326f63dd6b3d11ad51bc212c207cbda3
parentupdate credits (diff)
downloadcore-514c93d9741ce4bc12edf38eadb0e268aae80a90.tar.gz
core-514c93d9741ce4bc12edf38eadb0e268aae80a90.zip
sd lok: fix spell checking languages in Impress
Change-Id: I133c9b91521fa7f2b5f7e3a47396f7efa31e1a86 Reviewed-on: https://gerrit.libreoffice.org/43382 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Henry Castro <hcastro@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/43388 Reviewed-by: Jan Holesovsky <kendy@collabora.com> Tested-by: Jan Holesovsky <kendy@collabora.com>
-rw-r--r--editeng/source/editeng/impedit5.cxx10
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx21
-rw-r--r--sd/source/ui/docshell/docshel3.cxx17
-rw-r--r--sd/source/ui/docshell/docshell.cxx49
4 files changed, 91 insertions, 6 deletions
diff --git a/editeng/source/editeng/impedit5.cxx b/editeng/source/editeng/impedit5.cxx
index e091a142cec2..826dbd7dc6be 100644
--- a/editeng/source/editeng/impedit5.cxx
+++ b/editeng/source/editeng/impedit5.cxx
@@ -681,6 +681,7 @@ void ImpEditEngine::RemoveCharAttribs( sal_Int32 nPara, sal_uInt16 nWhich, bool
void ImpEditEngine::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet )
{
+ bool bCheckLanguage = false;
ContentNode* pNode = aEditDoc.GetObject( nPara );
if ( !pNode )
@@ -701,7 +702,16 @@ void ImpEditEngine::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet )
InsertUndo(new EditUndoSetParaAttribs(pEditEngine, nPara, pNode->GetContentAttribs().GetItems(), rSet));
}
}
+
+ bCheckLanguage = ( rSet.GetItemState( EE_CHAR_LANGUAGE ) == SfxItemState::SET ) ||
+ ( rSet.GetItemState( EE_CHAR_LANGUAGE_CJK ) == SfxItemState::SET ) ||
+ ( rSet.GetItemState( EE_CHAR_LANGUAGE_CTL ) == SfxItemState::SET );
+
pNode->GetContentAttribs().GetItems().Set( rSet );
+
+ if ( bCheckLanguage && pNode->GetWrongList() )
+ pNode->GetWrongList()->ResetInvalidRange(0, pNode->Len());
+
if ( aStatus.UseCharAttribs() )
pNode->CreateDefFont();
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 46dc5acf7c7c..55d5712fe632 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -31,6 +31,7 @@
#include <sfx2/dispatch.hxx>
#include <sfx2/viewfrm.hxx>
#include <svl/srchitem.hxx>
+#include <svl/slstitm.hxx>
#include <comphelper/lok.hxx>
#include <svx/svdotable.hxx>
#include <svx/svdoutl.hxx>
@@ -96,6 +97,7 @@ public:
void testCommentCallbacks();
void testMultiViewInsertDeletePage();
void testDisableUndoRepair();
+ void testLanguageStatus();
CPPUNIT_TEST_SUITE(SdTiledRenderingTest);
CPPUNIT_TEST(testRegisterCallback);
@@ -133,6 +135,7 @@ public:
CPPUNIT_TEST(testCommentCallbacks);
CPPUNIT_TEST(testMultiViewInsertDeletePage);
CPPUNIT_TEST(testDisableUndoRepair);
+ CPPUNIT_TEST(testLanguageStatus);
CPPUNIT_TEST_SUITE_END();
@@ -1817,6 +1820,24 @@ void SdTiledRenderingTest::testDisableUndoRepair()
}
}
+void SdTiledRenderingTest::testLanguageStatus()
+{
+ // Load the document.
+ comphelper::LibreOfficeKit::setActive();
+ createDoc("dummy.odp");
+ SfxViewShell* pView1 = SfxViewShell::Current();
+ SfxLokHelper::createView();
+ SfxViewShell* pView2 = SfxViewShell::Current();
+ {
+ std::unique_ptr<SfxPoolItem> pItem1;
+ std::unique_ptr<SfxPoolItem> pItem2;
+ pView1->GetViewFrame()->GetBindings().QueryState(SID_LANGUAGE_STATUS, pItem1);
+ pView2->GetViewFrame()->GetBindings().QueryState(SID_LANGUAGE_STATUS, pItem2);
+ CPPUNIT_ASSERT(dynamic_cast< const SfxStringListItem* >(pItem1.get()));
+ CPPUNIT_ASSERT(dynamic_cast< const SfxStringListItem* >(pItem2.get()));
+ }
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SdTiledRenderingTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sd/source/ui/docshell/docshel3.cxx b/sd/source/ui/docshell/docshel3.cxx
index 35f8a38ebe0d..f9c5eb47b5ee 100644
--- a/sd/source/ui/docshell/docshel3.cxx
+++ b/sd/source/ui/docshell/docshel3.cxx
@@ -121,7 +121,8 @@ static void lcl_setLanguage( const SdDrawDocument *pDoc, const OUString &rLangua
for( size_t nObj = 0; nObj < nObjCount; ++nObj )
{
SdrObject *pObj = pPage->GetObj( nObj );
- lcl_setLanguageForObj( pObj, nLang, bLanguageNone );
+ if (pObj->GetObjIdentifier() != OBJ_PAGE)
+ lcl_setLanguageForObj( pObj, nLang, bLanguageNone );
}
}
}
@@ -297,6 +298,7 @@ void DrawDocShell::Execute( SfxRequest& rReq )
const OUString aDocumentLangPrefix("Default_");
const OUString aStrNone("LANGUAGE_NONE");
const OUString aStrResetLangs("RESET_LANGUAGES");
+ SdDrawDocument* pDoc = mpViewShell->GetDoc();
sal_Int32 nPos = -1;
if (-1 != (nPos = aNewLangTxt.indexOf( aDocumentLangPrefix )))
{
@@ -307,11 +309,18 @@ void DrawDocShell::Execute( SfxRequest& rReq )
break;
}
if (aNewLangTxt == aStrNone)
- lcl_setLanguage( mpViewShell->GetDoc(), OUString() );
+ lcl_setLanguage( pDoc, OUString(), true );
else if (aNewLangTxt == aStrResetLangs)
- lcl_setLanguage( mpViewShell->GetDoc(), OUString(), true );
+ lcl_setLanguage( pDoc, OUString() );
else
- lcl_setLanguage( mpViewShell->GetDoc(), aNewLangTxt );
+ lcl_setLanguage( pDoc, aNewLangTxt );
+
+ mpViewShell->GetFrame()->GetBindings().Invalidate( SID_LANGUAGE_STATUS );
+
+ if ( pDoc->GetOnlineSpell() )
+ {
+ pDoc->StartOnlineSpelling();
+ }
}
}
}
diff --git a/sd/source/ui/docshell/docshell.cxx b/sd/source/ui/docshell/docshell.cxx
index f07eb0fbac75..6553474cedf2 100644
--- a/sd/source/ui/docshell/docshell.cxx
+++ b/sd/source/ui/docshell/docshell.cxx
@@ -26,9 +26,13 @@
#include <svx/svxids.hrc>
#include <svl/srchitem.hxx>
#include <svx/srchdlg.hxx>
+#include <svx/svdoutl.hxx>
+#include <svx/svditer.hxx>
#include <editeng/flstitem.hxx>
+#include <editeng/eeitem.hxx>
#include <svl/eitem.hxx>
#include <svl/intitem.hxx>
+#include <svl/slstitm.hxx>
#include <sfx2/printer.hxx>
#include <sfx2/docfile.hxx>
#include <svx/drawitem.hxx>
@@ -36,8 +40,10 @@
#include <svl/whiter.hxx>
#include <svl/itempool.hxx>
#include <svtools/ctrltool.hxx>
+#include <svtools/langtab.hxx>
#include <vcl/graphicfilter.hxx>
#include <comphelper/classids.hxx>
+#include <comphelper/lok.hxx>
#include <svl/cjkoptions.hxx>
#include <svl/visitem.hxx>
@@ -267,8 +273,47 @@ void DrawDocShell::GetState(SfxItemSet &rSet)
break;
case SID_LANGUAGE_STATUS:
{
- // Keeping this enabled for the time being
- rSet.Put(SfxVisibilityItem(nWhich, true));
+ if ( comphelper::LibreOfficeKit::isActive() )
+ {
+ SdrObject* pObj = nullptr;
+ bool bLanguageFound = false;
+ OutlinerParaObject* pParaObj = nullptr;
+ LanguageType eLanguage( LANGUAGE_DONTKNOW );
+ sal_uInt16 nCount = mpDoc->GetPageCount();
+ for ( sal_uInt16 itPage = 0; itPage < nCount && !bLanguageFound; itPage++ )
+ {
+ SdrObjListIter aListIter(*mpDoc->GetPage(itPage), SdrIterMode::DeepWithGroups);
+ while ( aListIter.IsMore() && !bLanguageFound )
+ {
+ pObj = aListIter.Next();
+ if ( pObj )
+ {
+ pParaObj = pObj->GetOutlinerParaObject();
+ if ( pParaObj )
+ {
+ SdrOutliner aOutliner(&mpDoc->GetPool(), OutlinerMode::TextObject);
+ aOutliner.SetText(*pParaObj);
+ eLanguage = aOutliner.GetLanguage(0, 0);
+ bLanguageFound = eLanguage != LANGUAGE_DONTKNOW;
+ }
+ }
+ }
+ }
+
+ if ( eLanguage == LANGUAGE_DONTKNOW )
+ {
+ eLanguage = mpDoc->GetLanguage( EE_CHAR_LANGUAGE );
+ }
+
+ css::uno::Sequence< OUString > aSeq( 1 );
+ aSeq[0] = SvtLanguageTable::GetLanguageString(eLanguage);
+ SfxStringListItem aItem( SID_LANGUAGE_STATUS );
+ aItem.SetStringList( aSeq );
+ rSet.Put(aItem);
+ }
+ else
+ // Keeping this enabled for the time being
+ rSet.Put(SfxVisibilityItem(nWhich, true));
}
break;