Add workspaces_for_output helper function

This commit is contained in:
Ian Douglas Scott 2025-01-24 15:30:15 -08:00
parent 88b35e3027
commit ba52d69421
2 changed files with 13 additions and 6 deletions

View file

@ -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<Item = &Workspace> + 'a {
self.workspaces
.iter()
.filter(|w| w.outputs.contains(output))
}
fn toplevel_for_handle_mut(
&mut self,
handle: &ZcosmicToplevelHandleV1,

View file

@ -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()),