The internal API "get_weston_view" is introduced, which returns the weston_view
of the given ivi_layout_surface. The API returns a NULL pointer, if the 
ivi_layout_surface
does not have any weston_view.

The weston_view is required in many places of ivi-shell implementation.
Therefore, this API will reduce lines of code. Furthermore, it will increase
the maintainability of the ivi-shell implementation.

Old way of getting the weston_view was flawed, because the views list of the 
weston_surface
is read without controlling the existence of the weston_surface.
New implementation explicitly throws an error if the weston_surface does not 
exist.

Signed-off-by: Emre Ucan <eu...@de.adit-jv.com>
---
 ivi-shell/ivi-layout.c |   75 +++++++++++++++++++++---------------------------
 1 file changed, 33 insertions(+), 42 deletions(-)

diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 49e789e..702878f 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -150,6 +150,22 @@ get_layer(struct wl_list *layer_list, uint32_t id_layer)
        return NULL;
 }
 
+static struct weston_view *
+get_weston_view(struct ivi_layout_surface *ivisurf)
+{
+       struct weston_view *view = NULL;
+
+       assert(ivisurf->surface != NULL);
+
+       /* One view per surface */
+       if(wl_list_empty(&ivisurf->surface->views))
+               view = NULL;
+       else
+               view = wl_container_of(ivisurf->surface->views.next, view, 
surface_link);
+
+       return view;
+}
+
 static void
 remove_configured_listener(struct ivi_layout_surface *ivisurf)
 {
@@ -302,18 +318,15 @@ static void
 update_opacity(struct ivi_layout_layer *ivilayer,
               struct ivi_layout_surface *ivisurf)
 {
+       struct weston_view *tmpview = NULL;
        double layer_alpha = wl_fixed_to_double(ivilayer->prop.opacity);
        double surf_alpha  = wl_fixed_to_double(ivisurf->prop.opacity);
 
        if ((ivilayer->event_mask & IVI_NOTIFICATION_OPACITY) ||
            (ivisurf->event_mask  & IVI_NOTIFICATION_OPACITY)) {
-               struct weston_view *tmpview = NULL;
-               wl_list_for_each(tmpview, &ivisurf->surface->views, 
surface_link) {
-                       if (tmpview == NULL) {
-                               continue;
-                       }
-                       tmpview->alpha = layer_alpha * surf_alpha;
-               }
+               tmpview = get_weston_view(ivisurf);
+               assert(tmpview != NULL);
+               tmpview->alpha = layer_alpha * surf_alpha;
        }
 }
 
@@ -590,11 +603,8 @@ update_prop(struct ivi_layout_layer *ivilayer,
 
        update_opacity(ivilayer, ivisurf);
 
-       wl_list_for_each(tmpview, &ivisurf->surface->views, surface_link) {
-               if (tmpview != NULL) {
-                       break;
-               }
-       }
+       tmpview = get_weston_view(ivisurf);
+       assert(tmpview != NULL);
 
        if (ivisurf->prop.source_width == 0 || ivisurf->prop.source_height == 
0) {
                weston_log("ivi-shell: source rectangle is not yet set by 
ivi_layout_surface_set_source_rectangle\n");
@@ -613,24 +623,18 @@ update_prop(struct ivi_layout_layer *ivilayer,
                calc_surface_to_global_matrix_and_mask_to_weston_surface(
                        ivilayer, ivisurf, &ivisurf->transform.matrix, &r);
 
-               if (tmpview != NULL) {
-                       weston_view_set_mask(tmpview, r.x, r.y, r.width, 
r.height);
-                       wl_list_insert(&tmpview->geometry.transformation_list,
-                                      &ivisurf->transform.link);
+               weston_view_set_mask(tmpview, r.x, r.y, r.width, r.height);
+               wl_list_insert(&tmpview->geometry.transformation_list,
+                              &ivisurf->transform.link);
 
-                       weston_view_set_transform_parent(tmpview, NULL);
-               }
+               weston_view_set_transform_parent(tmpview, NULL);
        }
 
        ivisurf->update_count++;
 
-       if (tmpview != NULL) {
-               weston_view_geometry_dirty(tmpview);
-       }
+       weston_view_geometry_dirty(tmpview);
 
-       if (ivisurf->surface != NULL) {
-               weston_surface_damage(ivisurf->surface);
-       }
+       weston_surface_damage(ivisurf->surface);
 }
 
 static void
@@ -799,6 +803,7 @@ commit_screen_list(struct ivi_layout *layout)
        struct ivi_layout_layer   *ivilayer = NULL;
        struct ivi_layout_layer   *next     = NULL;
        struct ivi_layout_surface *ivisurf  = NULL;
+       struct weston_view *tmpview = NULL;
 
        wl_list_for_each(iviscrn, &layout->screen_list, link) {
                if (iviscrn->order.dirty) {
@@ -831,17 +836,11 @@ commit_screen_list(struct ivi_layout *layout)
                                continue;
 
                        wl_list_for_each(ivisurf, 
&ivilayer->order.surface_list, order.link) {
-                               struct weston_view *tmpview = NULL;
-                               wl_list_for_each(tmpview, 
&ivisurf->surface->views, surface_link) {
-                                       if (tmpview != NULL) {
-                                               break;
-                                       }
-                               }
-
                                if (ivisurf->prop.visibility == false)
                                        continue;
-                               if (ivisurf->surface == NULL || tmpview == NULL)
-                                       continue;
+
+                               tmpview = get_weston_view(ivisurf);
+                               assert(tmpview != NULL);
 
                                
weston_layer_entry_insert(&layout->layout_layer.view_list,
                                                          &tmpview->layer_link);
@@ -2554,18 +2553,10 @@ ivi_layout_surface_dump(struct weston_surface *surface,
 struct weston_view *
 ivi_layout_get_weston_view(struct ivi_layout_surface *surface)
 {
-       struct weston_view *tmpview = NULL;
-
        if (surface == NULL)
                return NULL;
 
-       wl_list_for_each(tmpview, &surface->surface->views, surface_link)
-       {
-               if (tmpview != NULL) {
-                       break;
-               }
-       }
-       return tmpview;
+       return get_weston_view(surface);
 }
 
 void
-- 
1.7.9.5

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

Reply via email to