- Introduce the dirty parameter for triggering the render order change
- IVI_NOTIFICATION_REMOVE/ADD flags are set only at commit_layer_list.

Signed-off-by: Emre Ucan <[email protected]>
---
 ivi-shell/ivi-layout-private.h |    1 +
 ivi-shell/ivi-layout.c         |   63 ++++++++++++++--------------------------
 2 files changed, 23 insertions(+), 41 deletions(-)

diff --git a/ivi-shell/ivi-layout-private.h b/ivi-shell/ivi-layout-private.h
index 9c04c30..074d598 100644
--- a/ivi-shell/ivi-layout-private.h
+++ b/ivi-shell/ivi-layout-private.h
@@ -81,6 +81,7 @@ struct ivi_layout_layer {
        } pending;
 
        struct {
+               int dirty;
                struct wl_list surface_list;
                struct wl_list link;
        } order;
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index d412069..bc8aead 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -809,53 +809,38 @@ commit_layer_list(struct ivi_layout *layout)
 
                ivilayer->prop = ivilayer->pending.prop;
 
-               if (!(ivilayer->event_mask &
-                     (IVI_NOTIFICATION_ADD | IVI_NOTIFICATION_REMOVE)) ) {
+               if (!ivilayer->order.dirty) {
                        continue;
                }
 
-               if (ivilayer->event_mask & IVI_NOTIFICATION_REMOVE) {
-                       wl_list_for_each_safe(ivisurf, next,
-                               &ivilayer->order.surface_list, order.link) {
-                               remove_ordersurface_from_layer(ivisurf);
+               wl_list_for_each_safe(ivisurf, next,
+                       &ivilayer->order.surface_list, order.link) {
+                       remove_ordersurface_from_layer(ivisurf);
 
-                               if (!wl_list_empty(&ivisurf->order.link)) {
-                                       wl_list_remove(&ivisurf->order.link);
-                               }
-
-                               wl_list_init(&ivisurf->order.link);
-                               ivisurf->event_mask |= IVI_NOTIFICATION_REMOVE;
+                       if (!wl_list_empty(&ivisurf->order.link)) {
+                               wl_list_remove(&ivisurf->order.link);
                        }
 
-                       wl_list_init(&ivilayer->order.surface_list);
+                       wl_list_init(&ivisurf->order.link);
+                       ivisurf->event_mask |= IVI_NOTIFICATION_REMOVE;
                }
 
-               if (ivilayer->event_mask & IVI_NOTIFICATION_ADD) {
-                       wl_list_for_each_safe(ivisurf, next,
-                                             &ivilayer->order.surface_list, 
order.link) {
-                               remove_ordersurface_from_layer(ivisurf);
-
-                               if (!wl_list_empty(&ivisurf->order.link)) {
-                                       wl_list_remove(&ivisurf->order.link);
-                               }
+               wl_list_init(&ivilayer->order.surface_list);
 
+               wl_list_for_each(ivisurf, &ivilayer->pending.surface_list,
+                                        pending.link) {
+                       if (!wl_list_empty(&ivisurf->order.link)){
+                               wl_list_remove(&ivisurf->order.link);
                                wl_list_init(&ivisurf->order.link);
                        }
 
-                       wl_list_init(&ivilayer->order.surface_list);
-                       wl_list_for_each(ivisurf, 
&ivilayer->pending.surface_list,
-                                        pending.link) {
-                               if (!wl_list_empty(&ivisurf->order.link)) {
-                                       wl_list_remove(&ivisurf->order.link);
-                                       wl_list_init(&ivisurf->order.link);
-                               }
-
-                               wl_list_insert(&ivilayer->order.surface_list,
-                                              &ivisurf->order.link);
-                               add_ordersurface_to_layer(ivisurf, ivilayer);
-                               ivisurf->event_mask |= IVI_NOTIFICATION_ADD;
-                       }
+                       wl_list_insert(&ivilayer->order.surface_list,
+                                      &ivisurf->order.link);
+                       add_ordersurface_to_layer(ivisurf, ivilayer);
+                       ivisurf->event_mask |= IVI_NOTIFICATION_ADD;
                }
+
+               ivilayer->order.dirty = 0;
        }
 }
 
@@ -997,8 +982,6 @@ clear_surface_pending_list(struct ivi_layout_layer 
*ivilayer)
 
                wl_list_init(&surface_link->pending.link);
        }
-
-       ivilayer->event_mask |= IVI_NOTIFICATION_REMOVE;
 }
 
 static void
@@ -1015,8 +998,6 @@ clear_surface_order_list(struct ivi_layout_layer *ivilayer)
 
                wl_list_init(&surface_link->order.link);
        }
-
-       ivilayer->event_mask |= IVI_NOTIFICATION_REMOVE;
 }
 
 static void
@@ -2102,7 +2083,7 @@ ivi_layout_layer_set_render_order(struct ivi_layout_layer 
*ivilayer,
                }
        }
 
-       ivilayer->event_mask |= IVI_NOTIFICATION_ADD;
+       ivilayer->order.dirty = 1;
 
        return IVI_SUCCEEDED;
 }
@@ -2526,7 +2507,7 @@ ivi_layout_layer_add_surface(struct ivi_layout_layer 
*ivilayer,
                }
        }
 
-       ivilayer->event_mask |= IVI_NOTIFICATION_ADD;
+       ivilayer->order.dirty = 1;
 
        return IVI_SUCCEEDED;
 }
@@ -2554,7 +2535,7 @@ ivi_layout_layer_remove_surface(struct ivi_layout_layer 
*ivilayer,
                }
        }
 
-       remsurf->event_mask |= IVI_NOTIFICATION_REMOVE;
+       ivilayer->order.dirty = 1;
 }
 
 static int32_t
-- 
1.7.9.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to