lok: add missing global notifier
Occurs when server shows the "Macro Security Warning" before load the document if enable/disable macros, but there are no instances for document/view/controller yet. So it is required to use the global notifier so it can be sent messages to the client side using the JSDialog framework. Change-Id: I67f15b21cbaf21906b88145f3c5835cf0e1ff79d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108288 Tested-by: Jenkins Reviewed-by: Henry Castro <hcastro@collabora.com>
This commit is contained in:
@@ -2464,11 +2464,14 @@ static void lo_registerCallback (LibreOfficeKit* pThis,
|
||||
{
|
||||
SolarMutexGuard aGuard;
|
||||
|
||||
Application* pApp = GetpApp();
|
||||
assert(pApp);
|
||||
|
||||
LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
|
||||
pLib->maLastExceptionMsg.clear();
|
||||
|
||||
pLib->mpCallback = pCallback;
|
||||
pLib->mpCallbackData = pData;
|
||||
pApp->m_pCallback = pLib->mpCallback = pCallback;
|
||||
pApp->m_pCallbackData = pLib->mpCallbackData = pData;
|
||||
}
|
||||
|
||||
static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const char* pFormat, const char* pFilterOptions)
|
||||
|
@@ -27,12 +27,14 @@
|
||||
#include <vector>
|
||||
|
||||
#include <comphelper/solarmutex.hxx>
|
||||
#include <LibreOfficeKit/LibreOfficeKitTypes.h>
|
||||
#include <osl/mutex.hxx>
|
||||
#include <rtl/ustring.hxx>
|
||||
#include <osl/thread.h>
|
||||
#include <tools/gen.hxx>
|
||||
#include <tools/link.hxx>
|
||||
#include <vcl/dllapi.h>
|
||||
#include <vcl/IDialogRenderable.hxx>
|
||||
#include <vcl/inputtypes.hxx>
|
||||
#include <vcl/exceptiontypes.hxx>
|
||||
#include <vcl/vclevent.hxx>
|
||||
@@ -227,7 +229,7 @@ enum class DialogCancelMode {
|
||||
|
||||
@see Desktop, ImplSVData
|
||||
*/
|
||||
class VCL_DLLPUBLIC Application
|
||||
class VCL_DLLPUBLIC Application : public vcl::ILibreOfficeKitNotifier
|
||||
{
|
||||
public:
|
||||
/** @name Initialization
|
||||
@@ -1319,6 +1321,16 @@ public:
|
||||
bool bMobile = false);
|
||||
|
||||
static weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow);
|
||||
|
||||
// ILibreOfficeKitNotifier
|
||||
void* m_pCallbackData;
|
||||
LibreOfficeKitCallback m_pCallback;
|
||||
|
||||
virtual void notifyWindow(vcl::LOKWindowId nLOKWindowId,
|
||||
const OUString& rAction,
|
||||
const std::vector<vcl::LOKPayloadItem>& rPayload = std::vector<vcl::LOKPayloadItem>()) const override;
|
||||
virtual void libreOfficeKitViewCallback(int nType, const char* pPayload) const override;
|
||||
|
||||
private:
|
||||
DECL_STATIC_LINK( Application, PostEventHandler, void*, void );
|
||||
};
|
||||
|
@@ -161,6 +161,8 @@ Application::Application()
|
||||
osl_setEnvironment(aVar.pData, aValue.pData);
|
||||
|
||||
ImplGetSVData()->mpApp = this;
|
||||
m_pCallbackData = nullptr;
|
||||
m_pCallback = nullptr;
|
||||
}
|
||||
|
||||
Application::~Application()
|
||||
@@ -310,6 +312,23 @@ void Application::EndAllPopups()
|
||||
Application::PostUserEvent( LINK( nullptr, ImplSVAppData, ImplEndAllPopupsMsg ) );
|
||||
}
|
||||
|
||||
void Application::notifyWindow(vcl::LOKWindowId /*nLOKWindowId*/,
|
||||
const OUString& /*rAction*/,
|
||||
const std::vector<vcl::LOKPayloadItem>& /*rPayload = std::vector<LOKPayloadItem>()*/) const
|
||||
{
|
||||
}
|
||||
|
||||
void Application::libreOfficeKitViewCallback(int nType, const char* pPayload) const
|
||||
{
|
||||
if (!comphelper::LibreOfficeKit::isActive())
|
||||
return;
|
||||
|
||||
if (m_pCallback)
|
||||
{
|
||||
m_pCallback(nType, pPayload, m_pCallbackData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
namespace
|
||||
{
|
||||
|
Reference in New Issue
Block a user