From: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp>

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_tanib...@xddp.denso.co.jp>
Acked-by: Pekka Paalanen <pekka.paala...@collabora.co.uk>
---
 ivi-shell/ivi-layout-export.h |  7 +++++++
 ivi-shell/ivi-layout.c        | 18 ++++++++++++++++--
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/ivi-shell/ivi-layout-export.h b/ivi-shell/ivi-layout-export.h
index ed8db9d..2f93811 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 6dc5723..bfd9d32 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
-- 
1.8.3.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to