view: Create subsurface views in weston_view_create()
When we create a new view for a top-level window, also create views for all its children. Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
bf228370ff
commit
314f2ba0c3
|
@ -502,10 +502,52 @@ weston_view_create_internal(struct weston_surface *surface)
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct weston_view *
|
||||||
|
weston_view_create_subsurfaces(struct weston_view *parent_view,
|
||||||
|
struct weston_subsurface *sub)
|
||||||
|
{
|
||||||
|
struct weston_surface *child_surface = sub->surface;
|
||||||
|
struct weston_subsurface *sub_sub;
|
||||||
|
struct weston_view *child_view;
|
||||||
|
|
||||||
|
child_view = weston_view_create_internal(child_surface);
|
||||||
|
assert(child_view);
|
||||||
|
|
||||||
|
weston_view_set_transform_parent(child_view, parent_view);
|
||||||
|
weston_view_set_rel_position(child_view, sub->position.offset);
|
||||||
|
child_view->parent_view = parent_view;
|
||||||
|
weston_view_update_transform(child_view);
|
||||||
|
child_surface->compositor->view_list_needs_rebuild = true;
|
||||||
|
|
||||||
|
wl_list_for_each(sub_sub, &child_surface->subsurface_list, parent_link) {
|
||||||
|
if (sub_sub->surface == sub->surface)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
weston_view_create_subsurfaces(child_view, sub_sub);
|
||||||
|
}
|
||||||
|
|
||||||
|
return child_view;
|
||||||
|
}
|
||||||
|
|
||||||
WL_EXPORT struct weston_view *
|
WL_EXPORT struct weston_view *
|
||||||
weston_view_create(struct weston_surface *surface)
|
weston_view_create(struct weston_surface *surface)
|
||||||
{
|
{
|
||||||
return weston_view_create_internal(surface);
|
struct weston_view *view = weston_view_create_internal(surface);
|
||||||
|
struct weston_subsurface *sub;
|
||||||
|
|
||||||
|
if (!view)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Create a view for all the subsurfaces so it's ready to use later;
|
||||||
|
* this will be discovered by view_list_add_subsurface_list(). */
|
||||||
|
wl_list_for_each(sub, &surface->subsurface_list, parent_link) {
|
||||||
|
if (sub->surface == surface)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
weston_view_create_subsurfaces(view, sub);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct weston_presentation_feedback {
|
struct weston_presentation_feedback {
|
||||||
|
|
Loading…
Reference in New Issue