75 TRACE(
"(%p, %p)\n", hKL, pImeInfoEx);
113 pImeInfoEx->
hkl = hKL;
128 TRACE(
"(0x%lX)\n", dwUnknown);
147 for (iKL = 0; iKL < cKLs; ++iKL)
162 WARN(
"Default to English US\n");
166 else if (dwUnknown == 2)
197 BOOL fOldOpen, bIsNewHKLIme =
TRUE, bIsOldHKLIme =
TRUE, bClientWide, bNewDpiWide;
198 DWORD cbNewPrivate = 0, cbOldPrivate = 0, dwOldConversion, dwOldSentence,
dwSize, dwNewSize;
209 if (hNewKL != hOldKL)
223 cbOldPrivate = pOldImeDpi->ImeInfo.dwPrivateDataSize;
225 cbNewPrivate =
max(cbNewPrivate,
sizeof(
DWORD));
226 cbOldPrivate =
max(cbOldPrivate,
sizeof(
DWORD));
228 if (pClientImc->
hKL == hOldKL)
233 pOldImeDpi->ImeSelect(hIMC,
FALSE);
235 pOldImeDpi->CtfImeSelectEx(hIMC,
FALSE, hOldKL);
252 pNewImeDpi->ImeSelect(hIMC,
TRUE);
254 pNewImeDpi->CtfImeSelectEx(hIMC,
TRUE, hNewKL);
256 pClientImc->
hKL = hNewKL;
261 dwOldConversion = pIC->fdwConversion;
262 dwOldSentence = pIC->fdwSentence;
263 fOldOpen = pIC->fOpen;
269 if (bClientWide && !bNewDpiWide)
274 pIC->lfFont.A = LogFontA;
276 pClientImc->
dwFlags &= ~CLIENTIMC_WIDE;
278 else if (!bClientWide && bNewDpiWide)
283 pIC->lfFont.W = LogFontW;
289 if (cbOldPrivate != cbNewPrivate)
297 pIC->hPrivate = hPrivate;
300#define MAX_IMCC_SIZE 0x1000
306 pIC->dwNumMsgBuf = 0;
355 if (pOldImeDpi && bIsOldHKLIme)
362 if (pNewImeDpi && bIsNewHKLIme)
365 if (pOldState != pNewState)
369 pOldState->fOpen = !!pIC->fOpen;
370 pOldState->dwConversion = pIC->fdwConversion;
371 pOldState->dwConversion &= ~IME_CMODE_EUDC;
372 pOldState->dwSentence = pIC->fdwSentence;
373 pOldState->dwInit = pIC->fdwInit;
380 pIC->
dwChange &= ~INPUTCONTEXTDX_CHANGE_FORCE_OPEN;
385 pIC->fOpen = pNewState->
fOpen;
389 pIC->fdwConversion &= ~IME_CMODE_EUDC;
391 pIC->fdwInit = pNewState->
dwInit;
401 pNewImeDpi->ImeSelect(hIMC,
TRUE);
403 pNewImeDpi->CtfImeSelectEx(hIMC,
TRUE, hNewKL);
405 pClientImc->
hKL = hNewKL;
409 if (pIC->fOpen != fOldOpen)
411 if (pIC->fdwConversion != dwOldConversion)
413 if (pIC->fdwSentence != dwOldSentence)
484 SelectLayout.
hNewKL = hKL;
485 SelectLayout.
hOldKL = hOldKL;
497 TRACE(
"We have to do something\n");
525 hOldIMC = pWnd->
hImc;
537 if (hwndFocus ==
hWnd)
639 for (pState = pIC->
pState; pState; pState = pNext)
641 pNext = pState->
pNext;
643 for (pSubState = pState->
pSubState; pSubState; pSubState = pSubNext)
645 pSubNext = pSubState->
pNext;
678 ERR(
"Thread mismatch\n");
685 TRACE(
"pClientImc == NULL\n");
691 ERR(
"Can't destroy for CLIENTIMC_UNKNOWN2\n");
712 if (pClientImc->
hKL == hKL)
718 pImeDpi->ImeSelect(hIMC,
FALSE);
720 pImeDpi->CtfImeSelectEx(hIMC,
FALSE, hKL);
751 DWORD dwIndex, cbPrivate;
800 cbPrivate =
sizeof(
DWORD);
825 pImeDpi->ImeSelect(hIMC,
TRUE);
827 pImeDpi->CtfImeSelectEx(hIMC,
TRUE, hKL);
831 pClientImc->
hKL = hKL;
892 ERR(
"No default IME window\n");
932 TRACE(
"(%p)\n", hIMC);
955 TRACE(
"(%p)\n", hImc);
1001 TRACE(
"(%p)\n", pClientImc);
1024 TRACE(
"Not IMM mode.\n");
1039 if (!hIMC && (dwContextFlags & 1))
1072 TRACE(
"(%p)\n", hIMC);
1121 DWORD dwIndex, dwCount;
1131 for (dwIndex = 0; dwIndex < dwCount; ++dwIndex)
1133 hIMC = phList[dwIndex];
1157 TRACE(
"(%p, %p, %d)\n",
hWnd, hIMC, fActive);
1170 pClientImc->
dwFlags &= ~CLIENTIMC_ACTIVE;
1191 dwConversion = pIC->fdwConversion;
1217 pImeDpi->ImeSetActiveContext(hIMC, fActive);
1280 ASSERT(dwValue == 0x100);
1309 ERR(
"ImmInitializeGlobals failed\n");
1314 ERR(
"User32InitializeImmEntryTable failed\n");
1336 TRACE(
"imm32.dll is unloaded\n");
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
HRESULT WINAPI CtfImmTIMActivate(_In_ HKL hKL)
HRESULT CtfImmTIMCreateInputContext(_In_ HIMC hIMC)
BOOL WINAPI CtfImmIsTextFrameServiceDisabled(VOID)
HRESULT CtfImmTIMDestroyInputContext(_In_ HIMC hIMC)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define ERROR_CALL_NOT_IMPLEMENTED
#define DLL_THREAD_DETACH
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
#define DLL_THREAD_ATTACH
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
PIMEDPI WINAPI ImmLockImeDpi(HKL hKL)
VOID WINAPI ImmUnlockImeDpi(PIMEDPI pImeDpi)
RTL_CRITICAL_SECTION gcsImeDpi
PIMEDPI APIENTRY Imm32FindOrLoadImeDpi(HKL hKL)
BOOL WINAPI ImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
BOOL WINAPI ImmLoadIME(HKL hKL)
BOOL APIENTRY Imm32ReleaseIME(HKL hKL)
LPINPUTCONTEXT APIENTRY Imm32InternalLockIMC(HIMC hIMC, BOOL fSelect)
static BOOL APIENTRY ImmInitializeGlobals(HMODULE hMod)
BOOL WINAPI ImmUnlockIMC(HIMC hIMC)
HIMC WINAPI ImmCreateContext(void)
BOOL WINAPI ImmDisableTextFrameService(DWORD dwThreadId)
static VOID APIENTRY Imm32CiceroSetActiveContext(HIMC hIMC, BOOL fActive, HWND hWnd, HKL hKL)
HIMC WINAPI ImmGetContext(HWND hWnd)
static HIMC APIENTRY ImmGetSaveContext(HWND hWnd, DWORD dwContextFlags)
BOOL WINAPI ImmAssociateContextEx(HWND hWnd, HIMC hIMC, DWORD dwFlags)
static BOOL CALLBACK Imm32SelectContextProc(HIMC hIMC, LPARAM lParam)
BOOL WINAPI ImmDestroyContext(HIMC hIMC)
BOOL WINAPI ImmFreeLayout(DWORD dwUnknown)
BOOL APIENTRY Imm32DestroyInputContext(HIMC hIMC, HKL hKL, BOOL bKeep)
BOOL WINAPI ImmLoadLayout(HKL hKL, PIMEINFOEX pImeInfoEx)
BOOL WINAPI ImmDllInitialize(_In_ HINSTANCE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
static VOID APIENTRY Imm32DestroyImeModeSaver(LPINPUTCONTEXTDX pIC)
BOOL WINAPI User32InitializeImmEntryTable(DWORD)
VOID WINAPI ImmUnlockClientImc(PCLIENTIMC pClientImc)
VOID APIENTRY Imm32UnitTest(VOID)
static BOOL CALLBACK Imm32NotifyIMEProc(HIMC hIMC, LPARAM lParam)
struct SELECT_LAYOUT * LPSELECT_LAYOUT
BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC)
BOOL APIENTRY Imm32CreateInputContext(HIMC hIMC, LPINPUTCONTEXT pIC, PCLIENTIMC pClientImc, HKL hKL, BOOL fSelect)
BOOL WINAPI ImmSetActiveContext(HWND hWnd, HIMC hIMC, BOOL fActive)
PCLIENTIMC WINAPI ImmLockClientImc(HIMC hImc)
LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC)
BOOL WINAPI ImmEnumInputContext(DWORD dwThreadId, IMCENUMPROC lpfn, LPARAM lParam)
BOOL WINAPI ImmRegisterClient(PSHAREDINFO ptr, HINSTANCE hMod)
HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC)
BOOL WINAPI ImmActivateLayout(HKL hKL)
BOOL WINAPI ImmSetActiveContextConsoleIME(HWND hwnd, BOOL fFlag)
ULONG_PTR gHighestUserAddress
VOID APIENTRY Imm32SelectInputContext(HKL hNewKL, HKL hOldKL, HIMC hIMC)
BOOL WINAPI ImmWINNLSGetEnableStatus(HWND hWnd)
VOID APIENTRY LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW)
#define IS_ZERO_UNEXPECTEDLY(p)
LPVOID APIENTRY ImmLocalAlloc(DWORD dwFlags, DWORD dwBytes)
HRESULT APIENTRY Imm32StrToUInt(LPCWSTR pszText, LPDWORD pdwValue, ULONG nBase)
VOID APIENTRY LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA)
#define ValidateHwnd(hwnd)
#define ImmLocalFree(lpData)
BOOL APIENTRY Imm32CheckImcProcess(PIMC pIMC)
BOOL APIENTRY Imm32LoadImeVerInfo(PIMEINFOEX pImeInfoEx)
#define IS_CROSS_THREAD_HIMC(hIMC)
#define IMM_INVALID_CANDFORM
PTHREADINFO FASTCALL Imm32CurrentPti(VOID)
#define REGKEY_KEYBOARD_LAYOUTS
#define IS_ERROR_UNEXPECTEDLY(x)
#define IS_NULL_UNEXPECTEDLY(p)
DWORD APIENTRY Imm32BuildHimcList(DWORD dwThreadId, HIMC **pphList)
#define MAX_CANDIDATEFORM
LPVOID FASTCALL ValidateHandle(HANDLE hObject, UINT uType)
#define IS_CROSS_PROCESS_HWND(hWnd)
PIME_STATE APIENTRY Imm32FetchImeState(LPINPUTCONTEXTDX pIC, HKL hKL)
BOOL APIENTRY Imm32SaveImeStateSentence(LPINPUTCONTEXTDX pIC, PIME_STATE pState, HKL hKL)
HRESULT APIENTRY Imm32UIntToStr(DWORD dwValue, ULONG nBase, LPWSTR pszBuff, USHORT cchBuff)
BOOL APIENTRY Imm32IsSystemJapaneseOrKorean(VOID)
#define ImeDpi_IsUnicode(pImeDpi)
BOOL APIENTRY Imm32LoadImeStateSentence(LPINPUTCONTEXTDX pIC, PIME_STATE pState, HKL hKL)
BOOL WINAPI ImmUnlockIMCC(HIMCC imcc)
DWORD WINAPI ImmGetIMCCLockCount(HIMCC imcc)
HIMCC WINAPI ImmCreateIMCC(DWORD size)
DWORD WINAPI ImmGetIMCCSize(HIMCC imcc)
HIMCC WINAPI ImmReSizeIMCC(HIMCC imcc, DWORD size)
LPVOID WINAPI ImmLockIMCC(HIMCC imcc)
HIMCC WINAPI ImmDestroyIMCC(HIMCC block)
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
LPVOID NTAPI LocalLock(HLOCAL hMem)
BOOL NTAPI LocalUnlock(HLOCAL hMem)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
struct tagGUIDELINE GUIDELINE
#define NI_COMPOSITIONSTR
#define ISC_SHOWUIGUIDELINE
#define ISC_SHOWUIALLCANDIDATEWINDOW
struct tagCANDIDATEINFO CANDIDATEINFO
BOOL(CALLBACK * IMCENUMPROC)(HIMC, LPARAM)
#define IME_PROP_COMPLETE_ON_UNSELECT
struct tagCOMPOSITIONSTRING COMPOSITIONSTRING
struct tagCLIENTIMC * PCLIENTIMC
#define INPUTCONTEXTDX_CHANGE_OPEN
#define INPUTCONTEXTDX_CHANGE_SENTENCE
#define CLIENTIMC_DESTROY
#define CLIENTIMC_DISABLEIME
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
#define INPUTCONTEXTDX_CHANGE_FORCE_OPEN
#define CLIENTIMC_UNKNOWN2
#define INPUTCONTEXTDX_CHANGE_CONVERSION
#define QUERY_WINDOW_DEFAULT_ICONTEXT
#define QUERY_WINDOW_FOCUS
DWORD NTAPI NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL)
DWORD NTAPI NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion)
BOOL NTAPI NtUserDestroyInputContext(HIMC hIMC)
@ THREADSTATE_DEFAULTINPUTCONTEXT
@ THREADSTATE_IMECOMPATFLAGS
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
DWORD_PTR NTAPI NtUserQueryWindow(HWND hWnd, DWORD Index)
HIMC NTAPI NtUserCreateInputContext(ULONG_PTR dwClientImcData)
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
#define GetWin32ClientInfo()
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
DWORD NTAPI NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags)
LCID WINAPI GetSystemDefaultLCID(void)
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define UNREFERENCED_PARAMETER(P)
#define LANGIDFROMLCID(l)
NTSYSAPI NTSTATUS NTAPI NtQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
struct IME_SUBSTATE * pNext
struct IME_STATE * pState
CANDIDATEFORM cfCandForm[4]
ULONG_PTR dwClientImcData
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
DWORD WINAPI GetCurrentThreadId(void)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define HKEY_LOCAL_MACHINE
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
#define WM_IME_SETCONTEXT
HKL WINAPI LoadKeyboardLayoutW(_In_ LPCWSTR, _In_ UINT)
UINT WINAPI GetKeyboardLayoutList(_In_ int nBuff, _Out_writes_to_opt_(nBuff, return) HKL FAR *lpList)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)