summaryrefslogtreecommitdiff
path: root/libreofficekit
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-01-12 13:55:11 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-01-12 13:59:35 +0100
commitc0085dbc6a63c200a97532448674edd36f102293 (patch)
tree391aaaed09cc105813f98951f964bf476ed9751f /libreofficekit
parente126f5cb095b2b0e0d3d505a68dfbeb6eefd82e4 (diff)
libreofficekit: fix for missing gdk_threads_add_idle
Change-Id: I52590f60882682943dda354599ab4ed762383b51
Diffstat (limited to 'libreofficekit')
-rw-r--r--libreofficekit/source/gtk/lokdocview.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/libreofficekit/source/gtk/lokdocview.c b/libreofficekit/source/gtk/lokdocview.c
index 810045553b5c..d9d8e41bbbf2 100644
--- a/libreofficekit/source/gtk/lokdocview.c
+++ b/libreofficekit/source/gtk/lokdocview.c
@@ -18,6 +18,67 @@
#define G_SOURCE_REMOVE FALSE
#endif
+/* Before glib 2.12. */
+#ifndef HAVE_GDK_THREADS_ADD_API
+typedef struct
+{
+ GSourceFunc func;
+ gpointer data;
+ GDestroyNotify destroy;
+} GdkThreadsDispatch;
+
+static gboolean
+gdk_threads_dispatch (gpointer data)
+{
+ GdkThreadsDispatch *dispatch = data;
+ gboolean ret = FALSE;
+
+ gdk_threads_enter ();
+ ret = dispatch->func (dispatch->data);
+ gdk_threads_leave ();
+
+ return ret;
+}
+
+static void
+gdk_threads_dispatch_free (gpointer data)
+{
+ GdkThreadsDispatch *dispatch = data;
+
+ if (dispatch->destroy && dispatch->data)
+ dispatch->destroy (dispatch->data);
+
+ g_slice_free (GdkThreadsDispatch, data);
+}
+
+guint
+gdk_threads_add_idle_full (gint priority,
+ GSourceFunc function,
+ gpointer data,
+ GDestroyNotify notify)
+{
+ GdkThreadsDispatch *dispatch;
+
+ g_return_val_if_fail (function != NULL, 0);
+
+ dispatch = g_slice_new (GdkThreadsDispatch);
+ dispatch->func = function;
+ dispatch->data = data;
+ dispatch->destroy = notify;
+
+ return g_idle_add_full (priority, gdk_threads_dispatch, dispatch,
+ gdk_threads_dispatch_free);
+}
+
+guint
+gdk_threads_add_idle (GSourceFunc function,
+ gpointer data)
+{
+ return gdk_threads_add_idle_full (G_PRIORITY_DEFAULT_IDLE,
+ function, data, NULL);
+}
+#endif /* HAVE_GDK_THREADS_ADD_API */
+
static void lok_docview_class_init( LOKDocViewClass* pClass );
static void lok_docview_init( LOKDocView* pDocView );