desktop/source/lib/init.cxx               |   19 ++++++++++++++++++-
 include/LibreOfficeKit/LibreOfficeKit.h   |    4 ++++
 include/LibreOfficeKit/LibreOfficeKit.hxx |   11 +++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)

New commits:
commit 539f981900e1823d880f2050291b48f4c51994dd
Author: Marco Cecchetti <marco.cecche...@collabora.com>
Date:   Sat Sep 10 21:02:36 2016 +0200

    LOK: we use callbacks latch for not missing messages sent very early
    
    - lok::Document::setCallbackLatch: used on document load for
    set/unset the latch
    
    - now cell cursors of other views are correctly notified to the new
    view
    
    Change-Id: Ife6dca0e3e329b801d44070f55869afe95a2f313
    Reviewed-on: https://gerrit.libreoffice.org/28812
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Marco Cecchetti <mrcek...@gmail.com>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 0a83941..37a65d1 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -391,7 +391,6 @@ static void doc_getDocumentSize(LibreOfficeKitDocument* 
pThis,
                                 long* pHeight);
 static void doc_initializeForRendering(LibreOfficeKitDocument* pThis,
                                        const char* pArguments);
-
 static void doc_registerCallback(LibreOfficeKitDocument* pThis,
                                 LibreOfficeKitCallback pCallback,
                                 void* pData);
@@ -443,6 +442,9 @@ static unsigned char* 
doc_renderFont(LibreOfficeKitDocument* pThis,
                           int* pFontWidth,
                           int* pFontHeight);
 static char* doc_getPartHash(LibreOfficeKitDocument* pThis, int nPart);
+static void doc_setCallbackLatch(LibreOfficeKitDocument* pThis,
+                                 bool bCallbackLatch);
+
 
 LibLODocument_Impl::LibLODocument_Impl(const uno::Reference 
<css::lang::XComponent> &xComponent)
     : mxComponent(xComponent)
@@ -489,6 +491,8 @@ LibLODocument_Impl::LibLODocument_Impl(const uno::Reference 
<css::lang::XCompone
         m_pDocumentClass->renderFont = doc_renderFont;
         m_pDocumentClass->getPartHash = doc_getPartHash;
 
+        m_pDocumentClass->setCallbackLatch = doc_setCallbackLatch;
+
         gDocumentClass = m_pDocumentClass;
     }
     pClass = m_pDocumentClass.get();
@@ -2338,6 +2342,19 @@ unsigned char* doc_renderFont(LibreOfficeKitDocument* 
/*pThis*/,
     return nullptr;
 }
 
+static void doc_setCallbackLatch(LibreOfficeKitDocument* pThis, bool 
bCallbackLatch)
+{
+    SolarMutexGuard aGuard;
+    LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis);
+
+    int nView = SfxLokHelper::getView();
+    if (nView < 0)
+        return;
+
+    if (pDocument->mpCallbackFlushHandlers[nView])
+        
pDocument->mpCallbackFlushHandlers[nView]->setEventLatch(bCallbackLatch);
+}
+
 static char* lo_getError (LibreOfficeKit *pThis)
 {
     LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
diff --git a/include/LibreOfficeKit/LibreOfficeKit.h 
b/include/LibreOfficeKit/LibreOfficeKit.h
index 81d65c1..53162a3 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/include/LibreOfficeKit/LibreOfficeKit.h
@@ -244,6 +244,10 @@ struct _LibreOfficeKitDocumentClass
                            const int nTileWidth,
                            const int nTileHeight);
 
+    /// @see lok::Document::setCallbackLatch().
+    void (*setCallbackLatch) (LibreOfficeKitDocument* pThis,
+                              bool bCallbackLatch);
+
 #endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
 };
 
diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx 
b/include/LibreOfficeKit/LibreOfficeKit.hxx
index eae43af..7c6a8d7 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -435,6 +435,17 @@ public:
                                             nTileWidth, nTileHeight);
     }
 
+    /**
+     * Enable/disable callbacks latch. LOK will set the latch when it wants to
+     * queue new callbacks but not flush them.
+     *
+     * @param bCallbackLatch: true enables the latch, false disables it.
+     */
+    inline void setCallbackLatch(bool bCallbackLatch)
+    {
+        mpDoc->pClass->setCallbackLatch(mpDoc, bCallbackLatch);
+    }
+
 #endif // defined LOK_USE_UNSTABLE_API || defined LIBO_INTERNAL_ONLY
 };
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to