diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2003-04-04 16:16:05 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2003-04-04 16:16:05 +0000 |
commit | f12bd2305aaadb6a5ccb8249c80b7865e4613005 (patch) | |
tree | bbf51892f11930f3d564a34a588f1208c903a041 /framework/source | |
parent | 709af1b68cde95749c5b02cd66b2297592216c5a (diff) |
INTEGRATION: CWS fwk01 (1.1.72); FILE MERGED
2003/04/01 12:40:09 as 1.1.72.1: #107642# change order of used interception objects
Diffstat (limited to 'framework/source')
-rw-r--r-- | framework/source/dispatch/interceptionhelper.cxx | 554 |
1 files changed, 191 insertions, 363 deletions
diff --git a/framework/source/dispatch/interceptionhelper.cxx b/framework/source/dispatch/interceptionhelper.cxx index 748ecfe8776e..9a6a29a525e6 100644 --- a/framework/source/dispatch/interceptionhelper.cxx +++ b/framework/source/dispatch/interceptionhelper.cxx @@ -2,9 +2,9 @@ * * $RCSfile: interceptionhelper.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: as $ $Date: 2001-07-02 13:24:41 $ + * last change: $Author: hr $ $Date: 2003-04-04 17:16:05 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -59,446 +59,274 @@ * ************************************************************************/ -//_________________________________________________________________________________________________________________ +//_______________________________________________ // my own includes -//_________________________________________________________________________________________________________________ #ifndef __FRAMEWORK_DISPATCH_INTERCEPTIONHELPER_HXX_ #include <dispatch/interceptionhelper.hxx> #endif -#ifndef __FRAMEWORK_CLASSES_WILDCARD_HXX_ -#include <classes/wildcard.hxx> -#endif - -//_________________________________________________________________________________________________________________ +//_______________________________________________ // interface includes -//_________________________________________________________________________________________________________________ #ifndef _COM_SUN_STAR_FRAME_XINTERCEPTORINFO_HPP_ #include <com/sun/star/frame/XInterceptorInfo.hpp> #endif -//_________________________________________________________________________________________________________________ +//_______________________________________________ // includes of other projects -//_________________________________________________________________________________________________________________ #ifndef _SV_SVAPP_HXX #include <vcl/svapp.hxx> #endif -//_________________________________________________________________________________________________________________ +//_______________________________________________ // namespace -//_________________________________________________________________________________________________________________ namespace framework{ -using namespace ::com::sun::star::frame ; -using namespace ::com::sun::star::lang ; -using namespace ::com::sun::star::uno ; -using namespace ::com::sun::star::util ; -using namespace ::cppu ; -using namespace ::osl ; -using namespace ::rtl ; -using namespace ::std ; - -//_________________________________________________________________________________________________________________ +//_______________________________________________ // non exported const -//_________________________________________________________________________________________________________________ -//_________________________________________________________________________________________________________________ +sal_Bool InterceptionHelper::m_bPreferrFirstInterceptor = sal_True; + +//_______________________________________________ // non exported definitions -//_________________________________________________________________________________________________________________ -//_________________________________________________________________________________________________________________ +//_______________________________________________ // declarations -//_________________________________________________________________________________________________________________ - -//***************************************************************************************************************** -// constructor -//***************************************************************************************************************** -InterceptionHelper::InterceptionHelper( const Reference< XFrame >& rFrame , - const Reference< XDispatchProvider >& xSlaveDispatcher ) - // Init baseclasses first - : ThreadHelpBase ( &Application::GetSolarMutex() ) - , OWeakObject ( ) - // Init member - , m_xSlaveDispatcher ( xSlaveDispatcher ) - , m_xOwnerWeak ( rFrame ) + +/*----------------------------------------------------------------------------- + 31.03.2003 09:02 +-----------------------------------------------------------------------------*/ +DEFINE_XINTERFACE_3(InterceptionHelper , + OWeakObject , + DIRECT_INTERFACE(css::frame::XDispatchProvider ), + DIRECT_INTERFACE(css::frame::XDispatchProviderInterception), + DIRECT_INTERFACE(css::lang::XEventListener )) + +/*----------------------------------------------------------------------------- + 31.03.2003 09:02 +-----------------------------------------------------------------------------*/ +InterceptionHelper::InterceptionHelper(const css::uno::Reference< css::frame::XFrame >& xOwner, + const css::uno::Reference< css::frame::XDispatchProvider >& xSlave) + // Init baseclasses first + : ThreadHelpBase(&Application::GetSolarMutex()) + , OWeakObject ( ) + // Init member + , m_xOwnerWeak (xOwner ) + , m_xSlave (xSlave ) { - // Safe impossible cases - // Method is not defined for ALL incoming parameters! - LOG_ASSERT( impldbg_checkParameter_InterceptionHelper( xSlaveDispatcher ), "InterceptionHelper::InterceptionHelper()\nInvalid parameter detected!\n" ) } -//***************************************************************************************************************** -// (proteced!) destructor -//***************************************************************************************************************** +/*----------------------------------------------------------------------------- + 31.03.2003 09:02 +-----------------------------------------------------------------------------*/ InterceptionHelper::~InterceptionHelper() { } -//***************************************************************************************************************** -// XInterface -//***************************************************************************************************************** -DEFINE_XINTERFACE_3 ( InterceptionHelper , - OWeakObject , - DIRECT_INTERFACE(XDispatchProvider ), - DIRECT_INTERFACE(XDispatchProviderInterception ), - DIRECT_INTERFACE(XEventListener ) - ) - -//***************************************************************************************************************** -// XDispatchProvider -//***************************************************************************************************************** -Reference< XDispatch > SAL_CALL InterceptionHelper::queryDispatch( const URL& aURL , - const OUString& sTargetFrameName, - sal_Int32 nSearchFlags ) throw( RuntimeException ) +/*----------------------------------------------------------------------------- + 31.03.2003 09:09 +-----------------------------------------------------------------------------*/ +css::uno::Reference< css::frame::XDispatch > SAL_CALL InterceptionHelper::queryDispatch(const css::util::URL& aURL , + const ::rtl::OUString& sTargetFrameName, + sal_Int32 nSearchFlags ) + throw(css::uno::RuntimeException) { - // Ready for multithreading - ResetableGuard aGuard( m_aLock ); - // Safe impossible cases - // Method not defined for all incoming parameter. - LOG_ASSERT( impldbg_checkParameter_queryDispatch( aURL, sTargetFrameName, nSearchFlags ), "InterceptionHelper::queryDispatch()\nInvalid parameter detected.\n" ) - - // Set default return value. - Reference< XDispatch > xReturn; - - // For better performance: - // Search interceptor which has registered himself with a pattern which match given URL! - Reference< XDispatchProvider > xInterceptor( impl_searchMatchingInterceptor( aURL.Complete ), UNO_QUERY ); - if( xInterceptor.is() == sal_True ) - { - // If so an interceptor exist forward dispatch to it. - xReturn = xInterceptor->queryDispatch( aURL, sTargetFrameName, nSearchFlags ); - } - else + // SAFE { + ReadGuard aReadLock(m_aLock); + + // a) first search an interceptor, which match to this URL by it's URL pattern registration + // Note: if it return NULL - it does not mean an empty interceptor list automaticly! + css::uno::Reference< css::frame::XDispatchProvider > xInterceptor; + InterceptorList::const_iterator pIt = m_lInterceptionRegs.findByPattern(aURL.Complete); + if (pIt != m_lInterceptionRegs.end()) + xInterceptor = pIt->xInterceptor; + + // b) No match by registration - but a valid interceptor list. + // Use first interceptor everytimes. + // Note: it doesn't matter, which direction this helper implementation use to ask interceptor objects. + // Using of member m_aInterceptorList will starts at the beginning everytimes. + // It depends from the filling operation, in which direction it works realy! + if (!xInterceptor.is() && m_lInterceptionRegs.size()>0) { - // Otherwise; use ouer own dispatch helper to do this and set results for return. - xReturn = m_xSlaveDispatcher->queryDispatch( aURL, sTargetFrameName, nSearchFlags ); + pIt = m_lInterceptionRegs.begin(); + xInterceptor = pIt->xInterceptor; } - // Return results of this operation. + // c) No registered interceptor => use our direct slave. + // This helper exist by design and must be valid everytimes ... + // But to be more feature proof - we should check that .-) + if (!xInterceptor.is() && m_xSlave.is()) + xInterceptor = m_xSlave; + + aReadLock.unlock(); + // } SAFE + + css::uno::Reference< css::frame::XDispatch > xReturn; + if (xInterceptor.is()) + xReturn = xInterceptor->queryDispatch(aURL, sTargetFrameName, nSearchFlags); return xReturn; } -//***************************************************************************************************************** -// XDispatchProvider -//***************************************************************************************************************** -Sequence< Reference< XDispatch > > SAL_CALL InterceptionHelper::queryDispatches( const Sequence< DispatchDescriptor >& seqDescriptor ) throw( RuntimeException ) +/*----------------------------------------------------------------------------- + 31.03.2003 07:58 +-----------------------------------------------------------------------------*/ +css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL InterceptionHelper::queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptor ) + throw(css::uno::RuntimeException) { - // Ready for multithreading - ResetableGuard aGuard( m_aLock ); - // Safe impossible cases - // Method not defined for all incoming parameter. - LOG_ASSERT( impldbg_checkParameter_queryDispatches( seqDescriptor ), "InterceptionHelper::queryDispatches()\nInvalid parameter detected.\n" ) - - // Set default return value. - Sequence< Reference< XDispatch > > seqReturn; - - /*ATTENTION + sal_Int32 c = lDescriptor.getLength(); + css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > lDispatches (c); + css::uno::Reference< css::frame::XDispatch >* pDispatches = lDispatches.getArray(); + const css::frame::DispatchDescriptor* pDescriptor = lDescriptor.getConstArray(); - Don't use our performance mechanism to search registered interceptors for given URLs! - What will you do - call different interceptor objects for different URLs ... - ... we implement these mechanism to save (remote) calls to an interceptor ... - */ - - // If any interceptor exist ... - if( m_aInterceptorList.empty() == sal_False ) - { - // ... forward query to these instance and set results for return. - Reference< XDispatchProvider> xInterceptor( m_aInterceptorList.begin()->xInterceptor, UNO_QUERY ); - seqReturn = xInterceptor->queryDispatches( seqDescriptor ); - } - else - { - // No; Then use ouer own dispatchhelper to do this and set results for return. - seqReturn = m_xSlaveDispatcher->queryDispatches( seqDescriptor ); - } + for (sal_Int32 i=0; i<c; ++i) + pDispatches[i] = queryDispatch(pDescriptor[i].FeatureURL, pDescriptor[i].FrameName, pDescriptor[i].SearchFlags); - // Return results of this operation. - return seqReturn; + return lDispatches; } -//***************************************************************************************************************** -// XDispatchProviderInterception -//***************************************************************************************************************** -void SAL_CALL InterceptionHelper::registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& xInterceptor ) throw( RuntimeException ) +/*----------------------------------------------------------------------------- + 31.03.2003 10:20 +-----------------------------------------------------------------------------*/ +void SAL_CALL InterceptionHelper::registerDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor >& xInterceptor) + throw(css::uno::RuntimeException) { - // Ready for multithreading - ResetableGuard aGuard( m_aLock ); - // Safe impossible cases - // Method not defined for all incoming parameter. - LOG_ASSERT( impldbg_checkParameter_registerDispatchProviderInterceptor( xInterceptor ), "InterceptionHelper::registerDispatchProviderInterceptor()\nInvalid parameter detected.\n" ) + // reject wrong calling of this interface method + css::uno::Reference< css::frame::XDispatchProvider > xThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY); + if (!xInterceptor.is()) + throw css::uno::RuntimeException(DECLARE_ASCII("NULL references not allowed as in parameter"), xThis); // Fill a new info structure for new interceptor. // Save his reference and try to get an additional URL/pattern list from him. // If no list exist register these interceptor for all dispatch events with "*"! - IMPL_TInterceptorInfo aInfo; - aInfo.xInterceptor = xInterceptor; - Reference< XInterceptorInfo > xInfoInterface( xInterceptor, UNO_QUERY ); - if( xInfoInterface.is() == sal_True ) - { - aInfo.seqPatternList = xInfoInterface->getInterceptedURLs(); - } + InterceptorInfo aInfo; + + aInfo.xInterceptor = css::uno::Reference< css::frame::XDispatchProvider >(xInterceptor, css::uno::UNO_QUERY); + css::uno::Reference< css::frame::XInterceptorInfo > xInfo(xInterceptor, css::uno::UNO_QUERY); + if (xInfo.is()) + aInfo.lURLPattern = xInfo->getInterceptedURLs(); else { - aInfo.seqPatternList.realloc(1); - aInfo.seqPatternList[0] = DECLARE_ASCII("*"); + aInfo.lURLPattern.realloc(1); + aInfo.lURLPattern[0] = ::rtl::OUString::createFromAscii("*"); } - // Add new interceptor to front of list and initialize master/slave relations with old top one. - // If anyone already exist! - if( m_aInterceptorList.size() < 1 ) + // SAFE { + WriteGuard aWriteLock(m_aLock); + + // a) no interceptor at all - set this instance as master for given interceptor + // and set our slave as it's slave - and put this interceptor to the list. + // It's place there doesn matter. Because this list is currently empty. + if (m_lInterceptionRegs.size()<1) { - // a) No interceptor exist before. - // Take it as the first one and pass our own dispatch helper as his slave. - // (For economical code writing - we add info structure at later time! Otherwise we must duplicate these code for every IF/ELSE branch!) - aInfo.xInterceptor->setSlaveDispatchProvider( m_xSlaveDispatcher ); + xInterceptor->setMasterDispatchProvider(xThis ); + xInterceptor->setSlaveDispatchProvider (m_xSlave); + m_lInterceptionRegs.push_back(aInfo); } - else + + // b) OK - there is at least one interceptor already registered. + // It's slave and it's master must be valid references ... + // because we created it. But we have to look for the static bool which + // regulate direction of using of interceptor objects! + + // b1) If "m_bPreferrFirstInterceptor" is set to true, we have to + // insert it behind any other existing interceptor - means at the end of our list. + else if (m_bPreferrFirstInterceptor) { - // b) There is already an interceptor; current will be the slave of the new one. - // Insert it on the top of list. - // (For economical code writing - we add info structure at later time! Otherwise we must duplicate these code for every IF/ELSE branch!) - Reference< XDispatchProviderInterceptor > xOldTopInterceptor = m_aInterceptorList.begin()->xInterceptor; - aInfo.xInterceptor->setSlaveDispatchProvider ( Reference< XDispatchProvider >( xOldTopInterceptor, UNO_QUERY ) ); - xOldTopInterceptor->setMasterDispatchProvider ( Reference< XDispatchProvider >( aInfo.xInterceptor, UNO_QUERY ) ); - } + css::uno::Reference< css::frame::XDispatchProvider > xMasterD = m_lInterceptionRegs.rbegin()->xInterceptor; + css::uno::Reference< css::frame::XDispatchProviderInterceptor > xMasterI (xMasterD, css::uno::UNO_QUERY); - // The new interceptor must be a slave of us too! - aInfo.xInterceptor->setMasterDispatchProvider( this ); - // Now we can add our info structure to the list. - m_aInterceptorList.push_front( aInfo ); + xInterceptor->setMasterDispatchProvider(xMasterD ); + xInterceptor->setSlaveDispatchProvider (m_xSlave ); + xMasterI->setSlaveDispatchProvider (aInfo.xInterceptor); - Reference < XFrame > xOwner( m_xOwnerWeak.get(), UNO_QUERY ); - if ( xOwner.is() ) - xOwner->contextChanged(); -} + m_lInterceptionRegs.push_back(aInfo); + } -//***************************************************************************************************************** -// XDispatchProviderInterception -//***************************************************************************************************************** -void SAL_CALL InterceptionHelper::releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& xInterceptor ) throw( RuntimeException ) -{ - // Ready for multithreading - ResetableGuard aGuard( m_aLock ); - // Safe impossible cases - // Method not defined for all incoming parameter. - LOG_ASSERT( impldbg_checkParameter_releaseDispatchProviderInterceptor( xInterceptor ), "InterceptionHelper::releaseDispatchProviderInterceptor()\nInvalid parameter detected.\n" ) - - // Search for existing interceptor in list. - IMPL_CInterceptorList::iterator aItem = m_aInterceptorList.find( xInterceptor ); - // Safe impossible cases - // We can't remove an interceptor, which we don't know ... - LOG_ASSERT( !(aItem==m_aInterceptorList.end()), "InterceptionHelper::releaseDispatchProviderInterceptor()\nCan't remove interceptor which I don't know!\n") - if( aItem != m_aInterceptorList.end() ) + // b2) If "m_bPreferrFirstInterceptor" is set to false, we have to + // insert it before any other existing interceptor - means at the beginning of our list. + else { - // Rebuild master/slave relations of interceptor list. - // Get slave and master of given interceptor. - Reference< XDispatchProvider > xSlave ( xInterceptor->getSlaveDispatchProvider() , UNO_QUERY ); - Reference< XDispatchProviderInterceptor > xSlaveInterceptor ( xSlave , UNO_QUERY ); - Reference< XDispatchProvider > xMaster ( xInterceptor->getMasterDispatchProvider() , UNO_QUERY ); - Reference< XDispatchProviderInterceptor > xMasterInterceptor ( xMaster , UNO_QUERY ); - // Safe impossible cases. - // A master must exist - but it must not an interceptor! - // => We set us as a master of highest registered interecptor; but we don't implement the interceptor interface! - // The same must valid for slaves. - // => We set our dispatch helper as slave of lowest registered interceptor - but they don't implement the interceptor interface! - // ( see register function for further informations! ) - LOG_ASSERT( !(xMaster.is()==sal_False || xSlave.is()==sal_False), "InterceptionHelper::releaseDispatchProviderInterceptor()\nCan't find a master or slave of registered interceptor. Taht could'nt be!\n" ) - // Reconnect slave relation. - if( xMasterInterceptor.is() == sal_True ) - { - xMasterInterceptor->setSlaveDispatchProvider( xSlave ); - } - // Reconnect master relation. - if( xSlaveInterceptor.is() == sal_True ) - { - xSlaveInterceptor->setMasterDispatchProvider( xMaster ); - } - // Unchain the interceptor that has to be removed. - xInterceptor->setSlaveDispatchProvider ( Reference< XDispatchProvider >() ); - xInterceptor->setMasterDispatchProvider ( Reference< XDispatchProvider >() ); - // Remove interceptor from our list. - m_aInterceptorList.erase( aItem ); + css::uno::Reference< css::frame::XDispatchProvider > xSlaveD = m_lInterceptionRegs.begin()->xInterceptor; + css::uno::Reference< css::frame::XDispatchProviderInterceptor > xSlaveI (xSlaveD , css::uno::UNO_QUERY); + + xInterceptor->setMasterDispatchProvider(xThis ); + xInterceptor->setSlaveDispatchProvider (xSlaveD ); + xSlaveI->setMasterDispatchProvider (aInfo.xInterceptor); + + m_lInterceptionRegs.push_front(aInfo); } - Reference < XFrame > xOwner( m_xOwnerWeak.get(), UNO_QUERY ); - if ( xOwner.is() ) + css::uno::Reference< css::frame::XFrame > xOwner(m_xOwnerWeak.get(), css::uno::UNO_QUERY); + + aWriteLock.unlock(); + // } SAFE + + // Don't forget to send a frame action event "context changed". + // Any cached dispatch objects must be validated now! + if (xOwner.is()) xOwner->contextChanged(); } -//***************************************************************************************************************** -// XDispatchProviderInterception -//***************************************************************************************************************** -Reference< XDispatchProviderInterceptor > InterceptionHelper::impl_searchMatchingInterceptor( const OUString& sURL ) +/*----------------------------------------------------------------------------- + 31.03.2003 10:27 +-----------------------------------------------------------------------------*/ +void SAL_CALL InterceptionHelper::releaseDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor >& xInterceptor) + throw(css::uno::RuntimeException) { - // Step over all items and return interceptor, which URL list match given one at first. - sal_Int32 nInterceptorCount = (sal_Int32)(m_aInterceptorList.size()); - for( sal_Int32 nInterceptor=0; nInterceptor<nInterceptorCount; ++nInterceptor ) + // reject wrong calling of this interface method + css::uno::Reference< css::frame::XDispatchProvider > xThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY); + if (!xInterceptor.is()) + throw css::uno::RuntimeException(DECLARE_ASCII("NULL references not allowed as in parameter"), xThis); + + // SAFE { + WriteGuard aWriteLock(m_aLock); + + // search this interceptor ... + // If it could be located inside cache - + // use it's slave/master relations to update the interception list; + // set empty references for it as new master and slave; + // and relase it from out cache. + InterceptorList::iterator pIt = m_lInterceptionRegs.findByReference(xInterceptor); + if (pIt != m_lInterceptionRegs.end()) { - // Use reference to list for faster access! (Don't use index operator for every element.) - // Don't check index - we know what we do ... - const Sequence< OUString >& seqPatternList = m_aInterceptorList[nInterceptor].seqPatternList; - sal_Int32 nPatternCount = seqPatternList.getLength(); - for( sal_Int32 nPattern=0; nPattern<nPatternCount; ++nPattern ) - { - // Try to match given URL with current pattern. - // If it match true we have found an interceptor and can return it. - // ( For better performance we return immediately! ) - if( Wildcard::match( sURL, seqPatternList[nPattern] ) == sal_True ) - { - return m_aInterceptorList[nInterceptor].xInterceptor; - } - } - } - // Return with an empty result of operation! - // No pattern and no interceptor was found. - return Reference< XDispatchProviderInterceptor >(); -} - -//***************************************************************************************************************** -// XEventListener -//***************************************************************************************************************** -void SAL_CALL InterceptionHelper::disposing( const EventObject& Source ) throw ( RuntimeException ) -{ - Reference< XEventListener >( m_xSlaveDispatcher, UNO_QUERY )->disposing( Source ); - m_xSlaveDispatcher = 0; -} + css::uno::Reference< css::frame::XDispatchProvider > xSlaveD (xInterceptor->getSlaveDispatchProvider() , css::uno::UNO_QUERY); + css::uno::Reference< css::frame::XDispatchProvider > xMasterD (xInterceptor->getMasterDispatchProvider(), css::uno::UNO_QUERY); + css::uno::Reference< css::frame::XDispatchProviderInterceptor > xSlaveI (xSlaveD , css::uno::UNO_QUERY); + css::uno::Reference< css::frame::XDispatchProviderInterceptor > xMasterI (xMasterD , css::uno::UNO_QUERY); -//_________________________________________________________________________________________________________________ -// debug methods -//_________________________________________________________________________________________________________________ + if (xMasterI.is()) + xMasterI->setSlaveDispatchProvider(xSlaveD); -/*----------------------------------------------------------------------------------------------------------------- - The follow methods checks the parameter for other functions. If a parameter or his value is non valid, - we return "sal_False". (else sal_True) This mechanism is used to throw an ASSERT! + if (xSlaveI.is()) + xSlaveI->setMasterDispatchProvider(xMasterD); - ATTENTION + xInterceptor->setSlaveDispatchProvider (css::uno::Reference< css::frame::XDispatchProvider >()); + xInterceptor->setMasterDispatchProvider(css::uno::Reference< css::frame::XDispatchProvider >()); - If you miss a test for one of this parameters, contact the autor or add it himself !(?) - But ... look for right testing! See using of this methods! ------------------------------------------------------------------------------------------------------------------*/ - -#ifdef ENABLE_ASSERTIONS - -//***************************************************************************************************************** -// An instance of this class can only work with valid initialization. -sal_Bool InterceptionHelper::impldbg_checkParameter_InterceptionHelper( const Reference< XDispatchProvider >& xSlaveDispatcher ) -{ - // Set default return value. - sal_Bool bOK = sal_True; - // Check parameter. - if ( - ( &xSlaveDispatcher == NULL ) || - ( xSlaveDispatcher.is() == sal_False ) - ) - { - bOK = sal_False ; + m_lInterceptionRegs.erase(pIt); } - // Return result of check. - return bOK ; -} -//***************************************************************************************************************** -// We accept non zero URLs only. Target name can be empty! -// And we can't test search flags in all combinations ... -sal_Bool InterceptionHelper::impldbg_checkParameter_queryDispatch( const URL& aURL , - const OUString& sTargetFrameName, - sal_Int32 nSearchFlags ) -{ - // Set default return value. - sal_Bool bOK = sal_True; - // Check parameter. - if ( - ( &aURL == NULL ) || - ( &sTargetFrameName == NULL ) || - ( aURL.Complete.getLength() < 1 ) - ) - { - bOK = sal_False ; - } - // Return result of check. - return bOK ; -} + css::uno::Reference< css::frame::XFrame > xOwner(m_xOwnerWeak.get(), css::uno::UNO_QUERY); -//***************************************************************************************************************** -// We check the same like queryDispatch() before but for a list of description items. -sal_Bool InterceptionHelper::impldbg_checkParameter_queryDispatches( const Sequence< DispatchDescriptor >& seqDescriptor ) -{ - // Set default return value. - sal_Bool bOK = sal_True; - // Check parameter. - if( &seqDescriptor == NULL ) - { - bOK = sal_False; - } - else - { - sal_Int32 nCount = seqDescriptor.getLength(); - if( nCount < 1 ) - { - bOK = sal_False; - } - else - { - for( sal_Int32 nPosition=0; nPosition<nCount; ++nPosition ) - { - if ( impldbg_checkParameter_queryDispatch ( seqDescriptor[nPosition].FeatureURL , - seqDescriptor[nPosition].FrameName , - seqDescriptor[nPosition].SearchFlags - ) == sal_False - ) - { - bOK = sal_False; - break; - } - } - } - } - // Return result of check. - return bOK ; -} + aWriteLock.unlock(); + // } SAFE -//***************************************************************************************************************** -// A valid interceptor must given and he must support the XDispatchProvider interface too! -sal_Bool InterceptionHelper::impldbg_checkParameter_registerDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& xInterceptor ) -{ - // Set default return value. - sal_Bool bOK = sal_True; - // Check parameter. - if ( - ( &xInterceptor == NULL ) || - ( xInterceptor.is() == sal_False ) || - ( Reference< XDispatchProvider >( xInterceptor, UNO_QUERY ).is() == sal_False ) - ) - { - bOK = sal_False ; - } - // Return result of check. - return bOK ; + // Don't forget to send a frame action event "context changed". + // Any cached dispatch objects must be validated now! + if (xOwner.is()) + xOwner->contextChanged(); } -//***************************************************************************************************************** -// A valid interceptor must given and he must support the XDispatchProvider interface too! -sal_Bool InterceptionHelper::impldbg_checkParameter_releaseDispatchProviderInterceptor( const Reference< XDispatchProviderInterceptor >& xInterceptor ) +/*----------------------------------------------------------------------------- + 31.03.2003 10:31 +-----------------------------------------------------------------------------*/ +void SAL_CALL InterceptionHelper::disposing(const css::lang::EventObject& aEvent) + throw(css::uno::RuntimeException) { - // Set default return value. - sal_Bool bOK = sal_True; - // Check parameter. - if ( - ( &xInterceptor == NULL ) || - ( xInterceptor.is() == sal_False ) || - ( Reference< XDispatchProvider >( xInterceptor, UNO_QUERY ).is() == sal_False ) - ) - { - bOK = sal_False ; - } - // Return result of check. - return bOK ; + LOG_WARNING("InterceptionHelper::disposing()", "unexpected situation") } -#endif // #ifdef ENABLE_ASSERTIONS - -} // namespace framework +} // namespace framework |