mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 02:10:07 +00:00
parent
914f14a8b9
commit
1bc9dda5e6
|
@ -27,6 +27,13 @@ PWND FASTCALL IntGetTopLevelWindow(PWND pwnd)
|
||||||
return pwnd;
|
return pwnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HIMC FASTCALL IntAssociateInputContext(PWND pWnd, PIMC pImc)
|
||||||
|
{
|
||||||
|
HIMC hOldImc = pWnd->hImc;
|
||||||
|
pWnd->hImc = (pImc ? UserHMGetHandle(pImc) : NULL);
|
||||||
|
return hOldImc;
|
||||||
|
}
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
APIENTRY
|
APIENTRY
|
||||||
NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL)
|
NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL)
|
||||||
|
@ -612,20 +619,49 @@ BOOL APIENTRY NtUserDestroyInputContext(HIMC hIMC)
|
||||||
{
|
{
|
||||||
PIMC pIMC;
|
PIMC pIMC;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
HWND *phwnd;
|
||||||
|
PWND pWnd;
|
||||||
|
PWINDOWLIST pwl;
|
||||||
|
PTHREADINFO pti;
|
||||||
|
|
||||||
UserEnterExclusive();
|
UserEnterExclusive();
|
||||||
|
|
||||||
if (!(gpsi->dwSRVIFlags & SRVINFO_IMM32))
|
if (!IS_IMM_MODE())
|
||||||
{
|
{
|
||||||
EngSetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
EngSetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||||
UserLeave();
|
goto Quit;
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pIMC = UserGetObject(gHandleTable, hIMC, TYPE_INPUTCONTEXT);
|
pIMC = UserGetObjectNoErr(gHandleTable, hIMC, TYPE_INPUTCONTEXT);
|
||||||
if (pIMC)
|
if (!pIMC)
|
||||||
ret = UserDereferenceObject(pIMC);
|
goto Quit;
|
||||||
|
|
||||||
|
pti = pIMC->head.pti;
|
||||||
|
if (pti != GetW32ThreadInfo() || pIMC == pti->spDefaultImc)
|
||||||
|
goto Quit;
|
||||||
|
|
||||||
|
UserMarkObjectDestroy(pIMC);
|
||||||
|
|
||||||
|
pwl = IntBuildHwndList(pti->rpdesk->pDeskInfo->spwnd->spwndChild,
|
||||||
|
IACE_CHILDREN | IACE_LIST, pti);
|
||||||
|
if (pwl)
|
||||||
|
{
|
||||||
|
for (phwnd = pwl->ahwnd; *phwnd != HWND_TERMINATOR; ++phwnd)
|
||||||
|
{
|
||||||
|
pWnd = ValidateHwndNoErr(*phwnd);
|
||||||
|
if (!pWnd)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pWnd->hImc == hIMC)
|
||||||
|
IntAssociateInputContext(pWnd, pti->spDefaultImc);
|
||||||
|
}
|
||||||
|
|
||||||
|
IntFreeHwndList(pwl);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = UserDeleteObject(hIMC, TYPE_INPUTCONTEXT);
|
||||||
|
|
||||||
|
Quit:
|
||||||
UserLeave();
|
UserLeave();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -695,13 +731,6 @@ Quit:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
HIMC FASTCALL IntAssociateInputContext(PWND pWnd, PIMC pImc)
|
|
||||||
{
|
|
||||||
HIMC hOldImc = pWnd->hImc;
|
|
||||||
pWnd->hImc = (pImc ? UserHMGetHandle(pImc) : NULL);
|
|
||||||
return hOldImc;
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD FASTCALL IntAssociateInputContextEx(PWND pWnd, PIMC pIMC, DWORD dwFlags)
|
DWORD FASTCALL IntAssociateInputContextEx(PWND pWnd, PIMC pIMC, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DWORD ret = 0;
|
DWORD ret = 0;
|
||||||
|
|
Loading…
Reference in a new issue