1
0
Fork 0
forked from wry/wry

tree: access outputs via root node

This commit is contained in:
Julian Orth 2024-04-25 15:13:29 +02:00
parent b5f1166360
commit fa3d870935
9 changed files with 31 additions and 30 deletions

View file

@ -1804,11 +1804,11 @@ impl MetalBackend {
} }
let dd = connector.display.borrow_mut(); 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(); let mut rr = connector.render_result.borrow_mut();
if let Some(g) = &global { if let Some(g) = &global {
let refresh = dd.refresh; 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(..) { for fb in rr.presentation_feedbacks.drain(..) {
if let Some(bindings) = bindings.get(&fb.client.id) { if let Some(bindings) = bindings.get(&fb.client.id) {
for binding in bindings.values() { for binding in bindings.values() {

View file

@ -90,8 +90,8 @@ impl ExtSessionLockV1RequestHandler for ExtSessionLockV1 {
let state = &self.client.state; let state = &self.client.state;
state.lock.locked.set(false); state.lock.locked.set(false);
state.lock.lock.take(); state.lock.lock.take();
for output in state.outputs.lock().values() { for output in state.root.outputs.lock().values() {
if let Some(surface) = output.node.set_lock_surface(None) { if let Some(surface) = output.set_lock_surface(None) {
surface.destroy_node(); surface.destroy_node();
} }
} }

View file

@ -220,8 +220,8 @@ impl JayCompositorRequestHandler for JayCompositor {
if let Some(lock) = state.lock.lock.take() { if let Some(lock) = state.lock.lock.take() {
lock.finish(); lock.finish();
} }
for output in state.outputs.lock().values() { for output in state.root.outputs.lock().values() {
if let Some(surface) = output.node.set_lock_surface(None) { if let Some(surface) = output.set_lock_surface(None) {
surface.destroy_node(); surface.destroy_node();
} }
} }

View file

@ -596,10 +596,10 @@ impl WlSeatGlobal {
self.update_hardware_cursor_position(); self.update_hardware_cursor_position();
self.trigger_tree_changed(); self.trigger_tree_changed();
let output = 'set_output: { let output = 'set_output: {
let outputs = self.state.outputs.lock(); let outputs = self.state.root.outputs.lock();
for output in outputs.values() { for output in outputs.values() {
if output.node.global.pos.get().contains(x, y) { if output.global.pos.get().contains(x, y) {
break 'set_output output.node.clone(); break 'set_output output.clone();
} }
} }
self.state.dummy_output.get().unwrap() self.state.dummy_output.get().unwrap()

View file

@ -241,12 +241,12 @@ impl WlSeatGlobal {
mut x: Fixed, mut x: Fixed,
mut y: Fixed, mut y: Fixed,
) { ) {
let output = match self.state.outputs.get(&connector) { let output = match self.state.root.outputs.get(&connector) {
Some(o) => o, Some(o) => o,
_ => return, _ => return,
}; };
self.set_output(&output.node); self.set_output(&output);
let pos = output.node.global.pos.get(); let pos = output.global.pos.get();
x += Fixed::from_int(pos.x1()); x += Fixed::from_int(pos.x1());
y += Fixed::from_int(pos.y1()); y += Fixed::from_int(pos.y1());
if let Some(c) = self.constraint.get() { if let Some(c) = self.constraint.get() {
@ -314,10 +314,10 @@ impl WlSeatGlobal {
let mut y_int = y.round_down(); let mut y_int = y.round_down();
if !pos.contains(x_int, y_int) { if !pos.contains(x_int, y_int) {
'warp: { 'warp: {
let outputs = self.state.outputs.lock(); let outputs = self.state.root.outputs.lock();
for output in outputs.values() { for output in outputs.values() {
if output.node.global.pos.get().contains(x_int, y_int) { if output.global.pos.get().contains(x_int, y_int) {
self.set_output(&output.node); self.set_output(output);
break 'warp; break 'warp;
} }
} }

View file

@ -65,9 +65,9 @@ impl ZwlrLayerShellV1RequestHandler for ZwlrLayerShellV1 {
break 'get_output output.global.opt.clone(); 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() { 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); return Err(ZwlrLayerShellV1Error::NoOutputs);
} }

View file

@ -109,9 +109,9 @@ impl TestRun {
self.backend.install_default()?; self.backend.install_default()?;
let seat = self.get_seat("default")?; let seat = self.get_seat("default")?;
self.state.eng.yield_now().await; 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"), None => bail!("No output"),
Some(d) => d.node.clone(), Some(d) => d.clone(),
}; };
self.cfg self.cfg
.set_input_device_seat(self.backend.default_kb.common.id, seat.id())?; .set_input_device_seat(self.backend.default_kb.common.id, seat.id())?;

View file

@ -731,8 +731,9 @@ impl State {
connector.handler.take(); connector.handler.take();
connector.async_event.clear(); connector.async_event.clear();
} }
for (_, output) in self.outputs.lock().drain() { self.outputs.clear();
output.node.clear(); for output in self.root.outputs.lock().values() {
output.clear();
} }
self.dbus.clear(); self.dbus.clear();
self.pending_container_layout.clear(); self.pending_container_layout.clear();

View file

@ -158,10 +158,13 @@ impl ConnectorHandler {
node: on.clone(), node: on.clone(),
}); });
self.state.outputs.set(self.id, output_data); 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.node.set(Some(on.clone()));
global.opt.global.set(Some(global.clone())); global.opt.global.set(Some(global.clone()));
let mut ws_to_move = VecDeque::new(); 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 seats = self.state.globals.seats.lock();
let pos = global.pos.get(); let pos = global.pos.get();
let x = (pos.x1() + pos.x2()) / 2; let x = (pos.x1() + pos.x2()) / 2;
@ -177,11 +180,11 @@ impl ConnectorHandler {
ws_to_move.push_back(ws); ws_to_move.push_back(ws);
} }
} }
for source in self.state.outputs.lock().values() { for source in self.state.root.outputs.lock().values() {
if source.node.id == on.id { if source.id == on.id {
continue; continue;
} }
for ws in source.node.workspaces.iter() { for ws in source.workspaces.iter() {
if ws.is_dummy { if ws.is_dummy {
continue; continue;
} }
@ -203,9 +206,6 @@ impl ConnectorHandler {
if let Some(config) = self.state.config.get() { if let Some(config) = self.state.config.get() {
config.connector_connected(self.id); 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.add_global(&global);
self.state.tree_changed(); self.state.tree_changed();
'outer: loop { 'outer: loop {
@ -255,8 +255,8 @@ impl ConnectorHandler {
surface.send_closed(); surface.send_closed();
} }
} }
let target = match self.state.outputs.lock().values().next() { let target = match self.state.root.outputs.lock().values().next() {
Some(o) => o.node.clone(), Some(o) => o.clone(),
_ => self.state.dummy_output.get().unwrap(), _ => self.state.dummy_output.get().unwrap(),
}; };
for ws in on.workspaces.iter() { for ws in on.workspaces.iter() {