aboutsummaryrefslogtreecommitdiff
path: root/src/layout/floating.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-12-27 09:58:22 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-12-30 20:12:37 +0300
commit6fba4c371e7868f8d581cf3d49d611cdbb590ad4 (patch)
tree801c85e1ff6df4c9cdb9bcc916e91de70710a512 /src/layout/floating.rs
parent27911431dbfb8ad5e17ea295a9ae69847577260f (diff)
downloadniri-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.rs23
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)]