diff options
author | Thorsten Behrens <tbehrens@novell.com> | 2011-04-29 18:07:19 +0200 |
---|---|---|
committer | Thorsten Behrens <tbehrens@novell.com> | 2011-04-29 19:00:48 +0200 |
commit | 10c0f7f76f937e911c95174adda5aaa889befc9a (patch) | |
tree | 32f4b709a36f6ef1ee8c2a471e6f0bed49959555 | |
parent | cca12f114ebd908c424421754bb868bfd5dc5227 (diff) |
Applied normalize-template-paths-fix (slightly amended)
Fixes n#512146
-rw-r--r-- | sfx2/source/doc/doctemplates.cxx | 35 |
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; |