15#define IMM_INIT_MAGIC 0x19650412
16#define MAX_CANDIDATEFORM 4
40#undef DEFINE_IMM_ENTRY
41#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
42 static type WINAPI IMMSTUB_##name params { IMM_RETURN_##retkind((type)retval); }
47#undef DEFINE_IMM_ENTRY
48#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
66 ERR(
"GetSystemDirectoryW failed (error %lu)\n", dwError);
98 ERR(
"Did not load imm32.dll!\n");
105#undef DEFINE_IMM_ENTRY
106#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
108 FN_##name proc = (FN_##name)GetProcAddress(imm32, #name); \
110 ERR("Could not load %s\n", #name); \
113 IMM_FN(name) = proc; \
128 TRACE(
"Imm (%x)\n", magic);
146 ERR(
"Did not load imm32.dll!\n");
175 pwnd = pimeui->
spwnd;
212 if (!pIMC || pIMC->
hImeWnd == hImeWnd)
226 if (hNewIMC == hOldIMC)
232 pimeui->
hIMC = hNewIMC;
244 HWND hwndUI, hwndIMC, hImeWnd, hwndOwner;
319 szUIClass[
_countof(szUIClass) - 1] = 0;
345 hIMC = pParentWnd->
hImc;
418 DWORD dwConversion, dwSentence;
610 DWORD dwConversion, dwSentence, dwNewConversion;
617 dwNewConversion = dwConversion & ~IME_CMODE_SOFTKBD;
619 if (dwNewConversion != dwConversion)
628#define IFN_GetPenMenuData 12
686 DWORD dwConversion, dwSentence;
741 pCandForm = &pIC->cfCandForm[
lParam];
760 pCompForm = &pIC->cfCompForm;
839 HWND hwndFocus, hwndOldImc, hwndNewImc, hImeWnd, hwndActive, hwndOwner;
840 PWND pwndFocus, pImeWnd, pwndOwner;
897 if (hwndFocus != pIC->hWnd)
903 if ((pIC->
dwUIFlags & 0x40000) && hwndOldImc != hwndFocus)
941 if (pwndFocus && pImeWnd && pImeWnd->
head.pti == pwndFocus->
head.pti)
946 if (hwndOldImc && hwndNewImc && hwndOldImc != hwndNewImc &&
960 pImeWnd = pimeui->
spwnd;
967 pImeWnd = pimeui->
spwnd;
970 if (!pwndFocus || !hwndActive || pImeWnd->
head.pti != pwndFocus->
head.pti)
1008 ERR(
"fnid was 0x%x\n", pWnd->
fnid);
1018 ERR(
"HeapAlloc failed\n");
1025 pimeui->spwnd = pWnd;
1045 case WM_IME_STARTCOMPOSITION:
1046 case WM_IME_COMPOSITION:
1047 case WM_IME_ENDCOMPOSITION:
1109 case WM_IME_STARTCOMPOSITION:
1110 case WM_IME_COMPOSITION:
1111 case WM_IME_ENDCOMPOSITION:
1169 ERR(
"Imm32 not installed!\n");
1192 ERR(
"Failed to register IME Class!\n");
1197 TRACE(
"RegisterIMEClass atom = %u\n", atom);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
#define GetProcAddress(x, y)
#define HeapFree(x, y, z)
#define WideCharToMultiByte
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
PTHEME_CLASS ValidateHandle(HTHEME hTheme)
GLuint GLsizei GLsizei * length
BOOL WINAPI ImmSetCompositionFontA(_In_ HIMC hIMC, _In_ LPLOGFONTA lplf)
BOOL WINAPI ImmGetCompositionFontA(_In_ HIMC hIMC, _Out_ LPLOGFONTA lplf)
BOOL WINAPI ImmGetCompositionFontW(_In_ HIMC hIMC, _Out_ LPLOGFONTW lplf)
BOOL WINAPI ImmSetCompositionFontW(_In_ HIMC hIMC, _In_ LPLOGFONTW lplf)
BOOL WINAPI ImmFreeLayout(_In_ HKL hKL)
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
BOOL WINAPI ImmActivateLayout(_In_ HKL hKL)
BOOL WINAPI ImmRegisterClient(_Inout_ PSHAREDINFO ptr, _In_ HINSTANCE hMod)
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
BOOL WINAPI ImmEnumInputContext(_In_ DWORD dwThreadId, _In_ IMCENUMPROC lpfn, _In_ LPARAM lParam)
BOOL WINAPI ImmWINNLSGetEnableStatus(_In_opt_ HWND hWnd)
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
BOOL WINAPI ImmSetActiveContext(_In_ HWND hWnd, _In_opt_ HIMC hIMC, _In_ BOOL fActive)
BOOL WINAPI ImmIMPQueryIMEA(_Inout_ LPIMEPROA pImePro)
BOOL WINAPI ImmIMPGetIMEW(_In_opt_ HWND hWnd, _Out_ LPIMEPROW pImePro)
#define IMS_SETOPENSTATUS
VOID WINAPI CtfImmRestoreToolbarWnd(_In_ LPVOID pUnused, _In_ DWORD dwShowFlags)
#define IMS_IMEMENUITEMSELECTED
LRESULT WINAPI CtfImmDispatchDefImeMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
BOOL WINAPI ImmIMPGetIMEA(_In_opt_ HWND hWnd, _Out_ LPIMEPROA pImePro)
BOOL WINAPI ImmLoadIME(_In_ HKL hKL)
LRESULT WINAPI ImmPutImeMenuItemsIntoMappedFile(_In_ HIMC hIMC)
BOOL WINAPI ImmIMPQueryIMEW(_Inout_ LPIMEPROW pImePro)
HRESULT WINAPI CtfImmTIMActivate(_In_ HKL hKL)
#define IMS_COMPLETECOMPSTR
#define IMS_UNSETLANGBAND
#define IMS_GETCONVSTATUS
BOOL WINAPI ImmIMPSetIMEW(_In_opt_ HWND hWnd, _Inout_ LPIMEPROW pImePro)
LRESULT WINAPI ImmSystemHandler(_In_ HIMC hIMC, _Inout_opt_ WPARAM wParam, _Inout_opt_ LPARAM lParam)
#define IMS_NOTIFYIMESHOW
#define IMS_LOADTHREADLAYOUT
DWORD WINAPI CtfImmHideToolbarWnd(VOID)
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
#define IMS_ACTIVATELAYOUT
BOOL WINAPI ImmGetImeInfoEx(_Out_ PIMEINFOEX pImeInfoEx, _In_ IMEINFOEXCLASS SearchType, _In_ PVOID pvSearchKey)
#define IMS_IMEDEACTIVATE
WORD WINAPI ImmSendIMEMessageExA(_In_ HWND hWnd, _In_ LPARAM lParam)
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
@ ImeInfoExKeyboardLayout
WORD WINAPI ImmSendIMEMessageExW(_In_ HWND hWnd, _In_ LPARAM lParam)
BOOL WINAPI ImmWINNLSEnableIME(_In_opt_ HWND hWnd, _In_ BOOL enable)
#define IMS_SENDNOTIFICATION
BOOL WINAPI ImmIMPSetIMEA(_In_opt_ HWND hWnd, _Inout_ LPIMEPROA pImePro)
#define IMC_SETCANDIDATEPOS
BOOL WINAPI ImmGetConversionStatus(_In_ HIMC hIMC, _Out_opt_ LPDWORD lpfdwConversion, _Out_opt_ LPDWORD lpfdwSentence)
BOOL WINAPI ImmSetConversionStatus(_In_ HIMC hIMC, _In_ DWORD fdwConversion, _In_ DWORD fdwSentence)
#define IMC_CLOSESTATUSWINDOW
BOOL WINAPI ImmSetCompositionWindow(_In_ HIMC hIMC, _In_ LPCOMPOSITIONFORM lpCompForm)
BOOL WINAPI ImmSetCandidateWindow(_In_ HIMC hIMC, _In_ LPCANDIDATEFORM lpCandidate)
#define IME_ESC_QUERY_SUPPORT
#define IMC_SETSTATUSWINDOWPOS
#define IME_CMODE_SOFTKBD
#define IMC_GETCOMPOSITIONWINDOW
BOOL WINAPI ImmGetCandidateWindow(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_ LPCANDIDATEFORM lpCandidate)
#define IMC_SETCOMPOSITIONWINDOW
LRESULT WINAPI ImmEscapeW(_In_ HKL hKL, _In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData)
#define IMC_GETCANDIDATEPOS
#define IME_ESC_GETHELPFILENAME
BOOL WINAPI ImmSetStatusWindowPos(_In_ HIMC hIMC, _In_ LPPOINT lpptPos)
BOOL WINAPI ImmGetOpenStatus(_In_ HIMC hIMC)
#define IMN_OPENSTATUSWINDOW
#define IMC_GETCOMPOSITIONFONT
BOOL WINAPI ImmConfigureIMEW(_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
#define IMC_SETCOMPOSITIONFONT
#define IMN_SETOPENSTATUS
BOOL WINAPI ImmGetCompositionWindow(_In_ HIMC hIMC, _Out_ LPCOMPOSITIONFORM lpCompForm)
#define IMC_OPENSTATUSWINDOW
#define IMN_CLOSESTATUSWINDOW
BOOL WINAPI ImmSetOpenStatus(_In_ HIMC hIMC, _In_ BOOL fOpen)
#define IMC_GETSTATUSWINDOWPOS
#define IMN_SETCONVERSIONMODE
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
#define IME_CONFIG_GENERAL
#define IMC_SETOPENSTATUS
#define IMC_SETCONVERSIONMODE
#define IMC_SETSENTENCEMODE
#define IMC_GETSOFTKBDPOS
#define IMC_GETSENTENCEMODE
#define IMC_GETOPENSTATUS
#define IMC_SETSOFTKBDPOS
#define IMC_GETCONVERSIONMODE
#define NI_IMEMENUSELECTED
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define ICLASS_TO_MASK(iCls)
#define QUERY_WINDOW_FOCUS
#define QUERY_WINDOW_ACTIVE
DWORD NTAPI NtUserNotifyIMEStatus(_In_ HWND hwnd, _In_ BOOL fOpen, _In_ DWORD dwConversion)
#define UserHMGetHandle(obj)
DWORD_PTR NTAPI NtUserCallNoParam(DWORD Routine)
DWORD NTAPI NtUserCallHwndParamLock(HWND hWnd, DWORD_PTR Param, DWORD Routine)
BOOL NTAPI NtUserSetImeOwnerWindow(_In_ HWND hImeWnd, _In_opt_ HWND hwndFocus)
#define NtUserSetWindowLongPtr
@ THREADSTATE_CHECKCONIME
BOOLEAN NTAPI NtUserDestroyWindow(HWND Wnd)
@ NOPARAM_ROUTINE_GETIMESHOWSTATUS
@ HWNDLOCK_ROUTINE_CHECKIMESHOWSTATUSINTHRD
@ NOPARAM_ROUTINE_UPDATEPERUSERIMMENABLING
@ TWOPARAM_ROUTINE_IMESHOWSTATUSCHANGE
DWORD_PTR NTAPI NtUserQueryWindow(HWND hWnd, DWORD Index)
BOOL NTAPI NtUserCallHwndLock(HWND hWnd, DWORD Routine)
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
#define GetWin32ClientInfo()
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
static DWORD DWORD void LPSTR DWORD cch
DWORD RegisterDefaultClasses
ATOM WINAPI RegisterClassExWOWW(WNDCLASSEXW *, LPDWORD, WORD, DWORD, BOOL)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
#define RtlZeroMemory(Destination, Length)
BOOL WINAPI User32InitializeImmEntryTable(_In_ DWORD)
static VOID User32SetImeWindowOfImc(HIMC hIMC, HWND hImeWnd)
static FN_GetPenMenuData s_pGetPenMenuData
BOOL WINAPI IMPSetIMEW(HWND hwnd, LPIMEPROW ime)
static VOID User32DestroyImeUIWindow(PIMEUI pimeui)
BOOL WINAPI IMPQueryIMEA(LPIMEPROA ime)
UINT WINAPI WINNLSGetIMEHotkey(HWND hwnd)
Imm32ApiTable gImmApiEntries
LRESULT WINAPI ImeWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
BOOL WINAPI IMPQueryIMEW(LPIMEPROW ime)
static BOOL User32GetImeShowStatus(VOID)
LRESULT ImeWnd_OnImeSetContext(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
static INT ImeWnd_OnCreate(PIMEUI pimeui, LPCREATESTRUCT lpCS)
static VOID FASTCALL User32SetImeActivenessOfWindow(HWND hWnd, BOOL bActive)
static HWND User32CreateImeUIWindow(PIMEUI pimeui, HKL hKL)
LRESULT WINAPI SendIMEMessageExA(HWND hwnd, LPARAM lParam)
static BOOL IntInitializeImmEntryTable(VOID)
static LRESULT User32SendImeUIMessage(PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
static VOID User32ImeMenuItemSelected(HWND hwndTarget)
LRESULT WINAPI ImeWndProcA(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
BOOL WINAPI UpdatePerUserImmEnabling(VOID)
BOOL WINAPI InitializeImmEntryTable(VOID)
static LRESULT ImeWnd_OnImeSystem(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
VOID FASTCALL CtfLoadThreadLayout(PIMEUI pimeui)
VOID(CALLBACK * FN_GetPenMenuData)(PUINT pnID, PDWORD_PTR pdwMenuData)
static BOOL CALLBACK User32GetPenMenuData(_Out_ PUINT pnID, _Out_ PDWORD_PTR pdwMenuData)
static LRESULT ImeWnd_OnImeControl(PIMEUI pimeui, WPARAM wParam, LPARAM lParam, BOOL unicode)
BOOL WINAPI IMPGetIMEA(HWND hwnd, LPIMEPROA ime)
static BOOL User32CanSetImeWindowToImc(HIMC hIMC, HWND hImeWnd)
BOOL WINAPI IMPSetIMEA(HWND hwnd, LPIMEPROA ime)
HRESULT User32GetSystemFilePath(_Out_writes_(cchBuffer) PWSTR lpBuffer, _In_ SIZE_T cchBuffer, _In_ PCWSTR pszFileName)
#define IFN_GetPenMenuData
BOOL WINAPI WINNLSEnableIME(HWND hwnd, BOOL enable)
BOOL WINAPI RegisterIMEClass(VOID)
HWND FASTCALL IntGetTopLevelWindow(HWND hWnd)
static BOOL CALLBACK ImeWnd_SwitchSoftKbdProc(_In_ HIMC hIMC, _In_ LPARAM lParam)
static VOID ImeWnd_OnImeSelect(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
BOOL WINAPI IMPGetIMEW(HWND hwnd, LPIMEPROW ime)
static VOID User32UpdateImcOfImeUI(PIMEUI pimeui, HIMC hNewIMC)
static LRESULT ImeWnd_OnImeNotify(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
static VOID User32NotifyOpenStatus(PIMEUI pimeui, HWND hwndIMC, BOOL bOpen)
static LRESULT FASTCALL User32DoImeHelp(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
LRESULT WINAPI SendIMEMessageExW(HWND hwnd, LPARAM lParam)
LRESULT WINAPI ImeWndProcW(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
BOOL WINAPI WINNLSGetEnableStatus(HWND hwnd)
WORD WORD PSZ PSZ pszFileName
#define ValidateHwnd(hwnd)
#define MAX_CANDIDATEFORM
DWORD WINAPI GetLastError(void)
#define HRESULT_FROM_WIN32(x)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define GetWindowLongPtrW
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
BOOL WINAPI WinHelpW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_ UINT, _In_ ULONG_PTR)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define WM_IME_SETCONTEXT
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
#define WM_IME_COMPOSITIONFULL
#define MAKEINTRESOURCEA(i)
HWND WINAPI GetParent(_In_ HWND)
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
BOOL WINAPI GetClassInfoW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSW)
#define SetWindowLongPtrW
BOOL WINAPI DestroyWindow(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)