From 17d7e6a142500a80ba6628a32eca792c44bbbdb7 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 17 Oct 2016 03:57:32 +0200 Subject: Fix Keyboard Input Hangs when using modifiers Main input parsing loop only update actions for keyboard if the state has changed. `InputMap::event_is_action` now ignores keyboard modifiers if the event is not pressed. Clarify difference between `InputMap::action_has_event` and `InputMap::event_is_action` in docs. Fixes #6388. --- core/input_map.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'core/input_map.cpp') diff --git a/core/input_map.cpp b/core/input_map.cpp index 09cb7ce42..ad1403a64 100644 --- a/core/input_map.cpp +++ b/core/input_map.cpp @@ -106,7 +106,7 @@ List InputMap::get_actions() const { return actions; } -List::Element *InputMap::_find_event(List &p_list,const InputEvent& p_event) const { +List::Element *InputMap::_find_event(List &p_list,const InputEvent& p_event, bool p_mod_ignore=false) const { for (List::Element *E=p_list.front();E;E=E->next()) { @@ -122,7 +122,7 @@ List::Element *InputMap::_find_event(List &p_list,const case InputEvent::KEY: { - same=(e.key.scancode==p_event.key.scancode && e.key.mod == p_event.key.mod); + same=(e.key.scancode==p_event.key.scancode && (p_mod_ignore || e.key.mod == p_event.key.mod)); } break; case InputEvent::JOYSTICK_BUTTON: { @@ -229,7 +229,7 @@ bool InputMap::event_is_action(const InputEvent& p_event, const StringName& p_ac return p_event.action.action==E->get().id; } - return _find_event(E->get().inputs,p_event)!=NULL; + return _find_event(E->get().inputs,p_event,!p_event.is_pressed())!=NULL; } const Map& InputMap::get_action_map() const { -- cgit v1.2.3-70-g09d2