From ca82fa883beacd973cb86a8141c11a36f6256573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Mon, 31 Oct 2022 16:12:18 +0000 Subject: [PATCH] do not set cursor grab on window creation if not asked for (#6381) # Objective - Bevy main crashs on Safari mobile - On Safari mobile, calling winit_window.set_cursor_grab(true) fails as the API is not implemented (as there is no cursor on Safari mobile, the api doesn't make sense there). I don't know about other mobile browsers ## Solution - Do not call the api to release cursor grab on window creation, as the cursor is not grabbed anyway at this point - This is #3617 which was lost in #6218 --- crates/bevy_winit/src/winit_windows.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/bevy_winit/src/winit_windows.rs b/crates/bevy_winit/src/winit_windows.rs index 29455c24c9..5d803c944b 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);