Blame SOURCES/0001-Resolves-tdf-89905-don-t-copy-palettes-from-shared-t.patch

a9add1
From f47aa0dbb17a998bdeb01036b9fd9ba0b74b8704 Mon Sep 17 00:00:00 2001
a9add1
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
a9add1
Date: Sat, 6 Jun 2015 14:24:46 +0100
a9add1
Subject: [PATCH] Resolves: tdf#89905 don't copy palettes from shared to user
a9add1
a9add1
make this a multi-path element with a shared read-only location
a9add1
and a user read/write location and don't copy the presets, instead
a9add1
just keep them in the shared location
a9add1
a9add1
Now an admin can copy extra palettes into the shared location
a9add1
and they magically appear in the user deployments
a9add1
a9add1
Change-Id: I7585789c0c59941094f6128368df94b834d3c2a2
a9add1
(cherry picked from commit 29202a16d9f1934684c7d0978112849f2a21fe2f)
a9add1
a9add1
Related: tdf#89905 these PalettePath uses appear to really be UserConfigPath
a9add1
a9add1
which is the same path at the moment
a9add1
a9add1
Change-Id: Ifdefa478003a2b5cc5c065b1942194dda1275f5e
a9add1
(cherry picked from commit 2c3bf6bfc244517a0134e320acaa1f720703d8f2)
a9add1
---
a9add1
 cui/source/tabpages/tabarea.cxx                    |  9 ++-
a9add1
 cui/source/tabpages/tabline.cxx                    | 10 +++-
a9add1
 cui/source/tabpages/tpbitmap.cxx                   | 22 ++++++-
a9add1
 cui/source/tabpages/tpcolor.cxx                    | 22 ++++++-
a9add1
 cui/source/tabpages/tpgradnt.cxx                   | 22 ++++++-
a9add1
 cui/source/tabpages/tphatch.cxx                    | 22 ++++++-
a9add1
 cui/source/tabpages/tplnedef.cxx                   | 22 ++++++-
a9add1
 cui/source/tabpages/tplneend.cxx                   | 23 +++++++-
a9add1
 extras/Package_palettes.mk                         |  2 +-
a9add1
 offapi/com/sun/star/util/XPathSettings.idl         |  3 +-
a9add1
 .../registry/data/org/openoffice/Office/Paths.xcu  |  3 +
a9add1
 .../schema/org/openoffice/Office/Common.xcs        |  7 ++-
a9add1
 sd/source/ui/dlg/PhotoAlbumDialog.cxx              |  2 +-
a9add1
 svx/source/sidebar/nbdtmg.cxx                      |  4 +-
a9add1
 svx/source/tbxctrls/PaletteManager.cxx             | 67 +++++++++++++++-------
a9add1
 svx/source/xoutdev/xtable.cxx                      | 54 ++++++++++++-----
a9add1
 16 files changed, 237 insertions(+), 57 deletions(-)
a9add1
a9add1
diff --git a/cui/source/tabpages/tabarea.cxx b/cui/source/tabpages/tabarea.cxx
a9add1
index 7ecc836..1bdaa17 100644
a9add1
--- a/cui/source/tabpages/tabarea.cxx
a9add1
+++ b/cui/source/tabpages/tabarea.cxx
a9add1
@@ -142,7 +142,14 @@ void SvxAreaTabDialog::SavePalettes()
a9add1
 
a9add1
     // save the tables when they have been changed
a9add1
 
