mirror of
https://github.com/reactos/reactos.git
synced 2025-05-27 21:18:15 +00:00
[NTUSER] Use co_UserActivateKeyboardLayout in loading (#7200)
Refactoring on keyboard layout. JIRA issue: CORE-19268 - Delete co_UserActivateKbl function. Use co_UserActivateKeyboardLayout function instead of co_UserActivateKbl in co_IntLoadKeyboardLayoutEx function. - Improve co_UserActivateKeyboardLayout.
This commit is contained in:
parent
ea936478f5
commit
7e8de0466d
1 changed files with 24 additions and 55 deletions
|
@ -23,7 +23,7 @@ PKL gspklBaseLayout = NULL; /* FIXME: Please move this to pWinSta->spklList */
|
||||||
PKBDFILE gpkfList = NULL;
|
PKBDFILE gpkfList = NULL;
|
||||||
DWORD gSystemFS = 0;
|
DWORD gSystemFS = 0;
|
||||||
UINT gSystemCPCharSet = 0;
|
UINT gSystemCPCharSet = 0;
|
||||||
DWORD gLCIDSentToShell = 0;
|
HKL ghKLSentToShell = NULL;
|
||||||
|
|
||||||
typedef PVOID (*PFN_KBDLAYERDESCRIPTOR)(VOID);
|
typedef PVOID (*PFN_KBDLAYERDESCRIPTOR)(VOID);
|
||||||
|
|
||||||
|
@ -592,41 +592,6 @@ UserSetDefaultInputLang(HKL hKl)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* co_UserActivateKbl
|
|
||||||
*
|
|
||||||
* Activates given layout in specified thread
|
|
||||||
*/
|
|
||||||
static PKL
|
|
||||||
co_UserActivateKbl(PTHREADINFO pti, PKL pKl, UINT Flags)
|
|
||||||
{
|
|
||||||
PKL pklPrev;
|
|
||||||
PWND pWnd;
|
|
||||||
|
|
||||||
pklPrev = pti->KeyboardLayout;
|
|
||||||
|
|
||||||
UserAssignmentLock((PVOID*)&(pti->KeyboardLayout), pKl);
|
|
||||||
pti->pClientInfo->hKL = pKl->hkl;
|
|
||||||
|
|
||||||
if (Flags & KLF_SETFORPROCESS)
|
|
||||||
{
|
|
||||||
FIXME("KLF_SETFORPROCESS\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(pWnd = pti->MessageQueue->spwndFocus))
|
|
||||||
{
|
|
||||||
pWnd = pti->MessageQueue->spwndActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send WM_INPUTLANGCHANGE to thread's focus window
|
|
||||||
co_IntSendMessage( pWnd ? UserHMGetHandle(pWnd) : 0,
|
|
||||||
WM_INPUTLANGCHANGE,
|
|
||||||
(WPARAM)pKl->iBaseCharset, // FIXME: How to set it?
|
|
||||||
(LPARAM)pKl->hkl); // hkl
|
|
||||||
|
|
||||||
return pklPrev;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID APIENTRY
|
VOID APIENTRY
|
||||||
IntImmActivateLayout(
|
IntImmActivateLayout(
|
||||||
_Inout_ PTHREADINFO pti,
|
_Inout_ PTHREADINFO pti,
|
||||||
|
@ -702,10 +667,10 @@ HKL APIENTRY
|
||||||
co_UserActivateKeyboardLayout(
|
co_UserActivateKeyboardLayout(
|
||||||
_Inout_ PKL pKL,
|
_Inout_ PKL pKL,
|
||||||
_In_ ULONG uFlags,
|
_In_ ULONG uFlags,
|
||||||
_Inout_ PWND pWnd)
|
_In_opt_ PWND pWnd)
|
||||||
{
|
{
|
||||||
HKL hOldKL = NULL;
|
HKL hOldKL = NULL;
|
||||||
PKL pOldKL = NULL;
|
PKL pOldKL;
|
||||||
PTHREADINFO pti = GetW32ThreadInfo();
|
PTHREADINFO pti = GetW32ThreadInfo();
|
||||||
PWND pTargetWnd, pImeWnd;
|
PWND pTargetWnd, pImeWnd;
|
||||||
HWND hTargetWnd, hImeWnd;
|
HWND hTargetWnd, hImeWnd;
|
||||||
|
@ -716,12 +681,9 @@ co_UserActivateKeyboardLayout(
|
||||||
IntReferenceThreadInfo(pti);
|
IntReferenceThreadInfo(pti);
|
||||||
ClientInfo = pti->pClientInfo;
|
ClientInfo = pti->pClientInfo;
|
||||||
|
|
||||||
if (pti->KeyboardLayout)
|
|
||||||
{
|
|
||||||
pOldKL = pti->KeyboardLayout;
|
pOldKL = pti->KeyboardLayout;
|
||||||
if (pOldKL)
|
if (pOldKL)
|
||||||
hOldKL = pOldKL->hkl;
|
hOldKL = pOldKL->hkl;
|
||||||
}
|
|
||||||
|
|
||||||
if (uFlags & KLF_RESET)
|
if (uFlags & KLF_RESET)
|
||||||
{
|
{
|
||||||
|
@ -734,7 +696,7 @@ co_UserActivateKeyboardLayout(
|
||||||
return hOldKL;
|
return hOldKL;
|
||||||
}
|
}
|
||||||
|
|
||||||
pKL->wchDiacritic = 0;
|
pKL->wchDiacritic = UNICODE_NULL;
|
||||||
|
|
||||||
if (pOldKL)
|
if (pOldKL)
|
||||||
UserRefObjectCo(pOldKL, &Ref1);
|
UserRefObjectCo(pOldKL, &Ref1);
|
||||||
|
@ -760,10 +722,15 @@ co_UserActivateKeyboardLayout(
|
||||||
ClientInfo->hKL = pKL->hkl;
|
ClientInfo->hKL = pKL->hkl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gptiForeground && (gptiForeground->ppi == pti->ppi))
|
/* Send shell message if necessary */
|
||||||
|
if (gptiForeground && (gptiForeground->ppi == pti->ppi) && ISITHOOKED(WH_SHELL))
|
||||||
|
{
|
||||||
|
/* Send the HKL if needed and remember it */
|
||||||
|
if (ghKLSentToShell != pKL->hkl)
|
||||||
{
|
{
|
||||||
/* Send shell message */
|
|
||||||
co_IntShellHookNotify(HSHELL_LANGUAGE, 0, (LPARAM)pKL->hkl);
|
co_IntShellHookNotify(HSHELL_LANGUAGE, 0, (LPARAM)pKL->hkl);
|
||||||
|
ghKLSentToShell = pKL->hkl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pti->MessageQueue)
|
if (pti->MessageQueue)
|
||||||
|
@ -787,14 +754,15 @@ co_UserActivateKeyboardLayout(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send WM_IME_SYSTEM:IMS_SENDNOTIFICATION message if necessary */
|
// Refresh IME UI via WM_IME_SYSTEM:IMS_SENDNOTIFICATION messaging
|
||||||
if (pti && !(pti->TIF_flags & TIF_CSRSSTHREAD))
|
if (!(pti->TIF_flags & TIF_CSRSSTHREAD))
|
||||||
{
|
{
|
||||||
if (IS_IME_HKL(pKL->hkl) || IS_CICERO_MODE())
|
if (IS_IME_HKL(pKL->hkl) || (IS_CICERO_MODE() && !IS_16BIT_MODE()))
|
||||||
{
|
{
|
||||||
pImeWnd = pti->spwndDefaultIme;
|
pImeWnd = pti->spwndDefaultIme;
|
||||||
if (pImeWnd)
|
if (pImeWnd)
|
||||||
{
|
{
|
||||||
|
bSetForProcess &= !IS_16BIT_MODE();
|
||||||
UserRefObjectCo(pImeWnd, &Ref2);
|
UserRefObjectCo(pImeWnd, &Ref2);
|
||||||
hImeWnd = UserHMGetHandle(pImeWnd);
|
hImeWnd = UserHMGetHandle(pImeWnd);
|
||||||
co_IntSendMessage(hImeWnd, WM_IME_SYSTEM, IMS_SENDNOTIFICATION, bSetForProcess);
|
co_IntSendMessage(hImeWnd, WM_IME_SYSTEM, IMS_SENDNOTIFICATION, bSetForProcess);
|
||||||
|
@ -815,7 +783,7 @@ co_IntActivateKeyboardLayout(
|
||||||
_Inout_ PWINSTATION_OBJECT pWinSta,
|
_Inout_ PWINSTATION_OBJECT pWinSta,
|
||||||
_In_ HKL hKL,
|
_In_ HKL hKL,
|
||||||
_In_ ULONG uFlags,
|
_In_ ULONG uFlags,
|
||||||
_Inout_ PWND pWnd)
|
_In_opt_ PWND pWnd)
|
||||||
{
|
{
|
||||||
PKL pKL;
|
PKL pKL;
|
||||||
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
|
||||||
|
@ -871,10 +839,10 @@ co_IntUnloadKeyboardLayoutEx(
|
||||||
|
|
||||||
UserDerefObjectCo(pKL); /* Release reference */
|
UserDerefObjectCo(pKL); /* Release reference */
|
||||||
|
|
||||||
if (pti->pDeskInfo->fsHooks)
|
if (ISITHOOKED(WH_SHELL))
|
||||||
{
|
{
|
||||||
co_IntShellHookNotify(HSHELL_LANGUAGE, 0, 0);
|
co_IntShellHookNotify(HSHELL_LANGUAGE, 0, 0);
|
||||||
gLCIDSentToShell = 0;
|
ghKLSentToShell = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -892,6 +860,7 @@ IntUnloadKeyboardLayout(_Inout_ PWINSTATION_OBJECT pWinSta, _In_ HKL hKL)
|
||||||
return co_IntUnloadKeyboardLayoutEx(pWinSta, pKL, 0);
|
return co_IntUnloadKeyboardLayoutEx(pWinSta, pKL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Invokes imm32!ImmLoadLayout and returns PIMEINFOEX
|
||||||
PIMEINFOEX FASTCALL co_UserImmLoadLayout(_In_ HKL hKL)
|
PIMEINFOEX FASTCALL co_UserImmLoadLayout(_In_ HKL hKL)
|
||||||
{
|
{
|
||||||
PIMEINFOEX piiex;
|
PIMEINFOEX piiex;
|
||||||
|
@ -980,7 +949,7 @@ co_IntLoadKeyboardLayoutEx(
|
||||||
|
|
||||||
/* Activate this layout in current thread */
|
/* Activate this layout in current thread */
|
||||||
if (Flags & KLF_ACTIVATE)
|
if (Flags & KLF_ACTIVATE)
|
||||||
co_UserActivateKbl(PsGetCurrentThreadWin32Thread(), pNewKL, Flags);
|
co_UserActivateKeyboardLayout(pNewKL, Flags, NULL);
|
||||||
|
|
||||||
/* Send shell message */
|
/* Send shell message */
|
||||||
if (!(Flags & KLF_NOTELLSHELL))
|
if (!(Flags & KLF_NOTELLSHELL))
|
||||||
|
|
Loading…
Reference in a new issue