diff --git a/platform/web/display_server_web.cpp b/platform/web/display_server_web.cpp index 50f3dcc4237..06e8c71dff2 100644 --- a/platform/web/display_server_web.cpp +++ b/platform/web/display_server_web.cpp @@ -829,6 +829,12 @@ void DisplayServerWeb::gamepad_callback(int p_index, int p_connected, const char } void DisplayServerWeb::_gamepad_callback(int p_index, int p_connected, const String &p_id, const String &p_guid) { + if (p_connected) { + DisplayServerWeb::get_singleton()->gamepad_count += 1; + } else { + DisplayServerWeb::get_singleton()->gamepad_count -= 1; + } + Input *input = Input::get_singleton(); if (p_connected) { input->joy_connection_changed(p_index, true, p_id, p_guid); @@ -1432,8 +1438,11 @@ DisplayServer::VSyncMode DisplayServerWeb::window_get_vsync_mode(WindowID p_vsyn void DisplayServerWeb::process_events() { process_keys(); Input::get_singleton()->flush_buffered_events(); - if (godot_js_input_gamepad_sample() == OK) { - process_joypads(); + + if (gamepad_count > 0) { + if (godot_js_input_gamepad_sample() == OK) { + process_joypads(); + } } } diff --git a/platform/web/display_server_web.h b/platform/web/display_server_web.h index 7c5d09fd35e..759f14f1eb0 100644 --- a/platform/web/display_server_web.h +++ b/platform/web/display_server_web.h @@ -104,6 +104,8 @@ private: bool swap_cancel_ok = false; NativeMenu *native_menu = nullptr; + int gamepad_count = 0; + MouseMode mouse_mode_base = MOUSE_MODE_VISIBLE; MouseMode mouse_mode_override = MOUSE_MODE_VISIBLE; bool mouse_mode_override_enabled = false;