mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
[NTUSER] Improve NtUserGetImeInfoEx / NtUserSetImeInfoEx
CORE-11700
This commit is contained in:
parent
4d724b6fbb
commit
9e7c2ba460
|
@ -954,11 +954,15 @@ Quit:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: GetImeInfoEx
|
// Win: GetImeInfoEx
|
||||||
BOOL FASTCALL UserGetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pInfoEx, IMEINFOEXCLASS SearchType)
|
BOOL FASTCALL
|
||||||
|
UserGetImeInfoEx(
|
||||||
|
_Inout_ PWINSTATION_OBJECT pWinSta,
|
||||||
|
_Inout_ PIMEINFOEX pInfoEx,
|
||||||
|
_In_ IMEINFOEXCLASS SearchType)
|
||||||
{
|
{
|
||||||
PKL pkl, pklHead;
|
PKL pkl, pklHead;
|
||||||
|
|
||||||
if (!gspklBaseLayout)
|
if (!pWinSta || !gspklBaseLayout)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pkl = pklHead = gspklBaseLayout;
|
pkl = pklHead = gspklBaseLayout;
|
||||||
|
@ -971,7 +975,10 @@ BOOL FASTCALL UserGetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pInfoEx, IMEINFOEXCLA
|
||||||
if (pInfoEx->hkl == pkl->hkl)
|
if (pInfoEx->hkl == pkl->hkl)
|
||||||
{
|
{
|
||||||
if (!pkl->piiex)
|
if (!pkl->piiex)
|
||||||
|
{
|
||||||
|
ERR("!pkl->piiex at %p\n", pkl->hkl);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
*pInfoEx = *pkl->piiex;
|
*pInfoEx = *pkl->piiex;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -984,12 +991,18 @@ BOOL FASTCALL UserGetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pInfoEx, IMEINFOEXCLA
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (pkl->piiex &&
|
if (_wcsnicmp(pkl->piiex->wszImeFile, pInfoEx->wszImeFile,
|
||||||
_wcsnicmp(pkl->piiex->wszImeFile, pInfoEx->wszImeFile,
|
|
||||||
RTL_NUMBER_OF(pkl->piiex->wszImeFile)) == 0)
|
RTL_NUMBER_OF(pkl->piiex->wszImeFile)) == 0)
|
||||||
{
|
{
|
||||||
*pInfoEx = *pkl->piiex;
|
if (pkl->piiex)
|
||||||
return TRUE;
|
{
|
||||||
|
*pInfoEx = *pkl->piiex;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ERR("!pkl->piiex at %p\n", pkl->hkl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pkl = pkl->pklNext;
|
pkl = pkl->pklNext;
|
||||||
|
@ -1011,6 +1024,7 @@ NtUserGetImeInfoEx(
|
||||||
{
|
{
|
||||||
IMEINFOEX ImeInfoEx;
|
IMEINFOEX ImeInfoEx;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
PWINSTATION_OBJECT pWinSta;
|
||||||
|
|
||||||
UserEnterShared();
|
UserEnterShared();
|
||||||
|
|
||||||
|
@ -1031,7 +1045,8 @@ NtUserGetImeInfoEx(
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
ret = UserGetImeInfoEx(NULL, &ImeInfoEx, SearchType);
|
pWinSta = IntGetProcessWindowStation(NULL);
|
||||||
|
ret = UserGetImeInfoEx(pWinSta, &ImeInfoEx, SearchType);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
goto Quit;
|
goto Quit;
|
||||||
|
|
||||||
|
@ -1081,10 +1096,16 @@ Quit:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Win: SetImeInfoEx
|
// Win: SetImeInfoEx
|
||||||
BOOL FASTCALL UserSetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pImeInfoEx)
|
BOOL FASTCALL
|
||||||
|
UserSetImeInfoEx(
|
||||||
|
_Inout_ PWINSTATION_OBJECT pWinSta,
|
||||||
|
_Inout_ PIMEINFOEX pImeInfoEx)
|
||||||
{
|
{
|
||||||
PKL pklHead, pkl;
|
PKL pklHead, pkl;
|
||||||
|
|
||||||
|
if (!pWinSta || !gspklBaseLayout)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
pkl = pklHead = gspklBaseLayout;
|
pkl = pklHead = gspklBaseLayout;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -1096,7 +1117,10 @@ BOOL FASTCALL UserSetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pImeInfoEx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pkl->piiex)
|
if (!pkl->piiex)
|
||||||
|
{
|
||||||
|
ERR("!pkl->piiex at %p\n", pkl->hkl);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!pkl->piiex->fLoadFlag)
|
if (!pkl->piiex->fLoadFlag)
|
||||||
*pkl->piiex = *pImeInfoEx;
|
*pkl->piiex = *pImeInfoEx;
|
||||||
|
@ -1113,6 +1137,7 @@ NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx)
|
||||||
{
|
{
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
IMEINFOEX ImeInfoEx;
|
IMEINFOEX ImeInfoEx;
|
||||||
|
PWINSTATION_OBJECT pWinSta;
|
||||||
|
|
||||||
UserEnterExclusive();
|
UserEnterExclusive();
|
||||||
|
|
||||||
|
@ -1133,7 +1158,8 @@ NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx)
|
||||||
}
|
}
|
||||||
_SEH2_END;
|
_SEH2_END;
|
||||||
|
|
||||||
ret = UserSetImeInfoEx(NULL, &ImeInfoEx);
|
pWinSta = IntGetProcessWindowStation(NULL);
|
||||||
|
ret = UserSetImeInfoEx(pWinSta, &ImeInfoEx);
|
||||||
|
|
||||||
Quit:
|
Quit:
|
||||||
UserLeave();
|
UserLeave();
|
||||||
|
|
Loading…
Reference in a new issue