git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit207e814f759d372be9ae9fb3b92e93d1ef55caeb
parent56e35e6638
authorMarten Ringwelski <[email protected]>
date2020-11-16 09:17
code: Add Root.all_outputs

 river/Output.zig        | 8 ++++++++
 river/OutputManager.zig | 7 +++++++
 2 files changed, 15 insertions(+)

diff --git a/river/Output.zig b/river/Output.zig
index 155ce62..7e24008 100644
--- a/river/Output.zig
+++ b/river/Output.zig
@@ -513,6 +513,14 @@ fn handleDestroy(listener: ?*c.wl_listener, data: ?*c_void) callconv(.C) void {
         root.removeOutput(node);
     }
 
+    var it = root.all_outputs.first;
+    while (it) |all_node| : (it = all_node.next) {
+        if (all_node.data == self) {
+            root.all_outputs.remove(all_node);
+            break;
+        }
+    }
+
     // Remove all listeners
     c.wl_list_remove(&self.listen_destroy.link);
     c.wl_list_remove(&self.listen_frame.link);
diff --git a/river/OutputManager.zig b/river/OutputManager.zig
index 4415352..208a2e6 100644
--- a/river/OutputManager.zig
+++ b/river/OutputManager.zig
@@ -66,7 +66,14 @@ fn handleNewOutput(listener: ?*c.wl_listener, data: ?*c_void) callconv(.C) void
         c.wlr_output_destroy(wlr_output);
         return;
     };
+    const ptr_node = util.gpa.create(std.TailQueue(*Output).Node) catch {
+        util.gpa.destroy(node);
+        c.wlr_output_destroy(wlr_output);
+        return;
+    };
+    ptr_node.data = &node.data;
 
+    self.root.all_outputs.append(ptr_node);
     self.root.addOutput(node);
 }