Blob Blame History Raw
From 62d05c21fdfe3e75e52fc275df6ef0ea95cb93d1 Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.co.uk>
Date: Thu, 17 Sep 2015 10:58:56 +0200
Subject: [PATCH 147/398] sfx2: add SfxViewShell::libreOfficeKitViewCallback()

This is similar to the existing LOK callback, the difference is that the
existing one assumes there is only one SfxViewShell instance at the same
time.

This newer callback is precisely per-view, so model notifications can
invoke all view callbacks, while view notifications can invoke only the
callback of the relevant view.

This is just the framework, all actual client code has to be still
ported over (and then the existing callback can be removed).

(cherry picked from commit c74ccac7cd94eba052d21cf74e03e214d58942e4)

Change-Id: I3d8f27740c69fcf6ffbbdce12db2ea088321493d
---
 include/sfx2/viewsh.hxx      |  7 +++++++
 sfx2/source/view/viewimp.hxx |  5 ++++-
 sfx2/source/view/viewsh.cxx  | 14 ++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx
index c6e7f4a2ca12..69bd32c5ee25 100644
--- a/include/sfx2/viewsh.hxx
+++ b/include/sfx2/viewsh.hxx
@@ -39,6 +39,8 @@
 #include <o3tl/typed_flags_set.hxx>
 #include <vcl/vclptr.hxx>
 #include <sfx2/tabdlg.hxx>
+#define LOK_USE_UNSTABLE_API
+#include <LibreOfficeKit/LibreOfficeKitTypes.h>
 
 class SfxBaseController;
 class Size;
@@ -317,6 +319,11 @@ public:
     SAL_DLLPRIVATE void TakeOwnership_Impl();
     SAL_DLLPRIVATE void TakeFrameOwnership_Impl();
     SAL_DLLPRIVATE bool ExecKey_Impl(const KeyEvent& aKey);
+
+    /// The actual implementation of the lok::Document::registerViewCallback() API.
+    void registerLibreOfficeKitViewCallback(LibreOfficeKitCallback pCallback, void* pLibreOfficeKitData);
+    /// Invokes the registered callback, if there are any.
+    void libreOfficeKitViewCallback(int nType, const char* pPayload) const;
 };
 
 
diff --git a/sfx2/source/view/viewimp.hxx b/sfx2/source/view/viewimp.hxx
index 43b25d045eca..9f3ee1e3872b 100644
--- a/sfx2/source/view/viewimp.hxx
+++ b/sfx2/source/view/viewimp.hxx
@@ -65,7 +65,10 @@ struct SfxViewShell_Impl
 
     mutable SfxInPlaceClientList* mpIPClientList;
 
-    SfxViewShell_Impl(SfxViewShellFlags const nFlags);
+    LibreOfficeKitCallback m_pLibreOfficeKitViewCallback;
+    void* m_pLibreOfficeKitViewData;
+
+    explicit SfxViewShell_Impl(SfxViewShellFlags const nFlags);
     ~SfxViewShell_Impl();
 
     SfxInPlaceClientList* GetIPClientList_Impl( bool bCreate = true ) const;
diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx
index 939c590ffa82..8e7e68598dda 100644
--- a/sfx2/source/view/viewsh.cxx
+++ b/sfx2/source/view/viewsh.cxx
@@ -310,6 +310,8 @@ SfxViewShell_Impl::SfxViewShell_Impl(SfxViewShellFlags const nFlags)
 ,   m_nFamily(0xFFFF)   // undefined, default set by TemplateDialog
 ,   m_pController(0)
 ,   mpIPClientList(NULL)
+,   m_pLibreOfficeKitViewCallback(0)
+,   m_pLibreOfficeKitViewData(0)
 {}
 
 SfxViewShell_Impl::~SfxViewShell_Impl()
@@ -1633,6 +1635,18 @@ bool SfxViewShell::ExecKey_Impl(const KeyEvent& aKey)
     return pImp->m_xAccExec->execute(aKey.GetKeyCode());
 }
 
+void SfxViewShell::registerLibreOfficeKitViewCallback(LibreOfficeKitCallback pCallback, void* pData)
+{
+    pImp->m_pLibreOfficeKitViewCallback = pCallback;
+    pImp->m_pLibreOfficeKitViewData = pData;
+}
+
+void SfxViewShell::libreOfficeKitViewCallback(int nType, const char* pPayload) const
+{
+    if (pImp->m_pLibreOfficeKitViewCallback)
+        pImp->m_pLibreOfficeKitViewCallback(nType, pPayload, pImp->m_pLibreOfficeKitViewData);
+}
+
 bool SfxViewShell::KeyInput( const KeyEvent &rKeyEvent )
 
 /*  [Description]
-- 
2.12.0