include/svx/unopool.hxx              |    6 +++-
 include/svx/unoprov.hxx              |   13 ++-------
 svx/source/unodraw/unopool.cxx       |   16 +++++++++--
 svx/source/unodraw/unoprov.cxx       |   47 +++++++++++++++--------------------
 sw/source/uibase/uno/unodefaults.cxx |    2 -
 5 files changed, 43 insertions(+), 41 deletions(-)

New commits:
commit 13a9d32cd1d6f8f95efbea5f6a85d50159d3baaa
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu Mar 9 14:29:51 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Mar 10 08:31:15 2023 +0000

    simplify initialisation of some pool defaults
    
    Change-Id: I794e528a08a5a76cef1955f5c4f3e594f1e90f4a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148537
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/include/svx/unopool.hxx b/include/svx/unopool.hxx
index 1647375209b1..1f9431f8755d 100644
--- a/include/svx/unopool.hxx
+++ b/include/svx/unopool.hxx
@@ -30,6 +30,10 @@
 class SdrModel;
 class SfxItemPool;
 
+enum class SvxUnoDrawPoolDefaults {
+    Drawing, Writer
+};
+
 /** This class implements the service com.sun.star.drawing.Defaults.
     It works on the SfxItemPool from the given model and the global
     draw object item pool.
@@ -42,7 +46,7 @@ class SVX_DLLPUBLIC SvxUnoDrawPool :    public 
::cppu::OWeakAggObject,
                         public comphelper::PropertySetHelper
 {
 public:
-    SvxUnoDrawPool(SdrModel* pModel, sal_Int32 nServiceId);
+    SvxUnoDrawPool(SdrModel* pModel, SvxUnoDrawPoolDefaults nServiceId);
 
     /** deprecated */
     SvxUnoDrawPool(SdrModel* pModel);
diff --git a/include/svx/unoprov.hxx b/include/svx/unoprov.hxx
index 204b737edd97..fe03bb286dbc 100644
--- a/include/svx/unoprov.hxx
+++ b/include/svx/unoprov.hxx
@@ -95,19 +95,12 @@ public:
  * class SvxPropertySetInfoPool
  */
 
-const sal_Int32 SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS = 0;
-const sal_Int32 SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER = 1;
-const sal_Int32 SVXUNO_SERVICEID_LASTID = 1;
-
 namespace comphelper { class PropertySetInfo; }
 
-class SvxPropertySetInfoPool
+namespace SvxPropertySetInfoPool
 {
-public:
-    UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) static 
rtl::Reference<comphelper::PropertySetInfo> const & getOrCreate( sal_Int32 
nServiceId ) noexcept;
-
-private:
-    static rtl::Reference<comphelper::PropertySetInfo> 
mxInfos[SVXUNO_SERVICEID_LASTID+1];
+    UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) 
rtl::Reference<comphelper::PropertySetInfo> const & getDrawingDefaults() 
noexcept;
+    UNLESS_MERGELIBS(SVXCORE_DLLPUBLIC) 
rtl::Reference<comphelper::PropertySetInfo> const & getWriterDrawingDefaults() 
noexcept;
 };
 
 #endif
diff --git a/svx/source/unodraw/unopool.cxx b/svx/source/unodraw/unopool.cxx
index 59c19c70262d..b6172876152a 100644
--- a/svx/source/unodraw/unopool.cxx
+++ b/svx/source/unodraw/unopool.cxx
@@ -39,15 +39,25 @@
 using namespace ::com::sun::star;
 using namespace ::cppu;
 
-SvxUnoDrawPool::SvxUnoDrawPool(SdrModel* pModel, sal_Int32 nServiceId)
-: PropertySetHelper( SvxPropertySetInfoPool::getOrCreate( nServiceId ) ), 
mpModel( pModel )
+static rtl::Reference<comphelper::PropertySetInfo> const & 
getDefaults(SvxUnoDrawPoolDefaults nServiceId)
+{
+    switch (nServiceId)
+    {
+        case SvxUnoDrawPoolDefaults::Drawing: return 
SvxPropertySetInfoPool::getDrawingDefaults();
+        case SvxUnoDrawPoolDefaults::Writer: return 
SvxPropertySetInfoPool::getWriterDrawingDefaults();
+        default: std::abort();
+    }
+}
+
+SvxUnoDrawPool::SvxUnoDrawPool(SdrModel* pModel, SvxUnoDrawPoolDefaults 
nServiceId)
+: PropertySetHelper( getDefaults(nServiceId) ), mpModel( pModel )
 {
     init();
 }
 
 /* deprecated */
 SvxUnoDrawPool::SvxUnoDrawPool(SdrModel* pModel)
