diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index 13b542fc..5c3bd83d 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -1804,11 +1804,11 @@ impl MetalBackend { } let dd = connector.display.borrow_mut(); { - let global = self.state.outputs.get(&connector.connector_id); + let global = self.state.root.outputs.get(&connector.connector_id); let mut rr = connector.render_result.borrow_mut(); if let Some(g) = &global { let refresh = dd.refresh; - let bindings = g.node.global.bindings.borrow_mut(); + let bindings = g.global.bindings.borrow_mut(); for fb in rr.presentation_feedbacks.drain(..) { if let Some(bindings) = bindings.get(&fb.client.id) { for binding in bindings.values() { diff --git a/src/ifs/ext_session_lock_v1.rs b/src/ifs/ext_session_lock_v1.rs index 6fad8599..51479322 100644 --- a/src/ifs/ext_session_lock_v1.rs +++ b/src/ifs/ext_session_lock_v1.rs @@ -90,8 +90,8 @@ impl ExtSessionLockV1RequestHandler for ExtSessionLockV1 { let state = &self.client.state; state.lock.locked.set(false); state.lock.lock.take(); - for output in state.outputs.lock().values() { - if let Some(surface) = output.node.set_lock_surface(None) { + for output in state.root.outputs.lock().values() { + if let Some(surface) = output.set_lock_surface(None) { surface.destroy_node(); } } diff --git a/src/ifs/jay_compositor.rs b/src/ifs/jay_compositor.rs index a25ff3ee..ddbdba84 100644 --- a/src/ifs/jay_compositor.rs +++ b/src/ifs/jay_compositor.rs @@ -220,8 +220,8 @@ impl JayCompositorRequestHandler for JayCompositor { if let Some(lock) = state.lock.lock.take() { lock.finish(); } - for output in state.outputs.lock().values() { - if let Some(surface) = output.node.set_lock_surface(None) { + for output in state.root.outputs.lock().values() { + if let Some(surface) = output.set_lock_surface(None) { surface.destroy_node(); } } diff --git a/src/ifs/wl_seat.rs b/src/ifs/wl_seat.rs index 6fc3a530..abfda057 100644 --- a/src/ifs/wl_seat.rs +++ b/src/ifs/wl_seat.rs @@ -596,10 +596,10 @@ impl WlSeatGlobal { self.update_hardware_cursor_position(); self.trigger_tree_changed(); let output = 'set_output: { - let outputs = self.state.outputs.lock(); + let outputs = self.state.root.outputs.lock(); for output in outputs.values() { - if output.node.global.pos.get().contains(x, y) { - break 'set_output output.node.clone(); + if output.global.pos.get().contains(x, y) { + break 'set_output output.clone(); } } self.state.dummy_output.get().unwrap() diff --git a/src/ifs/wl_seat/event_handling.rs b/src/ifs/wl_seat/event_handling.rs index 92d86a21..deb943cb 100644 --- a/src/ifs/wl_seat/event_handling.rs +++ b/src/ifs/wl_seat/event_handling.rs @@ -241,12 +241,12 @@ impl WlSeatGlobal { mut x: Fixed, mut y: Fixed, ) { - let output = match self.state.outputs.get(&connector) { + let output = match self.state.root.outputs.get(&connector) { Some(o) => o, _ => return, }; - self.set_output(&output.node); - let pos = output.node.global.pos.get(); + self.set_output(&output); + let pos = output.global.pos.get(); x += Fixed::from_int(pos.x1()); y += Fixed::from_int(pos.y1()); if let Some(c) = self.constraint.get() { @@ -314,10 +314,10 @@ impl WlSeatGlobal { let mut y_int = y.round_down(); if !pos.contains(x_int, y_int) { 'warp: { - let outputs = self.state.outputs.lock(); + let outputs = self.state.root.outputs.lock(); for output in outputs.values() { - if output.node.global.pos.get().contains(x_int, y_int) { - self.set_output(&output.node); + if output.global.pos.get().contains(x_int, y_int) { + self.set_output(output); break 'warp; } } diff --git a/src/ifs/zwlr_layer_shell_v1.rs b/src/ifs/zwlr_layer_shell_v1.rs index c192fb38..ec1b13b1 100644 --- a/src/ifs/zwlr_layer_shell_v1.rs +++ b/src/ifs/zwlr_layer_shell_v1.rs @@ -65,9 +65,9 @@ impl ZwlrLayerShellV1RequestHandler for ZwlrLayerShellV1 { break 'get_output output.global.opt.clone(); } } - let outputs = self.client.state.outputs.lock(); + let outputs = self.client.state.root.outputs.lock(); if let Some(output) = outputs.values().next() { - break 'get_output output.node.global.opt.clone(); + break 'get_output output.global.opt.clone(); } return Err(ZwlrLayerShellV1Error::NoOutputs); } diff --git a/src/it/testrun.rs b/src/it/testrun.rs index 5f26c758..46f6953d 100644 --- a/src/it/testrun.rs +++ b/src/it/testrun.rs @@ -109,9 +109,9 @@ impl TestRun { self.backend.install_default()?; let seat = self.get_seat("default")?; self.state.eng.yield_now().await; - let output = match self.state.outputs.lock().values().next() { + let output = match self.state.root.outputs.lock().values().next() { None => bail!("No output"), - Some(d) => d.node.clone(), + Some(d) => d.clone(), }; self.cfg .set_input_device_seat(self.backend.default_kb.common.id, seat.id())?; diff --git a/src/state.rs b/src/state.rs index be8797f7..7e75a0c5 100644 --- a/src/state.rs +++ b/src/state.rs @@ -731,8 +731,9 @@ impl State { connector.handler.take(); connector.async_event.clear(); } - for (_, output) in self.outputs.lock().drain() { - output.node.clear(); + self.outputs.clear(); + for output in self.root.outputs.lock().values() { + output.clear(); } self.dbus.clear(); self.pending_container_layout.clear(); diff --git a/src/tasks/connector.rs b/src/tasks/connector.rs index 2b574556..a100b36f 100644 --- a/src/tasks/connector.rs +++ b/src/tasks/connector.rs @@ -158,10 +158,13 @@ impl ConnectorHandler { node: on.clone(), }); self.state.outputs.set(self.id, output_data); + on.schedule_update_render_data(); + self.state.root.outputs.set(self.id, on.clone()); + self.state.root.update_extents(); global.opt.node.set(Some(on.clone())); global.opt.global.set(Some(global.clone())); let mut ws_to_move = VecDeque::new(); - if self.state.outputs.len() == 1 { + if self.state.root.outputs.len() == 1 { let seats = self.state.globals.seats.lock(); let pos = global.pos.get(); let x = (pos.x1() + pos.x2()) / 2; @@ -177,11 +180,11 @@ impl ConnectorHandler { ws_to_move.push_back(ws); } } - for source in self.state.outputs.lock().values() { - if source.node.id == on.id { + for source in self.state.root.outputs.lock().values() { + if source.id == on.id { continue; } - for ws in source.node.workspaces.iter() { + for ws in source.workspaces.iter() { if ws.is_dummy { continue; } @@ -203,9 +206,6 @@ impl ConnectorHandler { if let Some(config) = self.state.config.get() { config.connector_connected(self.id); } - on.schedule_update_render_data(); - self.state.root.outputs.set(self.id, on.clone()); - self.state.root.update_extents(); self.state.add_global(&global); self.state.tree_changed(); 'outer: loop { @@ -255,8 +255,8 @@ impl ConnectorHandler { surface.send_closed(); } } - let target = match self.state.outputs.lock().values().next() { - Some(o) => o.node.clone(), + let target = match self.state.root.outputs.lock().values().next() { + Some(o) => o.clone(), _ => self.state.dummy_output.get().unwrap(), }; for ws in on.workspaces.iter() {