From cc56632c687ddb5cbde37f7469f80a4d65ea95ba Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Mon, 16 Feb 2026 13:40:08 +0100 Subject: [PATCH] cursor: merge set_sync_file/swap_buffer --- src/backend.rs | 3 +-- src/backends/metal/present.rs | 16 +++++++--------- src/backends/metal/video.rs | 11 +++-------- src/cursor_user.rs | 3 +-- 4 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/backend.rs b/src/backend.rs index 0b0eebdf..cf5490ce 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -183,8 +183,7 @@ pub trait HardwareCursorUpdate { fn set_enabled(&mut self, enabled: bool); fn get_buffer(&self) -> Rc; fn set_position(&mut self, x: i32, y: i32); - fn swap_buffer(&mut self); - fn set_sync_file(&mut self, sync_file: Option); + fn swap_buffer(&mut self, sync_file: Option); fn size(&self) -> (i32, i32); } diff --git a/src/backends/metal/present.rs b/src/backends/metal/present.rs index d6e162a7..08df0615 100644 --- a/src/backends/metal/present.rs +++ b/src/backends/metal/present.rs @@ -522,24 +522,22 @@ impl MetalConnector { let buffer_idx = ((connector_drm_state.cursor_fb_idx + 1) % buffers.len() as u64) as usize; let mut c = MetalHardwareCursorChange { cursor_enabled: self.cursor_enabled.get(), - cursor_swap_buffer: false, + cursor_swap_buffer: None, cursor_x: self.cursor_x.get(), cursor_y: self.cursor_y.get(), cursor_buffer: &buffers[buffer_idx], - sync_file: None, cursor_size: (self.dev.cursor_width as _, self.dev.cursor_height as _), }; self.state.present_hardware_cursor(node, &mut c); - if c.cursor_swap_buffer { - c.sync_file = c.cursor_buffer.copy_to_dev(cd, c.sync_file)?; - } - self.cursor_swap_buffer.set(c.cursor_swap_buffer); - if c.sync_file.is_some() { - self.cursor_sync_file.set(c.sync_file); + let swap_buffers = c.cursor_swap_buffer.is_some(); + self.cursor_swap_buffer.set(swap_buffers); + if let Some(sf) = c.cursor_swap_buffer.take() { + let sf = c.cursor_buffer.copy_to_dev(cd, sf)?; + self.cursor_sync_file.set(sf); } let mut cursor_changed = false; cursor_changed |= self.cursor_enabled.replace(c.cursor_enabled) != c.cursor_enabled; - cursor_changed |= c.cursor_swap_buffer; + cursor_changed |= swap_buffers; cursor_changed |= self.cursor_x.replace(c.cursor_x) != c.cursor_x; cursor_changed |= self.cursor_y.replace(c.cursor_y) != c.cursor_y; if cursor_changed { diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index f879dae5..0aa3bfb3 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -557,12 +557,11 @@ pub struct MetalHardwareCursor { } pub struct MetalHardwareCursorChange<'a> { - pub cursor_swap_buffer: bool, + pub cursor_swap_buffer: Option>, pub cursor_enabled: bool, pub cursor_x: i32, pub cursor_y: i32, pub cursor_buffer: &'a RenderBuffer, - pub sync_file: Option, pub cursor_size: (i32, i32), } @@ -596,12 +595,8 @@ impl HardwareCursorUpdate for MetalHardwareCursorChange<'_> { self.cursor_y = y; } - fn swap_buffer(&mut self) { - self.cursor_swap_buffer = true; - } - - fn set_sync_file(&mut self, sync_file: Option) { - self.sync_file = sync_file; + fn swap_buffer(&mut self, sync_file: Option) { + self.cursor_swap_buffer = Some(sync_file); } fn size(&self) -> (i32, i32) { diff --git a/src/cursor_user.rs b/src/cursor_user.rs index 19310269..b014728b 100644 --- a/src/cursor_user.rs +++ b/src/cursor_user.rs @@ -515,8 +515,7 @@ impl CursorUser { ); match res { Ok(sync_file) => { - hc.set_sync_file(sync_file); - hc.swap_buffer(); + hc.swap_buffer(sync_file); } Err(e) => { log::error!("Could not render hardware cursor: {}", ErrorFmt(e));