[Libreoffice-commits] core.git: sw/inc sw/source

Michael Stahl mstahl at redhat.com
Mon Sep 7 13:02:17 PDT 2015


 sw/inc/IDocumentStatistics.hxx                   |    2 +-
 sw/source/core/doc/DocumentStatisticsManager.cxx |    7 +++++--
 sw/source/core/inc/DocumentStatisticsManager.hxx |    2 +-
 sw/source/uibase/app/docsh2.cxx                  |    5 +++--
 4 files changed, 10 insertions(+), 6 deletions(-)

New commits:
commit 5adc8ee343e5c32d30095bc4005b7b022016b745
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Sep 7 21:52:49 2015 +0200

    sw: fix newly created document being modified
    
    After the document is created, an event is dispatched on the main loop
    that calls SfxPickList::Notify(), which modifies document properties.
    
    It tries to prevent setting the document to modified by calling
    SfxObjectShell::EnableSetModified(false), but Writer cunningly outwits
    it by simply having its own independent(?) modified flag that is set
    unconditionally in DocumentStatisticsManager::DocInfoChgd().
    
    Let's assume that if the modified flag shouldn't be modified in
    SfxObjectShell, it shouldn't be modified in DocumentStatisticsManager.
    
    Somehow in 4.4 and 4.3 the same thing was going on, but it didn't result
    in a visibly enabled Save icon in the UI, but with 5.0 it does - cannot
    easily bisect why that changed due to tdf#91383.
    
    Change-Id: Id30fd831eb29910c9fb44ed3031bf8da23586bea

diff --git a/sw/inc/IDocumentStatistics.hxx b/sw/inc/IDocumentStatistics.hxx
index 7cb50ae..9f953d4 100644
--- a/sw/inc/IDocumentStatistics.hxx
+++ b/sw/inc/IDocumentStatistics.hxx
@@ -31,7 +31,7 @@ public:
     /** DocInfo has changed (notify via DocShell):
         make required fields update.
     */
-    virtual void DocInfoChgd() = 0;
+    virtual void DocInfoChgd(bool isEnableSetModified) = 0;
 
     /** Document - Statistics
     */
diff --git a/sw/source/core/doc/DocumentStatisticsManager.cxx b/sw/source/core/doc/DocumentStatisticsManager.cxx
index 4fed190..8525ab1 100644
--- a/sw/source/core/doc/DocumentStatisticsManager.cxx
+++ b/sw/source/core/doc/DocumentStatisticsManager.cxx
@@ -77,11 +77,14 @@ DocumentStatisticsManager::DocumentStatisticsManager( SwDoc& i_rSwdoc ) : m_rDoc
     maStatsUpdateTimer.SetTimeoutHdl( LINK( this, DocumentStatisticsManager, DoIdleStatsUpdate ) );
 }
 
-void DocumentStatisticsManager::DocInfoChgd( )
+void DocumentStatisticsManager::DocInfoChgd(bool const isEnableSetModified)
 {
     m_rDoc.getIDocumentFieldsAccess().GetSysFieldType( RES_DOCINFOFLD )->UpdateFields();
     m_rDoc.getIDocumentFieldsAccess().GetSysFieldType( RES_TEMPLNAMEFLD )->UpdateFields();
-    m_rDoc.getIDocumentState().SetModified();
+    if (isEnableSetModified)
+    {
+        m_rDoc.getIDocumentState().SetModified();
+    }
 }
 
 const SwDocStat& DocumentStatisticsManager::GetDocStat() const
diff --git a/sw/source/core/inc/DocumentStatisticsManager.hxx b/sw/source/core/inc/DocumentStatisticsManager.hxx
index eef46e8..c62170a 100644
--- a/sw/source/core/inc/DocumentStatisticsManager.hxx
+++ b/sw/source/core/inc/DocumentStatisticsManager.hxx
@@ -37,7 +37,7 @@ public:
 
     DocumentStatisticsManager( SwDoc& i_rSwdoc );
 
-    void DocInfoChgd() SAL_OVERRIDE;
+    void DocInfoChgd(bool isEnableSetModified) SAL_OVERRIDE;
     const SwDocStat &GetDocStat() const SAL_OVERRIDE;
     SwDocStat & GetDocStat(); //Non const version of the above, not part of the interface.
     const SwDocStat &GetUpdatedDocStat(bool bCompleteAsync = false, bool bFields = true) SAL_OVERRIDE;
diff --git a/sw/source/uibase/app/docsh2.cxx b/sw/source/uibase/app/docsh2.cxx
index 6a7b55d..110c9cd 100644
--- a/sw/source/uibase/app/docsh2.cxx
+++ b/sw/source/uibase/app/docsh2.cxx
@@ -202,7 +202,7 @@ void SwDocShell::DoFlushDocInfo()
         m_pWrtShell->StartAllAction();
     }
 
-    m_pDoc->getIDocumentStatistics().DocInfoChgd();
+    m_pDoc->getIDocumentStatistics().DocInfoChgd(IsEnableSetModified());
 
     if (m_pWrtShell)
     {
@@ -291,8 +291,9 @@ void SwDocShell::Notify( SfxBroadcaster&, const SfxHint& rHint )
                     EnableSetModified( false );
                 // #i41679#
                 const bool bIsDocModified = m_pDoc->getIDocumentState().IsModified();
+                // TODO: is the ResetModified() below because of only the direct call from DocInfoChgd, or does UpdateFields() set it too?
 
-                m_pDoc->getIDocumentStatistics().DocInfoChgd( );
+                m_pDoc->getIDocumentStatistics().DocInfoChgd(false);
 
                 // #i41679#
                 if ( !bIsDocModified )


More information about the Libreoffice-commits mailing list