diff --git a/src/settings.cpp b/src/settings.cpp index 2e773d7a67..b527633d8b 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -461,8 +461,9 @@ size_t BoolSettingDesc::ParseValue(const char *str) const return this->def; } -static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 val) +static bool ValidateEnumSetting(const IntSettingDesc *sdb, int32 &val) { + if (sdb->pre_check != nullptr && !sdb->pre_check(val)) return false; for (const SettingDescEnumEntry *enumlist = sdb->enumlist; enumlist != nullptr && enumlist->str != STR_NULL; enumlist++) { if (enumlist->val == val) { return true; @@ -526,7 +527,11 @@ void IntSettingDesc::MakeValueValid(int32 &val) const uint32 uval = (uint32)val; if (!(this->flags & SF_GUI_0_IS_SPECIAL) || uval != 0) { if (this->flags & SF_ENUM) { - if (!ValidateEnumSetting(this, val)) uval = (uint32)(size_t)this->def; + if (!ValidateEnumSetting(this, val)) { + uval = (uint32)(size_t)this->def; + } else { + uval = (uint32)val; + } } else if (!(this->flags & SF_GUI_DROPDOWN)) { /* Clamp value-type setting to its valid range */ uval = ClampU(uval, this->min, this->max);