From a00c4c5e2fb9461fef1fbce4d51c8cdf36141b9f Mon Sep 17 00:00:00 2001 From: Tsutomu Uchino Date: Sat, 17 May 2014 10:16:40 +0000 Subject: [PATCH] Resolves: #i113481# query script invocation from the current frame... when the controller is not yet attached (cherry picked from commit 03a410876fbdb5f9e1a7216d9d622557275d4896) Change-Id: I1da3b3da258445d5187dcc75c4d151d08f9017dc --- .../source/protocolhandler/scripthandler.cxx | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/scripting/source/protocolhandler/scripthandler.cxx b/scripting/source/protocolhandler/scripthandler.cxx index 50fa627a9e6f..d2c6f75a16f2 100644 --- a/scripting/source/protocolhandler/scripthandler.cxx +++ b/scripting/source/protocolhandler/scripthandler.cxx @@ -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(); }