diff --git a/cogl/cogl/cogl-renderer-private.h b/cogl/cogl/cogl-renderer-private.h index efe0eb0cbd4ac2e11cd70a21bf851fe7fd095e85..26de4fcf4ecf381d1077d8df6ce71667415d76ac 100644 --- a/cogl/cogl/cogl-renderer-private.h +++ b/cogl/cogl/cogl-renderer-private.h @@ -56,10 +56,6 @@ struct _CoglRenderer CoglList idle_closures; -#ifdef HAVE_X11 - Display *foreign_xdpy; -#endif - CoglDriverId driver_id; unsigned long private_features [COGL_FLAGS_N_LONGS_FOR_SIZE (COGL_N_PRIVATE_FEATURES)]; diff --git a/cogl/cogl/cogl-renderer.c b/cogl/cogl/cogl-renderer.c index 9daba770fe4bea63fa5a17fcb83f03e908e9b3c6..bc41fb89f8d9022d550c01238fe8ae44b131d5f8 100644 --- a/cogl/cogl/cogl-renderer.c +++ b/cogl/cogl/cogl-renderer.c @@ -65,6 +65,7 @@ #ifdef HAVE_X11 #include "cogl/cogl-xlib-renderer.h" +#include "cogl/cogl-xlib-renderer-private.h" #endif @@ -200,13 +201,14 @@ void cogl_xlib_renderer_set_foreign_display (CoglRenderer *renderer, Display *xdisplay) { + CoglXlibRenderer *xlib_renderer; g_return_if_fail (COGL_IS_RENDERER (renderer)); /* NB: Renderers are considered immutable once connected */ g_return_if_fail (!renderer->connected); - renderer->foreign_xdpy = xdisplay; - + xlib_renderer = _cogl_xlib_renderer_get_data (renderer); + xlib_renderer->xdpy = xdisplay; } #endif /* HAVE_X11 */ diff --git a/cogl/cogl/cogl-xlib-renderer.c b/cogl/cogl/cogl-xlib-renderer.c index ba76a79c4c532a4d27eaecb1a1ab3b57b71dd1fa..785a5ede2fbfa9ca3d12eb2859a51b2301c163e5 100644 --- a/cogl/cogl/cogl-xlib-renderer.c +++ b/cogl/cogl/cogl-xlib-renderer.c @@ -46,9 +46,6 @@ #include #include -static char *_cogl_x11_display_name = NULL; -static GList *_cogl_xlib_renderers = NULL; - static void _xlib_renderer_data_free (CoglXlibRenderer *data) { @@ -70,51 +67,6 @@ _cogl_xlib_renderer_get_data (CoglRenderer *renderer) return renderer->custom_winsys_user_data; } -static void -register_xlib_renderer (CoglRenderer *renderer) -{ - GList *l; - - for (l = _cogl_xlib_renderers; l; l = l->next) - if (l->data == renderer) - return; - - _cogl_xlib_renderers = g_list_prepend (_cogl_xlib_renderers, renderer); -} - -static void -unregister_xlib_renderer (CoglRenderer *renderer) -{ - _cogl_xlib_renderers = g_list_remove (_cogl_xlib_renderers, renderer); -} - -static Display * -assert_xlib_display (CoglRenderer *renderer, GError **error) -{ - Display *xdpy = renderer->foreign_xdpy; - CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer); - - /* A foreign display may have already been set... */ - if (xdpy) - { - xlib_renderer->xdpy = xdpy; - return xdpy; - } - - xdpy = XOpenDisplay (_cogl_x11_display_name); - if (xdpy == NULL) - { - g_set_error (error, - COGL_RENDERER_ERROR, - COGL_RENDERER_ERROR_XLIB_DISPLAY_OPEN, - "Failed to open X Display %s", _cogl_x11_display_name); - return NULL; - } - - xlib_renderer->xdpy = xdpy; - return xdpy; -} - static void free_xlib_output (CoglXlibOutput *output) { @@ -402,11 +354,7 @@ _cogl_xlib_renderer_connect (CoglRenderer *renderer, GError **error) int damage_error; int randr_error; - if (!assert_xlib_display (renderer, error)) - return FALSE; - - if (getenv ("COGL_X11_SYNC")) - XSynchronize (xlib_renderer->xdpy, TRUE); + g_return_val_if_fail (xlib_renderer->xdpy != NULL, FALSE); /* Check whether damage events are supported on this display */ if (!XDamageQueryExtension (xlib_renderer->xdpy, @@ -427,8 +375,6 @@ _cogl_xlib_renderer_connect (CoglRenderer *renderer, GError **error) | RROutputPropertyNotifyMask); update_outputs (renderer, FALSE); - register_xlib_renderer (renderer); - _cogl_renderer_add_native_filter (renderer, (CoglNativeFilterFunc)randr_filter, renderer); @@ -445,12 +391,7 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer) g_list_free_full (xlib_renderer->outputs, (GDestroyNotify) free_xlib_output); xlib_renderer->outputs = NULL; - if (!renderer->foreign_xdpy && xlib_renderer->xdpy) - XCloseDisplay (xlib_renderer->xdpy); - g_clear_pointer (&renderer->custom_winsys_user_data, _xlib_renderer_data_free); - - unregister_xlib_renderer (renderer); } Display *