diff options
author | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2016-04-12 16:06:58 +0300 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2016-06-01 11:06:49 +0300 |
commit | eaa43fc3103d67fe0182994032e851d10a2521a3 (patch) | |
tree | 57825b33b4c07a10e34063304e66b5cd9f51f94b /ivi-shell | |
parent | f9d46ed2dd76adbf4da850d083c22634c383ba25 (diff) |
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>
Diffstat (limited to 'ivi-shell')
-rw-r--r-- | ivi-shell/ivi-layout-export.h | 9 | ||||
-rw-r--r-- | ivi-shell/ivi-layout.c | 1 | ||||
-rw-r--r-- | ivi-shell/ivi-shell.c | 12 | ||||
-rw-r--r-- | ivi-shell/ivi-shell.h | 5 |
4 files changed, 27 insertions, 0 deletions
diff --git a/ivi-shell/ivi-layout-export.h b/ivi-shell/ivi-layout-export.h index 33aa8202..e437d9ea 100644 --- a/ivi-shell/ivi-layout-export.h +++ b/ivi-shell/ivi-layout-export.h @@ -567,6 +567,15 @@ struct ivi_layout_interface { void *target, size_t size, int32_t x, int32_t y, 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 diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index 7fa8b334..9661378a 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -1992,6 +1992,7 @@ static struct ivi_layout_interface ivi_layout_interface = { .add_listener_create_surface = ivi_layout_add_listener_create_surface, .add_listener_remove_surface = ivi_layout_add_listener_remove_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_id_of_surface = ivi_layout_get_id_of_surface, .get_surface_from_id = ivi_layout_get_surface_from_id, diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c index c502c742..59ffe0c2 100644 --- a/ivi-shell/ivi-shell.c +++ b/ivi-shell/ivi-shell.c @@ -93,6 +93,18 @@ get_ivi_shell_surface(struct weston_surface *surface) 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 shell_surface_send_configure(struct weston_surface *surface, int32_t width, int32_t height) diff --git a/ivi-shell/ivi-shell.h b/ivi-shell/ivi-shell.h index 45faceb4..369e5f80 100644 --- a/ivi-shell/ivi-shell.h +++ b/ivi-shell/ivi-shell.h @@ -73,4 +73,9 @@ void shell_surface_send_configure(struct weston_surface *surface, 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 */ |