Commit 5c30e9ae authored by Alexandre Julliard's avatar Alexandre Julliard

winex11: Separate the XIM process-wide setup from the IME creation.

parent bd324db0
...@@ -274,8 +274,9 @@ extern Drawable get_glxdrawable(X11DRV_PDEVICE *physDev); ...@@ -274,8 +274,9 @@ extern Drawable get_glxdrawable(X11DRV_PDEVICE *physDev);
extern BOOL destroy_glxpixmap(Display *display, XID glxpixmap); extern BOOL destroy_glxpixmap(Display *display, XID glxpixmap);
/* XIM support */ /* XIM support */
extern BOOL X11DRV_InitXIM( const char *input_style );
extern XIC X11DRV_CreateIC(XIM xim, Display *display, Window win); 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_XIMLookupChars( const char *str, DWORD count );
extern void X11DRV_ForceXIMReset(HWND hwnd); extern void X11DRV_ForceXIMReset(HWND hwnd);
......
...@@ -538,6 +538,7 @@ static BOOL process_attach(void) ...@@ -538,6 +538,7 @@ static BOOL process_attach(void)
X11DRV_InitKeyboard( gdi_display ); X11DRV_InitKeyboard( gdi_display );
X11DRV_InitClipboard(); X11DRV_InitClipboard();
if (use_xim) use_xim = X11DRV_InitXIM( input_style );
return TRUE; return TRUE;
} }
...@@ -649,12 +650,12 @@ struct x11drv_thread_data *x11drv_init_thread_data(void) ...@@ -649,12 +650,12 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
if (TRACE_ON(synchronous)) XSynchronize( data->display, True ); if (TRACE_ON(synchronous)) XSynchronize( data->display, True );
wine_tsx11_unlock(); 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 ); set_queue_display_fd( data->display );
TlsSetValue( thread_data_tls_index, data ); TlsSetValue( thread_data_tls_index, data );
if (use_xim) data->xim = X11DRV_SetupXIM( data->display );
X11DRV_SetCursor( NULL ); X11DRV_SetCursor( NULL );
return data; return data;
} }
......
...@@ -37,9 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(x11drv); ...@@ -37,9 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(x11drv);
BOOL ximInComposeMode=FALSE; BOOL ximInComposeMode=FALSE;
static XIMStyle ximStyle = 0;
static XIMStyle ximStyleRoot = 0;
/* moved here from imm32 for dll separation */ /* moved here from imm32 for dll separation */
static DWORD dwCompStringLength = 0; static DWORD dwCompStringLength = 0;
static LPBYTE CompositionString = NULL; static LPBYTE CompositionString = NULL;
...@@ -56,6 +53,10 @@ static DWORD dwPreeditPos = 0; ...@@ -56,6 +53,10 @@ static DWORD dwPreeditPos = 0;
/* inorder to enable deadkey support */ /* inorder to enable deadkey support */
#define STYLE_NONE (XIMPreeditNothing | XIMStatusNothing) #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, static BOOL X11DRV_ImmSetInternalString(DWORD dwIndex, DWORD dwOffset,
DWORD selLength, LPWSTR lpComp, DWORD dwCompLen) DWORD selLength, LPWSTR lpComp, DWORD dwCompLen)
{ {
...@@ -327,16 +328,13 @@ void X11DRV_ForceXIMReset(HWND hwnd) ...@@ -327,16 +328,13 @@ void X11DRV_ForceXIMReset(HWND hwnd)
} }
/*********************************************************************** /***********************************************************************
* X11DRV Ime creation * X11DRV_InitXIM
*/ *
XIM X11DRV_SetupXIM(Display *display, const char *input_style) * Process-wide XIM initialization.
*/
BOOL X11DRV_InitXIM( const char *input_style )
{ {
XIMStyle ximStyleRequest, ximStyleCallback, ximStyleNone; BOOL ret;
XIMStyles *ximStyles = NULL;
INT i;
XIM xim;
ximStyleRequest = STYLE_CALLBACK;
if (!strcasecmp(input_style, "offthespot")) if (!strcasecmp(input_style, "offthespot"))
ximStyleRequest = STYLE_OFFTHESPOT; ximStyleRequest = STYLE_OFFTHESPOT;
...@@ -346,17 +344,31 @@ XIM X11DRV_SetupXIM(Display *display, const char *input_style) ...@@ -346,17 +344,31 @@ XIM X11DRV_SetupXIM(Display *display, const char *input_style)
ximStyleRequest = STYLE_ROOT; ximStyleRequest = STYLE_ROOT;
wine_tsx11_lock(); wine_tsx11_lock();
if (!(ret = XSupportsLocale()))
if(!XSupportsLocale())
{ {
WARN("X does not support locale.\n"); WARN("X does not support locale.\n");
goto err;
} }
if(XSetLocaleModifiers("") == NULL) else if (XSetLocaleModifiers("") == NULL)
{ {
WARN("Could not set locale modifiers.\n"); 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); xim = XOpenIM(display, NULL, NULL, NULL);
if (xim == NULL) if (xim == NULL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment