diff --git a/crates/bevy_winit/src/winit_windows.rs b/crates/bevy_winit/src/winit_windows.rs index 29455c24c907d..5d803c944b2bc 100644 --- a/crates/bevy_winit/src/winit_windows.rs +++ b/crates/bevy_winit/src/winit_windows.rs @@ -2,7 +2,8 @@ use crate::converters::convert_cursor_grab_mode; use bevy_math::{DVec2, IVec2}; use bevy_utils::HashMap; use bevy_window::{ - MonitorSelection, RawHandleWrapper, Window, WindowDescriptor, WindowId, WindowMode, + CursorGrabMode, MonitorSelection, RawHandleWrapper, Window, WindowDescriptor, WindowId, + WindowMode, }; use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; use winit::{ @@ -161,11 +162,14 @@ impl WinitWindows { } } - match winit_window - .set_cursor_grab(convert_cursor_grab_mode(window_descriptor.cursor_grab_mode)) - { - Ok(_) | Err(winit::error::ExternalError::NotSupported(_)) => {} - Err(err) => Err(err).unwrap(), + // Do not set the grab mode on window creation if it's none, this can fail on mobile + if window_descriptor.cursor_grab_mode != CursorGrabMode::None { + match winit_window + .set_cursor_grab(convert_cursor_grab_mode(window_descriptor.cursor_grab_mode)) + { + Ok(_) | Err(winit::error::ExternalError::NotSupported(_)) => {} + Err(err) => Err(err).unwrap(), + } } winit_window.set_cursor_visible(window_descriptor.cursor_visible);