From 18ce7ad7f5969fe10b7fd0c5177616167919d2f5 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Wed, 3 Jul 2013 18:48:15 +0100 Subject: [PATCH] Get rid of the foreign shell and compositor APIs The Wayland 1.0 protocol supports multiple independent components querying the available interfaces by retreiving their own wl_registry object so the application doesn't need to pass them down anymore. Reviewed-by: Robert Bragg (cherry picked from commit 8ca36a1d1ab7236fec0f4d7b7361ca96e14c32be) --- cogl/cogl-renderer-private.h | 2 - cogl/cogl-wayland-renderer.h | 85 ------------------- cogl/winsys/cogl-winsys-egl-wayland.c | 81 ++---------------- .../cogl-2.0-experimental-sections.txt | 4 - 4 files changed, 7 insertions(+), 165 deletions(-) diff --git a/cogl/cogl-renderer-private.h b/cogl/cogl-renderer-private.h index efc20a349..75ae1493f 100644 --- a/cogl/cogl-renderer-private.h +++ b/cogl/cogl-renderer-private.h @@ -76,8 +76,6 @@ struct _CoglRenderer #if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT) struct wl_display *foreign_wayland_display; - struct wl_compositor *foreign_wayland_compositor; - struct wl_shell *foreign_wayland_shell; #endif #ifdef COGL_HAS_SDL_SUPPORT diff --git a/cogl/cogl-wayland-renderer.h b/cogl/cogl-wayland-renderer.h index 2b18b587f..3f9e4341e 100644 --- a/cogl/cogl-wayland-renderer.h +++ b/cogl/cogl-wayland-renderer.h @@ -44,15 +44,6 @@ COGL_BEGIN_DECLS * to work with instead of leaving Cogl to automatically connect to a * wayland compositor. * - * If you use this API you must also explicitly set foreign - * Wayland compositor and shell objects using the - * cogl_wayland_renderer_set_foreign_compositor() and - * cogl_wayland_renderer_set_foreign_shell() respectively. This ie - * because Wayland doesn't currently provide a way to retrospectively - * query these interfaces so the expectation is that if you have taken - * ownership of the display then you will also have been notified of - * the compositor and shell interfaces which Cogl needs to use. - * * Since: 1.8 * Stability: unstable */ @@ -82,82 +73,6 @@ cogl_wayland_renderer_set_foreign_display (CoglRenderer *renderer, struct wl_display * cogl_wayland_renderer_get_display (CoglRenderer *renderer); -/** - * cogl_wayland_renderer_set_foreign_compositor: - * @renderer: A #CoglRenderer - * @compositor: A Wayland compositor - * - * Allows you to explicitly notify Cogl of a Wayland compositor - * interface to use. This API should be used in conjunction with - * cogl_wayland_renderer_set_foreign_display() because if you are - * connecting to a wayland compositor manually that will also mean you - * will be notified on connection of the available interfaces that - * can't be queried retrosectively with the current Wayland protocol. - * - * Since: 1.8 - * Stability: unstable - */ -void -cogl_wayland_renderer_set_foreign_compositor (CoglRenderer *renderer, - struct wl_compositor *compositor); - -/** - * cogl_wayland_renderer_get_compositor: - * @renderer: A #CoglRenderer - * - * Retrieves the Wayland compositor interface that Cogl is using. If a - * foreign compositor has been specified using - * cogl_wayland_renderer_set_foreign_compositor() then that compositor - * will be returned. If no foreign compositor has been specified then - * the compositor that Cogl is notified of internally will be returned - * unless the renderer has not yet been connected (either implicitly - * or explicitly by calling cogl_renderer_connect()) in which case - * %NULL is returned. - * - * Since: 1.8 - * Stability: unstable - */ -struct wl_compositor * -cogl_wayland_renderer_get_compositor (CoglRenderer *renderer); - -/** - * cogl_wayland_renderer_set_foreign_shell: - * @renderer: A #CoglRenderer - * @shell: A Wayland shell - * - * Allows you to explicitly notify Cogl of a Wayland shell interface - * to use. This API should be used in conjunction with - * cogl_wayland_renderer_set_foreign_display() because if you are - * connecting to a wayland compositor manually that will also mean you - * will be notified on connection of the available interfaces that - * can't be queried retrosectively with the current Wayland protocol. - * - * Since: 1.10 - * Stability: unstable - */ -void -cogl_wayland_renderer_set_foreign_shell (CoglRenderer *renderer, - struct wl_shell *shell); - -/** - * cogl_wayland_renderer_get_shell: - * @renderer: A #CoglRenderer - * - * Retrieves the Wayland shell interface that Cogl is using. If a - * foreign shell has been specified using - * cogl_wayland_renderer_set_foreign_shell() then that shell - * will be returned. If no foreign shell has been specified then - * the shell that Cogl is notified of internally will be returned - * unless the renderer has not yet been connected (either implicitly - * or explicitly by calling cogl_renderer_connect()) in which case - * %NULL is returned. - * - * Since: 1.10 - * Stability: unstable - */ -struct wl_shell * -cogl_wayland_renderer_get_shell (CoglRenderer *renderer); - COGL_END_DECLS #endif /* __COGL_WAYLAND_RENDERER_H__ */ diff --git a/cogl/winsys/cogl-winsys-egl-wayland.c b/cogl/winsys/cogl-winsys-egl-wayland.c index 6d6f965ee..4b4d522fd 100644 --- a/cogl/winsys/cogl-winsys-egl-wayland.c +++ b/cogl/winsys/cogl-winsys-egl-wayland.c @@ -197,15 +197,6 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer, if (renderer->foreign_wayland_display) { wayland_renderer->wayland_display = renderer->foreign_wayland_display; - /* XXX: For now we have to assume that if a foreign display is - * given then a foreign compositor and shell must also have been - * given because wayland doesn't provide a way to - * retrospectively be notified of the these objects. */ - g_assert (renderer->foreign_wayland_compositor); - g_assert (renderer->foreign_wayland_shell); - wayland_renderer->wayland_compositor = - renderer->foreign_wayland_compositor; - wayland_renderer->wayland_shell = renderer->foreign_wayland_shell; } else { @@ -217,15 +208,15 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer, "Failed to connect wayland display"); goto error; } - - wayland_renderer->wayland_registry = - wl_display_get_registry (wayland_renderer->wayland_display); - - wl_registry_add_listener (wayland_renderer->wayland_registry, - ®istry_listener, - egl_renderer); } + wayland_renderer->wayland_registry = + wl_display_get_registry (wayland_renderer->wayland_display); + + wl_registry_add_listener (wayland_renderer->wayland_registry, + ®istry_listener, + egl_renderer); + /* * Ensure that that we've received the messages setting up the * compostor and shell object. This is better than just @@ -573,64 +564,6 @@ cogl_wayland_renderer_get_display (CoglRenderer *renderer) return NULL; } -void -cogl_wayland_renderer_set_foreign_compositor (CoglRenderer *renderer, - struct wl_compositor *compositor) -{ - _COGL_RETURN_IF_FAIL (cogl_is_renderer (renderer)); - - /* NB: Renderers are considered immutable once connected */ - _COGL_RETURN_IF_FAIL (!renderer->connected); - - renderer->foreign_wayland_compositor = compositor; -} - -struct wl_compositor * -cogl_wayland_renderer_get_compositor (CoglRenderer *renderer) -{ - _COGL_RETURN_VAL_IF_FAIL (cogl_is_renderer (renderer), NULL); - - if (renderer->foreign_wayland_compositor) - return renderer->foreign_wayland_compositor; - else if (renderer->connected) - { - CoglRendererEGL *egl_renderer = renderer->winsys; - CoglRendererWayland *wayland_renderer = egl_renderer->platform; - return wayland_renderer->wayland_compositor; - } - else - return NULL; -} - -void -cogl_wayland_renderer_set_foreign_shell (CoglRenderer *renderer, - struct wl_shell *shell) -{ - _COGL_RETURN_IF_FAIL (cogl_is_renderer (renderer)); - - /* NB: Renderers are considered immutable once connected */ - _COGL_RETURN_IF_FAIL (!renderer->connected); - - renderer->foreign_wayland_shell = shell; -} - -struct wl_shell * -cogl_wayland_renderer_get_shell (CoglRenderer *renderer) -{ - _COGL_RETURN_VAL_IF_FAIL (cogl_is_renderer (renderer), NULL); - - if (renderer->foreign_wayland_shell) - return renderer->foreign_wayland_shell; - else if (renderer->connected) - { - CoglRendererEGL *egl_renderer = renderer->winsys; - CoglRendererWayland *wayland_renderer = egl_renderer->platform; - return wayland_renderer->wayland_shell; - } - else - return NULL; -} - struct wl_surface * cogl_wayland_onscreen_get_surface (CoglOnscreen *onscreen) { diff --git a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt index be9bfce24..9b31f3a47 100644 --- a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt +++ b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt @@ -90,10 +90,6 @@ cogl_win32_renderer_set_event_retrieval_enabled cogl_wayland_renderer_set_foreign_display cogl_wayland_renderer_get_display -cogl_wayland_renderer_set_foreign_compositor -cogl_wayland_renderer_get_compositor -cogl_wayland_renderer_set_foreign_shell -cogl_wayland_renderer_get_shell