From 5bd03d8b97c4a3c0344f864dd36feb735f2103a2 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 8 Sep 2022 11:00:04 +0900 Subject: [PATCH] [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 */