APIENTRY
NtUserGetAppImeLevel(HWND hWnd)
{
- STUB;
- return 0;
+ DWORD ret = 0;
+ PWND pWnd;
+ PTHREADINFO pti;
+
+ UserEnterShared();
+
+ pWnd = ValidateHwndNoErr(hWnd);
+ if (!pWnd)
+ goto Quit;
+
+ if (!IS_IMM_MODE())
+ {
+ EngSetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ goto Quit;
+ }
+
+ pti = PsGetCurrentThreadWin32Thread();
+ if (pWnd->head.pti->ppi == pti->ppi)
+ ret = (DWORD)(ULONG_PTR)UserGetProp(pWnd, AtomImeLevel, TRUE);
+
+Quit:
+ UserLeave();
+ return ret;
}
BOOL FASTCALL UserGetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pInfoEx, IMEINFOEXCLASS SearchType)
return ret;
}
-DWORD
+BOOL
APIENTRY
-NtUserSetAppImeLevel(
- DWORD dwUnknown1,
- DWORD dwUnknown2)
+NtUserSetAppImeLevel(HWND hWnd, DWORD dwLevel)
{
- STUB;
- return 0;
+ BOOL ret = FALSE;
+ PWND pWnd;
+ PTHREADINFO pti;
+
+ UserEnterExclusive();
+
+ pWnd = ValidateHwndNoErr(hWnd);
+ if (!pWnd)
+ goto Quit;
+
+ if (!IS_IMM_MODE())
+ {
+ EngSetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ goto Quit;
+ }
+
+ pti = PsGetCurrentThreadWin32Thread();
+ if (pWnd->head.pti->ppi == pti->ppi)
+ ret = UserSetProp(pWnd, AtomImeLevel, (HANDLE)(ULONG_PTR)dwLevel, TRUE);
+
+Quit:
+ UserLeave();
+ return ret;
}
BOOL FASTCALL UserSetImeInfoEx(LPVOID pUnknown, PIMEINFOEX pImeInfoEx)
HINSTANCE hModClient = NULL;
BOOL ClientPfnInit = FALSE;
ATOM gaGuiConsoleWndClass;
+ATOM AtomImeLevel;
/* PRIVATE FUNCTIONS **********************************************************/
AtomDDETrack = IntAddGlobalAtom(L"SysDT", TRUE);
AtomQOS = IntAddGlobalAtom(L"SysQOS", TRUE);
+ AtomImeLevel = IntAddGlobalAtom(L"SysIMEL", TRUE);
/*
* FIXME: AddPropW uses the global kernel atom table, thus leading to conflicts if we use
extern ATOM gaGuiConsoleWndClass;
extern ATOM AtomDDETrack;
extern ATOM AtomQOS;
+extern ATOM AtomImeLevel;
extern ERESOURCE UserLock;
CODE_SEG("INIT") NTSTATUS NTAPI InitUserImpl(VOID);