unotools/source/config/pathoptions.cxx |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

New commits:
commit 7f9338f4b8dc1e112d4268868bcc651764969645
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Tue Nov 29 15:01:21 2016 +0100

    Allow extensions to provide color palettes
    
    Until now, .oxt extensions cannot provide additional color palettes (.soc 
files,
    see e.g. Draw's "Format - Area... - Area - Color - Colors - Palette:" 
drop-down
    list).  There are two ways how this feature could be added:
    
    Either add a new file-entry media-type to extensions' META-INF/manifest.xml 
and
    add support for that in the code.
    
    Or leverage the existing code, which reads the configuration set
    /org.openoffice.Office.Paths/Paths/Palette/InternalPaths, where each set 
element
    denotes a directory, and scans those directories for .soc files.  So an
    extension would include an .xcu file adding such a path (using %origin% to
    denote a directory within the .oxt file itself) and a directory with one or 
more
    .soc files.
    
    For simplicity, this commit uses the second way.  The only problem with the
    existing code is that extension configuration data using %origin% is 
rewritten
    to vnd.sun.star.expand URIs which the palette-scanning code does not 
support.
    So extend SvtPathOptions_Impl::GetPath's PATH_PALETTE case to expand such 
URIs.
    (The choice of doing it in SvtPathOptions is somewhat arbitrary; there 
would be
    other, more generic places where it might make sense to do such expansion, 
but
    which would also carry a higher risk of regressions.)
    
    <https://github.com/stbergmann/palette-extension> contains an example of 
such an
    extension (with a LibreOffice-minimal-version of "LibreOffice 5.3", assuming
    this commit will be backported to upcoming LO 5.3).
    
    Some drawbacks of going this way are:
    
    * No control over where extension palettes appear in the palette drop-down
      lists.  (But those lists appear to be sorted in some random order, 
anyway?)
    
    * Commit on future support of the .soc file format (which, however, is XML) 
and
      the /org.openoffice.Office.Paths/Paths/Palette/InternalPaths 
configuration set
      in a backward-compatible way.  (But any other way of implementing this 
feature
      would also need a similar commitment.)
    
    * Somewhat odd, indirect approach where an extension specifies a directory
      filled with .soc files, instead of specifying the .soc files diretly.
    
    * With the current palette-management code, live extension addition/removal 
is
      not immediately reflected in all places that offer palette drop-down 
lists.
      (But this should be fixable, and would be an issue with other approaches,
      too.)
    
    Change-Id: I68b30127d61764d1b5349f1f2af9c712828bee3e
    (cherry picked from commit e2ea7bb3a6b681822a247e8c277694f921c92273)
    Reviewed-on: https://gerrit.libreoffice.org/31501
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/unotools/source/config/pathoptions.cxx 
b/unotools/source/config/pathoptions.cxx
index 7b64c91..d905245 100644
--- a/unotools/source/config/pathoptions.cxx
+++ b/unotools/source/config/pathoptions.cxx
@@ -32,6 +32,7 @@
 #include <unotools/bootstrap.hxx>
 
 #include <unotools/ucbhelper.hxx>
+#include <comphelper/getexpandeduri.hxx>
 #include <comphelper/processfactory.hxx>
 #include <com/sun/star/beans/XFastPropertySet.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
@@ -237,6 +238,22 @@ const OUString& SvtPathOptions_Impl::GetPath( 
SvtPathOptions::Paths ePath )
             osl::FileBase::getSystemPathFromFileURL( aPathValue, aResult );
             aPathValue = aResult;
         }
+        else if (ePath == SvtPathOptions::PATH_PALETTE)
+        {
+            auto ctx = comphelper::getProcessComponentContext();
+            OUStringBuffer buf;
+            for (sal_Int32 i = 0;;)
+            {
+                buf.append(
+                    comphelper::getExpandedUri(
+                        ctx, aPathValue.getToken(0, ';', i)));
+                if (i == -1) {
+                    break;
+                }
+                buf.append(';');
+            }
+            aPathValue = buf.makeStringAndClear();
+        }
 
         m_aPathArray[ ePath ] = aPathValue;
         return m_aPathArray[ ePath ];
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to