[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.2' - sw/inc sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Wed Jan 8 11:24:21 UTC 2020


 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 <vmiklos at collabora.com>
AuthorDate: Tue Jan 7 17:26:53 2020 +0100
Commit:     Miklos Vajna <vmiklos at 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 <vmiklos at collabora.com>
    Tested-by: Miklos Vajna <vmiklos at 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 );
 


More information about the Libreoffice-commits mailing list