diff options
author | Giovanni Campagna <gcampagna@src.gnome.org> | 2014-05-12 23:08:34 +0200 |
---|---|---|
committer | Giovanni Campagna <gcampagna@src.gnome.org> | 2014-06-25 20:45:46 +0200 |
commit | 3f09daa34e56ab79e43233e8aaae3e353a508210 (patch) | |
tree | bcc55bded7971bdeb24f7c2442ec7b695fc6150d | |
parent | 272d8c935808ec879e41ee53f0b9030ffd4abf56 (diff) | |
download | gjs-3f09daa34e56ab79e43233e8aaae3e353a508210.tar.gz |
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
-rw-r--r-- | Makefile-modules.am | 4 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | modules/cairo.cpp | 13 |
3 files changed, 16 insertions, 2 deletions
diff --git a/Makefile-modules.am b/Makefile-modules.am index d17ca6d1..20bbd44d 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 8281308f..819abb2c 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 1fd51b6b..b5dab642 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, |