-: PropertySetHelper( SvxPropertySetInfoPool::getOrCreate( 
SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS ) ), mpModel( pModel )
+: PropertySetHelper( SvxPropertySetInfoPool::getDrawingDefaults() ), mpModel( 
pModel )
 {
     init();
 }
diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx
index 139e9d3ac48e..aeb16d9800d9 100644
--- a/svx/source/unodraw/unoprov.cxx
+++ b/svx/source/unodraw/unoprov.cxx
@@ -2045,36 +2045,31 @@ OUString SvxUnogetInternalNameForItem(const sal_uInt16 
nWhich, const OUString& r
 }
 
 
-rtl::Reference<comphelper::PropertySetInfo> const & 
SvxPropertySetInfoPool::getOrCreate( sal_Int32 nServiceId ) noexcept
+rtl::Reference<comphelper::PropertySetInfo> const & 
SvxPropertySetInfoPool::getDrawingDefaults() noexcept
 {
-    SolarMutexGuard aGuard;
-
-    assert( nServiceId <= SVXUNO_SERVICEID_LASTID );
-
-    if( !mxInfos[ nServiceId ].is() )
+    static rtl::Reference<comphelper::PropertySetInfo> xDrawingDefaults = []()
     {
-        mxInfos[nServiceId] = new comphelper::PropertySetInfo();
-
-        switch( nServiceId )
-        {
-        case SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS:
-            mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS]->add( 
ImplGetSvxDrawingDefaultsPropertyMap() );
-            break;
-        case SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER:
-            
mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER]->add( 
ImplGetSvxDrawingDefaultsPropertyMap() );
-            
mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER]->remove( 
UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION );
-            // OD 13.10.2003 #i18732# - add property map for writer item 
'IsFollowingTextFlow'
-            
mxInfos[SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER]->add( 
ImplGetAdditionalWriterDrawingDefaultsPropertyMap() );
-            break;
+        rtl::Reference<comphelper::PropertySetInfo> xTmp = new 
comphelper::PropertySetInfo();
+        xTmp->add( ImplGetSvxDrawingDefaultsPropertyMap() );
+        return xTmp;
+    }();
 
-        default:
-            OSL_FAIL( "unknown service id!" );
-        }
-    }
-
-    return mxInfos[ nServiceId ];
+    return xDrawingDefaults;
 }
 
-rtl::Reference<comphelper::PropertySetInfo> 
SvxPropertySetInfoPool::mxInfos[SVXUNO_SERVICEID_LASTID+1] = { nullptr };
+rtl::Reference<comphelper::PropertySetInfo> const & 
SvxPropertySetInfoPool::getWriterDrawingDefaults() noexcept
+{
+    static rtl::Reference<comphelper::PropertySetInfo> xDrawingDefaults = []()
+    {
+        rtl::Reference<comphelper::PropertySetInfo> xTmp = new 
comphelper::PropertySetInfo();
+        xTmp->add( ImplGetSvxDrawingDefaultsPropertyMap() );
+        xTmp->remove( UNO_NAME_EDIT_PARA_IS_HANGING_PUNCTUATION );
+        // OD 13.10.2003 #i18732# - add property map for writer item 
'IsFollowingTextFlow'
+        xTmp->add( ImplGetAdditionalWriterDrawingDefaultsPropertyMap() );
+        return xTmp;
+    }();
+
+    return xDrawingDefaults;
+}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/uno/unodefaults.cxx 
b/sw/source/uibase/uno/unodefaults.cxx
index 378ddc0b987e..b8545c70954d 100644
--- a/sw/source/uibase/uno/unodefaults.cxx
+++ b/sw/source/uibase/uno/unodefaults.cxx
@@ -25,7 +25,7 @@
 
 SwSvxUnoDrawPool::SwSvxUnoDrawPool(SwDoc& rDoc)
     : SvxUnoDrawPool(rDoc.getIDocumentDrawModelAccess().GetDrawModel(),
-                     SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER)
+                     SvxUnoDrawPoolDefaults::Writer)
     , m_rDoc(rDoc)
 {
 }

Reply via email to