Merge pull request #88182 from RedMser/fix-88176-inspector

Only update inspector if configuration warning change was relevant
This commit is contained in:
Rémi Verschelde 2024-02-13 23:43:37 +01:00
commit 85869957e9
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 46 additions and 1 deletions

View file

@ -3533,6 +3533,9 @@ void EditorInspector::edit(Object *p_object) {
object = p_object;
property_configuration_warnings.clear();
_update_configuration_warnings();
if (object) {
update_scroll_request = 0; //reset
if (scroll_cache.has(object->get_instance_id())) { //if exists, set something else
@ -4056,9 +4059,49 @@ void EditorInspector::_node_removed(Node *p_node) {
void EditorInspector::_warning_changed(Node *p_node) {
if (p_node == object) {
// Only update the tree if the list of configuration warnings has changed.
if (_update_configuration_warnings()) {
update_tree_pending = true;
}
}
}
bool EditorInspector::_update_configuration_warnings() {
Node *node = Object::cast_to<Node>(object);
if (!node) {
return false;
}
bool changed = false;
LocalVector<int> found_warning_indices;
// New and changed warnings.
Vector<Dictionary> warnings = node->get_configuration_warnings_as_dicts();
for (const Dictionary &warning : warnings) {
if (!warning.has("property")) {
continue;
}
int found_warning_index = property_configuration_warnings.find(warning);
if (found_warning_index < 0) {
found_warning_index = property_configuration_warnings.size();
property_configuration_warnings.push_back(warning);
changed = true;
}
found_warning_indices.push_back(found_warning_index);
}
// Removed warnings.
for (uint32_t i = 0; i < property_configuration_warnings.size(); i++) {
if (found_warning_indices.find(i) < 0) {
property_configuration_warnings.remove_at(i);
i--;
changed = true;
}
}
return changed;
}
void EditorInspector::_notification(int p_what) {
switch (p_what) {

View file

@ -514,6 +514,7 @@ class EditorInspector : public ScrollContainer {
int property_focusable;
int update_scroll_request;
LocalVector<Dictionary> property_configuration_warnings;
HashMap<StringName, HashMap<StringName, String>> doc_path_cache;
HashSet<StringName> restart_request_props;
HashMap<String, String> custom_property_descriptions;
@ -543,6 +544,7 @@ class EditorInspector : public ScrollContainer {
void _node_removed(Node *p_node);
void _warning_changed(Node *p_node);
bool _update_configuration_warnings();
HashMap<StringName, int> per_array_page;
void _page_change_request(int p_new_page, const StringName &p_array_prefix);