Resolves: #i113481# query script invocation from the current frame...

when the controller is not yet attached

(cherry picked from commit 03a410876fbdb5f9e1a7216d9d622557275d4896)

Change-Id: I1da3b3da258445d5187dcc75c4d151d08f9017dc
This commit is contained in:
Tsutomu Uchino 2014-05-17 10:16:40 +00:00 committed by Caolán McNamara
parent fc974a4028
commit a00c4c5e2f

View File

@ -158,7 +158,28 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
OSL_ENSURE( xDocumentScripts.is(), "ScriptProtocolHandler::dispatchWithNotification: can't do the security check!" );
if ( !xDocumentScripts.is() || !xDocumentScripts->getAllowMacroExecution() )
{
if ( xListener.is() )
{
::com::sun::star::frame::DispatchResultEvent aEvent(
static_cast< ::cppu::OWeakObject* >( this ),
::com::sun::star::frame::DispatchResultState::FAILURE,
invokeResult );
try
{
xListener->dispatchFinished( aEvent ) ;
}
catch(RuntimeException & e)
{
OSL_TRACE(
"ScriptProtocolHandler::dispatchWithNotification: caught RuntimeException"
"while dispatchFinished with failture of the execution %s",
::rtl::OUStringToOString( e.Message,
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
}
}
return;
}
}
// Creates a ScriptProvider ( if one is not created already )
@ -333,6 +354,25 @@ ScriptProtocolHandler::getScriptInvocation()
if ( !m_xScriptInvocation.set( xController->getModel(), UNO_QUERY ) )
m_xScriptInvocation.set( xController, UNO_QUERY );
}
else
{
Reference< XFrame > xFrame( m_xFrame.get(), UNO_QUERY );
if ( xFrame.is() )
{
SfxFrame* pFrame = NULL;
for ( pFrame = SfxFrame::GetFirst(); pFrame; pFrame = SfxFrame::GetNext( *pFrame ) )
{
if ( pFrame->GetFrameInterface() == xFrame )
break;
}
SfxObjectShell* pDocShell = pFrame ? pFrame->GetCurrentDocument() : SfxObjectShell::Current();
if ( pDocShell )
{
Reference< XModel > xModel( pDocShell->GetModel() );
m_xScriptInvocation.set( xModel, UNO_QUERY );
}
}
}
}
return m_xScriptInvocation.is();
}