Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use InputMap actions consistently across all LineEdit's that filter an underlying Tree or ItemList. #96400

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions editor/animation_track_editor.cpp
Original file line number Diff line number Diff line change
@@ -7178,24 +7178,6 @@ void AnimationTrackEditor::_pick_track_select_recursive(TreeItem *p_item, const
}
}

void AnimationTrackEditor::_pick_track_filter_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;

if (k.is_valid()) {
switch (k->get_keycode()) {
case Key::UP:
case Key::DOWN:
case Key::PAGEUP:
case Key::PAGEDOWN: {
pick_track->get_scene_tree()->get_scene_tree()->gui_input(k);
pick_track->get_filter_line_edit()->accept_event();
} break;
default:
break;
}
}
}

AnimationTrackEditor::AnimationTrackEditor() {
main_panel = memnew(PanelContainer);
main_panel->set_focus_mode(FOCUS_ALL); // Allow panel to have focus so that shortcuts work as expected.
@@ -7413,11 +7395,9 @@ AnimationTrackEditor::AnimationTrackEditor() {

pick_track = memnew(SceneTreeDialog);
add_child(pick_track);
pick_track->register_text_enter(pick_track->get_filter_line_edit());
pick_track->set_title(TTR("Pick a node to animate:"));
pick_track->connect("selected", callable_mp(this, &AnimationTrackEditor::_new_track_node_selected));
pick_track->get_filter_line_edit()->connect(SceneStringName(text_changed), callable_mp(this, &AnimationTrackEditor::_pick_track_filter_text_changed));
pick_track->get_filter_line_edit()->connect(SceneStringName(gui_input), callable_mp(this, &AnimationTrackEditor::_pick_track_filter_input));

prop_selector = memnew(PropertySelector);
add_child(prop_selector);
1 change: 0 additions & 1 deletion editor/animation_track_editor.h
Original file line number Diff line number Diff line change
@@ -649,7 +649,6 @@ class AnimationTrackEditor : public VBoxContainer {

void _pick_track_filter_text_changed(const String &p_newtext);
void _pick_track_select_recursive(TreeItem *p_item, const String &p_filter, Vector<Node *> &p_select_candidates);
void _pick_track_filter_input(const Ref<InputEvent> &p_ie);

double snap_unit;
void _update_snap_unit();
33 changes: 13 additions & 20 deletions editor/create_dialog.cpp
Original file line number Diff line number Diff line change
@@ -425,26 +425,19 @@ void CreateDialog::_text_changed(const String &p_newtext) {
_update_search();
}

void CreateDialog::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid() && k->is_pressed()) {
switch (k->get_keycode()) {
case Key::UP:
case Key::DOWN:
case Key::PAGEUP:
case Key::PAGEDOWN: {
search_options->gui_input(k);
search_box->accept_event();
} break;
case Key::SPACE: {
TreeItem *ti = search_options->get_selected();
if (ti) {
ti->set_collapsed(!ti->is_collapsed());
}
search_box->accept_event();
} break;
default:
break;
void CreateDialog::_sbox_input(const Ref<InputEvent> &p_event) {
// Redirect navigational key events to the tree.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
search_options->gui_input(key);
search_box->accept_event();
} else if (key->is_action_pressed("ui_select", true)) {
TreeItem *ti = search_options->get_selected();
if (ti) {
ti->set_collapsed(!ti->is_collapsed());
}
search_box->accept_event();
}
}
}
2 changes: 1 addition & 1 deletion editor/create_dialog.h
Original file line number Diff line number Diff line change
@@ -77,7 +77,7 @@ class CreateDialog : public ConfirmationDialog {
void _fill_type_list();
void _cleanup();

void _sbox_input(const Ref<InputEvent> &p_ie);
void _sbox_input(const Ref<InputEvent> &p_event);
void _text_changed(const String &p_newtext);
void select_type(const String &p_type, bool p_center_on_item = true);
void _item_selected();
19 changes: 7 additions & 12 deletions editor/editor_command_palette.cpp
Original file line number Diff line number Diff line change
@@ -183,18 +183,13 @@ void EditorCommandPalette::_notification(int p_what) {
}
}

void EditorCommandPalette::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid()) {
switch (k->get_keycode()) {
case Key::UP:
case Key::DOWN:
case Key::PAGEUP:
case Key::PAGEDOWN: {
search_options->gui_input(k);
} break;
default:
break;
void EditorCommandPalette::_sbox_input(const Ref<InputEvent> &p_event) {
// Redirect navigational key events to the tree.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
search_options->gui_input(key);
command_search_box->accept_event();
}
}
}
2 changes: 1 addition & 1 deletion editor/editor_command_palette.h
Original file line number Diff line number Diff line change
@@ -80,7 +80,7 @@ class EditorCommandPalette : public ConfirmationDialog {

void _update_command_search(const String &search_text);
float _score_path(const String &p_search, const String &p_path);
void _sbox_input(const Ref<InputEvent> &p_ie);
void _sbox_input(const Ref<InputEvent> &p_event);
void _confirmed();
void _add_command(String p_command_name, String p_key_name, Callable p_binded_action, String p_shortcut_text = "None");
void _save_history() const;
15 changes: 4 additions & 11 deletions editor/editor_help_search.cpp
Original file line number Diff line number Diff line change
@@ -169,19 +169,12 @@ void EditorHelpSearch::_update_results() {
}

void EditorHelpSearch::_search_box_gui_input(const Ref<InputEvent> &p_event) {
// Redirect up and down navigational key events to the results list.
// Redirect navigational key events to the tree.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
switch (key->get_keycode()) {
case Key::UP:
case Key::DOWN:
case Key::PAGEUP:
case Key::PAGEDOWN: {
results_tree->gui_input(key);
search_box->accept_event();
} break;
default:
break;
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
results_tree->gui_input(key);
search_box->accept_event();
}
}
}
52 changes: 23 additions & 29 deletions editor/editor_quick_open.cpp
Original file line number Diff line number Diff line change
@@ -202,36 +202,30 @@ void EditorQuickOpen::_text_changed(const String &p_newtext) {
_update_search();
}

void EditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid()) {
switch (k->get_keycode()) {
case Key::UP:
case Key::DOWN:
case Key::PAGEUP:
case Key::PAGEDOWN: {
search_options->gui_input(k);
search_box->accept_event();

if (allow_multi_select) {
TreeItem *root = search_options->get_root();
if (!root->get_first_child()) {
break;
}

TreeItem *current = search_options->get_selected();
TreeItem *item = search_options->get_next_selected(root);
while (item) {
item->deselect(0);
item = search_options->get_next_selected(item);
}

current->select(0);
current->set_as_cursor(0);
void EditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_event) {
// Redirect navigational key events to the tree.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
search_options->gui_input(key);
search_box->accept_event();

if (allow_multi_select) {
TreeItem *root = search_options->get_root();
if (!root->get_first_child()) {
return;
}
} break;
default:
break;

TreeItem *current = search_options->get_selected();
TreeItem *item = search_options->get_next_selected(root);
while (item) {
item->deselect(0);
item = search_options->get_next_selected(item);
}

current->select(0);
current->set_as_cursor(0);
}
}
}
}
2 changes: 1 addition & 1 deletion editor/editor_quick_open.h
Original file line number Diff line number Diff line change
@@ -69,7 +69,7 @@ class EditorQuickOpen : public ConfirmationDialog {
virtual void cancel_pressed() override;
void _cleanup();

void _sbox_input(const Ref<InputEvent> &p_ie);
void _sbox_input(const Ref<InputEvent> &p_event);
void _text_changed(const String &p_newtext);

protected:
15 changes: 15 additions & 0 deletions editor/gui/scene_tree_editor.cpp
Original file line number Diff line number Diff line change
@@ -1744,6 +1744,17 @@ void SceneTreeDialog::_filter_changed(const String &p_filter) {
tree->set_filter(p_filter);
}

void SceneTreeDialog::_on_filter_gui_input(const Ref<InputEvent> &p_event) {
// Redirect navigational key events to the tree.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
tree->get_scene_tree()->gui_input(key);
filter->accept_event();
}
}
}

