Revert "Fix duplicate selection in SceneTree"

This reverts commit 7d20d78847.

# Conflicts:
#	editor/scene_tree_editor.cpp
This commit is contained in:
Silc 'Tokage' Renew 2021-07-23 17:34:21 +09:00
parent 515670351a
commit 32640edac7
2 changed files with 23 additions and 11 deletions

View file

@ -521,7 +521,7 @@ void SceneTreeEditor::_node_removed(Node *p_node) {
if (p_node == selected) { if (p_node == selected) {
selected = nullptr; selected = nullptr;
_emit_node_selected(); emit_signal("node_selected");
} }
} }
@ -615,6 +615,24 @@ void SceneTreeEditor::_tree_changed() {
pending_test_update = true; pending_test_update = true;
} }
void SceneTreeEditor::_selected_changed() {
TreeItem *s = tree->get_selected();
ERR_FAIL_COND(!s);
NodePath np = s->get_metadata(0);
Node *n = get_node(np);
if (n == selected) {
return;
}
selected = get_node(np);
blocked++;
emit_signal("node_selected");
blocked--;
}
void SceneTreeEditor::_deselect_items() { void SceneTreeEditor::_deselect_items() {
// Clear currently selected items in scene tree dock. // Clear currently selected items in scene tree dock.
if (editor_selection) { if (editor_selection) {
@ -623,12 +641,6 @@ void SceneTreeEditor::_deselect_items() {
} }
} }
void SceneTreeEditor::_emit_node_selected() {
blocked++;
emit_signal(SNAME("node_selected"));
blocked--;
}
void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_selected) { void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_selected) {
TreeItem *item = Object::cast_to<TreeItem>(p_object); TreeItem *item = Object::cast_to<TreeItem>(p_object);
ERR_FAIL_COND(!item); ERR_FAIL_COND(!item);
@ -655,7 +667,7 @@ void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_
// Selection changed to be single node, so emit "selected" (for single node) rather than "changed" (for multiple nodes) // Selection changed to be single node, so emit "selected" (for single node) rather than "changed" (for multiple nodes)
if (editor_selection->get_selected_nodes().size() == 1) { if (editor_selection->get_selected_nodes().size() == 1) {
selected = editor_selection->get_selected_node_list()[0]; selected = editor_selection->get_selected_node_list()[0];
_emit_node_selected(); emit_signal("node_selected");
} else { } else {
emit_signal(SNAME("node_changed")); emit_signal(SNAME("node_changed"));
} }
@ -747,7 +759,7 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) {
} }
if (p_emit_selected) { if (p_emit_selected) {
_emit_node_selected(); emit_signal("node_selected");
} }
} }
@ -1197,6 +1209,7 @@ SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_ope
tree->connect("empty_tree_rmb_selected", callable_mp(this, &SceneTreeEditor::_rmb_select)); tree->connect("empty_tree_rmb_selected", callable_mp(this, &SceneTreeEditor::_rmb_select));
} }
tree->connect("cell_selected", callable_mp(this, &SceneTreeEditor::_selected_changed));
tree->connect("item_edited", callable_mp(this, &SceneTreeEditor::_renamed), varray(), CONNECT_DEFERRED); tree->connect("item_edited", callable_mp(this, &SceneTreeEditor::_renamed), varray(), CONNECT_DEFERRED);
tree->connect("multi_selected", callable_mp(this, &SceneTreeEditor::_cell_multi_selected)); tree->connect("multi_selected", callable_mp(this, &SceneTreeEditor::_cell_multi_selected));
tree->connect("button_pressed", callable_mp(this, &SceneTreeEditor::_cell_button_pressed)); tree->connect("button_pressed", callable_mp(this, &SceneTreeEditor::_cell_button_pressed));

View file

@ -81,6 +81,7 @@ class SceneTreeEditor : public Control {
TreeItem *_find(TreeItem *p_node, const NodePath &p_path); TreeItem *_find(TreeItem *p_node, const NodePath &p_path);
void _notification(int p_what); void _notification(int p_what);
void _selected_changed();
void _deselect_items(); void _deselect_items();
void _rename_node(ObjectID p_node, const String &p_name); void _rename_node(ObjectID p_node, const String &p_name);
@ -132,8 +133,6 @@ class SceneTreeEditor : public Control {
Vector<StringName> valid_types; Vector<StringName> valid_types;
void _emit_node_selected();
public: public:
void set_filter(const String &p_filter); void set_filter(const String &p_filter);
String get_filter() const; String get_filter() const;