diff --git a/src/ifs/jay_pointer.rs b/src/ifs/jay_pointer.rs index 2da29169..c7e230fa 100644 --- a/src/ifs/jay_pointer.rs +++ b/src/ifs/jay_pointer.rs @@ -32,6 +32,9 @@ impl JayPointerRequestHandler for JayPointer { Some(c) => c, _ => return Err(JayPointerError::OutOfBounds), }; + if self.seat.pointer_node().and_then(|n| n.node_client_id()) != Some(self.client.id) { + self.seat.refresh_pointer_stack(); + } let pointer_node = match self.seat.pointer_node() { Some(n) => n, _ => { diff --git a/src/ifs/wl_seat.rs b/src/ifs/wl_seat.rs index ee692e4f..c37b8b2d 100644 --- a/src/ifs/wl_seat.rs +++ b/src/ifs/wl_seat.rs @@ -926,6 +926,11 @@ impl WlSeatGlobal { self.pointer_owner.select_workspace(self, selector); } + pub fn refresh_pointer_stack(self: &Rc) { + self.pointer_stack_modified.set(true); + self.apply_changes(); + } + pub fn set_focus_follows_mouse(&self, focus_follows_mouse: bool) { self.focus_follows_mouse.set(focus_follows_mouse); } diff --git a/src/ifs/wl_seat/pointer_owner.rs b/src/ifs/wl_seat/pointer_owner.rs index 6acadc8a..8ddda92d 100644 --- a/src/ifs/wl_seat/pointer_owner.rs +++ b/src/ifs/wl_seat/pointer_owner.rs @@ -183,11 +183,8 @@ impl PointerOwnerHolder { fn select_element(&self, seat: &Rc, usecase: impl SimplePointerOwnerUsecase) { self.revert_to_default(seat); - if let Some(node) = seat.pointer_stack.borrow().last() { - usecase.node_focus(seat, node); - } self.owner.set(Rc::new(SimplePointerOwner { usecase })); - seat.trigger_tree_changed(false); + seat.refresh_pointer_stack(); } pub fn select_toplevel(&self, seat: &Rc, selector: impl ToplevelSelector) {