Skip to content

Commit ca4038f

Browse files
committed
Merge pull request #103336 from dugramen/projecsetting-override-order
Keep ProjectSettings overrides right below the original setting
2 parents 157f187 + 3354c32 commit ca4038f

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

core/config/project_settings.cpp

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const {
422422
_THREAD_SAFE_METHOD_
423423

424424
RBSet<_VCSort> vclist;
425+
HashMap<String, Vector<_VCSort>> setting_overrides;
425426

426427
for (const KeyValue<StringName, VariantContainer> &E : props) {
427428
const VariantContainer *v = &E.value;
@@ -462,23 +463,41 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const {
462463
if (v->restart_if_changed) {
463464
vc.flags |= PROPERTY_USAGE_RESTART_IF_CHANGED;
464465
}
465-
vclist.insert(vc);
466-
}
467466

468-
for (const _VCSort &E : vclist) {
469-
String prop_info_name = E.name;
470-
int dot = prop_info_name.find_char('.');
471-
if (dot != -1 && !custom_prop_info.has(prop_info_name)) {
472-
prop_info_name = prop_info_name.substr(0, dot);
467+
int dot = vc.name.rfind_char('.');
468+
if (dot != -1 && !custom_prop_info.has(vc.name)) {
469+
StringName n = vc.name.substr(0, dot);
470+
if (props.has(n)) { // Property is an override.
471+
setting_overrides[n].append(vc);
472+
} else {
473+
vclist.insert(vc);
474+
}
475+
} else {
476+
vclist.insert(vc);
473477
}
478+
}
474479

475-
if (custom_prop_info.has(prop_info_name)) {
476-
PropertyInfo pi = custom_prop_info[prop_info_name];
477-
pi.name = E.name;
478-
pi.usage = E.flags;
480+
for (const _VCSort &base : vclist) {
481+
if (custom_prop_info.has(base.name)) {
482+
PropertyInfo pi = custom_prop_info[base.name];
483+
pi.name = base.name;
484+
pi.usage = base.flags;
479485
p_list->push_back(pi);
480486
} else {
481-
p_list->push_back(PropertyInfo(E.type, E.name, PROPERTY_HINT_NONE, "", E.flags));
487+
p_list->push_back(PropertyInfo(base.type, base.name, PROPERTY_HINT_NONE, "", base.flags));
488+
}
489+
490+
if (setting_overrides.has(base.name)) {
491+
for (const _VCSort &over : setting_overrides.get(base.name)) {
492+
if (custom_prop_info.has(over.name)) {
493+
PropertyInfo pi = custom_prop_info[over.name];
494+
pi.name = over.name;
495+
pi.usage = over.flags;
496+
p_list->push_back(pi);
497+
} else {
498+
p_list->push_back(PropertyInfo(over.type, over.name, PROPERTY_HINT_NONE, "", over.flags));
499+
}
500+
}
482501
}
483502
}
484503
}

0 commit comments

Comments
 (0)