1
0
Fork 0
forked from wry/wry

autocommit 2022-04-29 17:57:11 CEST

This commit is contained in:
Julian Orth 2022-04-29 17:57:11 +02:00
parent 9a0bfb3a72
commit 4e717ecef8
6 changed files with 39 additions and 14 deletions

View file

@ -328,6 +328,10 @@ impl Node for XdgPopup {
impl StackedNode for XdgPopup { impl StackedNode for XdgPopup {
stacked_node_impl!(); stacked_node_impl!();
fn stacked_set_visible(&self, visible: bool) {
self.xdg.set_visible(visible);
}
fn stacked_absolute_position_constrains_input(&self) -> bool { fn stacked_absolute_position_constrains_input(&self) -> bool {
false false
} }

View file

@ -443,6 +443,10 @@ impl ToplevelNode for Xwindow {
impl StackedNode for Xwindow { impl StackedNode for Xwindow {
stacked_node_impl!(); stacked_node_impl!();
fn stacked_set_visible(&self, visible: bool) {
self.tl_set_visible(visible);
}
} }
#[derive(Debug, Error)] #[derive(Debug, Error)]

View file

@ -96,7 +96,7 @@ impl FloatNode {
let floater = Rc::new(FloatNode { let floater = Rc::new(FloatNode {
id: state.node_ids.next(), id: state.node_ids.next(),
state: state.clone(), state: state.clone(),
visible: Cell::new(true), visible: Cell::new(ws.stacked_visible()),
position: Cell::new(position), position: Cell::new(position),
display_link: Cell::new(None), display_link: Cell::new(None),
workspace_link: Cell::new(None), workspace_link: Cell::new(None),
@ -118,6 +118,7 @@ impl FloatNode {
.set(Some(ws.stacked.add_last(floater.clone()))); .set(Some(ws.stacked.add_last(floater.clone())));
child.clone().tl_set_workspace(ws); child.clone().tl_set_workspace(ws);
child.tl_set_parent(floater.clone()); child.tl_set_parent(floater.clone());
child.tl_set_visible(floater.visible.get());
floater.schedule_layout(); floater.schedule_layout();
floater floater
} }
@ -321,14 +322,7 @@ impl FloatNode {
self.workspace_link self.workspace_link
.set(Some(ws.stacked.add_last(self.clone()))); .set(Some(ws.stacked.add_last(self.clone())));
self.workspace.set(ws.clone()); self.workspace.set(ws.clone());
} self.stacked_set_visible(ws.stacked_visible());
pub fn set_visible(&self, visible: bool) {
self.visible.set(visible);
if let Some(child) = self.child.get() {
child.tl_set_visible(visible);
}
self.seat_state.set_visible(self, visible);
} }
} }
@ -520,4 +514,12 @@ impl ContainingNode for FloatNode {
impl StackedNode for FloatNode { impl StackedNode for FloatNode {
stacked_node_impl!(); stacked_node_impl!();
fn stacked_set_visible(&self, visible: bool) {
self.visible.set(visible);
if let Some(child) = self.child.get() {
child.tl_set_visible(visible);
}
self.seat_state.set_visible(self, visible);
}
} }

View file

@ -4,6 +4,7 @@ pub trait StackedNode: Node {
fn stacked_as_node(&self) -> &dyn Node; fn stacked_as_node(&self) -> &dyn Node;
fn stacked_into_node(self: Rc<Self>) -> Rc<dyn Node>; fn stacked_into_node(self: Rc<Self>) -> Rc<dyn Node>;
fn stacked_into_dyn(self: Rc<Self>) -> Rc<dyn StackedNode>; fn stacked_into_dyn(self: Rc<Self>) -> Rc<dyn StackedNode>;
fn stacked_set_visible(&self, visible: bool);
fn stacked_absolute_position_constrains_input(&self) -> bool { fn stacked_absolute_position_constrains_input(&self) -> bool {
true true

View file

@ -14,6 +14,7 @@ use {
rc::Rc, rc::Rc,
}, },
}; };
use crate::ifs::wl_seat::collect_kb_foci2;
tree_id!(ToplevelNodeId); tree_id!(ToplevelNodeId);
@ -265,6 +266,10 @@ impl ToplevelData {
kb_foci = collect_kb_foci(container.clone()); kb_foci = collect_kb_foci(container.clone());
container.tl_set_visible(false); container.tl_set_visible(false);
} }
for stacked in ws.stacked.iter() {
collect_kb_foci2(stacked.deref().clone().stacked_into_node(), &mut kb_foci);
stacked.stacked_set_visible(false);
}
*data = Some(FullscreenedData { *data = Some(FullscreenedData {
placeholder, placeholder,
workspace: ws.clone(), workspace: ws.clone(),
@ -308,8 +313,8 @@ impl ToplevelData {
_ => {} _ => {}
} }
fd.workspace.fullscreen.take(); fd.workspace.fullscreen.take();
if let Some(container) = fd.workspace.container.get() { if node.node_visible() {
container.tl_set_visible(node.tl_as_node().node_visible()); fd.workspace.set_visible(true);
} }
if fd.placeholder.is_destroyed() { if fd.placeholder.is_destroyed() {
state.map_tiled(node); state.map_tiled(node);

View file

@ -38,10 +38,14 @@ impl WorkspaceNode {
container.clone().tl_change_extents(&pos); container.clone().tl_change_extents(&pos);
container.clone().tl_set_workspace(self); container.clone().tl_set_workspace(self);
container.tl_set_parent(self.clone()); container.tl_set_parent(self.clone());
container.tl_set_visible(self.visible.get() && self.fullscreen.get().is_none()); container.tl_set_visible(self.stacked_visible());
self.container.set(Some(container.clone())); self.container.set(Some(container.clone()));
} }
pub fn stacked_visible(&self) -> bool {
self.visible.get() && self.fullscreen.get().is_none()
}
pub fn change_extents(&self, rect: &Rect) { pub fn change_extents(&self, rect: &Rect) {
self.position.set(*rect); self.position.set(*rect);
if let Some(c) = self.container.get() { if let Some(c) = self.container.get() {
@ -53,8 +57,13 @@ impl WorkspaceNode {
self.visible.set(visible); self.visible.set(visible);
if let Some(fs) = self.fullscreen.get() { if let Some(fs) = self.fullscreen.get() {
fs.tl_set_visible(visible); fs.tl_set_visible(visible);
} else if let Some(container) = self.container.get() { } else {
container.tl_set_visible(visible); if let Some(container) = self.container.get() {
container.tl_set_visible(visible);
}
for stacked in self.stacked.iter() {
stacked.stacked_set_visible(visible);
}
} }
self.seat_state.set_visible(self, visible); self.seat_state.set_visible(self, visible);
} }