From 0dd208961e9b6d3d6185f752273f358fbc424b17 Mon Sep 17 00:00:00 2001 From: daxpedda Date: Tue, 26 Dec 2023 14:07:07 +0100 Subject: [PATCH] MacOS: check if cursor changed before applying --- src/platform_impl/macos/view.rs | 4 ++++ src/platform_impl/macos/window.rs | 23 ++++++++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index cc0e8fbed6..e1a86e36e9 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -841,6 +841,10 @@ impl WinitView { .unwrap_or_default() } + pub(super) fn cursor_icon(&self) -> Id { + self.ivars().cursor_state.borrow().cursor.clone() + } + pub(super) fn set_cursor_icon(&self, icon: Id) { let mut cursor_state = self.ivars().cursor_state.borrow_mut(); cursor_state.cursor = icon; diff --git a/src/platform_impl/macos/window.rs b/src/platform_impl/macos/window.rs index 7d06b7b790..f1b51bc01f 100644 --- a/src/platform_impl/macos/window.rs +++ b/src/platform_impl/macos/window.rs @@ -798,18 +798,19 @@ impl WinitWindow { } pub fn set_cursor(&self, cursor: Cursor) { - match cursor { - Cursor::Icon(icon) => { - let view = self.view(); - view.set_cursor_icon(cursor_from_icon(icon)); - self.invalidateCursorRectsForView(&view); - } - Cursor::Custom(cursor) => { - let view = self.view(); - view.set_cursor_icon(cursor.inner.0.clone()); - self.invalidateCursorRectsForView(&view); - } + let view = self.view(); + + let cursor = match cursor { + Cursor::Icon(icon) => cursor_from_icon(icon), + Cursor::Custom(cursor) => cursor.inner.0, + }; + + if view.cursor_icon() == cursor { + return; } + + view.set_cursor_icon(cursor); + self.invalidateCursorRectsForView(&view); } #[inline]