mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
winex11: Separate the XIM process-wide setup from the IME creation.
This commit is contained in:
parent
bd324db059
commit
5c30e9ae00
3 changed files with 35 additions and 21 deletions
|
@ -274,8 +274,9 @@ extern Drawable get_glxdrawable(X11DRV_PDEVICE *physDev);
|
|||
extern BOOL destroy_glxpixmap(Display *display, XID glxpixmap);
|
||||
|
||||
/* XIM support */
|
||||
extern BOOL X11DRV_InitXIM( const char *input_style );
|
||||
extern XIC X11DRV_CreateIC(XIM xim, Display *display, Window win);
|
||||
extern XIM X11DRV_SetupXIM(Display *display, const char *input_style);
|
||||
extern XIM X11DRV_SetupXIM(Display *display);
|
||||
extern void X11DRV_XIMLookupChars( const char *str, DWORD count );
|
||||
extern void X11DRV_ForceXIMReset(HWND hwnd);
|
||||
|
||||
|
|
|
@ -538,6 +538,7 @@ static BOOL process_attach(void)
|
|||
|
||||
X11DRV_InitKeyboard( gdi_display );
|
||||
X11DRV_InitClipboard();
|
||||
if (use_xim) use_xim = X11DRV_InitXIM( input_style );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -649,12 +650,12 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
|
|||
if (TRACE_ON(synchronous)) XSynchronize( data->display, True );
|
||||
wine_tsx11_unlock();
|
||||
|
||||
if (use_xim && !(data->xim = X11DRV_SetupXIM( data->display, input_style )))
|
||||
WARN("Input Method is not available\n");
|
||||
|
||||
set_queue_display_fd( data->display );
|
||||
TlsSetValue( thread_data_tls_index, data );
|
||||
|
||||
if (use_xim) data->xim = X11DRV_SetupXIM( data->display );
|
||||
X11DRV_SetCursor( NULL );
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,9 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(x11drv);
|
|||
|
||||
BOOL ximInComposeMode=FALSE;
|
||||
|
||||
static XIMStyle ximStyle = 0;
|
||||
static XIMStyle ximStyleRoot = 0;
|
||||
|
||||
/* moved here from imm32 for dll separation */
|
||||
static DWORD dwCompStringLength = 0;
|
||||
static LPBYTE CompositionString = NULL;
|
||||
|
@ -56,6 +53,10 @@ static DWORD dwPreeditPos = 0;
|
|||
/* inorder to enable deadkey support */
|
||||
#define STYLE_NONE (XIMPreeditNothing | XIMStatusNothing)
|
||||
|
||||
static XIMStyle ximStyle = 0;
|
||||
static XIMStyle ximStyleRoot = 0;
|
||||
static XIMStyle ximStyleRequest = STYLE_CALLBACK;
|
||||
|
||||
static BOOL X11DRV_ImmSetInternalString(DWORD dwIndex, DWORD dwOffset,
|
||||
DWORD selLength, LPWSTR lpComp, DWORD dwCompLen)
|
||||
{
|
||||
|
@ -327,16 +328,13 @@ void X11DRV_ForceXIMReset(HWND hwnd)
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* X11DRV Ime creation
|
||||
*/
|
||||
XIM X11DRV_SetupXIM(Display *display, const char *input_style)
|
||||
* X11DRV_InitXIM
|
||||
*
|
||||
* Process-wide XIM initialization.
|
||||
*/
|
||||
BOOL X11DRV_InitXIM( const char *input_style )
|
||||
{
|
||||
XIMStyle ximStyleRequest, ximStyleCallback, ximStyleNone;
|
||||
XIMStyles *ximStyles = NULL;
|
||||
INT i;
|
||||
XIM xim;
|
||||
|
||||
ximStyleRequest = STYLE_CALLBACK;
|
||||
BOOL ret;
|
||||
|
||||
if (!strcasecmp(input_style, "offthespot"))
|
||||
ximStyleRequest = STYLE_OFFTHESPOT;
|
||||
|
@ -346,17 +344,31 @@ XIM X11DRV_SetupXIM(Display *display, const char *input_style)
|
|||
ximStyleRequest = STYLE_ROOT;
|
||||
|
||||
wine_tsx11_lock();
|
||||
|
||||
if(!XSupportsLocale())
|
||||
if (!(ret = XSupportsLocale()))
|
||||
{
|
||||
WARN("X does not support locale.\n");
|
||||
goto err;
|
||||
}
|
||||
if(XSetLocaleModifiers("") == NULL)
|
||||
else if (XSetLocaleModifiers("") == NULL)
|
||||
{
|
||||
WARN("Could not set locale modifiers.\n");
|
||||
goto err;
|
||||
ret = FALSE;
|
||||
}
|
||||
wine_tsx11_unlock();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* X11DRV Ime creation
|
||||
*/
|
||||
XIM X11DRV_SetupXIM( Display *display )
|
||||
{
|
||||
XIMStyle ximStyleCallback, ximStyleNone;
|
||||
XIMStyles *ximStyles = NULL;
|
||||
INT i;
|
||||
XIM xim;
|
||||
|
||||
wine_tsx11_lock();
|
||||
|
||||
xim = XOpenIM(display, NULL, NULL, NULL);
|
||||
if (xim == NULL)
|
||||
|
|
Loading…
Reference in a new issue