diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 9a3174fb1a8..35cac65feb2 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -1567,7 +1567,7 @@ void EditorInspector::_clear() { void EditorInspector::refresh() { - if (refresh_countdown > 0) + if (refresh_countdown > 0 || changing) return; refresh_countdown = EditorSettings::get_singleton()->get("docks/property_editor/auto_refresh_interval"); } @@ -1768,9 +1768,7 @@ void EditorInspector::_edit_set(const String &p_name, const Variant &p_value, bo } undo_redo->add_do_method(this, "emit_signal", _prop_edited, p_name); undo_redo->add_undo_method(this, "emit_signal", _prop_edited, p_name); - changing++; undo_redo->commit_action(); - changing--; } if (editor_property_map.has(p_name)) { @@ -1780,9 +1778,17 @@ void EditorInspector::_edit_set(const String &p_name, const Variant &p_value, bo } } -void EditorInspector::_property_changed(const String &p_path, const Variant &p_value) { +void EditorInspector::_property_changed(const String &p_path, const Variant &p_value, bool changing) { + + // The "changing" variable must be true for properties that trigger events as typing occurs, + // like "text_changed" signal. eg: Text property of Label, Button, RichTextLabel, etc. + if (changing) + this->changing++; _edit_set(p_path, p_value, false, ""); + + if (changing) + this->changing--; } void EditorInspector::_property_changed_update_all(const String &p_path, const Variant &p_value) { @@ -1956,8 +1962,8 @@ void EditorInspector::_changed_callback(Object *p_changed, const char *p_prop) { void EditorInspector::_bind_methods() { + ClassDB::bind_method("_property_changed", &EditorInspector::_property_changed, DEFVAL(false)); ClassDB::bind_method("_multiple_properties_changed", &EditorInspector::_multiple_properties_changed); - ClassDB::bind_method("_property_changed", &EditorInspector::_property_changed); ClassDB::bind_method("_property_changed_update_all", &EditorInspector::_property_changed_update_all); ClassDB::bind_method("_edit_request_change", &EditorInspector::_edit_request_change); @@ -1969,6 +1975,7 @@ void EditorInspector::_bind_methods() { ClassDB::bind_method("_property_selected", &EditorInspector::_property_selected); ClassDB::bind_method("_resource_selected", &EditorInspector::_resource_selected); ClassDB::bind_method("_object_id_selected", &EditorInspector::_object_id_selected); + ClassDB::bind_method("refresh", &EditorInspector::refresh); ADD_SIGNAL(MethodInfo("property_keyed", PropertyInfo(Variant::STRING, "property"))); ADD_SIGNAL(MethodInfo("resource_selected", PropertyInfo(Variant::OBJECT, "res"), PropertyInfo(Variant::STRING, "prop"))); diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h index 2a88be656a1..383cb458ec7 100644 --- a/editor/editor_inspector.h +++ b/editor/editor_inspector.h @@ -245,7 +245,7 @@ class EditorInspector : public ScrollContainer { bool read_only; bool keying; - int refresh_countdown; + float refresh_countdown; bool update_tree_pending; StringName _prop_edited; StringName property_selected; @@ -256,7 +256,7 @@ class EditorInspector : public ScrollContainer { void _edit_set(const String &p_name, const Variant &p_value, bool p_refresh_all, const String &p_changed_field); - void _property_changed(const String &p_path, const Variant &p_value); + void _property_changed(const String &p_path, const Variant &p_value, bool changing = false); void _property_changed_update_all(const String &p_path, const Variant &p_value); void _multiple_properties_changed(Vector p_paths, Array p_values); void _property_keyed(const String &p_path); diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 5abcae80e08..8efe7016324 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -50,7 +50,7 @@ void EditorPropertyText::_text_changed(const String &p_string) { if (updating) return; - emit_signal("property_changed", get_edited_property(), p_string); + emit_signal("property_changed", get_edited_property(), p_string, true); } void EditorPropertyText::update_property() { @@ -78,12 +78,12 @@ EditorPropertyText::EditorPropertyText() { void EditorPropertyMultilineText::_big_text_changed() { text->set_text(big_text->get_text()); - emit_signal("property_changed", get_edited_property(), big_text->get_text()); + emit_signal("property_changed", get_edited_property(), big_text->get_text(), true); } void EditorPropertyMultilineText::_text_changed() { - emit_signal("property_changed", get_edited_property(), text->get_text()); + emit_signal("property_changed", get_edited_property(), text->get_text(), true); } void EditorPropertyMultilineText::_open_big_text() { diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index a738687a709..526fafcb7d1 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -1411,7 +1411,7 @@ void Control::set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin, bo } update(); - _change_notify(); + _change_notify("anchor"); } void Control::_set_anchor(Margin p_margin, float p_anchor) {