@@ -3452,29 +3452,34 @@ LRESULT WINAPI ImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam)
3452
3452
BOOL WINAPI ImmSetCandidateWindow (
3453
3453
HIMC hIMC , LPCANDIDATEFORM lpCandidate )
3454
3454
{
3455
- InputContextData * data = get_imc_data (hIMC );
3455
+ #define MAX_CANDIDATEFORM 4
3456
+ DWORD dwImeThreadId , dwThreadId ;
3457
+ HWND hWnd ;
3458
+ LPINPUTCONTEXT pIC ;
3456
3459
3457
3460
TRACE ("(%p, %p)\n" , hIMC , lpCandidate );
3458
3461
3459
- if (! data || ! lpCandidate )
3462
+ if (lpCandidate -> dwIndex >= MAX_CANDIDATEFORM )
3460
3463
return FALSE;
3461
3464
3462
- if (IMM_IsCrossThreadAccess (NULL , hIMC ))
3465
+ dwImeThreadId = Imm32QueryInputContext (hIMC , 1 );
3466
+ dwThreadId = GetCurrentThreadId ();
3467
+ if (dwImeThreadId != dwThreadId )
3463
3468
return FALSE;
3464
3469
3465
- TRACE ("\t%x, %x, %s, %s\n" ,
3466
- lpCandidate -> dwIndex , lpCandidate -> dwStyle ,
3467
- wine_dbgstr_point (& lpCandidate -> ptCurrentPos ),
3468
- wine_dbgstr_rect (& lpCandidate -> rcArea ));
3469
-
3470
- if (lpCandidate -> dwIndex >= ARRAY_SIZE (data -> IMC .cfCandForm ))
3470
+ pIC = ImmLockIMC (hIMC );
3471
+ if (pIC == NULL )
3471
3472
return FALSE;
3472
3473
3473
- data -> IMC .cfCandForm [lpCandidate -> dwIndex ] = * lpCandidate ;
3474
- ImmNotifyIME (hIMC , NI_CONTEXTUPDATED , 0 , IMC_SETCANDIDATEPOS );
3475
- ImmInternalSendIMENotify (data , IMN_SETCANDIDATEPOS , 1 << lpCandidate -> dwIndex );
3474
+ hWnd = pIC -> hWnd ;
3475
+ pIC -> cfCandForm [lpCandidate -> dwIndex ] = * lpCandidate ;
3476
+
3477
+ ImmUnlockIMC (hIMC );
3476
3478
3479
+ Imm32NotifyAction (hIMC , hWnd , NI_CONTEXTUPDATED , 0 , IMC_SETCANDIDATEPOS ,
3480
+ IMN_SETCANDIDATEPOS , (1 << lpCandidate -> dwIndex ));
3477
3481
return TRUE;
3482
+ #undef MAX_CANDIDATEFORM
3478
3483
}
3479
3484
3480
3485
/***********************************************************************
0 commit comments