summaryrefslogtreecommitdiff
path: root/ivi-shell
diff options
context:
space:
mode:
authorNobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>2015-06-22 15:31:39 +0900
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-06-23 15:57:15 +0300
commitdb8efd1f267b4a749a3b22488f273613372f5a90 (patch)
treefffda38483685cbef810934e36382b55a92bb35e /ivi-shell
parent82051705b50e93d988f27dfaea5d1af46e1b842b (diff)
ivi-shell: add new method to remove a callback to get notificaiton of ivi_layer property changes.
To get property changes of ivi_layer, callbacks can be registered. However there was no API to remove a callback rather than removing all callbacks by using layer_remove_notification. layer_remove_notification_by_callback can do it. Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Diffstat (limited to 'ivi-shell')
-rw-r--r--ivi-shell/ivi-layout-export.h7
-rw-r--r--ivi-shell/ivi-layout.c18
2 files changed, 23 insertions, 2 deletions
diff --git a/ivi-shell/ivi-layout-export.h b/ivi-shell/ivi-layout-export.h
index ed8db9da..2f93811e 100644
--- a/ivi-shell/ivi-layout-export.h
+++ b/ivi-shell/ivi-layout-export.h
@@ -790,6 +790,13 @@ struct ivi_controller_interface {
surface_property_notification_func callback,
void *userdata);
+ /**
+ * \brief remove notification by callback on property changes of ivi_layer
+ */
+ void (*layer_remove_notification_by_callback)(struct ivi_layout_layer *ivilayer,
+ layer_property_notification_func callback,
+ void *userdata);
+
};
#ifdef __cplusplus
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 6dc57233..bfd9d326 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -1883,6 +1883,19 @@ ivi_layout_layer_remove_notification(struct ivi_layout_layer *ivilayer)
}
static void
+ivi_layout_layer_remove_notification_by_callback(struct ivi_layout_layer *ivilayer,
+ layer_property_notification_func callback,
+ void *userdata)
+{
+ if (ivilayer == NULL) {
+ weston_log("ivi_layout_layer_remove_notification_by_callback: invalid argument\n");
+ return;
+ }
+
+ remove_notification(&ivilayer->property_changed.listener_list, callback, userdata);
+}
+
+static void
ivi_layout_layer_remove(struct ivi_layout_layer *ivilayer)
{
struct ivi_layout *layout = get_instance();
@@ -2982,9 +2995,10 @@ static struct ivi_controller_interface ivi_controller_interface = {
.surface_dump = ivi_layout_surface_dump,
/**
- * remove notification by callback on property changes of ivi_surface
+ * remove notification by callback on property changes of ivi_surface/layer
*/
- .surface_remove_notification_by_callback = ivi_layout_surface_remove_notification_by_callback
+ .surface_remove_notification_by_callback = ivi_layout_surface_remove_notification_by_callback,
+ .layer_remove_notification_by_callback = ivi_layout_layer_remove_notification_by_callback
};
int