diff --git a/win32ss/include/ntuser.h b/win32ss/include/ntuser.h index e6db897fa4b..3770d2761b9 100644 --- a/win32ss/include/ntuser.h +++ b/win32ss/include/ntuser.h @@ -3313,7 +3313,7 @@ NtUserSetSystemTimer( UINT uElapse, TIMERPROC lpTimerFunc); -DWORD +VOID NTAPI NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL); diff --git a/win32ss/user/ntuser/ntstubs.c b/win32ss/user/ntuser/ntstubs.c index 09b9473756a..000fd2bdf5d 100644 --- a/win32ss/user/ntuser/ntstubs.c +++ b/win32ss/user/ntuser/ntstubs.c @@ -1023,12 +1023,31 @@ Quit: return Status; } -DWORD +VOID APIENTRY NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL) { - STUB; - return 0; + PTHREADINFO pti; + PKL pOldKL, pNewKL; + + UserEnterExclusive(); + + pti = GetW32ThreadInfo(); + pOldKL = pti->KeyboardLayout; + if (pOldKL && pOldKL->hkl != hOldKL) + goto Quit; + + pNewKL = UserHklToKbl(hNewKL); + if (!pNewKL) + goto Quit; + + if (IS_IME_HKL(hNewKL) != IS_IME_HKL(hOldKL)) + pti->hklPrev = hOldKL; + + pti->KeyboardLayout = pNewKL; + +Quit: + UserLeave(); } BOOL