Merge pull request #103764 from kleonc/multi_node_edit_update_on_property_list_changed

Update `MultiNodeEdit` property list on edited nodes' property list changed
This commit is contained in:
Thaddeus Crews 2025-03-31 12:03:45 -05:00
commit e99dc63fdc
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
2 changed files with 24 additions and 0 deletions

View file

@ -219,8 +219,29 @@ bool MultiNodeEdit::_property_get_revert(const StringName &p_name, Variant &r_pr
return false;
}
void MultiNodeEdit::_queue_notify_property_list_changed() {
if (notify_property_list_changed_pending) {
return;
}
notify_property_list_changed_pending = true;
callable_mp(this, &MultiNodeEdit::_notify_property_list_changed).call_deferred();
}
void MultiNodeEdit::_notify_property_list_changed() {
notify_property_list_changed_pending = false;
notify_property_list_changed();
}
void MultiNodeEdit::add_node(const NodePath &p_node) {
nodes.push_back(p_node);
Node *es = EditorNode::get_singleton()->get_edited_scene();
if (es) {
Node *node = es->get_node_or_null(p_node);
if (node) {
node->connect(CoreStringName(property_list_changed), callable_mp(this, &MultiNodeEdit::_queue_notify_property_list_changed));
}
}
}
int MultiNodeEdit::get_node_count() const {

View file

@ -36,12 +36,15 @@ class MultiNodeEdit : public RefCounted {
GDCLASS(MultiNodeEdit, RefCounted);
LocalVector<NodePath> nodes;
bool notify_property_list_changed_pending = false;
struct PLData {
int uses = 0;
PropertyInfo info;
};
bool _set_impl(const StringName &p_name, const Variant &p_value, const String &p_field);
void _queue_notify_property_list_changed();
void _notify_property_list_changed();
protected:
static void _bind_methods();