[Libreoffice-commits] core.git: sw/source
Stephan Bergmann
sbergman at redhat.com
Fri Aug 22 08:39:43 PDT 2014
sw/source/core/draw/dcontact.cxx | 2 +-
sw/source/core/inc/frame.hxx | 3 +++
sw/source/core/layout/ssfrm.cxx | 2 ++
sw/source/core/layout/wsfrm.cxx | 1 +
4 files changed, 7 insertions(+), 1 deletion(-)
New commits:
commit 4970d562b65d06790b816ff65daef890a7619446
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Fri Aug 22 17:37:15 2014 +0200
Prevent downcast to SwTxtFrm when already in ~SwFrm superclass dtor
...as done in SwAnchoredObject::FindAnchorCharFrm
(sw/source/core/layout/anchoredobject.cxx) during CppunitTest_sw_ooxmlexport5:
SwAnchoredObject::FindAnchorCharFrm
SwAnchoredObject::GetAnchorFrmContainingAnchPos
SwAnchoredObject::FindPageFrmOfAnchor
lcl_NotifyBackgroundOfObj
SwDrawContact::DisconnectFromLayout
SwDrawContact::DisconnectObjFromLayout
SwFrm::Destroy
SwFrm::~SwFrm
SwCntntFrm::~SwCntntFrm
SwTxtFrm::~SwTxtFrm
SwTxtFrm::~SwTxtFrm
SwLayoutFrm::Destroy
SwLayoutFrm::~SwLayoutFrm
SwCellFrm::~SwCellFrm
SwCellFrm::~SwCellFrm
SwLayoutFrm::Destroy
SwLayoutFrm::~SwLayoutFrm
SwRowFrm::~SwRowFrm
SwRowFrm::~SwRowFrm
SwLayoutFrm::Destroy
SwLayoutFrm::~SwLayoutFrm
SwTabFrm::~SwTabFrm
SwTabFrm::~SwTabFrm
SwFlyFrm::DeleteCnt
SwFlyFrm::~SwFlyFrm
SwFlyFreeFrm::~SwFlyFreeFrm
SwFlyAtCntFrm::~SwFlyAtCntFrm
SwFlyAtCntFrm::~SwFlyAtCntFrm
SwLayoutFrm::Destroy
SwLayoutFrm::~SwLayoutFrm
SwBodyFrm::~SwBodyFrm
SwBodyFrm::~SwBodyFrm
SwLayoutFrm::Destroy
SwLayoutFrm::~SwLayoutFrm
SwFtnBossFrm::~SwFtnBossFrm
SwPageFrm::~SwPageFrm
SwPageFrm::~SwPageFrm
SwLayoutFrm::Destroy
SwRootFrm::~SwRootFrm
SwRootFrm::~SwRootFrm
boost::checked_delete<SwRootFrm>
boost::detail::sp_counted_impl_p<SwRootFrm>::dispose
boost::detail::sp_counted_base::release
boost::detail::shared_count::~shared_count
boost::shared_ptr<SwRootFrm>::~shared_ptr
SwViewShell::~SwViewShell
SwCrsrShell::~SwCrsrShell
SwEditShell::~SwEditShell
SwFEShell::~SwFEShell
SwWrtShell::~SwWrtShell
SwWrtShell::~SwWrtShell
SwView::~SwView
SwView::~SwView
SfxViewFrame::ReleaseObjectShell_Impl
SfxViewFrame::~SfxViewFrame
SfxViewFrame::~SfxViewFrame
SfxViewFrame::Close
SfxFrame::DoClose_Impl
SfxBaseController::dispose
(anonymous namespace)::Frame::setComponent
(anonymous namespace)::Frame::close
SfxFrame::DoClose
SfxViewFrame::Notify
SfxBroadcaster::Broadcast
SfxModelListener_Impl::notifyClosing
SfxBaseModel::close
SwXTextDocument::close
SfxBaseModel::dispose
SwXTextDocument::dispose
SwModelTestBase::tearDown
...
Change-Id: I4c00fa8eebf0346a2bad81a9e362cd901555bbf0
diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index ed56e91..1eec8a3 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -1597,7 +1597,7 @@ void SwDrawContact::DisconnectFromLayout( bool _bMoveMasterToInvisibleLayer )
// --> #i36181# - notify background of drawing object
if ( _bMoveMasterToInvisibleLayer &&
!(GetFmt()->GetDoc()->IsInDtor()) &&
- GetAnchorFrm() )
+ GetAnchorFrm() && !GetAnchorFrm()->IsInDtor() )
{
const Rectangle aOldRect( maAnchoredDrawObj.GetObjRectWithSpaces().SVRect() );
lcl_NotifyBackgroundOfObj( *this, *GetMaster(), &aOldRect );
diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx
index 0d9ac84..2f0a19c 100644
--- a/sw/source/core/inc/frame.hxx
+++ b/sw/source/core/inc/frame.hxx
@@ -260,6 +260,7 @@ class SwFrm: public SwClient, public SfxBroadcaster
static SwCache *mpCache;
bool mbIfAccTableShouldDisposing;
+ bool mbInDtor;
// #i65250#
// frame ID is now in general available - used for layout loop control
@@ -846,6 +847,8 @@ public:
virtual ~SwFrm();
+ bool IsInDtor() const { return mbInDtor; }
+
// No inline cause we need the function pointers
long GetTopMargin() const;
long GetBottomMargin() const;
diff --git a/sw/source/core/layout/ssfrm.cxx b/sw/source/core/layout/ssfrm.cxx
index e1cb418..4abedc5 100644
--- a/sw/source/core/layout/ssfrm.cxx
+++ b/sw/source/core/layout/ssfrm.cxx
@@ -338,6 +338,8 @@ Point SwFrm::GetFrmAnchorPos( bool bIgnoreFlysAnchoredAtThisFrame ) const
void SwFrm::Destroy()
{
+ mbInDtor = true;
+
// accessible objects for fly and cell frames have been already disposed
// by the destructors of the derived classes.
if( IsAccessibleFrm() && !(IsFlyFrm() || IsCellFrm()) && GetDep() )
diff --git a/sw/source/core/layout/wsfrm.cxx b/sw/source/core/layout/wsfrm.cxx
index f62a056..3261ff6 100644
--- a/sw/source/core/layout/wsfrm.cxx
+++ b/sw/source/core/layout/wsfrm.cxx
@@ -71,6 +71,7 @@ using namespace ::com::sun::star;
SwFrm::SwFrm( SwModify *pMod, SwFrm* pSib ) :
SwClient( pMod ),
mbIfAccTableShouldDisposing( false ), //A member to identify if the acc table should dispose
+ mbInDtor(false),
mnFrmId( SwFrm::mnLastFrmId++ ),
mpRoot( pSib ? pSib->getRootFrm() : 0 ),
mpUpper( 0 ),
More information about the Libreoffice-commits
mailing list