https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5bd03d8b97c4a3c0344f864dd36feb735f2103a2
commit 5bd03d8b97c4a3c0344f864dd36feb735f2103a2 Author: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> AuthorDate: Thu Sep 8 11:00:04 2022 +0900 Commit: Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com> CommitDate: Thu Sep 8 11:00:04 2022 +0900 [NTUSER] Implement IntReorderKeyboardLayouts This function is provided for KLF_REORDER flag. CORE-11700 --- win32ss/user/ntuser/kbdlayout.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/win32ss/user/ntuser/kbdlayout.c b/win32ss/user/ntuser/kbdlayout.c index d41f53d3472..45e055d8758 100644 --- a/win32ss/user/ntuser/kbdlayout.c +++ b/win32ss/user/ntuser/kbdlayout.c @@ -745,10 +745,20 @@ co_UserActivateKeyboardLayout( VOID FASTCALL IntReorderKeyboardLayouts( _Inout_ PWINSTATION_OBJECT pWinSta, - _Inout_ PKL pKL) + _Inout_ PKL pNewKL) { - /* FIXME */ - gspklBaseLayout = pKL; + PKL pOldKL = gspklBaseLayout; + + if ((pWinSta->Flags & WSS_NOIO) || pNewKL == pOldKL) + return; + + pNewKL->pklPrev->pklNext = pNewKL->pklNext; + pNewKL->pklNext->pklPrev = pNewKL->pklPrev; + pNewKL->pklNext = pOldKL; + pNewKL->pklPrev = pOldKL->pklPrev; + pOldKL->pklPrev->pklNext = pNewKL; + pOldKL->pklPrev = pNewKL; + gspklBaseLayout = pNewKL; /* Should we use UserAssignmentLock? */ } /* Win: xxxActivateKeyboardLayout */