diff options
-rw-r--r-- | cogl/cogl-renderer-private.h | 1 | ||||
-rw-r--r-- | cogl/cogl-renderer.c | 4 | ||||
-rw-r--r-- | cogl/cogl-wayland-renderer.h | 22 | ||||
-rw-r--r-- | cogl/winsys/cogl-winsys-egl-wayland.c | 27 | ||||
-rw-r--r-- | doc/reference/cogl2/cogl2-sections.txt | 1 |
5 files changed, 48 insertions, 7 deletions
diff --git a/cogl/cogl-renderer-private.h b/cogl/cogl-renderer-private.h index dfc79c64..8b8d2bfe 100644 --- a/cogl/cogl-renderer-private.h +++ b/cogl/cogl-renderer-private.h @@ -77,6 +77,7 @@ struct _CoglRenderer #if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT) struct wl_display *foreign_wayland_display; + CoglBool wayland_enable_event_dispatch; #endif #ifdef COGL_HAS_SDL_SUPPORT diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c index 33e086c5..2564c9d2 100644 --- a/cogl/cogl-renderer.c +++ b/cogl/cogl-renderer.c @@ -288,6 +288,10 @@ cogl_renderer_new (void) renderer->win32_enable_event_retrieval = TRUE; #endif +#ifdef COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT + renderer->wayland_enable_event_dispatch = TRUE; +#endif + return _cogl_renderer_object_new (renderer); } diff --git a/cogl/cogl-wayland-renderer.h b/cogl/cogl-wayland-renderer.h index 3f9e4341..20b0b494 100644 --- a/cogl/cogl-wayland-renderer.h +++ b/cogl/cogl-wayland-renderer.h @@ -52,6 +52,28 @@ cogl_wayland_renderer_set_foreign_display (CoglRenderer *renderer, struct wl_display *display); /** + * cogl_wayland_renderer_set_event_dispatch_enabled: + * @renderer: A #CoglRenderer + * @enable: The new value + * + * Sets whether Cogl should handle calling wl_display_dispatch() and + * wl_display_flush() as part of its main loop integration via + * cogl_poll_renderer_get_info() and cogl_poll_renderer_dispatch(). + * The default value is %TRUE. When it is enabled the application can + * register listeners for Wayland interfaces and the callbacks will be + * invoked during cogl_poll_renderer_dispatch(). If the application + * wants to integrate with its own code that is already handling + * reading from the Wayland display socket, it should disable this to + * avoid having competing code read from the socket. + * + * Since: 1.16 + * Stability: unstable + */ +void +cogl_wayland_renderer_set_event_dispatch_enabled (CoglRenderer *renderer, + CoglBool enable); + +/** * cogl_wayland_renderer_get_display: * @renderer: A #CoglRenderer * diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c index fad0cae4..f5a6047b 100644 --- a/cogl/winsys/cogl-winsys-egl-wayland.c +++ b/cogl/winsys/cogl-winsys-egl-wayland.c @@ -233,13 +233,15 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer, if (!_cogl_winsys_egl_renderer_connect_common (renderer, error)) goto error; - wayland_renderer->fd = wl_display_get_fd(wayland_renderer->wayland_display); - _cogl_poll_renderer_add_fd (renderer, - wayland_renderer->fd, - COGL_POLL_FD_EVENT_IN, - prepare_wayland_display_events, - dispatch_wayland_display_events, - renderer); + wayland_renderer->fd = wl_display_get_fd (wayland_renderer->wayland_display); + + if (renderer->wayland_enable_event_dispatch) + _cogl_poll_renderer_add_fd (renderer, + wayland_renderer->fd, + COGL_POLL_FD_EVENT_IN, + prepare_wayland_display_events, + dispatch_wayland_display_events, + renderer); return TRUE; @@ -546,6 +548,17 @@ cogl_wayland_renderer_set_foreign_display (CoglRenderer *renderer, renderer->foreign_wayland_display = display; } +void +cogl_wayland_renderer_set_event_dispatch_enabled (CoglRenderer *renderer, + CoglBool enable) +{ + _COGL_RETURN_IF_FAIL (cogl_is_renderer (renderer)); + /* NB: Renderers are considered immutable once connected */ + _COGL_RETURN_IF_FAIL (!renderer->connected); + + renderer->wayland_enable_event_dispatch = enable; +} + struct wl_display * cogl_wayland_renderer_get_display (CoglRenderer *renderer) { diff --git a/doc/reference/cogl2/cogl2-sections.txt b/doc/reference/cogl2/cogl2-sections.txt index 1a6feee9..1a6e343b 100644 --- a/doc/reference/cogl2/cogl2-sections.txt +++ b/doc/reference/cogl2/cogl2-sections.txt @@ -89,6 +89,7 @@ cogl_win32_renderer_set_event_retrieval_enabled <SUBSECTION> cogl_wayland_renderer_set_foreign_display +cogl_wayland_renderer_set_event_dispatch_enabled cogl_wayland_renderer_get_display </SECTION> |