[Cogl] [PATCH 4/4] wayland: Add API to prevent Cogl from dispatching the wayland display
Robert Bragg
robert at sixbynine.org
Tue Jul 9 05:19:26 PDT 2013
This looks good to land to me:
Reviewed-by: Robert Bragg <robert at linux.intel.com>
thanks,
- Robert
On Thu, Jul 4, 2013 at 1:46 PM, Neil Roberts <neil at linux.intel.com> wrote:
> This adds cogl_wayland_renderer_set_event_dispatch_enabled() which can
> be used to prevent Cogl from adding the socket for the Wayland display
> to its list of file descriptors to poll. This can be used in
> applications that want to integrate Cogl with existing code that is
> reading from the Wayland socket itself.
> ---
> cogl/cogl-renderer-private.h | 1 +
> cogl/cogl-renderer.c | 4 ++++
> cogl/cogl-wayland-renderer.h | 22 ++++++++++++++++++++++
> cogl/winsys/cogl-winsys-egl-wayland.c | 27 ++++++++++++++++++++-------
> 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 dfc79c6..8b8d2bf 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 33e086c..265719a 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_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 3f9e434..20b0b49 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 fad0cae..f5a6047 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 1a6feee..1a6e343 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>
>
> --
> 1.7.11.3.g3c3efa5
>
> _______________________________________________
> Cogl mailing list
> Cogl at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/cogl
More information about the Cogl
mailing list