1
0
Fork 0
forked from wry/wry

tree: add Node::node_output

This commit is contained in:
Julian Orth 2025-04-26 21:49:09 +02:00
parent 0dcb33ae38
commit b83bf0657b
15 changed files with 65 additions and 7 deletions

View file

@ -18,7 +18,7 @@ use {
text::TextTexture,
tree::{
ContainingNode, Direction, FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId,
TddType, TileDragDestination, ToplevelData, ToplevelNode, ToplevelNodeBase,
OutputNode, TddType, TileDragDestination, ToplevelData, ToplevelNode, ToplevelNodeBase,
WorkspaceNode, default_tile_drag_bounds, walker::NodeVisitor,
},
utils::{
@ -1761,6 +1761,10 @@ impl Node for ContainerNode {
fn node_is_container(&self) -> bool {
true
}
fn node_output(&self) -> Option<Rc<OutputNode>> {
self.toplevel_data.output_opt()
}
}
impl ContainingNode for ContainerNode {

View file

@ -146,6 +146,10 @@ impl Node for DisplayNode {
self.extents.get()
}
fn node_output(&self) -> Option<Rc<OutputNode>> {
None
}
fn node_find_tree_at(
&self,
x: i32,

View file

@ -697,6 +697,10 @@ impl Node for FloatNode {
self.position.get()
}
fn node_output(&self) -> Option<Rc<OutputNode>> {
Some(self.workspace.get().output.get())
}
fn node_child_title_changed(self: Rc<Self>, _child: &dyn Node, title: &str) {
self.update_child_title(title);
}

View file

@ -1343,6 +1343,10 @@ impl Node for OutputNode {
self.global.pos.get()
}
fn node_output(&self) -> Option<Rc<OutputNode>> {
self.global.opt.node()
}
fn node_do_focus(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, direction: Direction) {
if self.state.lock.locked.get() {
if let Some(lock) = self.lock_surface.get() {

View file

@ -11,8 +11,8 @@ use {
text::TextTexture,
tree::{
ContainerSplit, Direction, FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId,
NodeVisitor, TileDragDestination, ToplevelData, ToplevelNode, ToplevelNodeBase,
default_tile_drag_destination,
NodeVisitor, OutputNode, TileDragDestination, ToplevelData, ToplevelNode,
ToplevelNodeBase, default_tile_drag_destination,
},
utils::{
asyncevent::AsyncEvent, errorfmt::ErrorFmt, on_drop_event::OnDropEvent,
@ -201,6 +201,10 @@ impl Node for PlaceholderNode {
fn node_into_toplevel(self: Rc<Self>) -> Option<Rc<dyn ToplevelNode>> {
Some(self)
}
fn node_output(&self) -> Option<Rc<OutputNode>> {
self.toplevel.output_opt()
}
}
impl ToplevelNodeBase for PlaceholderNode {

View file

@ -600,12 +600,16 @@ impl ToplevelData {
}
pub fn output(&self) -> Rc<OutputNode> {
match self.workspace.get() {
match self.output_opt() {
None => self.state.dummy_output.get().unwrap(),
Some(ws) => ws.output.get(),
Some(o) => o,
}
}
pub fn output_opt(&self) -> Option<Rc<OutputNode>> {
self.workspace.get().map(|ws| ws.output.get())
}
pub fn desired_pixel_size(&self) -> (i32, i32) {
let (dw, dh) = self.desired_extents.get().size();
if let Some(ws) = self.workspace.get() {

View file

@ -298,6 +298,10 @@ impl Node for WorkspaceNode {
self.position.get()
}
fn node_output(&self) -> Option<Rc<OutputNode>> {
Some(self.output.get())
}
fn node_do_focus(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, direction: Direction) {
if let Some(fs) = self.fullscreen.get() {
fs.node_do_focus(seat, direction);