From cf21d2689a6f277f5a8ec00ad6346ceee09fee27 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Wed, 20 Dec 2023 19:51:11 +0000 Subject: [PATCH] shell: Add new sticky_layer --- src/shell/mod.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/shell/mod.rs b/src/shell/mod.rs index 50e38c1e..cdd2992f 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -227,7 +227,8 @@ pub struct WorkspaceSet { tiling_enabled: bool, output: Output, theme: cosmic::Theme, - pub(crate) workspaces: Vec, + pub sticky_layer: FloatingLayout, + pub workspaces: Vec, } fn create_workspace( @@ -339,6 +340,7 @@ impl WorkspaceSet { }) .collect(), }; + let sticky_layer = FloatingLayout::new(theme.clone(), output); WorkspaceSet { previously_active: None, @@ -347,6 +349,7 @@ impl WorkspaceSet { idx, tiling_enabled, theme, + sticky_layer, workspaces, output: output.clone(), } @@ -380,6 +383,11 @@ impl WorkspaceSet { new_output: &Output, toplevel_info: &mut ToplevelInfoState, ) { + self.sticky_layer.set_output(new_output); + for window in self.sticky_layer.windows() { + toplevel_info.toplevel_leave_output(&window, &self.output); + toplevel_info.toplevel_enter_output(&window, &new_output); + } for workspace in &mut self.workspaces { workspace.set_output(new_output, toplevel_info); } @@ -394,6 +402,7 @@ impl WorkspaceSet { } else { self.workspaces[self.active].refresh(xdg_activation_state); } + self.sticky_layer.refresh(); } fn add_empty_workspace(&mut self, state: &mut WorkspaceUpdateGuard) { @@ -519,7 +528,7 @@ impl WorkspaceSet { #[derive(Debug)] pub struct Workspaces { - sets: IndexMap, + pub sets: IndexMap, backup_set: Option, amount: WorkspaceAmount, mode: WorkspaceMode, @@ -994,6 +1003,8 @@ impl Workspaces { pub fn set_theme(&mut self, theme: cosmic::Theme, xdg_activation_state: &XdgActivationState) { for (_, s) in &mut self.sets { s.theme = theme.clone(); + s.sticky_layer.theme = theme.clone(); + s.sticky_layer.refresh(); for mut w in &mut s.workspaces { w.tiling_layer.theme = theme.clone(); w.floating_layer.theme = theme.clone();