sd/inc/drawdoc.hxx                       |    6 +--
 sd/source/core/drawdoc2.cxx              |   61 +++++++++++++++++++++++--------
 sd/source/ui/sidebar/SlideBackground.cxx |    1 
 3 files changed, 51 insertions(+), 17 deletions(-)

New commits:
commit db9d2546a4cc4efbc57d664d2eb62478caf161b6
Author:     Mohit Marathe <[email protected]>
AuthorDate: Wed Nov 5 17:18:20 2025 +0530
Commit:     Michael Stahl <[email protected]>
CommitDate: Mon Jan 12 14:00:26 2026 +0100

    sd: update Format combobox on switching to a different sized page
    
    Signed-off-by: Mohit Marathe <[email protected]>
    Change-Id: I930d2e1d26609b31dcc32ca6630e89b24bbcaa18
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193458
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196695

diff --git a/sd/source/ui/sidebar/SlideBackground.cxx 
b/sd/source/ui/sidebar/SlideBackground.cxx
index e98e546ff847..3a15e0f178f5 100644
--- a/sd/source/ui/sidebar/SlideBackground.cxx
+++ b/sd/source/ui/sidebar/SlideBackground.cxx
@@ -697,6 +697,7 @@ void SlideBackground::updatePaperSizeBoxSelection()
         Paper ePaper = SvxPaperInfo::GetSvxPaper(pPage->GetSize(), 
MapUnit::Map100thMM);
         mxPaperSizeBox->set_active_id(ePaper);
     }
+    GetBindings()->Invalidate(SID_ATTR_PAGE_SIZE);
 }
 
 SlideBackground::~SlideBackground()
commit 32500246a5a6a6ad3e1b1aab6093759c1e576b88
Author:     Mohit Marathe <[email protected]>
AuthorDate: Tue Oct 21 10:48:17 2025 +0530
Commit:     Michael Stahl <[email protected]>
CommitDate: Mon Jan 12 14:00:18 2026 +0100

    sd: insert or remove the page preview from canvas page
    
    when the corresponding page has been inserted or removed
    
    Signed-off-by: Mohit Marathe <[email protected]>
    Change-Id: I4f9309a77a960814a85f8a015e3719ee7a0623b4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192768
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196694

diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index fdb41267ab66..bb485147e9fb 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -1001,6 +1001,8 @@ public:
         bool bIsPageObj,
         const sal_Int32 nInsertPosition);
 
