summaryrefslogtreecommitdiff
path: root/framework/source/uiconfiguration/windowstateconfiguration.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/source/uiconfiguration/windowstateconfiguration.cxx')
-rwxr-xr-x[-rw-r--r--]framework/source/uiconfiguration/windowstateconfiguration.cxx27
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 );
}
}