Browse Source

Fix "selection_changed" called twice

volzhs 7 years ago
parent
commit
59564f267c
2 changed files with 13 additions and 1 deletions
  1. 10 0
      editor/editor_data.cpp
  2. 3 1
      editor/editor_data.h

+ 10 - 0
editor/editor_data.cpp

@@ -871,6 +871,7 @@ void EditorSelection::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("remove_node", "node"), &EditorSelection::remove_node);
 	ClassDB::bind_method(D_METHOD("get_selected_nodes"), &EditorSelection::_get_selected_nodes);
 	ClassDB::bind_method(D_METHOD("get_transformable_selected_nodes"), &EditorSelection::_get_transformable_selected_nodes);
+	ClassDB::bind_method(D_METHOD("_emit_change"), &EditorSelection::_emit_change);
 	ADD_SIGNAL(MethodInfo("selection_changed"));
 }
 
@@ -914,7 +915,15 @@ void EditorSelection::update() {
 	if (!changed)
 		return;
 	changed = false;
+	if (!emitted) {
+		emitted = true;
+		call_deferred("_emit_change");
+	}
+}
+
+void EditorSelection::_emit_change() {
 	emit_signal("selection_changed");
+	emitted = false;
 }
 
 List<Node *> &EditorSelection::get_selected_node_list() {
@@ -938,6 +947,7 @@ void EditorSelection::clear() {
 }
 EditorSelection::EditorSelection() {
 
+	emitted = false;
 	changed = false;
 	nl_changed = false;
 }

+ 3 - 1
editor/editor_data.h

@@ -209,9 +209,10 @@ class EditorSelection : public Object {
 
 	GDCLASS(EditorSelection, Object);
 
-public:
+private:
 	Map<Node *, Object *> selection;
 
+	bool emitted;
 	bool changed;
 	bool nl_changed;
 
@@ -223,6 +224,7 @@ public:
 	void _update_nl();
 	Array _get_selected_nodes();
 	Array _get_transformable_selected_nodes();
+	void _emit_change();
 
 protected:
 	static void _bind_methods();