sw/inc/doc.hxx | 4 + sw/qa/extras/tiledrendering/data/redline-notification-during-save.odt |binary sw/qa/extras/tiledrendering/tiledrendering.cxx | 21 ++++++++++ sw/source/core/doc/docnew.cxx | 1 sw/source/core/txtnode/ndtxt.cxx | 4 + sw/source/filter/basflt/shellio.cxx | 2 6 files changed, 31 insertions(+), 1 deletion(-)
New commits: commit a32e277b0f9c7d58391d93e4cc1ce6d11fe48878 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Tue Jan 7 17:26:53 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed Jan 8 12:23:52 2020 +0100 sw: don't send LOK notifications about redlines during save SwXMLWriter::Write_() sets redline flags to show insertion and hide deletion, but it resets those flags before the function returns. So LOK notifications for redline changes during save is not useful. Conflicts: sw/qa/extras/tiledrendering/tiledrendering.cxx Change-Id: I4bf963bbe9c7003cbe85ea6c5538be733a3e3cdf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86369 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Miklos Vajna <vmik...@collabora.com> diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 5afcea308e31..83f89c88db79 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -299,6 +299,7 @@ private: frames need deletion. */ bool mbCopyIsMove : 1; //< TRUE: Copy is a hidden Move. bool mbInReading : 1; //< TRUE: Document is in the process of being read. + bool mbInWriting : 1; //< TRUE: Document is in the process of being written. bool mbInMailMerge : 1; //< TRUE: Document is in the process of being written by mail merge. bool mbInXMLImport : 1; //< TRUE: During xml import, attribute portion building is not necessary. bool mbUpdateTOX : 1; //< TRUE: After loading document, update TOX. @@ -948,6 +949,9 @@ public: bool IsInReading() const { return mbInReading; } void SetInReading( bool bNew ) { mbInReading = bNew; } + bool IsInWriting() const { return mbInWriting; } + void SetInWriting(bool bNew) { mbInWriting = bNew; } + bool IsInMailMerge() const { return mbInMailMerge; } void SetInMailMerge( bool bNew ) { mbInMailMerge = bNew; } diff --git a/sw/qa/extras/tiledrendering/data/redline-notification-during-save.odt b/sw/qa/extras/tiledrendering/data/redline-notification-during-save.odt new file mode 100644 index 000000000000..2bd9c814750c Binary files /dev/null and b/sw/qa/extras/tiledrendering/data/redline-notification-during-save.odt differ diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index e07605770c56..e1fdbcc4b97b 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -12,6 +12,7 @@ #include <com/sun/star/frame/DispatchResultState.hpp> #include <com/sun/star/frame/XDispatchResultListener.hpp> +#include <com/sun/star/frame/XStorable.hpp> #include <swmodeltestbase.hxx> #include <test/helper/transferable.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> @@ -120,6 +121,7 @@ public: void testLanguageStatus(); void testDeselectCustomShape(); void testHyperlink(); + void testRedlineNotificationDuringSave(); CPPUNIT_TEST_SUITE(SwTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -182,6 +184,7 @@ public: CPPUNIT_TEST(testLanguageStatus); CPPUNIT_TEST(testDeselectCustomShape); CPPUNIT_TEST(testHyperlink); + CPPUNIT_TEST(testRedlineNotificationDuringSave); CPPUNIT_TEST_SUITE_END(); private: @@ -2487,6 +2490,24 @@ void SwTiledRenderingTest::testHyperlink() } +void SwTiledRenderingTest::testRedlineNotificationDuringSave() +{ + // Load a document with redlines which are hidden at a layout level. + // It's an empty document, just settings.xml and content.xml are custom. + comphelper::LibreOfficeKit::setActive(); + SwXTextDocument* pXTextDocument = createDoc("redline-notification-during-save.odt"); + SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell(); + pWrtShell->GetSfxViewShell()->registerLibreOfficeKitViewCallback(&SwTiledRenderingTest::callback, this); + + // Save the document. + utl::MediaDescriptor aMediaDescriptor; + aMediaDescriptor["FilterName"] <<= OUString("writer8"); + uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have never returned due to an infinite + // loop while sending not needed LOK notifications for redline changes during save. + xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList()); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx index 421d49bac9a3..b176293ef3ff 100644 --- a/sw/source/core/doc/docnew.cxx +++ b/sw/source/core/doc/docnew.cxx @@ -262,6 +262,7 @@ SwDoc::SwDoc() mbDtor(false), mbCopyIsMove(false), mbInReading(false), + mbInWriting(false), mbInMailMerge(false), mbInXMLImport(false), mbUpdateTOX(false), diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index c83c5f5dfc55..770200c17e20 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -1544,7 +1544,9 @@ void SwTextNode::Update( } // Inform LOK clients about change in position of redlines (if any) - if (comphelper::LibreOfficeKit::isActive()) + // Don't emit notifications during save: redline flags are temporarily changed during save, but + // it's not useful to let clients know about such changes. + if (comphelper::LibreOfficeKit::isActive() && !GetDoc()->IsInWriting()) { const SwRedlineTable& rTable = GetDoc()->getIDocumentRedlineAccess().GetRedlineTable(); for (SwRedlineTable::size_type nRedlnPos = 0; nRedlnPos < rTable.size(); ++nRedlnPos) diff --git a/sw/source/filter/basflt/shellio.cxx b/sw/source/filter/basflt/shellio.cxx index dcbe320bd0af..dddfdd4c4c8a 100644 --- a/sw/source/filter/basflt/shellio.cxx +++ b/sw/source/filter/basflt/shellio.cxx @@ -864,6 +864,7 @@ ErrCode SwWriter::Write( WriterRef const & rxWriter, const OUString* pRealFileNa const bool bOrigPurgeOle = pOutDoc->getIDocumentSettingAccess().get(DocumentSettingId::PURGE_OLE); pOutDoc->getIDocumentSettingAccess().set(DocumentSettingId::PURGE_OLE, false); + pOutDoc->SetInWriting(true); ErrCode nError = ERRCODE_NONE; if( pMedium ) nError = rxWriter->Write( *pPam, *pMedium, pRealFileName ); @@ -871,6 +872,7 @@ ErrCode SwWriter::Write( WriterRef const & rxWriter, const OUString* pRealFileNa nError = rxWriter->Write( *pPam, *pStrm, pRealFileName ); else if( xStg.is() ) nError = rxWriter->Write( *pPam, xStg, pRealFileName ); + pOutDoc->SetInWriting(false); pOutDoc->getIDocumentSettingAccess().set(DocumentSettingId::PURGE_OLE, bOrigPurgeOle ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits