aboutsummaryrefslogtreecommitdiff
path: root/src/layout/workspace.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/workspace.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/workspace.rs')
-rw-r--r--src/layout/workspace.rs23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs
index 516e02fd..92900ff3 100644
--- a/src/layout/workspace.rs
+++ b/src/layout/workspace.rs
@@ -2,7 +2,7 @@ use std::cmp::max;
use std::rc::Rc;
use std::time::Duration;
-use niri_config::{OutputName, Workspace as WorkspaceConfig};
+use niri_config::{OutputName, PresetSize, Workspace as WorkspaceConfig};
use niri_ipc::SizeChange;
use smithay::backend::renderer::gles::GlesRenderer;
use smithay::desktop::{layer_map_for_output, Window};
@@ -715,15 +715,30 @@ impl<W: LayoutElement> Workspace<W> {
}
}
+ pub fn resolve_default_height(
+ &self,
+ default_height: Option<Option<PresetSize>>,
+ is_floating: bool,
+ ) -> Option<PresetSize> {
+ match default_height {
+ Some(Some(height)) => Some(height),
+ Some(None) => None,
+ None if is_floating => None,
+ // We don't have a global default at the moment.
+ None => None,
+ }
+ }
+
pub fn new_window_size(
&self,
width: Option<ColumnWidth>,
+ height: Option<PresetSize>,
is_floating: bool,
rules: &ResolvedWindowRules,
(min_size, max_size): (Size<i32, Logical>, Size<i32, Logical>),
) -> Size<i32, Logical> {
let mut size = if is_floating {
- self.floating.new_window_size(width, rules)
+ self.floating.new_window_size(width, height, rules)
} else {
self.scrolling.new_window_size(width, rules)
};
@@ -749,6 +764,7 @@ impl<W: LayoutElement> Workspace<W> {
&self,
window: &Window,
width: Option<ColumnWidth>,
+ height: Option<PresetSize>,
is_floating: bool,
rules: &ResolvedWindowRules,
) {
@@ -766,7 +782,8 @@ impl<W: LayoutElement> Workspace<W> {
if state.states.contains(xdg_toplevel::State::Fullscreen) {
state.size = Some(self.view_size.to_i32_round());
} else {
- let size = self.new_window_size(width, is_floating, rules, (min_size, max_size));
+ let size =
+ self.new_window_size(width, height, is_floating, rules, (min_size, max_size));
state.size = Some(size);
}