sw/inc/ndtxt.hxx | 4 +++- sw/inc/node.hxx | 2 +- sw/source/core/docnode/node.cxx | 23 +++++------------------ sw/source/core/docnode/nodes.cxx | 2 +- sw/source/core/txtnode/ndtxt.cxx | 20 ++++++++++++++++++++ 5 files changed, 30 insertions(+), 21 deletions(-)
New commits: commit b75e052d31ec8854cad3bda7d372dcfcd50c9609 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Aug 6 18:06:20 2014 +0200 Call SwTxtNode-specific part of DelFrms while SwTxtNode is still SwTxtNode ...when SwCntntNode::DelFrms is called from ~SwTxtNode -> ~SwCntntNode. * SwCntntNode::DelFrms now needs a flag to distinguish calls from inside ~SwCntntNode from other calls. bIsDisposeAccTable happens to already serve that purpose, so I reused it, but that may be a bad idea from a semantic point of view? * ~SwTxtNode is careful to mimic old behavior and only calls DelFrms_TxtNodePart if GetDepends() is true; no idea whether that's really necessary, though. * Shifting the work done by DelFrms_TxtNodePart from within ~SwCntntNode to before ~SwTxtNode calls ~SwCntntNode hopefully has no negative consequences. Change-Id: I1532b4cfef7fbf9ba82e64b919a08cbefa335421 diff --git a/sw/inc/ndtxt.hxx b/sw/inc/ndtxt.hxx index dfefc47..a46e8bc 100644 --- a/sw/inc/ndtxt.hxx +++ b/sw/inc/ndtxt.hxx @@ -72,7 +72,7 @@ typedef std::set< sal_Int32 > SwSoftPageBreakList; /// SwTxtNode is a paragraph in the document model. class SW_DLLPUBLIC SwTxtNode: public SwCntntNode, public ::sfx2::Metadatable { - + friend class SwCntntNode; /// For creating the first TextNode. friend class SwDoc; ///< CTOR and AppendTxtNode() friend class SwNodes; @@ -181,6 +181,8 @@ class SW_DLLPUBLIC SwTxtNode: public SwCntntNode, public ::sfx2::Metadatable const SwTxtInputFld* GetOverlappingInputFld( const SwTxtAttr& rTxtAttr ) const; + void DelFrms_TxtNodePart(); + public: bool IsWordCountDirty() const; bool IsWrongDirty() const; diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx index 9338608..e7c8c6b 100644 --- a/sw/source/core/docnode/node.cxx +++ b/sw/source/core/docnode/node.cxx @@ -1284,19 +1284,9 @@ void SwCntntNode::DelFrms( bool bIsDisposeAccTable ) delete pFrm; } - if( IsTxtNode() ) + if( bIsDisposeAccTable && IsTxtNode() ) { - ((SwTxtNode*)this)->SetWrong( NULL ); - ((SwTxtNode*)this)->SetWrongDirty( true ); - - ((SwTxtNode*)this)->SetGrammarCheck( NULL ); - ((SwTxtNode*)this)->SetGrammarCheckDirty( true ); - - ((SwTxtNode*)this)->SetSmartTags( NULL ); - ((SwTxtNode*)this)->SetSmartTagDirty( true ); - - ((SwTxtNode*)this)->SetWordCountDirty( true ); - ((SwTxtNode*)this)->SetAutoCompleteWordDirty( true ); + static_cast<SwTxtNode *>(this)->DelFrms_TxtNodePart(); } } diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx index b9c0821..8489f7c 100644 --- a/sw/source/core/txtnode/ndtxt.cxx +++ b/sw/source/core/txtnode/ndtxt.cxx @@ -262,6 +262,11 @@ SwTxtNode::~SwTxtNode() RemoveFromList(); InitSwParaStatistics( false ); + + if (GetDepends()) + { + DelFrms_TxtNodePart(); + } } void SwTxtNode::FileLoadedInitHints() @@ -1309,6 +1314,21 @@ const SwTxtInputFld* SwTxtNode::GetOverlappingInputFld( const SwTxtAttr& rTxtAtt return pTxtInputFld; } +void SwTxtNode::DelFrms_TxtNodePart() +{ + SetWrong( NULL ); + SetWrongDirty( true ); + + SetGrammarCheck( NULL ); + SetGrammarCheckDirty( true ); + + SetSmartTags( NULL ); + SetSmartTagDirty( true ); + + SetWordCountDirty( true ); + SetAutoCompleteWordDirty( true ); +} + SwTxtFld* SwTxtNode::GetFldTxtAttrAt( const sal_Int32 nIndex, const bool bIncludeInputFldAtStart ) const commit 48c90eb75f4610480be28ecad48953143c7f297a Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Aug 6 17:36:25 2014 +0200 SwCntntNode::DelFrms already checks for GetDepends() Change-Id: I9f7ccd372a570dc4dea98983c51419dce83f8be8 diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx index 1628967..9338608 100644 --- a/sw/source/core/docnode/node.cxx +++ b/sw/source/core/docnode/node.cxx @@ -912,8 +912,7 @@ SwCntntNode::~SwCntntNode() { // The base class SwClient of SwFrm excludes itself from the dependency list! // Thus, we need to delete all Frames in the dependency list. - if( GetDepends() ) - DelFrms(false); + DelFrms(false); delete pCondColl; commit 02e462f5b15ff5ca00992349fdbc79689ccb3863 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Aug 6 17:35:26 2014 +0200 Remove unused bNeedDel parameter to SwCntntNode::DelFrms Change-Id: Iedc5e8caafda868db853fdf328fbdc99bbf28e20 diff --git a/sw/inc/node.hxx b/sw/inc/node.hxx index 4de9d18..d58da5c 100644 --- a/sw/inc/node.hxx +++ b/sw/inc/node.hxx @@ -427,7 +427,7 @@ public: Add an input param to identify if acc table should be disposed */ - void DelFrms( bool bNeedDel = false, bool bIsAccTableDispose = true ); + void DelFrms( bool bIsAccTableDispose = true ); /** @return count of elements of node content. Default is 1. There are differences between text node and formula node. */ diff --git a/sw/source/core/docnode/node.cxx b/sw/source/core/docnode/node.cxx index e315529..1628967 100644 --- a/sw/source/core/docnode/node.cxx +++ b/sw/source/core/docnode/node.cxx @@ -913,7 +913,7 @@ SwCntntNode::~SwCntntNode() // The base class SwClient of SwFrm excludes itself from the dependency list! // Thus, we need to delete all Frames in the dependency list. if( GetDepends() ) - DelFrms(true, false); + DelFrms(false); delete pCondColl; @@ -1224,11 +1224,9 @@ void SwCntntNode::MakeFrms( SwCntntNode& rNode ) * Deletes all Views from the Doc for this Node. * The ContentFrames are removed from the corresponding Layout. * - * An input param to identify if the acc table should be disposed. and a - * flag(bNeedDel) to indicate whether to del corresponding frm even in doc - * loading process, + * An input param to identify if the acc table should be disposed. */ -void SwCntntNode::DelFrms( bool /*bNeedDel*/, bool bIsDisposeAccTable ) +void SwCntntNode::DelFrms( bool bIsDisposeAccTable ) { if( !GetDepends() ) return; diff --git a/sw/source/core/docnode/nodes.cxx b/sw/source/core/docnode/nodes.cxx index 169c78f..06375d9 100644 --- a/sw/source/core/docnode/nodes.cxx +++ b/sw/source/core/docnode/nodes.cxx @@ -799,7 +799,7 @@ bool SwNodes::_MoveNodes( const SwNodeRange& aRange, SwNodes & rNodes, //Add special function to text node. { if( bNewFrms && pAktNode->GetCntntNode() ) - ((SwCntntNode*)pAktNode)->DelFrms( false ); + ((SwCntntNode*)pAktNode)->DelFrms(); pAktNode->pStartOfSection = aSttNdStack[ nLevel ]; nInsPos++; aRg.aEnd--; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits