Skip to content

Commit 067d898

Browse files
committed
fix cursor grab issue (#7010)
# Objective - Set the cursor grab mode after the window is built, fix #7007, clean some conversion code. ## Solution - Set the cursor grab mode after the window is built.
1 parent 8dff914 commit 067d898

File tree

2 files changed

+8
-23
lines changed

2 files changed

+8
-23
lines changed

src/converters.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bevy_input::{
55
ButtonState,
66
};
77
use bevy_math::Vec2;
8-
use bevy_window::{CursorGrabMode, CursorIcon};
8+
use bevy_window::CursorIcon;
99

1010
pub fn convert_keyboard_input(keyboard_input: &winit::event::KeyboardInput) -> KeyboardInput {
1111
KeyboardInput {
@@ -266,12 +266,3 @@ pub fn convert_cursor_icon(cursor_icon: CursorIcon) -> winit::window::CursorIcon
266266
CursorIcon::RowResize => winit::window::CursorIcon::RowResize,
267267
}
268268
}
269-
270-
/// Map [`bevy_window::CursorGrabMode`] to [`winit::window::CursorGrabMode`].
271-
pub fn convert_cursor_grab_mode(mode: CursorGrabMode) -> winit::window::CursorGrabMode {
272-
match mode {
273-
CursorGrabMode::None => winit::window::CursorGrabMode::None,
274-
CursorGrabMode::Confined => winit::window::CursorGrabMode::Confined,
275-
CursorGrabMode::Locked => winit::window::CursorGrabMode::Locked,
276-
}
277-
}

src/winit_windows.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::converters::convert_cursor_grab_mode;
21
use bevy_math::{DVec2, IVec2};
32
use bevy_utils::HashMap;
43
use bevy_window::{
@@ -165,16 +164,6 @@ impl WinitWindows {
165164
}
166165
}
167166

168-
// Do not set the grab mode on window creation if it's none, this can fail on mobile
169-
if window_descriptor.cursor_grab_mode != CursorGrabMode::None {
170-
match winit_window
171-
.set_cursor_grab(convert_cursor_grab_mode(window_descriptor.cursor_grab_mode))
172-
{
173-
Ok(_) | Err(winit::error::ExternalError::NotSupported(_)) => {}
174-
Err(err) => Err(err).unwrap(),
175-
}
176-
}
177-
178167
winit_window.set_cursor_visible(window_descriptor.cursor_visible);
179168

180169
self.window_id_to_winit.insert(window_id, winit_window.id());
@@ -207,15 +196,20 @@ impl WinitWindows {
207196
display_handle: winit_window.raw_display_handle(),
208197
};
209198
self.windows.insert(winit_window.id(), winit_window);
210-
Window::new(
199+
let mut window = Window::new(
211200
window_id,
212201
window_descriptor,
213202
inner_size.width,
214203
inner_size.height,
215204
scale_factor,
216205
position,
217206
Some(raw_handle),
218-
)
207+
);
208+
// Do not set the grab mode on window creation if it's none, this can fail on mobile
209+
if window_descriptor.cursor_grab_mode != CursorGrabMode::None {
210+
window.set_cursor_grab_mode(window_descriptor.cursor_grab_mode);
211+
}
212+
window
219213
}
220214

221215
pub fn get_window(&self, id: WindowId) -> Option<&winit::window::Window> {

0 commit comments

Comments
 (0)