diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-12-27 09:58:22 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-12-30 20:12:37 +0300 |
| commit | 6fba4c371e7868f8d581cf3d49d611cdbb590ad4 (patch) | |
| tree | 801c85e1ff6df4c9cdb9bcc916e91de70710a512 /src/layout/floating.rs | |
| parent | 27911431dbfb8ad5e17ea295a9ae69847577260f (diff) | |
| download | niri-6fba4c371e7868f8d581cf3d49d611cdbb590ad4.tar.gz niri-6fba4c371e7868f8d581cf3d49d611cdbb590ad4.tar.bz2 niri-6fba4c371e7868f8d581cf3d49d611cdbb590ad4.zip | |
Implement default-window-height window rule
Only works for floats that aren't initially fullscreen atm.
Diffstat (limited to 'src/layout/floating.rs')
| -rw-r--r-- | src/layout/floating.rs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/layout/floating.rs b/src/layout/floating.rs index 08a74b37..a04c9b94 100644 --- a/src/layout/floating.rs +++ b/src/layout/floating.rs @@ -1102,9 +1102,14 @@ impl<W: LayoutElement> FloatingSpace<W> { width.resolve_no_gaps(&self.options, self.working_area.size.w) } + pub fn resolve_height(&self, height: PresetSize) -> ResolvedSize { + resolve_preset_size(height, self.working_area.size.h) + } + pub fn new_window_size( &self, width: Option<ColumnWidth>, + height: Option<PresetSize>, rules: &ResolvedWindowRules, ) -> Size<i32, Logical> { let border = rules.border.resolve_against(self.options.border); @@ -1125,7 +1130,23 @@ impl<W: LayoutElement> FloatingSpace<W> { 0 }; - Size::from((width, 0)) + let height = if let Some(height) = height { + let height = match self.resolve_height(height) { + ResolvedSize::Tile(mut size) => { + if !border.off { + size -= border.width.0 * 2.; + } + size + } + ResolvedSize::Window(size) => size, + }; + + max(1, height.floor() as i32) + } else { + 0 + }; + + Size::from((width, height)) } #[cfg(test)] |
