diff options
Diffstat (limited to 'scripting/source/protocolhandler/scripthandler.cxx')
-rw-r--r-- | scripting/source/protocolhandler/scripthandler.cxx | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/scripting/source/protocolhandler/scripthandler.cxx b/scripting/source/protocolhandler/scripthandler.cxx index bd3542e3ff88..12ee3267453e 100644 --- a/scripting/source/protocolhandler/scripthandler.cxx +++ b/scripting/source/protocolhandler/scripthandler.cxx @@ -170,10 +170,31 @@ 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 allready ) + // Creates a ScriptProvider ( if one is not created already ) createScriptProvider(); Reference< provider::XScript > xFunc = @@ -345,6 +366,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(); } |