Fix loading mechanism of settings in the shared BaseTranslator. Previously it

would always overwrite existing settings with the defaults when a message not
containing settings arrived. But we only want to revert to defaults when there
have not been any settings yet. This should fix most translators forgetting
their settings.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30798 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz
2009-05-18 21:23:29 +00:00
parent 18b1ca6bbe
commit c6f2665631
@@ -230,42 +230,49 @@ TranslatorSettings::LoadSettings()
status_t status_t
TranslatorSettings::LoadSettings(BMessage *pmsg) TranslatorSettings::LoadSettings(BMessage *pmsg)
{ {
status_t result = B_OK; if (pmsg == NULL)
return B_BAD_VALUE;
if (pmsg) {
fLock.Lock(); fLock.Lock();
const TranSetting *defaults = fDefaults;
const TranSetting *defs = fDefaults;
for (int32 i = 0; i < fDefCount; i++) { for (int32 i = 0; i < fDefCount; i++) {
bool tempBool; switch (defaults[i].dataType) {
int32 tempInt32;
status_t ret;
switch (defs[i].dataType) {
case TRAN_SETTING_BOOL: case TRAN_SETTING_BOOL:
ret = pmsg->FindBool(defs[i].name, &tempBool); {
if (ret < B_OK) bool value;
tempBool = static_cast<bool>(defs[i].defaultVal); if (pmsg->FindBool(defaults[i].name, &value) != B_OK) {
fSettingsMsg.ReplaceBool(defs[i].name, tempBool); if (fSettingsMsg.HasBool(defaults[i].name))
break; break;
else
value = static_cast<bool>(defaults[i].defaultVal);
}
fSettingsMsg.ReplaceBool(defaults[i].name, value);
break;
}
case TRAN_SETTING_INT32: case TRAN_SETTING_INT32:
ret = pmsg->FindInt32(defs[i].name, &tempInt32); {
if (ret < B_OK) int32 value;
tempInt32 = defs[i].defaultVal; if (pmsg->FindInt32(defaults[i].name, &value) != B_OK) {
fSettingsMsg.ReplaceInt32(defs[i].name, tempInt32); if (fSettingsMsg.HasInt32(defaults[i].name))
break; break;
else
value = defaults[i].defaultVal;
}
fSettingsMsg.ReplaceInt32(defaults[i].name, value);
break;
}
default: default:
// ASSERT here? Erase the bogus setting entry instead? // TODO: ASSERT here? Erase the bogus setting entry instead?
break; break;
} }
} }
fLock.Unlock(); fLock.Unlock();
} return B_OK;
return result;
} }
// --------------------------------------------------------------- // ---------------------------------------------------------------