tree: access outputs via root node
This commit is contained in:
parent
b5f1166360
commit
fa3d870935
9 changed files with 31 additions and 30 deletions
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())?;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue