1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00

Fix editing exports in a base script not propagating the change to the opened property editor

This patch fixes the user having to navigate away from the selected node which has the derived script attached and back to see the changes of the base script exports reflected in the property editor.
This commit is contained in:
Alexander Stillich
2023-10-10 23:12:17 +02:00
parent a2f90d565a
commit 99f8751878
2 changed files with 15 additions and 7 deletions

View File

@@ -278,6 +278,7 @@ struct _GDScriptMemberSort {
void GDScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) {
placeholders.erase(p_placeholder);
}
#endif
void GDScript::_get_script_method_list(List<MethodInfo> *r_list, bool p_include_base) const {
@@ -464,7 +465,7 @@ String GDScript::get_class_icon_path() const {
}
#endif
bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderScriptInstance *p_instance_to_update) {
bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderScriptInstance *p_instance_to_update, bool p_base_exports_changed) {
#ifdef TOOLS_ENABLED
static Vector<GDScript *> base_caches;
@@ -473,7 +474,7 @@ bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderSc
}
base_caches.append(this);
bool changed = false;
bool changed = p_base_exports_changed;
if (source_changed_cache) {
source_changed_cache = false;
@@ -600,9 +601,15 @@ bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderSc
void GDScript::update_exports() {
#ifdef TOOLS_ENABLED
_update_exports_down(false);
#endif
}
#ifdef TOOLS_ENABLED
void GDScript::_update_exports_down(bool p_base_exports_changed) {
bool cyclic_error = false;
_update_exports(&cyclic_error);
bool changed = _update_exports(&cyclic_error, false, nullptr, p_base_exports_changed);
if (cyclic_error) {
return;
}
@@ -612,14 +619,14 @@ void GDScript::update_exports() {
for (const ObjectID &E : copy) {
Object *id = ObjectDB::get_instance(E);
GDScript *s = Object::cast_to<GDScript>(id);
if (!s) {
continue;
}
s->update_exports();
s->_update_exports_down(p_base_exports_changed || changed);
}
#endif
}
#endif
String GDScript::_get_debug_path() const {
if (is_built_in() && !get_name().is_empty()) {