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.");

Reply via email to