diff --git a/reactos/dll/cpl/input/add.c b/reactos/dll/cpl/input/add.c index 60da21fbcd7..a7dff1e2935 100644 --- a/reactos/dll/cpl/input/add.c +++ b/reactos/dll/cpl/input/add.c @@ -72,7 +72,7 @@ AddNewLayout(HWND hwndDlg) VOID CreateKeyboardLayoutList(VOID) { - HKEY hKey, hSubKey; + HKEY hKey; PTSTR pstrLayoutID; TCHAR szLayoutID[CCH_LAYOUT_ID + 1], KeyName[MAX_PATH]; DWORD dwIndex = 0; @@ -84,32 +84,22 @@ CreateKeyboardLayoutList(VOID) while (RegEnumKeyEx(hKey, dwIndex, szLayoutID, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { - wsprintf(KeyName, _T("System\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLayoutID); + GetLayoutName(szLayoutID, KeyName); - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, KeyName, 0, KEY_QUERY_VALUE, &hSubKey) == ERROR_SUCCESS) + INT iIndex = (INT) SendMessage(hLayoutList, CB_ADDSTRING, 0, (LPARAM)KeyName); + + pstrLayoutID = (PTSTR)HeapAlloc(hProcessHeap, 0, sizeof(szLayoutID)); + lstrcpy(pstrLayoutID, szLayoutID); + SendMessage(hLayoutList, CB_SETITEMDATA, iIndex, (LPARAM)pstrLayoutID); + + // FIXME! + if (_tcscmp(szLayoutID, _T("00000409")) == 0) { - DWORD dwKeyNameSize = sizeof(KeyName); - - if (RegQueryValueEx(hSubKey, _T("Layout Text"), NULL, NULL, (LPBYTE)KeyName, &dwKeyNameSize) == ERROR_SUCCESS) - { - INT iIndex = (INT) SendMessage(hLayoutList, CB_ADDSTRING, 0, (LPARAM)KeyName); - - pstrLayoutID = (PTSTR)HeapAlloc(hProcessHeap, 0, sizeof(szLayoutID)); - lstrcpy(pstrLayoutID, szLayoutID); - SendMessage(hLayoutList, CB_SETITEMDATA, iIndex, (LPARAM)pstrLayoutID); - - // FIXME! - if (_tcscmp(szLayoutID, _T("00000409")) == 0) - { - SendMessage(hLayoutList, CB_SETCURSEL, (WPARAM)iIndex, (LPARAM)0); - } - - dwIndex++; - } - - RegCloseKey(hSubKey); + SendMessage(hLayoutList, CB_SETCURSEL, (WPARAM)iIndex, (LPARAM)0); } + dwIndex++; + dwSize = sizeof(szLayoutID) / sizeof(TCHAR); } diff --git a/reactos/dll/cpl/input/input.h b/reactos/dll/cpl/input/input.h index 996a293f17f..79aecc9a511 100644 --- a/reactos/dll/cpl/input/input.h +++ b/reactos/dll/cpl/input/input.h @@ -38,7 +38,7 @@ InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc); INT_PTR CALLBACK SettingPageProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); BOOL -GetLayoutName(LPCTSTR lcid, LPTSTR name); +GetLayoutName(LPCTSTR szLCID, LPTSTR szName); VOID UpdateLayoutsList(VOID); diff --git a/reactos/dll/cpl/input/lang/bg-BG.rc b/reactos/dll/cpl/input/lang/bg-BG.rc index d8fb999957c..c36f2d960a1 100644 --- a/reactos/dll/cpl/input/lang/bg-BG.rc +++ b/reactos/dll/cpl/input/lang/bg-BG.rc @@ -223,4 +223,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Дхивехска малтийска" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Българска ЯВЕРТЪ" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Българска ЧШЕРТЪ" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/de-DE.rc b/reactos/dll/cpl/input/lang/de-DE.rc index 218552b77df..ee3e3a1f9be 100644 --- a/reactos/dll/cpl/input/lang/de-DE.rc +++ b/reactos/dll/cpl/input/lang/de-DE.rc @@ -224,4 +224,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi (Schreibmaschine)" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/el-GR.rc b/reactos/dll/cpl/input/lang/el-GR.rc index 2b1d7acba6f..04db1565d6d 100644 --- a/reactos/dll/cpl/input/lang/el-GR.rc +++ b/reactos/dll/cpl/input/lang/el-GR.rc @@ -223,4 +223,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/en-US.rc b/reactos/dll/cpl/input/lang/en-US.rc index 63ce0e59999..0bc81f301ad 100644 --- a/reactos/dll/cpl/input/lang/en-US.rc +++ b/reactos/dll/cpl/input/lang/en-US.rc @@ -222,5 +222,10 @@ BEGIN IDS_DIVEHI_PHONETIC_LAYOUT, "Divehi Phonetic" IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" - IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)" + IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS 5237-1978)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/es-ES.rc b/reactos/dll/cpl/input/lang/es-ES.rc index 1f93779a9f5..558cc0845b0 100644 --- a/reactos/dll/cpl/input/lang/es-ES.rc +++ b/reactos/dll/cpl/input/lang/es-ES.rc @@ -228,4 +228,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bъlgaro Fonйtico (Classic)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bъlgaro Fonйtico (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/fr-FR.rc b/reactos/dll/cpl/input/lang/fr-FR.rc index 7f4855d764e..e9668a5b98a 100644 --- a/reactos/dll/cpl/input/lang/fr-FR.rc +++ b/reactos/dll/cpl/input/lang/fr-FR.rc @@ -225,4 +225,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/it-IT.rc b/reactos/dll/cpl/input/lang/it-IT.rc index 8f266a23dff..b27a626301e 100644 --- a/reactos/dll/cpl/input/lang/it-IT.rc +++ b/reactos/dll/cpl/input/lang/it-IT.rc @@ -223,4 +223,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/pl-PL.rc b/reactos/dll/cpl/input/lang/pl-PL.rc index d76bae38f9f..8d5438afcfa 100644 --- a/reactos/dll/cpl/input/lang/pl-PL.rc +++ b/reactos/dll/cpl/input/lang/pl-PL.rc @@ -230,4 +230,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Malediwski (Maszynisty)" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Buіgarski (Fonetyczny)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Buіgarski (Fonetyczny, BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/ru-RU.rc b/reactos/dll/cpl/input/lang/ru-RU.rc index cf867e227e1..7c29a88c089 100644 --- a/reactos/dll/cpl/input/lang/ru-RU.rc +++ b/reactos/dll/cpl/input/lang/ru-RU.rc @@ -223,4 +223,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Дивихай машинопись" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Болгарская фонетическая (классическая)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Болгарская фонетическая (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Болгарская (BDS 5237-1978)" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/sk-SK.rc b/reactos/dll/cpl/input/lang/sk-SK.rc index fb8a44a491e..63adbdff852 100644 --- a/reactos/dll/cpl/input/lang/sk-SK.rc +++ b/reactos/dll/cpl/input/lang/sk-SK.rc @@ -227,4 +227,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/lang/uk-UA.rc b/reactos/dll/cpl/input/lang/uk-UA.rc index 93f616308a0..b70076ea671 100644 --- a/reactos/dll/cpl/input/lang/uk-UA.rc +++ b/reactos/dll/cpl/input/lang/uk-UA.rc @@ -232,4 +232,9 @@ BEGIN IDS_DIVEHI_TYPEWRITER_LAYOUT, "Мальдівська (друкарська машинка)" IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Болгарська фонетична (класична)" IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Болгарська фонетична (BDS)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" END diff --git a/reactos/dll/cpl/input/resource.h b/reactos/dll/cpl/input/resource.h index 4a375256506..444147b8879 100644 --- a/reactos/dll/cpl/input/resource.h +++ b/reactos/dll/cpl/input/resource.h @@ -185,6 +185,11 @@ #define IDS_DIVEHI_TYPEWRITER_LAYOUT 5133 #define IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT 5134 #define IDS_BULGARIAN_PHONETIC_BDS_LAYOUT 5135 +#define IDS_BULGARIAN_BDS_LAYOUT 5136 +#define IDS_GERMAN_RISTOME_LAYOUT 5137 +#define IDS_GERMAN_NEO_11_LAYOUT 5138 +#define IDS_GERMAN_DE_ERGO_LAYOUT 5139 +#define IDS_BURMESE_LAYOUT 5140 #endif /* __CPL_RESOURCE_H */ diff --git a/reactos/dll/cpl/input/settings.c b/reactos/dll/cpl/input/settings.c index 26677b5ccd2..2b6d50d4cd8 100644 --- a/reactos/dll/cpl/input/settings.c +++ b/reactos/dll/cpl/input/settings.c @@ -86,19 +86,58 @@ CreateLayoutIcon(LPTSTR szInd) } BOOL -GetLayoutName(LPCTSTR lcid, LPTSTR name) +GetLayoutName(LPCTSTR szLCID, LPTSTR szName) { HKEY hKey; DWORD dwBufLen; - TCHAR szBuf[MAX_PATH]; + TCHAR szBuf[MAX_PATH], szDispName[MAX_PATH], szIndex[MAX_PATH], szPath[MAX_PATH]; + HANDLE hLib; + int i, j, k; - wsprintf(szBuf, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), lcid); + wsprintf(szBuf, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)szBuf, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) { dwBufLen = sizeof(szBuf); - if (RegQueryValueEx(hKey, _T("Layout Text"), NULL, NULL, (LPBYTE)name, &dwBufLen) == ERROR_SUCCESS) + if (RegQueryValueEx(hKey, _T("Layout Display Name"), NULL, NULL, (LPBYTE)szDispName, &dwBufLen) == ERROR_SUCCESS) + { + if (szDispName[0] == '@') + { + for (i = 0; i < _tcslen(szDispName); i++) + { + if ((szDispName[i] == ',') && (szDispName[i + 1] == '-')) + { + for (j = i + 2, k = 0; j < _tcslen(szDispName)+1; j++, k++) + { + szIndex[k] = szDispName[j]; + } + szDispName[i - 1] = '\0'; + break; + } + else szDispName[i] = szDispName[i + 1]; + } + + if (ExpandEnvironmentStrings(szDispName, szPath, MAX_PATH)) + { + hLib = LoadLibrary(szPath); + if (hLib) + { + if (LoadString(hLib, _ttoi(szIndex), szPath, sizeof(szPath) / sizeof(TCHAR)) != 0) + { + _tcscpy(szName, szPath); + RegCloseKey(hKey); + return TRUE; + } + FreeLibrary(hLib); + } + } + } + } + + dwBufLen = sizeof(szBuf); + + if (RegQueryValueEx(hKey, _T("Layout Text"), NULL, NULL, (LPBYTE)szName, &dwBufLen) == ERROR_SUCCESS) { RegCloseKey(hKey); return TRUE;