122de8995SAndre Fischer /************************************************************** 222de8995SAndre Fischer * 322de8995SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 422de8995SAndre Fischer * or more contributor license agreements. See the NOTICE file 522de8995SAndre Fischer * distributed with this work for additional information 622de8995SAndre Fischer * regarding copyright ownership. The ASF licenses this file 722de8995SAndre Fischer * to you under the Apache License, Version 2.0 (the 822de8995SAndre Fischer * "License"); you may not use this file except in compliance 922de8995SAndre Fischer * with the License. You may obtain a copy of the License at 1022de8995SAndre Fischer * 1122de8995SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 1222de8995SAndre Fischer * 1322de8995SAndre Fischer * Unless required by applicable law or agreed to in writing, 1422de8995SAndre Fischer * software distributed under the License is distributed on an 1522de8995SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1622de8995SAndre Fischer * KIND, either express or implied. See the License for the 1722de8995SAndre Fischer * specific language governing permissions and limitations 1822de8995SAndre Fischer * under the License. 1922de8995SAndre Fischer * 2022de8995SAndre Fischer *************************************************************/ 2122de8995SAndre Fischer 2222de8995SAndre Fischer #include "precompiled_framework.hxx" 2322de8995SAndre Fischer 2422de8995SAndre Fischer #include "services/ContextChangeEventMultiplexer.hxx" 2522de8995SAndre Fischer #include "services.h" 2622de8995SAndre Fischer 2722de8995SAndre Fischer using ::rtl::OUString; 2822de8995SAndre Fischer 2922de8995SAndre Fischer #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) 3022de8995SAndre Fischer 31*7a32b0c8SAndre Fischer using namespace css; 32*7a32b0c8SAndre Fischer using namespace cssu; 33*7a32b0c8SAndre Fischer 3422de8995SAndre Fischer namespace framework { 3522de8995SAndre Fischer 3622de8995SAndre Fischer #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer" 3722de8995SAndre Fischer #define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer" 3822de8995SAndre Fischer #define SINGLETON_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexerSigleton" 3922de8995SAndre Fischer 4022de8995SAndre Fischer 4122de8995SAndre Fischer ContextChangeEventMultiplexer::ContextChangeEventMultiplexer ( 42b9e67834SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext) 4322de8995SAndre Fischer : ContextChangeEventMultiplexerInterfaceBase(m_aMutex), 4422de8995SAndre Fischer maListeners() 4522de8995SAndre Fischer { 4622de8995SAndre Fischer (void)rxContext; 4722de8995SAndre Fischer } 4822de8995SAndre Fischer 4922de8995SAndre Fischer 5022de8995SAndre Fischer 5122de8995SAndre Fischer 5222de8995SAndre Fischer ContextChangeEventMultiplexer::~ContextChangeEventMultiplexer (void) 5322de8995SAndre Fischer { 54b9e67834SAndre Fischer } 55b9e67834SAndre Fischer 56b9e67834SAndre Fischer 57b9e67834SAndre Fischer 58b9e67834SAndre Fischer 59b9e67834SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::disposing (void) 60b9e67834SAndre Fischer { 61b9e67834SAndre Fischer ListenerMap aListeners; 62b9e67834SAndre Fischer aListeners.swap(maListeners); 63b9e67834SAndre Fischer 6495a18594SAndre Fischer cssu::Reference<cssu::XInterface> xThis (static_cast<XWeak*>(this)); 6595a18594SAndre Fischer css::lang::EventObject aEvent (xThis); 66b9e67834SAndre Fischer for (ListenerMap::const_iterator iContainer(aListeners.begin()), iEnd(aListeners.end()); 67b9e67834SAndre Fischer iContainer!=iEnd; 68b9e67834SAndre Fischer ++iContainer) 69b9e67834SAndre Fischer { 70*7a32b0c8SAndre Fischer // Unregister from the focus object. 71*7a32b0c8SAndre Fischer Reference<lang::XComponent> xComponent (iContainer->first, UNO_QUERY); 72*7a32b0c8SAndre Fischer if (xComponent.is()) 73*7a32b0c8SAndre Fischer xComponent->removeEventListener(this); 74*7a32b0c8SAndre Fischer 75*7a32b0c8SAndre Fischer // Tell all listeners that we are being disposed. 76*7a32b0c8SAndre Fischer const FocusDescriptor& rFocusDescriptor (iContainer->second); 77b9e67834SAndre Fischer for (ListenerContainer::const_iterator 78*7a32b0c8SAndre Fischer iListener(rFocusDescriptor.maListeners.begin()), 79*7a32b0c8SAndre Fischer iContainerEnd(rFocusDescriptor.maListeners.end()); 80b9e67834SAndre Fischer iListener!=iContainerEnd; 81b9e67834SAndre Fischer ++iListener) 82b9e67834SAndre Fischer { 83b9e67834SAndre Fischer (*iListener)->disposing(aEvent); 84b9e67834SAndre Fischer } 85b9e67834SAndre Fischer } 8622de8995SAndre Fischer } 8722de8995SAndre Fischer 8822de8995SAndre Fischer 8922de8995SAndre Fischer 9022de8995SAndre Fischer 9122de8995SAndre Fischer // XContextChangeEventMultiplexer 9222de8995SAndre Fischer 9322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::addContextChangeEventListener ( 9422de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, 9522de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 9622de8995SAndre Fischer throw(cssu::RuntimeException,cssl::IllegalArgumentException) 9722de8995SAndre Fischer { 9822de8995SAndre Fischer if ( ! rxListener.is()) 9922de8995SAndre Fischer throw css::lang::IllegalArgumentException( 10022de8995SAndre Fischer A2S("can not add an empty reference"), 10122de8995SAndre Fischer static_cast<XWeak*>(this), 10222de8995SAndre Fischer 0); 10322de8995SAndre Fischer 104*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true); 105*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL) 10622de8995SAndre Fischer { 107*7a32b0c8SAndre Fischer ListenerContainer& rContainer (pFocusDescriptor->maListeners); 10822de8995SAndre Fischer if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end()) 10922de8995SAndre Fischer rContainer.push_back(rxListener); 11022de8995SAndre Fischer else 11122de8995SAndre Fischer { 11222de8995SAndre Fischer // The listener was added for the same event focus 11322de8995SAndre Fischer // previously. That is an error. 11422de8995SAndre Fischer throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0); 11522de8995SAndre Fischer } 11622de8995SAndre Fischer } 11795a18594SAndre Fischer 11895a18594SAndre Fischer // Send out an initial event that informs the new listener about 11995a18594SAndre Fischer // the current context. 120*7a32b0c8SAndre Fischer if (rxEventFocus.is() && pFocusDescriptor!=NULL) 12195a18594SAndre Fischer { 12295a18594SAndre Fischer css::ui::ContextChangeEventObject aEvent ( 12395a18594SAndre Fischer NULL, 124*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentApplicationName, 125*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentContextName); 12695a18594SAndre Fischer rxListener->notifyContextChangeEvent(aEvent); 12795a18594SAndre Fischer } 12822de8995SAndre Fischer } 12922de8995SAndre Fischer 13022de8995SAndre Fischer 13122de8995SAndre Fischer 13222de8995SAndre Fischer 13322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::removeContextChangeEventListener ( 13422de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, 13522de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 13622de8995SAndre Fischer throw(cssu::RuntimeException,cssl::IllegalArgumentException) 13722de8995SAndre Fischer { 13822de8995SAndre Fischer if ( ! rxListener.is()) 13995a18594SAndre Fischer throw cssl::IllegalArgumentException( 14095a18594SAndre Fischer A2S("can not remove an empty reference"), 14195a18594SAndre Fischer static_cast<XWeak*>(this), 0); 14222de8995SAndre Fischer 143*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false); 144*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL) 14522de8995SAndre Fischer { 146*7a32b0c8SAndre Fischer ListenerContainer& rContainer (pFocusDescriptor->maListeners); 14795a18594SAndre Fischer const ListenerContainer::iterator iListener ( 14895a18594SAndre Fischer ::std::find(rContainer.begin(), rContainer.end(), rxListener)); 14922de8995SAndre Fischer if (iListener != rContainer.end()) 150b9e67834SAndre Fischer { 15122de8995SAndre Fischer rContainer.erase(iListener); 152b9e67834SAndre Fischer 153*7a32b0c8SAndre Fischer // We hold on to the focus descriptor even when the last listener has been removed. 154*7a32b0c8SAndre Fischer // This allows us to keep track of the current context and send it to new listeners. 155b9e67834SAndre Fischer } 15622de8995SAndre Fischer } 15722de8995SAndre Fischer 15822de8995SAndre Fischer } 15922de8995SAndre Fischer 16022de8995SAndre Fischer 16122de8995SAndre Fischer 16222de8995SAndre Fischer 16322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::removeAllContextChangeEventListeners ( 16422de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener) 16522de8995SAndre Fischer throw(cssu::RuntimeException,cssl::IllegalArgumentException) 16622de8995SAndre Fischer { 16722de8995SAndre Fischer if ( ! rxListener.is()) 16895a18594SAndre Fischer throw cssl::IllegalArgumentException( 16995a18594SAndre Fischer A2S("can not remove an empty reference"), 17095a18594SAndre Fischer static_cast<XWeak*>(this), 0); 17122de8995SAndre Fischer 17222de8995SAndre Fischer for (ListenerMap::iterator 17322de8995SAndre Fischer iContainer(maListeners.begin()), 17422de8995SAndre Fischer iEnd(maListeners.end()); 17522de8995SAndre Fischer iContainer!=iEnd; 17622de8995SAndre Fischer ++iContainer) 17722de8995SAndre Fischer { 17895a18594SAndre Fischer const ListenerContainer::iterator iListener ( 17995a18594SAndre Fischer ::std::find(iContainer->second.maListeners.begin(), iContainer->second.maListeners.end(), rxListener)); 18095a18594SAndre Fischer if (iListener != iContainer->second.maListeners.end()) 181b9e67834SAndre Fischer { 18295a18594SAndre Fischer iContainer->second.maListeners.erase(iListener); 183b9e67834SAndre Fischer 184*7a32b0c8SAndre Fischer // We hold on to the focus descriptor even when the last listener has been removed. 185*7a32b0c8SAndre Fischer // This allows us to keep track of the current context and send it to new listeners. 186b9e67834SAndre Fischer } 187b9e67834SAndre Fischer } 18822de8995SAndre Fischer } 18922de8995SAndre Fischer 19022de8995SAndre Fischer 19122de8995SAndre Fischer 19222de8995SAndre Fischer 19322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::broadcastContextChangeEvent ( 19422de8995SAndre Fischer const css::ui::ContextChangeEventObject& rEventObject, 19522de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 19622de8995SAndre Fischer throw(cssu::RuntimeException) 19722de8995SAndre Fischer { 19895a18594SAndre Fischer // Remember the current context. 19995a18594SAndre Fischer if (rxEventFocus.is()) 20095a18594SAndre Fischer { 201*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true); 202*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL) 20395a18594SAndre Fischer { 204*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentApplicationName = rEventObject.ApplicationName; 205*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentContextName = rEventObject.ContextName; 20695a18594SAndre Fischer } 20795a18594SAndre Fischer } 20895a18594SAndre Fischer 20922de8995SAndre Fischer BroadcastEventToSingleContainer(rEventObject, rxEventFocus); 21022de8995SAndre Fischer if (rxEventFocus.is()) 21122de8995SAndre Fischer BroadcastEventToSingleContainer(rEventObject, NULL); 21222de8995SAndre Fischer } 21322de8995SAndre Fischer 21422de8995SAndre Fischer 21522de8995SAndre Fischer 21622de8995SAndre Fischer 21722de8995SAndre Fischer void ContextChangeEventMultiplexer::BroadcastEventToSingleContainer ( 21822de8995SAndre Fischer const css::ui::ContextChangeEventObject& rEventObject, 21922de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 22022de8995SAndre Fischer { 221*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false); 222*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL) 22322de8995SAndre Fischer { 22422de8995SAndre Fischer // Create a copy of the listener container to avoid problems 22522de8995SAndre Fischer // when one of the called listeners calls add... or remove... 226*7a32b0c8SAndre Fischer ListenerContainer aContainer (pFocusDescriptor->maListeners); 22722de8995SAndre Fischer for (ListenerContainer::const_iterator 22822de8995SAndre Fischer iListener(aContainer.begin()), 22922de8995SAndre Fischer iEnd(aContainer.end()); 23022de8995SAndre Fischer iListener!=iEnd; 23122de8995SAndre Fischer ++iListener) 23222de8995SAndre Fischer { 23322de8995SAndre Fischer (*iListener)->notifyContextChangeEvent(rEventObject); 23422de8995SAndre Fischer } 23522de8995SAndre Fischer } 23622de8995SAndre Fischer } 23722de8995SAndre Fischer 23822de8995SAndre Fischer 23922de8995SAndre Fischer 24022de8995SAndre Fischer 241*7a32b0c8SAndre Fischer ContextChangeEventMultiplexer::FocusDescriptor* ContextChangeEventMultiplexer::GetFocusDescriptor ( 242*7a32b0c8SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus, 243*7a32b0c8SAndre Fischer const bool bCreateWhenMissing) 244*7a32b0c8SAndre Fischer { 245*7a32b0c8SAndre Fischer ListenerMap::iterator iDescriptor (maListeners.find(rxEventFocus)); 246*7a32b0c8SAndre Fischer if (iDescriptor == maListeners.end() && bCreateWhenMissing) 247*7a32b0c8SAndre Fischer { 248*7a32b0c8SAndre Fischer // Listen for the focus being disposed. 249*7a32b0c8SAndre Fischer Reference<lang::XComponent> xComponent (rxEventFocus, UNO_QUERY); 250*7a32b0c8SAndre Fischer if (xComponent.is()) 251*7a32b0c8SAndre Fischer xComponent->addEventListener(this); 252*7a32b0c8SAndre Fischer 253*7a32b0c8SAndre Fischer // Create a new listener container for the event focus. 254*7a32b0c8SAndre Fischer iDescriptor = maListeners.insert( 255*7a32b0c8SAndre Fischer ListenerMap::value_type( 256*7a32b0c8SAndre Fischer rxEventFocus, 257*7a32b0c8SAndre Fischer FocusDescriptor())).first; 258*7a32b0c8SAndre Fischer } 259*7a32b0c8SAndre Fischer if (iDescriptor != maListeners.end()) 260*7a32b0c8SAndre Fischer return &iDescriptor->second; 261*7a32b0c8SAndre Fischer else 262*7a32b0c8SAndre Fischer return NULL; 263*7a32b0c8SAndre Fischer } 264*7a32b0c8SAndre Fischer 265*7a32b0c8SAndre Fischer 266*7a32b0c8SAndre Fischer 267*7a32b0c8SAndre Fischer 26822de8995SAndre Fischer // XSingleComponentFactory 26922de8995SAndre Fischer 27022de8995SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::createInstanceWithContext ( 27122de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext) 27222de8995SAndre Fischer throw (cssu::Exception, cssu::RuntimeException) 27322de8995SAndre Fischer { 27422de8995SAndre Fischer (void)rxContext; 27522de8995SAndre Fischer return cssu::Reference<cssu::XInterface>(); 27622de8995SAndre Fischer } 27722de8995SAndre Fischer 27822de8995SAndre Fischer 27922de8995SAndre Fischer 28022de8995SAndre Fischer 28122de8995SAndre Fischer cssu::Reference<cssu::XInterface > SAL_CALL ContextChangeEventMultiplexer::createInstanceWithArgumentsAndContext ( 28222de8995SAndre Fischer const cssu::Sequence<cssu::Any>& rArguments, 28322de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext) 28422de8995SAndre Fischer throw (cssu::Exception, cssu::RuntimeException) 28522de8995SAndre Fischer { 28622de8995SAndre Fischer (void)rArguments; 28722de8995SAndre Fischer (void)rxContext; 28822de8995SAndre Fischer return cssu::Reference<cssu::XInterface>(); 28922de8995SAndre Fischer } 29022de8995SAndre Fischer 29122de8995SAndre Fischer 29222de8995SAndre Fischer 29322de8995SAndre Fischer 29422de8995SAndre Fischer // XServiceInfo 29522de8995SAndre Fischer 29622de8995SAndre Fischer ::rtl::OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName (void) 29722de8995SAndre Fischer throw(cssu::RuntimeException) 29822de8995SAndre Fischer { 29922de8995SAndre Fischer return impl_getStaticImplementationName(); 30022de8995SAndre Fischer } 30122de8995SAndre Fischer 30222de8995SAndre Fischer 30322de8995SAndre Fischer 30422de8995SAndre Fischer 30522de8995SAndre Fischer 30622de8995SAndre Fischer sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService ( 30722de8995SAndre Fischer const ::rtl::OUString& rsServiceName) 30822de8995SAndre Fischer throw (cssu::RuntimeException) 30922de8995SAndre Fischer { 31022de8995SAndre Fischer return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0; 31122de8995SAndre Fischer } 31222de8995SAndre Fischer 31322de8995SAndre Fischer 31422de8995SAndre Fischer 31522de8995SAndre Fischer 31622de8995SAndre Fischer cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames (void) 31722de8995SAndre Fischer throw (cssu::RuntimeException) 31822de8995SAndre Fischer { 31922de8995SAndre Fischer return static_GetSupportedServiceNames(); 32022de8995SAndre Fischer } 32122de8995SAndre Fischer 32222de8995SAndre Fischer 32322de8995SAndre Fischer 32422de8995SAndre Fischer 325*7a32b0c8SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::disposing ( 326*7a32b0c8SAndre Fischer const css::lang::EventObject& rEvent) 327*7a32b0c8SAndre Fischer throw (cssu::RuntimeException) 328*7a32b0c8SAndre Fischer { 329*7a32b0c8SAndre Fischer ListenerMap::iterator iDescriptor (maListeners.find(rEvent.Source)); 330*7a32b0c8SAndre Fischer 331*7a32b0c8SAndre Fischer if (iDescriptor == maListeners.end()) 332*7a32b0c8SAndre Fischer { 333*7a32b0c8SAndre Fischer OSL_ASSERT(iDescriptor != maListeners.end()); 334*7a32b0c8SAndre Fischer return; 335*7a32b0c8SAndre Fischer } 336*7a32b0c8SAndre Fischer 337*7a32b0c8SAndre Fischer // Should we notify the remaining listeners? 338*7a32b0c8SAndre Fischer 339*7a32b0c8SAndre Fischer maListeners.erase(iDescriptor); 340*7a32b0c8SAndre Fischer } 341*7a32b0c8SAndre Fischer 342*7a32b0c8SAndre Fischer 343*7a32b0c8SAndre Fischer 344*7a32b0c8SAndre Fischer 34522de8995SAndre Fischer // Local and static methods. 34622de8995SAndre Fischer 34722de8995SAndre Fischer OUString SAL_CALL ContextChangeEventMultiplexer::impl_getStaticImplementationName (void) 34822de8995SAndre Fischer { 34922de8995SAndre Fischer return A2S(IMPLEMENTATION_NAME); 35022de8995SAndre Fischer } 35122de8995SAndre Fischer 35222de8995SAndre Fischer 35322de8995SAndre Fischer 35422de8995SAndre Fischer 35522de8995SAndre Fischer cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::static_GetSupportedServiceNames (void) 35622de8995SAndre Fischer { 35722de8995SAndre Fischer cssu::Sequence<OUString> aServiceNames (2); 35822de8995SAndre Fischer aServiceNames[0] = A2S(SERVICE_NAME); 35922de8995SAndre Fischer aServiceNames[1] = A2S(SINGLETON_NAME); 36022de8995SAndre Fischer return aServiceNames; 36122de8995SAndre Fischer } 36222de8995SAndre Fischer 36322de8995SAndre Fischer 36422de8995SAndre Fischer 36522de8995SAndre Fischer 36622de8995SAndre Fischer cssu::Reference<cssu::XInterface> ContextChangeEventMultiplexer::impl_createFactory ( 36722de8995SAndre Fischer const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager) 36822de8995SAndre Fischer { 36922de8995SAndre Fischer (void)rxServiceManager; 37022de8995SAndre Fischer return cppu::createSingleComponentFactory( 37122de8995SAndre Fischer ContextChangeEventMultiplexer::static_CreateInstance, 37222de8995SAndre Fischer ContextChangeEventMultiplexer::impl_getStaticImplementationName(), 37322de8995SAndre Fischer ContextChangeEventMultiplexer::static_GetSupportedServiceNames() 37422de8995SAndre Fischer ); 37522de8995SAndre Fischer } 37622de8995SAndre Fischer 37722de8995SAndre Fischer 37822de8995SAndre Fischer 37922de8995SAndre Fischer 38022de8995SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::static_CreateInstance ( 38122de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxComponentContext) 38222de8995SAndre Fischer throw (cssu::Exception) 38322de8995SAndre Fischer { 38422de8995SAndre Fischer ContextChangeEventMultiplexer* pObject = new ContextChangeEventMultiplexer(rxComponentContext); 38522de8995SAndre Fischer cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY); 38622de8995SAndre Fischer return xService; 38722de8995SAndre Fischer } 38822de8995SAndre Fischer 38922de8995SAndre Fischer } // end of namespace framework 390