a9add1
-    const OUString aPath( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aPath;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aPath = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
 
a9add1
     if( mnHatchingListState & ChangeType::MODIFIED )
a9add1
     {
a9add1
diff --git a/cui/source/tabpages/tabline.cxx b/cui/source/tabpages/tabline.cxx
a9add1
index aa99b2c..6049c8c 100644
a9add1
--- a/cui/source/tabpages/tabline.cxx
a9add1
+++ b/cui/source/tabpages/tabline.cxx
a9add1
@@ -130,8 +130,14 @@ void SvxLineTabDialog::SavePalettes()
a9add1
     }
a9add1
 
a9add1
     // Save the tables when they have been changed
a9add1
-
a9add1
-    const OUString aPath( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aPath;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aPath = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
 
a9add1
     if( nDashListState & ChangeType::MODIFIED )
a9add1
     {
a9add1
diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx
a9add1
index 0d11116..71c23e6 100644
a9add1
--- a/cui/source/tabpages/tpbitmap.cxx
a9add1
+++ b/cui/source/tabpages/tpbitmap.cxx
a9add1
@@ -795,7 +795,16 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickLoadHdl_Impl)
a9add1
         ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
a9add1
         OUString aStrFilterType( "*.sob" );
a9add1
         aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
-        INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+        OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+        OUString aLastDir;
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
+        {
a9add1
+            aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+        }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        INetURLObject aFile(aLastDir);
a9add1
         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
a9add1
 
a9add1
         if ( aDlg.Execute() == ERRCODE_NONE )
a9add1
@@ -875,7 +884,16 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickSaveHdl_Impl)
a9add1
     OUString aStrFilterType( "*.sob" );
a9add1
     aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aFile(aLastDir);
a9add1
     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
a9add1
 
a9add1
     if( !pBitmapList->GetName().isEmpty() )
a9add1
diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx
a9add1
index 94231c5..50b74de 100644
a9add1
--- a/cui/source/tabpages/tpcolor.cxx
a9add1
+++ b/cui/source/tabpages/tpcolor.cxx
a9add1
@@ -142,7 +142,16 @@ IMPL_LINK_NOARG(SvxColorTabPage, ClickLoadHdl_Impl)
a9add1
         OUString aStrFilterType( XPropertyList::GetDefaultExtFilter( meType ) );
a9add1
         aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-        INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+        OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+        OUString aLastDir;
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
+        {
a9add1
+            aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+        }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        INetURLObject aFile(aLastDir);
a9add1
         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
a9add1
 
a9add1
         if ( aDlg.Execute() == ERRCODE_NONE )
a9add1
@@ -202,7 +211,16 @@ IMPL_LINK_NOARG(SvxColorTabPage, ClickSaveHdl_Impl)
a9add1
     OUString aStrFilterType( XPropertyList::GetDefaultExtFilter( meType ) );
a9add1
     aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aFile(aLastDir);
a9add1
     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
a9add1
 
a9add1
     XPropertyListRef pList = GetList();
a9add1
diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx
a9add1
index e737410..380f36a 100644
a9add1
--- a/cui/source/tabpages/tpgradnt.cxx
a9add1
+++ b/cui/source/tabpages/tpgradnt.cxx
a9add1
@@ -655,7 +655,16 @@ IMPL_LINK_NOARG(SvxGradientTabPage, ClickLoadHdl_Impl)
a9add1
         ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
a9add1
         OUString aStrFilterType( "*.sog" );
a9add1
         aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
-        INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+        OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+        OUString aLastDir;
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
+        {
a9add1
+            aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+        }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        INetURLObject aFile(aLastDir);
a9add1
         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
a9add1
 
a9add1
         if( aDlg.Execute() == ERRCODE_NONE )
a9add1
@@ -739,7 +748,16 @@ IMPL_LINK_NOARG(SvxGradientTabPage, ClickSaveHdl_Impl)
a9add1
     OUString aStrFilterType( "*.sog" );
a9add1
     aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aFile(aLastDir);
a9add1
     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
a9add1
 
a9add1
     if( !pGradientList->GetName().isEmpty() )
a9add1
diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx
a9add1
index bad1e71..0060b36 100644
a9add1
--- a/cui/source/tabpages/tphatch.cxx
a9add1
+++ b/cui/source/tabpages/tphatch.cxx
a9add1
@@ -692,7 +692,16 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickLoadHdl_Impl)
a9add1
         ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,  0 );
a9add1
         OUString aStrFilterType( "*.soh" );
a9add1
         aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
-        INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+        OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+        OUString aLastDir;
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
+        {
a9add1
+            aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+        }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        INetURLObject aFile(aLastDir);
a9add1
         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
a9add1
 
a9add1
         if( aDlg.Execute() == ERRCODE_NONE )
a9add1
@@ -765,7 +774,16 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickSaveHdl_Impl)
a9add1
     OUString aStrFilterType( "*.soh" );
a9add1
     aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aFile(aLastDir);
a9add1
     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
a9add1
 
a9add1
     if( !pHatchingList->GetName().isEmpty() )
a9add1
diff --git a/cui/source/tabpages/tplnedef.cxx b/cui/source/tabpages/tplnedef.cxx
a9add1
index 6694a54..38a7c7f 100644
a9add1
--- a/cui/source/tabpages/tplnedef.cxx
a9add1
+++ b/cui/source/tabpages/tplnedef.cxx
a9add1
@@ -761,7 +761,16 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl)
a9add1
         ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
