- Always clear pending list at set_render_order API. - Introduce the dirty parameter for triggering the render order change. - IVI_NOTIFICATION_REMOVE/ADD flags are set only at commit_screen_list.
Signed-off-by: Emre Ucan <eu...@de.adit-jv.com> --- ivi-shell/ivi-layout.c | 45 +++++++++++---------------------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index bc8aead..898a901 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -93,14 +93,13 @@ struct ivi_layout_screen { struct ivi_layout *layout; struct weston_output *output; - uint32_t event_mask; - struct { struct wl_list layer_list; struct wl_list link; } pending; struct { + int dirty; struct wl_list layer_list; struct wl_list link; } order; @@ -431,7 +430,6 @@ create_screen(struct weston_compositor *ec) count++; iviscrn->output = output; - iviscrn->event_mask = 0; wl_list_init(&iviscrn->pending.layer_list); wl_list_init(&iviscrn->pending.link); @@ -853,7 +851,7 @@ commit_screen_list(struct ivi_layout *layout) struct ivi_layout_surface *ivisurf = NULL; wl_list_for_each(iviscrn, &layout->screen_list, link) { - if (iviscrn->event_mask & IVI_NOTIFICATION_REMOVE) { + if (iviscrn->order.dirty) { wl_list_for_each_safe(ivilayer, next, &iviscrn->order.layer_list, order.link) { remove_orderlayer_from_screen(ivilayer); @@ -865,21 +863,9 @@ commit_screen_list(struct ivi_layout *layout) wl_list_init(&ivilayer->order.link); ivilayer->event_mask |= IVI_NOTIFICATION_REMOVE; } - } - - if (iviscrn->event_mask & IVI_NOTIFICATION_ADD) { - wl_list_for_each_safe(ivilayer, next, - &iviscrn->order.layer_list, order.link) { - remove_orderlayer_from_screen(ivilayer); - - if (!wl_list_empty(&ivilayer->order.link)) { - wl_list_remove(&ivilayer->order.link); - } - - wl_list_init(&ivilayer->order.link); - } wl_list_init(&iviscrn->order.layer_list); + wl_list_for_each(ivilayer, &iviscrn->pending.layer_list, pending.link) { wl_list_insert(&iviscrn->order.layer_list, @@ -887,9 +873,9 @@ commit_screen_list(struct ivi_layout *layout) add_orderlayer_to_screen(ivilayer, iviscrn); ivilayer->event_mask |= IVI_NOTIFICATION_ADD; } - } - iviscrn->event_mask = 0; + iviscrn->order.dirty = 0; + } /* Clear view list of layout ivi_layer */ wl_list_init(&layout->layout_layer.view_list.link); @@ -2330,7 +2316,7 @@ ivi_layout_screen_add_layer(struct ivi_layout_screen *iviscrn, } } - iviscrn->event_mask |= IVI_NOTIFICATION_ADD; + iviscrn->order.dirty = 1; return IVI_SUCCEEDED; } @@ -2353,24 +2339,15 @@ ivi_layout_screen_set_render_order(struct ivi_layout_screen *iviscrn, wl_list_for_each_safe(ivilayer, next, &iviscrn->pending.layer_list, pending.link) { + if (!wl_list_empty(&ivilayer->pending.link)) { + wl_list_remove(&ivilayer->pending.link); + } + wl_list_init(&ivilayer->pending.link); } wl_list_init(&iviscrn->pending.layer_list); - if (pLayer == NULL) { - wl_list_for_each_safe(ivilayer, next, &iviscrn->pending.layer_list, pending.link) { - if (!wl_list_empty(&ivilayer->pending.link)) { - wl_list_remove(&ivilayer->pending.link); - } - - wl_list_init(&ivilayer->pending.link); - } - - iviscrn->event_mask |= IVI_NOTIFICATION_REMOVE; - return IVI_SUCCEEDED; - } - for (i = 0; i < number; i++) { id_layer = &pLayer[i]->id_layer; wl_list_for_each(ivilayer, &layout->layer_list, link) { @@ -2388,7 +2365,7 @@ ivi_layout_screen_set_render_order(struct ivi_layout_screen *iviscrn, } } - iviscrn->event_mask |= IVI_NOTIFICATION_ADD; + iviscrn->order.dirty = 1; return IVI_SUCCEEDED; } -- 1.7.9.5 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel