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 <robert@linux.intel.com>

(cherry picked from commit 8ca36a1d1ab7236fec0f4d7b7361ca96e14c32be)
This commit is contained in:
Neil Roberts 2013-07-03 18:48:15 +01:00
parent 8911da794e
commit 18ce7ad7f5
4 changed files with 7 additions and 165 deletions

View File

@ -76,8 +76,6 @@ struct _CoglRenderer
#if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT) #if defined (COGL_HAS_EGL_PLATFORM_WAYLAND_SUPPORT)
struct wl_display *foreign_wayland_display; struct wl_display *foreign_wayland_display;
struct wl_compositor *foreign_wayland_compositor;
struct wl_shell *foreign_wayland_shell;
#endif #endif
#ifdef COGL_HAS_SDL_SUPPORT #ifdef COGL_HAS_SDL_SUPPORT

View File

@ -44,15 +44,6 @@ COGL_BEGIN_DECLS
* to work with instead of leaving Cogl to automatically connect to a * to work with instead of leaving Cogl to automatically connect to a
* wayland compositor. * wayland compositor.
* *
* <note>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.</note>
*
* Since: 1.8 * Since: 1.8
* Stability: unstable * Stability: unstable
*/ */
@ -82,82 +73,6 @@ cogl_wayland_renderer_set_foreign_display (CoglRenderer *renderer,
struct wl_display * struct wl_display *
cogl_wayland_renderer_get_display (CoglRenderer *renderer); 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 COGL_END_DECLS
#endif /* __COGL_WAYLAND_RENDERER_H__ */ #endif /* __COGL_WAYLAND_RENDERER_H__ */

View File

@ -197,15 +197,6 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
if (renderer->foreign_wayland_display) if (renderer->foreign_wayland_display)
{ {
wayland_renderer->wayland_display = 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 else
{ {
@ -217,15 +208,15 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
"Failed to connect wayland display"); "Failed to connect wayland display");
goto error; goto error;
} }
wayland_renderer->wayland_registry =
wl_display_get_registry (wayland_renderer->wayland_display);
wl_registry_add_listener (wayland_renderer->wayland_registry,
&registry_listener,
egl_renderer);
} }
wayland_renderer->wayland_registry =
wl_display_get_registry (wayland_renderer->wayland_display);
wl_registry_add_listener (wayland_renderer->wayland_registry,
&registry_listener,
egl_renderer);
/* /*
* Ensure that that we've received the messages setting up the * Ensure that that we've received the messages setting up the
* compostor and shell object. This is better than just * compostor and shell object. This is better than just
@ -573,64 +564,6 @@ cogl_wayland_renderer_get_display (CoglRenderer *renderer)
return NULL; 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 * struct wl_surface *
cogl_wayland_onscreen_get_surface (CoglOnscreen *onscreen) cogl_wayland_onscreen_get_surface (CoglOnscreen *onscreen)
{ {

View File

@ -90,10 +90,6 @@ cogl_win32_renderer_set_event_retrieval_enabled
<SUBSECTION> <SUBSECTION>
cogl_wayland_renderer_set_foreign_display cogl_wayland_renderer_set_foreign_display
cogl_wayland_renderer_get_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
</SECTION> </SECTION>
<SECTION> <SECTION>