ivi-shell: add API for weston_surface -> ivi_layout_surface

Add ivi-layout API for getting an ivi_layout_surface from a
weston_surface if it exists. This can be used by controllers that hook
up to core Weston callbacks and get handed a weston_surface, but need to
use ivi-layout API to manipulate it.

The only ways ivi-layout itself would be able to go from weston_surface
to ivi_layout_surface are either searching through the list of all
ivi_layout_surfaces or adding a dummy destroy listener to the
weston_surface. Therefore the implementation is delegated to
ivi-shell.c.

Ivi-shell.c can easily look up the ivi_shell_surface for a
weston_surface, and that will map 1:1 to an ivi_layout_surface.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Emre Ucan <eucan@de.adit-jv.com>
dev
Pekka Paalanen 9 years ago
parent f9d46ed2dd
commit eaa43fc310
  1. 9
      ivi-shell/ivi-layout-export.h
  2. 1
      ivi-shell/ivi-layout.c
  3. 12
      ivi-shell/ivi-shell.c
  4. 5
      ivi-shell/ivi-shell.h

@ -567,6 +567,15 @@ struct ivi_layout_interface {
void *target, size_t size, void *target, size_t size,
int32_t x, int32_t y, int32_t x, int32_t y,
int32_t width, int32_t height); int32_t width, int32_t height);
/**
* Returns the ivi_layout_surface or NULL
*
* NULL is returned if there is no ivi_layout_surface corresponding
* to the given weston_surface.
*/
struct ivi_layout_surface *
(*get_surface)(struct weston_surface *surface);
}; };
#ifdef __cplusplus #ifdef __cplusplus

@ -1992,6 +1992,7 @@ static struct ivi_layout_interface ivi_layout_interface = {
.add_listener_create_surface = ivi_layout_add_listener_create_surface, .add_listener_create_surface = ivi_layout_add_listener_create_surface,
.add_listener_remove_surface = ivi_layout_add_listener_remove_surface, .add_listener_remove_surface = ivi_layout_add_listener_remove_surface,
.add_listener_configure_surface = ivi_layout_add_listener_configure_surface, .add_listener_configure_surface = ivi_layout_add_listener_configure_surface,
.get_surface = shell_get_ivi_layout_surface,
.get_surfaces = ivi_layout_get_surfaces, .get_surfaces = ivi_layout_get_surfaces,
.get_id_of_surface = ivi_layout_get_id_of_surface, .get_id_of_surface = ivi_layout_get_id_of_surface,
.get_surface_from_id = ivi_layout_get_surface_from_id, .get_surface_from_id = ivi_layout_get_surface_from_id,

@ -93,6 +93,18 @@ get_ivi_shell_surface(struct weston_surface *surface)
return shsurf; return shsurf;
} }
struct ivi_layout_surface *
shell_get_ivi_layout_surface(struct weston_surface *surface)
{
struct ivi_shell_surface *shsurf;
shsurf = get_ivi_shell_surface(surface);
if (!shsurf)
return NULL;
return shsurf->layout_surface;
}
void void
shell_surface_send_configure(struct weston_surface *surface, shell_surface_send_configure(struct weston_surface *surface,
int32_t width, int32_t height) int32_t width, int32_t height)

@ -73,4 +73,9 @@ void
shell_surface_send_configure(struct weston_surface *surface, shell_surface_send_configure(struct weston_surface *surface,
int32_t width, int32_t height); int32_t width, int32_t height);
struct ivi_layout_surface;
struct ivi_layout_surface *
shell_get_ivi_layout_surface(struct weston_surface *surface);
#endif /* WESTON_IVI_SHELL_H */ #endif /* WESTON_IVI_SHELL_H */

Loading…
Cancel
Save