diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2016-10-17 03:57:32 +0200 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2016-10-19 17:52:49 +0200 |
commit | 17d7e6a142500a80ba6628a32eca792c44bbbdb7 (patch) | |
tree | c10e5dd3c04c1db13a86bb800072b9a6aee39b44 /core/input_map.cpp | |
parent | c23e8797f1bec30defd1903cfeef0992cb1f1a89 (diff) | |
download | redot-engine-17d7e6a142500a80ba6628a32eca792c44bbbdb7.tar.gz |
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.
Diffstat (limited to 'core/input_map.cpp')
-rw-r--r-- | core/input_map.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/core/input_map.cpp b/core/input_map.cpp index 09cb7ce426..ad1403a64b 100644 --- a/core/input_map.cpp +++ b/core/input_map.cpp @@ -106,7 +106,7 @@ List<StringName> InputMap::get_actions() const { return actions; } -List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event) const { +List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event, bool p_mod_ignore=false) const { for (List<InputEvent>::Element *E=p_list.front();E;E=E->next()) { @@ -122,7 +122,7 @@ List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &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<StringName, InputMap::Action>& InputMap::get_action_map() const { |