diff options
Diffstat (limited to 'framework/source/uiconfiguration/windowstateconfiguration.cxx')
-rwxr-xr-x[-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 7b081b335bde..ad03a45dfcb9 100644..100755 --- a/framework/source/uiconfiguration/windowstateconfiguration.cxx +++ b/framework/source/uiconfiguration/windowstateconfiguration.cxx @@ -368,16 +368,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 @@ -1048,12 +1052,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 ); } } |