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:
@@ -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();
|
|
||||||
|
|
||||||
const TranSetting *defs = fDefaults;
|
|
||||||
for (int32 i = 0; i < fDefCount; i++) {
|
|
||||||
bool tempBool;
|
|
||||||
int32 tempInt32;
|
|
||||||
status_t ret;
|
|
||||||
switch (defs[i].dataType) {
|
|
||||||
case TRAN_SETTING_BOOL:
|
|
||||||
ret = pmsg->FindBool(defs[i].name, &tempBool);
|
|
||||||
if (ret < B_OK)
|
|
||||||
tempBool = static_cast<bool>(defs[i].defaultVal);
|
|
||||||
fSettingsMsg.ReplaceBool(defs[i].name, tempBool);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TRAN_SETTING_INT32:
|
|
||||||
ret = pmsg->FindInt32(defs[i].name, &tempInt32);
|
|
||||||
if (ret < B_OK)
|
|
||||||
tempInt32 = defs[i].defaultVal;
|
|
||||||
fSettingsMsg.ReplaceInt32(defs[i].name, tempInt32);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// ASSERT here? Erase the bogus setting entry instead?
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fLock.Unlock();
|
fLock.Lock();
|
||||||
|
const TranSetting *defaults = fDefaults;
|
||||||
|
for (int32 i = 0; i < fDefCount; i++) {
|
||||||
|
switch (defaults[i].dataType) {
|
||||||
|
case TRAN_SETTING_BOOL:
|
||||||
|
{
|
||||||
|
bool value;
|
||||||
|
if (pmsg->FindBool(defaults[i].name, &value) != B_OK) {
|
||||||
|
if (fSettingsMsg.HasBool(defaults[i].name))
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
value = static_cast<bool>(defaults[i].defaultVal);
|
||||||
|
}
|
||||||
|
|
||||||
|
fSettingsMsg.ReplaceBool(defaults[i].name, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TRAN_SETTING_INT32:
|
||||||
|
{
|
||||||
|
int32 value;
|
||||||
|
if (pmsg->FindInt32(defaults[i].name, &value) != B_OK) {
|
||||||
|
if (fSettingsMsg.HasInt32(defaults[i].name))
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
value = defaults[i].defaultVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
fSettingsMsg.ReplaceInt32(defaults[i].name, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
// TODO: ASSERT here? Erase the bogus setting entry instead?
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
fLock.Unlock();
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user