From 59564f267ce4379282911007ef78ec8738f358e8 Mon Sep 17 00:00:00 2001 From: volzhs Date: Mon, 18 Dec 2017 22:12:57 +0900 Subject: [PATCH] Fix "selection_changed" called twice --- editor/editor_data.cpp | 10 ++++++++++ editor/editor_data.h | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 49d55e6305c..105244c28fa 100644 --- a/editor/editor_data.cpp +++ b/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 &EditorSelection::get_selected_node_list() { @@ -938,6 +947,7 @@ void EditorSelection::clear() { } EditorSelection::EditorSelection() { + emitted = false; changed = false; nl_changed = false; } diff --git a/editor/editor_data.h b/editor/editor_data.h index 33a4091a653..72b0c8e0f87 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -209,9 +209,10 @@ class EditorSelection : public Object { GDCLASS(EditorSelection, Object); -public: +private: Map 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();