diff options
Diffstat (limited to 'ivi-shell')
-rw-r--r-- | ivi-shell/ivi-layout-export.h | 19 | ||||
-rw-r--r-- | ivi-shell/ivi-layout.c | 48 |
2 files changed, 13 insertions, 54 deletions
diff --git a/ivi-shell/ivi-layout-export.h b/ivi-shell/ivi-layout-export.h index c2a8c10e..2ed1e766 100644 --- a/ivi-shell/ivi-layout-export.h +++ b/ivi-shell/ivi-layout-export.h @@ -138,10 +138,6 @@ enum ivi_layout_transition_type{ IVI_LAYOUT_TRANSITION_MAX, }; -typedef void (*layer_remove_notification_func)( - struct ivi_layout_layer *ivilayer, - void *userdata); - typedef void (*surface_remove_notification_func)( struct ivi_layout_surface *ivisurf, void *userdata); @@ -345,15 +341,14 @@ struct ivi_layout_interface { int32_t (*add_listener_create_layer)(struct wl_listener *listener); /** - * \brief register/unregister for notification when ivi_layer is removed + * \brief add a listener for notification when ivi_layer is removed + * + * When an ivi_layer is removed, a signal is emitted + * to the listening controller plugins. + * The pointer of the removed ivi_layer is sent as the void *data argument + * to the wl_listener::notify callback function of the listener. */ - int32_t (*add_notification_remove_layer)( - layer_remove_notification_func callback, - void *userdata); - - void (*remove_notification_remove_layer)( - layer_remove_notification_func callback, - void *userdata); + int32_t (*add_listener_remove_layer)(struct wl_listener *listener); /** * \brief Create a ivi_layer which should be managed by the service diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index a81213a6..82a6d559 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -931,23 +931,6 @@ clear_surface_order_list(struct ivi_layout_layer *ivilayer) } static void -layer_removed(struct wl_listener *listener, void *data) -{ - struct ivi_layout_layer *ivilayer = data; - - struct listener_layout_notification *notification = - container_of(listener, - struct listener_layout_notification, - listener); - - struct ivi_layout_notification_callback *removed_callback = - notification->userdata; - - ((layer_remove_notification_func)removed_callback->callback) - (ivilayer, removed_callback->data); -} - -static void surface_removed(struct wl_listener *listener, void *data) { struct ivi_layout_surface *ivisurface = data; @@ -1051,36 +1034,18 @@ ivi_layout_add_listener_create_layer(struct wl_listener *listener) } static int32_t -ivi_layout_add_notification_remove_layer(layer_remove_notification_func callback, - void *userdata) +ivi_layout_add_listener_remove_layer(struct wl_listener *listener) { struct ivi_layout *layout = get_instance(); - struct ivi_layout_notification_callback *removed_callback = NULL; - - if (callback == NULL) { - weston_log("ivi_layout_add_notification_remove_layer: invalid argument\n"); - return IVI_FAILED; - } - removed_callback = malloc(sizeof *removed_callback); - if (removed_callback == NULL) { - weston_log("fails to allocate memory\n"); + if (listener == NULL) { + weston_log("ivi_layout_add_listener_remove_layer: invalid argument\n"); return IVI_FAILED; } - removed_callback->callback = callback; - removed_callback->data = userdata; - return add_notification(&layout->layer_notification.removed, - layer_removed, - removed_callback); -} + wl_signal_add(&layout->layer_notification.removed, listener); -static void -ivi_layout_remove_notification_remove_layer(layer_remove_notification_func callback, - void *userdata) -{ - struct ivi_layout *layout = get_instance(); - remove_notification(&layout->layer_notification.removed.listener_list, callback, userdata); + return IVI_SUCCEEDED; } static int32_t @@ -2181,8 +2146,7 @@ static struct ivi_layout_interface ivi_layout_interface = { * layer controller interfaces */ .add_listener_create_layer = ivi_layout_add_listener_create_layer, - .add_notification_remove_layer = ivi_layout_add_notification_remove_layer, - .remove_notification_remove_layer = ivi_layout_remove_notification_remove_layer, + .add_listener_remove_layer = ivi_layout_add_listener_remove_layer, .layer_create_with_dimension = ivi_layout_layer_create_with_dimension, .layer_destroy = ivi_layout_layer_destroy, .get_layers = ivi_layout_get_layers, |