1
0
Fork 0
forked from wry/wry

config: add resize action

This commit is contained in:
Julian Orth 2026-03-20 17:25:48 +01:00
parent 15c157b7a6
commit a1905ab971
14 changed files with 344 additions and 264 deletions

View file

@ -2623,6 +2623,18 @@ impl ConfigProxyHandler {
Ok(())
}
fn handle_window_resize(
&self,
window: Window,
dx1: i32,
dy1: i32,
dx2: i32,
dy2: i32,
) -> Result<(), CphError> {
self.get_window(window)?.tl_resize(dx1, dy1, dx2, dy2);
Ok(())
}
fn handle_window_exists(&self, window: Window) {
self.respond(Response::WindowExists {
exists: self.get_window(window).is_ok(),
@ -3381,6 +3393,15 @@ impl ConfigProxyHandler {
ClientMessage::CreateVirtualOutput { name } => self.handle_create_virtual_output(name),
ClientMessage::RemoveVirtualOutput { name } => self.handle_remove_virtual_output(name),
ClientMessage::CleanLogsOlderThan { time } => self.handle_clean_logs_older_than(time),
ClientMessage::WindowResize {
window,
dx1,
dy1,
dx2,
dy2,
} => self
.handle_window_resize(window, dx1, dy1, dx2, dy2)
.wrn("window_resize")?,
}
Ok(())
}

View file

@ -73,6 +73,7 @@ pub trait ToplevelNode: ToplevelNodeBase {
fn tl_set_float(&self, float: Option<&Rc<FloatNode>>);
fn tl_mark_ancestor_fullscreen(&self, fullscreen: bool);
fn tl_mark_fullscreen(&self, fullscreen: bool);
fn tl_resize(&self, dx1: i32, dy1: i32, dx2: i32, dy2: i32);
}
impl<T: ToplevelNodeBase> ToplevelNode for T {
@ -250,6 +251,18 @@ impl<T: ToplevelNodeBase> ToplevelNode for T {
self.tl_mark_ancestor_fullscreen(fullscreen);
self.tl_mark_fullscreen_ext();
}
fn tl_resize(&self, dx1: i32, dy1: i32, dx2: i32, dy2: i32) {
let Some(parent) = self.tl_data().parent.get() else {
return;
};
let pos = self.node_absolute_position();
let x1 = (dx1 != 0).then_some(pos.x1().saturating_add(dx1));
let y1 = (dy1 != 0).then_some(pos.y1().saturating_add(dy1));
let x2 = (dx2 != 0).then_some(pos.x2().saturating_add(dx2));
let y2 = (dy2 != 0).then_some(pos.y2().saturating_add(dy2));
parent.cnode_resize_child(self, x1, y1, x2, y2);
}
}
pub trait ToplevelNodeBase: Node {