mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 10:01:43 +00:00
[IMM32] Implement ImmActivateLayout (#3987)
- Add IME_STATE and IME_SUBSTATE structures. - Modify INPUTCONTEXTDX structure. - Implement ImmActivateLayout function. - Improve ImmDestroyContext function by using newly-defined Imm32FreeImeStates. - Add Imm32FetchImeState, Imm32FetchImeSubState, Imm32LoadImeStateSentence, Imm32SaveImeStateSentence, and Imm32SelectLayout helper functions. - Modify NtUserSetThreadLayoutHandles prototype. CORE-11700
This commit is contained in:
parent
7fdf078134
commit
66ef31494e
9 changed files with 453 additions and 22 deletions
|
@ -635,6 +635,8 @@ BOOL WINAPI ImmSetActiveContext(HWND hwnd, HIMC hIMC, BOOL fFlag);
|
|||
BOOL WINAPI ImmDestroyContext(_In_ HIMC hIMC);
|
||||
BOOL WINAPI ImmDisableIME(_In_ DWORD idThread);
|
||||
BOOL WINAPI ImmEnumInputContext(_In_ DWORD, _In_ IMCENUMPROC, _In_ LPARAM);
|
||||
BOOL WINAPI ImmLoadIME(HKL hKL);
|
||||
BOOL WINAPI CtfImmIsTextFrameServiceDisabled(VOID);
|
||||
|
||||
UINT
|
||||
WINAPI
|
||||
|
|
|
@ -87,6 +87,8 @@ C_ASSERT(offsetof(INPUTCONTEXT, dwReserve) == 0x134);
|
|||
C_ASSERT(sizeof(INPUTCONTEXT) == 0x140);
|
||||
#endif
|
||||
|
||||
struct IME_STATE;
|
||||
|
||||
typedef struct INPUTCONTEXTDX /* unconfirmed */
|
||||
{
|
||||
INPUTCONTEXT;
|
||||
|
@ -95,8 +97,8 @@ typedef struct INPUTCONTEXTDX /* unconfirmed */
|
|||
DWORD dwUnknown1;
|
||||
DWORD dwUIFlags;
|
||||
DWORD dwUnknown2;
|
||||
void *pUnknown3;
|
||||
DWORD dwUnknown4;
|
||||
struct IME_STATE *pState;
|
||||
DWORD dwChange;
|
||||
DWORD dwUnknown5;
|
||||
} INPUTCONTEXTDX, *LPINPUTCONTEXTDX;
|
||||
|
||||
|
@ -104,6 +106,8 @@ typedef struct INPUTCONTEXTDX /* unconfirmed */
|
|||
C_ASSERT(offsetof(INPUTCONTEXTDX, nVKey) == 0x140);
|
||||
C_ASSERT(offsetof(INPUTCONTEXTDX, bNeedsTrans) == 0x144);
|
||||
C_ASSERT(offsetof(INPUTCONTEXTDX, dwUIFlags) == 0x14c);
|
||||
C_ASSERT(offsetof(INPUTCONTEXTDX, pState) == 0x154);
|
||||
C_ASSERT(offsetof(INPUTCONTEXTDX, dwChange) == 0x158);
|
||||
C_ASSERT(sizeof(INPUTCONTEXTDX) == 0x160);
|
||||
#endif
|
||||
|
||||
|
@ -115,6 +119,12 @@ C_ASSERT(sizeof(INPUTCONTEXTDX) == 0x160);
|
|||
#define INIT_COMPFORM 0x00000010
|
||||
#define INIT_SOFTKBDPOS 0x00000020
|
||||
|
||||
// bits for INPUTCONTEXTDX.dwChange
|
||||
#define INPUTCONTEXTDX_CHANGE_OPEN 0x1
|
||||
#define INPUTCONTEXTDX_CHANGE_CONVERSION 0x2
|
||||
#define INPUTCONTEXTDX_CHANGE_SENTENCE 0x4
|
||||
#define INPUTCONTEXTDX_CHANGE_FORCE_OPEN 0x100
|
||||
|
||||
#ifndef WM_IME_REPORT
|
||||
#define WM_IME_REPORT 0x280
|
||||
#endif
|
||||
|
@ -154,4 +164,30 @@ typedef struct tagUNDETERMINESTRUCT
|
|||
|
||||
LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC);
|
||||
|
||||
typedef struct IME_SUBSTATE
|
||||
{
|
||||
struct IME_SUBSTATE *pNext;
|
||||
HKL hKL;
|
||||
DWORD dwValue;
|
||||
} IME_SUBSTATE, *PIME_SUBSTATE;
|
||||
|
||||
#ifndef _WIN64
|
||||
C_ASSERT(sizeof(IME_SUBSTATE) == 0xc);
|
||||
#endif
|
||||
|
||||
typedef struct IME_STATE
|
||||
{
|
||||
struct IME_STATE *pNext;
|
||||
WORD wLang;
|
||||
WORD fOpen;
|
||||
DWORD dwConversion;
|
||||
DWORD dwSentence;
|
||||
DWORD dwInit;
|
||||
PIME_SUBSTATE pSubState;
|
||||
} IME_STATE, *PIME_STATE;
|
||||
|
||||
#ifndef _WIN64
|
||||
C_ASSERT(sizeof(IME_STATE) == 0x18);
|
||||
#endif
|
||||
|
||||
#endif /* _WINE_IMM_H_ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue