aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-12-09 09:32:00 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-12-09 13:25:52 +0300
commit40fa82275cc092d313a9a60d01a2b4e3e8e3f7d3 (patch)
tree112ef4fa5d1ad51e781316553971c936b67a06e4 /src
parent9824321fc9499b9987f344308a5c5c69cb9b7a77 (diff)
downloadniri-40fa82275cc092d313a9a60d01a2b4e3e8e3f7d3.tar.gz
niri-40fa82275cc092d313a9a60d01a2b4e3e8e3f7d3.tar.bz2
niri-40fa82275cc092d313a9a60d01a2b4e3e8e3f7d3.zip
Extract rules.apply_{min,max}_size()
Diffstat (limited to 'src')
-rw-r--r--src/window/mapped.rs31
-rw-r--r--src/window/mod.rs37
2 files changed, 41 insertions, 27 deletions
diff --git a/src/window/mapped.rs b/src/window/mapped.rs
index b1213c8f..299e0acc 100644
--- a/src/window/mapped.rs
+++ b/src/window/mapped.rs
@@ -1,5 +1,4 @@
use std::cell::{Cell, RefCell};
-use std::cmp::{max, min};
use std::time::Duration;
use niri_config::{Color, CornerRadius, GradientInterpolation, WindowRule};
@@ -535,43 +534,21 @@ impl LayoutElement for Mapped {
}
fn min_size(&self) -> Size<i32, Logical> {
- let mut size = with_states(self.toplevel().wl_surface(), |state| {
+ let min_size = with_states(self.toplevel().wl_surface(), |state| {
let mut guard = state.cached_state.get::<SurfaceCachedState>();
guard.current().min_size
});
- if let Some(x) = self.rules.min_width {
- size.w = max(size.w, i32::from(x));
- }
- if let Some(x) = self.rules.min_height {
- size.h = max(size.h, i32::from(x));
- }
-
- size
+ self.rules.apply_min_size(min_size)
}
fn max_size(&self) -> Size<i32, Logical> {
- let mut size = with_states(self.toplevel().wl_surface(), |state| {
+ let max_size = with_states(self.toplevel().wl_surface(), |state| {
let mut guard = state.cached_state.get::<SurfaceCachedState>();
guard.current().max_size
});
- if let Some(x) = self.rules.max_width {
- if size.w == 0 {
- size.w = i32::from(x);
- } else if x > 0 {
- size.w = min(size.w, i32::from(x));
- }
- }
- if let Some(x) = self.rules.max_height {
- if size.h == 0 {
- size.h = i32::from(x);
- } else if x > 0 {
- size.h = min(size.h, i32::from(x));
- }
- }
-
- size
+ self.rules.apply_max_size(max_size)
}
fn is_wl_surface(&self, wl_surface: &WlSurface) -> bool {
diff --git a/src/window/mod.rs b/src/window/mod.rs
index 45c1d125..98c26e7f 100644
--- a/src/window/mod.rs
+++ b/src/window/mod.rs
@@ -1,5 +1,8 @@
+use std::cmp::{max, min};
+
use niri_config::{BlockOutFrom, BorderRule, CornerRadius, Match, WindowRule};
use smithay::reexports::wayland_protocols::xdg::shell::server::xdg_toplevel;
+use smithay::utils::{Logical, Size};
use smithay::wayland::shell::xdg::{ToplevelSurface, XdgToplevelSurfaceRoleAttributes};
use crate::layout::scrolling::ColumnWidth;
@@ -236,6 +239,40 @@ impl ResolvedWindowRules {
resolved
}
+
+ pub fn apply_min_size(&self, min_size: Size<i32, Logical>) -> Size<i32, Logical> {
+ let mut size = min_size;
+
+ if let Some(x) = self.min_width {
+ size.w = max(size.w, i32::from(x));
+ }
+ if let Some(x) = self.min_height {
+ size.h = max(size.h, i32::from(x));
+ }
+
+ size
+ }
+
+ pub fn apply_max_size(&self, max_size: Size<i32, Logical>) -> Size<i32, Logical> {
+ let mut size = max_size;
+
+ if let Some(x) = self.max_width {
+ if size.w == 0 {
+ size.w = i32::from(x);
+ } else if x > 0 {
+ size.w = min(size.w, i32::from(x));
+ }
+ }
+ if let Some(x) = self.max_height {
+ if size.h == 0 {
+ size.h = i32::from(x);
+ } else if x > 0 {
+ size.h = min(size.h, i32::from(x));
+ }
+ }
+
+ size
+ }
}
fn window_matches(window: WindowRef, role: &XdgToplevelSurfaceRoleAttributes, m: &Match) -> bool {