summaryrefslogtreecommitdiff
path: root/ivi-shell
diff options
context:
space:
mode:
Diffstat (limited to 'ivi-shell')
-rw-r--r--ivi-shell/ivi-layout-export.h19
-rw-r--r--ivi-shell/ivi-layout.c48
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,