diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-23 13:57:56 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-02-23 14:01:32 +0400 |
| commit | 2317021a7c4a7296606533d38f1fdce96826f7dc (patch) | |
| tree | 10ff4760e21b9379853065f3472ae75d3986f183 /src/layout | |
| parent | af6485cd8c85665b15ef8d2c812da17604ca4e32 (diff) | |
| download | niri-2317021a7c4a7296606533d38f1fdce96826f7dc.tar.gz niri-2317021a7c4a7296606533d38f1fdce96826f7dc.tar.bz2 niri-2317021a7c4a7296606533d38f1fdce96826f7dc.zip | |
Implement explicit unmapped window state tracking
Diffstat (limited to 'src/layout')
| -rw-r--r-- | src/layout/mod.rs | 40 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 20 |
2 files changed, 28 insertions, 32 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index edc0d9de..c7239a2b 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -531,15 +531,10 @@ impl<W: LayoutElement> Layout<W> { pub fn add_window( &mut self, window: W, - width: Option<Option<ColumnWidth>>, + width: Option<ColumnWidth>, is_full_width: bool, ) -> Option<&Output> { - let width = match width { - Some(Some(width)) => Some(width), - Some(None) => None, - None => self.options.default_width, - } - .unwrap_or_else(|| ColumnWidth::Fixed(window.size().w)); + let width = width.unwrap_or_else(|| ColumnWidth::Fixed(window.size().w)); match &mut self.monitor_set { MonitorSet::Normal { @@ -587,15 +582,10 @@ impl<W: LayoutElement> Layout<W> { &mut self, right_of: &W, window: W, - width: Option<Option<ColumnWidth>>, + width: Option<ColumnWidth>, is_full_width: bool, ) -> Option<&Output> { - let width = match width { - Some(Some(width)) => Some(width), - Some(None) => None, - None => self.options.default_width, - } - .unwrap_or_else(|| ColumnWidth::Fixed(window.size().w)); + let width = width.unwrap_or_else(|| ColumnWidth::Fixed(window.size().w)); match &mut self.monitor_set { MonitorSet::Normal { monitors, .. } => { @@ -623,15 +613,10 @@ impl<W: LayoutElement> Layout<W> { &mut self, output: &Output, window: W, - width: Option<Option<ColumnWidth>>, + width: Option<ColumnWidth>, is_full_width: bool, ) { - let width = match width { - Some(Some(width)) => Some(width), - Some(None) => None, - None => self.options.default_width, - } - .unwrap_or_else(|| ColumnWidth::Fixed(window.size().w)); + let width = width.unwrap_or_else(|| ColumnWidth::Fixed(window.size().w)); let MonitorSet::Normal { monitors, @@ -931,6 +916,19 @@ impl<W: LayoutElement> Layout<W> { Some(&mut monitors[*active_monitor_idx]) } + pub fn active_monitor_ref(&self) -> Option<&Monitor<W>> { + let MonitorSet::Normal { + monitors, + active_monitor_idx, + .. + } = &self.monitor_set + else { + return None; + }; + + Some(&monitors[*active_monitor_idx]) + } + pub fn monitor_for_output(&self, output: &Output) -> Option<&Monitor<W>> { let MonitorSet::Normal { monitors, .. } = &self.monitor_set else { return None; diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index b9016098..79889ef2 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -322,17 +322,19 @@ impl<W: LayoutElement> Workspace<W> { )) } - pub fn new_window_size( + pub fn resolve_default_width( &self, default_width: Option<Option<ColumnWidth>>, - ) -> Size<i32, Logical> { - let default_width = match default_width { + ) -> Option<ColumnWidth> { + match default_width { Some(Some(width)) => Some(width), Some(None) => None, None => self.options.default_width, - }; + } + } - let width = if let Some(width) = default_width { + pub fn new_window_size(&self, width: Option<ColumnWidth>) -> Size<i32, Logical> { + let width = if let Some(width) = width { let mut width = width.resolve(&self.options, self.working_area.size.w); if !self.options.border.off { width -= self.options.border.width as i32 * 2; @@ -350,11 +352,7 @@ impl<W: LayoutElement> Workspace<W> { Size::from((width, max(height, 1))) } - pub fn configure_new_window( - &self, - window: &Window, - default_width: Option<Option<ColumnWidth>>, - ) { + pub fn configure_new_window(&self, window: &Window, width: Option<ColumnWidth>) { if let Some(output) = self.output.as_ref() { set_preferred_scale_transform(window, output); } @@ -363,7 +361,7 @@ impl<W: LayoutElement> Workspace<W> { if state.states.contains(xdg_toplevel::State::Fullscreen) { state.size = Some(self.view_size); } else { - state.size = Some(self.new_window_size(default_width)); + state.size = Some(self.new_window_size(width)); } state.bounds = Some(self.toplevel_bounds()); |
