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();  |