tree: add Node::node_location
This commit is contained in:
parent
f75051281b
commit
289c201a69
20 changed files with 152 additions and 45 deletions
|
|
@ -8,7 +8,7 @@ use {
|
|||
rect::Rect,
|
||||
renderer::Renderer,
|
||||
scale::Scale,
|
||||
tree::{Node, NodeVisitorBase, OutputNode},
|
||||
tree::{Node, NodeLocation, NodeVisitorBase, OutputNode},
|
||||
},
|
||||
std::{cell::Cell, ops::Deref, rc::Rc},
|
||||
};
|
||||
|
|
@ -133,7 +133,8 @@ impl Cursor for CursorSurface {
|
|||
}
|
||||
|
||||
fn set_output(&self, output: &Rc<OutputNode>) {
|
||||
self.surface.set_output(output);
|
||||
self.surface
|
||||
.set_output(output, NodeLocation::Output(output.id));
|
||||
}
|
||||
|
||||
fn handle_set(self: Rc<Self>) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,10 @@ use {
|
|||
leaks::Tracker,
|
||||
object::{Object, Version},
|
||||
rect::Rect,
|
||||
tree::{FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeVisitor, OutputNode},
|
||||
tree::{
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeLocation, NodeVisitor,
|
||||
OutputNode,
|
||||
},
|
||||
utils::numcell::NumCell,
|
||||
wire::{ExtSessionLockSurfaceV1Id, WlSurfaceId, ext_session_lock_surface_v1::*},
|
||||
},
|
||||
|
|
@ -131,6 +134,10 @@ impl Node for ExtSessionLockSurfaceV1 {
|
|||
self.output.node()
|
||||
}
|
||||
|
||||
fn node_location(&self) -> Option<NodeLocation> {
|
||||
self.surface.node_location()
|
||||
}
|
||||
|
||||
fn node_find_tree_at(
|
||||
&self,
|
||||
x: i32,
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ use {
|
|||
},
|
||||
rect::Rect,
|
||||
tree::{
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeVisitor, OutputNode,
|
||||
StackedNode,
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeLocation, NodeVisitor,
|
||||
OutputNode, StackedNode,
|
||||
},
|
||||
utils::{
|
||||
copyhashmap::CopyHashMap,
|
||||
|
|
@ -300,6 +300,10 @@ impl<T: TrayItem> Node for T {
|
|||
self.data().output.node()
|
||||
}
|
||||
|
||||
fn node_location(&self) -> Option<NodeLocation> {
|
||||
self.data().surface.node_location()
|
||||
}
|
||||
|
||||
fn node_find_tree_at(
|
||||
&self,
|
||||
x: i32,
|
||||
|
|
@ -328,7 +332,8 @@ fn install<T: TrayItem>(item: &Rc<T>) -> Result<(), TrayItemError> {
|
|||
data.surface.ext.set(item.clone());
|
||||
data.surface.set_visible(false);
|
||||
if let Some(node) = data.output.node() {
|
||||
data.surface.set_output(&node);
|
||||
data.surface
|
||||
.set_output(&node, NodeLocation::Output(node.id));
|
||||
item.send_initial_configure();
|
||||
}
|
||||
Ok(())
|
||||
|
|
|
|||
|
|
@ -186,7 +186,8 @@ impl WlSubsurface {
|
|||
update_children_attach(self)?;
|
||||
let (x, y) = self.parent.buffer_abs_pos.get().position();
|
||||
self.surface.set_absolute_position(x, y);
|
||||
self.surface.set_output(&self.parent.output.get());
|
||||
self.surface
|
||||
.set_output(&self.parent.output.get(), self.parent.location.get());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,8 +12,9 @@ use {
|
|||
state::State,
|
||||
tree::{
|
||||
ContainerSplit, Direction, FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId,
|
||||
NodeVisitor, OutputNode, StackedNode, TileDragDestination, ToplevelData, ToplevelNode,
|
||||
ToplevelNodeBase, ToplevelType, WorkspaceNode, default_tile_drag_destination,
|
||||
NodeLocation, NodeVisitor, OutputNode, StackedNode, TileDragDestination, ToplevelData,
|
||||
ToplevelNode, ToplevelNodeBase, ToplevelType, WorkspaceNode,
|
||||
default_tile_drag_destination,
|
||||
},
|
||||
utils::{clonecell::CloneCell, copyhashmap::CopyHashMap, linkedlist::LinkedNode},
|
||||
wire::WlSurfaceId,
|
||||
|
|
@ -370,6 +371,10 @@ impl Node for Xwindow {
|
|||
self.toplevel_data.output_opt()
|
||||
}
|
||||
|
||||
fn node_location(&self) -> Option<NodeLocation> {
|
||||
self.x.surface.node_location()
|
||||
}
|
||||
|
||||
fn node_do_focus(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, _direction: Direction) {
|
||||
seat.focus_toplevel(self.clone());
|
||||
}
|
||||
|
|
@ -446,7 +451,7 @@ impl ToplevelNodeBase for Xwindow {
|
|||
}
|
||||
|
||||
fn tl_set_workspace_ext(&self, ws: &Rc<WorkspaceNode>) {
|
||||
self.x.surface.set_output(&ws.output.get());
|
||||
self.x.surface.set_output(&ws.output.get(), ws.location());
|
||||
}
|
||||
|
||||
fn tl_change_extents_impl(self: Rc<Self>, rect: &Rect) {
|
||||
|
|
@ -456,7 +461,9 @@ impl ToplevelNodeBase for Xwindow {
|
|||
if self.data.info.override_redirect.get() {
|
||||
let (x, y) = rect.center();
|
||||
let output = self.data.state.find_closest_output(x, y).0;
|
||||
self.x.surface.set_output(&output);
|
||||
self.x
|
||||
.surface
|
||||
.set_output(&output, NodeLocation::Output(output.id));
|
||||
} else {
|
||||
self.data
|
||||
.state
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ use {
|
|||
leaks::Tracker,
|
||||
object::Object,
|
||||
rect::Rect,
|
||||
tree::{FindTreeResult, FoundNode, Node, OutputNode, StackedNode, WorkspaceNode},
|
||||
tree::{
|
||||
FindTreeResult, FoundNode, Node, NodeLocation, OutputNode, StackedNode, WorkspaceNode,
|
||||
},
|
||||
utils::{
|
||||
clonecell::CloneCell,
|
||||
copyhashmap::CopyHashMap,
|
||||
|
|
@ -233,7 +235,7 @@ impl XdgSurface {
|
|||
|
||||
fn set_workspace(&self, ws: &Rc<WorkspaceNode>) {
|
||||
self.workspace.set(Some(ws.clone()));
|
||||
self.surface.set_output(&ws.output.get());
|
||||
self.surface.set_output(&ws.output.get(), ws.location());
|
||||
let pu = self.popups.lock();
|
||||
for pu in pu.values() {
|
||||
pu.popup.xdg.set_workspace(ws);
|
||||
|
|
@ -241,7 +243,8 @@ impl XdgSurface {
|
|||
}
|
||||
|
||||
pub fn set_output(&self, output: &Rc<OutputNode>) {
|
||||
self.surface.set_output(output);
|
||||
self.surface
|
||||
.set_output(output, NodeLocation::Output(output.id));
|
||||
let pu = self.popups.lock();
|
||||
for pu in pu.values() {
|
||||
pu.popup.xdg.set_output(output);
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ use {
|
|||
rect::Rect,
|
||||
renderer::Renderer,
|
||||
tree::{
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeVisitor, OutputNode,
|
||||
StackedNode,
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeLocation, NodeVisitor,
|
||||
OutputNode, StackedNode,
|
||||
},
|
||||
utils::clonecell::CloneCell,
|
||||
wire::{XdgPopupId, xdg_popup::*},
|
||||
|
|
@ -319,6 +319,10 @@ impl Node for XdgPopup {
|
|||
self.xdg.workspace.get().map(|w| w.output.get())
|
||||
}
|
||||
|
||||
fn node_location(&self) -> Option<NodeLocation> {
|
||||
self.xdg.surface.node_location()
|
||||
}
|
||||
|
||||
fn node_find_tree_at(
|
||||
&self,
|
||||
x: i32,
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ use {
|
|||
state::State,
|
||||
tree::{
|
||||
ContainerSplit, Direction, FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId,
|
||||
NodeVisitor, OutputNode, TileDragDestination, ToplevelData, ToplevelNode,
|
||||
NodeLocation, NodeVisitor, OutputNode, TileDragDestination, ToplevelData, ToplevelNode,
|
||||
ToplevelNodeBase, ToplevelNodeId, ToplevelType, WorkspaceNode,
|
||||
default_tile_drag_destination,
|
||||
},
|
||||
|
|
@ -512,7 +512,7 @@ impl XdgToplevel {
|
|||
self.extents_changed();
|
||||
if let Some(workspace) = self.xdg.workspace.get() {
|
||||
let output = workspace.output.get();
|
||||
surface.set_output(&output);
|
||||
surface.set_output(&output, workspace.location());
|
||||
}
|
||||
// {
|
||||
// let seats = surface.client.state.globals.lock_seats();
|
||||
|
|
@ -573,6 +573,10 @@ impl Node for XdgToplevel {
|
|||
self.toplevel_data.output_opt()
|
||||
}
|
||||
|
||||
fn node_location(&self) -> Option<NodeLocation> {
|
||||
self.xdg.surface.node_location()
|
||||
}
|
||||
|
||||
fn node_do_focus(self: Rc<Self>, seat: &Rc<WlSeatGlobal>, _direction: Direction) {
|
||||
seat.focus_toplevel(self.clone());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ use {
|
|||
rect::Rect,
|
||||
renderer::Renderer,
|
||||
tree::{
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeVisitor, OutputNode,
|
||||
StackedNode,
|
||||
FindTreeResult, FindTreeUsecase, FoundNode, Node, NodeId, NodeLocation, NodeVisitor,
|
||||
OutputNode, StackedNode,
|
||||
},
|
||||
utils::{
|
||||
bitflags::BitflagsExt,
|
||||
|
|
@ -187,7 +187,8 @@ impl ZwlrLayerSurfaceV1 {
|
|||
}
|
||||
self.surface.ext.set(self.clone());
|
||||
if let Some(output) = self.output.node() {
|
||||
self.surface.set_output(&output);
|
||||
self.surface
|
||||
.set_output(&output, NodeLocation::Output(output.id));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -658,6 +659,10 @@ impl Node for ZwlrLayerSurfaceV1 {
|
|||
self.output.node()
|
||||
}
|
||||
|
||||
fn node_location(&self) -> Option<NodeLocation> {
|
||||
self.surface.node_location()
|
||||
}
|
||||
|
||||
fn node_find_tree_at(
|
||||
&self,
|
||||
x: i32,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue