Kaydet (Commit) e462a30d authored tarafından David Tardon's avatar David Tardon

fdo#34558 don't crash on undoing text frame removal

Change-Id: I48b95c6c0cbfb2f4c4b09cc90b254b96de40b3e9
üst ea264f0c
......@@ -20,6 +20,7 @@
#ifndef _SVDUNDO_HXX
#define _SVDUNDO_HXX
#include <svl/lstner.hxx>
#include <svl/solar.hrc>
#include <svl/undo.hxx>
#include <tools/gen.hxx>
......@@ -252,9 +253,12 @@ public:
//
//************************************************************
class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj {
class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj, public SfxListener {
bool bOwner;
public:
TYPEINFO();
protected:
SdrObjList* pObjList;
SdrView* pView; // um bei ObjDel, Undo die
......@@ -270,6 +274,9 @@ protected:
void SetView(SdrView* pView1, SdrPageView* pPageView1) { pView=pView1; pPageView=pPageView1; }
bool IsOwner() { return bOwner; }
void SetOwner(bool bNew);
private:
virtual void Notify(SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
};
//************************************************************
......
......@@ -655,6 +655,8 @@ OUString SdrUndoGeoObj::GetComment() const
////////////////////////////////////////////////////////////////////////////////////////////////////
TYPEINIT1(SdrUndoObjList, SfxListener);
SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
: SdrUndoObj(rNewObj),
bOwner(sal_False),
......@@ -667,10 +669,14 @@ SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
} else {
nOrdNum=pObj->GetOrdNum();
}
StartListening(*pObjList->GetModel());
}
SdrUndoObjList::~SdrUndoObjList()
{
EndListening(*pObjList->GetModel());
if (pObj!=NULL && IsOwner())
{
// Attribute have to go back to the regular Pool
......@@ -686,6 +692,20 @@ void SdrUndoObjList::SetOwner(bool bNew)
bOwner = bNew;
}
void SdrUndoObjList::Notify(SfxBroadcaster&, const SfxHint& rHint)
{
const SdrHint* pSdrHint(dynamic_cast<const SdrHint*>(&rHint));
if (pSdrHint)
{
if ((pSdrHint->GetObject() == pObj) && (pSdrHint->GetKind() == HINT_OBJCHG))
{
const sal_uInt32 nNewOrdNum(pObj->GetOrdNum());
if (nNewOrdNum != nOrdNum)
nOrdNum = nNewOrdNum;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void SdrUndoRemoveObj::Undo()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment