diff options
Diffstat (limited to 'framework/source/uiconfiguration/windowstateconfiguration.cxx')
-rw-r--r-- | framework/source/uiconfiguration/windowstateconfiguration.cxx | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/framework/source/uiconfiguration/windowstateconfiguration.cxx b/framework/source/uiconfiguration/windowstateconfiguration.cxx index 4ac316b73ab0..83cdc1015a32 100644 --- a/framework/source/uiconfiguration/windowstateconfiguration.cxx +++ b/framework/source/uiconfiguration/windowstateconfiguration.cxx @@ -364,16 +364,20 @@ throw ( RuntimeException ) sal_Bool SAL_CALL ConfigurationAccess_WindowState::hasByName( const ::rtl::OUString& rResourceURL ) throw (::com::sun::star::uno::RuntimeException) { - try - { - getByName( rResourceURL ); - } - catch ( NoSuchElementException& ) + // SAFE + ResetableGuard aLock( m_aLock ); + + ResourceURLToInfoCache::const_iterator pIter = m_aResourceURLToInfoCache.find( rResourceURL ); + if ( pIter != m_aResourceURLToInfoCache.end() ) + return sal_True; + else { - return sal_False; + Any a( impl_getWindowStateFromResourceURL( rResourceURL ) ); + if ( a == Any() ) + return sal_False; + else + return sal_True; } - - return sal_True; } // XElementAccess @@ -1044,12 +1048,11 @@ Any ConfigurationAccess_WindowState::impl_getWindowStateFromResourceURL( const r try { // Try to ask our configuration access - if ( m_xConfigAccess.is() ) + if ( m_xConfigAccess.is() && m_xConfigAccess->hasByName( rResourceURL ) ) { - Reference< XNameAccess > xNameAccess; - Any a( m_xConfigAccess->getByName( rResourceURL )); - if ( a >>= xNameAccess ) + Reference< XNameAccess > xNameAccess( m_xConfigAccess->getByName( rResourceURL ), UNO_QUERY ); + if ( xNameAccess.is() ) return impl_insertCacheAndReturnSequence( rResourceURL, xNameAccess ); } } |