From c6f266563161d1fd905e14728ecaafa6454a9faf Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 18 May 2009 21:23:29 +0000 Subject: [PATCH] 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 --- .../translators/shared/TranslatorSettings.cpp | 75 ++++++++++--------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/src/add-ons/translators/shared/TranslatorSettings.cpp b/src/add-ons/translators/shared/TranslatorSettings.cpp index 412963dc1b..9c2d34640c 100644 --- a/src/add-ons/translators/shared/TranslatorSettings.cpp +++ b/src/add-ons/translators/shared/TranslatorSettings.cpp @@ -230,42 +230,49 @@ TranslatorSettings::LoadSettings() status_t TranslatorSettings::LoadSettings(BMessage *pmsg) { - status_t result = B_OK; - - 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(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; - } - } + if (pmsg == NULL) + return B_BAD_VALUE; - 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(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; } // ---------------------------------------------------------------