26 if (pImeDpi->
hKL == hKL)
39 pImeDpi->ImeDestroy(0);
48 DWORD dwSysInfoFlags = 0;
59 if (!pImeDpi->ImeInquire(pImeInfo, szUIClass, dwSysInfoFlags))
67 if (pImeDpi->CtfImeInquireExW(pImeInfo, szUIClass, dwSysInfoFlags, pImeDpi->
hKL) !=
S_OK)
84#define VALID_IME_PROP (IME_PROP_AT_CARET | \
85 IME_PROP_SPECIAL_UI | \
86 IME_PROP_CANDLIST_START_FROM_1 | \
88 IME_PROP_COMPLETE_ON_UNSELECT | \
89 IME_PROP_END_UNLOAD | \
90 IME_PROP_KBD_CHAR_FIRST | \
91 IME_PROP_IGNORE_UPKEYS | \
92 IME_PROP_NEED_ALTKEY | \
93 IME_PROP_NO_KEYS_ON_CLOSE | \
94 IME_PROP_ACCEPT_WIDE_VKEY)
95#define VALID_CMODE_CAPS (IME_CMODE_ALPHANUMERIC | \
97 IME_CMODE_KATAKANA | \
98 IME_CMODE_LANGUAGE | \
99 IME_CMODE_FULLSHAPE | \
101 IME_CMODE_CHARCODE | \
102 IME_CMODE_HANJACONVERT | \
103 IME_CMODE_SOFTKBD | \
104 IME_CMODE_NOCONVERSION | \
108#define VALID_SMODE_CAPS (IME_SMODE_NONE | \
109 IME_SMODE_PLAURALCLAUSE | \
110 IME_SMODE_SINGLECONVERT | \
111 IME_SMODE_AUTOMATIC | \
112 IME_SMODE_PHRASEPREDICT | \
113 IME_SMODE_CONVERSATION)
114#define VALID_UI_CAPS (UI_CAP_2700 | \
118#define VALID_SCS_CAPS (SCS_CAP_COMPSTR | \
120 SCS_CAP_SETRECONVERTSTRING)
121#define VALID_SELECT_CAPS (SELECT_CAP_CONVERSION | SELECT_CAP_SENTENCE)
155#undef VALID_CMODE_CAPS
156#undef VALID_SMODE_CAPS
159#undef VALID_SELECT_CAPS
186#define DEFINE_IME_ENTRY(type, name, params, optional) \
187 type APIENTRY Stub##name params { \
188 FIXME("%s: Why stub called?\n", #name); \
192#undef DEFINE_IME_ENTRY
213#define DEFINE_IME_ENTRY(type, name, params, optional) pImeDpi->name = Stub##name;
215#undef DEFINE_IME_ENTRY
218#define DEFINE_IME_ENTRY(type, name, params, optional) \
220 fn = GetProcAddress(hIME, #name); \
221 if (fn) pImeDpi->name = (FN_##name)fn; \
222 else if (!(optional)) { \
223 ERR("'%s' not found in IME module %s.\n", #name, debugstr_w(szPath)); \
228#undef DEFINE_IME_ENTRY
233#define CHECK_IME_FN(name) do { \
234 if (!pImeDpi->name) { \
235 ERR("'%s' not found in Cicero IME module %s.\n", #name, debugstr_w(szPath)); \
285 PIMEDPI pImeDpiNew, pImeDpiFound;
305 pImeDpiNew->
hKL = hKL;
309 uCodePage = ci.
ciACP;
327 pImeDpiFound->
dwFlags &= ~IMEDPI_FLAG_LOCKED;
370 return pImeDpi->ImeEscape(hIMC, uSubFunc, lpData);
372 return pImeDpi->CtfImeEscapeEx(hIMC, uSubFunc, lpData, hKL);
387 if (pImeDpi0->
hKL == hKL)
409 if (pImeDpi1->
pNext == pImeDpi0)
432 TRACE(
"(%p)\n", hKL);
468 TRACE(
"(%p, %lu, %lu, %lu)\n", hIMC, dwAction, dwIndex, dwValue);
478 TRACE(
"NotifyIME(%p, %lu, %lu, %p)\n", hIMC, dwAction, dwIndex, dwValue);
479 ret = pImeDpi->NotifyIME(hIMC, dwAction, dwIndex, dwValue);
481 WARN(
"NotifyIME(%p, %lu, %lu, %p) failed\n", hIMC, dwAction, dwIndex, dwValue);
503 HKL hKL = *(
HKL *)pvSearchKey;
504 pImeInfoEx->
hkl = hKL;
509 TRACE(
"IME is disabled\n");
523 ERR(
"SearchType: %d\n", SearchType);
535 TRACE(
"(%p)\n", hKL);
542 if (pImeDpi->
hKL == hKL)
566 TRACE(
"(%p)\n", pImeDpi);
574 --(pImeDpi->cLockObj);
575 if (pImeDpi->cLockObj != 0)
592 for (ppEntry = &
gpImeDpiList; *ppEntry; ppEntry = &((*ppEntry)->pNext))
594 if (*ppEntry == pImeDpi)
596 *ppEntry = pImeDpi->
pNext;
624 return (pImeDpi !=
NULL);
648 TRACE(
"(%p,%p,%d)\n", hKL, lpszDescription, uBufLen);
658 lpszDescription, uBufLen,
NULL,
NULL);
660 lpszDescription[
cch] = 0;
676 TRACE(
"(%p, %p, %d)\n", hKL, lpszDescription, uBufLen);
704 TRACE(
"(%p, %p, %u)\n", hKL, lpszFileName, uBufLen);
717 lpszFileName, uBufLen,
NULL, &bDefUsed);
721 if (
cch > uBufLen - 1)
724 lpszFileName[
cch] = 0;
740 TRACE(
"(%p, %p, %u)\n", hKL, lpszFileName, uBufLen);
756 if (
cch > uBufLen - 1)
759 lpszFileName[
cch] = 0;
776 TRACE(
"(%p, %lu)\n", hKL, fdwIndex);
808 default: dwValue = 0;
break;
832 TRACE(
"(%p, %p, %u, %p)\n", hKL, hIMC, uSubFunc, lpData);
926 TRACE(
"(%p, %p, %u, %p)\n", hKL, hIMC, uSubFunc, lpData);
955 case 1:
ret = szW[0];
break;
957 default:
ret = 0;
break;
1001 TRACE(
"(%p)\n", hIMC);
1029 TRACE(
"(%p, %d)\n", hIMC, fOpen);
1038 if (pIC->
fOpen != fOpen)
1056 TRACE(
"No change.\n");
1073 TRACE(
"(%p, %p)\n", hIMC, lpptPos);
1098 TRACE(
"(%p, {%ld, %ld})\n", hIMC, lpptPos->x, lpptPos->y);
1129 TRACE(
"(%p, %p)\n", hIMC, lpCompForm);
1163 pIC->cfCompForm = *lpCompForm;
1192 TRACE(
"(%p, %p)\n", hIMC, lplf);
1232 TRACE(
"(%p, %p)\n", hIMC, lplf);
1274 TRACE(
"(%p, %p)\n", hIMC, lplf);
1307 pIC->lfFont.A = *lplf;
1333 TRACE(
"(%p, %p)\n", hIMC, lplf);
1366 pIC->lfFont.W = *lplf;
1395 TRACE(
"(%p, %p, %s, %p, %lu, 0x%lX)\n", hKL, hIMC,
debugstr_a(pSrc), lpDst,
dwBufLen, uFlag);
1403 ret = pImeDpi->ImeConversionList(hIMC, pSrc, lpDst,
dwBufLen, uFlag);
1415 cb = pImeDpi->ImeConversionList(hIMC, pszSrcW,
NULL, 0, uFlag);
1423 cb = pImeDpi->ImeConversionList(hIMC, pszSrcW, pCL,
cb, uFlag);
1455 TRACE(
"(%p, %p, %s, %p, %lu, 0x%lX)\n", hKL, hIMC,
debugstr_w(pSrc), lpDst,
dwBufLen, uFlag);
1463 ret = pImeDpi->ImeConversionList(hIMC, pSrc, lpDst,
dwBufLen, uFlag);
1475 cb = pImeDpi->ImeConversionList(hIMC, pszSrcA,
NULL, 0, uFlag);
1483 cb = pImeDpi->ImeConversionList(hIMC, pszSrcA, pCL,
cb, uFlag);
1508 TRACE(
"(%p %p %p)\n", hIMC, lpfdwConversion, lpfdwSentence);
1514 if (lpfdwConversion)
1517 TRACE(
"0x%X\n", *lpfdwConversion);
1523 TRACE(
"0x%X\n", *lpfdwSentence);
1541 DWORD dwOldConversion, dwOldSentence;
1545 TRACE(
"(%p, 0x%lX, 0x%lX)\n", hIMC, fdwConversion, fdwSentence);
1562 fConversionChange =
TRUE;
1569 fSentenceChange =
TRUE;
1576 if (fConversionChange || fUseCicero)
1580 if (fConversionChange)
1584 if (fSentenceChange || fUseCicero)
1608 TRACE(
"(%p, %p, 0x%lX, %p)\n", hKL,
hWnd, dwMode, lpData);
1642 ret = pImeDpi->ImeConfigure(hKL,
hWnd, dwMode, lpData);
1668 TRACE(
"(%p, %p, 0x%lX, %p)\n", hKL,
hWnd, dwMode, lpData);
1702 ret = pImeDpi->ImeConfigure(hKL,
hWnd, dwMode, lpData);
1759 pClientImc->
dwFlags &= ~CLIENTIMC_DISABLEIME;
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
DWORD CandidateListAnsiToWide(const CANDIDATELIST *pAnsiCL, LPCANDIDATELIST pWideCL, DWORD dwBufLen, UINT uCodePage)
DWORD CandidateListWideToAnsi(const CANDIDATELIST *pWideCL, LPCANDIDATELIST pAnsiCL, DWORD dwBufLen, UINT uCodePage)
#define ERROR_CALL_NOT_IMPLEMENTED
#define WideCharToMultiByte
#define MultiByteToWideChar
LCID WINAPI GetSystemDefaultLCID(void)
BOOL WINAPI ImmGetConversionStatus(_In_ HIMC hIMC, _Out_opt_ LPDWORD lpfdwConversion, _Out_opt_ LPDWORD lpfdwSentence)
LRESULT WINAPI ImmEscapeA(_In_ HKL hKL, _In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData)
BOOL WINAPI ImmSetConversionStatus(_In_ HIMC hIMC, _In_ DWORD fdwConversion, _In_ DWORD fdwSentence)
BOOL WINAPI ImmDisableIME(_In_ DWORD dwThreadId)
static BOOL Imm32LoadIME(PIMEINFOEX pImeInfoEx, PIMEDPI pImeDpi)
static LRESULT ImeDpi_Escape(PIMEDPI pImeDpi, HIMC hIMC, UINT uSubFunc, LPVOID lpData, HKL hKL)
#define VALID_SELECT_CAPS
DWORD WINAPI ImmGetConversionListW(_In_ HKL hKL, _In_ HIMC hIMC, _In_ LPCWSTR pSrc, _Out_writes_bytes_(dwBufLen) LPCANDIDATELIST lpDst, _In_ DWORD dwBufLen, _In_ UINT uFlag)
BOOL WINAPI ImmSetCompositionFontA(_In_ HIMC hIMC, _In_ LPLOGFONTA lplf)
BOOL WINAPI ImmLoadIME(_In_ HKL hKL)
RTL_CRITICAL_SECTION gcsImeDpi
UINT WINAPI ImmGetIMEFileNameW(_In_ HKL hKL, _Out_writes_opt_(uBufLen) LPWSTR lpszFileName, _In_ UINT uBufLen)
BOOL WINAPI ImmSetCompositionWindow(_In_ HIMC hIMC, _In_ LPCOMPOSITIONFORM lpCompForm)
UINT WINAPI ImmGetDescriptionW(_In_ HKL hKL, _Out_writes_opt_(uBufLen) LPWSTR lpszDescription, _In_ UINT uBufLen)
BOOL WINAPI ImmGetCompositionFontA(_In_ HIMC hIMC, _Out_ LPLOGFONTA lplf)
BOOL WINAPI ImmGetCompositionFontW(_In_ HIMC hIMC, _Out_ LPLOGFONTW lplf)
static PIMEDPI Imm32LoadImeDpi(HKL hKL, BOOL bLock)
#define CHECK_IME_FN(name)
PIMEDPI Imm32FindImeDpi(HKL hKL)
BOOL WINAPI ImmGetImeInfoEx(PIMEINFOEX pImeInfoEx, IMEINFOEXCLASS SearchType, PVOID pvSearchKey)
LRESULT WINAPI ImmEscapeW(_In_ HKL hKL, _In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData)
UINT WINAPI ImmGetIMEFileNameA(_In_ HKL hKL, _Out_writes_opt_(uBufLen) LPSTR lpszFileName, _In_ UINT uBufLen)
BOOL Imm32ReleaseIME(_In_ HKL hKL)
BOOL WINAPI ImmSetStatusWindowPos(_In_ HIMC hIMC, _In_ LPPOINT lpptPos)
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
DWORD WINAPI ImmGetProperty(_In_ HKL hKL, _In_ DWORD fdwIndex)
BOOL WINAPI ImmGetOpenStatus(_In_ HIMC hIMC)
BOOL WINAPI ImmSetCompositionFontW(_In_ HIMC hIMC, _In_ LPLOGFONTW lplf)
BOOL WINAPI ImmConfigureIMEA(_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
DWORD WINAPI ImmGetConversionListA(_In_ HKL hKL, _In_ HIMC hIMC, _In_ LPCSTR pSrc, _Out_writes_bytes_(dwBufLen) LPCANDIDATELIST lpDst, _In_ DWORD dwBufLen, _In_ UINT uFlag)
VOID Imm32FreeIME(PIMEDPI pImeDpi, BOOL bDestroy)
HWND WINAPI ImmGetDefaultIMEWnd(_In_opt_ HWND hWnd)
PIMEDPI Imm32FindOrLoadImeDpi(HKL hKL)
BOOL WINAPI ImmGetStatusWindowPos(_In_ HIMC hIMC, _Out_ LPPOINT lpptPos)
BOOL WINAPI ImmConfigureIMEW(_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
BOOL WINAPI ImmIsIME(_In_ HKL hKL)
UINT WINAPI ImmGetDescriptionA(_In_ HKL hKL, _Out_writes_opt_(uBufLen) LPSTR lpszDescription, _In_ UINT uBufLen)
BOOL WINAPI ImmWINNLSEnableIME(_In_opt_ HWND hWnd, _In_ BOOL enable)
BOOL Imm32InquireIme(PIMEDPI pImeDpi)
BOOL WINAPI ImmGetCompositionWindow(_In_ HIMC hIMC, _Out_ LPCOMPOSITIONFORM lpCompForm)
BOOL WINAPI ImmSetOpenStatus(_In_ HIMC hIMC, _In_ BOOL fOpen)
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
#define IMEDPI_FLAG_LOCKED
PCLIENTIMC WINAPI ImmLockClientImc(_In_ HIMC hImc)
#define CLIENTIMC_DISABLEIME
struct INPUTCONTEXTDX * LPINPUTCONTEXTDX
BOOL WINAPI CtfImmIsTextFrameServiceDisabled(VOID)
@ ImeInfoExKeyboardLayoutTFS
@ ImeInfoExKeyboardLayout
BOOL WINAPI ImmSetActiveContext(_In_ HWND hwnd, _In_opt_ HIMC hIMC, _In_ BOOL fFlag)
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
#define IMEDPI_FLAG_UNLOADED
#define IME_ESC_SET_EUDC_DICTIONARY
#define IMN_SETSTATUSWINDOWPOS
#define IME_CONFIG_REGISTERWORD
#define IMN_SETCOMPOSITIONFONT
#define IMC_SETSTATUSWINDOWPOS
#define IMN_SETSENTENCEMODE
#define IGP_GETIMEVERSION
#define IMC_SETCOMPOSITIONWINDOW
#define IME_ESC_HANJA_MODE
#define IME_ESC_GETHELPFILENAME
#define IMN_SETCOMPOSITIONWINDOW
#define IME_ESC_GET_EUDC_DICTIONARY
#define IME_ESC_SEQUENCE_TO_INTERNAL
#define IMC_SETCOMPOSITIONFONT
#define IMN_SETOPENSTATUS
#define IMN_SETCONVERSIONMODE
#define IMC_SETOPENSTATUS
#define IME_SYSINFO_WINLOGON
#define IMC_SETCONVERSIONMODE
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
#define IMC_SETSENTENCEMODE
#define NI_CONTEXTUPDATED
#define IME_SYSINFO_WOW16
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
#define IME_PROP_END_UNLOAD
#define INIT_STATUSWNDPOS
#define IS_CICERO_COMPAT_DISABLED()
DWORD NTAPI NtUserNotifyIMEStatus(_In_ HWND hwnd, _In_ BOOL fOpen, _In_ DWORD dwConversion)
BOOL NTAPI NtUserDisableThreadIme(_In_ DWORD dwThreadID)
BOOL NTAPI NtUserGetImeInfoEx(_Inout_ PIMEINFOEX pImeInfoEx, _In_ IMEINFOEXCLASS SearchType)
@ THREADSTATE_DEFAULTIMEWINDOW
@ THREADSTATE_DEFAULTINPUTCONTEXT
BOOL NTAPI NtUserSetImeInfoEx(_In_ const IMEINFOEX *pImeInfoEx)
DWORD_PTR NTAPI NtUserQueryWindow(HWND hWnd, DWORD Index)
#define GetWin32ClientInfo()
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
#define QUERY_WINDOW_DEFAULT_IME
static DWORD DWORD void LPSTR DWORD cch
static HMODULE MODULEINFO DWORD cb
EXTERN_C HRESULT WINAPI CtfImeInquireExW(_Out_ LPIMEINFO lpIMEInfo, _Out_ LPWSTR lpszWndClass, _In_ DWORD dwSystemInfoFlags, _In_ HKL hKL)
EXTERN_C BOOL WINAPI CtfImeIsGuidMapEnable(_In_ HIMC hIMC)
EXTERN_C BOOL WINAPI CtfImeSelectEx(_In_ HIMC hIMC, _In_ BOOL fSelect, _In_ HKL hKL)
EXTERN_C LRESULT WINAPI CtfImeEscapeEx(_In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData, _In_ HKL hKL)
EXTERN_C HRESULT WINAPI CtfImeGetGuidAtom(_In_ HIMC hIMC, _In_ DWORD dwUnknown, _Out_opt_ LPDWORD pdwGuidAtom)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define _Out_writes_opt_(s)
#define _Out_writes_bytes_(s)
#define LANGIDFROMLCID(l)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
STRSAFEAPI StringCchLengthW(STRSAFE_LPCWSTR psz, size_t cchMax, size_t *pcchLength)
COMPOSITIONFORM cfCompForm
union _tagINPUTCONTEXT::@2166 lfFont
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
_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
static GLenum _GLUfuncptr fn
BOOL Imm32IsCrossThreadAccess(HIMC hIMC)
#define IS_ZERO_UNEXPECTEDLY(p)
#define ValidateHwnd(hwnd)
#define ImmLocalFree(lpData)
LPWSTR Imm32WideFromAnsi(UINT uCodePage, LPCSTR pszA)
#define IS_CROSS_THREAD_HIMC(hIMC)
BOOL Imm32MakeIMENotify(_In_ HIMC hIMC, _In_ HWND hwnd, _In_ DWORD dwAction, _In_ DWORD dwIndex, _Inout_opt_ DWORD_PTR dwValue, _In_ DWORD dwCommand, _Inout_opt_ DWORD_PTR dwData)
VOID LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW)
BOOL Imm32GetSystemLibraryPath(LPWSTR pszPath, DWORD cchPath, LPCWSTR pszFileName)
#define IS_NULL_UNEXPECTEDLY(p)
LPSTR Imm32AnsiFromWide(UINT uCodePage, LPCWSTR pszW)
#define IS_CROSS_PROCESS_HWND(hWnd)
BOOL Imm32IsSystemJapaneseOrKorean(VOID)
LPVOID ImmLocalAlloc(_In_ DWORD dwFlags, _In_ DWORD dwBytes)
VOID LogFontWideToAnsi(const LOGFONTW *plfW, LPLOGFONTA plfA)
#define ImeDpi_IsUnicode(pImeDpi)
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_ DWORD _In_ DWORD dwBufLen
BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD)
HWND WINAPI GetFocus(void)
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetClassInfoW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSW)
BOOL WINAPI PostMessageA(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)