summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-01-15 15:16:48 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-01-16 13:18:33 +0100
commit7e01796c456d7006b73ad4ec2fc502bf8fe8d2ce (patch)
treeccdd05243d1442b9cdd4e42afec2bdc47702433a /libreofficekit
parentbd065f5abacc0c5c0b55d15b67809ebf4898c646 (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.c45
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 )