diff options
-rw-r--r-- | editor/editor_data.cpp | 10 | ||||
-rw-r--r-- | editor/editor_data.h | 4 |
2 files changed, 13 insertions, 1 deletions
diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 4acee1363c..c12a112fa4 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -880,6 +880,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")); } @@ -923,7 +924,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() { @@ -947,6 +956,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 2c95c3feea..3bc0e6e75c 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -210,9 +210,10 @@ class EditorSelection : public Object { GDCLASS(EditorSelection, Object); -public: +private: Map<Node *, Object *> selection; + bool emitted; bool changed; bool nl_changed; @@ -224,6 +225,7 @@ public: void _update_nl(); Array _get_selected_nodes(); Array _get_transformable_selected_nodes(); + void _emit_change(); protected: static void _bind_methods(); |