shell: Unify mapping windows into stacks logic

This commit is contained in:
Victoria Brekenfeld 2024-01-08 18:09:43 +00:00 committed by Victoria Brekenfeld
parent c719b6bb3d
commit 835dbe45f3
5 changed files with 43 additions and 56 deletions

View file

@ -98,7 +98,7 @@ lazy_static::lazy_static! {
]).unwrap();
}
pub fn should_be_floating(window: &CosmicSurface) -> bool {
pub fn is_dialog(window: &CosmicSurface) -> bool {
// Check "window type"
match window {
CosmicSurface::Wayland(window) => {
@ -136,6 +136,10 @@ pub fn should_be_floating(window: &CosmicSurface) -> bool {
return true;
}
false
}
pub fn has_floating_exception(window: &CosmicSurface) -> bool {
// else take a look at our exceptions
let appid_matches = EXCEPTIONS_APPID.matches(&window.app_id());
let title_matches = EXCEPTIONS_TITLE.matches(&window.title());

View file

@ -367,11 +367,10 @@ impl TilingLayout {
window: CosmicMapped,
focus_stack: Option<impl Iterator<Item = &'a CosmicMapped> + 'a>,
direction: Option<Direction>,
add_to_stack: bool,
) {
window.output_enter(&self.output, window.bbox());
window.set_bounds(self.output.geometry().size.as_logical());
self.map_internal(window, focus_stack, direction, add_to_stack);
self.map_internal(window, focus_stack, direction);
}
pub fn map_internal<'a>(
@ -379,21 +378,13 @@ impl TilingLayout {
window: impl Into<CosmicMapped>,
focus_stack: Option<impl Iterator<Item = &'a CosmicMapped> + 'a>,
direction: Option<Direction>,
add_to_stack: bool,
) {
let gaps = self.gaps();
let mut tree = self.queue.trees.back().unwrap().0.copy_clone();
let last_active = focus_stack
.and_then(|focus_stack| TilingLayout::last_active_window(&mut tree, focus_stack));
TilingLayout::map_to_tree(
&mut tree,
window,
&self.output,
last_active,
direction,
add_to_stack,
);
TilingLayout::map_to_tree(&mut tree, window, &self.output, last_active, direction);
let blocker = TilingLayout::update_positions(&self.output, &mut tree, gaps);
self.queue.push_tree(tree, ANIMATION_DURATION, blocker);
}
@ -404,7 +395,6 @@ impl TilingLayout {
output: &Output,
node: Option<(NodeId, CosmicMapped)>,
direction: Option<Direction>,
add_to_stack: bool,
) {
let window = window.into();
let new_window = Node::new(Data::Mapped {
@ -434,16 +424,7 @@ impl TilingLayout {
tree.insert(new_window, InsertBehavior::AsRoot).unwrap()
}
} else {
if let Some((ref node_id, mut last_active_window)) = node {
if add_to_stack && window.is_window() && last_active_window.is_stack() {
let surface = window.active_window();
last_active_window
.stack_ref_mut()
.unwrap()
.add_window(surface, None);
return;
}
if let Some((ref node_id, _)) = node {
let orientation = {
let window_size = tree.get(node_id).unwrap().data().geometry().size;
if window_size.w > window_size.h {
@ -543,7 +524,7 @@ impl TilingLayout {
}
mapped.set_tiled(true);
other.map(mapped.clone(), Some(focus_stack), None, true);
other.map(mapped.clone(), Some(focus_stack), None);
return Some(KeyboardFocusTarget::Element(mapped));
}
None => {
@ -1974,7 +1955,6 @@ impl TilingLayout {
&self.output,
Some(current_node),
None,
false,
);
let node = window.tiling_node_id.lock().unwrap().clone().unwrap();
@ -2505,14 +2485,7 @@ impl TilingLayout {
}
}
_ => {
TilingLayout::map_to_tree(
&mut tree,
window.clone(),
&self.output,
None,
None,
false,
);
TilingLayout::map_to_tree(&mut tree, window.clone(), &self.output, None, None);
window
}
};