From 1ee014525c69d6310c0f51a4ec90263a7fb6f147 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 9 Mar 2024 11:59:37 +0900 Subject: [PATCH] [MSCTFIME] Implement CicBridge::EscapeKorean (#6585) Supporting TIPs... JIRA issue: CORE-19360 - Add CicBridge::EscHanjaMode. - Add code to CicBridge::EscapeKorean. --- dll/ime/msctfime/bridge.cpp | 34 +++++++++++++++++++++++++++++++++- dll/ime/msctfime/bridge.h | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/dll/ime/msctfime/bridge.cpp b/dll/ime/msctfime/bridge.cpp index 9fdc8c4cc39..456648304bf 100644 --- a/dll/ime/msctfime/bridge.cpp +++ b/dll/ime/msctfime/bridge.cpp @@ -736,9 +736,41 @@ CicBridge::SetCompositionString( /// @unimplemented LRESULT +CicBridge::EscHanjaMode(TLS *pTLS, HIMC hIMC, LPVOID lpData) +{ + CicIMCLock imcLock(hIMC); + if (FAILED(imcLock.m_hr)) + return imcLock.m_hr; + + CicIMCCLock imeContext(imcLock.get().hCtfImeContext); + if (FAILED(imeContext.m_hr)) + return imeContext.m_hr; + + CicInputContext *pCicIC = imeContext.get().m_pCicIC; + if (!pCicIC) + return TRUE; + + if (pCicIC->m_bCandidateOpen) + return TRUE; + + pCicIC->m_dwUnknown6_5[4] |= 0x1; + + //FIXME + + pCicIC->m_dwUnknown6_5[4] &= ~0x1; + + return TRUE; +} + +/// @implemented +LRESULT CicBridge::EscapeKorean(TLS *pTLS, HIMC hIMC, UINT uSubFunc, LPVOID lpData) { - return 0; // FIXME + if (uSubFunc == IME_ESC_QUERY_SUPPORT) + return *(DWORD*)lpData == IME_ESC_HANJA_MODE; + if (uSubFunc == IME_ESC_HANJA_MODE) + return EscHanjaMode(pTLS, hIMC, lpData); + return 0; } /// @implemented diff --git a/dll/ime/msctfime/bridge.h b/dll/ime/msctfime/bridge.h index 6e0853ccb7e..f9512b5274e 100644 --- a/dll/ime/msctfime/bridge.h +++ b/dll/ime/msctfime/bridge.h @@ -28,6 +28,8 @@ protected: static BOOL CALLBACK EnumCreateInputContextCallback(HIMC hIMC, LPARAM lParam); static BOOL CALLBACK EnumDestroyInputContextCallback(HIMC hIMC, LPARAM lParam); + LRESULT EscHanjaMode(TLS *pTLS, HIMC hIMC, LPVOID lpData); + public: CicBridge(); virtual ~CicBridge();