Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/bevy_winit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ bevy_android = { path = "../bevy_android", version = "0.18.0-dev", default-featu
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = { version = "0.2" }
web-sys = "0.3"
js-sys = "0.3"
# TODO: Assuming all wasm builds are for the browser. Require `no_std` support to break assumption.
bevy_app = { path = "../bevy_app", version = "0.18.0-dev", default-features = false, features = [
"web",
Expand Down
11 changes: 11 additions & 0 deletions crates/bevy_winit/src/winit_windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,17 @@ pub(crate) fn attempt_grab(
winit_window: &WinitWindow,
grab_mode: CursorGrabMode,
) -> Result<(), ExternalError> {
// Do not attempt to grab on web if unsupported (e.g. mobile)
#[cfg(target_arch = "wasm32")]
if !js_sys::Reflect::has(
web_sys::window().unwrap().document().unwrap().as_ref(),
&"exitPointerLock".into(),
)
.unwrap_or(false)
{
return Ok(());
}

let grab_result = match grab_mode {
CursorGrabMode::None => winit_window.set_cursor_grab(WinitCursorGrabMode::None),
CursorGrabMode::Confined => winit_window
Expand Down