+    SAL_DLLPRIVATE bool HasCanvasPage() const { return mpCanvasPage != 
nullptr; }
+
     SAL_DLLPRIVATE sal_uInt16 GetOrInsertCanvasPage ();
 
     /** return the document fonts for latin, cjk and ctl according to the 
current
@@ -1139,10 +1141,8 @@ private:
         bool bIsPageBack,
         bool bIsPageObj);
 
-    SAL_DLLPRIVATE bool hasCanvasPage() const { return mpCanvasPage != 
nullptr; }
-
     SAL_DLLPRIVATE void populatePagePreviewsGrid();
-    SAL_DLLPRIVATE void updateCanvasPreviewsGrid();
+    SAL_DLLPRIVATE void updatePagePreviewsGrid(SdPage* pPage);
 
     SAL_DLLPRIVATE virtual void PageListChanged() override;
     SAL_DLLPRIVATE virtual void MasterPageListChanged() override;
diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx
index 19ae5cf93bcd..03f1ceab22f6 100644
--- a/sd/source/core/drawdoc2.cxx
+++ b/sd/source/core/drawdoc2.cxx
@@ -445,21 +445,22 @@ void SdDrawDocument::InsertPage(SdrPage* pPage, 
sal_uInt16 nPos)
 
     FmFormModel::InsertPage(pPage, nPos);
 
-    static_cast<SdPage*>(pPage)->ConnectLink();
+    SdPage* pSdPage = static_cast<SdPage*>(pPage);
+    pSdPage->ConnectLink();
 
     UpdatePageObjectsInNotes(nPos);
 
     if (!bLast)
-        UpdatePageRelativeURLs(static_cast<SdPage*>( pPage ), nPos, 1);
+        UpdatePageRelativeURLs(pSdPage, nPos, 1);
 
-    if (comphelper::LibreOfficeKit::isActive() && 
static_cast<SdPage*>(pPage)->GetPageKind() == PageKind::Standard)
+    if (comphelper::LibreOfficeKit::isActive() && pSdPage->GetPageKind() == 
PageKind::Standard)
     {
         SdXImpressDocument* pDoc = getUnoModel();
         SfxLokHelper::notifyDocumentSizeChangedAllViews(pDoc);
     }
 
-    if (hasCanvasPage())
-        updateCanvasPreviewsGrid();
+    if (HasCanvasPage())
+        updatePagePreviewsGrid(pSdPage);
 }
 
 // Override SfxBaseModel::getUnoModel and return a more concrete type
@@ -475,8 +476,11 @@ void SdDrawDocument::DeletePage(sal_uInt16 nPgNum)
 
     UpdatePageObjectsInNotes(nPgNum);
 
-    if (hasCanvasPage())
-        updateCanvasPreviewsGrid();
+    // if (HasCanvasPage())
+    // {
+    //     SdPage* pPage = static_cast<SdPage*>(GetPage(nPgNum));
+    //     updatePagePreviewsGrid(pPage);
+    // }
 }
 
 // Remove page
@@ -500,8 +504,8 @@ rtl::Reference<SdrPage> 
SdDrawDocument::RemovePage(sal_uInt16 nPgNum)
         SfxLokHelper::notifyDocumentSizeChangedAllViews(pDoc);
     }
 
-    if (hasCanvasPage())
-        updateCanvasPreviewsGrid();
+    if (HasCanvasPage())
+        updatePagePreviewsGrid(pSdPage);
 
     return pPage;
 }
@@ -1456,7 +1460,7 @@ void SdDrawDocument::SetupNewPage (
 
 sal_uInt16 SdDrawDocument::GetOrInsertCanvasPage()
 {
-    if (hasCanvasPage())
+    if (HasCanvasPage())
         return mpCanvasPage->GetPageNum() / 2;
 
     sal_uInt16 nLastPageNum = GetSdPageCount(PageKind::Standard);
@@ -1543,10 +1547,39 @@ void SdDrawDocument::populatePagePreviewsGrid()
     }
 }
 
-void SdDrawDocument::updateCanvasPreviewsGrid()
+void SdDrawDocument::updatePagePreviewsGrid(SdPage* pPage)
 {
-    SdrPage* pPage = mpCanvasPage.get();
-    pPage->ClearSdrObjList();
-    populatePagePreviewsGrid();
+    SdrObjList* pObjList = mpCanvasPage.get();
+    sal_uInt16 nTotalPreviews = 0;
+    sal_uInt16 nPageCnt = GetSdPageCount(PageKind::Standard) - 1; // do not 
count canvas page
+
+    std::vector<SdrObject*> aToRemove;
+    SdrObjListIter aIter(pObjList, SdrIterMode::Flat);
+    for (SdrObject* pObj = aIter.Next(); pObj; pObj = aIter.Next())
+    {
+        if (pObj->GetObjIdentifier() == SdrObjKind::Page)
+        {
+            nTotalPreviews++;
+            SdrPageObj* pPageObj = static_cast<SdrPageObj*>(pObj);
+            if (pPage == pPageObj->GetReferencedPage())
+            {
+                aToRemove.push_back(pObj);
+            }
+        }
+    }
+    for (SdrObject* pObject : aToRemove)
+        pObjList->RemoveObject(pObject->GetOrdNum());
+
+    // page inserted
+    if (nTotalPreviews < nPageCnt)
+    {
+        const sal_uInt16 nPageNum = pPage->GetPageNum();
+        const ::tools::Long nPreviewWidth = pPage->GetWidth() / 5;
+        const ::tools::Long nPreviewHeight = pPage->GetHeight() / 5;
+        const ::tools::Long nX = (mpCanvasPage->GetWidth() - nPreviewWidth) / 
2;
+        const ::tools::Long nY = (mpCanvasPage->GetHeight() - nPreviewHeight) 
/ 2;
+
+        mpCanvasPage->CreatePresObj(PresObjKind::PagePreview, true, 
::tools::Rectangle(Point(nX,nY), Size(nPreviewWidth, nPreviewHeight)), 
OUString(), nPageNum);
+    }
 }
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Reply via email to