diff --git a/src/ifs/wl_seat.rs b/src/ifs/wl_seat.rs index 57a57305..6f073be1 100644 --- a/src/ifs/wl_seat.rs +++ b/src/ifs/wl_seat.rs @@ -173,7 +173,7 @@ pub struct WlSeatGlobal { gesture_owner: GestureOwnerHolder, dropped_dnd: RefCell>, shortcuts: RefCell>>, - queue_link: Cell>>>, + queue_link: RefCell>>>, tree_changed_handler: Cell>>, output: CloneCell>, desired_known_cursor: Cell>, @@ -243,7 +243,7 @@ impl WlSeatGlobal { gesture_owner: Default::default(), dropped_dnd: RefCell::new(None), shortcuts: Default::default(), - queue_link: Cell::new(None), + queue_link: Default::default(), tree_changed_handler: Cell::new(None), output: CloneCell::new(state.dummy_output.get().unwrap()), desired_known_cursor: Cell::new(None), @@ -495,8 +495,12 @@ impl WlSeatGlobal { } pub fn mark_last_active(self: &Rc) { - self.queue_link - .set(Some(self.state.seat_queue.add_last(self.clone()))); + let link = &mut *self.queue_link.borrow_mut(); + if let Some(link) = link { + self.state.seat_queue.add_last_existing(link) + } else { + *link = Some(self.state.seat_queue.add_last(self.clone())) + } } pub fn disable_pointer_constraint(&self) { @@ -1084,7 +1088,7 @@ impl WlSeatGlobal { self.pointer_owner.clear(); self.kb_owner.clear(); *self.dropped_dnd.borrow_mut() = None; - self.queue_link.set(None); + self.queue_link.take(); self.tree_changed_handler.set(None); self.output.set(self.state.dummy_output.get().unwrap()); self.constraint.take();