[haiku-commits] r39369 - in haiku/branches/developer/bonefish/weak-symbols: headers/os/locale headers/private/locale src/apps/aboutsystem src/apps/deskbar src/apps/readonlybootprompt ...

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 9 Nov 2010 03:14:51 +0100 (CET)

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 ...]

Other related posts: