summaryrefslogtreecommitdiff
path: root/ivi-shell/ivi-layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'ivi-shell/ivi-layout.c')
-rw-r--r--ivi-shell/ivi-layout.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 41b2b3bb..ae947c65 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -163,6 +163,11 @@ struct ivi_layout_surface {
struct wl_list link;
struct wl_list list_layer;
} order;
+
+ struct {
+ ivi_controller_surface_content_callback callback;
+ void* userdata;
+ } content_observer;
};
struct ivi_layout_layer {
@@ -2631,8 +2636,13 @@ ivi_layout_surfaceSetNativeContent(struct weston_surface *surface,
ivisurf->view = NULL;
}
- if (surface == NULL)
+ if (surface == NULL) {
+ if (ivisurf->content_observer.callback) {
+ (*(ivisurf->content_observer.callback))(ivisurf,
+ 0, ivisurf->content_observer.userdata);
+ }
return 0;
+ }
ivisurf->surface = surface;
ivisurf->surface_destroy_listener.notify =
@@ -2656,9 +2666,28 @@ ivi_layout_surfaceSetNativeContent(struct weston_surface *surface,
}
}
+ if (ivisurf->content_observer.callback) {
+ (*(ivisurf->content_observer.callback))(ivisurf,
+ 1, ivisurf->content_observer.userdata);
+ }
+
return 0;
}
+WL_EXPORT int32_t
+ivi_layout_surfaceSetContentObserver(struct ivi_layout_surface *ivisurf,
+ ivi_controller_surface_content_callback callback,
+ void* userdata)
+{
+ int32_t ret = -1;
+ if (ivisurf != NULL) {
+ ivisurf->content_observer.callback = callback;
+ ivisurf->content_observer.userdata = userdata;
+ ret = 0;
+ }
+ return ret;
+}
+
static struct ivi_layout_surface*
ivi_layout_surfaceCreate(struct weston_surface *wl_surface,
uint32_t id_surface)