diff --git a/src/systems.rs b/src/systems.rs index a8f4b40f3..205929bfe 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -349,6 +349,7 @@ pub fn process_output( #[cfg(feature = "manage_clipboard")] mut egui_clipboard: ResMut, mut windows: Option>, mut event: EventWriter, + #[cfg(windows)] mut last_cursor_icon: Local>, ) { for (window_id, ctx) in egui_context.ctx.iter_mut() { let full_output = ctx.end_frame(); @@ -372,10 +373,23 @@ pub fn process_output( if let Some(ref mut windows) = windows { if let Some(window) = windows.get_mut(*window_id) { - window.set_cursor_icon( - egui_to_winit_cursor_icon(platform_output.cursor_icon) - .unwrap_or(bevy::window::CursorIcon::Default), - ); + let mut set_icon = || { + window.set_cursor_icon( + egui_to_winit_cursor_icon(platform_output.cursor_icon) + .unwrap_or(bevy::window::CursorIcon::Default), + ) + }; + + #[cfg(windows)] + { + let last_cursor_icon = last_cursor_icon.entry(*window_id).or_default(); + if *last_cursor_icon != platform_output.cursor_icon { + set_icon(); + *last_cursor_icon = platform_output.cursor_icon; + } + } + #[cfg(not(windows))] + set_icon(); } }