Make intl.cpl really switch InstallLanguage and Default entries of
NLS\Language key. Problem with freeldr solved in hacky way - it writes
now e.g. "0409" and not "00000409", as it generally should.
Modified: trunk/reactos/lib/cpl/intl/locale.c
_____
Modified: trunk/reactos/lib/cpl/intl/locale.c
--- trunk/reactos/lib/cpl/intl/locale.c 2005-05-06 16:07:51 UTC (rev
15048)
+++ trunk/reactos/lib/cpl/intl/locale.c 2005-05-06 16:21:30 UTC (rev
15049)
@@ -83,40 +83,43 @@
(LPARAM)langSel);
}
-/*
-static VOID
-ShowLanguagesList(HWND hwnd)
+// Sets new locale
+void SetNewLocale(LCID lcid)
{
- TIME_ZONE_INFORMATION TimeZoneInfo;
- PTIMEZONE_ENTRY Entry;
- DWORD dwIndex;
- DWORD i;
+ // HKCU\\Control Panel\\International\\Locale = 0409 (type=0)
+ //
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","Default",0x0000000
0,"0409" (type=0)
+ //
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0
x00000000,"0409" (type=0)
- GetTimeZoneInformation(&TimeZoneInfo);
+ // Set locale
+ HKEY localeKey;
+ HKEY langKey;
+ DWORD ret;
+ TCHAR value[9];
- dwIndex = 0;
- i = 0;
- Entry = TimeZoneListHead;
- while (Entry != NULL)
- {
- SendMessageW(hwnd,
- CB_ADDSTRING,
- 0,
- (LPARAM)Entry->Description);
+ ret = RegOpenKeyW(HKEY_CURRENT_USER, L"Control
Panel\\International", &localeKey);
- if (!wcscmp(Entry->StandardName, TimeZoneInfo.StandardName))
- dwIndex = i;
+ if (ret != ERROR_SUCCESS)
+ {
+ // some serious error
+ //TODO: Tell user about it
+ return;
+ }
- i++;
- Entry = Entry->Next;
- }
+ wsprintf(value, L"%04x", (DWORD)lcid);
- SendMessageW(hwnd,
- CB_SETCURSEL,
- (WPARAM)dwIndex,
- 0);
+ RegSetValueExW(localeKey, L"Locale", 0, REG_SZ, (BYTE *)value,
sizeof(value));
+ RegCloseKey(localeKey);
+
+ // Set language
+ ret = RegOpenKeyW(HKEY_LOCAL_MACHINE,
L"SYSTEM\\CurrentControlSet\\Control\\NLS\\Language", &langKey);
+
+ if (ret != ERROR_SUCCESS)
+ return;
+
+ RegSetValueExW(langKey, L"Default", 0, REG_SZ, (BYTE *)value,
sizeof(value));
+ RegSetValueExW(langKey, L"InstallLanguage", 0, REG_SZ, (BYTE
*)value, sizeof(value));
+ RegCloseKey(langKey);
}
-*/
/* Property page dialog callback */
INT_PTR CALLBACK
@@ -150,7 +153,6 @@
// Apply changes
LCID NewLcid;
int iCurSel;
- char tmp[100];
// Acquire new value
iCurSel = SendMessageW(hList,
@@ -167,12 +169,10 @@
if (NewLcid == CB_ERR)
break;
-
-
- //TOOD: Actually set new locale
-
- sprintf(tmp, "%x, cursel=%d", NewLcid,
iCurSel);
- MessageBoxA(hwndDlg, tmp, "debug",
MB_OK);
+
+
+ // Actually set new locale
+ SetNewLocale(NewLcid);
}
}
break;