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 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() {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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())?;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue