mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 14:37:45 +00:00
- Make NtUserLoadKeyboardLayoutEx accept 6 params
- Always get default locale from ntoskrnl - Fix some small bugs svn path=/trunk/; revision=25797
This commit is contained in:
parent
26b059ca40
commit
4db9f2ba75
|
@ -332,6 +332,7 @@ LRESULT MainDialogProc(HWND hDlg,
|
|||
case WM_INPUTLANGCHANGEREQUEST:
|
||||
{
|
||||
FormatMsg(L"dlg WM_INPUTLANGCHANGEREQUEST lParam=%x wParam=%x\n", lParam, wParam);
|
||||
UpdateData(hDlg);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,8 @@
|
|||
5 = gcc -O3 with -mpreferred-stack-boundary=2
|
||||
-->
|
||||
<property name="OPTIMIZE" value="1" />
|
||||
|
||||
|
||||
<!--
|
||||
Whether to compile for an uniprocessor or multiprocessor machine.
|
||||
-->
|
||||
|
|
|
@ -300,7 +300,7 @@ LoadKeyboardLayoutA(LPCSTR pwszKLID,
|
|||
{
|
||||
return NtUserLoadKeyboardLayoutEx(
|
||||
strtoul(pwszKLID, NULL, 16),
|
||||
Flags);
|
||||
Flags, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -315,7 +315,7 @@ LoadKeyboardLayoutW(LPCWSTR pwszKLID,
|
|||
// We will do things our own way.
|
||||
return NtUserLoadKeyboardLayoutEx(
|
||||
wcstoul(pwszKLID, NULL, 16),
|
||||
Flags);
|
||||
Flags, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1217,10 +1217,14 @@ NtUserKillTimer
|
|||
);
|
||||
|
||||
HKL
|
||||
NTAPI
|
||||
STDCALL
|
||||
NtUserLoadKeyboardLayoutEx(
|
||||
LCID LocaleId,
|
||||
UINT Flags);
|
||||
IN DWORD dwKLID,
|
||||
IN UINT Flags,
|
||||
IN DWORD Unused1,
|
||||
IN DWORD Unused2,
|
||||
IN DWORD Unused3,
|
||||
IN DWORD Unused4);
|
||||
|
||||
BOOL
|
||||
NTAPI
|
||||
|
|
|
@ -12,7 +12,7 @@ typedef struct _KBL
|
|||
HANDLE hModule;
|
||||
ULONG RefCount;
|
||||
HKL hkl;
|
||||
LCID lcid;
|
||||
DWORD klid; // Low word - language id. High word - device id.
|
||||
} KBL, *PKBL;
|
||||
|
||||
#define KBL_UNLOADED 0x20000000
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include <debug.h>
|
||||
|
||||
PKBL KBLList = NULL; // Keyboard layout list.
|
||||
PKBL DefaultKL = NULL;
|
||||
|
||||
typedef PVOID (*KbdLayerDescriptor)(VOID);
|
||||
NTSTATUS STDCALL LdrGetProcedureAddress(PVOID module,
|
||||
|
@ -193,13 +192,13 @@ static BOOL UserLoadKbdDll(WCHAR *wsKLID,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static PKBL UserLoadDllAndCreateKbl(LCID LocaleId)
|
||||
static PKBL UserLoadDllAndCreateKbl(DWORD LocaleId)
|
||||
{
|
||||
PKBL NewKbl;
|
||||
ULONG hKl;
|
||||
LANGID langid;
|
||||
|
||||
NewKbl = ExAllocatePool(PagedPool, sizeof(NewKbl));
|
||||
NewKbl = ExAllocatePool(PagedPool, sizeof(KBL));
|
||||
|
||||
if(!NewKbl)
|
||||
{
|
||||
|
@ -229,7 +228,7 @@ static PKBL UserLoadDllAndCreateKbl(LCID LocaleId)
|
|||
else hKl |= hKl << 16;
|
||||
|
||||
NewKbl->hkl = (HKL) hKl;
|
||||
NewKbl->lcid = LocaleId;
|
||||
NewKbl->klid = LocaleId;
|
||||
NewKbl->Flags = 0;
|
||||
NewKbl->RefCount = 0;
|
||||
|
||||
|
@ -238,7 +237,6 @@ static PKBL UserLoadDllAndCreateKbl(LCID LocaleId)
|
|||
|
||||
BOOL UserInitDefaultKeyboardLayout()
|
||||
{
|
||||
|
||||
LCID LocaleId;
|
||||
NTSTATUS Status;
|
||||
|
||||
|
@ -252,27 +250,60 @@ BOOL UserInitDefaultKeyboardLayout()
|
|||
DPRINT("DefaultLocale = %08lx\n", LocaleId);
|
||||
}
|
||||
|
||||
if(!NT_SUCCESS(Status) || !(DefaultKL = UserLoadDllAndCreateKbl(LocaleId)))
|
||||
if(!NT_SUCCESS(Status) || !(KBLList = UserLoadDllAndCreateKbl(LocaleId)))
|
||||
{
|
||||
DPRINT1("Trying to load US Keyboard Layout.\n");
|
||||
LocaleId = 0x409;
|
||||
|
||||
if(!(DefaultKL = UserLoadDllAndCreateKbl(LocaleId)))
|
||||
if(!(KBLList = UserLoadDllAndCreateKbl(LocaleId)))
|
||||
{
|
||||
DPRINT1("Failed to load any Keyboard Layout\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
InitializeListHead(&DefaultKL->List);
|
||||
KBLList = DefaultKL;
|
||||
InitializeListHead(&KBLList->List);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
PKBL W32kGetDefaultKeyLayout(VOID)
|
||||
{
|
||||
return DefaultKL;
|
||||
LCID LocaleId;
|
||||
NTSTATUS Status;
|
||||
PKBL pKbl;
|
||||
|
||||
// This is probably wrong...
|
||||
// I need to do more research.
|
||||
Status = ZwQueryDefaultLocale(FALSE, &LocaleId);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT1("Could not get default locale (%08lx).\n", Status);
|
||||
DPRINT1("Assuming default locale = 0x409 (US).\n");
|
||||
LocaleId = 0x409;
|
||||
}
|
||||
|
||||
pKbl = KBLList;
|
||||
do
|
||||
{
|
||||
if(pKbl->klid == LocaleId)
|
||||
{
|
||||
return pKbl;
|
||||
}
|
||||
|
||||
pKbl = (PKBL) pKbl->List.Flink;
|
||||
} while(pKbl != KBLList);
|
||||
|
||||
DPRINT("Loading new default keyboard layout.\n");
|
||||
pKbl = UserLoadDllAndCreateKbl(LocaleId);
|
||||
|
||||
if(!pKbl)
|
||||
{
|
||||
DPRINT1("Failed to load %x!!! Returning any availableKL.\n", LocaleId);
|
||||
return KBLList;
|
||||
}
|
||||
|
||||
InsertTailList(&KBLList->List, &pKbl->List);
|
||||
return pKbl;
|
||||
}
|
||||
|
||||
static PKBL UserHklToKbl(HKL hKl)
|
||||
|
@ -299,6 +330,8 @@ static PKBL UserActivateKbl(PW32THREAD Thread, PKBL pKbl)
|
|||
return Prev;
|
||||
}
|
||||
|
||||
/* EXPORTS *******************************************************************/
|
||||
|
||||
HKL FASTCALL
|
||||
UserGetKeyboardLayout(
|
||||
DWORD dwThreadId)
|
||||
|
@ -327,8 +360,6 @@ UserGetKeyboardLayout(
|
|||
return Ret;
|
||||
}
|
||||
|
||||
/* EXPORTS *******************************************************************/
|
||||
|
||||
UINT
|
||||
STDCALL
|
||||
NtUserGetKeyboardLayoutList(
|
||||
|
@ -408,8 +439,12 @@ NtUserGetKeyboardLayoutName(
|
|||
HKL
|
||||
STDCALL
|
||||
NtUserLoadKeyboardLayoutEx(
|
||||
IN LCID LocaleId,
|
||||
IN UINT Flags)
|
||||
IN DWORD dwKLID,
|
||||
IN UINT Flags,
|
||||
IN DWORD Unused1,
|
||||
IN DWORD Unused2,
|
||||
IN DWORD Unused3,
|
||||
IN DWORD Unused4)
|
||||
{
|
||||
HKL Ret = NULL;
|
||||
PKBL pKbl;
|
||||
|
@ -419,7 +454,7 @@ NtUserLoadKeyboardLayoutEx(
|
|||
pKbl = KBLList;
|
||||
do
|
||||
{
|
||||
if(pKbl->lcid == LocaleId)
|
||||
if(pKbl->klid == dwKLID)
|
||||
{
|
||||
Ret = pKbl->hkl;
|
||||
goto the_end;
|
||||
|
@ -428,7 +463,13 @@ NtUserLoadKeyboardLayoutEx(
|
|||
pKbl = (PKBL) pKbl->List.Flink;
|
||||
} while(pKbl != KBLList);
|
||||
|
||||
pKbl = UserLoadDllAndCreateKbl(LocaleId);
|
||||
pKbl = UserLoadDllAndCreateKbl(dwKLID);
|
||||
|
||||
if(!pKbl)
|
||||
{
|
||||
goto the_end;
|
||||
}
|
||||
|
||||
InsertTailList(&KBLList->List, &pKbl->List);
|
||||
Ret = pKbl->hkl;
|
||||
|
||||
|
|
|
@ -428,7 +428,7 @@ NtUserInternalGetWindowText 3
|
|||
NtUserIsClipboardFormatAvailable 1
|
||||
NtUserKillSystemTimer 2
|
||||
NtUserKillTimer 2
|
||||
NtUserLoadKeyboardLayoutEx 2
|
||||
NtUserLoadKeyboardLayoutEx 6
|
||||
NtUserLockWindowStation 1
|
||||
NtUserLockWindowUpdate 1
|
||||
NtUserLockWorkStation 0
|
||||
|
|
Loading…
Reference in a new issue