summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorsten Behrens <tbehrens@novell.com>2011-04-29 18:07:19 +0200
committerThorsten Behrens <tbehrens@novell.com>2011-04-29 19:00:48 +0200
commit10c0f7f76f937e911c95174adda5aaa889befc9a (patch)
tree32f4b709a36f6ef1ee8c2a471e6f0bed49959555
parentcca12f114ebd908c424421754bb868bfd5dc5227 (diff)
Applied normalize-template-paths-fix (slightly amended)
Fixes n#512146
-rw-r--r--sfx2/source/doc/doctemplates.cxx35
1 files changed, 35 insertions, 0 deletions
diff --git a/sfx2/source/doc/doctemplates.cxx b/sfx2/source/doc/doctemplates.cxx
index 03897b24531a..dedc88f183b5 100644
--- a/sfx2/source/doc/doctemplates.cxx
+++ b/sfx2/source/doc/doctemplates.cxx
@@ -48,6 +48,7 @@
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#include <com/sun/star/beans/XPropertyContainer.hpp>
#include <com/sun/star/beans/StringPair.hpp>
+#include <com/sun/star/util/XMacroExpander.hpp>
#include <com/sun/star/container/XContainerQuery.hpp>
#include <com/sun/star/document/XTypeDetection.hpp>
#include <com/sun/star/document/XStandaloneDocumentInfo.hpp>
@@ -593,11 +594,45 @@ void SfxDocTplService_Impl::getDirList()
maTemplateDirs = Sequence< OUString >( nCount );
+ uno::Reference< XComponentContext > xCtx;
+ uno::Reference< util::XMacroExpander > xExpander;
+ uno::Reference< XPropertySet > xPropSet( mxFactory, UNO_QUERY );
+ const rtl::OUString aPrefix(
+ RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.expand:" ) );
+
+ if ( xPropSet.is() )
+ {
+ xPropSet->getPropertyValue(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) )
+ >>= xCtx;
+ }
+
+ if ( xCtx.is() )
+ {
+ xCtx->getValueByName(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "/singletons/com.sun.star.util.theMacroExpander" ) ) )
+ >>= xExpander;
+
+ OSL_ENSURE( xExpander.is(),
+ "Unable to obtain macro expander singleton!" );
+ }
+
for ( sal_uInt16 i=0; i<nCount; i++ )
{
aURL.SetSmartProtocol( INET_PROT_FILE );
aURL.SetURL( aDirs.GetToken( i, C_DELIM ) );
maTemplateDirs[i] = aURL.GetMainURL( INetURLObject::NO_DECODE );
+
+ sal_Int32 nIndex = maTemplateDirs[i].indexOf( aPrefix );
+ if ( nIndex != -1 && xExpander.is() )
+ {
+ maTemplateDirs[i] = maTemplateDirs[i].replaceAt(nIndex,
+ aPrefix.getLength(),
+ rtl::OUString());
+ maTemplateDirs[i] = xExpander->expandMacros( maTemplateDirs[i] );
+ }
}
aValue <<= maTemplateDirs;