Focus EventListener when InputEventConfigurationDialog is opened.

This commit is contained in:
Eric M 2022-10-14 16:58:36 +10:00
parent fd4572cc45
commit 8678e4d34f
3 changed files with 17 additions and 4 deletions

View file

@ -59,8 +59,9 @@ void EventListenerLineEdit::gui_input(const Ref<InputEvent> &p_event) {
// First event will be an event which is used to focus this control - i.e. a mouse click, or a tab press. // First event will be an event which is used to focus this control - i.e. a mouse click, or a tab press.
// Ignore the first one so that clicking into the LineEdit does not override the current event. // Ignore the first one so that clicking into the LineEdit does not override the current event.
// Ignore is reset to true when the control is unfocused. // Ignore is reset to true when the control is unfocused.
if (ignore) { // This class also specially handles grab_focus() calls.
ignore = false; if (ignore_next_event) {
ignore_next_event = false;
return; return;
} }
@ -85,7 +86,7 @@ void EventListenerLineEdit::_on_focus() {
} }
void EventListenerLineEdit::_on_unfocus() { void EventListenerLineEdit::_on_unfocus() {
ignore = true; ignore_next_event = true;
set_placeholder(TTR("Filter by event...")); set_placeholder(TTR("Filter by event..."));
} }
@ -109,6 +110,12 @@ int EventListenerLineEdit::get_allowed_input_types() const {
return allowed_input_types; return allowed_input_types;
} }
void EventListenerLineEdit::grab_focus() {
// If we grab focus through code, we don't need to ignore the first event!
ignore_next_event = false;
Control::grab_focus();
}
void EventListenerLineEdit::_notification(int p_what) { void EventListenerLineEdit::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_TREE: { case NOTIFICATION_ENTER_TREE: {

View file

@ -44,7 +44,7 @@ class EventListenerLineEdit : public LineEdit {
GDCLASS(EventListenerLineEdit, LineEdit) GDCLASS(EventListenerLineEdit, LineEdit)
int allowed_input_types = INPUT_KEY | INPUT_MOUSE_BUTTON | INPUT_JOY_BUTTON | INPUT_JOY_MOTION; int allowed_input_types = INPUT_KEY | INPUT_MOUSE_BUTTON | INPUT_JOY_BUTTON | INPUT_JOY_MOTION;
bool ignore = true; bool ignore_next_event = true;
bool share_keycodes = false; bool share_keycodes = false;
Ref<InputEvent> event; Ref<InputEvent> event;
@ -67,6 +67,8 @@ public:
void set_allowed_input_types(int input_types); void set_allowed_input_types(int input_types);
int get_allowed_input_types() const; int get_allowed_input_types() const;
void grab_focus();
public: public:
EventListenerLineEdit(); EventListenerLineEdit();
}; };

View file

@ -533,6 +533,10 @@ String InputEventConfigurationDialog::_get_device_string(int p_device) const {
void InputEventConfigurationDialog::_notification(int p_what) { void InputEventConfigurationDialog::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_VISIBILITY_CHANGED: {
event_listener->grab_focus();
} break;
case NOTIFICATION_ENTER_TREE: case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: { case NOTIFICATION_THEME_CHANGED: {
input_list_search->set_right_icon(input_list_search->get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); input_list_search->set_right_icon(input_list_search->get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));