[Libreoffice-commits] core.git: desktop/source include/vcl vcl/source

Henry Castro (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 5 11:21:49 UTC 2021


 desktop/source/lib/init.cxx |    7 +++++--
 include/vcl/svapp.hxx       |   14 +++++++++++++-
 vcl/source/app/svapp.cxx    |   19 +++++++++++++++++++
 3 files changed, 37 insertions(+), 3 deletions(-)

New commits:
commit 19c144cd36ccd54d5725b6c45f786e9712ae107c
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Fri Dec 25 13:09:00 2020 -0400
Commit:     Henry Castro <hcastro at collabora.com>
CommitDate: Tue Jan 5 12:21:02 2021 +0100

    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 at collabora.com>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 2682f3cf6e1a..6a88eb05701b 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -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)
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index b1d7759765c3..bfa92cf88321 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -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 );
 };
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index c1cbd6d093ce..4449f38642ca 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -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
 {


More information about the Libreoffice-commits mailing list