srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/core/src')
-rw-r--r--crates/core/src/manager/mod.rs5
-rw-r--r--crates/core/src/manager/workspaces.rs7
2 files changed, 11 insertions, 1 deletions
diff --git a/crates/core/src/manager/mod.rs b/crates/core/src/manager/mod.rs
index 91df887..609b87f 100644
--- a/crates/core/src/manager/mod.rs
+++ b/crates/core/src/manager/mod.rs
@@ -41,6 +41,11 @@ pub struct WindowManager {
focused: Option<WindowId>,
monitors: Vec<Monitor>,
workspaces: Vec<Workspace>,
+ /// One flat value shared by every monitor - not per-output. Unlike
+ /// Hyprland, srdwm has no notion of an independent workspace set per
+ /// monitor; switching workspace changes what's visible on every screen
+ /// at once. See `visible_windows`'s doc comment for the filter this
+ /// actually drives.
current_workspace: WorkspaceId,
/// Whichever workspace was current immediately before the current one
/// became current - see `switch_workspace`'s doc comment.
diff --git a/crates/core/src/manager/workspaces.rs b/crates/core/src/manager/workspaces.rs
index 485ced0..6ffb21b 100644
--- a/crates/core/src/manager/workspaces.rs
+++ b/crates/core/src/manager/workspaces.rs
@@ -75,7 +75,12 @@ impl WindowManager {
}
/// Windows that should currently be shown to the user: those on the
- /// active workspace of whichever monitor they're assigned to, and not minimized.
+ /// current workspace, and not minimized.
+ ///
+ /// `current_workspace` is a single value shared by every monitor --
+ /// srdwm does not have Hyprland-style independent per-monitor
+ /// workspaces, so switching workspace changes what's shown on every
+ /// screen at once. `w.monitor` plays no part in this filter at all.
pub fn visible_windows(&self) -> impl Iterator<Item = &Window> {
self.windows.values().filter(|w| w.workspace == self.current_workspace && !w.minimized)
}