diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-01-15 15:16:48 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-01-16 13:18:33 +0100 |
commit | 7e01796c456d7006b73ad4ec2fc502bf8fe8d2ce (patch) | |
tree | ccdd05243d1442b9cdd4e42afec2bdc47702433a /libreofficekit | |
parent | bd065f5abacc0c5c0b55d15b67809ebf4898c646 (diff) |
lokdocview: add LOKDocViewCallbackData
So that the callback code running on the main thread can be aware of the
event type and payload (necessary in the future to do partial repaints).
Change-Id: I790b2ce0b6f9f88ba71d94a17bf0c8fc1b567c5f
Diffstat (limited to 'libreofficekit')
-rw-r--r-- | libreofficekit/source/gtk/lokdocview.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c index 5e6e7904d301..d9be2dfcd64b 100644 --- a/libreofficekit/source/gtk/lokdocview.c +++ b/libreofficekit/source/gtk/lokdocview.c @@ -178,20 +178,30 @@ void renderDocument( LOKDocView* pDocView ) } } +/// Callback data, allocated in lok_docview_callback_worker(), released in lok_docview_callback(). +typedef struct +{ + int m_nType; + const char* m_pPayload; + LOKDocView* m_pDocView; +} +LOKDocViewCallbackData; + /// Invoked on the main thread if lok_docview_callback_worker() requests so. static gboolean lok_docview_callback(gpointer pData) { - LOKDocView* pDocView = pData; - -#if ! GTK_CHECK_VERSION(2,12,0) - GDK_THREADS_ENTER(); -#endif + LOKDocViewCallbackData* pCallback = pData; - renderDocument(pDocView); + switch (pCallback->m_nType) + { + case LOK_CALLBACK_INVALIDATE_TILES: + renderDocument(pCallback->m_pDocView); + break; + default: + break; + } -#if ! GTK_CHECK_VERSION(2,12,0) - GDK_THREADS_LEAVE(); -#endif + g_free(pCallback); return G_SOURCE_REMOVE; } @@ -200,20 +210,15 @@ static void lok_docview_callback_worker(int nType, const char* pPayload, void* p { LOKDocView* pDocView = pData; - switch (nType) - { - case LOK_CALLBACK_INVALIDATE_TILES: - // TODO for now just always render the document. - (void)pPayload; + LOKDocViewCallbackData* pCallback = g_new0(LOKDocViewCallbackData, 1); + pCallback->m_nType = nType; + pCallback->m_pPayload = pPayload; + pCallback->m_pDocView = pDocView; #if GTK_CHECK_VERSION(2,12,0) - gdk_threads_add_idle(lok_docview_callback, pDocView); + gdk_threads_add_idle(lok_docview_callback, pCallback); #else - g_idle_add(lok_docview_callback, pDocView); + g_idle_add(lok_docview_callback, pDocView); #endif - break; - default: - break; - } } SAL_DLLPUBLIC_EXPORT gboolean lok_docview_open_document( LOKDocView* pDocView, char* pPath ) |