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

Ashod Nakashian ashodnakashian at yahoo.com
Wed Jul 15 00:46:27 PDT 2015


 sw/source/core/doc/DocumentStateManager.cxx |    1 +
 sw/source/uibase/app/docsh.cxx              |    2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

New commits:
commit b0fde7a912ff3aa370496802f20895b1158b072c
Author: Ashod Nakashian <ashodnakashian at yahoo.com>
Date:   Sun Jul 5 12:05:26 2015 -0400

    tdf#38837 Reduce power consumption by minimizing idle timers
    
    Both the document statistics- and state-manager have their
    own modified flags. There is a cyclic dependency between the
    the two in that updating the document's statistics also marks
    the document as modified. Of course when a document is edited
    the statistics modified flag is set to trigger an update.
    
    To avoid a perpetual cycle, the statistics manager resets the
    document's modified state to that before setting the new
    statistics. However, this doesn't reset the statistics
    modified flag, which was set when the document was modified
    by setting the new statistics. Hence, the statistics thinks
    there are modifications in the document when there isn't.
    
    This patch is to make DocumentStateManager::ResetModified()
    symmetrical to DocumentStateManager::SetModified() by
    reseting the modified flag of the statistics manager.
    
    The idle CPU drops to nil on unmodified documents after this.
    However, for modified documents the statistics is recalculated
    perpetually until the document is saved. This will need a
    different patch to fix.
    
    Change-Id: Ib5936bc1acbda34fcac6a00ec46eaa31e4363885
    Reviewed-on: https://gerrit.libreoffice.org/16774
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sw/source/core/doc/DocumentStateManager.cxx b/sw/source/core/doc/DocumentStateManager.cxx
index 6015250..ede8ef9 100644
--- a/sw/source/core/doc/DocumentStateManager.cxx
+++ b/sw/source/core/doc/DocumentStateManager.cxx
@@ -65,6 +65,7 @@ void DocumentStateManager::ResetModified()
     //  Bit 1:  -> new state
     sal_IntPtr nCall = mbModified ? 1 : 0;
     mbModified = false;
+    m_rDoc.GetDocumentStatisticsManager().GetDocStat().bModified = false;
     m_rDoc.GetIDocumentUndoRedo().SetUndoNoModifiedPosition();
     if( nCall && m_rDoc.GetOle2Link().IsSet() )
     {
diff --git a/sw/source/uibase/app/docsh.cxx b/sw/source/uibase/app/docsh.cxx
index 2530fa2..7a3d9be 100644
--- a/sw/source/uibase/app/docsh.cxx
+++ b/sw/source/uibase/app/docsh.cxx
@@ -480,7 +480,7 @@ bool SwDocShell::SaveAs( SfxMedium& rMedium )
 
         // Remember and preserve Modified-Flag without calling the Link
         // (for OLE; after Statement from MM)
-        bool bIsModified = m_pDoc->getIDocumentState().IsModified();
+        const bool bIsModified = m_pDoc->getIDocumentState().IsModified();
         m_pDoc->GetIDocumentUndoRedo().LockUndoNoModifiedPosition();
         Link<> aOldOLELnk( m_pDoc->GetOle2Link() );
         m_pDoc->SetOle2Link( Link<>() );


More information about the Libreoffice-commits mailing list