a9add1
         OUString aStrFilterType( "*.sod" );
a9add1
         aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
-        INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+        OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+        OUString aLastDir;
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
+        {
a9add1
+            aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+        }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        INetURLObject aFile(aLastDir);
a9add1
         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
a9add1
 
a9add1
         if( aDlg.Execute() == ERRCODE_NONE )
a9add1
@@ -821,7 +830,16 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickSaveHdl_Impl)
a9add1
     OUString aStrFilterType( "*.sod" );
a9add1
     aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aFile(aLastDir);
a9add1
     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
a9add1
 
a9add1
     if( !pDashList->GetName().isEmpty() )
a9add1
diff --git a/cui/source/tabpages/tplneend.cxx b/cui/source/tabpages/tplneend.cxx
a9add1
index aff55b9..478ab46 100644
a9add1
--- a/cui/source/tabpages/tplneend.cxx
a9add1
+++ b/cui/source/tabpages/tplneend.cxx
a9add1
@@ -573,7 +573,17 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl)
a9add1
         ::sfx2::FileDialogHelper aDlg(com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
a9add1
         OUString aStrFilterType( "*.soe" );
a9add1
         aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
-        INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+
a9add1
+        OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+        OUString aLastDir;
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
+        {
a9add1
+            aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+        }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        INetURLObject aFile(aLastDir);
a9add1
         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
a9add1
 
a9add1
         if( aDlg.Execute() == ERRCODE_NONE )
a9add1
@@ -633,7 +643,16 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickSaveHdl_Impl)
a9add1
     OUString aStrFilterType( "*.soe" );
a9add1
     aDlg.AddFilter( aStrFilterType, aStrFilterType );
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    OUString aPalettePath(SvtPathOptions().GetPalettePath());
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = aPalettePath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aFile(aLastDir);
a9add1
     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
a9add1
 
a9add1
     if( !pLineEndList->GetName().isEmpty() )
a9add1
diff --git a/extras/Package_palettes.mk b/extras/Package_palettes.mk
a9add1
index bc317e2..5cf4c61 100644
a9add1
--- a/extras/Package_palettes.mk
a9add1
+++ b/extras/Package_palettes.mk
a9add1
@@ -9,7 +9,7 @@
a9add1
 
a9add1
 $(eval $(call gb_Package_Package,extras_palettes,$(SRCDIR)/extras/source/palettes))
a9add1
 
