If ivilayer or ivisurf of ivi_view is made invisible in the
commit_changes call, we have to damage the weston_view below this
ivi_view. Otherwise content of this ivi_view will stay visible.

Signed-off-by: Emre Ucan <[email protected]>
---
 ivi-shell/ivi-layout.c |   41 ++++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 60d05c4..cc01de3 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -666,28 +666,35 @@ commit_changes(struct ivi_layout *layout)
 {
        struct ivi_layout_screen  *iviscrn  = NULL;
        struct ivi_layout_layer   *ivilayer = NULL;
+       struct ivi_layout_surface   *ivisurf = NULL;
        struct ivi_layout_view *ivi_view  = NULL;
 
-       wl_list_for_each(iviscrn, &layout->screen_list, link) {
-               wl_list_for_each(ivilayer, &iviscrn->order.layer_list, 
order.link) {
-                       /*
-                        * If ivilayer is invisible, weston_view of ivisurf 
doesn't
-                        * need to be modified.
-                        */
-                       if (ivilayer->prop.visibility == false)
-                               continue;
+       wl_list_for_each(ivi_view, &layout->view_list, link) {
+               ivilayer = ivi_view->on_layer;
+               ivisurf = ivi_view->ivisurf;
+               iviscrn = ivilayer->on_screen;
 
-                       wl_list_for_each(ivi_view, &ivilayer->order.view_list, 
order_link) {
-                               /*
-                                * If ivilayer is invisible, weston_view of 
ivisurf doesn't
-                                * need to be modified.
-                                */
-                               if (ivi_view->ivisurf->prop.visibility == false)
-                                       continue;
+               /*
+                * If ivi_view is not visible on a screen, weston_view of 
ivi_view
+                * doesn't need to be modified.
+                */
+               if (!wl_list_length(&ivi_view->order_link) || !iviscrn)
+                       continue;
 
-                               update_prop(iviscrn, ivilayer, ivi_view);
-                       }
+               /*
+                * If ivilayer or ivisurf of ivi_view is made invisible in this
+                * commit_changes call, we have to damage the weston_view below 
this
+                * ivi_view. Otherwise content of this ivi_view will stay 
visible.
+                */
+               if ((!ivilayer->prop.visibility &&
+                       (ivilayer->prop.event_mask & 
IVI_NOTIFICATION_VISIBILITY)) ||
+                       (!ivisurf->prop.visibility &&
+                       (ivisurf->prop.event_mask & 
IVI_NOTIFICATION_VISIBILITY))) {
+                       weston_view_damage_below(ivi_view->view);
+                       continue;
                }
+
+               update_prop(iviscrn, ivilayer, ivi_view);
        }
 }
 
-- 
1.7.9.5

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

Reply via email to