From afe202295355efbd38c21be5051f959392730139 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Wed, 16 Jul 2025 21:36:45 +0200 Subject: [PATCH] tree: restack containing float when node is activated --- src/ifs/wl_seat/pointer_owner.rs | 1 + src/ifs/wl_seat/tablet/tool_owner.rs | 4 +++- src/ifs/wl_seat/touch_owner.rs | 1 + src/tree/float.rs | 10 ++++++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/ifs/wl_seat/pointer_owner.rs b/src/ifs/wl_seat/pointer_owner.rs index 4e2e3af4..792a7e5b 100644 --- a/src/ifs/wl_seat/pointer_owner.rs +++ b/src/ifs/wl_seat/pointer_owner.rs @@ -338,6 +338,7 @@ impl PointerOwner for SimplePointerOwner { node: pn.clone(), serial, })); + pn.node_restack(); pn.node_seat_state().add_pointer_grab(seat); seat.handle_node_button(pn, time_usec, button, state, serial); } diff --git a/src/ifs/wl_seat/tablet/tool_owner.rs b/src/ifs/wl_seat/tablet/tool_owner.rs index 833dd576..754a64cb 100644 --- a/src/ifs/wl_seat/tablet/tool_owner.rs +++ b/src/ifs/wl_seat/tablet/tool_owner.rs @@ -94,9 +94,11 @@ impl ToolOwner for DefaultToolOwner { if state == ToolButtonState::Released { return; } + let node = tool.node.get(); + node.node_restack(); let owner = Rc::new(GrabToolOwner { buttons: Default::default(), - node: tool.node.get(), + node, }); tool.tool_owner.owner.set(owner.clone()); owner.button(tool, time_usec, button, state); diff --git a/src/ifs/wl_seat/touch_owner.rs b/src/ifs/wl_seat/touch_owner.rs index 5d7a04a7..11756d2f 100644 --- a/src/ifs/wl_seat/touch_owner.rs +++ b/src/ifs/wl_seat/touch_owner.rs @@ -71,6 +71,7 @@ impl TouchOwner for DefaultTouchOwner { fn down(&self, seat: &Rc, time_usec: u64, id: i32, x: Fixed, y: Fixed) { let node = seat.state.node_at(x.round_down(), y.round_down()); node.node.node_seat_state().touch_begin(seat); + node.node.node_restack(); let owner = Rc::new(GrabTouchOwner { node: node.node, down_ids: Default::default(), diff --git a/src/tree/float.rs b/src/tree/float.rs index 8f1bd174..f712c045 100644 --- a/src/tree/float.rs +++ b/src/tree/float.rs @@ -988,3 +988,13 @@ impl PinnedNode for FloatNode { self.set_workspace_(workspace, false, update_visible); } } + +impl dyn Node { + pub fn node_restack(self: &Rc) { + if let Some(tl) = self.clone().node_toplevel() + && let Some(float) = tl.tl_data().float.get() + { + float.restack(); + } + } +}