summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenry Castro <hcastro@collabora.com>2020-12-25 13:09:00 -0400
committerHenry Castro <hcastro@collabora.com>2021-01-19 04:06:06 +0100
commitfc67bb78c08847d8ce96b3b53a902cabcf6106c1 (patch)
tree59fb883df06b689d4c8bcdff85e2d0ae8239b635
parent68016cd0d8f21c2e9760ad1f3400d2e1df7c4d4c (diff)
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> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109168 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r--desktop/source/lib/init.cxx7
-rw-r--r--include/vcl/svapp.hxx14
-rw-r--r--vcl/source/app/svapp.cxx19
3 files changed, 37 insertions, 3 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 1800ff5ed7db..35ea08209e7e 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -2472,11 +2472,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)
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index db4563b7ba82..d0c1e7f0bb6e 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -27,6 +27,7 @@
#include <vector>
#include <comphelper/solarmutex.hxx>
+#include <LibreOfficeKit/LibreOfficeKitTypes.h>
#include <osl/mutex.hxx>
#include <rtl/ustring.hxx>
#include <osl/thread.h>
@@ -34,6 +35,7 @@
#include <tools/link.hxx>
#include <tools/solar.h>
#include <vcl/dllapi.h>
+#include <vcl/IDialogRenderable.hxx>
#include <vcl/inputtypes.hxx>
#include <vcl/exceptiontypes.hxx>
#include <vcl/vclevent.hxx>
@@ -235,7 +237,7 @@ enum class DialogCancelMode {
@see Desktop, ImplSVData
*/
-class VCL_DLLPUBLIC Application
+class VCL_DLLPUBLIC Application : public vcl::ILibreOfficeKitNotifier
{
public:
/** @name Initialization
@@ -1347,6 +1349,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 );
};
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index e2dbc7753e76..34227013dc23 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -159,6 +159,8 @@ Application::Application()
osl_setEnvironment(aVar.pData, aValue.pData);
ImplGetSVData()->mpApp = this;
+ m_pCallbackData = nullptr;
+ m_pCallback = nullptr;
}
Application::~Application()
@@ -313,6 +315,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
{