sd/inc/drawdoc.hxx          |    4 ++--
 sd/qa/unit/misc-tests.cxx   |   24 ++++++++++++++++++++++++
 sd/source/core/drawdoc3.cxx |    4 +++-
 3 files changed, 29 insertions(+), 3 deletions(-)

New commits:
commit 139cffc531277b57bae8e272fef13af00ace5366
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Mon Jul 24 11:34:27 2023 +0200
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Fri Aug 25 14:10:52 2023 +0200

    tdf#39519 - Rename slide if its name is not unique
    
    For instance, if a slide is copied by ctrl + drag and drop (DND_ACTION_COPY)
    
    Change-Id: I1c669c299a38431680ce602922c1e2c7f117a2ab
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154838
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index 50a5e2f09ca3..12814f3717b8 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -346,8 +346,8 @@ public:
         page, or preserve the old name
      */
 
-    SAL_DLLPRIVATE bool InsertBookmarkAsPage(const std::vector<OUString> 
&rBookmarkList,
-                                  std::vector<OUString> *pExchangeList,
+    bool InsertBookmarkAsPage(const std::vector<OUString> &rBookmarkList,
+                              std::vector<OUString> *pExchangeList,
                               bool bLink, bool bReplace, sal_uInt16 nPgPos,
                               bool bNoDialogs, ::sd::DrawDocShell* 
pBookmarkDocSh,
                               bool bCopy, bool bMergeMasterPages,
diff --git a/sd/qa/unit/misc-tests.cxx b/sd/qa/unit/misc-tests.cxx
index e8e34c20c8c2..3cdc212e69db 100644
--- a/sd/qa/unit/misc-tests.cxx
+++ b/sd/qa/unit/misc-tests.cxx
@@ -82,6 +82,7 @@ public:
     void testTdf131033();
     void testTdf129898LayerDrawnInSlideshow();
     void testTdf136956();
+    void testTdf39519();
     void testEncodedTableStyles();
 
     CPPUNIT_TEST_SUITE(SdMiscTest);
@@ -104,6 +105,7 @@ public:
     CPPUNIT_TEST(testTdf131033);
     CPPUNIT_TEST(testTdf129898LayerDrawnInSlideshow);
     CPPUNIT_TEST(testTdf136956);
+    CPPUNIT_TEST(testTdf39519);
     CPPUNIT_TEST(testEncodedTableStyles);
     CPPUNIT_TEST_SUITE_END();
 };
@@ -886,6 +888,28 @@ void SdMiscTest::testTdf136956()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(3), xTable->getRowCount());
 }
 
+void SdMiscTest::testTdf39519()
+{
+    createSdImpressDoc();
+    SdXImpressDocument* pXImpressDocument = 
dynamic_cast<SdXImpressDocument*>(mxComponent.get());
+    CPPUNIT_ASSERT(pXImpressDocument);
+
+    // Change the name of the first page in the newly created document
+    SdDrawDocument* pDoc = pXImpressDocument->GetDoc();
+    SdPage* pPage = static_cast<SdPage*>(pDoc->GetPage(1));
+    pPage->SetName("Test");
+
+    // Insert a bookmark as a new page using the same name
+    std::vector<OUString> aBookmarkList = { "Test" };
+    pDoc->InsertBookmarkAsPage(aBookmarkList, nullptr, false, false, 2, true, 
pDoc->GetDocSh(),
+                               true, false, false);
+
+    // Check if the copied page has a different name
+    SdPage* pCopiedPage = static_cast<SdPage*>(pDoc->GetPage(2));
+    // Without the fix in place, the names of the pages would not be different
+    CPPUNIT_ASSERT(pCopiedPage->GetName() != pPage->GetName());
+}
+
 void SdMiscTest::testEncodedTableStyles()
 {
     // Silence unrelated failure:
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
index 00006fbefd24..357858f46222 100644
--- a/sd/source/core/drawdoc3.cxx
+++ b/sd/source/core/drawdoc3.cxx
@@ -696,7 +696,9 @@ bool SdDrawDocument::InsertBookmarkAsPage(
                     }
                 }
 
-                if( bMustRename )
+                // tdf#39519 - rename page if its name is not unique, e.g., if 
a slide is copied by
+                // ctrl + drag and drop (DND_ACTION_COPY)
+                if (bMustRename || !mpDocSh->IsPageNameUnique(aPgName))
                 {
                     // Page name already in use -> use default name for 
default and
                     // notes page

Reply via email to