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