mirror of https://github.com/godotengine/godot
Add support for search shortcut to all docks
This commit is contained in:
parent
0bcc0e92b3
commit
97a77c5193
|
|
@ -1203,15 +1203,24 @@ void ConnectionsDock::_slot_menu_about_to_popup() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionsDock::_tree_gui_input(const Ref<InputEvent> &p_event) {
|
void ConnectionsDock::_tree_gui_input(const Ref<InputEvent> &p_event) {
|
||||||
// Handle Delete press.
|
const Ref<InputEventKey> &key = p_event;
|
||||||
if (ED_IS_SHORTCUT("connections_editor/disconnect", p_event)) {
|
|
||||||
TreeItem *item = tree->get_selected();
|
if (key.is_valid() && key->is_pressed() && !key->is_echo()) {
|
||||||
if (item && _get_item_type(*item) == TREE_ITEM_TYPE_CONNECTION) {
|
if (ED_IS_SHORTCUT("connections_editor/disconnect", p_event)) {
|
||||||
Connection connection = item->get_metadata(0);
|
TreeItem *item = tree->get_selected();
|
||||||
_disconnect(connection);
|
if (item && _get_item_type(*item) == TREE_ITEM_TYPE_CONNECTION) {
|
||||||
update_tree();
|
Connection connection = item->get_metadata(0);
|
||||||
|
_disconnect(connection);
|
||||||
|
update_tree();
|
||||||
|
|
||||||
|
// Stop the Delete input from propagating elsewhere.
|
||||||
|
accept_event();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (ED_IS_SHORTCUT("editor/open_search", p_event)) {
|
||||||
|
search_box->grab_focus();
|
||||||
|
search_box->select_all();
|
||||||
|
|
||||||
// Stop the Delete input from propagating elsewhere.
|
|
||||||
accept_event();
|
accept_event();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1219,42 +1228,41 @@ void ConnectionsDock::_tree_gui_input(const Ref<InputEvent> &p_event) {
|
||||||
|
|
||||||
// Handle RMB press.
|
// Handle RMB press.
|
||||||
const Ref<InputEventMouseButton> &mb_event = p_event;
|
const Ref<InputEventMouseButton> &mb_event = p_event;
|
||||||
if (mb_event.is_null() || !mb_event->is_pressed() || mb_event->get_button_index() != MouseButton::RIGHT) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TreeItem *item = tree->get_item_at_position(mb_event->get_position());
|
if (mb_event.is_valid() && mb_event->is_pressed() && mb_event->get_button_index() == MouseButton::RIGHT) {
|
||||||
if (!item) {
|
TreeItem *item = tree->get_item_at_position(mb_event->get_position());
|
||||||
return;
|
if (!item) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (item->is_selectable(0)) {
|
if (item->is_selectable(0)) {
|
||||||
// Update selection now, before `about_to_popup` signal. Needed for SIGNAL and CONNECTION context menus.
|
// Update selection now, before `about_to_popup` signal. Needed for SIGNAL and CONNECTION context menus.
|
||||||
tree->set_selected(item);
|
tree->set_selected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2 screen_position = tree->get_screen_position() + mb_event->get_position();
|
Vector2 screen_position = tree->get_screen_position() + mb_event->get_position();
|
||||||
|
|
||||||
switch (_get_item_type(*item)) {
|
switch (_get_item_type(*item)) {
|
||||||
case TREE_ITEM_TYPE_ROOT:
|
case TREE_ITEM_TYPE_ROOT:
|
||||||
break;
|
break;
|
||||||
case TREE_ITEM_TYPE_CLASS:
|
case TREE_ITEM_TYPE_CLASS:
|
||||||
class_menu_doc_class_name = item->get_metadata(0);
|
class_menu_doc_class_name = item->get_metadata(0);
|
||||||
class_menu->set_position(screen_position);
|
class_menu->set_position(screen_position);
|
||||||
class_menu->reset_size();
|
class_menu->reset_size();
|
||||||
class_menu->popup();
|
class_menu->popup();
|
||||||
accept_event(); // Don't collapse item.
|
accept_event(); // Don't collapse item.
|
||||||
break;
|
break;
|
||||||
case TREE_ITEM_TYPE_SIGNAL:
|
case TREE_ITEM_TYPE_SIGNAL:
|
||||||
signal_menu->set_position(screen_position);
|
signal_menu->set_position(screen_position);
|
||||||
signal_menu->reset_size();
|
signal_menu->reset_size();
|
||||||
signal_menu->popup();
|
signal_menu->popup();
|
||||||
break;
|
break;
|
||||||
case TREE_ITEM_TYPE_CONNECTION:
|
case TREE_ITEM_TYPE_CONNECTION:
|
||||||
slot_menu->set_position(screen_position);
|
slot_menu->set_position(screen_position);
|
||||||
slot_menu->reset_size();
|
slot_menu->reset_size();
|
||||||
slot_menu->popup();
|
slot_menu->popup();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -783,6 +783,9 @@ void GroupsEditor::_groups_gui_input(Ref<InputEvent> p_event) {
|
||||||
_menu_id_pressed(DELETE_GROUP);
|
_menu_id_pressed(DELETE_GROUP);
|
||||||
} else if (ED_IS_SHORTCUT("groups_editor/rename", p_event)) {
|
} else if (ED_IS_SHORTCUT("groups_editor/rename", p_event)) {
|
||||||
_menu_id_pressed(RENAME_GROUP);
|
_menu_id_pressed(RENAME_GROUP);
|
||||||
|
} else if (ED_IS_SHORTCUT("editor/open_search", p_event)) {
|
||||||
|
filter->grab_focus();
|
||||||
|
filter->select_all();
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -614,6 +614,26 @@ void InspectorDock::apply_script_properties(Object *p_object) {
|
||||||
stored_properties.clear();
|
stored_properties.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InspectorDock::shortcut_input(const Ref<InputEvent> &p_event) {
|
||||||
|
ERR_FAIL_COND(p_event.is_null());
|
||||||
|
|
||||||
|
Ref<InputEventKey> key = p_event;
|
||||||
|
|
||||||
|
if (key.is_null() || !key->is_pressed() || key->is_echo()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_visible() || !inspector->get_rect().has_point(inspector->get_local_mouse_position())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ED_IS_SHORTCUT("editor/open_search", p_event)) {
|
||||||
|
search->grab_focus();
|
||||||
|
search->select_all();
|
||||||
|
accept_event();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
InspectorDock::InspectorDock(EditorData &p_editor_data) {
|
InspectorDock::InspectorDock(EditorData &p_editor_data) {
|
||||||
singleton = this;
|
singleton = this;
|
||||||
set_name("Inspector");
|
set_name("Inspector");
|
||||||
|
|
@ -770,6 +790,8 @@ InspectorDock::InspectorDock(EditorData &p_editor_data) {
|
||||||
inspector->set_use_filter(true); // TODO: check me
|
inspector->set_use_filter(true); // TODO: check me
|
||||||
|
|
||||||
inspector->connect("resource_selected", callable_mp(this, &InspectorDock::_resource_selected));
|
inspector->connect("resource_selected", callable_mp(this, &InspectorDock::_resource_selected));
|
||||||
|
|
||||||
|
set_process_shortcut_input(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
InspectorDock::~InspectorDock() {
|
InspectorDock::~InspectorDock() {
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,8 @@ class InspectorDock : public VBoxContainer {
|
||||||
void _select_history(int p_idx);
|
void _select_history(int p_idx);
|
||||||
void _prepare_history();
|
void _prepare_history();
|
||||||
|
|
||||||
|
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static InspectorDock *singleton;
|
static InspectorDock *singleton;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,20 @@ void SceneTreeDock::shortcut_input(const Ref<InputEvent> &p_event) {
|
||||||
accept_event();
|
accept_event();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SceneTreeDock::_scene_tree_gui_input(Ref<InputEvent> p_event) {
|
||||||
|
Ref<InputEventKey> key = p_event;
|
||||||
|
|
||||||
|
if (key.is_null() || !key->is_pressed() || key->is_echo()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ED_IS_SHORTCUT("editor/open_search", p_event)) {
|
||||||
|
filter->grab_focus();
|
||||||
|
filter->select_all();
|
||||||
|
accept_event();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SceneTreeDock::instantiate(const String &p_file) {
|
void SceneTreeDock::instantiate(const String &p_file) {
|
||||||
Vector<String> scenes;
|
Vector<String> scenes;
|
||||||
scenes.push_back(p_file);
|
scenes.push_back(p_file);
|
||||||
|
|
@ -4226,6 +4240,7 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec
|
||||||
scene_tree->connect("script_dropped", callable_mp(this, &SceneTreeDock::_script_dropped));
|
scene_tree->connect("script_dropped", callable_mp(this, &SceneTreeDock::_script_dropped));
|
||||||
scene_tree->connect("nodes_dragged", callable_mp(this, &SceneTreeDock::_nodes_drag_begin));
|
scene_tree->connect("nodes_dragged", callable_mp(this, &SceneTreeDock::_nodes_drag_begin));
|
||||||
|
|
||||||
|
scene_tree->get_scene_tree()->connect("gui_input", callable_mp(this, &SceneTreeDock::_scene_tree_gui_input));
|
||||||
scene_tree->get_scene_tree()->connect("item_icon_double_clicked", callable_mp(this, &SceneTreeDock::_focus_node));
|
scene_tree->get_scene_tree()->connect("item_icon_double_clicked", callable_mp(this, &SceneTreeDock::_focus_node));
|
||||||
|
|
||||||
editor_selection->connect("selection_changed", callable_mp(this, &SceneTreeDock::_selection_changed));
|
editor_selection->connect("selection_changed", callable_mp(this, &SceneTreeDock::_selection_changed));
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,7 @@ class SceneTreeDock : public VBoxContainer {
|
||||||
void _nodes_drag_begin();
|
void _nodes_drag_begin();
|
||||||
virtual void input(const Ref<InputEvent> &p_event) override;
|
virtual void input(const Ref<InputEvent> &p_event) override;
|
||||||
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
|
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
|
||||||
|
void _scene_tree_gui_input(Ref<InputEvent> p_event);
|
||||||
|
|
||||||
void _new_scene_from(String p_file);
|
void _new_scene_from(String p_file);
|
||||||
void _set_node_owner_recursive(Node *p_node, Node *p_owner, const HashMap<const Node *, Node *> &p_inverse_duplimap);
|
void _set_node_owner_recursive(Node *p_node, Node *p_owner, const HashMap<const Node *, Node *> &p_inverse_duplimap);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue