mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 18:37:17 +00:00
imm32: Use INPUTCONTEXT directly in ImmRequestMessage(W|A).
This commit is contained in:
parent
c4187bc46b
commit
a117b9b202
|
@ -2380,31 +2380,67 @@ BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC)
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ImmRequestMessageA(IMM32.@)
|
* ImmRequestMessageA(IMM32.@)
|
||||||
*/
|
*/
|
||||||
LRESULT WINAPI ImmRequestMessageA(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
LRESULT WINAPI ImmRequestMessageA( HIMC himc, WPARAM wparam, LPARAM lparam )
|
||||||
{
|
{
|
||||||
struct imc *data = get_imc_data( hIMC );
|
INPUTCONTEXT *ctx;
|
||||||
|
LRESULT res;
|
||||||
|
|
||||||
TRACE("%p %Id %Id\n", hIMC, wParam, wParam);
|
TRACE( "himc %p, wparam %#Ix, lparam %#Ix\n", himc, wparam, lparam );
|
||||||
|
|
||||||
if (data) return SendMessageA(data->IMC.hWnd, WM_IME_REQUEST, wParam, lParam);
|
if (NtUserQueryInputContext( himc, NtUserInputContextThreadId ) != GetCurrentThreadId()) return FALSE;
|
||||||
|
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
switch (wparam)
|
||||||
return 0;
|
{
|
||||||
|
case IMR_CANDIDATEWINDOW:
|
||||||
|
case IMR_COMPOSITIONFONT:
|
||||||
|
case IMR_COMPOSITIONWINDOW:
|
||||||
|
case IMR_CONFIRMRECONVERTSTRING:
|
||||||
|
case IMR_DOCUMENTFEED:
|
||||||
|
case IMR_QUERYCHARPOSITION:
|
||||||
|
case IMR_RECONVERTSTRING:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(ctx = ImmLockIMC( himc ))) return FALSE;
|
||||||
|
res = SendMessageA( ctx->hWnd, WM_IME_REQUEST, wparam, lparam );
|
||||||
|
ImmUnlockIMC( himc );
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ImmRequestMessageW(IMM32.@)
|
* ImmRequestMessageW(IMM32.@)
|
||||||
*/
|
*/
|
||||||
LRESULT WINAPI ImmRequestMessageW(HIMC hIMC, WPARAM wParam, LPARAM lParam)
|
LRESULT WINAPI ImmRequestMessageW( HIMC himc, WPARAM wparam, LPARAM lparam )
|
||||||
{
|
{
|
||||||
struct imc *data = get_imc_data( hIMC );
|
INPUTCONTEXT *ctx;
|
||||||
|
LRESULT res;
|
||||||
|
|
||||||
TRACE("%p %Id %Id\n", hIMC, wParam, wParam);
|
TRACE( "himc %p, wparam %#Ix, lparam %#Ix\n", himc, wparam, lparam );
|
||||||
|
|
||||||
if (data) return SendMessageW(data->IMC.hWnd, WM_IME_REQUEST, wParam, lParam);
|
if (NtUserQueryInputContext( himc, NtUserInputContextThreadId ) != GetCurrentThreadId()) return FALSE;
|
||||||
|
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
switch (wparam)
|
||||||
return 0;
|
{
|
||||||
|
case IMR_CANDIDATEWINDOW:
|
||||||
|
case IMR_COMPOSITIONFONT:
|
||||||
|
case IMR_COMPOSITIONWINDOW:
|
||||||
|
case IMR_CONFIRMRECONVERTSTRING:
|
||||||
|
case IMR_DOCUMENTFEED:
|
||||||
|
case IMR_QUERYCHARPOSITION:
|
||||||
|
case IMR_RECONVERTSTRING:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(ctx = ImmLockIMC( himc ))) return FALSE;
|
||||||
|
res = SendMessageW( ctx->hWnd, WM_IME_REQUEST, wparam, lparam );
|
||||||
|
ImmUnlockIMC( himc );
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -1582,7 +1582,7 @@ static void test_cross_thread_himc(void)
|
||||||
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_COMPOSITIONFONT, (LPARAM)&fontW ) );
|
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_COMPOSITIONFONT, (LPARAM)&fontW ) );
|
||||||
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_COMPOSITIONFONT, (LPARAM)&fontA ) );
|
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_COMPOSITIONFONT, (LPARAM)&fontA ) );
|
||||||
|
|
||||||
todo_wine ok_seq( empty_sequence );
|
ok_seq( empty_sequence );
|
||||||
|
|
||||||
/* ImmSetCompositionString(W|A) should fail with cross thread HIMC */
|
/* ImmSetCompositionString(W|A) should fail with cross thread HIMC */
|
||||||
|
|
||||||
|
@ -1638,7 +1638,7 @@ static void test_cross_thread_himc(void)
|
||||||
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_CONFIRMRECONVERTSTRING, (LPARAM)&reconv ) );
|
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_CONFIRMRECONVERTSTRING, (LPARAM)&reconv ) );
|
||||||
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_CONFIRMRECONVERTSTRING, (LPARAM)&reconv ) );
|
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_CONFIRMRECONVERTSTRING, (LPARAM)&reconv ) );
|
||||||
|
|
||||||
todo_wine ok_seq( empty_sequence );
|
ok_seq( empty_sequence );
|
||||||
|
|
||||||
/* ImmSetCompositionWindow should fail with cross thread HIMC */
|
/* ImmSetCompositionWindow should fail with cross thread HIMC */
|
||||||
|
|
||||||
|
@ -1660,7 +1660,7 @@ static void test_cross_thread_himc(void)
|
||||||
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_COMPOSITIONWINDOW, (LPARAM)&composition ) );
|
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_COMPOSITIONWINDOW, (LPARAM)&composition ) );
|
||||||
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_COMPOSITIONWINDOW, (LPARAM)&composition ) );
|
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_COMPOSITIONWINDOW, (LPARAM)&composition ) );
|
||||||
|
|
||||||
todo_wine ok_seq( empty_sequence );
|
ok_seq( empty_sequence );
|
||||||
|
|
||||||
/* ImmSetCandidateWindow should fail with cross thread HIMC */
|
/* ImmSetCandidateWindow should fail with cross thread HIMC */
|
||||||
|
|
||||||
|
@ -1687,7 +1687,7 @@ static void test_cross_thread_himc(void)
|
||||||
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_CANDIDATEWINDOW, (LPARAM)&candidate ) );
|
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_CANDIDATEWINDOW, (LPARAM)&candidate ) );
|
||||||
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_CANDIDATEWINDOW, (LPARAM)&candidate ) );
|
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_CANDIDATEWINDOW, (LPARAM)&candidate ) );
|
||||||
|
|
||||||
todo_wine ok_seq( empty_sequence );
|
ok_seq( empty_sequence );
|
||||||
|
|
||||||
/* ImmSetStatusWindowPos should fail with cross thread HIMC */
|
/* ImmSetStatusWindowPos should fail with cross thread HIMC */
|
||||||
|
|
||||||
|
@ -1709,7 +1709,7 @@ static void test_cross_thread_himc(void)
|
||||||
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_QUERYCHARPOSITION, (LPARAM)&char_pos ) );
|
ok_ret( 0, ImmRequestMessageW( params.himc[1], IMR_QUERYCHARPOSITION, (LPARAM)&char_pos ) );
|
||||||
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_QUERYCHARPOSITION, (LPARAM)&char_pos ) );
|
ok_ret( 0, ImmRequestMessageA( params.himc[1], IMR_QUERYCHARPOSITION, (LPARAM)&char_pos ) );
|
||||||
|
|
||||||
todo_wine ok_seq( empty_sequence );
|
ok_seq( empty_sequence );
|
||||||
|
|
||||||
/* ImmGenerateMessage should fail with cross thread HIMC */
|
/* ImmGenerateMessage should fail with cross thread HIMC */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue