include/svx/svdobj.hxx | 3 +++ sd/source/core/drawdoc2.cxx | 2 +- sd/source/core/sdpage.cxx | 1 + svx/source/svdraw/svdobj.cxx | 12 ++++++++++++ svx/source/svdraw/svdpage.cxx | 2 ++ 5 files changed, 19 insertions(+), 1 deletion(-)
New commits: commit 03f25bb925eff83ee4633cc1653fc15803b6b6a9 Author: Mohit Marathe <[email protected]> AuthorDate: Thu Nov 20 16:48:45 2025 +0530 Commit: Mohit Marathe <[email protected]> CommitDate: Fri Nov 21 14:00:24 2025 +0100 sd: make previews in canvas page non-deletable Signed-off-by: Mohit Marathe <[email protected]> Change-Id: Ifb395a99858dcb318dc3851ff118c3edaf447d75 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194272 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index 524e57e59f44..471f96490053 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -751,6 +751,8 @@ public: void SetMoveProtect(bool bProt); bool IsMoveProtect() const { return m_bMovProt;} void SetResizeProtect(bool bProt); + bool IsDeleteProtect() const { return m_bDelProt; } + void SetDeleteProtect(bool bProt); bool IsResizeProtect() const { return m_bSizProt;} virtual void SetPrintable(bool isPrintable); virtual bool IsPrintable() const; @@ -900,6 +902,7 @@ protected: // the following flags will be streamed bool m_bMovProt : 1; // if true, the position is protected bool m_bSizProt : 1; // if true, the size is protected + bool m_bDelProt : 1; // if true, object cannot be deleted // If bEmptyPresObj is true, it is a presentation object that has no content yet. // The flag's default value is false. // The management is done by the application. diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx index 77970635602a..12df76453862 100644 --- a/sd/source/core/drawdoc2.cxx +++ b/sd/source/core/drawdoc2.cxx @@ -1716,7 +1716,7 @@ void SdDrawDocument::updatePagePreviewsGrid(SdPage* pPage) } } for (SdrObject* pObject : aToRemove) - pObjList->RemoveObject(pObject->GetOrdNum()); + pObjList->NbcRemoveObject(pObject->GetOrdNum()); // page inserted if (nTotalPreviews < nPageCnt) diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx index 9df568ffb7fe..ebf3ebf0ea3b 100644 --- a/sd/source/core/sdpage.cxx +++ b/sd/source/core/sdpage.cxx @@ -443,6 +443,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, bool bVertical, const ::t pSdrObj->SetMarkProtect(false); pSdrObj->SetResizeProtect(false); pSdrObj->SetMoveProtect(false); + pSdrObj->SetDeleteProtect(true); } break; diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index 88226a6bfa1a..ea7571d4cc6c 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -350,6 +350,7 @@ SdrObject::SdrObject(SdrModel& rSdrModel) m_bSnapRectDirty =true; m_bMovProt =false; m_bSizProt =false; + m_bDelProt =false; m_bNoPrint =false; m_bEmptyPresObj =false; m_bNotVisibleAsMaster=false; @@ -384,6 +385,7 @@ SdrObject::SdrObject(SdrModel& rSdrModel, SdrObject const & rSource) m_bVirtObj =false; m_bSnapRectDirty =true; m_bMovProt =false; + m_bDelProt =false; m_bSizProt =false; m_bNoPrint =false; m_bEmptyPresObj =false; @@ -2695,6 +2697,16 @@ void SdrObject::SetResizeProtect(bool bProt) } } +void SdrObject::SetDeleteProtect(bool bProt) +{ + if (IsDeleteProtect() != bProt) + { + m_bDelProt = bProt; + SetChanged(); + BroadcastObjectChange(); + } +} + bool SdrObject::IsPrintable() const { return !m_bNoPrint; diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx index 755b95c284f2..d7c7358f7f5b 100644 --- a/svx/source/svdraw/svdpage.cxx +++ b/svx/source/svdraw/svdpage.cxx @@ -408,6 +408,8 @@ rtl::Reference<SdrObject> SdrObjList::RemoveObject(size_t nObjNum) const size_t nCount = GetObjCount(); rtl::Reference<SdrObject> pObj=maList[nObjNum]; + if (pObj->IsDeleteProtect()) + return nullptr; RemoveObjectFromContainer(nObjNum); DBG_ASSERT(pObj!=nullptr,"Object to remove not found.");
