ReactOS 0.4.16-dev-1470-gfbd70c8
imm.c File Reference
#include <user32.h>
#include <strsafe.h>
#include <immdev.h>
#include "immtable.h"
Include dependency graph for imm.c:

Go to the source code of this file.

Macros

#define IMM_INIT_MAGIC   0x19650412
 
#define MAX_CANDIDATEFORM   4
 
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind)    static type WINAPI IMMSTUB_##name params { IMM_RETURN_##retkind((type)retval); }
 
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind)    IMMSTUB_##name,
 
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind)
 
#define IFN_GetPenMenuData   12
 

Typedefs

typedef VOID(CALLBACKFN_GetPenMenuData) (PUINT pnID, PDWORD_PTR pdwMenuData)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (user32)
 
HWND FASTCALL IntGetTopLevelWindow (HWND hWnd)
 
HRESULT User32GetSystemFilePath (_Out_writes_(cchBuffer) PWSTR lpBuffer, _In_ SIZE_T cchBuffer, _In_ PCWSTR pszFileName)
 
static BOOL IntInitializeImmEntryTable (VOID)
 
BOOL WINAPI InitializeImmEntryTable (VOID)
 
BOOL WINAPI User32InitializeImmEntryTable (DWORD magic)
 
static BOOL User32CanSetImeWindowToImc (HIMC hIMC, HWND hImeWnd)
 
static BOOL User32GetImeShowStatus (VOID)
 
