sd/source/ui/view/sdview3.cxx | 3 ++- svx/source/svdraw/svdundo.cxx | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-)
New commits: commit 863334b176cb4e9b2aefa7f0569bc50d390a9937 Author: Balazs Varga <[email protected]> AuthorDate: Mon Dec 22 14:59:46 2025 +0100 Commit: Xisco Fauli <[email protected]> CommitDate: Wed Dec 24 12:20:18 2025 +0100 tdf#170027 - sd fix crash when undoing shape drag with Alt pressed Do not overwrite original shape during drag&drop with Alt, when we try to drag&drop the shape on the same shape, but create a new shape with new name, same as if we would drag&drop the object in general. Change-Id: I08b2197b3b9755455a165a566eb3452846c0f78e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196097 Reviewed-by: Mike Kaganski <[email protected]> Reviewed-by: Balazs Varga <[email protected]> Tested-by: Jenkins (cherry picked from commit 9f980e021ff1a7613003e5c93ec49a37c5ca3420) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196177 Reviewed-by: Xisco Fauli <[email protected]> diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx index 6d3bc7e4d519..fe66f97a3b12 100644 --- a/sd/source/ui/view/sdview3.cxx +++ b/sd/source/ui/view/sdview3.cxx @@ -764,7 +764,7 @@ bool View::InsertData( const TransferableDataHelper& rDataHelper, SdrPageView* pPV = nullptr; SdrObject* pPickObj2 = PickObj(rPos, getHitTolLog(), pPV); - if( ( mnAction & DND_ACTION_MOVE ) && pPickObj2 && pObj ) + if( ( mnAction & DND_ACTION_MOVE ) && pPickObj2 && pObj && pPickObj2->GetName() != pObj->GetName() ) { // replace object SdrPage* pWorkPage = GetSdrPageView()->GetPage(); @@ -804,6 +804,7 @@ bool View::InsertData( const TransferableDataHelper& rDataHelper, mnAction = DND_ACTION_COPY; } else if( ( mnAction & DND_ACTION_LINK ) && pPickObj2 && pObj && + pPickObj2->GetName() != pObj->GetName() && dynamic_cast< const SdrGrafObj *>( pPickObj2 ) == nullptr && dynamic_cast< const SdrOle2Obj *>( pPickObj2 ) == nullptr ) { diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index 8c0b2f375e06..cc6de3fe1d5c 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -703,6 +703,7 @@ void SdrUndoRemoveObj::Undo() // position of the target object. Point aOwnerAnchorPos(0, 0); + assert(pObjList); // must never be null if (dynamic_cast< const SdrObjGroup* >(pObjList->getSdrObjectFromSdrObjList()) != nullptr) { aOwnerAnchorPos = pObjList->getSdrObjectFromSdrObjList()->GetAnchorPos(); @@ -725,6 +726,7 @@ void SdrUndoRemoveObj::Redo() { ImplUnmarkObject( mxObj.get() ); E3DModifySceneSnapRectUpdater aUpdater(mxObj.get()); + assert(pObjList); // must never be null pObjList->RemoveObject(mxObj->GetOrdNum()); } @@ -747,6 +749,7 @@ void SdrUndoInsertObj::Undo() { ImplUnmarkObject( mxObj.get() ); + assert(pObjList); // must never be null rtl::Reference<SdrObject> pChkObj= pObjList->RemoveObject(mxObj->GetOrdNum()); DBG_ASSERT(pChkObj.get()==mxObj.get(),"UndoInsertObj: RemoveObjNum!=mxObj"); } @@ -762,6 +765,7 @@ void SdrUndoInsertObj::Redo() // <InsertObject(..)>. Needed for correct Redo in Writer. (#i45952#) Point aAnchorPos( 0, 0 ); + assert(pObjList); // must never be null if (dynamic_cast<const SdrObjGroup*>(pObjList->getSdrObjectFromSdrObjList()) != nullptr) { aAnchorPos = mxObj->GetAnchorPos(); @@ -857,12 +861,14 @@ void SdrUndoReplaceObj::Undo() DBG_ASSERT(mxNewObj->IsInserted(),"SdrUndoReplaceObj::Undo(): New object is not inserted!"); ImplUnmarkObject( mxNewObj.get() ); + assert(m_pObjList); // must never be null m_pObjList->ReplaceObject(mxObj.get(), mxNewObj->GetOrdNum()); } void SdrUndoReplaceObj::Redo() { ImplUnmarkObject( mxObj.get() ); + assert(m_pObjList); // must never be null m_pObjList->ReplaceObject(mxNewObj.get(), mxObj->GetOrdNum()); // Trigger PageChangeCall