void SceneTreeDialog::_bind_methods() {
ClassDB::bind_method("_cancel", &SceneTreeDialog::_cancel);

@@ -1764,6 +1775,10 @@ SceneTreeDialog::SceneTreeDialog() {
filter->set_clear_button_enabled(true);
filter->add_theme_constant_override("minimum_character_width", 0);
filter->connect(SceneStringName(text_changed), callable_mp(this, &SceneTreeDialog::_filter_changed));
filter->connect(SceneStringName(gui_input), callable_mp(this, &SceneTreeDialog::_on_filter_gui_input));

register_text_enter(filter);

filter_hbc->add_child(filter);

// Add 'Show All' button to HBoxContainer next to the filter, visible only when valid_types is defined.
1 change: 1 addition & 0 deletions editor/gui/scene_tree_editor.h
Original file line number Diff line number Diff line change
@@ -195,6 +195,7 @@ class SceneTreeDialog : public ConfirmationDialog {
void _cancel();
void _selected_changed();
void _filter_changed(const String &p_filter);
void _on_filter_gui_input(const Ref<InputEvent> &p_event);
void _show_all_nodes_changed(bool p_button_pressed);

protected:
14 changes: 8 additions & 6 deletions editor/plugins/script_editor_plugin.cpp
Original file line number Diff line number Diff line change
@@ -358,12 +358,14 @@ void ScriptEditorQuickOpen::_text_changed(const String &p_newtext) {
_update_search();
}

void ScriptEditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;

if (k.is_valid() && (k->get_keycode() == Key::UP || k->get_keycode() == Key::DOWN || k->get_keycode() == Key::PAGEUP || k->get_keycode() == Key::PAGEDOWN)) {
search_options->gui_input(k);
search_box->accept_event();
void ScriptEditorQuickOpen::_sbox_input(const Ref<InputEvent> &p_event) {
// Redirect navigational key events to the tree.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
search_options->gui_input(key);
search_box->accept_event();
}
}
}

2 changes: 1 addition & 1 deletion editor/plugins/script_editor_plugin.h
Original file line number Diff line number Diff line change
@@ -131,7 +131,7 @@ class ScriptEditorQuickOpen : public ConfirmationDialog {

void _update_search();

void _sbox_input(const Ref<InputEvent> &p_ie);
void _sbox_input(const Ref<InputEvent> &p_event);
Vector<String> functions;

void _confirmed();
20 changes: 7 additions & 13 deletions editor/plugins/theme_editor_plugin.cpp
Original file line number Diff line number Diff line change
@@ -2174,19 +2174,13 @@ void ThemeTypeDialog::_add_type_filter_cbk(const String &p_value) {
_update_add_type_options(p_value);
}

void ThemeTypeDialog::_type_filter_input(const Ref<InputEvent> &p_ie) {
Ref<InputEventKey> k = p_ie;
if (k.is_valid() && k->is_pressed()) {
switch (k->get_keycode()) {
case Key::UP:
case Key::DOWN:
case Key::PAGEUP:
case Key::PAGEDOWN: {
add_type_options->gui_input(k);
add_type_filter->accept_event();
} break;
default:
break;
void ThemeTypeDialog::_type_filter_input(const Ref<InputEvent> &p_event) {
// Redirect navigational key events to the item list.
Ref<InputEventKey> key = p_event;
if (key.is_valid()) {
if (key->is_action("ui_up", true) || key->is_action("ui_down", true) || key->is_action("ui_page_up") || key->is_action("ui_page_down")) {
add_type_options->gui_input(key);
add_type_filter->accept_event();
}
}
}
2 changes: 1 addition & 1 deletion editor/plugins/theme_editor_plugin.h
Original file line number Diff line number Diff line change
@@ -303,7 +303,7 @@ class ThemeTypeDialog : public ConfirmationDialog {
void _update_add_type_options(const String &p_filter = "");

void _add_type_filter_cbk(const String &p_value);
void _type_filter_input(const Ref<InputEvent> &p_ie);
void _type_filter_input(const Ref<InputEvent> &p_event);
void _add_type_options_cbk(int p_index);
void _add_type_dialog_entered(const String &p_value);
void _add_type_dialog_activated(int p_index);
Loading