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