Kaydet (Commit) 0dda8f19 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Set DefaultContext property of service manager/component context combo

...to avoid mismatch warnings from OServiceManager::createInstanceWithContext.
üst 30fb54ac
......@@ -29,8 +29,10 @@
#include <sal/macros.h>
#include <cppuhelper/component_context.hxx>
#include <cppuhelper/exc_hlp.hxx>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
using namespace com::sun::star;
using namespace ooo::vba;
......@@ -47,21 +49,42 @@ const uno::Reference< uno::XComponentContext >& xContext, const rtl::OUString& s
{
// overwrite context with custom one ( that contains the application )
// wrap the service manager as we don't want the disposing context to tear down the 'normal' ServiceManager ( or at least thats what the code appears like it wants to do )
uno::Any aSrvMgr;
uno::Reference< uno::XInterface > aSrvMgr;
if ( xContext.is() && xContext->getServiceManager().is() )
{
aSrvMgr = uno::makeAny( xContext->getServiceManager()->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.OServiceManagerWrapper") ), xContext ) );
aSrvMgr = xContext->getServiceManager()->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.OServiceManagerWrapper") ), xContext );
}
::cppu::ContextEntry_Init aHandlerContextInfo[] =
{
::cppu::ContextEntry_Init( msApplication, uno::Any() ),
::cppu::ContextEntry_Init( sDocCtxName, uno::Any() ),
::cppu::ContextEntry_Init( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.lang.theServiceManager" ) ), aSrvMgr )
::cppu::ContextEntry_Init( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.lang.theServiceManager" ) ), uno::makeAny( aSrvMgr ) )
};
// don't pass a delegate, this seems to introduce yet another cyclic dependency ( and
// some strange behavior
mxContext = ::cppu::createComponentContext( aHandlerContextInfo, SAL_N_ELEMENTS( aHandlerContextInfo ), NULL );
if ( aSrvMgr.is() )
{
try
{
uno::Reference< beans::XPropertySet >(
aSrvMgr, uno::UNO_QUERY_THROW )->
setPropertyValue( "DefaultContext", uno::makeAny( mxContext ) );
}
catch ( uno::RuntimeException & )
{
throw;
}
catch ( uno::Exception & )
{
uno::Any e(cppu::getCaughtException());
throw lang::WrappedTargetRuntimeException(
("VbaGlobalsBase ctor, setting OServiceManagerWrapper"
" DefaultContext failed"),
uno::Reference< uno::XInterface >(), e);
}
}
}
VbaGlobalsBase::~VbaGlobalsBase()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment