sd/source/ui/view/sdview3.cxx | 3 ++- svx/source/svdraw/svdundo.cxx | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-)
New commits: commit c7ac5cb5a1fe531ac5af6c127419231e1d5b1e30 Author: Balazs Varga <[email protected]> AuthorDate: Mon Dec 22 14:59:46 2025 +0100 Commit: Balazs Varga <[email protected]> CommitDate: Sat Dec 27 17:14:28 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/+/196172 Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx index 29ce29193dfe..763e9b338175 100644 --- a/sd/source/ui/view/sdview3.cxx +++ b/sd/source/ui/view/sdview3.cxx @@ -746,7 +746,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(); @@ -786,6 +786,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 cac255f88603..2b3701620827 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
