Fix set_cursor_grab on Linux. Closes #714 (#717)

The glutin/winit update in #700 changed set_cursor_grab from a bool to
an enum, but always used CursorGrabMode::Locked, which is only available
on macOS. Conditionally compile to use CursorGrabMode::Confined otherwise.
Fixes #714 and fixes #713 

* set_cursor_grab failed with NotSupported(NotSupportedError) on Linux
Patch from https://github.com/iceiix/stevenarella/issues/714

* cargo fmt

Co-authored-by: inferno <inferrna@gmail.com>
This commit is contained in:
iceiix 2022-08-28 09:30:56 -07:00 committed by GitHub
parent bbbe58a112
commit fe8d8ece9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 9 deletions

View File

@ -630,6 +630,11 @@ fn handle_window_event<T>(
event: winit::event::Event<T>,
) -> bool {
use winit::event::*;
let cursor_grab_mode = if cfg!(target_os = "macos") {
winit::window::CursorGrabMode::Locked
} else {
winit::window::CursorGrabMode::Confined
};
match event {
Event::MainEventsCleared => return true,
Event::DeviceEvent {
@ -659,9 +664,7 @@ fn handle_window_event<T>(
use std::f64::consts::PI;
if game.focused {
window
.set_cursor_grab(winit::window::CursorGrabMode::Locked)
.unwrap();
window.set_cursor_grab(cursor_grab_mode).unwrap();
window.set_cursor_visible(false);
if let Some(player) = game.server.player {
let rotation = game
@ -719,9 +722,7 @@ fn handle_window_event<T>(
&& !game.screen_sys.is_current_closable()
{
game.focused = true;
window
.set_cursor_grab(winit::window::CursorGrabMode::Locked)
.unwrap();
window.set_cursor_grab(cursor_grab_mode).unwrap();
window.set_cursor_visible(false);
} else if !game.focused {
#[cfg(not(target_arch = "wasm32"))]
@ -783,9 +784,7 @@ fn handle_window_event<T>(
screen::SettingsMenu::new(game.vars.clone(), true),
));
} else if game.screen_sys.is_current_closable() {
window
.set_cursor_grab(winit::window::CursorGrabMode::Locked)
.unwrap();
window.set_cursor_grab(cursor_grab_mode).unwrap();
window.set_cursor_visible(false);
game.focused = true;
game.screen_sys.pop_screen();