diff --git a/src/backends/metal/present.rs b/src/backends/metal/present.rs index 3c47749d..6d556858 100644 --- a/src/backends/metal/present.rs +++ b/src/backends/metal/present.rs @@ -174,7 +174,7 @@ impl MetalConnector { self.latch_cursor(&node)?; let cursor_programming = self.compute_cursor_programming(); let latched = self.latch(&node); - node.schedule.latched(); + node.latched(); if cursor_programming.is_none() && latched.is_none() { return Ok(()); diff --git a/src/state.rs b/src/state.rs index aabc6b8b..8a70ed39 100644 --- a/src/state.rs +++ b/src/state.rs @@ -912,6 +912,7 @@ impl State { output.global.persistent.scale.get(), render_hw_cursor, )?; + output.latched(); output.perform_screencopies(tex, !render_hw_cursor, 0, 0, None); rr.dispatch_frame_requests(self.now_msec()); Ok(sync_file) diff --git a/src/tree/output.rs b/src/tree/output.rs index 98bc6d6f..25f58c03 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -106,6 +106,13 @@ pub async fn output_render_data(state: Rc) { } impl OutputNode { + pub fn latched(&self) { + self.schedule.latched(); + for listener in self.latch_event.iter() { + listener.after_latch(); + } + } + pub fn update_exclusive_zones(self: &Rc) { let mut exclusive = ExclusiveSize::default(); for layer in &self.layers { @@ -153,9 +160,6 @@ impl OutputNode { y_off: i32, size: Option<(i32, i32)>, ) { - for listener in self.latch_event.iter() { - listener.after_latch(); - } if let Some(workspace) = self.workspace.get() { if !workspace.may_capture.get() { return;