[MSCTFIME][SDK] Implement CtfImeGuidAtom (#6196)

- Add CTFIMECONTEXT structure.
- Add CicInputContext class.
- Rename INPUTCONTEXTDX.dwUnknown5 as
  hCtfImeContext and retype it as HIMCC.
- Implement CtfImeGetGuidAtom by using them.
CORE-19360
This commit is contained in:
Katayama Hirofumi MZ 2023-12-19 15:46:13 +09:00 committed by GitHub
parent 6d100d5b29
commit 52bd0c0c18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 3 deletions

View file

@ -82,6 +82,38 @@ IsInteractiveUserLogon(VOID)
return bOK && IsMember;
}
class CicInputContext
{
public:
HRESULT
GetGuidAtom(
_Inout_ IMCLock& imcLock,
_In_ DWORD dwUnknown,
_Out_opt_ LPDWORD pdwGuidAtom);
};
/**
* @unimplemented
*/
HRESULT
CicInputContext::GetGuidAtom(
_Inout_ IMCLock& imcLock,
_In_ DWORD dwUnknown,
_Out_opt_ LPDWORD pdwGuidAtom)
{
InternalIMCCLock<CTFIMECONTEXT> imeContext(imcLock.m_pIC->hCompStr);
HRESULT hr = imeContext.m_hr;
if (!imeContext)
hr = E_FAIL;
if (FAILED(hr))
return hr;
// FIXME
return hr;
}
/**
* @implemented
*/
@ -756,14 +788,39 @@ CtfImeEscapeEx(
return 0;
}
/***********************************************************************
* CtfImeGetGuidAtom (MSCTFIME.@)
*
* @implemented
*/
EXTERN_C HRESULT WINAPI
CtfImeGetGuidAtom(
_In_ HIMC hIMC,
_In_ DWORD dwUnknown,
_Out_opt_ LPDWORD pdwGuidAtom)
{
FIXME("stub:(%p, 0x%lX, %p)\n", hIMC, dwUnknown, pdwGuidAtom);
return E_FAIL;
TRACE("(%p, 0x%lX, %p)\n", hIMC, dwUnknown, pdwGuidAtom);
IMCLock imcLock(hIMC);
HRESULT hr = imcLock.m_hr;
if (!imcLock)
hr = E_FAIL;
if (FAILED(hr))
return hr;
InternalIMCCLock<CTFIMECONTEXT> imccLock(imcLock.m_pIC->hCtfImeContext);
hr = imccLock.m_hr;
if (!imccLock)
hr = E_FAIL;
if (FAILED(hr))
return hr;
if (!imccLock.m_pIMCC->m_pCicIC)
return E_OUTOFMEMORY;
hr = imccLock.m_pIMCC->m_pCicIC->GetGuidAtom(imcLock, dwUnknown, pdwGuidAtom);
return hr;
}
/***********************************************************************

View file

@ -25,6 +25,14 @@
#include <cicero/CModulePath.h>
#include <cicero/imclock.h>
class CicInputContext;
typedef struct tagCTFIMECONTEXT
{
CicInputContext *m_pCicIC;
DWORD m_dwCicFlags;
} CTFIMECONTEXT, *PCTFIMECONTEXT;
#include <wine/debug.h>
#include "resource.h"

View file

@ -149,7 +149,7 @@ typedef struct INPUTCONTEXTDX
DWORD dwUnknown2;
struct IME_STATE *pState; // +0x154
DWORD dwChange; // +0x158
DWORD dwUnknown5;
HIMCC hCtfImeContext;
} INPUTCONTEXTDX, *PINPUTCONTEXTDX, *LPINPUTCONTEXTDX;
// bits of fdwInit of INPUTCONTEXT