Jacek Caban : mshtml: Added AcceptLanguage handling.

Alexandre Julliard julliard at winehq.org
Tue Nov 6 08:24:33 CST 2007


Module: wine
Branch: master
Commit: a3717bff1855f5c6a1c5ecbfae137dfb9deaf968
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a3717bff1855f5c6a1c5ecbfae137dfb9deaf968

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Nov  4 17:04:41 2007 +0100

mshtml: Added AcceptLanguage handling.

---

 dlls/mshtml/nsembed.c   |   43 +++++++++++++++++++++++++++++++++++++++++++
 dlls/mshtml/nsiface.idl |   27 +++++++++++++++++++++++++++
 2 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index 8cead97..9b8740d 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -45,6 +45,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 #define NS_EDITORCONTROLLER_CONTRACTID "@mozilla.org/editor/editorcontroller;1"
 #define NS_ARRAY_CONTRACTID "@mozilla.org/array;1"
 #define NS_VARIANT_CONTRACTID "@mozilla.org/variant;1"
+#define NS_PREFERENCES_CONTRACTID "@mozilla.org/preferences;1"
 
 #define APPSTARTUP_TOPIC "app-startup"
 
@@ -253,8 +254,39 @@ static BOOL load_wine_gecko(PRUnichar *gre_path)
     return ret;
 }
 
+static void set_lang(nsIPrefBranch *pref)
+{
+    char langs[100];
+    DWORD res, size, type;
+    HKEY hkey;
+    nsresult nsres;
+
+    static const WCHAR international_keyW[] =
+        {'S','o','f','t','w','a','r','e',
+         '\\','M','i','c','r','o','s','o','f','t',
+         '\\','I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r',
+         '\\','I','n','t','e','r','n','a','t','i','o','n','a','l',0};
+
+    res = RegOpenKeyW(HKEY_CURRENT_USER, international_keyW, &hkey);
+    if(res != ERROR_SUCCESS)
+        return;
+
+    size = sizeof(langs);
+    res = RegQueryValueExA(hkey, "AcceptLanguage", 0, &type, (LPBYTE)langs, &size);
+    RegCloseKey(hkey);
+    if(res != ERROR_SUCCESS || type != REG_SZ)
+        return;
+
+    TRACE("Setting lang %s\n", debugstr_a(langs));
+
+    nsres = nsIPrefBranch_SetCharPref(pref, "intl.accept_languages", langs);
+    if(NS_FAILED(nsres))
+        ERR("SetCharPref failed: %08x\n", nsres);
+}
+
 static void set_profile(void)
 {
+    nsIPrefBranch *pref;
     nsIProfile *profile;
     PRBool exists = FALSE;
     nsresult nsres;
@@ -280,6 +312,17 @@ static void set_profile(void)
         ERR("SetCurrentProfile failed: %08x\n", nsres);
 
     nsIProfile_Release(profile);
+
+    nsres = nsIServiceManager_GetServiceByContractID(pServMgr, NS_PREFERENCES_CONTRACTID,
+            &IID_nsIPrefBranch, (void**)&pref);
+    if(NS_FAILED(nsres)) {
+        ERR("Could not get preference service: %08x\n", nsres);
+        return;
+    }
+
+    set_lang(pref);
+
+    nsIPrefBranch_Release(pref);
 }
 
 static BOOL init_xpcom(const PRUnichar *gre_path)
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index 8b00fbd..aac9a87 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -1506,6 +1506,33 @@ interface nsIFile : nsISupports
 
 [
     object,
+    uuid(56c35506-f14b-11d3-99d3-ddbfac2ccf65)
+    /* FROZEN */
+]
+interface nsIPrefBranch : nsISupports
+{
+    nsresult GetRoot(char **aRoot);
+    nsresult GetPrefType(const char *aPrefName, PRInt32 *_retval);
+    nsresult GetBoolPref(const char *aPrefName, PRBool *_retval);
+    nsresult SetBoolPref(const char *aPrefName, PRInt32 aValue);
+    nsresult GetCharPref(const char *aPrefName, char **_retval);
+    nsresult SetCharPref(const char *aPrefName, const char *aValue);
+    nsresult GetIntPref(const char *aPrefName, PRInt32 *_retval);
+    nsresult SetIntPref(const char *aPrefName, PRInt32 aValue);
+    nsresult GetComplexValue(const char *aPrefName, const nsIID *aType, void **aValue);
+    nsresult SetComplexValue(const char *aPrefName, const nsIID *aType, nsISupports *aValue);
+    nsresult ClearUserPref(const char *aPrefName);
+    nsresult LockPref(const char *aPrefName);
+    nsresult PrefHasUserValue(const char *aPrefName, PRBool *_retval);
+    nsresult PrefIsLocked(const char *aPrefName, PRBool *_retval);
+    nsresult UnlockPref(const char *aPrefName);
+    nsresult DeleteBranch(const char *aStartingAt);
+    nsresult GetChildList(const char *aStartingAt, PRUint32 *aCount, char ***aChildArray);
+    nsresult ResetBranch(const char *aStartingAt);
+}
+
+[
+    object,
     uuid(15fd6940-8ea7-11d3-93ad-00104ba0fd40)
     /* FROZEN */
 ]




More information about the wine-cvs mailing list