Fix "selection_changed" called twice

This commit is contained in:
volzhs 2017-12-18 22:12:57 +09:00
parent e96c40f94a
commit 59564f267c
2 changed files with 13 additions and 1 deletions

View File

@ -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;
}

View File

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