summaryrefslogtreecommitdiff
path: root/ivi-shell
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2016-04-12 16:06:58 +0300
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2016-06-01 11:06:49 +0300
commiteaa43fc3103d67fe0182994032e851d10a2521a3 (patch)
tree57825b33b4c07a10e34063304e66b5cd9f51f94b /ivi-shell
parentf9d46ed2dd76adbf4da850d083c22634c383ba25 (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.h9
-rw-r--r--ivi-shell/ivi-layout.c1
-rw-r--r--ivi-shell/ivi-shell.c12
-rw-r--r--ivi-shell/ivi-shell.h5
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 */