hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
From 813381e937b2bdabd1c27f413e7cbc3e97d8ee35 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
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 <jeffy.chen@rock-chips.com>
---
 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