sw/inc/IDocumentState.hxx | 3 +++ sw/source/core/doc/DocumentStateManager.cxx | 14 ++++++++++++++ sw/source/core/inc/DocumentStateManager.hxx | 5 ++++- sw/source/core/layout/anchoreddrawobject.cxx | 7 ++++--- 4 files changed, 25 insertions(+), 4 deletions(-)
New commits: commit d393039655edf9bb884fc2956674badde59d2326 Author: Caolán McNamara <caol...@redhat.com> Date: Tue Dec 6 15:17:38 2016 +0000 Resolves: rhbz#1401082 gnome hangs opening a certain .docx this seems to be a problem since.... commit 199eb08be994ef968eb38f4966bc27ef1756d382 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Jun 5 16:25:01 2014 +0200 SwAnchoredDrawObject::GetObjBoundRect: avoid SwDoc::SetModified() This is a const method, but it does a const_cast to still resize an object... if that's so, then we should ensure that the "is modified" flag of SwDoc is untouched. CppunitTest_sw_ooxmlimport's testChartSize is a reproducer for this, when shape text is imported as textbox. (note under gtk3 and wayland this isn't as noticable, there use export GDK_BACKEND=x11 to reproduce the freeze effect where even the mouse cursor doesn't move during part of the load) Change-Id: Ic0bd98b032dfe1255d79d8070d50f65fcfa676dd Reviewed-on: https://gerrit.libreoffice.org/31687 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk> diff --git a/sw/inc/IDocumentState.hxx b/sw/inc/IDocumentState.hxx index 6c4ecaa..eeab2ef 100644 --- a/sw/inc/IDocumentState.hxx +++ b/sw/inc/IDocumentState.hxx @@ -49,6 +49,9 @@ public: virtual void SetLoaded() = 0; + virtual bool IsEnableSetModified() const = 0; + virtual void SetEnableSetModified(bool bEnableSetModified) = 0; + protected: virtual ~IDocumentState() {}; }; diff --git a/sw/source/core/doc/DocumentStateManager.cxx b/sw/source/core/doc/DocumentStateManager.cxx index 7b371d1..04a865a 100644 --- a/sw/source/core/doc/DocumentStateManager.cxx +++ b/sw/source/core/doc/DocumentStateManager.cxx @@ -29,6 +29,7 @@ namespace sw DocumentStateManager::DocumentStateManager( SwDoc& i_rSwdoc ) : m_rDoc( i_rSwdoc ), + mbEnableSetModified(true), mbModified(false), mbLoaded(false), mbUpdateExpField(false), @@ -39,6 +40,9 @@ DocumentStateManager::DocumentStateManager( SwDoc& i_rSwdoc ) : void DocumentStateManager::SetModified() { + if (!IsEnableSetModified()) + return; + m_rDoc.GetDocumentLayoutManager().ClearSwLayouterEntries(); mbModified = true; m_rDoc.GetDocumentStatisticsManager().SetDocStatModified( true ); @@ -75,6 +79,16 @@ bool DocumentStateManager::IsModified() const return mbModified; } +bool DocumentStateManager::IsEnableSetModified() const +{ + return mbEnableSetModified; +} + +void DocumentStateManager::SetEnableSetModified(bool bEnableSetModified) +{ + mbEnableSetModified = bEnableSetModified; +} + bool DocumentStateManager::IsInCallModified() const { return mbInCallModified; diff --git a/sw/source/core/inc/DocumentStateManager.hxx b/sw/source/core/inc/DocumentStateManager.hxx index 99b6a86..e79f94b 100644 --- a/sw/source/core/inc/DocumentStateManager.hxx +++ b/sw/source/core/inc/DocumentStateManager.hxx @@ -36,6 +36,8 @@ public: void SetModified() override; void ResetModified() override; bool IsModified() const override; + bool IsEnableSetModified() const override; + void SetEnableSetModified(bool bEnableSetModified) override; bool IsInCallModified() const override; bool IsUpdateExpField() const override; bool IsNewDoc() const override; @@ -50,9 +52,10 @@ private: SwDoc& m_rDoc; + bool mbEnableSetModified; //< FALSE: changing document modification status (temporarily) locked bool mbModified ; //< TRUE: document has changed. bool mbLoaded ; //< TRUE: Doc loaded. - bool mbUpdateExpField ; //< TRUE: Update expression fields. + bool mbUpdateExpField; //< TRUE: Update expression fields. bool mbNewDoc ; //< TRUE: new Doc. bool mbInCallModified; //< TRUE: in Set/Reset-Modified link. }; diff --git a/sw/source/core/layout/anchoreddrawobject.cxx b/sw/source/core/layout/anchoreddrawobject.cxx index c4f7d99..c806f3f 100644 --- a/sw/source/core/layout/anchoreddrawobject.cxx +++ b/sw/source/core/layout/anchoreddrawobject.cxx @@ -660,12 +660,13 @@ const SwRect SwAnchoredDrawObject::GetObjBoundRect() const if ( nTargetWidth != aCurrObjRect.GetWidth( ) || nTargetHeight != aCurrObjRect.GetHeight( ) ) { SwDoc* pDoc = const_cast<SwDoc*>(GetPageFrame()->GetFormat()->GetDoc()); - bool bModified = pDoc->getIDocumentState().IsModified(); + + bool bEnableSetModified = pDoc->getIDocumentState().IsEnableSetModified(); + pDoc->getIDocumentState().SetEnableSetModified(false); const_cast< SdrObject* >( GetDrawObj() )->Resize( aCurrObjRect.TopLeft(), Fraction( nTargetWidth, aCurrObjRect.GetWidth() ), Fraction( nTargetHeight, aCurrObjRect.GetHeight() ), false ); - if (!bModified) - pDoc->getIDocumentState().ResetModified(); + pDoc->getIDocumentState().SetEnableSetModified(bEnableSetModified); } } return GetDrawObj()->GetCurrentBoundRect();
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits