diff --git a/src/cursor.rs b/src/cursor.rs index a9759b47..04c245ab 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -60,6 +60,7 @@ pub trait Cursor { fn set_output(&self, output: &Rc) { let _ = output; } + fn handle_set(self: Rc) {} fn handle_unset(&self) {} fn tick(&self) {} fn needs_tick(&self) -> bool { diff --git a/src/ifs/wl_seat.rs b/src/ifs/wl_seat.rs index 3ed55acb..1da67a81 100644 --- a/src/ifs/wl_seat.rs +++ b/src/ifs/wl_seat.rs @@ -879,6 +879,7 @@ impl WlSeatGlobal { old.handle_unset(); } if let Some(cursor) = cursor.as_ref() { + cursor.clone().handle_set(); cursor.set_output(&self.output.get()); } self.cursor.set(cursor.clone()); diff --git a/src/ifs/wl_surface.rs b/src/ifs/wl_surface.rs index 93dd8081..ef1e76af 100644 --- a/src/ifs/wl_surface.rs +++ b/src/ifs/wl_surface.rs @@ -620,7 +620,6 @@ impl WlSurface { let cursor = Rc::new(CursorSurface::new(seat, self)); track!(self.client, cursor); cursor.handle_buffer_change(); - self.cursors.insert(seat.id(), cursor.clone()); Ok(cursor) } diff --git a/src/ifs/wl_surface/cursor.rs b/src/ifs/wl_surface/cursor.rs index 79580eff..79efa74e 100644 --- a/src/ifs/wl_surface/cursor.rs +++ b/src/ifs/wl_surface/cursor.rs @@ -123,6 +123,10 @@ impl Cursor for CursorSurface { self.surface.set_output(output); } + fn handle_set(self: Rc) { + self.surface.cursors.insert(self.seat.id(), self.clone()); + } + fn handle_unset(&self) { self.surface.cursors.remove(&self.seat.id()); }