mirror of
https://github.com/reactos/reactos.git
synced 2025-05-06 18:31:26 +00:00
This reverts commit ea2d32b9eb
.
This commit is contained in:
parent
0c324e350e
commit
5d123ce5f1
2 changed files with 16 additions and 47 deletions
|
@ -999,8 +999,6 @@ cleanup:
|
||||||
* NtUserLoadKeyboardLayoutEx
|
* NtUserLoadKeyboardLayoutEx
|
||||||
*
|
*
|
||||||
* Loads keyboard layout with given locale id
|
* Loads keyboard layout with given locale id
|
||||||
*
|
|
||||||
* NOTE: We adopt a different design from Microsoft's one for security reason.
|
|
||||||
*/
|
*/
|
||||||
HKL
|
HKL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
|
|
|
@ -640,8 +640,6 @@ LoadKeyboardLayoutA(LPCSTR pszKLID,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @unimplemented
|
||||||
*
|
|
||||||
* NOTE: We adopt a different design from Microsoft's one for security reason.
|
|
||||||
*/
|
*/
|
||||||
/* Win: LoadKeyboardLayoutWorker */
|
/* Win: LoadKeyboardLayoutWorker */
|
||||||
HKL APIENTRY
|
HKL APIENTRY
|
||||||
|
@ -652,25 +650,16 @@ IntLoadKeyboardLayout(
|
||||||
_In_ UINT Flags,
|
_In_ UINT Flags,
|
||||||
_In_ BOOL unknown5)
|
_In_ BOOL unknown5)
|
||||||
{
|
{
|
||||||
DWORD dwHKL, dwType, dwSize;
|
DWORD dwhkl, dwType, dwSize;
|
||||||
WORD wKeybdLangID, wLayoutID;
|
|
||||||
UNICODE_STRING ustrKbdName;
|
UNICODE_STRING ustrKbdName;
|
||||||
UNICODE_STRING ustrKLID;
|
UNICODE_STRING ustrKLID;
|
||||||
WCHAR wszRegKey[256] = L"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
|
WCHAR wszRegKey[256] = L"SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\";
|
||||||
WCHAR wszLayoutId[10], wszNewKLID[10], szImeFileName[80];
|
WCHAR wszLayoutId[10], wszNewKLID[10];
|
||||||
WCHAR *endptr;
|
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
HKL hInputKL, hNewKL;
|
HKL hNewKL;
|
||||||
|
|
||||||
hInputKL = (HKL)UlongToHandle(wcstoul(pwszKLID, &endptr, 16));
|
/* LOWORD of dwhkl is Locale Identifier */
|
||||||
if ((endptr - pwszKLID) != 8)
|
dwhkl = LOWORD(wcstoul(pwszKLID, NULL, 16));
|
||||||
{
|
|
||||||
ERR("pwszKLID: '%S'\n", pwszKLID);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wKeybdLangID = LOWORD(hInputKL); /* language identifier */
|
|
||||||
wLayoutID = HIWORD(hInputKL); /* layout identifier */
|
|
||||||
|
|
||||||
if (Flags & KLF_SUBSTITUTE_OK)
|
if (Flags & KLF_SUBSTITUTE_OK)
|
||||||
{
|
{
|
||||||
|
@ -694,32 +683,19 @@ IntLoadKeyboardLayout(
|
||||||
StringCbCatW(wszRegKey, sizeof(wszRegKey), pwszKLID);
|
StringCbCatW(wszRegKey, sizeof(wszRegKey), pwszKLID);
|
||||||
|
|
||||||
/* Open layout registry key for read */
|
/* Open layout registry key for read */
|
||||||
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, wszRegKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, wszRegKey, 0,
|
||||||
|
KEY_READ, &hKey) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
/* Check "Layout Id" value */
|
|
||||||
dwSize = sizeof(wszLayoutId);
|
dwSize = sizeof(wszLayoutId);
|
||||||
if (RegQueryValueExW(hKey, L"Layout Id", NULL, &dwType, (LPBYTE)wszLayoutId, &dwSize) == ERROR_SUCCESS)
|
if (RegQueryValueExW(hKey, L"Layout Id", NULL, &dwType, (LPBYTE)wszLayoutId, &dwSize) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
/* If Layout Id is specified, use this value | f000 as HIWORD */
|
/* If Layout Id is specified, use this value | f000 as HIWORD */
|
||||||
/* FIXME: Microsoft Office expects this value to be something specific
|
/* FIXME: Microsoft Office expects this value to be something specific
|
||||||
* for Japanese and Korean Windows with an IME the value is 0xe001
|
* for Japanese and Korean Windows with an IME the value is 0xe001
|
||||||
|
* We should probably check to see if an IME exists and if so then
|
||||||
|
* set this word properly.
|
||||||
*/
|
*/
|
||||||
wLayoutID = 0xF000 | LOWORD(wcstol(wszLayoutId, NULL, 16));
|
dwhkl |= (0xf000 | wcstol(wszLayoutId, NULL, 16)) << 16;
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_IME_HKL(hInputKL)) /* IME? */
|
|
||||||
{
|
|
||||||
/* Check "IME File" value */
|
|
||||||
dwSize = sizeof(szImeFileName);
|
|
||||||
if (RegQueryValueExW(hKey, L"IME File", NULL, &dwType, (LPBYTE)szImeFileName,
|
|
||||||
&dwSize) != ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* FIXME: We should probably check to see if an IME exists and if so then
|
|
||||||
* set this word properly.
|
|
||||||
*/
|
|
||||||
wLayoutID = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Close the key now */
|
/* Close the key now */
|
||||||
|
@ -731,20 +707,15 @@ IntLoadKeyboardLayout(
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_IME_HKL(hInputKL) && wLayoutID) /* IME? */
|
/* If Layout Id is not given HIWORD == LOWORD (for dwhkl) */
|
||||||
{
|
if (!HIWORD(dwhkl))
|
||||||
dwHKL = HandleToUlong(hInputKL);
|
dwhkl |= dwhkl << 16;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!wLayoutID)
|
|
||||||
wLayoutID = wKeybdLangID;
|
|
||||||
dwHKL = MAKELONG(wKeybdLangID, wLayoutID);
|
|
||||||
}
|
|
||||||
|
|
||||||
ZeroMemory(&ustrKbdName, sizeof(ustrKbdName));
|
ZeroMemory(&ustrKbdName, sizeof(ustrKbdName));
|
||||||
RtlInitUnicodeString(&ustrKLID, pwszKLID);
|
RtlInitUnicodeString(&ustrKLID, pwszKLID);
|
||||||
hNewKL = NtUserLoadKeyboardLayoutEx(NULL, 0, &ustrKbdName, NULL, &ustrKLID, dwHKL, Flags);
|
hNewKL = NtUserLoadKeyboardLayoutEx(NULL, 0, &ustrKbdName,
|
||||||
|
NULL, &ustrKLID,
|
||||||
|
dwhkl, Flags);
|
||||||
CliImmInitializeHotKeys(SETIMEHOTKEY_ADD, hNewKL);
|
CliImmInitializeHotKeys(SETIMEHOTKEY_ADD, hNewKL);
|
||||||
return hNewKL;
|
return hNewKL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue