flatten PopupMenuDispatcher::queryDispatch
Change-Id: I8dce031913a4ed40faa8d7994b1da8990d684091
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124732
Tested-by: Jenkins
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/framework/source/dispatch/popupmenudispatcher.cxx b/framework/source/dispatch/popupmenudispatcher.cxx
index a79ffe3..0333c06 100644
--- a/framework/source/dispatch/popupmenudispatcher.cxx
+++ b/framework/source/dispatch/popupmenudispatcher.cxx
@@ -98,57 +98,57 @@ SAL_CALL PopupMenuDispatcher::queryDispatch(
const OUString& sTarget ,
sal_Int32 nFlags )
{
if ( !rURL.Complete.startsWith( "vnd.sun.star.popup:" ) )
return {};
// --- SAFE ---
SolarMutexClearableGuard aGuard;
impl_RetrievePopupControllerQuery();
if ( !m_xUriRefFactory.is() )
m_xUriRefFactory = css::uri::UriReferenceFactory::create( m_xContext );
css::uno::Reference< css::container::XNameAccess > xPopupCtrlQuery( m_xPopupCtrlQuery );
aGuard.clear();
// --- SAFE ---
if ( !xPopupCtrlQuery.is() )
return {};
css::uno::Reference< css::frame::XDispatch > xDispatch;
if ( rURL.Complete.startsWith( "vnd.sun.star.popup:" ) )
try
{
// --- SAFE ---
SolarMutexClearableGuard aGuard;
impl_RetrievePopupControllerQuery();
if ( !m_xUriRefFactory.is() )
m_xUriRefFactory = css::uri::UriReferenceFactory::create( m_xContext );
// Just use the main part of the URL for popup menu controllers
sal_Int32 nSchemePart( 0 );
OUString aBaseURL( "vnd.sun.star.popup:" );
OUString aURL( rURL.Complete );
css::uno::Reference< css::container::XNameAccess > xPopupCtrlQuery( m_xPopupCtrlQuery );
aGuard.clear();
// --- SAFE ---
if ( xPopupCtrlQuery.is() )
nSchemePart = aURL.indexOf( ':' );
if (( nSchemePart > 0 ) &&
( aURL.getLength() > ( nSchemePart+1 )))
{
try
{
// Just use the main part of the URL for popup menu controllers
sal_Int32 nSchemePart( 0 );
OUString aBaseURL( "vnd.sun.star.popup:" );
OUString aURL( rURL.Complete );
nSchemePart = aURL.indexOf( ':' );
if (( nSchemePart > 0 ) &&
( aURL.getLength() > ( nSchemePart+1 )))
{
sal_Int32 nQueryPart = aURL.indexOf( '?', nSchemePart );
if ( nQueryPart > 0 )
aBaseURL += aURL.subView( nSchemePart+1, nQueryPart-(nSchemePart+1) );
else if ( nQueryPart == -1 )
aBaseURL += aURL.subView( nSchemePart+1 );
}
css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider;
// Find popup menu controller using the base URL
xPopupCtrlQuery->getByName( aBaseURL ) >>= xDispatchProvider;
// Ask popup menu dispatch provider for dispatch object
if ( xDispatchProvider.is() )
xDispatch = xDispatchProvider->queryDispatch( rURL, sTarget, nFlags );
}
catch ( const RuntimeException& )
{
throw;
}
catch ( const Exception& )
{
}
sal_Int32 nQueryPart = aURL.indexOf( '?', nSchemePart );
if ( nQueryPart > 0 )
aBaseURL += aURL.subView( nSchemePart+1, nQueryPart-(nSchemePart+1) );
else if ( nQueryPart == -1 )
aBaseURL += aURL.subView( nSchemePart+1 );
}
css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider;
// Find popup menu controller using the base URL
xPopupCtrlQuery->getByName( aBaseURL ) >>= xDispatchProvider;
// Ask popup menu dispatch provider for dispatch object
if ( xDispatchProvider.is() )
xDispatch = xDispatchProvider->queryDispatch( rURL, sTarget, nFlags );
}
catch ( const RuntimeException& )
{
throw;
}
catch ( const Exception& )
{
}
return xDispatch;
}