a9add1
-$(eval $(call gb_Package_add_files,extras_palettes,$(LIBO_SHARE_PRESETS_FOLDER)/config,\
a9add1
+$(eval $(call gb_Package_add_files,extras_palettes,$(LIBO_SHARE_FOLDER)/palette,\
a9add1
 	arrowhd.soe \
a9add1
 	classic.sog \
a9add1
 	cmyk.soc \
a9add1
diff --git a/offapi/com/sun/star/util/XPathSettings.idl b/offapi/com/sun/star/util/XPathSettings.idl
a9add1
index 5f202a3..d54c122 100644
a9add1
--- a/offapi/com/sun/star/util/XPathSettings.idl
a9add1
+++ b/offapi/com/sun/star/util/XPathSettings.idl
a9add1
@@ -89,7 +89,8 @@ published interface XPathSettings
a9add1
   [attribute] string Module;
a9add1
 
a9add1
   /** This is the path to the palette files *.SOB to *.SOF containing
a9add1
-      user-defined colors and patterns. */
a9add1
+      user-defined colors and patterns. The value can be more than
a9add1
+      one path separated by a semicolon.*/
a9add1
   [attribute] string Palette;
a9add1
 
a9add1
   /** Plugins are saved in these directories. The value can be more than
a9add1
diff --git a/officecfg/registry/data/org/openoffice/Office/Paths.xcu b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
a9add1
index 6d739e6..965a629 100644
a9add1
--- a/officecfg/registry/data/org/openoffice/Office/Paths.xcu
a9add1
+++ b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
a9add1
@@ -124,6 +124,9 @@
a9add1
       </node>
a9add1
     </node>
a9add1
     <node oor:name="Palette" oor:op="fuse" oor:mandatory="true">
a9add1
+      <node oor:name="InternalPaths">
a9add1
+        <node oor:name="$(insturl)/@LIBO_SHARE_FOLDER@/palette" oor:op="fuse"/>
a9add1
+      </node>
a9add1
       <prop oor:name="WritePath">
a9add1
         <value>$(userurl)/config</value>
a9add1
       </prop>
a9add1
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
a9add1
index 0bc0dc8..8922889 100644
a9add1
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
a9add1
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
a9add1
@@ -1642,12 +1642,15 @@
a9add1
           </info>
a9add1
           <value>$(progpath)</value>
a9add1
         </prop>
a9add1
-        <prop oor:name="Palette" oor:type="xs:string" oor:nillable="false">
a9add1
+        <prop oor:name="Palette" oor:type="oor:string-list" oor:nillable="false">
a9add1
           <info>
a9add1
             <desc>Specifies the path to the palette files *.SOB to *.SOF
a9add1
             containing user-defined colors and patterns.</desc>
a9add1
           </info>
a9add1
-          <value>$(userurl)/config</value>
a9add1
+          <value>
a9add1
+            <it>$(insturl)/@LIBO_SHARE_FOLDER@/palette</it>
a9add1
+            <it>$(userurl)/config</it>
a9add1
+          </value>
a9add1
         </prop>
a9add1
         <prop oor:name="Plugin" oor:type="oor:string-list" oor:nillable="false">
a9add1
           <info>
a9add1
diff --git a/sd/source/ui/dlg/PhotoAlbumDialog.cxx b/sd/source/ui/dlg/PhotoAlbumDialog.cxx
a9add1
index d5dcd09..b29ea21 100644
a9add1
--- a/sd/source/ui/dlg/PhotoAlbumDialog.cxx
a9add1
+++ b/sd/source/ui/dlg/PhotoAlbumDialog.cxx
a9add1
@@ -480,7 +480,7 @@ IMPL_LINK_NOARG(SdPhotoAlbumDialog, FileHdl)
a9add1
     // Read configuration
a9add1
     OUString sUrl(officecfg::Office::Impress::Pictures::Path::get());
a9add1
 
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    INetURLObject aFile( SvtPathOptions().GetUserConfigPath() );
a9add1
     if (!sUrl.isEmpty())
a9add1
         aDlg.SetDisplayDirectory(sUrl);
a9add1
     else
a9add1
diff --git a/svx/source/sidebar/nbdtmg.cxx b/svx/source/sidebar/nbdtmg.cxx
a9add1
index 7c7e2c4..9570c2b 100644
a9add1
--- a/svx/source/sidebar/nbdtmg.cxx
a9add1
+++ b/svx/source/sidebar/nbdtmg.cxx
a9add1
@@ -157,7 +157,7 @@ void NBOTypeMgrBase::ImplLoad(const OUString& filename)
a9add1
     bIsLoading = true;
a9add1
     SfxMapUnit      eOldCoreUnit=eCoreUnit;
a9add1
     eCoreUnit = SFX_MAPUNIT_100TH_MM;
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    INetURLObject aFile( SvtPathOptions().GetUserConfigPath() );
a9add1
     aFile.Append( filename);
a9add1
     std::unique_ptr<SvStream> xIStm(::utl::UcbStreamHelper::CreateStream( aFile.GetMainURL( INetURLObject::NO_DECODE ), StreamMode::READ ));
a9add1
     if( xIStm ) {
a9add1
@@ -196,7 +196,7 @@ void NBOTypeMgrBase::ImplStore(const OUString& filename)
a9add1
     if (bIsLoading) return;
a9add1
     SfxMapUnit      eOldCoreUnit=eCoreUnit;
a9add1
     eCoreUnit = SFX_MAPUNIT_100TH_MM;
a9add1
-    INetURLObject aFile( SvtPathOptions().GetPalettePath() );
a9add1
+    INetURLObject aFile( SvtPathOptions().GetUserConfigPath() );
a9add1
     aFile.Append( filename);
a9add1
     std::unique_ptr<SvStream> xOStm(::utl::UcbStreamHelper::CreateStream( aFile.GetMainURL( INetURLObject::NO_DECODE ), StreamMode::WRITE ));
a9add1
     if( xOStm ) {
a9add1
diff --git a/svx/source/tbxctrls/PaletteManager.cxx b/svx/source/tbxctrls/PaletteManager.cxx
a9add1
index 109f934..3334afc 100644
a9add1
--- a/svx/source/tbxctrls/PaletteManager.cxx
a9add1
+++ b/svx/source/tbxctrls/PaletteManager.cxx
a9add1
@@ -27,6 +27,8 @@
a9add1
 #include <svtools/colrdlg.hxx>
a9add1
 #include <vcl/svapp.hxx>
a9add1
 #include <vcl/settings.hxx>
a9add1
+#include <stack>
a9add1
+#include <set>
a9add1
 
a9add1
 PaletteManager::PaletteManager() :
a9add1
     mnMaxRecentColors(Application::GetSettings().GetStyleSettings().GetColorValueSetColumnCount()),
a9add1
@@ -47,31 +49,52 @@ PaletteManager::~PaletteManager()
a9add1
 void PaletteManager::LoadPalettes()
a9add1
 {
a9add1
     maPalettes.clear();
a9add1
-    OUString aPalPath = SvtPathOptions().GetPalettePath();
a9add1
-
a9add1
-    osl::Directory aDir(aPalPath);
a9add1
-    osl::DirectoryItem aDirItem;
a9add1
-    osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName |
a9add1
-                               osl_FileStatus_Mask_FileURL  |
a9add1
-                               osl_FileStatus_Mask_Type     );
a9add1
-    if( aDir.open() == osl::FileBase::E_None )
a9add1
+    OUString aPalPaths = SvtPathOptions().GetPalettePath();
a9add1
+
a9add1
+    std::stack<OUString> aDirs;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aDirs.push(aPalPaths.getToken(0, ';', nIndex));
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    std::set<OUString> aNames;
a9add1
+    //try all entries palette path list user first, then
a9add1
+    //system, ignoring duplicate file names
a9add1
+    while (!aDirs.empty())
a9add1
     {
a9add1
-        while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None )
a9add1
+        OUString aPalPath = aDirs.top();
a9add1
+        aDirs.pop();
a9add1
+
a9add1
+        osl::Directory aDir(aPalPath);
a9add1
+        osl::DirectoryItem aDirItem;
a9add1
+        osl::FileStatus aFileStat( osl_FileStatus_Mask_FileName |
a9add1
+                                   osl_FileStatus_Mask_FileURL  |
a9add1
+                                   osl_FileStatus_Mask_Type     );
a9add1
+        if( aDir.open() == osl::FileBase::E_None )
a9add1
         {
a9add1
-            aDirItem.getFileStatus(aFileStat);
a9add1
-            if(aFileStat.isRegular() || aFileStat.isLink())
a9add1
+            while( aDir.getNextItem(aDirItem) == osl::FileBase::E_None )
a9add1
             {
a9add1
-                OUString aFName = aFileStat.getFileName();
a9add1
-                Palette* pPalette = 0;
a9add1
-                if( aFName.endsWithIgnoreAsciiCase(".gpl") )
a9add1
-                    pPalette = new PaletteGPL( aFileStat.getFileURL(), aFName );
a9add1
-                else if( aFName.endsWithIgnoreAsciiCase(".soc") )
a9add1
-                    pPalette = new PaletteSOC( aFileStat.getFileURL(), aFName );
a9add1
-                else if ( aFName.endsWithIgnoreAsciiCase(".ase") )
a9add1
-                    pPalette = new PaletteASE( aFileStat.getFileURL(), aFName );
a9add1
-
a9add1
-                if( pPalette && pPalette->IsValid() )
a9add1
-                    maPalettes.push_back( pPalette );
a9add1
+                aDirItem.getFileStatus(aFileStat);
a9add1
+                if(aFileStat.isRegular() || aFileStat.isLink())
a9add1
+                {
a9add1
+                    OUString aFName = aFileStat.getFileName();
a9add1
+                    if (aNames.find(aFName) == aNames.end())
a9add1
+                    {
a9add1
+                        Palette* pPalette = 0;
a9add1
+                        if( aFName.endsWithIgnoreAsciiCase(".gpl") )
a9add1
+                            pPalette = new PaletteGPL( aFileStat.getFileURL(), aFName );
a9add1
+                        else if( aFName.endsWithIgnoreAsciiCase(".soc") )
a9add1
+                            pPalette = new PaletteSOC( aFileStat.getFileURL(), aFName );
a9add1
+                        else if ( aFName.endsWithIgnoreAsciiCase(".ase") )
a9add1
+                            pPalette = new PaletteASE( aFileStat.getFileURL(), aFName );
a9add1
+
a9add1
+                        if( pPalette && pPalette->IsValid() )
a9add1
+                            maPalettes.push_back( pPalette );
a9add1
+                        aNames.insert(aFName);
a9add1
+                    }
a9add1
+                }
a9add1
             }
a9add1
         }
a9add1
     }
a9add1
diff --git a/svx/source/xoutdev/xtable.cxx b/svx/source/xoutdev/xtable.cxx
a9add1
index 5e35be9..b3f1416d 100644
a9add1
--- a/svx/source/xoutdev/xtable.cxx
a9add1
+++ b/svx/source/xoutdev/xtable.cxx
a9add1
@@ -25,6 +25,7 @@
a9add1
 #include <svx/xpool.hxx>
a9add1
 #include <svx/svdobj.hxx>
a9add1
 #include <svx/svdpool.hxx>
a9add1
+#include <stack>
a9add1
 
a9add1
 using namespace com::sun::star;
a9add1
 
a9add1
@@ -224,23 +225,41 @@ bool XPropertyList::Load()
a9add1
     if( mbListDirty )
a9add1
     {
a9add1
         mbListDirty = false;
a9add1
+        std::stack<OUString> aDirs;
a9add1
 
a9add1
-        INetURLObject aURL( maPath );
a9add1
-
a9add1
-        if( INetProtocol::NotValid == aURL.GetProtocol() )
a9add1
+        sal_Int32 nIndex = 0;
a9add1
+        do
a9add1
         {
a9add1
-            DBG_ASSERT( maPath.isEmpty(), "invalid URL" );
a9add1
-            return false;
a9add1
+            aDirs.push(maPath.getToken(0, ';', nIndex));
a9add1
         }
a9add1
+        while (nIndex >= 0);
a9add1
+
a9add1
+        //try all entries palette path list working back to front until one
a9add1
+        //succeeds
a9add1
+        while (!aDirs.empty())
a9add1
+        {
a9add1
+            OUString aPath(aDirs.top());
a9add1
+            aDirs.pop();
a9add1
+
a9add1
+            INetURLObject aURL(aPath);
a9add1
+
a9add1
+            if( INetProtocol::NotValid == aURL.GetProtocol() )
a9add1
+            {
a9add1
+                DBG_ASSERT( aPath.isEmpty(), "invalid URL" );
a9add1
+                return false;
a9add1
+            }
a9add1
 
a9add1
-        aURL.Append( maName );
a9add1
+            aURL.Append( maName );
a9add1
 
a9add1
-        if( aURL.getExtension().isEmpty() )
a9add1
-            aURL.setExtension( GetDefaultExt() );
a9add1
+            if( aURL.getExtension().isEmpty() )
a9add1
+                aURL.setExtension( GetDefaultExt() );
a9add1
 
a9add1
-        return SvxXMLXTableImport::load( aURL.GetMainURL( INetURLObject::NO_DECODE ), maReferer,
a9add1
-                                         uno::Reference < embed::XStorage >(),
a9add1
-                                         createInstance(), NULL );
a9add1
+            bool bRet = SvxXMLXTableImport::load(aURL.GetMainURL(INetURLObject::NO_DECODE),
a9add1
+                                             maReferer, uno::Reference < embed::XStorage >(),
a9add1
+                                             createInstance(), NULL );
a9add1
+            if (bRet)
a9add1
+                return bRet;
a9add1
+        }
a9add1
     }
a9add1
     return false;
a9add1
 }
a9add1
@@ -256,11 +275,20 @@ bool XPropertyList::LoadFrom( const uno::Reference < embed::XStorage > &xStorage
a9add1
 
a9add1
 bool XPropertyList::Save()
a9add1
 {
a9add1
-    INetURLObject aURL( maPath );
a9add1
+    //save to the last path in the palette path list
a9add1
+    OUString aLastDir;
a9add1
+    sal_Int32 nIndex = 0;
a9add1
+    do
a9add1
+    {
a9add1
+        aLastDir = maPath.getToken(0, ';', nIndex);
a9add1
+    }
a9add1
+    while (nIndex >= 0);
a9add1
+
a9add1
+    INetURLObject aURL(aLastDir);
a9add1
 
a9add1
     if( INetProtocol::NotValid == aURL.GetProtocol() )
a9add1
     {
a9add1
-        DBG_ASSERT( maPath.isEmpty(), "invalid URL" );
a9add1
+        DBG_ASSERT( aLastDir.isEmpty(), "invalid URL" );
a9add1
         return false;
a9add1
     }
a9add1
 
a9add1
-- 
a9add1
2.4.0
a9add1