summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-09-07 21:52:49 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-09-08 08:51:57 +0000
commitda094918215757fa61e969f819576f49b91701ba (patch)
treeb00b4164f94a3e01b89141b239356cdfba98b4e0 /sw
parentd83fc62ada63ea784faeee72a29b414e3efa61b3 (diff)
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 (cherry picked from commit 5adc8ee343e5c32d30095bc4005b7b022016b745) Reviewed-on: https://gerrit.libreoffice.org/18388 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/IDocumentStatistics.hxx2
-rw-r--r--sw/source/core/doc/DocumentStatisticsManager.cxx7
-rw-r--r--sw/source/core/inc/DocumentStatisticsManager.hxx2
-rw-r--r--sw/source/uibase/app/docsh2.cxx5
4 files changed, 10 insertions, 6 deletions
diff --git a/sw/inc/IDocumentStatistics.hxx b/sw/inc/IDocumentStatistics.hxx
index 7cb50ae7e5a9..9f953d485fd9 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 4fed190ea0e8..8525ab117881 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 be1e78a84b35..2ad06cc0f33d 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 d75d1604e91a..166cbeb0d72d 100644
--- a/sw/source/uibase/app/docsh2.cxx
+++ b/sw/source/uibase/app/docsh2.cxx
@@ -207,7 +207,7 @@ void SwDocShell::DoFlushDocInfo()
m_pWrtShell->StartAllAction();
}
- m_pDoc->getIDocumentStatistics().DocInfoChgd();
+ m_pDoc->getIDocumentStatistics().DocInfoChgd(IsEnableSetModified());
if (m_pWrtShell)
{
@@ -296,8 +296,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 )