[Libreoffice-commits] core.git: svx/source sw/source

Jim Raykowski (via logerrit) logerrit at kemper.freedesktop.org
Thu Mar 25 19:29:17 UTC 2021


 svx/source/svdraw/svdedtv.cxx      |   12 +++++++++++
 svx/source/svdraw/svdobj.cxx       |   38 +++++++++++++++++++++++++++++--------
 sw/source/core/frmedt/feshview.cxx |    2 -
 3 files changed, 43 insertions(+), 9 deletions(-)

New commits:
commit 50b731c84cb17d7f05a690d90588e90ee267d1c2
Author:     Jim Raykowski <raykowj at gmail.com>
AuthorDate: Thu Nov 12 13:18:16 2020 -0900
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Mar 25 20:28:30 2021 +0100

    tdf#34828 Give draw object a name when made
    
    For Writer and Calc this patch sets a name to a newly created draw
    object. The name is constructed from the defined singular name of the
    object, followed by a space, followed by the first available whole number
    begining with 1 that will provide name uniqueness.
    
    For Draw/Impress names are not set for an object on creation. Unnamed
    objects have unique names given only in the Navigator tree. The unnamed
    object names shown in the tree are based on the order of shapes in the
    document. This patch does not change any name behavior for Draw/Impress.
    
    Change-Id: I91f31364c8258f7abb5810a5865fefd6b249da03
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105774
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx
index 56cd41c700b1..c49474cf6c20 100644
--- a/svx/source/svdraw/svdedtv.cxx
+++ b/svx/source/svdraw/svdedtv.cxx
@@ -36,6 +36,7 @@
 #include <svx/scene3d.hxx>
 #include <svx/xfillit0.hxx>
 
+#include <com/sun/star/lang/XServiceInfo.hpp>
 
 using namespace com::sun::star;
 
@@ -1002,6 +1003,17 @@ bool SdrEditView::InsertObjectAtView(SdrObject* pObj, SdrPageView& rPV, SdrInser
         AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoNewObject(*pObj));
     }
 
+    css::uno::Reference<lang::XServiceInfo> xServices(GetModel()->getUnoModel(),
+                                                      css::uno::UNO_QUERY);
+    if (xServices->supportsService("com.sun.star.sheet.SpreadsheetDocument") ||
+            xServices->supportsService("com.sun.star.text.TextDocument"))
+    {
+        const bool bUndo(IsUndoEnabled());
+        GetModel()->EnableUndo(false);
+        pObj->MakeNameUnique();
+        GetModel()->EnableUndo(bUndo);
+    }
+
     if (!(nOptions & SdrInsertFlags::DONTMARK)) {
         if (!(nOptions & SdrInsertFlags::ADDMARK)) UnmarkAllObj();
         MarkObj(pObj,&rPV);
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 9413f5152d47..71272cb85a20 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -118,6 +118,9 @@
 #include <libxml/xmlwriter.h>
 #include <memory>
 
+#include <svx/scene3d.hxx>
+#include <rtl/character.hxx>
+
 using namespace ::com::sun::star;
 
 
@@ -3060,6 +3063,22 @@ bool SdrObject::IsTextBox() const
 
 void SdrObject::MakeNameUnique()
 {
+    if (GetName().isEmpty())
+    {
+        if (const E3dScene* pE3dObj = dynamic_cast<const E3dScene*>(this))
+        {
+            SdrObjList* pObjList = pE3dObj->GetSubList();
+            if (pObjList)
+            {
+                SdrObject* pObj0 = pObjList->GetObj(0);
+                if (pObj0)
+                    SetName(pObj0->TakeObjNameSingul());
+            }
+        }
+        else
+            SetName(TakeObjNameSingul());
+    }
+
     std::unordered_set<OUString> aNameSet;
     MakeNameUnique(aNameSet);
 }
@@ -3086,17 +3105,20 @@ void SdrObject::MakeNameUnique(std::unordered_set<OUString>& rNameSet)
         }
     }
 
-    OUString sName(GetName());
-    OUString sRootName(GetName());
-    sal_Int32 index = sName.lastIndexOf("_");
-    if ( index > 0)
-        sRootName = sRootName.copy(0, index);
+    OUString sName(GetName().trim());
+    OUString sRootName(sName);
 
-    sal_uInt32 n = 0;
-    while (rNameSet.find(sName) != rNameSet.end())
+    if (!sName.isEmpty() && rtl::isAsciiDigit(sName[sName.getLength() - 1]))
     {
-        sName = sRootName + "_" + OUString::number(n++);
+        sal_Int32 nPos(sName.getLength() - 1);
+        while (nPos > 0 && rtl::isAsciiDigit(sName[--nPos]));
+        sRootName = sName.copy(0, nPos + 1).trim();
     }
+    else
+        sName += " 1";
+
+    for (sal_uInt32 n = 1; rNameSet.find(sName) != rNameSet.end(); n++)
+        sName = sRootName + " " + OUString::number(n);
     rNameSet.insert(sName);
 
     SetName(sName);
diff --git a/sw/source/core/frmedt/feshview.cxx b/sw/source/core/frmedt/feshview.cxx
index af1a729eb446..749a58439f0d 100644
--- a/sw/source/core/frmedt/feshview.cxx
+++ b/sw/source/core/frmedt/feshview.cxx
@@ -2038,7 +2038,7 @@ bool SwFEShell::ImpEndCreate()
         {
             bool bRestore = GetDoc()->GetIDocumentUndoRedo().DoesDrawUndo();
             GetDoc()->GetIDocumentUndoRedo().DoDrawUndo(false);
-            rSdrObj.SetName(GetUniqueShapeName());
+            rSdrObj.MakeNameUnique();
             GetDoc()->GetIDocumentUndoRedo().DoDrawUndo(bRestore);
         }
 


More information about the Libreoffice-commits mailing list