For multi screen support, ivi_layout_screen to be taken account into
property change in commitChanges.

Property change is now done in update_prop so to consider ivi_screen
property for caluculating transform of weston surface, ivi_layout_screen
 is added as a parameter of update_prop.

However, update_prop of weston_view of a ivi_surface can not be done
even if it is set on a screen. The propoerty change shall be done only
when a visibility of ivi_surface or ivi_layer which contains the
ivi_surface is ON. Such a condition shall be checked at commit_changes
as well to avoid calling update_prop, which actually updates
weston_views.

Signed-off-by: Nobuhiko Tanibata <nobuhiko_tanib...@xddp.denso.co.jp>
Reviewed-by: Pekka Paalanen <pekka.paala...@collabora.co.uk>
---
 ivi-shell/ivi-layout.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 04fee7a..724ca6f 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -590,16 +590,17 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
 }
 
 static void
-update_prop(struct ivi_layout_layer *ivilayer,
+update_prop(struct ivi_layout_screen  *iviscrn,
+           struct ivi_layout_layer *ivilayer,
            struct ivi_layout_surface *ivisurf)
 {
        struct weston_view *tmpview;
        struct ivi_rectangle r;
        bool can_calc = true;
 
-       if (!ivilayer->event_mask && !ivisurf->event_mask) {
+       /*In case of no prop change, this just returns*/
+       if (!ivilayer->event_mask && !ivisurf->event_mask)
                return;
-       }
 
        update_opacity(ivilayer, ivisurf);
 
@@ -646,8 +647,22 @@ commit_changes(struct ivi_layout *layout)
 
        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(ivisurf, 
&ivilayer->order.surface_list, order.link) {
-                               update_prop(ivilayer, ivisurf);
+                               /*
+                                * If ivilayer is invisible, weston_view of 
ivisurf doesn't
+                                * need to be modified.
+                                */
+                               if (ivisurf->prop.visibility == false)
+                                       continue;
+
+                               update_prop(iviscrn, ivilayer, ivisurf);
                        }
                }
        }
-- 
1.8.3.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to