From 231e7d18fb7055a64a170d7348dc760e9c513fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Fri, 23 Dec 2022 11:35:30 +0100 Subject: [PATCH] fallback on window creation for cursor grab mode --- crates/bevy_winit/src/winit_windows.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/bevy_winit/src/winit_windows.rs b/crates/bevy_winit/src/winit_windows.rs index 5967d08d9caa4..2fa96cf71abf2 100644 --- a/crates/bevy_winit/src/winit_windows.rs +++ b/crates/bevy_winit/src/winit_windows.rs @@ -1,6 +1,6 @@ use crate::converters::convert_cursor_grab_mode; use bevy_math::{DVec2, IVec2}; -use bevy_utils::HashMap; +use bevy_utils::{tracing::error, HashMap}; use bevy_window::{ CursorGrabMode, MonitorSelection, RawHandleWrapper, Window, WindowDescriptor, WindowId, WindowMode, @@ -165,15 +165,23 @@ impl WinitWindows { } } - // 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(), + match window_descriptor.cursor_grab_mode { + bevy_window::CursorGrabMode::None => { + // Do not set the grab mode on window creation if it's none, this can fail on mobile + Ok(()) } + bevy_window::CursorGrabMode::Confined => winit_window + .set_cursor_grab(convert_cursor_grab_mode(CursorGrabMode::Confined)) + .or_else(|_e| { + winit_window.set_cursor_grab(convert_cursor_grab_mode(CursorGrabMode::Locked)) + }), + bevy_window::CursorGrabMode::Locked => winit_window + .set_cursor_grab(convert_cursor_grab_mode(CursorGrabMode::Locked)) + .or_else(|_e| { + winit_window.set_cursor_grab(convert_cursor_grab_mode(CursorGrabMode::Confined)) + }), } + .unwrap_or_else(|e| error!("Unable to un/grab cursor: {}", e)); winit_window.set_cursor_visible(window_descriptor.cursor_visible);