diff options
author | Brian Smith <brian@dbsoft.org> | 2022-04-26 10:13:11 -0500 |
---|---|---|
committer | Brian Smith <brian@dbsoft.org> | 2022-04-26 10:19:04 -0500 |
commit | 3daf711085889bad1bd68651bc4e8790412ae105 (patch) | |
tree | f5b0e4c1befb320cdf158e1839ac5e273373087f /intl | |
parent | 7fe702603066e7f122d5dd66a3a1892ac7e06215 (diff) | |
download | uxp-3daf711085889bad1bd68651bc4e8790412ae105.tar.gz |
Issue #1829 - Revert “Issue #1751 -- Remove XP_MACOSX conditionals from the rest of the tree.”
This also removes some PP abuse and takes file entries out of PP when no longer
needed without XP_MACOSX conditionals.
This reverts commit 6f707bde95dab6998ac204f9ee6c925ee230c740.
Diffstat (limited to 'intl')
-rw-r--r-- | intl/locale/nsIDateTimeFormat.cpp | 7 | ||||
-rw-r--r-- | intl/locale/nsLocaleConstructors.h | 11 | ||||
-rw-r--r-- | intl/locale/nsLocaleService.cpp | 37 |
3 files changed, 50 insertions, 5 deletions
diff --git a/intl/locale/nsIDateTimeFormat.cpp b/intl/locale/nsIDateTimeFormat.cpp index 1290fdc3ee..263b3abb4e 100644 --- a/intl/locale/nsIDateTimeFormat.cpp +++ b/intl/locale/nsIDateTimeFormat.cpp @@ -6,7 +6,9 @@ #include "nsIDateTimeFormat.h" #include "mozilla/RefPtr.h" -#if defined(XP_UNIX) +#if defined(XP_MACOSX) +#define USE_MAC_LOCALE +#elif defined(XP_UNIX) #define USE_UNIX_LOCALE #endif @@ -16,6 +18,9 @@ #ifdef USE_UNIX_LOCALE #include "unix/nsDateTimeFormatUnix.h" #endif +#ifdef USE_MAC_LOCALE +#include "mac/nsDateTimeFormatMac.h" +#endif using mozilla::MakeAndAddRef; diff --git a/intl/locale/nsLocaleConstructors.h b/intl/locale/nsLocaleConstructors.h index 212f70ea53..2d2e579740 100644 --- a/intl/locale/nsLocaleConstructors.h +++ b/intl/locale/nsLocaleConstructors.h @@ -15,7 +15,11 @@ #include "nsLanguageAtomService.h" #include "nsPlatformCharset.h" -#if defined(XP_UNIX) +#if defined(XP_MACOSX) +#define USE_MAC_LOCALE +#endif + +#if defined(XP_UNIX) && !defined(XP_MACOSX) #define USE_UNIX_LOCALE #endif @@ -24,6 +28,11 @@ #include "windows/nsDateTimeFormatWin.h" #endif +#ifdef USE_MAC_LOCALE +#include "mac/nsCollationMacUC.h" +#include "mac/nsDateTimeFormatMac.h" +#endif + #ifdef USE_UNIX_LOCALE #include "unix/nsCollationUnix.h" #include "unix/nsDateTimeFormatUnix.h" diff --git a/intl/locale/nsLocaleService.cpp b/intl/locale/nsLocaleService.cpp index 5984d12274..d81fb50c2e 100644 --- a/intl/locale/nsLocaleService.cpp +++ b/intl/locale/nsLocaleService.cpp @@ -17,6 +17,8 @@ #if defined(XP_WIN) # include "nsWin32Locale.h" +#elif defined(XP_MACOSX) +# include <Carbon/Carbon.h> #elif defined(XP_UNIX) # include <locale.h> # include <stdlib.h> @@ -39,7 +41,7 @@ const char* LocaleList[LocaleListLength] = #define NSILOCALE_MAX_ACCEPT_LANGUAGE 16 #define NSILOCALE_MAX_ACCEPT_LENGTH 18 -#if defined(XP_UNIX) +#if (defined(XP_UNIX) && !defined(XP_MACOSX)) static int posix_locale_category[LocaleListLength] = { LC_COLLATE, @@ -111,7 +113,7 @@ nsLocaleService::nsLocaleService(void) rv = NewLocale(xpLocale, getter_AddRefs(mApplicationLocale)); NS_ENSURE_SUCCESS_VOID(rv); #endif -#if defined(XP_UNIX) +#if defined(XP_UNIX) && !defined(XP_MACOSX) RefPtr<nsLocale> resultLocale(new nsLocale()); NS_ENSURE_TRUE_VOID(resultLocale); @@ -152,7 +154,36 @@ nsLocaleService::nsLocaleService(void) } mSystemLocale = do_QueryInterface(resultLocale); mApplicationLocale = do_QueryInterface(resultLocale); + #endif // XP_UNIX + +#ifdef XP_MACOSX + // Get string representation of user's current locale + CFLocaleRef userLocaleRef = ::CFLocaleCopyCurrent(); + CFStringRef userLocaleStr = ::CFLocaleGetIdentifier(userLocaleRef); + ::CFRetain(userLocaleStr); + + AutoTArray<UniChar, 32> buffer; + int size = ::CFStringGetLength(userLocaleStr); + buffer.SetLength(size + 1); + CFRange range = ::CFRangeMake(0, size); + ::CFStringGetCharacters(userLocaleStr, range, buffer.Elements()); + buffer[size] = 0; + + // Convert the locale string to the format that Mozilla expects + nsAutoString xpLocale(reinterpret_cast<char16_t*>(buffer.Elements())); + xpLocale.ReplaceChar('_', '-'); + + nsresult rv = NewLocale(xpLocale, getter_AddRefs(mSystemLocale)); + if (NS_SUCCEEDED(rv)) { + mApplicationLocale = mSystemLocale; + } + + ::CFRelease(userLocaleStr); + ::CFRelease(userLocaleRef); + + NS_ASSERTION(mApplicationLocale, "Failed to create locale objects"); +#endif // XP_MACOSX } nsLocaleService::~nsLocaleService(void) @@ -175,7 +206,7 @@ nsLocaleService::NewLocale(const nsAString &aLocale, nsILocale **_retval) NS_ConvertASCIItoUTF16 category(LocaleList[i]); result = resultLocale->AddCategory(category, aLocale); if (NS_FAILED(result)) return result; -#if defined(XP_UNIX) +#if defined(XP_UNIX) && !defined(XP_MACOSX) category.AppendLiteral("##PLATFORM"); result = resultLocale->AddCategory(category, aLocale); if (NS_FAILED(result)) return result; |