winex11: Use X11DRV_CALL for XIM calls.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2022-05-02 21:47:43 +02:00 committed by Alexandre Julliard
parent 095773b36a
commit bf1d5d286b
5 changed files with 27 additions and 10 deletions

View File

@ -637,6 +637,7 @@ UINT WINAPI ImeToAsciiEx (UINT uVKey, UINT uScanCode, const LPBYTE lpbKeyState,
BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
{
struct xim_preedit_state_params preedit_params;
BOOL bRet = FALSE;
LPINPUTCONTEXT lpIMC;
@ -680,7 +681,9 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
TRACE("IMC_SETOPENSTATUS\n");
bRet = TRUE;
X11DRV_SetPreeditState(lpIMC->hWnd, lpIMC->fOpen);
preedit_params.hwnd = lpIMC->hWnd;
preedit_params.open = lpIMC->fOpen;
X11DRV_CALL( xim_preedit_state, &preedit_params );
if (!lpIMC->fOpen)
{
LPIMEPRIVATE myPrivate;
@ -688,7 +691,7 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
myPrivate = ImmLockIMCC(lpIMC->hPrivate);
if (myPrivate->bInComposition)
{
X11DRV_ForceXIMReset(lpIMC->hWnd);
X11DRV_CALL( xim_reset, lpIMC->hWnd );
GenerateIMEMessage(hIMC, WM_IME_ENDCOMPOSITION, 0, 0);
myPrivate->bInComposition = FALSE;
}
@ -764,7 +767,7 @@ BOOL WINAPI NotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)
TRACE("CPS_CANCEL\n");
X11DRV_ForceXIMReset(lpIMC->hWnd);
X11DRV_CALL( xim_reset, lpIMC->hWnd );
if (lpIMC->hCompStr)
ImmDestroyIMCC(lpIMC->hCompStr);

View File

@ -28,6 +28,8 @@ enum x11drv_funcs
unix_tablet_get_packet,
unix_tablet_info,
unix_tablet_load_info,
unix_xim_preedit_state,
unix_xim_reset,
unix_funcs_count,
};
@ -59,6 +61,13 @@ struct tablet_info_params
void *output;
};
/* x11drv_xim_preedit_state params */
struct xim_preedit_state_params
{
HWND hwnd;
BOOL open;
};
/* DnD support */
struct format_entry

View File

@ -827,8 +827,6 @@ extern BOOL X11DRV_InitXIM( const WCHAR *input_style ) DECLSPEC_HIDDEN;
extern XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data) DECLSPEC_HIDDEN;
extern void X11DRV_SetupXIM(void) DECLSPEC_HIDDEN;
extern void X11DRV_XIMLookupChars( const char *str, DWORD count ) DECLSPEC_HIDDEN;
extern void X11DRV_ForceXIMReset(HWND hwnd) DECLSPEC_HIDDEN;
extern void X11DRV_SetPreeditState(HWND hwnd, BOOL fOpen) DECLSPEC_HIDDEN;
#define XEMBED_MAPPED (1 << 0)
@ -849,6 +847,8 @@ extern NTSTATUS x11drv_tablet_attach_queue( void *arg ) DECLSPEC_HIDDEN;
extern NTSTATUS x11drv_tablet_get_packet( void *arg ) DECLSPEC_HIDDEN;
extern NTSTATUS x11drv_tablet_load_info( void *arg ) DECLSPEC_HIDDEN;
extern NTSTATUS x11drv_tablet_info( void *arg ) DECLSPEC_HIDDEN;
extern NTSTATUS x11drv_xim_preedit_state( void *arg ) DECLSPEC_HIDDEN;
extern NTSTATUS x11drv_xim_reset( void *arg ) DECLSPEC_HIDDEN;
extern NTSTATUS WINAPI x11drv_post_drop( void *data, ULONG size ) DECLSPEC_HIDDEN;

View File

@ -962,6 +962,8 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
x11drv_tablet_get_packet,
x11drv_tablet_info,
x11drv_tablet_load_info,
x11drv_xim_preedit_state,
x11drv_xim_reset,
};

View File

@ -241,7 +241,7 @@ static void XIMPreEditCaretCallback(XIC ic, XPointer client_data,
TRACE("Finished\n");
}
void X11DRV_ForceXIMReset(HWND hwnd)
NTSTATUS x11drv_xim_reset( void *hwnd )
{
XIC ic = X11DRV_get_ic(hwnd);
if (ic)
@ -251,19 +251,21 @@ void X11DRV_ForceXIMReset(HWND hwnd)
leftover = XmbResetIC(ic);
XFree(leftover);
}
return 0;
}
void X11DRV_SetPreeditState(HWND hwnd, BOOL fOpen)
NTSTATUS x11drv_xim_preedit_state( void *arg )
{
struct xim_preedit_state_params *params = arg;
XIC ic;
XIMPreeditState state;
XVaNestedList attr;
ic = X11DRV_get_ic(hwnd);
ic = X11DRV_get_ic( params->hwnd );
if (!ic)
return;
return 0;
if (fOpen)
if (params->open)
state = XIMPreeditEnable;
else
state = XIMPreeditDisable;
@ -274,6 +276,7 @@ void X11DRV_SetPreeditState(HWND hwnd, BOOL fOpen)
XSetICValues(ic, XNPreeditAttributes, attr, NULL);
XFree(attr);
}
return 0;
}