Make WebLocalizableStrings work a little more like the Mac version
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Dec 2007 17:15:33 +0000 (17:15 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 10 Dec 2007 17:15:33 +0000 (17:15 +0000)
         Reviewed by Steve.

         * WebKit.vcproj/WebKit.def: Deprecated SetWebLocalizedStringMainBundle.
         * WebKit.vcproj/WebKit_debug.def: Ditto.
         * WebLocalizableStrings.cpp:
         (createWebKitBundle): Changed to only create the bundle once.
         (cfBundleForStringsBundle): Added. Code was factored out of
         copyLocalizedStringFromBundle. We now use the CFBundleGetMainBundle to
         get the main bundle and WebLocalizableStringsBundle's identifier to
         fetch the framework's bundle.
         (copyLocalizedStringFromBundle): Changed to call
         cfBundleForStringsBundle.
         (cacheString): Cleaned up logic a bit with an early return.
         (SetWebLocalizedStringMainBundle): Moved down with the other
         deprecated functions and made into a no-op.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@28582 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/win/ChangeLog
WebKit/win/WebKit.vcproj/WebKit.def
WebKit/win/WebKit.vcproj/WebKit_debug.def
WebKit/win/WebLocalizableStrings.cpp

index 90b5897..c75947c 100644 (file)
 
 2007-12-07  Adam Roben  <aroben@apple.com>
 
+        Make WebLocalizableStrings work a little more like the Mac version
+
+        Reviewed by Steve.
+
+        * WebKit.vcproj/WebKit.def: Deprecated SetWebLocalizedStringMainBundle.
+        * WebKit.vcproj/WebKit_debug.def: Ditto.
+        * WebLocalizableStrings.cpp:
+        (createWebKitBundle): Changed to only create the bundle once.
+        (cfBundleForStringsBundle): Added. Code was factored out of
+        copyLocalizedStringFromBundle. We now use the CFBundleGetMainBundle to
+        get the main bundle and WebLocalizableStringsBundle's identifier to
+        fetch the framework's bundle.
+        (copyLocalizedStringFromBundle): Changed to call
+        cfBundleForStringsBundle.
+        (cacheString): Cleaned up logic a bit with an early return.
+        (SetWebLocalizedStringMainBundle): Moved down with the other
+        deprecated functions and made into a no-op.
+
+2007-12-07  Adam Roben  <aroben@apple.com>
+
         Use SoftLinking.h in WebKitClassFactory.
 
         Reviewed by Oliver.
index a5e14fc..b477654 100644 (file)
@@ -90,7 +90,6 @@ EXPORTS
 ;      KJS_JSObject_JSObjectToString
         WebLocalizedStringUTF8
         WebLocalizedLPCTSTRUTF8
-        SetWebLocalizedStringMainBundle
         DrawTextAtPoint
         WebDrawText
         FontMetrics
@@ -105,3 +104,4 @@ EXPORTS
         ; These functions are deprecated
         WebLocalizedString
         WebLocalizedLPCTSTR
+        SetWebLocalizedStringMainBundle
index 9da2e1f..74fb9de 100644 (file)
@@ -90,7 +90,6 @@ EXPORTS
 ;       KJS_JSObject_JSObjectToString
         WebLocalizedStringUTF8
         WebLocalizedLPCTSTRUTF8
-        SetWebLocalizedStringMainBundle
         DrawTextAtPoint
         WebDrawText
         FontMetrics
@@ -107,3 +106,4 @@ EXPORTS
         ; These functions are deprecated
         WebLocalizedString
         WebLocalizedLPCTSTR
+        SetWebLocalizedStringMainBundle
index 508725e..2051b41 100644 (file)
@@ -43,12 +43,18 @@ using namespace WebCore;
 
 WebLocalizableStringsBundle WebKitLocalizableStringsBundle = { "com.apple.WebKit", 0 };
 
-static CFBundleRef localizedStringsMainBundle;
 static HashMap<String, String> mainBundleLocStrings;
 static HashMap<String, String> frameworkLocStrings;
 
 static CFBundleRef createWebKitBundle()
 {
+    static CFBundleRef bundle;
+    static bool initialized;
+
+    if (initialized)
+        return bundle;
+    initialized = true;
+
     WCHAR pathStr[MAX_PATH];
     DWORD length = ::GetModuleFileNameW(gInstance, pathStr, MAX_PATH);
     if (!length || (length == MAX_PATH && GetLastError() == ERROR_INSUFFICIENT_BUFFER))
@@ -82,42 +88,32 @@ static CFBundleRef createWebKitBundle()
     if (!bundleURLRef)
         return 0;
 
-    CFBundleRef bundle = CFBundleCreate(0, bundleURLRef);
+    bundle = CFBundleCreate(0, bundleURLRef);
     CFRelease(bundleURLRef);
     return bundle;
 }
 
-void SetWebLocalizedStringMainBundle(CFBundleRef bundle)
+static CFBundleRef cfBundleForStringsBundle(WebLocalizableStringsBundle* stringsBundle)
 {
-    if (bundle)
-        CFRetain(bundle);
-    if (localizedStringsMainBundle)
-        CFRelease(localizedStringsMainBundle);
-    localizedStringsMainBundle = bundle;
+    if (!stringsBundle) {
+        static CFBundleRef mainBundle = CFBundleGetMainBundle();
+        return mainBundle;
+    }
+
+    createWebKitBundle();
+
+    if (!stringsBundle->bundle)
+        stringsBundle->bundle = CFBundleGetBundleWithIdentifier(RetainPtr<CFStringRef>(AdoptCF, CFStringCreateWithCString(0, stringsBundle->identifier, kCFStringEncodingASCII)).get());
+    return stringsBundle->bundle;
 }
 
 static CFStringRef copyLocalizedStringFromBundle(WebLocalizableStringsBundle* stringsBundle, const String& key)
 {
     static CFStringRef notFound = CFSTR("localized string not found");
 
-    CFBundleRef bundle;
-    if (!stringsBundle) {
-        static CFBundleRef mainBundle;
-        if (!mainBundle) {
-            mainBundle = localizedStringsMainBundle;
-            if (!mainBundle)
-                return notFound;
-        }
-        bundle = mainBundle;
-    } else {
-        bundle = stringsBundle->bundle;
-        if (!bundle) {
-            bundle = createWebKitBundle();
-            if (!bundle)
-                return notFound;
-            stringsBundle->bundle = bundle;
-        }
-    }
+    CFBundleRef bundle = cfBundleForStringsBundle(stringsBundle);
+    if (!bundle)
+        return notFound;
 
     RetainPtr<CFStringRef> keyString(AdoptCF, key.createCFString());
     CFStringRef result = CFCopyLocalizedStringWithDefaultValue(keyString.get(), 0, bundle, notFound, 0);
@@ -146,10 +142,12 @@ static bool findCachedString(WebLocalizableStringsBundle* stringsBundle, const S
 
 static void cacheString(WebLocalizableStringsBundle* stringsBundle, const String& key, const String& value)
 {
-    if (!stringsBundle)
+    if (!stringsBundle) {
         mainBundleLocStrings.set(key, value);
-    else if (stringsBundle)
-        frameworkLocStrings.set(key, value);
+        return;
+    }
+
+    frameworkLocStrings.set(key, value);
 }
 
 static CFStringRef localizedString(WebLocalizableStringsBundle* stringsBundle, const String& key)
@@ -217,3 +215,7 @@ LPCTSTR WebLocalizedLPCTSTR(WebLocalizableStringsBundle* stringsBundle, LPCTSTR
 
     return localizedLPCTSTR(stringsBundle, String(key));
 }
+
+void SetWebLocalizedStringMainBundle(CFBundleRef)
+{
+}