[Libreoffice-commits] core.git: Branch 'feature/tiled-editing' - libreofficekit/source

Miklos Vajna vmiklos at collabora.co.uk
Fri Jan 9 09:14:46 PST 2015


 libreofficekit/source/gtk/lokdocview.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

New commits:
commit b2b55e3448cb109003d80f29f5b524e0a59220ad
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Fri Jan 9 18:12:52 2015 +0100

    gtktiledviewer: invoke paintTile() on the main thread from the callback
    
    Change-Id: Id910c1905d23f16cae5b6b551c74193d46cff256

diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c
index 903f7e3..65fdbfd 100644
--- a/libreofficekit/source/gtk/lokdocview.c
+++ b/libreofficekit/source/gtk/lokdocview.c
@@ -149,7 +149,16 @@ void renderDocument( LOKDocView* pDocView )
     gtk_image_set_from_pixbuf( GTK_IMAGE( pDocView->pCanvas ), pDocView->pPixBuf );
 }
 
-static void lok_docview_callback(int nType, const char* pPayload, void* pData)
+/// Invoked on the main thread if lok_docview_callback_worker() requests so.
+static gboolean lok_docview_callback(gpointer pData)
+{
+    LOKDocView* pDocView = pData;
+    renderDocument(pDocView);
+    return G_SOURCE_REMOVE;
+}
+
+/// Our LOK callback, runs on the LO thread.
+static void lok_docview_callback_worker(int nType, const char* pPayload, void* pData)
 {
     LOKDocView* pDocView = pData;
 
@@ -158,7 +167,7 @@ static void lok_docview_callback(int nType, const char* pPayload, void* pData)
     case LOK_CALLBACK_INVALIDATE_TILES:
         // TODO for now just always render the document.
         (void)pPayload;
-        renderDocument( pDocView );
+        gdk_threads_add_idle(lok_docview_callback, pDocView);
         break;
     default:
         break;
@@ -185,7 +194,7 @@ SAL_DLLPUBLIC_EXPORT gboolean lok_docview_open_document( LOKDocView* pDocView, c
     else
     {
         renderDocument( pDocView );
-        pDocView->pDocument->pClass->registerCallback(pDocView->pDocument, &lok_docview_callback, pDocView);
+        pDocView->pDocument->pClass->registerCallback(pDocView->pDocument, &lok_docview_callback_worker, pDocView);
     }
 
     return TRUE;


More information about the Libreoffice-commits mailing list