Author: bonefish Date: 2010-11-09 03:14:50 +0100 (Tue, 09 Nov 2010) New Revision: 39369 Changeset: http://dev.haiku-os.org/changeset/39369 Modified: haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Catalog.h haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Locale.h haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/LocaleRoster.h haiku/branches/developer/bonefish/weak-symbols/headers/private/locale/MutableLocaleRoster.h haiku/branches/developer/bonefish/weak-symbols/src/apps/aboutsystem/AboutSystem.cpp haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/BarApp.cpp haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/CalendarMenuWindow.cpp haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/TimeView.cpp haiku/branches/developer/bonefish/weak-symbols/src/apps/readonlybootprompt/BootPromptWindow.cpp haiku/branches/developer/bonefish/weak-symbols/src/bin/dstcheck.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Catalog.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Country.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/DurationFormat.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/FormattingConventions.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Language.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LibbeLocaleBackend.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Locale.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LocaleRoster.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/MutableLocaleRoster.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/TimeUnitFormat.cpp haiku/branches/developer/bonefish/weak-symbols/src/kits/tracker/WidgetAttributeText.cpp haiku/branches/developer/bonefish/weak-symbols/src/preferences/locale/FormatSettingsView.cpp haiku/branches/developer/bonefish/weak-symbols/src/preferences/locale/LanguageListView.cpp haiku/branches/developer/bonefish/weak-symbols/src/preferences/locale/LocaleWindow.cpp haiku/branches/developer/bonefish/weak-symbols/src/preferences/time/DateTimeEdit.cpp haiku/branches/developer/bonefish/weak-symbols/src/preferences/time/ZoneView.cpp Log: * Got rid of global variables in the locale kit (be_locale[_roster], gMutableLocaleRoster, gRosterData). Introduced static getters instead. Probably breaks all optional packages using the locale kit. * Unbroke the cycles in the sRosterData (formerly gRosterData) initialization: - The fDefaultLocale member is now initialized with some actual default BLanguage() and BFormattingConventions() (both "en_US"). It was formerly initializing itself with itself. - The fDefaultTimeZone is now a pointer and lazily initialized. This breaks a longer cycle via ICU, tzset() and LibbeLocaleBackend. Modified: haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Catalog.h =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Catalog.h 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Catalog.h 2010-11-09 02:14:50 UTC (rev 39369) @@ -93,24 +93,26 @@ // Translation macros which may be used to shorten translation requests: #undef B_TRANSLATE #define B_TRANSLATE(string) \ - be_locale_roster->GetCatalog()->GetString((string), B_TRANSLATE_CONTEXT) + BLocaleRoster::Default()->GetCatalog()->GetString((string), \ + B_TRANSLATE_CONTEXT) #undef B_TRANSLATE_WITH_CONTEXT #define B_TRANSLATE_WITH_CONTEXT(string, context) \ - be_locale_roster->GetCatalog()->GetString((string), (context)) + BLocaleRoster::Default()->GetCatalog()->GetString((string), (context)) #undef B_TRANSLATE_COMMENT #define B_TRANSLATE_COMMENT(string, comment) \ - be_locale_roster->GetCatalog()->GetString((string), B_TRANSLATE_CONTEXT, \ - (comment)) + BLocaleRoster::Default()->GetCatalog()->GetString((string), \ + B_TRANSLATE_CONTEXT, (comment)) #undef B_TRANSLATE_ALL #define B_TRANSLATE_ALL(string, context, comment) \ - be_locale_roster->GetCatalog()->GetString((string), (context), (comment)) + BLocaleRoster::Default()->GetCatalog()->GetString((string), (context), \ + (comment)) #undef B_TRANSLATE_ID #define B_TRANSLATE_ID(id) \ - be_locale_roster->GetCatalog()->GetString((id)) + BLocaleRoster::Default()->GetCatalog()->GetString((id)) // Translation markers which can be used to mark static strings/IDs which // are used as key for translation requests (at other places in the code): Modified: haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Locale.h =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Locale.h 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/Locale.h 2010-11-09 02:14:50 UTC (rev 39369) @@ -49,6 +49,8 @@ BLocale(const BLocale& other); ~BLocale(); + static const BLocale* Default(); + BLocale& operator=(const BLocale& other); status_t GetCollator(BCollator* collator) const; @@ -155,10 +157,6 @@ }; -// global locale object -extern const BLocale* be_locale; - - //--- collator short-hands inlines --- // #pragma mark - Modified: haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/LocaleRoster.h =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/LocaleRoster.h 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/headers/os/locale/LocaleRoster.h 2010-11-09 02:14:50 UTC (rev 39369) @@ -30,6 +30,8 @@ BLocaleRoster(); ~BLocaleRoster(); + static BLocaleRoster* Default(); + status_t GetDefaultTimeZone(BTimeZone* timezone) const; status_t GetLanguage(const char* languageCode, @@ -76,7 +78,4 @@ }; -extern BLocaleRoster* be_locale_roster; - - #endif // _LOCALE_ROSTER_H_ Modified: haiku/branches/developer/bonefish/weak-symbols/headers/private/locale/MutableLocaleRoster.h =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/headers/private/locale/MutableLocaleRoster.h 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/headers/private/locale/MutableLocaleRoster.h 2010-11-09 02:14:50 UTC (rev 39369) @@ -34,6 +34,8 @@ MutableLocaleRoster(); ~MutableLocaleRoster(); + static MutableLocaleRoster* Default(); + status_t SetDefaultFormattingConventions( const BFormattingConventions& conventions); status_t SetDefaultTimeZone(const BTimeZone& zone); @@ -57,9 +59,6 @@ }; -extern MutableLocaleRoster* gMutableLocaleRoster; - - typedef BCatalogAddOn* (*InstantiateCatalogFunc)(const char* name, const char* language, uint32 fingerprint); @@ -110,14 +109,18 @@ BMessage fPreferredLanguages; BLocale fDefaultLocale; - BTimeZone fDefaultTimeZone; + mutable BTimeZone* fDefaultTimeZone; bool fAreResourcesLoaded; BResources fResources; RosterData(); + RosterData(const BLanguage& language, + const BFormattingConventions& conventions); ~RosterData(); + static RosterData* Default(); + void InitializeCatalogAddOns(); void CleanupCatalogAddOns(); status_t Refresh(); @@ -125,6 +128,8 @@ static int CompareInfos(const void* left, const void* right); + BTimeZone* DefaultTimeZone() const; + status_t SetDefaultFormattingConventions( const BFormattingConventions& convetions); status_t SetDefaultTimeZone(const BTimeZone& zone); @@ -150,9 +155,6 @@ }; -extern RosterData gRosterData; - - } // namespace BPrivate Modified: haiku/branches/developer/bonefish/weak-symbols/src/apps/aboutsystem/AboutSystem.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/apps/aboutsystem/AboutSystem.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/apps/aboutsystem/AboutSystem.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -180,23 +180,23 @@ BLanguage* language; BString leftName; - if (be_locale_roster->GetLanguage(leftTranslation->languageCode, &language) - == B_OK) { + if (BLocaleRoster::Default()->GetLanguage(leftTranslation->languageCode, + &language) == B_OK) { language->GetName(leftName); delete language; } else leftName = leftTranslation->languageCode; BString rightName; - if (be_locale_roster->GetLanguage(rightTranslation->languageCode, &language) - == B_OK) { + if (BLocaleRoster::Default()->GetLanguage(rightTranslation->languageCode, + &language) == B_OK) { language->GetName(rightName); delete language; } else rightName = rightTranslation->languageCode; BCollator collator; - be_locale->GetCollator(&collator); + BLocale::Default()->GetCollator(&collator); return collator.Compare(leftName.String(), rightName.String()); } @@ -1105,8 +1105,8 @@ = *(const Translation*)sortedTranslations.ItemAt(i); langName.Truncate(0); - if (be_locale_roster->GetLanguage(translation.languageCode, &lang) - == B_OK) { + if (BLocaleRoster::Default()->GetLanguage(translation.languageCode, + &lang) == B_OK) { lang->GetName(langName); delete lang; } else { Modified: haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/BarApp.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/BarApp.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/BarApp.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -515,7 +515,7 @@ case B_LOCALE_CHANGED: { - be_locale_roster->Refresh(); + BLocaleRoster::Default()->Refresh(); BMessenger(fBarWindow->FindView("_deskbar_tv_")).SendMessage( message); Modified: haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/CalendarMenuWindow.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/CalendarMenuWindow.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/CalendarMenuWindow.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -89,7 +89,7 @@ fSuppressFirstClose(true) { BPrivate::week_start startOfWeek - = (BPrivate::week_start)be_locale->StartOfWeek(); + = (BPrivate::week_start)BLocale::Default()->StartOfWeek(); RemoveShortcut('H', B_COMMAND_KEY | B_CONTROL_KEY); AddShortcut('W', B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED)); Modified: haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/TimeView.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/TimeView.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/apps/deskbar/TimeView.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -84,7 +84,7 @@ fLastDateStr[0] = 0; fNeedToUpdate = true; - fLocale = *be_locale; + fLocale = *BLocale::Default(); } @@ -96,7 +96,7 @@ data->FindBool("seconds", &fShowSeconds); data->FindBool("interval", &fInterval); - fLocale = *be_locale; + fLocale = *BLocale::Default(); } #endif @@ -357,7 +357,7 @@ void TTimeView::Update() { - fLocale = *be_locale; + fLocale = *BLocale::Default(); GetCurrentTime(); GetCurrentDate(); Modified: haiku/branches/developer/bonefish/weak-symbols/src/apps/readonlybootprompt/BootPromptWindow.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/apps/readonlybootprompt/BootPromptWindow.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/apps/readonlybootprompt/BootPromptWindow.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -39,7 +39,7 @@ #include "KeymapListItem.h" -using BPrivate::gMutableLocaleRoster; +using BPrivate::MutableLocaleRoster; enum { @@ -59,8 +59,8 @@ fLanguage(language) { fIcon = new(std::nothrow) BBitmap(BRect(0, 0, 15, 15), B_RGBA32); - if (fIcon != NULL && be_locale_roster->GetFlagIconForCountry(fIcon, - language) != B_OK) { + if (fIcon != NULL && BLocaleRoster::Default()->GetFlagIconForCountry( + fIcon, language) != B_OK) { delete fIcon; fIcon = NULL; } @@ -247,7 +247,7 @@ | B_AUTO_UPDATE_SIZE_LIMITS) { // Get the list of all known languages (suffice to do it only once) - be_locale_roster->GetAvailableLanguages(&fInstalledLanguages); + BLocaleRoster::Default()->GetAvailableLanguages(&fInstalledLanguages); fInfoTextView = new TextBitmapView(BSize(480, 140)); static_cast<TextBitmapView*>(fInfoTextView)->SetInsets(5, 5, 5, 5); @@ -333,7 +333,7 @@ BMessage preferredLanguages; preferredLanguages.AddString("language", languageItem->Language()); - gMutableLocaleRoster->SetPreferredLanguages( + MutableLocaleRoster::Default()->SetPreferredLanguages( &preferredLanguages); _InitCatalog(true); } @@ -368,14 +368,14 @@ BMessage settings; BString language; - if (be_locale_roster->GetCatalog()->GetLanguage(&language) == B_OK) { + if (BLocaleRoster::Default()->GetCatalog()->GetLanguage(&language) == B_OK) settings.AddString("language", language.String()); - } - gMutableLocaleRoster->SetPreferredLanguages(&settings); + MutableLocaleRoster::Default()->SetPreferredLanguages(&settings); BFormattingConventions conventions(language.String()); - gMutableLocaleRoster->SetDefaultFormattingConventions(conventions); + MutableLocaleRoster::Default()->SetDefaultFormattingConventions( + conventions); } @@ -422,7 +422,7 @@ // Get current first preferred language of the user BMessage preferredLanguages; - be_locale_roster->GetPreferredLanguages(&preferredLanguages); + BLocaleRoster::Default()->GetPreferredLanguages(&preferredLanguages); const char* firstPreferredLanguage; if (preferredLanguages.FindString("language", &firstPreferredLanguage) != B_OK) { @@ -431,7 +431,7 @@ } BMessage installedCatalogs; - be_locale_roster->GetAvailableCatalogs(&installedCatalogs, + BLocaleRoster::Default()->GetAvailableCatalogs(&installedCatalogs, "x-vnd.Haiku-ReadOnlyBootPrompt"); BFont font; @@ -446,7 +446,8 @@ for (int32 i = 0; installedCatalogs.FindString("language", i, &languageID) == B_OK; i++) { BLanguage* language; - if (be_locale_roster->GetLanguage(languageID, &language) == B_OK) { + if (BLocaleRoster::Default()->GetLanguage(languageID, &language) + == B_OK) { BString name; language->GetNativeName(name); Modified: haiku/branches/developer/bonefish/weak-symbols/src/bin/dstcheck.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/bin/dstcheck.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/bin/dstcheck.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -83,7 +83,7 @@ time(&t); localtime_r(&t, &tm); - be_locale->FormatTime(timestring, 15, t, B_SHORT_TIME_FORMAT); + BLocale::Default()->FormatTime(timestring, 15, t, B_SHORT_TIME_FORMAT); string += " "; string += timestring; Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Catalog.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Catalog.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Catalog.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -15,7 +15,7 @@ #include <Roster.h> -using BPrivate::gMutableLocaleRoster; +using BPrivate::MutableLocaleRoster; //#pragma mark - BCatalog @@ -29,14 +29,14 @@ BCatalog::BCatalog(const char *signature, const char *language, uint32 fingerprint) { - fCatalog - = gMutableLocaleRoster->LoadCatalog(signature, language, fingerprint); + fCatalog = MutableLocaleRoster::Default()->LoadCatalog(signature, language, + fingerprint); } BCatalog::~BCatalog() { - gMutableLocaleRoster->UnloadCatalog(fCatalog); + MutableLocaleRoster::Default()->UnloadCatalog(fCatalog); } @@ -102,8 +102,9 @@ { // This is not thread safe. It is used only in ReadOnlyBootPrompt and should // not do harm there, but not sure what to do about it… - gMutableLocaleRoster->UnloadCatalog(fCatalog); - fCatalog = gMutableLocaleRoster->LoadCatalog(signature, NULL, fingerprint); + MutableLocaleRoster::Default()->UnloadCatalog(fCatalog); + fCatalog = MutableLocaleRoster::Default()->LoadCatalog(signature, NULL, + fingerprint); return B_OK; } @@ -268,7 +269,8 @@ EditableCatalog::EditableCatalog(const char *type, const char *signature, const char *language) { - fCatalog = gMutableLocaleRoster->CreateCatalog(type, signature, language); + fCatalog = MutableLocaleRoster::Default()->CreateCatalog(type, signature, + language); } Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Country.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Country.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Country.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -83,7 +83,7 @@ BString appLanguage; if (displayLanguage == NULL) { BMessage preferredLanguage; - be_locale_roster->GetPreferredLanguages(&preferredLanguage); + BLocaleRoster::Default()->GetPreferredLanguages(&preferredLanguage); preferredLanguage.FindString("language", 0, &appLanguage); } else { appLanguage = displayLanguage->Code(); @@ -112,13 +112,14 @@ const char* code = fICULocale->getCountry(); if (code == NULL) return B_ERROR; - return be_locale_roster->GetFlagIconForCountry(result, code); + return BLocaleRoster::Default()->GetFlagIconForCountry(result, code); } status_t BCountry::GetAvailableTimeZones(BMessage* timeZones) const { - return be_locale_roster->GetAvailableTimeZonesForCountry(timeZones, Code()); + return BLocaleRoster::Default()->GetAvailableTimeZonesForCountry(timeZones, + Code()); } Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/DurationFormat.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/DurationFormat.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/DurationFormat.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -116,7 +116,7 @@ if (timeZone == NULL) { BTimeZone defaultTimeZone; status_t result - = be_locale_roster->GetDefaultTimeZone(&defaultTimeZone); + = BLocaleRoster::Default()->GetDefaultTimeZone(&defaultTimeZone); if (result != B_OK) return result; zonePrivate.SetTo(&defaultTimeZone); Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/FormattingConventions.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/FormattingConventions.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/FormattingConventions.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -362,7 +362,7 @@ BString displayLanguageID; if (displayLanguage == NULL) { BLanguage defaultLanguage; - be_locale->GetLanguage(&defaultLanguage); + BLocale::Default()->GetLanguage(&defaultLanguage); displayLanguageID = defaultLanguage.Code(); } else { displayLanguageID = displayLanguage->Code(); Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Language.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Language.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Language.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -130,7 +130,7 @@ BString appLanguage; if (displayLanguage == NULL) { BMessage preferredLanguage; - be_locale_roster->GetPreferredLanguages(&preferredLanguage); + BLocaleRoster::Default()->GetPreferredLanguages(&preferredLanguage); preferredLanguage.FindString("language", 0, &appLanguage); } else { appLanguage = displayLanguage->Code(); Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LibbeLocaleBackend.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LibbeLocaleBackend.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LibbeLocaleBackend.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -25,7 +25,7 @@ LibbeLocaleBackend::LibbeLocaleBackend() { - gMutableLocaleRoster->GetSystemCatalog(&systemCatalog); + MutableLocaleRoster::Default()->GetSystemCatalog(&systemCatalog); } Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Locale.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Locale.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/Locale.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -42,12 +42,12 @@ if (conventions != NULL) fConventions = *conventions; else - be_locale->GetFormattingConventions(&fConventions); + BLocale::Default()->GetFormattingConventions(&fConventions); if (language != NULL) fLanguage = *language; else - be_locale->GetLanguage(&fLanguage); + BLocale::Default()->GetLanguage(&fLanguage); } @@ -59,6 +59,13 @@ } +/*static*/ const BLocale* +BLocale::Default() +{ + return &BPrivate::RosterData::Default()->fDefaultLocale; +} + + BLocale& BLocale::operator=(const BLocale& other) { Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LocaleRoster.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LocaleRoster.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/LocaleRoster.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -75,10 +75,17 @@ } +/*static*/ BLocaleRoster* +BLocaleRoster::Default() +{ + return MutableLocaleRoster::Default(); +} + + status_t BLocaleRoster::Refresh() { - return gRosterData.Refresh(); + return RosterData::Default()->Refresh(); } @@ -88,11 +95,12 @@ if (!timezone) return B_BAD_VALUE; - BAutolock lock(gRosterData.fLock); + RosterData* rosterData = RosterData::Default(); + BAutolock lock(rosterData->fLock); if (!lock.IsLocked()) return B_ERROR; - *timezone = gRosterData.fDefaultTimeZone; + *timezone = *rosterData->DefaultTimeZone(); return B_OK; } @@ -120,11 +128,12 @@ if (!languages) return B_BAD_VALUE; - BAutolock lock(gRosterData.fLock); + RosterData* rosterData = RosterData::Default(); + BAutolock lock(rosterData->fLock); if (!lock.IsLocked()) return B_ERROR; - *languages = gRosterData.fPreferredLanguages; + *languages = rosterData->fPreferredLanguages; return B_OK; } @@ -234,20 +243,21 @@ if (countryCode == NULL) return B_BAD_DATA; - BAutolock lock(gRosterData.fLock); + RosterData* rosterData = RosterData::Default(); + BAutolock lock(rosterData->fLock); if (!lock.IsLocked()) return B_ERROR; - if (!gRosterData.fAreResourcesLoaded) { - status_t result = gRosterData.fResources.SetToImage(&gRosterData); + if (!rosterData->fAreResourcesLoaded) { + status_t result = rosterData->fResources.SetToImage(rosterData); if (result != B_OK) return result; - result = gRosterData.fResources.PreloadResourceType(); + result = rosterData->fResources.PreloadResourceType(); if (result != B_OK) return result; - gRosterData.fAreResourcesLoaded = true; + rosterData->fAreResourcesLoaded = true; } size_t size; @@ -262,8 +272,8 @@ normalizedCode[0] = toupper(countryCode[codeLength - 2]); normalizedCode[1] = toupper(countryCode[codeLength - 1]); - const void* buffer = gRosterData.fResources.LoadResource(B_VECTOR_ICON_TYPE, - normalizedCode, &size); + const void* buffer = rosterData->fResources.LoadResource( + B_VECTOR_ICON_TYPE, normalizedCode, &size); if (buffer == NULL || size == 0) return B_NAME_NOT_FOUND; @@ -279,14 +289,15 @@ if (languageList == NULL) return B_BAD_VALUE; - BAutolock lock(gRosterData.fLock); + RosterData* rosterData = RosterData::Default(); + BAutolock lock(rosterData->fLock); if (!lock.IsLocked()) return B_ERROR; - int32 count = gRosterData.fCatalogAddOnInfos.CountItems(); + int32 count = rosterData->fCatalogAddOnInfos.CountItems(); for (int32 i = 0; i < count; ++i) { CatalogAddOnInfo* info - = (CatalogAddOnInfo*)gRosterData.fCatalogAddOnInfos.ItemAt(i); + = (CatalogAddOnInfo*)rosterData->fCatalogAddOnInfos.ItemAt(i); if (!info->MakeSureItsLoaded() || !info->fLanguagesFunc) continue; Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/MutableLocaleRoster.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/MutableLocaleRoster.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/MutableLocaleRoster.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -18,6 +18,7 @@ #include <Autolock.h> #include <Catalog.h> #include <Collator.h> +#include <Debug.h> #include <DefaultCatalog.h> #include <Directory.h> #include <Entry.h> @@ -125,8 +126,6 @@ // #pragma mark - RosterData -RosterData gRosterData; - static const char* kPriorityAttr = "ADDON:priority"; static const char* kLanguageField = "language"; @@ -134,10 +133,14 @@ static const char* kTimezoneField = "timezone"; static const char* kOffsetField = "offset"; +static RosterData sRosterData(BLanguage("en_US"), + BFormattingConventions("en_US")); + RosterData::RosterData() : fLock("LocaleRosterData"), + fDefaultTimeZone(NULL), fAreResourcesLoaded(false) { openlog_team("liblocale.so", LOG_PID, LOG_USER); @@ -151,15 +154,43 @@ } +RosterData::RosterData(const BLanguage& language, + const BFormattingConventions& conventions) + : + fLock("LocaleRosterData"), + fDefaultLocale(&language, &conventions), + fDefaultTimeZone(NULL), + fAreResourcesLoaded(false) +{ + openlog_team("liblocale.so", LOG_PID, LOG_USER); +#ifndef DEBUG + setlogmask_team(LOG_UPTO(LOG_WARNING)); +#endif + + InitializeCatalogAddOns(); + + Refresh(); +} + + RosterData::~RosterData() { BAutolock lock(fLock); CleanupCatalogAddOns(); closelog(); + + delete fDefaultTimeZone; } +/*static*/ RosterData* +RosterData::Default() +{ + return &sRosterData; +} + + int RosterData::CompareInfos(const void* left, const void* right) { @@ -326,6 +357,18 @@ } +BTimeZone* +RosterData::DefaultTimeZone() const +{ + ASSERT(fLock.IsLocked()); + + if (fDefaultTimeZone == NULL) + fDefaultTimeZone = new BTimeZone; + + return fDefaultTimeZone; +} + + status_t RosterData::SetDefaultFormattingConventions( const BFormattingConventions& newFormattingConventions) @@ -545,7 +588,10 @@ status_t RosterData::_SetDefaultTimeZone(const BTimeZone& newZone) { - fDefaultTimeZone = newZone; + if (fDefaultTimeZone != NULL) + *fDefaultTimeZone = newZone; + else + fDefaultTimeZone = new BTimeZone(newZone); TimeZone* timeZone = TimeZone::createTimeZone(newZone.ID().String()); if (timeZone == NULL) @@ -593,13 +639,14 @@ status_t RosterData::_AddDefaultTimeZoneToMessage(BMessage* message) const { - status_t status = message->AddString(kTimezoneField, fDefaultTimeZone.ID()); + BTimeZone* defaultTimeZone = DefaultTimeZone(); + status_t status = message->AddString(kTimezoneField, defaultTimeZone->ID()); // add the offset, too, since that is used by clockconfig when setting // up timezone state during boot if (status == B_OK) { status = message->AddInt32(kOffsetField, - fDefaultTimeZone.OffsetFromGMT()); + defaultTimeZone->OffsetFromGMT()); } return status; @@ -626,8 +673,7 @@ // #pragma mark - MutableLocaleRoster -static MutableLocaleRoster gLocaleRoster; -MutableLocaleRoster* gMutableLocaleRoster = &gLocaleRoster; +static MutableLocaleRoster sLocaleRoster; MutableLocaleRoster::MutableLocaleRoster() @@ -640,24 +686,32 @@ } +/*static*/ MutableLocaleRoster* +MutableLocaleRoster::Default() +{ + return &sLocaleRoster; +} + + status_t MutableLocaleRoster::SetDefaultFormattingConventions(const BFormattingConventions& newFormattingConventions) { - return gRosterData.SetDefaultFormattingConventions(newFormattingConventions); + return RosterData::Default()->SetDefaultFormattingConventions( + newFormattingConventions); } status_t MutableLocaleRoster::SetDefaultTimeZone(const BTimeZone& newZone) { - return gRosterData.SetDefaultTimeZone(newZone); + return RosterData::Default()->SetDefaultTimeZone(newZone); } status_t MutableLocaleRoster::SetPreferredLanguages(const BMessage* languages) { - return gRosterData.SetPreferredLanguages(languages); + return RosterData::Default()->SetPreferredLanguages(languages); } @@ -686,14 +740,14 @@ if (!type || !signature || !language) return NULL; - BAutolock lock(gRosterData.fLock); + BAutolock lock(RosterData::Default()->fLock); if (!lock.IsLocked()) return NULL; - int32 count = gRosterData.fCatalogAddOnInfos.CountItems(); + int32 count = RosterData::Default()->fCatalogAddOnInfos.CountItems(); for (int32 i = 0; i < count; ++i) { - CatalogAddOnInfo* info - = (CatalogAddOnInfo*)gRosterData.fCatalogAddOnInfos.ItemAt(i); + CatalogAddOnInfo* info = (CatalogAddOnInfo*) + RosterData::Default()->fCatalogAddOnInfos.ItemAt(i); if (info->fName.ICompare(type)!=0 || !info->MakeSureItsLoaded() || !info->fCreateFunc) continue; @@ -727,14 +781,14 @@ if (!signature) return NULL; - BAutolock lock(gRosterData.fLock); + BAutolock lock(RosterData::Default()->fLock); if (!lock.IsLocked()) return NULL; - int32 count = gRosterData.fCatalogAddOnInfos.CountItems(); + int32 count = RosterData::Default()->fCatalogAddOnInfos.CountItems(); for (int32 i = 0; i < count; ++i) { - CatalogAddOnInfo* info - = (CatalogAddOnInfo*)gRosterData.fCatalogAddOnInfos.ItemAt(i); + CatalogAddOnInfo* info = (CatalogAddOnInfo*) + RosterData::Default()->fCatalogAddOnInfos.ItemAt(i); if (!info->MakeSureItsLoaded() || !info->fInstantiateFunc) continue; @@ -801,14 +855,14 @@ if (!appOrAddOnRef) return NULL; - BAutolock lock(gRosterData.fLock); + BAutolock lock(RosterData::Default()->fLock); if (!lock.IsLocked()) return NULL; - int32 count = gRosterData.fCatalogAddOnInfos.CountItems(); + int32 count = RosterData::Default()->fCatalogAddOnInfos.CountItems(); for (int32 i = 0; i < count; ++i) { - CatalogAddOnInfo* info - = (CatalogAddOnInfo*)gRosterData.fCatalogAddOnInfos.ItemAt(i); + CatalogAddOnInfo* info = (CatalogAddOnInfo*) + RosterData::Default()->fCatalogAddOnInfos.ItemAt(i); if (!info->MakeSureItsLoaded() || !info->fInstantiateEmbeddedFunc) continue; @@ -837,7 +891,7 @@ if (!catalog) return B_BAD_VALUE; - BAutolock lock(gRosterData.fLock); + BAutolock lock(RosterData::Default()->fLock); if (!lock.IsLocked()) return B_ERROR; @@ -846,10 +900,10 @@ while (catalog) { nextCatalog = catalog->Next(); - int32 count = gRosterData.fCatalogAddOnInfos.CountItems(); + int32 count = RosterData::Default()->fCatalogAddOnInfos.CountItems(); for (int32 i = 0; i < count; ++i) { CatalogAddOnInfo* info = static_cast<CatalogAddOnInfo*>( - gRosterData.fCatalogAddOnInfos.ItemAt(i)); + RosterData::Default()->fCatalogAddOnInfos.ItemAt(i)); if (info->fLoadedCatalogs.HasItem(catalog)) { info->fLoadedCatalogs.RemoveItem(catalog); delete catalog; @@ -864,8 +918,3 @@ } // namespace BPrivate - - -BLocaleRoster* be_locale_roster = &BPrivate::gLocaleRoster; - -const BLocale* be_locale = &BPrivate::gRosterData.fDefaultLocale; Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/TimeUnitFormat.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/TimeUnitFormat.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/locale/TimeUnitFormat.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -90,7 +90,7 @@ if (fLocale != NULL) fLocale->GetLanguage(&language); else - be_locale->GetLanguage(&language); + BLocale::Default()->GetLanguage(&language); Locale icuLocale(language.Code()); UErrorCode icuStatus = U_ZERO_ERROR; Modified: haiku/branches/developer/bonefish/weak-symbols/src/kits/tracker/WidgetAttributeText.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/kits/tracker/WidgetAttributeText.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/kits/tracker/WidgetAttributeText.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -190,12 +190,12 @@ time_t timeValue = (time_t)value; - if (be_locale->FormatDateTime(buffer, 256, timeValue, B_FULL_DATE_FORMAT, - B_MEDIUM_TIME_FORMAT) == B_OK) + if (BLocale::Default()->FormatDateTime(buffer, 256, timeValue, + B_FULL_DATE_FORMAT, B_MEDIUM_TIME_FORMAT) == B_OK) resultWidth = view->StringWidth(buffer); if (resultWidth > width - && be_locale->FormatDateTime(buffer, 256, timeValue, + && BLocale::Default()->FormatDateTime(buffer, 256, timeValue, B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT) == B_OK) { resultWidth = view->StringWidth(buffer); } Modified: haiku/branches/developer/bonefish/weak-symbols/src/preferences/locale/FormatSettingsView.cpp =================================================================== --- haiku/branches/developer/bonefish/weak-symbols/src/preferences/locale/FormatSettingsView.cpp 2010-11-09 01:42:25 UTC (rev 39368) +++ haiku/branches/developer/bonefish/weak-symbols/src/preferences/locale/FormatSettingsView.cpp 2010-11-09 02:14:50 UTC (rev 39369) @@ -38,7 +38,7 @@ #include "LocalePreflet.h" -using BPrivate::gMutableLocaleRoster; +using BPrivate::MutableLocaleRoster; #undef B_TRANSLATE_CONTEXT @@ -261,10 +261,11 @@ case kClockFormatChange: { BFormattingConventions conventions; - be_locale->GetFormattingConventions(&conventions); + BLocale::Default()->GetFormattingConventions(&conventions); conventions.SetExplicitUse24HourClock( f24HourRadioButton->Value() ? true : false); - gMutableLocaleRoster->SetDefaultFormattingConventions(conventions); + MutableLocaleRoster::Default()->SetDefaultFormattingConventions( + conventions); _UpdateExamples(); Window()->PostMessage(kMsgSettingsChanged); @@ -274,10 +275,11 @@ case kStringsLanguageChange: { BFormattingConventions conventions; - be_locale->GetFormattingConventions(&conventions); + BLocale::Default()->GetFormattingConventions(&conventions); conventions.SetUseStringsFromPreferredLanguage( fUseLanguageStringsCheckBox->Value() ? true : false); - gMutableLocaleRoster->SetDefaultFormattingConventions(conventions); + MutableLocaleRoster::Default()->SetDefaultFormattingConventions( + conventions); _UpdateExamples(); @@ -294,7 +296,8 @@ void FormatSettingsView::Revert() { - gMutableLocaleRoster->SetDefaultFormattingConventions(fInitialConventions); + MutableLocaleRoster::Default()->SetDefaultFormattingConventions( + fInitialConventions); _UpdateExamples(); } @@ -304,7 +307,7 @@ FormatSettingsView::Refresh(bool setInitial) { BFormattingConventions conventions; - be_locale->GetFormattingConventions(&conventions); + BLocale::Default()->GetFormattingConventions(&conventions); if (setInitial) fInitialConventions = conventions; [... truncated: 276 lines follow ...]