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 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() {

View file

@ -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();
}
}

View file

@ -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();
}
}

View file

@ -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()

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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())?;

View file

@ -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();

View file

@ -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() {