diff options
Diffstat (limited to 'svx/source/svdraw/svdmrkv.cxx')
-rw-r--r-- | svx/source/svdraw/svdmrkv.cxx | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index ff27728c1d09..e9052ed5d8c2 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -1130,8 +1130,16 @@ void SdrMarkView::CheckMarked() nm--; SdrMark* pM=GetSdrMarkByIndex(nm); SdrObject* pObj=pM->GetMarkedSdrObj(); + // fix crash of #74651, when an object + // is selected and removed by macro + if (pObj == NULL) { + GetMarkedObjectListWriteAccess().DeleteMark(nm); + continue; + } + SdrPageView* pPV=pM->GetPageView(); SdrLayerID nLay=pObj->GetLayer(); + bool bRaus=!pObj->IsInserted(); // Obj deleted? if (!pObj->Is3DObj()) { bRaus=bRaus || pObj->GetPage()!=pPV->GetPage(); // Obj suddenly in different Page or Group @@ -1917,15 +1925,18 @@ const Rectangle& SdrMarkView::GetMarkedObjRect() const for (sal_uIntPtr nm=0; nm<GetMarkedObjectCount(); nm++) { SdrMark* pM=GetSdrMarkByIndex(nm); SdrObject* pO=pM->GetMarkedSdrObj(); - Rectangle aR1(pO->GetSnapRect()); - // apply calc offset to marked object rect - // ( necessary for handles to be displayed in - // correct position ) - if (aRect2.IsEmpty()) aRect2=aR1; - else aRect2.Union( aR1 ); - aR1 += pO->GetGridOffset(); - if (aRect.IsEmpty()) aRect=aR1; - else aRect.Union(aR1); + // fix crash of #74651 + if (pO != NULL) { + Rectangle aR1(pO->GetSnapRect()); + // apply calc offset to marked object rect + // ( necessary for handles to be displayed in + // correct position ) + if (aRect2.IsEmpty()) aRect2=aR1; + else aRect2.Union( aR1 ); + aR1 += pO->GetGridOffset(); + if (aRect.IsEmpty()) aRect=aR1; + else aRect.Union(aR1); + } } ((SdrMarkView*)this)->aMarkedObjRect=aRect; ((SdrMarkView*)this)->aMarkedObjRectNoOffset=aRect2; @@ -2013,7 +2024,7 @@ void SdrMarkView::MarkListHasChanged() sal_Bool bOneEdgeMarked=sal_False; if (GetMarkedObjectCount()==1) { const SdrObject* pObj=GetMarkedObjectByIndex(0); - if (pObj->GetObjInventor()==SdrInventor) { + if ((pObj != NULL) && (pObj->GetObjInventor()==SdrInventor)) { sal_uInt16 nIdent=pObj->GetObjIdentifier(); bOneEdgeMarked=nIdent==OBJ_EDGE; } |