Module: wine Branch: master Commit: f096dae361da369aa39e62c766ad590846e20f3f URL: http://source.winehq.org/git/wine.git/?a=commit;h=f096dae361da369aa39e62c766...
Author: Aric Stewart aric@codeweavers.com Date: Fri Feb 8 12:50:06 2008 -0600
imm: Implement ImmGenerateMessage.
---
dlls/imm32/imm.c | 33 +++++++++++++++++++++++++++++++++ dlls/imm32/imm32.spec | 2 +- 2 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c index c5fc71e..78c61ce 100644 --- a/dlls/imm32/imm.c +++ b/dlls/imm32/imm.c @@ -54,6 +54,12 @@ typedef struct tagInputContextData INPUTCONTEXT IMC; } InputContextData;
+typedef struct _tagTRANSMSG { + UINT message; + WPARAM wParam; + LPARAM lParam; +} TRANSMSG, *LPTRANSMSG; + static InputContextData *root_context = NULL; static HWND hwndDefault = NULL; static HANDLE hImeInst; @@ -1993,6 +1999,33 @@ DWORD WINAPI ImmGetIMCCSize(HIMCC imcc) return internal->dwSize; }
+/*********************************************************************** +* ImmGenerateMessage(IMM32.@) +*/ +BOOL WINAPI ImmGenerateMessage(HIMC hIMC) +{ + InputContextData *data = (InputContextData*)hIMC; + + TRACE("%i messages queued\n",data->IMC.dwNumMsgBuf); + if (data->IMC.dwNumMsgBuf > 0) + { + LPTRANSMSG lpTransMsg; + INT i; + + lpTransMsg = (LPTRANSMSG)ImmLockIMCC(data->IMC.hMsgBuf); + for (i = 0; i < data->IMC.dwNumMsgBuf; i++) + ImmInternalPostIMEMessage(lpTransMsg[i].message, lpTransMsg[i].wParam, lpTransMsg[i].lParam); + + ImmUnlockIMCC(data->IMC.hMsgBuf); + ImmDestroyIMCC(data->IMC.hMsgBuf); + + data->IMC.dwNumMsgBuf = 0; + data->IMC.hMsgBuf = NULL; + } + + return TRUE; +} + /***** * Internal functions to help with IME window management */ diff --git a/dlls/imm32/imm32.spec b/dlls/imm32/imm32.spec index ee2ca0a..0ecd1f9 100644 --- a/dlls/imm32/imm32.spec +++ b/dlls/imm32/imm32.spec @@ -17,7 +17,7 @@ @ stdcall ImmEscapeA(long long long ptr) @ stdcall ImmEscapeW(long long long ptr) @ stub ImmFreeLayout -@ stub ImmGenerateMessage +@ stdcall ImmGenerateMessage(ptr) @ stdcall ImmGetCandidateListA(long long ptr long) @ stdcall ImmGetCandidateListCountA(long ptr) @ stdcall ImmGetCandidateListCountW(long ptr)