diff --git a/src/wayland/core/surface.rs b/src/wayland/core/surface.rs index 27b7fce..173579c 100644 --- a/src/wayland/core/surface.rs +++ b/src/wayland/core/surface.rs @@ -48,7 +48,7 @@ pub struct SurfaceState { pub geometry: Option, pub min_size: Option>, pub max_size: Option>, - frame_callbacks: Registry, + frame_callbacks: Vec>, } impl Default for SurfaceState { fn default() -> Self { @@ -58,7 +58,7 @@ impl Default for SurfaceState { geometry: None, min_size: None, max_size: None, - frame_callbacks: Registry::new(), + frame_callbacks: Vec::new(), } } } @@ -180,7 +180,7 @@ impl Surface { } #[tracing::instrument(level = "debug", skip_all)] pub fn frame_event(&self) { - for callback in self.current_state().frame_callbacks.take_valid_contents() { + for callback in self.state.lock().current.frame_callbacks.drain(..) { let _ = self.message_sink.send(Message::Frame(callback)); } } @@ -258,7 +258,7 @@ impl WlSurface for Surface { callback_id: ObjectId, ) -> Result<()> { let callback = client.insert(callback_id, Callback(callback_id)); - self.state.lock().pending.frame_callbacks.add_raw(&callback); + self.state.lock().pending.frame_callbacks.push(callback); Ok(()) } diff --git a/src/wayland/util.rs b/src/wayland/util.rs index 5a15d8a..b551fcf 100644 --- a/src/wayland/util.rs +++ b/src/wayland/util.rs @@ -48,7 +48,7 @@ impl ClientExt for Client { #[derive(Debug, Default)] pub struct DoubleBuffer { - current: State, + pub current: State, pub pending: State, } impl DoubleBuffer {