embeddedobj/source/commonembedding/embedobj.cxx | 34 ++++++++++-------- sfx2/source/view/viewsh.cxx | 4 +- sw/qa/extras/uiwriter/data/ole-save-while-edit.odt |binary sw/qa/extras/uiwriter/uiwriter.cxx | 38 +++++++++++++++++++++ sw/source/uibase/app/docsh.cxx | 8 ++++ 5 files changed, 68 insertions(+), 16 deletions(-)
New commits: commit db175f7b0114fce67b2ae403b572e53fd8aa9f25 Author: Miklos Vajna <[email protected]> AuthorDate: Thu Jul 18 18:03:54 2019 +0200 Commit: Miklos Vajna <[email protected]> CommitDate: Fri Jul 19 12:10:51 2019 +0200 sw: fix missing OLE preview for actively edited OLE object on save Regression from commit 74844277cc2194c9e43f5bd7a6f78a9603da32f3 (disable generation of ole previews in ODF format until after load, 2016-09-13), if the user started an OLE edit in a Writer document, and saved without ending the OLE edit, then svt::EmbeddedObjectRef::UpdateReplacementOnDemand() removed the old replacement image, but no new one was created. Given that save is always an explicit user action (auto-save does not kick in for unmodified documents), restore the permission to update OLE replacement images during save. Do this check in SwDocShell::CalcLayoutForOLEObjects(), as that's OLE-related and is called from all the relevant save code paths (save, save-as, convert to alien formats). Reviewed-on: https://gerrit.libreoffice.org/75867 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins (cherry picked from commit d33cc4f7edc2ce21a9c5a01a7f5e85cfd324c6d9) Conflicts: sw/qa/extras/uiwriter/uiwriter2.cxx sw/source/uibase/app/docsh.cxx Change-Id: Idaad43909cd744a379e713efd70ffd000e2692bc diff --git a/sw/qa/extras/uiwriter/data/ole-save-while-edit.odt b/sw/qa/extras/uiwriter/data/ole-save-while-edit.odt new file mode 100644 index 000000000000..33a2284dd314 Binary files /dev/null and b/sw/qa/extras/uiwriter/data/ole-save-while-edit.odt differ diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 66886a70fa05..735ab11d4518 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -108,6 +108,7 @@ #include <sfx2/watermarkitem.hxx> #include <svtools/htmlout.hxx> #include <test/htmltesttools.hxx> +#include <comphelper/lok.hxx> #include <wrthtml.hxx> namespace @@ -279,6 +280,7 @@ public: void testHtmlCopyImages(); void testTdf116789(); void testTdf117225(); + void testOleSaveWhileEdit(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -420,6 +422,7 @@ public: CPPUNIT_TEST(testHtmlCopyImages); CPPUNIT_TEST(testTdf116789); CPPUNIT_TEST(testTdf117225); + CPPUNIT_TEST(testOleSaveWhileEdit); CPPUNIT_TEST_SUITE_END(); private: @@ -5083,6 +5086,41 @@ void SwUiWriterTest::testTdf117225() CPPUNIT_ASSERT_EQUAL(nExpected, nActual); } +void SwUiWriterTest::testOleSaveWhileEdit() +{ + // Enable LOK mode, otherwise OCommonEmbeddedObject::SwitchStateTo_Impl() will throw when it + // finds out that the test runs headless. + comphelper::LibreOfficeKit::setActive(); + + // Load a document with a Draw doc in it. + SwDoc* pDoc = createDoc("ole-save-while-edit.odt"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + pWrtShell->GotoObj(/*bNext=*/true, GotoObjFlags::Any); + + // Select the frame and switch to the frame shell. + SwView* pView = pDoc->GetDocShell()->GetView(); + pView->StopShellTimer(); + + // Start editing the OLE object. + pWrtShell->LaunchOLEObj(); + + // Save the document without existing the OLE edit. + uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); + xStorable->storeToURL(maTempFile.GetURL(), {}); + + uno::Reference<packages::zip::XZipFileAccess2> xNameAccess + = packages::zip::ZipFileAccess::createWithURL(comphelper::getComponentContext(m_xSFactory), + maTempFile.GetURL()); + // Without the accompanying fix in place, this test would have failed: the OLE object lost its + // replacement on save if the edit was active while saving. + CPPUNIT_ASSERT(xNameAccess->hasByName("ObjectReplacements/Object 1")); + + // Dispose the document while LOK is still active to avoid leaks. + mxComponent->dispose(); + mxComponent.clear(); + comphelper::LibreOfficeKit::setActive(false); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/uibase/app/docsh.cxx b/sw/source/uibase/app/docsh.cxx index 2f1815ab6598..18a079835957 100644 --- a/sw/source/uibase/app/docsh.cxx +++ b/sw/source/uibase/app/docsh.cxx @@ -1211,6 +1211,14 @@ void SwDocShell::CalcLayoutForOLEObjects() if (!m_pWrtShell) return; + if (m_pView && m_pView->GetIPClient()) + { + // We have an active OLE edit: allow link updates, so an up to date replacement graphic can + // be created. + comphelper::EmbeddedObjectContainer& rEmbeddedObjectContainer = getEmbeddedObjectContainer(); + rEmbeddedObjectContainer.setUserAllowsLinkUpdate(true); + } + SwIterator<SwContentNode,SwFormatColl> aIter( *m_pDoc->GetDfltGrfFormatColl() ); for( SwContentNode* pNd = aIter.First(); pNd; pNd = aIter.Next() ) { commit b202fabd2123555fad0ca251ab3e8b7ab7c8d36a Author: Marco Cecchetti <[email protected]> AuthorDate: Mon Feb 26 13:55:21 2018 +0100 Commit: Miklos Vajna <[email protected]> CommitDate: Fri Jul 19 12:10:50 2019 +0200 lok - chart - state switch issue triggers an OLE general error msg box Reviewed-on: https://gerrit.libreoffice.org/50368 Reviewed-by: Jan Holesovsky <[email protected]> Tested-by: Jan Holesovsky <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/50482 Tested-by: Jenkins <[email protected]> Reviewed-by: Marco Cecchetti <[email protected]> (cherry picked from commit a3646b25ac4c976b891d69759035345630c4f1a2) Change-Id: I6addd95d1ad3461b6e21328512cbd1301a36cd19 diff --git a/embeddedobj/source/commonembedding/embedobj.cxx b/embeddedobj/source/commonembedding/embedobj.cxx index c70a7ba40bd6..af0e8bcbec0b 100644 --- a/embeddedobj/source/commonembedding/embedobj.cxx +++ b/embeddedobj/source/commonembedding/embedobj.cxx @@ -43,6 +43,7 @@ #include <com/sun/star/embed/EmbedMisc.hpp> #include <comphelper/processfactory.hxx> #include <cppuhelper/interfacecontainer.hxx> +#include <comphelper/lok.hxx> #include <vcl/svapp.hxx> @@ -318,22 +319,25 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState ) catch( const uno::Exception& ) {} - // if currently another object is UIactive it will be deactivated; usually this will activate the LM of - // the container. Locking the LM will prevent flicker. - xContainerLM->lock(); - xInplaceClient->activatingUI(); - bool bOk = m_xDocHolder->ShowUI( xContainerLM, xContainerDP, aModuleName ); - xContainerLM->unlock(); - - if ( bOk ) - { - m_nObjectState = nNextState; - m_xDocHolder->ResizeHatchWindow(); - } - else + if (!comphelper::LibreOfficeKit::isActive()) { - xInplaceClient->deactivatedUI(); - throw embed::WrongStateException(); //TODO: can't activate UI + // if currently another object is UIactive it will be deactivated; usually this will activate the LM of + // the container. Locking the LM will prevent flicker. + xContainerLM->lock(); + xInplaceClient->activatingUI(); + bool bOk = m_xDocHolder->ShowUI( xContainerLM, xContainerDP, aModuleName ); + xContainerLM->unlock(); + + if ( bOk ) + { + m_nObjectState = nNextState; + m_xDocHolder->ResizeHatchWindow(); + } + else + { + xInplaceClient->deactivatedUI(); + throw embed::WrongStateException(); //TODO: can't activate UI + } } } else commit 5633b42c8991a580ff1fb81177fc204b23763d79 Author: Marco Cecchetti <[email protected]> AuthorDate: Tue Jun 27 23:35:08 2017 +0200 Commit: Miklos Vajna <[email protected]> CommitDate: Fri Jul 19 12:10:50 2019 +0200 lok - add support for in place chart editing This commit add a minimal support for editing chart embedded in a spreadsheet or a text document or a presentation. Graphic objects can be moved and resized, text objects can be edited. Reviewed-on: https://gerrit.libreoffice.org/39342 Tested-by: Jenkins <[email protected]> Reviewed-by: Marco Cecchetti <[email protected]> (cherry picked from commit eba883c8a2ce045fc7bd3848d796ca10b7f4ba51) Change-Id: I8e637dabf328a94bd6bb0e309a245302cff421d8 diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 8fc744e5c033..5541bcaf96f3 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -841,9 +841,11 @@ SfxInPlaceClient* SfxViewShell::GetUIActiveClient() const if ( !pClients ) return nullptr; + bool bIsTiledRendering = comphelper::LibreOfficeKit::isActive(); + for (SfxInPlaceClient* pIPClient : *pClients) { - if ( pIPClient->IsObjectUIActive() ) + if ( pIPClient->IsObjectUIActive() || ( bIsTiledRendering && pIPClient->IsObjectInPlaceActive() ) ) return pIPClient; } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