static LRESULT User32SendImeUIMessage (PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
static VOID User32NotifyOpenStatus (PIMEUI pimeui, HWND hwndIMC, BOOL bOpen)
 
static VOID User32SetImeWindowOfImc (HIMC hIMC, HWND hImeWnd)
 
static VOID User32UpdateImcOfImeUI (PIMEUI pimeui, HIMC hNewIMC)
 
static LRESULT ImeWnd_OnImeNotify (PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
 
static HWND User32CreateImeUIWindow (PIMEUI pimeui, HKL hKL)
 
static INT ImeWnd_OnCreate (PIMEUI pimeui, LPCREATESTRUCT lpCS)
 
static VOID User32DestroyImeUIWindow (PIMEUI pimeui)
 
static VOID ImeWnd_OnImeSelect (PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
 
static LRESULT ImeWnd_OnImeControl (PIMEUI pimeui, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
static VOID FASTCALL User32SetImeActivenessOfWindow (HWND hWnd, BOOL bActive)
 
VOID FASTCALL CtfLoadThreadLayout (PIMEUI pimeui)
 
static LRESULT FASTCALL User32DoImeHelp (PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
 
static BOOL CALLBACK ImeWnd_SwitchSoftKbdProc (_In_ HIMC hIMC, _In_ LPARAM lParam)
 
static BOOL CALLBACK User32GetPenMenuData (_Out_ PUINT pnID, _Out_ PDWORD_PTR pdwMenuData)
 
static VOID User32ImeMenuItemSelected (HWND hwndTarget)
 
static LRESULT ImeWnd_OnImeSystem (PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
 
LRESULT ImeWnd_OnImeSetContext (PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ImeWndProc_common (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
 
LRESULT WINAPI ImeWndProcA (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
LRESULT WINAPI ImeWndProcW (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
BOOL WINAPI UpdatePerUserImmEnabling (VOID)
 
BOOL WINAPI RegisterIMEClass (VOID)
 
BOOL WINAPI IMPSetIMEW (HWND hwnd, LPIMEPROW ime)
 
BOOL WINAPI IMPQueryIMEW (LPIMEPROW ime)
 
BOOL WINAPI IMPGetIMEW (HWND hwnd, LPIMEPROW ime)
 
BOOL WINAPI IMPSetIMEA (HWND hwnd, LPIMEPROA ime)
 
BOOL WINAPI IMPQueryIMEA (LPIMEPROA ime)
 
BOOL WINAPI IMPGetIMEA (HWND hwnd, LPIMEPROA ime)
 
LRESULT WINAPI SendIMEMessageExW (HWND hwnd, LPARAM lParam)
 
LRESULT WINAPI SendIMEMessageExA (HWND hwnd, LPARAM lParam)
 
BOOL WINAPI WINNLSEnableIME (HWND hwnd, BOOL enable)
 
BOOL WINAPI WINNLSGetEnableStatus (HWND hwnd)
 
UINT WINAPI WINNLSGetIMEHotkey (HWND hwnd)
 

Variables

HINSTANCE ghImm32 = NULL
 
BOOL gbImmInitializing = FALSE
 
INT gfConIme = -1
 
Imm32ApiTable gImmApiEntries
 
static FN_GetPenMenuData s_pGetPenMenuData = NULL
 

Macro Definition Documentation

◆ DEFINE_IMM_ENTRY [1/3]

#define DEFINE_IMM_ENTRY (   type,
  name,
  params,
  retval,
  retkind 
)     static type WINAPI IMMSTUB_##name params { IMM_RETURN_##retkind((type)retval); }

Definition at line 41 of file imm.c.

◆ DEFINE_IMM_ENTRY [2/3]

#define DEFINE_IMM_ENTRY (   type,
  name,
  params,
  retval,
  retkind 
)     IMMSTUB_##name,

Definition at line 41 of file imm.c.

◆ DEFINE_IMM_ENTRY [3/3]

#define DEFINE_IMM_ENTRY (   type,
  name,
  params,
  retval,
  retkind 
)
Value:
do { \
FN_##name proc = (FN_##name)GetProcAddress(imm32, #name); \
if (!proc) { \
ERR("Could not load %s\n", #name); \
return FALSE; \
} \
IMM_FN(name) = proc; \
} while (0);
#define FALSE
Definition: types.h:117
#define GetProcAddress(x, y)
Definition: compat.h:753
static HANDLE proc()
Definition: pdb.c:34
Definition: name.c:39

Definition at line 41 of file imm.c.

◆ IFN_GetPenMenuData

#define IFN_GetPenMenuData   12

Definition at line 628 of file imm.c.

◆ IMM_INIT_MAGIC

#define IMM_INIT_MAGIC   0x19650412

Definition at line 15 of file imm.c.

◆ MAX_CANDIDATEFORM

#define MAX_CANDIDATEFORM   4

Definition at line 16 of file imm.c.

Typedef Documentation

◆ FN_GetPenMenuData

typedef VOID(CALLBACK * FN_GetPenMenuData) (PUINT pnID, PDWORD_PTR pdwMenuData)

Definition at line 626 of file imm.c.

Function Documentation

◆ CtfLoadThreadLayout()

VOID FASTCALL CtfLoadThreadLayout ( PIMEUI  pimeui)

Definition at line 564 of file imm.c.

565{
566 IMM_FN(CtfImmTIMActivate)(pimeui->hKL);
567 pimeui->hKL = GetWin32ClientInfo()->hKL;
568 IMM_FN(ImmLoadIME)(pimeui->hKL);
569 pimeui->hwndUI = NULL;
570}
#define NULL
Definition: types.h:112
BOOL WINAPI ImmLoadIME(_In_ HKL hKL)
Definition: ime.c:611
HRESULT WINAPI CtfImmTIMActivate(_In_ HKL hKL)
Definition: ctf.c:1123
#define GetWin32ClientInfo()
Definition: ntuser.h:352
HKL hKL
Definition: ntuser.h:1223
HWND hwndUI
Definition: ntuser.h:1224
#define IMM_FN(name)
Definition: user32p.h:56

Referenced by ImeWnd_OnImeSystem().

◆ ImeWnd_OnCreate()

static INT ImeWnd_OnCreate ( PIMEUI  pimeui,
LPCREATESTRUCT  lpCS 
)
static

Definition at line 334 of file imm.c.

335{
336 PWND pParentWnd, pWnd = pimeui->spwnd;
337 HIMC hIMC = NULL;
338
339 if (!pWnd || (pWnd->style & (WS_DISABLED | WS_POPUP)) != (WS_DISABLED | WS_POPUP))
340 return -1;
341
342 pParentWnd = ValidateHwnd(lpCS->hwndParent);
343 if (pParentWnd)
344 {
345 hIMC = pParentWnd->hImc;
346 if (hIMC && !User32CanSetImeWindowToImc(hIMC, UserHMGetHandle(pWnd)))
347 hIMC = NULL;
348 }
349
350 User32UpdateImcOfImeUI(pimeui, hIMC);
351
352 pimeui->fShowStatus = FALSE;
353 pimeui->nCntInIMEProc = 0;
354 pimeui->fActivate = FALSE;
355 pimeui->fDestroy = FALSE;
356 pimeui->hwndIMC = NULL;
357 pimeui->hKL = GetWin32ClientInfo()->hKL;
358 pimeui->fCtrlShowStatus = TRUE;
359 pimeui->dwLastStatus = 0;
360
361 return 0;
362}
DWORD HIMC
Definition: dimm.idl:75
#define TRUE
Definition: types.h:120
#define UserHMGetHandle(obj)
Definition: ntuser.h:230
#define WS_POPUP
Definition: pedump.c:616
#define WS_DISABLED
Definition: pedump.c:621
Definition: ntuser.h:694
DWORD style
Definition: ntuser.h:706
HIMC hImc
Definition: ntuser.h:740
DWORD dwLastStatus
Definition: ntuser.h:1235
PWND spwnd
Definition: ntuser.h:1220
UINT fCtrlShowStatus
Definition: ntuser.h:1232
UINT fActivate
Definition: ntuser.h:1228
HWND hwndIMC
Definition: ntuser.h:1222
UINT fShowStatus
Definition: ntuser.h:1227
LONG nCntInIMEProc
Definition: ntuser.h:1225
UINT fDestroy
Definition: ntuser.h:1229
static BOOL User32CanSetImeWindowToImc(HIMC hIMC, HWND hImeWnd)
Definition: imm.c:154
static VOID User32UpdateImcOfImeUI(PIMEUI pimeui, HIMC hNewIMC)
Definition: imm.c:218
#define ValidateHwnd(hwnd)
Definition: precomp.h:101

Referenced by ImeWndProc_common().

◆ ImeWnd_OnImeControl()

static LRESULT ImeWnd_OnImeControl ( PIMEUI  pimeui,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)
static

Definition at line 415 of file imm.c.

416{
417 HIMC hIMC = pimeui->hIMC;
418 DWORD dwConversion, dwSentence;
419 POINT pt;
420
421 if (IS_CICERO_MODE())
422 {
424 {
426 pimeui->dwLastStatus = 0;
427 }
428 else if (wParam == IMC_CLOSESTATUSWINDOW)
429 {
431 }
432 }
433
434 if (!hIMC)
435 return 0;
436
437 switch (wParam)
438 {
440 if (!IMM_FN(ImmGetConversionStatus)(hIMC, &dwConversion, &dwSentence))
441 return 1;
442 return dwConversion;
443
445 if (!IMM_FN(ImmGetConversionStatus)(hIMC, &dwConversion, &dwSentence))
446 return 1;
447 return dwSentence;
448
450 return IMM_FN(ImmGetOpenStatus)(hIMC);
451
453 if (!IMM_FN(ImmGetConversionStatus)(hIMC, &dwConversion, &dwSentence) ||
454 !IMM_FN(ImmSetConversionStatus)(hIMC, (DWORD)lParam, dwSentence))
455 {
456 return 1;
457 }
458 break;
459
461 if (!IMM_FN(ImmGetConversionStatus)(hIMC, &dwConversion, &dwSentence) ||
462 !IMM_FN(ImmSetConversionStatus)(hIMC, dwConversion, (DWORD)lParam))
463 {
464 return 1;
465 }
466 break;
467
469 if (!IMM_FN(ImmSetOpenStatus)(hIMC, (BOOL)lParam))
470 return 1;
471 break;
472
478 return User32SendImeUIMessage(pimeui, WM_IME_CONTROL, wParam, lParam, unicode);
479
482 return 1;
483 break;
484
486 if (unicode)
487 {
489 return 1;
490 }
491 else
492 {
494 return 1;
495 }
496 break;
497
499 if (unicode)
500 {
502 return 1;
503 }
504 else
505 {
507 return 1;
508 }
509 break;
510
513 return 1;
514 break;
515
519 if (!IMM_FN(ImmSetStatusWindowPos)(hIMC, &pt))
520 return 1;
521 break;
522
524 if (pimeui->fShowStatus && User32GetImeShowStatus())
525 {
526 pimeui->fShowStatus = FALSE;
528 }
529 pimeui->fCtrlShowStatus = FALSE;
530 break;
531
533 if (!pimeui->fShowStatus && User32GetImeShowStatus())
534 {
535 pimeui->fShowStatus = TRUE;
537 }
538 pimeui->fCtrlShowStatus = TRUE;
539 break;
540
541 default:
542 break;
543 }
544
545 return 0;
546}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define pt(x, y)
Definition: drawing.c:79
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI ImmSetCompositionFontA(_In_ HIMC hIMC, _In_ LPLOGFONTA lplf)
Definition: ime.c:1263
BOOL WINAPI ImmGetCompositionFontA(_In_ HIMC hIMC, _Out_ LPLOGFONTA lplf)
Definition: ime.c:1184
BOOL WINAPI ImmGetCompositionFontW(_In_ HIMC hIMC, _Out_ LPLOGFONTW lplf)
Definition: ime.c:1223
BOOL WINAPI ImmSetCompositionFontW(_In_ HIMC hIMC, _In_ LPLOGFONTW lplf)
Definition: ime.c:1322
VOID WINAPI CtfImmRestoreToolbarWnd(_In_ LPVOID pUnused, _In_ DWORD dwShowFlags)
Definition: ctf.c:1392
DWORD WINAPI CtfImmHideToolbarWnd(VOID)
Definition: ctf.c:1363
#define IMC_SETCANDIDATEPOS
Definition: imm.h:149
BOOL WINAPI ImmGetConversionStatus(_In_ HIMC hIMC, _Out_opt_ LPDWORD lpfdwConversion, _Out_opt_ LPDWORD lpfdwSentence)
Definition: ime.c:1501
BOOL WINAPI ImmSetConversionStatus(_In_ HIMC hIMC, _In_ DWORD fdwConversion, _In_ DWORD fdwSentence)
Definition: ime.c:1534
#define IMC_CLOSESTATUSWINDOW
Definition: imm.h:156
BOOL WINAPI ImmSetCompositionWindow(_In_ HIMC hIMC, _In_ LPCOMPOSITIONFORM lpCompForm)
Definition: ime.c:1149
BOOL WINAPI ImmSetCandidateWindow(_In_ HIMC hIMC, _In_ LPCANDIDATEFORM lpCandidate)
Definition: candidate.c:433
#define IMC_SETSTATUSWINDOWPOS
Definition: imm.h:155
#define IMC_GETCOMPOSITIONWINDOW
Definition: imm.h:152
#define IMC_SETCOMPOSITIONWINDOW
Definition: imm.h:153
#define IMC_GETCANDIDATEPOS
Definition: imm.h:148
BOOL WINAPI ImmSetStatusWindowPos(_In_ HIMC hIMC, _In_ LPPOINT lpptPos)
Definition: ime.c:1091
BOOL WINAPI ImmGetOpenStatus(_In_ HIMC hIMC)
Definition: ime.c:996
#define IMN_OPENSTATUSWINDOW
Definition: imm.h:373
#define IMC_GETCOMPOSITIONFONT
Definition: imm.h:150
#define IMC_SETCOMPOSITIONFONT
Definition: imm.h:151
#define IMC_OPENSTATUSWINDOW
Definition: imm.h:157
#define IMN_CLOSESTATUSWINDOW
Definition: imm.h:372
BOOL WINAPI ImmSetOpenStatus(_In_ HIMC hIMC, _In_ BOOL fOpen)
Definition: ime.c:1020
#define IMC_GETSTATUSWINDOWPOS
Definition: imm.h:154
#define IMC_SETOPENSTATUS
Definition: immdev.h:372
#define IMC_SETCONVERSIONMODE
Definition: immdev.h:370
#define IMC_SETSENTENCEMODE
Definition: immdev.h:371
#define IMC_GETSOFTKBDPOS
Definition: immdev.h:91
#define IMC_GETSENTENCEMODE
Definition: immdev.h:87
#define IMC_GETOPENSTATUS
Definition: immdev.h:88
#define IMC_SETSOFTKBDPOS
Definition: immdev.h:92
#define IMC_GETCONVERSIONMODE
Definition: immdev.h:86
#define IS_CICERO_MODE()
Definition: ntuser.h:1213
#define BOOL
Definition: nt_native.h:43
#define DWORD
Definition: nt_native.h:44
HIMC hIMC
Definition: ntuser.h:1221
static BOOL User32GetImeShowStatus(VOID)
Definition: imm.c:160
static LRESULT User32SendImeUIMessage(PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: imm.c:167
#define GET_Y_LPARAM(lp)
Definition: windowsx.h:300
#define GET_X_LPARAM(lp)
Definition: windowsx.h:299
#define WM_IME_NOTIFY
Definition: winuser.h:1849
#define WM_IME_CONTROL
Definition: winuser.h:1850

Referenced by ImeWndProc_common().

◆ ImeWnd_OnImeNotify()

static LRESULT ImeWnd_OnImeNotify ( PIMEUI  pimeui,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 239 of file imm.c.

240{
241 LRESULT ret = 0;
242 HIMC hIMC;
243 LPINPUTCONTEXT pIC;
244 HWND hwndUI, hwndIMC, hImeWnd, hwndOwner;
245
246 ASSERT(pimeui->spwnd != NULL);
247
248 switch (wParam)
249 {
252 hIMC = pimeui->hIMC;
253 pIC = IMM_FN(ImmLockIMC)(hIMC);
254 if (pIC)
255 {
256 hwndIMC = pimeui->hwndIMC;
257 if (IsWindow(hwndIMC))
258 {
259 NtUserNotifyIMEStatus(hwndIMC, pIC->fOpen, pIC->fdwConversion);
260 }
261 else if (gfConIme == TRUE && pimeui->spwnd)
262 {
263 hImeWnd = UserHMGetHandle(pimeui->spwnd);
264 hwndOwner = GetWindow(hImeWnd, GW_OWNER);
265 if (hwndOwner)
266 {
267 NtUserNotifyIMEStatus(hwndOwner, pIC->fOpen, pIC->fdwConversion);
268 }
269 }
270
271 IMM_FN(ImmUnlockIMC)(hIMC);
272 }
273 /* FALL THROUGH */
274 default:
276 break;
277
278 case IMN_PRIVATE:
279 hwndUI = pimeui->hwndUI;
280 if (IsWindow(hwndUI))
282 break;
283 }
284
285 return ret;
286}
return ret
Definition: mutex.c:146
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
Definition: imm.c:1079
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
Definition: imm.c:1089
#define IMN_PRIVATE
Definition: imm.h:385
#define IMN_SETOPENSTATUS
Definition: imm.h:379
#define IMN_SETCONVERSIONMODE
Definition: imm.h:377
DWORD NTAPI NtUserNotifyIMEStatus(_In_ HWND hwnd, _In_ BOOL fOpen, _In_ DWORD dwConversion)
Definition: ime.c:848
#define ASSERT(a)
Definition: mode.c:44
DWORD fdwConversion
Definition: immdev.h:111
INT gfConIme
Definition: imm.c:23
LONG_PTR LRESULT
Definition: windef.h:209
#define GW_OWNER
Definition: winuser.h:777
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by ImeWndProc_common().

◆ ImeWnd_OnImeSelect()

static VOID ImeWnd_OnImeSelect ( PIMEUI  pimeui,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 380 of file imm.c.

381{
382 HKL hKL;
383 HWND hwndUI, hwndIMC = pimeui->hwndIMC;
384
385 if (wParam)
386 {
387 pimeui->hKL = hKL = (HKL)lParam;
388
389 if (!pimeui->fActivate)
390 return;
391
392 pimeui->hwndUI = hwndUI = User32CreateImeUIWindow(pimeui, hKL);
393 if (hwndUI)
395
397 {
398 if (!pimeui->fShowStatus && pimeui->fActivate && IsWindow(hwndIMC))
399 User32NotifyOpenStatus(pimeui, hwndIMC, TRUE);
400 }
401 }
402 else
403 {
404 if (pimeui->fShowStatus && pimeui->fActivate && IsWindow(hwndIMC))
405 User32NotifyOpenStatus(pimeui, hwndIMC, FALSE);
406
409 pimeui->hKL = NULL;
410 }
411}
UINT_PTR HKL
Definition: msctf.idl:125
static VOID User32DestroyImeUIWindow(PIMEUI pimeui)
Definition: imm.c:365
static HWND User32CreateImeUIWindow(PIMEUI pimeui, HKL hKL)
Definition: imm.c:289
static VOID User32NotifyOpenStatus(PIMEUI pimeui, HWND hwndIMC, BOOL bOpen)
Definition: imm.c:195
#define WM_IME_SELECT
Definition: winuser.h:1852

Referenced by ImeWndProc_common().

◆ ImeWnd_OnImeSetContext()

LRESULT ImeWnd_OnImeSetContext ( PIMEUI  pimeui,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 834 of file imm.c.

835{
836 LRESULT ret;
837 HIMC hIMC;
839 HWND hwndFocus, hwndOldImc, hwndNewImc, hImeWnd, hwndActive, hwndOwner;
840 PWND pwndFocus, pImeWnd, pwndOwner;
841 COMPOSITIONFORM CompForm;
842
843 pimeui->fActivate = !!wParam;
844 hwndOldImc = pimeui->hwndIMC;
845 ASSERT(pimeui->spwnd != NULL);
846
847 if (wParam)
848 {
849 if (!pimeui->hwndUI)
850 pimeui->hwndUI = User32CreateImeUIWindow(pimeui, pimeui->hKL);
851
852 if (gfConIme == -1)
853 {
855 if (gfConIme)
856 pimeui->fCtrlShowStatus = FALSE;
857 }
858
859 hImeWnd = UserHMGetHandle(pimeui->spwnd);
860
861 if (gfConIme)
862 {
863 hwndOwner = GetWindow(hImeWnd, GW_OWNER);
864 pwndOwner = ValidateHwnd(hwndOwner);
865 if (pwndOwner)
866 {
867 User32UpdateImcOfImeUI(pimeui, pwndOwner->hImc);
868
869 if (pimeui->hwndUI)
870 SetWindowLongPtrW(pimeui->hwndUI, IMMGWLP_IMC, (LONG_PTR)pwndOwner->hImc);
871 }
872
874 }
875
876 hwndFocus = (HWND)NtUserQueryWindow(hImeWnd, QUERY_WINDOW_FOCUS);
877
878 hIMC = IMM_FN(ImmGetContext)(hwndFocus);
879
880 if (hIMC && !User32CanSetImeWindowToImc(hIMC, hImeWnd))
881 {
883 return 0;
884 }
885
886 User32UpdateImcOfImeUI(pimeui, hIMC);
887
888 if (pimeui->hwndUI)
890
891 if (hIMC)
892 {
893 pIC = IMM_FN(ImmLockIMC)(hIMC);
894 if (!pIC)
895 return 0;
896
897 if (hwndFocus != pIC->hWnd)
898 {
899 IMM_FN(ImmUnlockIMC)(hIMC);
900 return 0;
901 }
902
903 if ((pIC->dwUIFlags & 0x40000) && hwndOldImc != hwndFocus)
904 {
905 RtlZeroMemory(&CompForm, sizeof(CompForm));
906 IMM_FN(ImmSetCompositionWindow)(hIMC, &CompForm);
907
908 pIC->dwUIFlags &= ~0x40000;
909 }
910
911 IMM_FN(ImmUnlockIMC)(hIMC);
912
913 hImeWnd = UserHMGetHandle(pimeui->spwnd);
914 if (NtUserSetImeOwnerWindow(hImeWnd, hwndFocus))
915 pimeui->hwndIMC = hwndFocus;
916 }
917 else
918 {
919 pimeui->hwndIMC = hwndFocus;
920
921 hImeWnd = UserHMGetHandle(pimeui->spwnd);
923 }
924 }
925
927
928 if (!pimeui->spwnd)
929 return 0;
930
931 if (!pimeui->fCtrlShowStatus || !User32GetImeShowStatus())
932 return ret;
933
934 hImeWnd = UserHMGetHandle(pimeui->spwnd);
935 hwndFocus = (HWND)NtUserQueryWindow(hImeWnd, QUERY_WINDOW_FOCUS);
936 pwndFocus = ValidateHwnd(hwndFocus);
937
938 if (wParam)
939 {
940 pImeWnd = ValidateHwnd(hImeWnd);
941 if (pwndFocus && pImeWnd && pImeWnd->head.pti == pwndFocus->head.pti)
942 {
943 hwndNewImc = pimeui->hwndIMC;
944 if (pimeui->fShowStatus)
945 {
946 if (hwndOldImc && hwndNewImc && hwndOldImc != hwndNewImc &&
947 IntGetTopLevelWindow(hwndOldImc) != IntGetTopLevelWindow(hwndNewImc))
948 {
949 User32NotifyOpenStatus(pimeui, hwndOldImc, FALSE);
950 User32NotifyOpenStatus(pimeui, hwndNewImc, TRUE);
951 }
952 }
953 else
954 {
955 if (ValidateHwnd(hwndNewImc))
956 User32NotifyOpenStatus(pimeui, hwndNewImc, TRUE);
957 }
958 }
959
960 pImeWnd = pimeui->spwnd;
961 hImeWnd = (pImeWnd ? UserHMGetHandle(pImeWnd) : NULL);
962 if (hImeWnd)
964 }
965 else
966 {
967 pImeWnd = pimeui->spwnd;
968 hImeWnd = UserHMGetHandle(pImeWnd);
969 hwndActive = (HWND)NtUserQueryWindow(hImeWnd, QUERY_WINDOW_ACTIVE);
970 if (!pwndFocus || !hwndActive || pImeWnd->head.pti != pwndFocus->head.pti)
971 {
972 if (IsWindow(hwndOldImc))
973 {
974 User32NotifyOpenStatus(pimeui, hwndOldImc, FALSE);
975 }
976 else
977 {
978 pimeui->fShowStatus = FALSE;
980 }
981 }
982 }
983
984 return ret;
985}
HANDLE HWND
Definition: compat.h:19
HIMC WINAPI ImmGetContext(_In_ HWND hWnd)
Definition: imm.c:1065
#define IMMGWLP_IMC
Definition: immdev.h:103
#define QUERY_WINDOW_FOCUS
Definition: ntuser.h:2846
#define QUERY_WINDOW_ACTIVE
Definition: ntuser.h:2845
BOOL NTAPI NtUserSetImeOwnerWindow(_In_ HWND hImeWnd, _In_opt_ HWND hwndFocus)
Definition: ime.c:1430
@ THREADSTATE_CHECKCONIME
Definition: ntuser.h:2502
@ HWNDLOCK_ROUTINE_CHECKIMESHOWSTATUSINTHRD
Definition: ntuser.h:1641
DWORD_PTR NTAPI NtUserQueryWindow(HWND hWnd, DWORD Index)
Definition: window.c:4207
BOOL NTAPI NtUserCallHwndLock(HWND hWnd, DWORD Routine)
Definition: simplecall.c:585
DWORD_PTR NTAPI NtUserGetThreadState(DWORD Routine)
Definition: misc.c:240
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define INT
Definition: polytest.cpp:20
THRDESKHEAD head
Definition: ntuser.h:695
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
HWND FASTCALL IntGetTopLevelWindow(HWND hWnd)
Definition: imm.c:25
#define WM_IME_SETCONTEXT
Definition: winuser.h:1848
#define SetWindowLongPtrW
Definition: winuser.h:5431

Referenced by ImeWndProc_common().

◆ ImeWnd_OnImeSystem()

static LRESULT ImeWnd_OnImeSystem ( PIMEUI  pimeui,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 679 of file imm.c.

680{
681 LRESULT ret = 0;
683 HIMC hIMC = pimeui->hIMC;
684 LPCANDIDATEFORM pCandForm;
685 LPCOMPOSITIONFORM pCompForm;
686 DWORD dwConversion, dwSentence;
687 HWND hImeWnd;
688 BOOL bCompForm;
689 CANDIDATEFORM CandForm;
690 COMPOSITIONFORM CompForm;
691 UINT iCandForm;
692
693 ASSERT(pimeui->spwnd != NULL);
694
695 switch (wParam)
696 {
699 {
700 hImeWnd = UserHMGetHandle(pimeui->spwnd);
702 }
703 break;
704
705 case IMS_UPDATEIMEUI:
706 if (!hIMC)
707 break;
708
709 bCompForm = TRUE;
710 pIC = IMM_FN(ImmLockIMC)(hIMC);
711 if (pIC)
712 {
713 bCompForm = !(pIC->dwUIFlags & 0x2);
714 IMM_FN(ImmUnlockIMC)(hIMC);
715 }
716
717 if (!IsWindow(pimeui->hwndIMC))
718 break;
719
720 if (bCompForm && IMM_FN(ImmGetCompositionWindow)(hIMC, &CompForm))
721 {
722 if (CompForm.dwStyle)
723 IMM_FN(ImmSetCompositionWindow)(hIMC, &CompForm);
724 }
725
726 for (iCandForm = 0; iCandForm < MAX_CANDIDATEFORM; ++iCandForm)
727 {
728 if (IMM_FN(ImmGetCandidateWindow)(hIMC, iCandForm, &CandForm))
729 {
730 if (CandForm.dwStyle)
731 IMM_FN(ImmSetCandidateWindow)(hIMC, &CandForm);
732 }
733 }
734 break;
735
736 case IMS_SETCANDFORM:
737 pIC = IMM_FN(ImmLockIMC)(hIMC);
738 if (!pIC)
739 break;
740
741 pCandForm = &pIC->cfCandForm[lParam];
742 IMM_FN(ImmSetCandidateWindow)(hIMC, pCandForm);
743 IMM_FN(ImmUnlockIMC)(hIMC);
744 break;
745
746 case IMS_SETCOMPFONT:
747 pIC = IMM_FN(ImmLockIMC)(hIMC);
748 if (!pIC)
749 break;
750
751 IMM_FN(ImmSetCompositionFontW)(hIMC, &pIC->lfFont.W);
752 IMM_FN(ImmUnlockIMC)(hIMC);
753 break;
754
755 case IMS_SETCOMPFORM:
756 pIC = IMM_FN(ImmLockIMC)(hIMC);
757 if (!pIC)
758 break;
759
760 pCompForm = &pIC->cfCompForm;
761 pIC->dwUIFlags |= 0x8;
762 IMM_FN(ImmSetCompositionWindow)(hIMC, pCompForm);
763 IMM_FN(ImmUnlockIMC)(hIMC);
764 break;
765
766 case IMS_CONFIGURE:
768 break;
769
771 if (hIMC)
773 break;
774
775 case IMS_FREELAYOUT:
777 break;
778
779 case IMS_SOFTKBDONOFF:
781 break;
782
784 IMM_FN(ImmGetConversionStatus)(hIMC, &dwConversion, &dwSentence);
785 ret = dwConversion;
786 break;
787
788 case IMS_IMEHELP:
789 return User32DoImeHelp(pimeui, wParam, lParam);
790
791 case IMS_IMEACTIVATE:
793 break;
794
797 break;
798
801 break;
802
803 case IMS_GETIMEMENU:
805 break;
806
809 break;
810
811 case IMS_GETCONTEXT:
813 break;
814
817 case IMS_SETLANGBAND:
820 break;
821
823 CtfLoadThreadLayout(pimeui);
824 break;
825
826 default:
827 break;
828 }
829
830 return ret;
831}
#define ULONG_PTR
Definition: config.h:101
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI ImmEnumInputContext(_In_ DWORD dwThreadId, _In_ IMCENUMPROC lpfn, _In_ LPARAM lParam)
Definition: imm.c:1123
#define IMS_IMEHELP
Definition: imm32_undoc.h:45
#define IMS_GETIMEMENU
Definition: imm32_undoc.h:49
#define IMS_SETOPENSTATUS
Definition: imm32_undoc.h:41
BOOL WINAPI ImmFreeLayout(_In_ HKL hKL)
Definition: imm.c:124
#define IMS_IMEMENUITEMSELECTED
Definition: imm32_undoc.h:50
BOOL WINAPI ImmActivateLayout(_In_ HKL hKL)
Definition: imm.c:450
#define IMS_IMEACTIVATE
Definition: imm32_undoc.h:46
LRESULT WINAPI ImmPutImeMenuItemsIntoMappedFile(_In_ HIMC hIMC)
Definition: imemenu.c:377
#define IMS_UPDATEIMEUI
Definition: imm32_undoc.h:36
#define IMS_GETCONTEXT
Definition: imm32_undoc.h:51
#define IMS_SETCANDFORM
Definition: imm32_undoc.h:37
#define IMS_SETLANGBAND
Definition: imm32_undoc.h:55
#define IMS_COMPLETECOMPSTR
Definition: imm32_undoc.h:53
#define IMS_UNSETLANGBAND
Definition: imm32_undoc.h:56
#define IMS_SETCOMPFONT
Definition: imm32_undoc.h:38
#define IMS_GETCONVSTATUS
Definition: imm32_undoc.h:44
#define IMS_CONFIGURE
Definition: imm32_undoc.h:40
LRESULT WINAPI ImmSystemHandler(_In_ HIMC hIMC, _Inout_opt_ WPARAM wParam, _Inout_opt_ LPARAM lParam)
Definition: keymsg.c:847
#define IMS_NOTIFYIMESHOW
Definition: imm32_undoc.h:35
#define IMS_LOADTHREADLAYOUT
Definition: imm32_undoc.h:54
#define IMS_SOFTKBDONOFF
Definition: imm32_undoc.h:43
#define IMS_FREELAYOUT
Definition: imm32_undoc.h:42
#define IMS_ACTIVATELAYOUT
Definition: imm32_undoc.h:48
#define IMS_IMEDEACTIVATE
Definition: imm32_undoc.h:47
#define IMS_SETCOMPFORM
Definition: imm32_undoc.h:39
#define IMS_SENDNOTIFICATION
Definition: imm32_undoc.h:52
BOOL WINAPI ImmGetCandidateWindow(_In_ HIMC hIMC, _In_ DWORD dwIndex, _Out_ LPCANDIDATEFORM lpCandidate)
Definition: candidate.c:396
BOOL WINAPI ImmConfigureIMEW(_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
Definition: ime.c:1657
BOOL WINAPI ImmGetCompositionWindow(_In_ HIMC hIMC, _Out_ LPCOMPOSITIONFORM lpCompForm)
Definition: ime.c:1122
#define IME_CONFIG_GENERAL
Definition: imm.h:405
DWORD NTAPI NtUserCallHwndParamLock(HWND hWnd, DWORD_PTR Param, DWORD Routine)
Definition: simplecall.c:895
@ TWOPARAM_ROUTINE_IMESHOWSTATUSCHANGE
Definition: ntuser.h:1650
unsigned int UINT
Definition: ndis.h:50
DWORD dwStyle
Definition: dimm.idl:80
DWORD dwStyle
Definition: dimm.idl:86
static VOID FASTCALL User32SetImeActivenessOfWindow(HWND hWnd, BOOL bActive)
Definition: imm.c:549
static VOID User32ImeMenuItemSelected(HWND hwndTarget)
Definition: imm.c:661
VOID FASTCALL CtfLoadThreadLayout(PIMEUI pimeui)
Definition: imm.c:564
static BOOL CALLBACK ImeWnd_SwitchSoftKbdProc(_In_ HIMC hIMC, _In_ LPARAM lParam)
Definition: imm.c:608
static LRESULT FASTCALL User32DoImeHelp(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:574
#define MAX_CANDIDATEFORM
Definition: precomp.h:78

Referenced by ImeWndProc_common().

◆ ImeWnd_SwitchSoftKbdProc()

static BOOL CALLBACK ImeWnd_SwitchSoftKbdProc ( _In_ HIMC  hIMC,
_In_ LPARAM  lParam 
)
static

Definition at line 608 of file imm.c.

609{
610 DWORD dwConversion, dwSentence, dwNewConversion;
611
612 IMM_FN(ImmGetConversionStatus)(hIMC, &dwConversion, &dwSentence);
613
614 if (lParam)
615 dwNewConversion = dwConversion | IME_CMODE_SOFTKBD;
616 else
617 dwNewConversion = dwConversion & ~IME_CMODE_SOFTKBD;
618
619 if (dwNewConversion != dwConversion)
620 IMM_FN(ImmSetConversionStatus)(hIMC, dwNewConversion, dwSentence);
621
622 return TRUE;
623}
#define IME_CMODE_SOFTKBD
Definition: imm.h:349

Referenced by ImeWnd_OnImeSystem().

◆ ImeWndProc_common()

LRESULT WINAPI ImeWndProc_common ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)

Definition at line 989 of file imm.c.

990{
991 PWND pWnd;
992 PIMEUI pimeui;
993 LRESULT ret;
994
995 pWnd = ValidateHwnd(hwnd);
996 if (pWnd == NULL)
997 {
998 ERR("hwnd was %p\n", hwnd);
999 return 0;
1000 }
1001
1002 if (!pWnd->fnid)
1003 {
1005 }
1006 else if (pWnd->fnid != FNID_IME)
1007 {
1008 ERR("fnid was 0x%x\n", pWnd->fnid);
1009 return 0;
1010 }
1011
1012 pimeui = (PIMEUI)GetWindowLongPtrW(hwnd, 0);
1013 if (pimeui == NULL)
1014 {
1015 pimeui = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMEUI));
1016 if (pimeui == NULL)
1017 {
1018 ERR("HeapAlloc failed\n");
1021 return 0;
1022 }
1023
1024 SetWindowLongPtrW(hwnd, 0, (LONG_PTR)pimeui);
1025 pimeui->spwnd = pWnd;
1026 }
1027
1028 if (IS_CICERO_MODE())
1029 {
1031 if (ret)
1032 return ret;
1033 }
1034
1035 if (pimeui->nCntInIMEProc > 0)
1036 {
1037 switch (msg)
1038 {
1039 case WM_IME_CHAR:
1041 case WM_IME_CONTROL:
1042 case WM_IME_REQUEST:
1043 case WM_IME_SELECT:
1044 case WM_IME_SETCONTEXT:
1045 case WM_IME_STARTCOMPOSITION:
1046 case WM_IME_COMPOSITION:
1047 case WM_IME_ENDCOMPOSITION:
1048 return 0;
1049
1050 case WM_IME_NOTIFY:
1051 if (wParam < IMN_PRIVATE || IS_IME_HKL(pimeui->hKL) || !IS_CICERO_MODE())
1052 return 0;
1053 break;
1054
1055 case WM_IME_SYSTEM:
1056 switch (wParam)
1057 {
1058 case 0x03:
1059 case 0x10:
1060 case 0x13:
1061 break;
1062
1063 default:
1064 return 0;
1065 }
1066 break;
1067
1068 default:
1069 goto Finish;
1070 }
1071 }
1072
1073 if ((pWnd->state2 & WNDS2_INDESTROY) || (pWnd->state & WNDS_DESTROYED))
1074 {
1075 switch (msg)
1076 {
1077 case WM_DESTROY:
1078 case WM_NCDESTROY:
1079 case WM_FINALDESTROY:
1080 break;
1081
1082 default:
1083 return 0;
1084 }
1085 }
1086
1087 switch (msg)
1088 {
1089 case WM_CREATE:
1090 return ImeWnd_OnCreate(pimeui, (LPCREATESTRUCT)lParam);
1091
1092 case WM_DESTROY:
1094 return 0;
1095
1096 case WM_NCDESTROY:
1097 case WM_FINALDESTROY:
1098 pimeui->spwnd = NULL;
1099 HeapFree(GetProcessHeap(), 0, pimeui);
1101 break;
1102
1103 case WM_ERASEBKGND:
1104 return TRUE;
1105
1106 case WM_PAINT:
1107 return 0;
1108
1109 case WM_IME_STARTCOMPOSITION:
1110 case WM_IME_COMPOSITION:
1111 case WM_IME_ENDCOMPOSITION:
1112 return User32SendImeUIMessage(pimeui, msg, wParam, lParam, unicode);
1113
1114 case WM_IME_CONTROL:
1115 return ImeWnd_OnImeControl(pimeui, wParam, lParam, unicode);
1116
1117 case WM_IME_NOTIFY:
1118 return ImeWnd_OnImeNotify(pimeui, wParam, lParam);
1119
1120 case WM_IME_REQUEST:
1121 return 0;
1122
1123 case WM_IME_SELECT:
1125 return (LRESULT)pimeui;
1126
1127 case WM_IME_SETCONTEXT:
1128 return ImeWnd_OnImeSetContext(pimeui, wParam, lParam);
1129
1130 case WM_IME_SYSTEM:
1131 return ImeWnd_OnImeSystem(pimeui, wParam, lParam);
1132
1133 default:
1134 break;
1135 }
1136
1137Finish:
1138 if (unicode)
1139 return DefWindowProcW(hwnd, msg, wParam, lParam);
1140 return DefWindowProcA(hwnd, msg, wParam, lParam);
1141}
#define msg(x)
Definition: auth_time.c:54
#define ERR(fmt,...)
Definition: precomp.h:57
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
LRESULT WINAPI CtfImmDispatchDefImeMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
Definition: ctf.c:1417
#define IS_IME_HKL(hKL)
Definition: imm32_undoc.h:21
#define WM_IME_SYSTEM
Definition: imm32_undoc.h:32
#define FNID_DESTROY
Definition: ntuser.h:898
struct tagIMEUI * PIMEUI
#define WNDS_DESTROYED
Definition: ntuser.h:636
#define FNID_IME
Definition: ntuser.h:874
#define WNDS2_INDESTROY
Definition: ntuser.h:648
BOOL NTAPI NtUserSetWindowFNID(HWND hWnd, WORD fnID)
Definition: window.c:4348
DWORD state2
Definition: ntuser.h:702
DWORD fnid
Definition: ntuser.h:709
DWORD state
Definition: ntuser.h:701
#define WM_FINALDESTROY
Definition: undocuser.h:41
LRESULT ImeWnd_OnImeSetContext(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:834
static INT ImeWnd_OnCreate(PIMEUI pimeui, LPCREATESTRUCT lpCS)
Definition: imm.c:334
static LRESULT ImeWnd_OnImeSystem(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:679
static LRESULT ImeWnd_OnImeControl(PIMEUI pimeui, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: imm.c:415
static VOID ImeWnd_OnImeSelect(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:380
static LRESULT ImeWnd_OnImeNotify(PIMEUI pimeui, WPARAM wParam, LPARAM lParam)
Definition: imm.c:239
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WM_PAINT
Definition: winuser.h:1639
#define WM_ERASEBKGND
Definition: winuser.h:1644
#define WM_IME_REQUEST
Definition: winuser.h:1855
#define GetWindowLongPtrW
Definition: winuser.h:4905
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1627
#define WM_IME_CHAR
Definition: winuser.h:1853
#define WM_IME_COMPOSITIONFULL
Definition: winuser.h:1851
#define WM_NCDESTROY
Definition: winuser.h:1703
#define WM_DESTROY
Definition: winuser.h:1628
BOOL WINAPI DestroyWindow(_In_ HWND)

Referenced by ImeWndProcA(), ImeWndProcW(), RealDefWindowProcA(), RealDefWindowProcW(), and RegisterClientPFN().

◆ ImeWndProcA()

LRESULT WINAPI ImeWndProcA ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1143 of file imm.c.

1144{
1146}
LRESULT WINAPI ImeWndProc_common(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode)
Definition: imm.c:989

◆ ImeWndProcW()

LRESULT WINAPI ImeWndProcW ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1148 of file imm.c.

1149{
1151}

Referenced by RegisterIMEClass().

◆ IMPGetIMEA()

BOOL WINAPI IMPGetIMEA ( HWND  hwnd,
LPIMEPROA  ime 
)

Definition at line 1256 of file imm.c.

1257{
1258 return IMM_FN(ImmIMPGetIMEA)(hwnd, ime);
1259}
BOOL WINAPI ImmIMPGetIMEA(_In_opt_ HWND hWnd, _Out_ LPIMEPROA pImePro)
Definition: imepro.c:68

◆ IMPGetIMEW()

BOOL WINAPI IMPGetIMEW ( HWND  hwnd,
LPIMEPROW  ime 
)

Definition at line 1226 of file imm.c.

1227{
1228 return IMM_FN(ImmIMPGetIMEW)(hwnd, ime);
1229}
BOOL WINAPI ImmIMPGetIMEW(_In_opt_ HWND hWnd, _Out_ LPIMEPROW pImePro)
Definition: imepro.c:97

◆ IMPQueryIMEA()

BOOL WINAPI IMPQueryIMEA ( LPIMEPROA  ime)

Definition at line 1246 of file imm.c.

1247{
1248 return IMM_FN(ImmIMPQueryIMEA)(ime);
1249}
BOOL WINAPI ImmIMPQueryIMEA(_Inout_ LPIMEPROA pImePro)
Definition: imepro.c:121

◆ IMPQueryIMEW()

BOOL WINAPI IMPQueryIMEW ( LPIMEPROW  ime)

Definition at line 1216 of file imm.c.

1217{
1218 return IMM_FN(ImmIMPQueryIMEW)(ime);
1219}
BOOL WINAPI ImmIMPQueryIMEW(_Inout_ LPIMEPROW pImePro)
Definition: imepro.c:161

◆ IMPSetIMEA()

BOOL WINAPI IMPSetIMEA ( HWND  hwnd,
LPIMEPROA  ime 
)

Definition at line 1236 of file imm.c.

1237{
1238 return IMM_FN(ImmIMPSetIMEA)(hwnd, ime);
1239}
BOOL WINAPI ImmIMPSetIMEA(_In_opt_ HWND hWnd, _Inout_ LPIMEPROA pImePro)
Definition: imepro.c:228

◆ IMPSetIMEW()

BOOL WINAPI IMPSetIMEW ( HWND  hwnd,
LPIMEPROW  ime 
)

Definition at line 1206 of file imm.c.

1207{
1208 return IMM_FN(ImmIMPSetIMEW)(hwnd, ime);
1209}
BOOL WINAPI ImmIMPSetIMEW(_In_opt_ HWND hWnd, _Inout_ LPIMEPROW pImePro)
Definition: imepro.c:266

◆ InitializeImmEntryTable()

BOOL WINAPI InitializeImmEntryTable ( VOID  )

Definition at line 120 of file imm.c.

121{
124}
BOOL gbImmInitializing
Definition: imm.c:21
static BOOL IntInitializeImmEntryTable(VOID)
Definition: imm.c:72

Referenced by DllMain().

◆ IntGetTopLevelWindow()

HWND FASTCALL IntGetTopLevelWindow ( HWND  hWnd)

Definition at line 25 of file imm.c.

26{
28
29 for (; hWnd; hWnd = GetParent(hWnd))
30 {
32 if (!(style & WS_CHILD))
33 break;
34 }
35
36 return hWnd;
37}
Arabic default style
Definition: afstyles.h:94
HWND hWnd
Definition: settings.c:17
#define WS_CHILD
Definition: pedump.c:617
HWND WINAPI GetParent(_In_ HWND)
#define GWL_STYLE
Definition: winuser.h:863

Referenced by ImeWnd_OnImeSetContext().

◆ IntInitializeImmEntryTable()

static BOOL IntInitializeImmEntryTable ( VOID  )
static

Definition at line 72 of file imm.c.

73{
74 WCHAR ImmFile[MAX_PATH];
75 HMODULE imm32 = ghImm32;
76
77 /* Check whether the IMM table has already been initialized */
78 if (IMM_FN(ImmWINNLSEnableIME) != IMMSTUB_ImmWINNLSEnableIME)
79 return TRUE;
80
81 User32GetSystemFilePath(ImmFile, _countof(ImmFile), L"imm32.dll");
82 TRACE("File %s\n", debugstr_w(ImmFile));
83
84 /* If IMM32 is already loaded, use it without increasing reference count. */
85 if (imm32 == NULL)
86 imm32 = GetModuleHandleW(ImmFile);
87
88 /*
89 * Loading imm32.dll will call imm32!DllMain function.
90 * imm32!DllMain calls User32InitializeImmEntryTable.
91 * Thus, if imm32.dll was loaded, the table has been loaded.
92 */
93 if (imm32 == NULL)
94 {
95 imm32 = ghImm32 = LoadLibraryW(ImmFile);
96 if (imm32 == NULL)
97 {
98 ERR("Did not load imm32.dll!\n");
99 return FALSE;
100 }
101 return TRUE;
102 }
103
104/* load imm procedures */
105#undef DEFINE_IMM_ENTRY
106#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind) \
107 do { \
108 FN_##name proc = (FN_##name)GetProcAddress(imm32, #name); \
109 if (!proc) { \
110 ERR("Could not load %s\n", #name); \
111 return FALSE; \
112 } \
113 IMM_FN(name) = proc; \
114 } while (0);
115#include "immtable.h"
116
117 return TRUE;
118}
#define MAX_PATH
Definition: compat.h:34
#define LoadLibraryW(x)
Definition: compat.h:747
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
#define L(x)
Definition: resources.c:13
BOOL WINAPI ImmWINNLSEnableIME(_In_opt_ HWND hWnd, _In_ BOOL enable)
Definition: ime.c:1717
#define debugstr_w
Definition: kernel32.h:32
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT User32GetSystemFilePath(_Out_writes_(cchBuffer) PWSTR lpBuffer, _In_ SIZE_T cchBuffer, _In_ PCWSTR pszFileName)
Definition: imm.c:54
HINSTANCE ghImm32
Definition: imm.c:19
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by InitializeImmEntryTable(), and User32InitializeImmEntryTable().

◆ RegisterIMEClass()

BOOL WINAPI RegisterIMEClass ( VOID  )

Definition at line 1178 of file imm.c.

1179{
1180 ATOM atom;
1181 WNDCLASSEXW WndClass = { sizeof(WndClass) };
1182
1183 WndClass.lpszClassName = L"IME";
1184 WndClass.style = CS_GLOBALCLASS;
1185 WndClass.lpfnWndProc = ImeWndProcW;
1186 WndClass.cbWndExtra = sizeof(LONG_PTR);
1187 WndClass.hCursor = LoadCursorW(NULL, IDC_ARROW);
1188
1189 atom = RegisterClassExWOWW(&WndClass, 0, FNID_IME, 0, FALSE);
1190 if (!atom)
1191 {
1192 ERR("Failed to register IME Class!\n");
1193 return FALSE;
1194 }
1195
1197 TRACE("RegisterIMEClass atom = %u\n", atom);
1198 return TRUE;
1199}
WCHAR WndClass[]
Definition: capicon.c:23
WORD ATOM
Definition: dimm.idl:113
#define ICLS_IME
Definition: ntuser.h:927
#define ICLASS_TO_MASK(iCls)
Definition: ntuser.h:902
DWORD RegisterDefaultClasses
Definition: regcontrol.c:13
ATOM WINAPI RegisterClassExWOWW(WNDCLASSEXW *, LPDWORD, WORD, DWORD, BOOL)
Definition: class.c:1262
#define LONG_PTR
Definition: treelist.c:79
LRESULT WINAPI ImeWndProcW(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: imm.c:1148
#define IDC_ARROW
Definition: winuser.h:695
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2442
#define CS_GLOBALCLASS
Definition: winuser.h:660

Referenced by RegisterSystemControls().

◆ SendIMEMessageExA()

LRESULT WINAPI SendIMEMessageExA ( HWND  hwnd,
LPARAM  lParam 
)

Definition at line 1276 of file imm.c.

1277{
1279}
WORD WINAPI ImmSendIMEMessageExA(_In_ HWND hWnd, _In_ LPARAM lParam)
Definition: win3.c:215

◆ SendIMEMessageExW()

LRESULT WINAPI SendIMEMessageExW ( HWND  hwnd,
LPARAM  lParam 
)

Definition at line 1266 of file imm.c.

1267{
1269}
WORD WINAPI ImmSendIMEMessageExW(_In_ HWND hWnd, _In_ LPARAM lParam)
Definition: win3.c:227

◆ UpdatePerUserImmEnabling()

BOOL WINAPI UpdatePerUserImmEnabling ( VOID  )

Definition at line 1153 of file imm.c.

1154{
1155 HMODULE imm32;
1156 BOOL ret;
1157
1159 if (!ret || !(gpsi->dwSRVIFlags & SRVINFO_IMM32))
1160 return FALSE;
1161
1162 imm32 = GetModuleHandleW(L"imm32.dll");
1163 if (imm32)
1164 return TRUE;
1165
1166 imm32 = LoadLibraryW(L"imm32.dll");
1167 if (imm32 == NULL)
1168 {
1169 ERR("Imm32 not installed!\n");
1170 ret = FALSE;
1171 }
1172
1173 return ret;
1174}
PSERVERINFO gpsi
Definition: imm.c:18
DWORD_PTR NTAPI NtUserCallNoParam(DWORD Routine)
Definition: simplecall.c:59
@ NOPARAM_ROUTINE_UPDATEPERUSERIMMENABLING
Definition: ntuser.h:1551
#define SRVINFO_IMM32
Definition: ntuser.h:949
DWORD dwSRVIFlags
Definition: ntuser.h:1051

Referenced by UpdatePerUserSystemParameters().

◆ User32CanSetImeWindowToImc()

static BOOL User32CanSetImeWindowToImc ( HIMC  hIMC,
HWND  hImeWnd 
)
static

Definition at line 154 of file imm.c.

155{
157 return pIMC && (!pIMC->hImeWnd || pIMC->hImeWnd == hImeWnd || !ValidateHwnd(pIMC->hImeWnd));
158}
PTHEME_CLASS ValidateHandle(HTHEME hTheme)
Definition: system.c:772
@ TYPE_INPUTCONTEXT
Definition: ntuser.h:57
Definition: ntuser.h:199
HWND hImeWnd
Definition: ntuser.h:203

Referenced by ImeWnd_OnCreate(), and ImeWnd_OnImeSetContext().

◆ User32CreateImeUIWindow()

static HWND User32CreateImeUIWindow ( PIMEUI  pimeui,
HKL  hKL 
)
static

Definition at line 289 of file imm.c.

290{
291 IMEINFOEX ImeInfoEx;
292 PIMEDPI pImeDpi;
293 WNDCLASSW wc;
294 HWND hwndUI = NULL;
295 CHAR szUIClass[32];
296 PWND pwnd = pimeui->spwnd;
297
298 ASSERT(pimeui->spwnd != NULL);
299
300 if (!pwnd || !IMM_FN(ImmGetImeInfoEx)(&ImeInfoEx, ImeInfoExKeyboardLayout, &hKL))
301 return NULL;
302
303 pImeDpi = IMM_FN(ImmLockImeDpi)(hKL);
304 if (!pImeDpi)
305 return NULL;
306
307 if (!GetClassInfoW(pImeDpi->hInst, ImeInfoEx.wszUIClass, &wc))
308 goto Quit;
309
310 if (ImeInfoEx.ImeInfo.fdwProperty & IME_PROP_UNICODE)
311 {
312 hwndUI = CreateWindowW(ImeInfoEx.wszUIClass, ImeInfoEx.wszUIClass, WS_POPUP | WS_DISABLED,
313 0, 0, 0, 0, UserHMGetHandle(pwnd), 0, wc.hInstance, NULL);
314 }
315 else
316 {
317 WideCharToMultiByte(CP_ACP, 0, ImeInfoEx.wszUIClass, -1,
318 szUIClass, _countof(szUIClass), NULL, NULL);
319 szUIClass[_countof(szUIClass) - 1] = 0;
320
321 hwndUI = CreateWindowA(szUIClass, szUIClass, WS_POPUP | WS_DISABLED,
322 0, 0, 0, 0, UserHMGetHandle(pwnd), 0, wc.hInstance, NULL);
323 }
324
325 if (hwndUI)
327
328Quit:
329 IMM_FN(ImmUnlockImeDpi)(pImeDpi);
330 return hwndUI;
331}
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
Definition: ime.c:531
BOOL WINAPI ImmGetImeInfoEx(_Out_ PIMEINFOEX pImeInfoEx, _In_ IMEINFOEXCLASS SearchType, _In_ PVOID pvSearchKey)
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
Definition: ime.c:561
@ ImeInfoExKeyboardLayout
Definition: imm32_undoc.h:79
#define IME_PROP_UNICODE
Definition: imm.h:249
#define NtUserSetWindowLongPtr
Definition: ntuser.h:3306
HINSTANCE hInst
Definition: imm32_undoc.h:92
HINSTANCE hInstance
Definition: winuser.h:3256
DWORD fdwProperty
Definition: immdev.h:22
IMEINFO ImeInfo
Definition: imm32_undoc.h:61
WCHAR wszUIClass[16]
Definition: imm32_undoc.h:62
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4391
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4392
BOOL WINAPI GetClassInfoW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _Out_ LPWNDCLASSW)
char CHAR
Definition: xmlstorage.h:175

Referenced by ImeWnd_OnImeSelect(), and ImeWnd_OnImeSetContext().

◆ User32DestroyImeUIWindow()

static VOID User32DestroyImeUIWindow ( PIMEUI  pimeui)
static

Definition at line 365 of file imm.c.

366{
367 HWND hwndUI = pimeui->hwndUI;
368
369 if (IsWindow(hwndUI))
370 {
371 pimeui->fDestroy = TRUE;
372 NtUserDestroyWindow(hwndUI);
373 }
374
375 pimeui->fShowStatus = pimeui->fDestroy = FALSE;
376 pimeui->hwndUI = NULL;
377}
BOOLEAN NTAPI NtUserDestroyWindow(HWND Wnd)
Definition: window.c:3054

Referenced by ImeWnd_OnImeSelect(), and ImeWndProc_common().

◆ User32DoImeHelp()

static LRESULT FASTCALL User32DoImeHelp ( PIMEUI  pimeui,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 574 of file imm.c.

575{
578 size_t cch;
579
580 /* Is there any IME help file? */
581 ret = IMM_FN(ImmEscapeW)(pimeui->hKL, pimeui->hIMC, IME_ESC_QUERY_SUPPORT, &dwEsc);
582 if (!ret || !lParam)
583 return ret;
584
585 /* Get the help filename */
587 {
588 /* Check filename extension */
590 if (cch > 4 && _wcsicmp(&szHelpFile[cch - 4], L".HLP") == 0)
591 {
592 /* Open the old-style help */
593 TRACE("szHelpFile: %s\n", debugstr_w(szHelpFile));
595 }
596 else
597 {
598 /* Open the new-style help */
599 FIXME("(%p, %p, %p): %s\n", pimeui, wParam, lParam, debugstr_w(szHelpFile));
600 ret = FALSE;
601 }
602 }
603
604 return ret;
605}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define IME_ESC_QUERY_SUPPORT
Definition: imm.h:410
LRESULT WINAPI ImmEscapeW(_In_ HKL hKL, _In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData)
Definition: ime.c:913
#define IME_ESC_GETHELPFILENAME
Definition: imm.h:424
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
TCHAR szHelpFile[]
Definition: scrnsave.c:31
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
BOOL WINAPI WinHelpW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_ UINT, _In_ ULONG_PTR)
#define HELP_FINDER
Definition: winuser.h:2438

Referenced by ImeWnd_OnImeSystem().

◆ User32GetImeShowStatus()

static BOOL User32GetImeShowStatus ( VOID  )
static

Definition at line 160 of file imm.c.

161{
163}
@ NOPARAM_ROUTINE_GETIMESHOWSTATUS
Definition: ntuser.h:1525

Referenced by ImeWnd_OnImeControl(), ImeWnd_OnImeSelect(), ImeWnd_OnImeSetContext(), and ImeWnd_OnImeSystem().

◆ User32GetPenMenuData()

static BOOL CALLBACK User32GetPenMenuData ( _Out_ PUINT  pnID,
_Out_ PDWORD_PTR  pdwMenuData 
)
static

Definition at line 631 of file imm.c.

632{
634 {
636 HMODULE hIndicDll = GetModuleHandleW(L"indicdll.dll");
637 if (!hIndicDll)
638 {
640 hIndicDll = LoadLibraryW(szPath);
641 }
642 if (!hIndicDll)
643 {
644 ERR("indicdll.dll not loaded: %s\n", debugstr_w(szPath));
645 return FALSE;
646 }
647
650 }
651
653 return FALSE;
654
655 s_pGetPenMenuData(pnID, pdwMenuData);
656 return TRUE;
657}
LPCWSTR szPath
Definition: env.c:37
static FN_GetPenMenuData s_pGetPenMenuData
Definition: imm.c:627
VOID(CALLBACK * FN_GetPenMenuData)(PUINT pnID, PDWORD_PTR pdwMenuData)
Definition: imm.c:626
#define IFN_GetPenMenuData
Definition: imm.c:628
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581

Referenced by User32ImeMenuItemSelected().

◆ User32GetSystemFilePath()

HRESULT User32GetSystemFilePath ( _Out_writes_(cchBuffer) PWSTR  lpBuffer,
_In_ SIZE_T  cchBuffer,
_In_ PCWSTR  pszFileName 
)

Definition at line 54 of file imm.c.

58{
60 if (length && length < cchBuffer)
61 {
64 }
65 DWORD dwError = GetLastError();
66 ERR("GetSystemDirectoryW failed (error %lu)\n", dwError);
68 return HRESULT_FROM_WIN32(dwError);
69}
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
static DWORD cchBuffer
Definition: fusion.c:85
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2313
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
WORD WORD PSZ PSZ pszFileName
Definition: vdmdbg.h:44
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

Referenced by DllMain(), IntInitializeImmEntryTable(), User32GetPenMenuData(), and User32InitializeImmEntryTable().

◆ User32ImeMenuItemSelected()

static VOID User32ImeMenuItemSelected ( HWND  hwndTarget)
static

Definition at line 661 of file imm.c.

662{
663 if (!IsWindow(hwndTarget))
664 return;
665
666 HIMC hIMC = IMM_FN(ImmGetContext)(hwndTarget);
667 if (!hIMC)
668 return;
669
670 UINT nID = 0;
671 DWORD_PTR dwMenuData = 0;
672 if (User32GetPenMenuData(&nID, &dwMenuData))
673 IMM_FN(ImmNotifyIME)(hIMC, NI_IMEMENUSELECTED, nID, dwMenuData);
674
675 IMM_FN(ImmReleaseContext)(hwndTarget, hIMC);
676}
BOOL WINAPI ImmReleaseContext(_In_ HWND hWnd, _In_ HIMC hIMC)
Definition: imm.c:1109
BOOL WINAPI ImmNotifyIME(_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
Definition: ime.c:458
#define NI_IMEMENUSELECTED
Definition: immdev.h:384
uint32_t DWORD_PTR
Definition: typedefs.h:65
static BOOL CALLBACK User32GetPenMenuData(_Out_ PUINT pnID, _Out_ PDWORD_PTR pdwMenuData)
Definition: imm.c:631

Referenced by ImeWnd_OnImeSystem().

◆ User32InitializeImmEntryTable()

BOOL WINAPI User32InitializeImmEntryTable ( DWORD  magic)

Definition at line 126 of file imm.c.

127{
128 TRACE("Imm (%x)\n", magic);
129
130 if (magic != IMM_INIT_MAGIC)
131 return FALSE;
132
133 /* Check whether the IMM table has already been initialized */
134 if (IMM_FN(ImmWINNLSEnableIME) != IMMSTUB_ImmWINNLSEnableIME)
135 return TRUE;
136
138
139 if (ghImm32 == NULL && !gbImmInitializing)
140 {
141 WCHAR ImmFile[MAX_PATH];
142 User32GetSystemFilePath(ImmFile, _countof(ImmFile), L"imm32.dll");
143 ghImm32 = LoadLibraryW(ImmFile);
144 if (ghImm32 == NULL)
145 {
146 ERR("Did not load imm32.dll!\n");
147 return FALSE;
148 }
149 }
150
152}
BOOL WINAPI ImmRegisterClient(_Inout_ PSHAREDINFO ptr, _In_ HINSTANCE hMod)
Definition: imm.c:58
SHAREDINFO gSharedInfo
Definition: imm.c:19
#define IMM_INIT_MAGIC
Definition: precomp.h:75

◆ User32NotifyOpenStatus()

static VOID User32NotifyOpenStatus ( PIMEUI  pimeui,
HWND  hwndIMC,
BOOL  bOpen 
)
static

Definition at line 195 of file imm.c.

196{
198
199 ASSERT(pimeui->spwnd != NULL);
200
201 pimeui->fShowStatus = bOpen;
202
203 if (LOWORD(GetWin32ClientInfo()->dwExpWinVer) >= 0x400)
204 SendMessageW(hwndIMC, WM_IME_NOTIFY, wParam, 0);
205 else
207}
#define LOWORD(l)
Definition: pedump.c:82
UINT_PTR WPARAM
Definition: windef.h:207

Referenced by ImeWnd_OnImeSelect(), and ImeWnd_OnImeSetContext().

◆ User32SendImeUIMessage()

static LRESULT User32SendImeUIMessage ( PIMEUI  pimeui,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
BOOL  unicode 
)
static

Definition at line 167 of file imm.c.

168{
169 LRESULT ret = 0;
170 HWND hwndUI = pimeui->hwndUI;
171 PWND pwnd, pwndUI;
172
173 ASSERT(pimeui->spwnd != NULL);
174
175 pwnd = pimeui->spwnd;
176 pwndUI = ValidateHwnd(hwndUI);
177 if (!pwnd || (pwnd->state & WNDS_DESTROYED) || (pwnd->state2 & WNDS2_INDESTROY) ||
178 !pwndUI || (pwndUI->state & WNDS_DESTROYED) || (pwndUI->state2 & WNDS2_INDESTROY))
179 {
180 return 0;
181 }
182
184
185 if (unicode)
186 ret = SendMessageW(hwndUI, uMsg, wParam, lParam);
187 else
188 ret = SendMessageA(hwndUI, uMsg, wParam, lParam);
189
191
192 return ret;
193}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by ImeWnd_OnImeControl(), ImeWnd_OnImeNotify(), ImeWnd_OnImeSelect(), ImeWnd_OnImeSetContext(), ImeWndProc_common(), and User32NotifyOpenStatus().

◆ User32SetImeActivenessOfWindow()

static VOID FASTCALL User32SetImeActivenessOfWindow ( HWND  hWnd,
BOOL  bActive 
)
static

Definition at line 549 of file imm.c.

550{
551 HIMC hIMC;
552
553 if (!hWnd || !IsWindow(hWnd))
554 {
556 return;
557 }
558
559 hIMC = IMM_FN(ImmGetContext)(hWnd);
560 IMM_FN(ImmSetActiveContext)(hWnd, hIMC, bActive);
562}
BOOL WINAPI ImmSetActiveContext(_In_ HWND hWnd, _In_opt_ HIMC hIMC, _In_ BOOL fActive)
Definition: imm.c:1155

Referenced by ImeWnd_OnImeSystem().

◆ User32SetImeWindowOfImc()

static VOID User32SetImeWindowOfImc ( HIMC  hIMC,
HWND  hImeWnd 
)
static

Definition at line 209 of file imm.c.

210{
212 if (!pIMC || pIMC->hImeWnd == hImeWnd)
213 return;
214
216}
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
Definition: ime.c:1846
uint32_t ULONG_PTR
Definition: typedefs.h:65
@ UIC_IMEWINDOW
Definition: undocuser.h:315

Referenced by User32UpdateImcOfImeUI().

◆ User32UpdateImcOfImeUI()

static VOID User32UpdateImcOfImeUI ( PIMEUI  pimeui,
HIMC  hNewIMC 
)
static

Definition at line 218 of file imm.c.

219{
220 HWND hImeWnd;
221 HIMC hOldIMC = pimeui->hIMC;
222
223 ASSERT(pimeui->spwnd != NULL);
224 hImeWnd = UserHMGetHandle(pimeui->spwnd);
225
226 if (hNewIMC == hOldIMC)
227 return;
228
229 if (hOldIMC)
231
232 pimeui->hIMC = hNewIMC;
233
234 if (hNewIMC)
235 User32SetImeWindowOfImc(hNewIMC, hImeWnd);
236}
static VOID User32SetImeWindowOfImc(HIMC hIMC, HWND hImeWnd)
Definition: imm.c:209

Referenced by ImeWnd_OnCreate(), and ImeWnd_OnImeSetContext().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( user32  )

◆ WINNLSEnableIME()

BOOL WINAPI WINNLSEnableIME ( HWND  hwnd,
BOOL  enable 
)

Definition at line 1286 of file imm.c.

1287{
1289}
GLboolean enable
Definition: glext.h:11120

◆ WINNLSGetEnableStatus()

BOOL WINAPI WINNLSGetEnableStatus ( HWND  hwnd)

Definition at line 1296 of file imm.c.

1297{
1299}
BOOL WINAPI ImmWINNLSGetEnableStatus(_In_opt_ HWND hWnd)
Definition: imm.c:1256

◆ WINNLSGetIMEHotkey()

UINT WINAPI WINNLSGetIMEHotkey ( HWND  hwnd)

Definition at line 1306 of file imm.c.

1307{
1308 return FALSE;
1309}

Variable Documentation

◆ gbImmInitializing

BOOL gbImmInitializing = FALSE

Definition at line 21 of file imm.c.

Referenced by InitializeImmEntryTable(), and User32InitializeImmEntryTable().

◆ gfConIme

INT gfConIme = -1

Definition at line 23 of file imm.c.

Referenced by ImeWnd_OnImeNotify(), and ImeWnd_OnImeSetContext().

◆ ghImm32

HINSTANCE ghImm32 = NULL

Definition at line 19 of file imm.c.

Referenced by DllMain(), IntInitializeImmEntryTable(), and User32InitializeImmEntryTable().

◆ gImmApiEntries

Imm32ApiTable gImmApiEntries
Initial value:
= {
#define DEFINE_IMM_ENTRY(type, name, params, retval, retkind)
}

Definition at line 45 of file imm.c.

◆ s_pGetPenMenuData

FN_GetPenMenuData s_pGetPenMenuData = NULL
static

Definition at line 627 of file imm.c.

Referenced by User32GetPenMenuData().