From b08d13cc41deb7a53bb6b21596c55eba1fab9db3 Mon Sep 17 00:00:00 2001 From: Infiland Date: Thu, 23 Apr 2026 22:15:33 +0200 Subject: [PATCH] Fix stale pressed state after focus changes Release pressed input state whenever app or embedder focus changes so editor hover tooltips are not blocked by stale keyboard input while preserving the unfocused joypad behavior in Input. --- scene/debugger/scene_debugger.cpp | 4 +--- scene/main/scene_tree.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/scene/debugger/scene_debugger.cpp b/scene/debugger/scene_debugger.cpp index d725282c73..11d55a0d4f 100644 --- a/scene/debugger/scene_debugger.cpp +++ b/scene/debugger/scene_debugger.cpp @@ -513,9 +513,7 @@ Error SceneDebugger::_msg_report_window_focused(const Array &p_args) { bool focused = p_args[0]; Input::get_singleton()->embedder_focused = focused; - if (Input::get_singleton()->_should_ignore_joypad_events()) { - Input::get_singleton()->release_pressed_events(); - } + Input::get_singleton()->release_pressed_events(); return OK; } diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index d1c0ef42bd..03674fa09b 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -932,9 +932,10 @@ void SceneTree::_notification(int p_notification) { if (Input::get_singleton()) { Input::get_singleton()->application_focused = p_notification == NOTIFICATION_APPLICATION_FOCUS_IN; - if (Input::get_singleton()->_should_ignore_joypad_events()) { - Input::get_singleton()->release_pressed_events(); - } + // `release_pressed_events()` already preserves joypad state when the + // unfocused joypad setting is disabled, but keyboard state still needs + // to be released after focus loss. + Input::get_singleton()->release_pressed_events(); } // Pass these to nodes, since they are mirrored.