toplevel: store if ancestor is fullscreen
This commit is contained in:
parent
0253f10dcc
commit
a5e8b39e4f
3 changed files with 42 additions and 2 deletions
|
|
@ -2108,6 +2108,10 @@ impl ContainingNode for ContainerNode {
|
||||||
fn cnode_get_float(self: Rc<Self>) -> Option<Rc<FloatNode>> {
|
fn cnode_get_float(self: Rc<Self>) -> Option<Rc<FloatNode>> {
|
||||||
self.tl_data().float.get()
|
self.tl_data().float.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn cnode_self_or_ancestor_fullscreen(&self) -> bool {
|
||||||
|
self.tl_data().self_or_ancestor_is_fullscreen.get()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToplevelNodeBase for ContainerNode {
|
impl ToplevelNodeBase for ContainerNode {
|
||||||
|
|
@ -2229,6 +2233,12 @@ impl ToplevelNodeBase for ContainerNode {
|
||||||
child.node.tl_set_float(float);
|
child.node.tl_set_float(float);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn tl_mark_ancestor_fullscreen_ext(&self, fullscreen: bool) {
|
||||||
|
for child in self.children.iter() {
|
||||||
|
child.node.tl_mark_ancestor_fullscreen(fullscreen);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn direction_to_split(dir: Direction) -> (ContainerSplit, bool) {
|
fn direction_to_split(dir: Direction) -> (ContainerSplit, bool) {
|
||||||
|
|
|
||||||
|
|
@ -41,4 +41,7 @@ pub trait ContainingNode: Node {
|
||||||
fn cnode_get_float(self: Rc<Self>) -> Option<Rc<FloatNode>> {
|
fn cnode_get_float(self: Rc<Self>) -> Option<Rc<FloatNode>> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
fn cnode_self_or_ancestor_fullscreen(&self) -> bool {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,8 @@ pub trait ToplevelNode: ToplevelNodeBase {
|
||||||
fn tl_pinned(&self) -> bool;
|
fn tl_pinned(&self) -> bool;
|
||||||
fn tl_set_pinned(&self, self_pinned: bool, pinned: bool);
|
fn tl_set_pinned(&self, self_pinned: bool, pinned: bool);
|
||||||
fn tl_set_float(&self, float: Option<&Rc<FloatNode>>);
|
fn tl_set_float(&self, float: Option<&Rc<FloatNode>>);
|
||||||
|
fn tl_mark_ancestor_fullscreen(&self, fullscreen: bool);
|
||||||
|
fn tl_mark_fullscreen(&self, fullscreen: bool);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: ToplevelNodeBase> ToplevelNode for T {
|
impl<T: ToplevelNodeBase> ToplevelNode for T {
|
||||||
|
|
@ -110,6 +112,9 @@ impl<T: ToplevelNodeBase> ToplevelNode for T {
|
||||||
|
|
||||||
fn tl_set_parent(&self, parent: Rc<dyn ContainingNode>) {
|
fn tl_set_parent(&self, parent: Rc<dyn ContainingNode>) {
|
||||||
let data = self.tl_data();
|
let data = self.tl_data();
|
||||||
|
if !data.is_fullscreen.get() {
|
||||||
|
self.tl_mark_ancestor_fullscreen(parent.cnode_self_or_ancestor_fullscreen());
|
||||||
|
}
|
||||||
let parent_was_none = data.parent.set(Some(parent.clone())).is_none();
|
let parent_was_none = data.parent.set(Some(parent.clone())).is_none();
|
||||||
if parent_was_none {
|
if parent_was_none {
|
||||||
data.mapped_during_iteration.set(data.state.eng.iteration());
|
data.mapped_during_iteration.set(data.state.eng.iteration());
|
||||||
|
|
@ -227,6 +232,22 @@ impl<T: ToplevelNodeBase> ToplevelNode for T {
|
||||||
self.tl_data().float.set(float.cloned());
|
self.tl_data().float.set(float.cloned());
|
||||||
self.tl_push_float(float);
|
self.tl_push_float(float);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn tl_mark_ancestor_fullscreen(&self, fullscreen: bool) {
|
||||||
|
let old = self
|
||||||
|
.tl_data()
|
||||||
|
.self_or_ancestor_is_fullscreen
|
||||||
|
.replace(fullscreen);
|
||||||
|
if old == fullscreen {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self.tl_mark_ancestor_fullscreen_ext(fullscreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tl_mark_fullscreen(&self, fullscreen: bool) {
|
||||||
|
self.tl_data().is_fullscreen.set(fullscreen);
|
||||||
|
self.tl_mark_ancestor_fullscreen(fullscreen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait ToplevelNodeBase: Node {
|
pub trait ToplevelNodeBase: Node {
|
||||||
|
|
@ -290,6 +311,10 @@ pub trait ToplevelNodeBase: Node {
|
||||||
fn tl_push_float(&self, float: Option<&Rc<FloatNode>>) {
|
fn tl_push_float(&self, float: Option<&Rc<FloatNode>>) {
|
||||||
let _ = float;
|
let _ = float;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn tl_mark_ancestor_fullscreen_ext(&self, fullscreen: bool) {
|
||||||
|
let _ = fullscreen;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct FullscreenedData {
|
pub struct FullscreenedData {
|
||||||
|
|
@ -346,6 +371,7 @@ pub struct ToplevelData {
|
||||||
pub float_height: Cell<i32>,
|
pub float_height: Cell<i32>,
|
||||||
pub pinned: Cell<bool>,
|
pub pinned: Cell<bool>,
|
||||||
pub is_fullscreen: Cell<bool>,
|
pub is_fullscreen: Cell<bool>,
|
||||||
|
pub self_or_ancestor_is_fullscreen: Cell<bool>,
|
||||||
pub fullscrceen_data: RefCell<Option<FullscreenedData>>,
|
pub fullscrceen_data: RefCell<Option<FullscreenedData>>,
|
||||||
pub workspace: CloneCell<Option<Rc<WorkspaceNode>>>,
|
pub workspace: CloneCell<Option<Rc<WorkspaceNode>>>,
|
||||||
pub title: RefCell<String>,
|
pub title: RefCell<String>,
|
||||||
|
|
@ -401,6 +427,7 @@ impl ToplevelData {
|
||||||
float_height: Default::default(),
|
float_height: Default::default(),
|
||||||
pinned: Cell::new(false),
|
pinned: Cell::new(false),
|
||||||
is_fullscreen: Default::default(),
|
is_fullscreen: Default::default(),
|
||||||
|
self_or_ancestor_is_fullscreen: Default::default(),
|
||||||
fullscrceen_data: Default::default(),
|
fullscrceen_data: Default::default(),
|
||||||
workspace: Default::default(),
|
workspace: Default::default(),
|
||||||
title: RefCell::new(title),
|
title: RefCell::new(title),
|
||||||
|
|
@ -731,7 +758,7 @@ impl ToplevelData {
|
||||||
workspace: ws.clone(),
|
workspace: ws.clone(),
|
||||||
});
|
});
|
||||||
drop(data);
|
drop(data);
|
||||||
self.is_fullscreen.set(true);
|
node.tl_mark_fullscreen(true);
|
||||||
self.property_changed(TL_CHANGED_FULLSCREEN);
|
self.property_changed(TL_CHANGED_FULLSCREEN);
|
||||||
node.tl_set_parent(ws.clone());
|
node.tl_set_parent(ws.clone());
|
||||||
ws.set_fullscreen_node(&node);
|
ws.set_fullscreen_node(&node);
|
||||||
|
|
@ -758,7 +785,7 @@ impl ToplevelData {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
self.is_fullscreen.set(false);
|
node.tl_mark_fullscreen(false);
|
||||||
self.property_changed(TL_CHANGED_FULLSCREEN);
|
self.property_changed(TL_CHANGED_FULLSCREEN);
|
||||||
match fd.workspace.fullscreen.get() {
|
match fd.workspace.fullscreen.get() {
|
||||||
None => {
|
None => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue