27 if (pImeDpi->
hKL == hKL)
40 pImeDpi->ImeDestroy(0);
49 DWORD dwSysInfoFlags = 0;
60 if (!pImeDpi->ImeInquire(pImeInfo, szUIClass, dwSysInfoFlags))
68 if (pImeDpi->CtfImeInquireExW(pImeInfo, szUIClass, dwSysInfoFlags, pImeDpi->
hKL) !=
S_OK)
85#define VALID_IME_PROP (IME_PROP_AT_CARET | \
86 IME_PROP_SPECIAL_UI | \
87 IME_PROP_CANDLIST_START_FROM_1 | \
89 IME_PROP_COMPLETE_ON_UNSELECT | \
90 IME_PROP_END_UNLOAD | \
91 IME_PROP_KBD_CHAR_FIRST | \
92 IME_PROP_IGNORE_UPKEYS | \
93 IME_PROP_NEED_ALTKEY | \
94 IME_PROP_NO_KEYS_ON_CLOSE | \
95 IME_PROP_ACCEPT_WIDE_VKEY)
96#define VALID_CMODE_CAPS (IME_CMODE_ALPHANUMERIC | \
98 IME_CMODE_KATAKANA | \
99 IME_CMODE_LANGUAGE | \
100 IME_CMODE_FULLSHAPE | \
102 IME_CMODE_CHARCODE | \
103 IME_CMODE_HANJACONVERT | \
104 IME_CMODE_SOFTKBD | \
105 IME_CMODE_NOCONVERSION | \
109#define VALID_SMODE_CAPS (IME_SMODE_NONE | \
110 IME_SMODE_PLAURALCLAUSE | \
111 IME_SMODE_SINGLECONVERT | \
112 IME_SMODE_AUTOMATIC | \
113 IME_SMODE_PHRASEPREDICT | \
114 IME_SMODE_CONVERSATION)
115#define VALID_UI_CAPS (UI_CAP_2700 | \
119#define VALID_SCS_CAPS (SCS_CAP_COMPSTR | \
121 SCS_CAP_SETRECONVERTSTRING)
122#define VALID_SELECT_CAPS (SELECT_CAP_CONVERSION | SELECT_CAP_SENTENCE)
156#undef VALID_CMODE_CAPS
157#undef VALID_SMODE_CAPS
160#undef VALID_SELECT_CAPS
187#define DEFINE_IME_ENTRY(type, name, params, optional) \
188 type APIENTRY Stub##name params { \
189 FIXME("%s: Why stub called?\n", #name); \
193#undef DEFINE_IME_ENTRY
214#define DEFINE_IME_ENTRY(type, name, params, optional) pImeDpi->name = Stub##name;
216#undef DEFINE_IME_ENTRY
219#define DEFINE_IME_ENTRY(type, name, params, optional) \
221 fn = GetProcAddress(hIME, #name); \
222 if (fn) pImeDpi->name = (FN_##name)fn; \
223 else if (!(optional)) { \
224 ERR("'%s' not found in IME module %s.\n", #name, debugstr_w(szPath)); \
229#undef DEFINE_IME_ENTRY
234#define CHECK_IME_FN(name) do { \
235 if (!pImeDpi->name) { \
236 ERR("'%s' not found in Cicero IME module %s.\n", #name, debugstr_w(szPath)); \
286 PIMEDPI pImeDpiNew, pImeDpiFound;
306 pImeDpiNew->
hKL = hKL;
310 uCodePage = ci.
ciACP;
328 pImeDpiFound->
dwFlags &= ~IMEDPI_FLAG_LOCKED;
371 return pImeDpi->ImeEscape(hIMC, uSubFunc, lpData);
373 return pImeDpi->CtfImeEscapeEx(hIMC, uSubFunc, lpData, hKL);
388 if (pImeDpi0->
hKL == hKL)
410 if (pImeDpi1->
pNext == pImeDpi0)
433 TRACE(
"(%p)\n", hKL);
469 TRACE(
"(%p, %lu, %lu, %lu)\n", hIMC, dwAction, dwIndex, dwValue);
479 TRACE(
"NotifyIME(%p, %lu, %lu, %p)\n", hIMC, dwAction, dwIndex, dwValue);
480 ret = pImeDpi->NotifyIME(hIMC, dwAction, dwIndex, dwValue);
482 WARN(
"NotifyIME(%p, %lu, %lu, %p) failed\n", hIMC, dwAction, dwIndex, dwValue);
504 HKL hKL = *(
HKL *)pvSearchKey;
505 pImeInfoEx->
hkl = hKL;
510 TRACE(
"IME is disabled\n");
524 ERR(
"SearchType: %d\n", SearchType);
536 TRACE(
"(%p)\n", hKL);
543 if (pImeDpi->
hKL == hKL)
567 TRACE(
"(%p)\n", pImeDpi);
575 --(pImeDpi->cLockObj);
576 if (pImeDpi->cLockObj != 0)
593 for (ppEntry = &
gpImeDpiList; *ppEntry; ppEntry = &((*ppEntry)->pNext))
595 if (*ppEntry == pImeDpi)
597 *ppEntry = pImeDpi->
pNext;
625 return (pImeDpi !=
NULL);
649 TRACE(
"(%p,%p,%d)\n", hKL, lpszDescription, uBufLen);
659 lpszDescription, uBufLen,
NULL,
NULL);
677 TRACE(
"(%p, %p, %d)\n", hKL, lpszDescription, uBufLen);
705 TRACE(
"(%p, %p, %u)\n", hKL, lpszFileName, uBufLen);
718 lpszFileName, uBufLen,
NULL, &bDefUsed);
722 if (
cch > uBufLen - 1)
741 TRACE(
"(%p, %p, %u)\n", hKL, lpszFileName, uBufLen);
757 if (
cch > uBufLen - 1)
777 TRACE(
"(%p, %lu)\n", hKL, fdwIndex);
809 default: dwValue = 0;
break;
833 TRACE(
"(%p, %p, %u, %p)\n", hKL, hIMC, uSubFunc, lpData);
927 TRACE(
"(%p, %p, %u, %p)\n", hKL, hIMC, uSubFunc, lpData);
956 case 1:
ret = szW[0];
break;
958 default:
ret = 0;
break;
1002 TRACE(
"(%p)\n", hIMC);
1030 TRACE(
"(%p, %d)\n", hIMC, fOpen);
1039 if (pIC->
fOpen != fOpen)
1057 TRACE(
"No change.\n");
1074 TRACE(
"(%p, %p)\n", hIMC, lpptPos);
1099 TRACE(
"(%p, {%ld, %ld})\n", hIMC, lpptPos->x, lpptPos->y);
1130 TRACE(
"(%p, %p)\n", hIMC, lpCompForm);
1164 pIC->cfCompForm = *lpCompForm;
1193 TRACE(
"(%p, %p)\n", hIMC, lplf);
1233 TRACE(
"(%p, %p)\n", hIMC, lplf);
1275 TRACE(
"(%p, %p)\n", hIMC, lplf);
1308 pIC->lfFont.A = *lplf;
1334 TRACE(
"(%p, %p)\n", hIMC, lplf);
1367 pIC->lfFont.W = *lplf;
1396 TRACE(
"(%p, %p, %s, %p, %lu, 0x%lX)\n", hKL, hIMC,
debugstr_a(pSrc), lpDst, dwBufLen, uFlag);
1404 ret = pImeDpi->ImeConversionList(hIMC, pSrc, lpDst, dwBufLen, uFlag);
1416 cb = pImeDpi->ImeConversionList(hIMC, pszSrcW,
NULL, 0, uFlag);
1424 cb = pImeDpi->ImeConversionList(hIMC, pszSrcW, pCL,
cb, uFlag);
1456 TRACE(
"(%p, %p, %s, %p, %lu, 0x%lX)\n", hKL, hIMC,
debugstr_w(pSrc), lpDst, dwBufLen, uFlag);
1464 ret = pImeDpi->ImeConversionList(hIMC, pSrc, lpDst, dwBufLen, uFlag);
1476 cb = pImeDpi->ImeConversionList(hIMC, pszSrcA,
NULL, 0, uFlag);
1484 cb = pImeDpi->ImeConversionList(hIMC, pszSrcA, pCL,
cb, uFlag);
1509 TRACE(
"(%p %p %p)\n", hIMC, lpfdwConversion, lpfdwSentence);
1515 if (lpfdwConversion)
1518 TRACE(
"0x%X\n", *lpfdwConversion);
1524 TRACE(
"0x%X\n", *lpfdwSentence);
1542 DWORD dwOldConversion = fdwConversion, dwOldSentence = fdwSentence;
1546 TRACE(
"(%p, 0x%lX, 0x%lX)\n", hIMC, fdwConversion, fdwSentence);
1563 fConversionChange =
TRUE;
1570 fSentenceChange =
TRUE;
1577 if (fConversionChange || fUseCicero)
1581 if (fConversionChange)
1585 if (fSentenceChange || fUseCicero)
1609 TRACE(
"(%p, %p, 0x%lX, %p)\n", hKL,
hWnd, dwMode, lpData);
1643 ret = pImeDpi->ImeConfigure(hKL,
hWnd, dwMode, lpData);
1669 TRACE(
"(%p, %p, 0x%lX, %p)\n", hKL,
hWnd, dwMode, lpData);
1703 ret = pImeDpi->ImeConfigure(hKL,
hWnd, dwMode, lpData);
1760 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)
#define _IME_UI_NO_COMPFORM
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
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::@2217 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)
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)