13#ifdef IMM_WIN3_SUPPORT
20 return dwTID1 == dwTID2;
80static DWORD Imm32Get31ModeFrom40ModeK(
DWORD fdwConversion)
92static DWORD Imm32Get31ModeFrom40ModeJ(
DWORD fdwConversion)
123 DWORD fdwConversion = 0, fdwSentence;
130 DWORD fdwConversion = 0, fdwSentence;
133 DWORD dw31Mode = Imm32Get31ModeFrom40ModeK(fdwConversion);
138 DWORD dwNewFlags = fdwConversion;
142 dwNewFlags &= ~targetMask;
144 dwNewFlags |= targetMask;
189 pIme->
wCount = (cbCompStr > 0) ? cbCompStr : 0;
214 if (pIC->
fOpen != bRequestOpen)
216 pIC->
fOpen = bRequestOpen;
261 *pszDest++ = pCandidate[0];
262 *pszDest++ = pCandidate[1];
264 cbDestRemaining -= 2;
270 if (cbDestRemaining > 0)
342#define INPUT_METHOD_BASE 100
343 static const WORD g_MNTable[3][96] =
347 0xA1A1, 0xA3A1, 0xA1A8, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA1AE,
348 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3A7, 0xA3AD, 0xA3AE, 0xA3AF,
349 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7,
350 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF,
351 0xA3C0, 0xA4B1, 0xA4D0, 0xA4BA, 0xA4B7, 0xA4A8, 0xA4A9, 0xA4BE,
352 0xA4C7, 0xA4C1, 0xA4C3, 0xA4BF, 0xA4D3, 0xA4D1, 0xA4CC, 0xA4C2,
353 0xA4C6, 0xA4B3, 0xA4A2, 0xA4A4, 0xA4B6, 0xA4C5, 0xA4BD, 0xA4B9,
354 0xA4BC, 0xA4CB, 0xA4BB, 0xA3DB, 0xA1AC, 0xA3DD, 0xA3DE, 0xA3DF,
355 0xA1A2, 0xA4B1, 0xA4D0, 0xA4BA, 0xA4B7, 0xA4A7, 0xA4A9, 0xA4BE,
356 0xA4C7, 0xA4C1, 0xA4C3, 0xA4BF, 0xA4D3, 0xA4D1, 0xA4CC, 0xA4C0,
357 0xA4C4, 0xA4B2, 0xA4A1, 0xA4A4, 0xA4B5, 0xA4C5, 0xA4BD, 0xA4B8,
358 0xA4BC, 0xA4CB, 0xA4BB, 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AD, 0x0000
362 0xA1A1, 0xA4B8, 0xA1A8, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA1AE,
363 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA4BC, 0xA3AD, 0xA3AE, 0xA4C7,
364 0xA4BB, 0xA4BE, 0xA4B6, 0xA4B2, 0xA4CB, 0xA4D0, 0xA4C1, 0xA4C6,
365 0xA4D2, 0xA4CC, 0xA3BA, 0xA4B2, 0xA3B2, 0xA3BD, 0xA3B3, 0xA3BF,
366 0xA3C0, 0xA4A7, 0xA3A1, 0xA4AB, 0xA4AA, 0xA4BB, 0xA4A2, 0xA3AF,
367 0xA1AF, 0xA3B8, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B1, 0xA3B0, 0xA3B9,
368 0xA3BE, 0xA4BD, 0xA4C2, 0xA4A6, 0xA4C3, 0xA3B7, 0xA4B0, 0xA4BC,
369 0xA4B4, 0xA3BC, 0xA4BA, 0xA3DB, 0xA3DC, 0xA3DD, 0xA3DE, 0xA3DF,
370 0xA1AE, 0xA4B7, 0xA4CC, 0xA4C4, 0xA4D3, 0xA4C5, 0xA4BF, 0xA4D1,
371 0xA4A4, 0xA4B1, 0xA4B7, 0xA4A1, 0xA4B8, 0xA4BE, 0xA4B5, 0xA4BA,
372 0xA4BD, 0xA4B5, 0xA4C0, 0xA4A4, 0xA4C3, 0xA4A7, 0xA4C7, 0xA4A9,
373 0xA4A1, 0xA4A9, 0xA4B1, 0xA3FB, 0xA3FC, 0xA3FD, 0xA1AD, 0x0000
377 0xA1A1, 0xA4A2, 0xA3AE, 0xA4B8, 0xA4AF, 0xA4AE, 0xA1B0, 0xA3AA,
378 0xA1A2, 0xA1AD, 0xA1B1, 0xA3AB, 0xA4BC, 0xA3A9, 0xA3AE, 0xA4C7,
379 0xA4BB, 0xA4BE, 0xA4B6, 0xA4B2, 0xA4CB, 0xA4D0, 0xA4C1, 0xA4C6,
380 0xA4D2, 0xA4CC, 0xA3B4, 0xA4B2, 0xA3A7, 0xA1B5, 0xA3AE, 0xA3A1,
381 0xA4AA, 0xA4A7, 0xA3BF, 0xA4BC, 0xA4AC, 0xA4A5, 0xA4AB, 0xA4C2,
382 0xA3B0, 0xA3B7, 0xA3B1, 0xA3B2, 0xA3B3, 0xA1A8, 0xA3AD, 0xA3B8,
383 0xA3B9, 0xA4BD, 0xA4B0, 0xA4A6, 0xA4AD, 0xA3B6, 0xA4A3, 0xA4BC,
384 0xA4B4, 0xA3B5, 0xA4BA, 0xA3A8, 0xA3BA, 0xA1B4, 0xA3BD, 0xA3BB,
385 0xA3AA, 0xA4B7, 0xA4CC, 0xA4C4, 0xA4D3, 0xA4C5, 0xA4BF, 0xA4D1,
386 0xA4A4, 0xA4B1, 0xA4B7, 0xA4A1, 0xA4B8, 0xA4BE, 0xA4B5, 0xA4BA,
387 0xA4BD, 0xA4B5, 0xA4C0, 0xA4A4, 0xA4C3, 0xA4A7, 0xA4C7, 0xA4A9,
388 0xA4A1, 0xA4B1, 0xA4B1, 0xA3A5, 0xA3CC, 0xA3AF, 0xA1AD, 0x0000
393 UINT index = nInputMethod - INPUT_METHOD_BASE;
435 pCurrentFontW = &pIMC->
lfFont.
W;
440 pCurrentFontW = ¤tLF;
528 if (!Imm32FixLogFont(&lfW, bVertical))
531 return Imm32SetCompFont(
hWnd, hIMC, &lfW);
551 HWND hwndIC = pIC->hWnd;
573 if (pWndEntry == pWndICEntry)
574 bUseCrossWindowLogic =
FALSE;
577 if (bUseCrossWindowLogic)
616 Imm32SetFontForVertical(
hWnd, hIMC, pIC,
TRUE);
624 Imm32SetFontForVertical(
hWnd, hIMC, pIC,
FALSE);
633 pIC->cfCompForm.ptCurrentPos =
pt;
634 pIC->cfCompForm.rcArea = rcArea;
645 cf.ptCurrentPos =
pt;
647 Imm32SetCandidateWindow(
hWnd, hIMC, &
cf);
652 Imm32SetCompWindow(
hWnd, hIMC, &cfComp);
659static DWORD Imm32TransGetConversionMode(
HIMC hIMC)
661 DWORD fdwConversion = 0, fdwSentence;
663 return Imm32Get31ModeFrom40ModeJ(fdwConversion);
668 DWORD fdwConversion, fdwSentence;
676 fdwConversion &= ~IME_CMODE_LANGUAGE;
685 fdwConversion &= ~IME_CMODE_FULLSHAPE;
694 fdwConversion &= ~IME_CMODE_ROMAN;
700 fdwConversion &= ~IME_CMODE_CHARCODE;
726 if (wCount == 28 || (240 <= wCount && wCount <= 253))
734 return Imm32TransVKDBEMode(hIMC, (
UINT)
wParam);
743 return Imm32TransVKDBEMode(hIMC, (
UINT)
wParam);
769 DWORD fdwOldConversion = 0, fdwSentence;
773 const DWORD mode31 = Imm32Get31ModeFrom40ModeJ(fdwOldConversion);
775 DWORD dwNewValues = 0, dwMask = 0;
810 DWORD fdwNewConversion = (fdwOldConversion & ~dwMask) | (dwNewValues & dwMask);
871 return Imm32SetCompFont(
hWnd, hIMC, &lfW);
889 return Imm32TransSetOpenK(
hWnd, hImc, pIme);
890 return Imm32TransSetOpenJ(
hWnd, hImc, pIme);
893 return Imm32TransGetOpenK(
hWnd, hImc, pIme, bAnsi);
894 return Imm32TransGetOpenJ(
hWnd, hImc, pIme, bAnsi);
901 return Imm32TransMoveImeWindow(
hWnd, hImc, pIme);
902 return Imm32TransSetConversionWindow(
hWnd, hImc, pIme);
905 return Imm32TransSetConversionMode(hImc, pIme);
909 return Imm32TransGetMode(hImc);
911 return Imm32TransGetConversionMode(hImc);
915 return Imm32TransSetMode(hImc, pIme);
919 return Imm32TransSendVKey(
hWnd, hImc, pIme, bAnsi);
923 return Imm32TransEnterWordRegisterMode(
hWnd, pIme, bAnsi);
927 return Imm32TransSetConversionFontEx(
hWnd, hImc, pIme, bAnsi);
931 return Imm32TransCodeConvert(hImc, pIme) ? pIme->
wParam : 0;
935 return Imm32TransConvertList(hImc, pIme);
943 return Imm32TransHanjaMode(
hWnd, hImc, pIme);
947 return Imm32TransGetLevel(
hWnd);
951 return Imm32TransSetLevel(
hWnd, pIme);
955 return Imm32TransGetMNTable(hImc, pIme);
958 ERR(
"Unknown fnc %d\n", fnc);
979 ret = Imm32TranslateIMESubFunctions(hTargetWnd, pIme, bAnsi);
1006#ifdef IMM_WIN3_SUPPORT
1021#ifdef IMM_WIN3_SUPPORT
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define MultiByteToWideChar
UINT WINAPI GetProfileIntW(LPCWSTR section, LPCWSTR entry, INT def_val)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
LCID WINAPI GetSystemDefaultLCID(void)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
for(i=0;i< ARRAY_SIZE(offsets);i++)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HGLOBAL NTAPI GlobalHandle(LPCVOID pMem)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
#define IME_MODE_CODEINPUT
#define VK_DBE_ALPHANUMERIC
#define IME_MODE_NOCODEINPUT
#define IME_SETCONVERSIONWINDOW
#define IME_MODE_KATAKANA
#define IME_MODE_HANJACONVERT
#define VK_DBE_ENTERDLGCONVERSIONMODE
#define VK_DBE_ENTERWORDREGISTERMODE
#define VK_DBE_ENTERIMECONFIGMODE
#define VK_DBE_DETERMINESTRING
#define IME_MODE_HIRAGANA
#define VK_DBE_NOCODEINPUT
#define IME_MODE_DBCSCHAR
#define IME_MODE_ALPHANUMERIC
BOOL WINAPI ImmSetCompositionFontW(_In_ HIMC hIMC, _In_ LPLOGFONTW lplf)
HIMC ImmGetSaveContext(_In_opt_ HWND hWnd, _In_ DWORD dwContextFlags)
#define _IME_APP_COMPAT_DIRECT_IME_SYSTEM
#define _IME_MODE_KOR_SBCSCHAR
#define _IME_MODE_JPN_SBCSCHAR
DWORD WINAPI ImmGetAppCompatFlags(_In_ HIMC hIMC)
#define _IME_APP_COMPAT_SPECIAL_IME
PCLIENTIMC WINAPI ImmLockClientImc(_In_ HIMC hImc)
#define _IME_APP_COMPAT_DIRECT_IME_FONT
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
#define _IME_CMODE_EXTENDED
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
#define _IME_UI_NO_COMPFORM
VOID WINAPI ImmUnlockClientImc(_Inout_ PCLIENTIMC pClientImc)
struct INPUTCONTEXTDX * PINPUTCONTEXTDX
#define IME_CMODE_KATAKANA
struct tagCANDIDATELIST * PCANDIDATELIST
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 IME_CMODE_LANGUAGE
#define IME_CMODE_HANJACONVERT
#define IME_CONFIG_REGISTERWORD
LONG WINAPI ImmGetCompositionStringA(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf, _In_ DWORD dwBufLen)
BOOL WINAPI ImmSetCompositionWindow(_In_ HIMC hIMC, _In_ LPCOMPOSITIONFORM lpCompForm)
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
BOOL WINAPI ImmSetCandidateWindow(_In_ HIMC hIMC, _In_ LPCANDIDATEFORM lpCandidate)
#define IME_ESC_HANJA_MODE
LRESULT WINAPI ImmEscapeW(_In_ HKL hKL, _In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData)
#define IMN_OPENCANDIDATE
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
BOOL WINAPI ImmGetOpenStatus(_In_ HIMC hIMC)
BOOL WINAPI ImmConfigureIMEA(_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
#define IME_CMODE_CHARCODE
#define IME_CMODE_ALPHANUMERIC
HWND WINAPI ImmGetDefaultIMEWnd(_In_opt_ HWND hWnd)
BOOL WINAPI ImmConfigureIMEW(_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
#define IMC_SETCOMPOSITIONFONT
LONG WINAPI ImmGetCompositionStringW(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_writes_bytes_opt_(dwBufLen) LPVOID lpBuf, _In_ DWORD dwBufLen)
BOOL WINAPI ImmIsIME(_In_ HKL hKL)
BOOL WINAPI ImmSetOpenStatus(_In_ HIMC hIMC, _In_ BOOL fOpen)
#define IME_CMODE_FULLSHAPE
DWORD WINAPI ImmGetConversionListA(_In_ HKL hKL, _In_ HIMC hIMC, _In_ LPCSTR lpSrc, _Out_writes_bytes_(dwBufLen) LPCANDIDATELIST lpDst, _In_ DWORD dwBufLen, _In_ UINT uFlag)
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
#define IME_CONFIG_GENERAL
#define IMC_SETOPENSTATUS
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
#define NI_CONTEXTUPDATED
#define NI_COMPOSITIONSTR
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
BOOL NTAPI NtUserSetAppImeLevel(HWND hWnd, DWORD dwLevel)
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
DWORD NTAPI NtUserGetAppImeLevel(_In_ HWND hWnd)
static ERESOURCE GlobalLock
#define offsetof(TYPE, MEMBER)
#define LANGIDFROMLCID(l)
WCHAR lfFaceName[LF_FACESIZE]
CANDIDATEFORM cfCandForm[4]
union _tagINPUTCONTEXT::@2217 lfFont
DWORD dwOffset[ANYSIZE_ARRAY]
WCHAR lfFaceName[LF_FACESIZE]
#define RtlCopyMemory(Destination, Source, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define ValidateHwnd(hwnd)
VOID LogFontAnsiToWide(const LOGFONTA *plfA, LPLOGFONTW plfW)
#define MAX_CANDIDATEFORM
BOOL Imm32IsSystemJapaneseOrKorean(VOID)
#define ImeDpi_IsUnicode(pImeDpi)
LRESULT WINAPI ImmSendIMEMessageExW(_In_ HWND hWnd, _In_ LPARAM lParam)
LRESULT WINAPI ImmSendIMEMessageExA(_In_ HWND hWnd, _In_ LPARAM lParam)
DWORD WINAPI GetCurrentThreadId(void)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HWND WINAPI GetFocus(void)
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
HWND WINAPI GetForegroundWindow(void)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)