|
@@ -3527,6 +3527,9 @@ void EditorInspector::edit(Object *p_object) {
|
|
|
|
|
|
object = p_object;
|
|
object = p_object;
|
|
|
|
|
|
|
|
+ property_configuration_warnings.clear();
|
|
|
|
+ _update_configuration_warnings();
|
|
|
|
+
|
|
if (object) {
|
|
if (object) {
|
|
update_scroll_request = 0; //reset
|
|
update_scroll_request = 0; //reset
|
|
if (scroll_cache.has(object->get_instance_id())) { //if exists, set something else
|
|
if (scroll_cache.has(object->get_instance_id())) { //if exists, set something else
|
|
@@ -4050,8 +4053,48 @@ void EditorInspector::_node_removed(Node *p_node) {
|
|
|
|
|
|
void EditorInspector::_warning_changed(Node *p_node) {
|
|
void EditorInspector::_warning_changed(Node *p_node) {
|
|
if (p_node == object) {
|
|
if (p_node == object) {
|
|
- update_tree_pending = true;
|
|
|
|
|
|
+ // 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) {
|
|
void EditorInspector::_notification(int p_what) {
|