Alexandre Julliard : winex11: Separate the XIM process-wide setup from the IME creation.
Alexandre Julliard
julliard at winehq.org
Fri Apr 11 06:27:04 CDT 2008
Module: wine
Branch: master
Commit: 5c30e9ae00d4666b1ae0666d97275179b9f4fd51
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5c30e9ae00d4666b1ae0666d97275179b9f4fd51
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Apr 10 12:29:01 2008 +0200
winex11: Separate the XIM process-wide setup from the IME creation.
---
dlls/winex11.drv/x11drv.h | 3 +-
dlls/winex11.drv/x11drv_main.c | 7 +++--
dlls/winex11.drv/xim.c | 46 +++++++++++++++++++++++++--------------
3 files changed, 35 insertions(+), 21 deletions(-)
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 20dd91c..d6b2b20 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -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);
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index b8f0b45..1c221bc 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -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;
}
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index 4505ecd..f389db7 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -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)
More information about the wine-cvs
mailing list