From 813381e937b2bdabd1c27f413e7cbc3e97d8ee35 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Sat, 7 May 2022 16:41:20 +0800 Subject: [PATCH 23/69] Avoid adding views to other outputs The outputs can be overlapped now. Signed-off-by: Jeffy Chen --- libweston/compositor.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libweston/compositor.c b/libweston/compositor.c index be5c03d87..daeedfe13 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -95,8 +95,7 @@ weston_output_transform_scale_init(struct weston_output *output, uint32_t transform, uint32_t scale); static void -weston_compositor_build_view_list(struct weston_compositor *compositor, - struct weston_output *output); +weston_compositor_build_view_list(struct weston_compositor *compositor); static char * weston_output_create_heads_string(struct weston_output *output); @@ -2315,8 +2314,7 @@ weston_view_destroy(struct weston_view *view) if (weston_view_is_mapped(view)) { weston_view_unmap(view); - weston_compositor_build_view_list(view->surface->compositor, - NULL); + weston_compositor_build_view_list(view->surface->compositor); } wl_list_for_each_safe(pnode, pntmp, &view->paint_node_list, view_link) @@ -2830,6 +2828,9 @@ view_list_add(struct weston_compositor *compositor, struct weston_paint_node *pnode; struct weston_subsurface *sub; + if (output && !weston_output_valid(output)) + return; + weston_view_update_transform(view); pnode = view_ensure_paint_node(view, output); @@ -2850,13 +2851,13 @@ view_list_add(struct weston_compositor *compositor, } static void -weston_compositor_build_view_list(struct weston_compositor *compositor, - struct weston_output *output) +weston_compositor_build_view_list(struct weston_compositor *compositor) { struct weston_view *view, *tmp; + struct weston_output *output; struct weston_layer *layer; - if (output) { + wl_list_for_each(output, &compositor->output_list, link) { wl_list_remove(&output->paint_node_z_order_list); wl_list_init(&output->paint_node_z_order_list); } @@ -2871,7 +2872,7 @@ weston_compositor_build_view_list(struct weston_compositor *compositor, wl_list_for_each(layer, &compositor->layer_list, link) { wl_list_for_each(view, &layer->view_list.link, layer_link.link) { - view_list_add(compositor, view, output); + view_list_add(compositor, view, view->output); } } @@ -2924,7 +2925,7 @@ weston_output_repaint(struct weston_output *output, void *repaint_data) TL_POINT(ec, "core_repaint_begin", TLP_OUTPUT(output), TLP_END); /* Rebuild the surface list and update surface transforms up front. */ - weston_compositor_build_view_list(ec, output); + weston_compositor_build_view_list(ec); /* Find the highest protection desired for an output */ wl_list_for_each(pnode, &output->paint_node_z_order_list, @@ -6505,7 +6506,7 @@ weston_compositor_remove_output(struct weston_output *output) * Use view_list in case the output did not go through repaint * after a view came on it, lacking a paint node. Just to be sure. */ - weston_compositor_build_view_list(compositor, NULL); + weston_compositor_build_view_list(compositor); wl_list_for_each(view, &compositor->view_list, link) { if (view->output_mask & (1u << output->id)) weston_view_assign_output(view); -- 2.20.1