[gjs] cairo: enable multithreading for cairo-xlib



commit 3f09daa34e56ab79e43233e8aaae3e353a508210
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Mon May 12 23:08:34 2014 +0200

    cairo: enable multithreading for cairo-xlib
    
    We want to be able to free cairo objects from the background thread,
    and that means we must be able to make xlib calls from multiple
    threads. Which is ok, if we initialize xlib beforehand.
    
    We don't have a good place to initialize gjs, where we're sure to
    be called before the first XOpenDisplay(), so just stuff it into
    a constructor.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=730030

 Makefile-modules.am |    4 ++--
 configure.ac        |    1 +
 modules/cairo.cpp   |   13 +++++++++++++
 3 files changed, 16 insertions(+), 2 deletions(-)
---
diff --git a/Makefile-modules.am b/Makefile-modules.am
index d17ca6d..20bbd44 100644
--- a/Makefile-modules.am
+++ b/Makefile-modules.am
@@ -27,8 +27,8 @@ CLEANFILES += $(nodist_libmodules_resources_la_SOURCES)
 libmodules_resources_la_CPPFLAGS = $(JS_NATIVE_MODULE_CFLAGS)
 libmodules_resources_la_LIBADD = $(JS_NATIVE_MODULE_LIBADD)
 
-libcairoNative_la_CPPFLAGS = $(JS_NATIVE_MODULE_CFLAGS) $(GJS_CAIRO_CFLAGS)
-libcairoNative_la_LIBADD = $(JS_NATIVE_MODULE_LIBADD) $(GJS_CAIRO_LIBS)
+libcairoNative_la_CPPFLAGS = $(JS_NATIVE_MODULE_CFLAGS) $(GJS_CAIRO_CFLAGS) $(GJS_CAIRO_XLIB_CFLAGS)
+libcairoNative_la_LIBADD = $(JS_NATIVE_MODULE_LIBADD) $(GJS_CAIRO_LIBS) $(GJS_CAIRO_XLIB_LIBS)
 libcairoNative_la_SOURCES =                       \
        modules/cairo-private.h                   \
        modules/cairo-module.h                    \
diff --git a/configure.ac b/configure.ac
index 8281308..819abb2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -98,6 +98,7 @@ AM_CONDITIONAL(ENABLE_CAIRO, test x$have_cairo = xyes)
 AS_IF([test x$have_cairo = xyes], [
   AC_DEFINE([ENABLE_CAIRO],[1],[Define if you want to build with cairo support])
 ])
+PKG_CHECK_MODULES([GJS_CAIRO_XLIB], [cairo-xlib], , )
 
 # Optional GTK+ dep (enabled by default)
 AC_ARG_WITH(gtk,
diff --git a/modules/cairo.cpp b/modules/cairo.cpp
index 1fd51b6..b5dab64 100644
--- a/modules/cairo.cpp
+++ b/modules/cairo.cpp
@@ -27,6 +27,19 @@
 
 #include "cairo-private.h"
 
+#if CAIRO_HAS_XLIB_SURFACE
+#include "cairo-xlib.h"
+
+class XLibConstructor {
+ public:
+    XLibConstructor() {
+        XInitThreads();
+    }
+};
+
+static XLibConstructor constructor;
+#endif
+
 JSBool
 gjs_cairo_check_status(JSContext      *context,
                        cairo_status_t  status,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]