From a863e8f7d68abe411f295c710cd7eac482742e80 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 4 Jun 2025 09:35:08 -0700 Subject: [PATCH] Helper methods on `CatpureFilter` for matching Could be prettier, but want some way to check this in multiple places. --- src/backend/mod.rs | 17 +++++++++++++++++ src/backend/wayland/mod.rs | 10 ++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 805c967..6884f76 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -44,6 +44,23 @@ pub struct CaptureFilter { pub toplevels_on_workspaces: Vec, } +impl CaptureFilter { + pub fn workspace_outputs_matches<'a>( + &self, + outputs: impl IntoIterator, + ) -> bool { + outputs + .into_iter() + .any(|o| self.workspaces_on_outputs.contains(o)) + } + + pub fn toplevel_matches(&self, info: &ToplevelInfo) -> bool { + info.workspace + .iter() + .any(|workspace| self.toplevels_on_workspaces.contains(workspace)) + } +} + #[derive(Clone, Debug)] pub struct CaptureImage { #[allow(dead_code)] diff --git a/src/backend/wayland/mod.rs b/src/backend/wayland/mod.rs index 2594bea..0f37405 100644 --- a/src/backend/wayland/mod.rs +++ b/src/backend/wayland/mod.rs @@ -182,11 +182,7 @@ impl AppData { .toplevels() .find(|info| info.foreign_toplevel == *toplevel); if let Some(info) = info { - info.workspace.iter().any(|workspace| { - self.capture_filter - .toplevels_on_workspaces - .contains(workspace) - }) + self.capture_filter.toplevel_matches(info) } else { false } @@ -197,9 +193,7 @@ impl AppData { .find(|g| g.workspaces.iter().any(|w| w == workspace)) .is_some_and(|group| { self.capture_filter - .workspaces_on_outputs - .iter() - .any(|o| group.outputs.contains(o)) + .workspace_outputs_matches(&group.outputs) }), CaptureSource::Output(_) => false, }