diff --git a/src/main.rs b/src/main.rs index 3ad8546..d312266 100644 --- a/src/main.rs +++ b/src/main.rs @@ -167,6 +167,16 @@ impl App { self.workspaces.iter_mut().find(|i| &i.handle == handle) } + // TODO iterate in order based on `coordinates` + fn workspaces_for_output<'a>( + &'a self, + output: &'a wl_output::WlOutput, + ) -> impl Iterator + 'a { + self.workspaces + .iter() + .filter(|w| w.outputs.contains(output)) + } + fn toplevel_for_handle_mut( &mut self, handle: &ZcosmicToplevelHandleV1, diff --git a/src/view/mod.rs b/src/view/mod.rs index 31da85c..da13662 100644 --- a/src/view/mod.rs +++ b/src/view/mod.rs @@ -57,9 +57,7 @@ pub(crate) fn layer_surface<'a>( } let layout = app.conf.workspace_config.workspace_layout; let sidebar = workspaces_sidebar( - app.workspaces - .iter() - .filter(|i| i.outputs.contains(&surface.output)), + app.workspaces_for_output(&surface.output), &surface.output, layout, drop_target, @@ -80,9 +78,8 @@ pub(crate) fn layer_surface<'a>( ); // TODO multiple active workspaces? Not currently supported by cosmic. let first_active_workspace = app - .workspaces - .iter() - .find(|i| i.outputs.contains(&surface.output) && i.is_active); + .workspaces_for_output(&surface.output) + .find(|w| w.is_active); let toplevels = if let Some(workspace) = first_active_workspace { toplevel_dnd_destination( DropTarget::OutputToplevels(workspace.handle.clone(), surface.output.clone()),