srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates/config/src/engine/window.rs
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2024-08-22 16:06:00 +0200
committersrdusr <[email protected]>2024-08-22 16:06:00 +0200
commit78da614d67c09e197dffc1cebb1c5ce2357c7128 (patch)
treea39694108f7d1192276a0ea8956e458dc2595d79 /crates/config/src/engine/window.rs
parent8d94ca5d77d6e2a189d299b8b88a461ba2e621c6 (diff)
downloadsrdwm-78da614d67c09e197dffc1cebb1c5ce2357c7128.tar.gz
srdwm-78da614d67c09e197dffc1cebb1c5ce2357c7128.zip
Add per-window resize-margin override (Hyprland's extend_border_grab_area)
MISSING.md had listed this as needing to touch srdwm_core::window:: hit_test's signature at every call site, including the honest-stub Windows/macOS backends - overstated on closer inspection: that shared function already takes a plain resize_margin: i32 parameter, agnostic to where the value comes from. The only real change needed was reading Window.resize_margin.unwrap_or(wm-wide default) instead of always the WM-wide value, at the single call site inside WindowManager::hit_test in core - no backend touched at all. Window.resize_margin: Option<i32>, WindowRuleActions.resize_margin to match, applied in add_window/reapply_rules_if_pending the same way opacity already is. Settable via a rule action or srd.window.set_resize_margin(n) on the focused window.
Diffstat (limited to 'crates/config/src/engine/window.rs')
-rw-r--r--crates/config/src/engine/window.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/crates/config/src/engine/window.rs b/crates/config/src/engine/window.rs
index 6193f81..a7e6bf3 100644
--- a/crates/config/src/engine/window.rs
+++ b/crates/config/src/engine/window.rs
@@ -153,6 +153,20 @@ impl Engine {
})?)
}
+ pub(super) fn fn_window_set_resize_margin(&self) -> Result<mlua::Function<'_>> {
+ let state = self.state.clone();
+ Ok(self.lua.create_function(move |_, margin: i32| {
+ let wm = state.borrow().wm.clone();
+ let mut wm = wm.borrow_mut();
+ if let Some(id) = wm.focused_id() {
+ if let Some(w) = wm.window_mut(id) {
+ w.resize_margin = Some(margin);
+ }
+ }
+ Ok(())
+ })?)
+ }
+
pub(super) fn fn_window_set_floating(&self) -> Result<mlua::Function<'_>> {
let state = self.state.clone();
Ok(self.lua.create_function(move |_, floating: bool| {