Muneyuki Noguchi : winex11: Prevent XCreateIC from returning NULL when input style isn't "root".

Alexandre Julliard julliard at winehq.org
Mon Oct 20 08:01:06 CDT 2008


Module: wine
Branch: master
Commit: edd24b613ff8605cd5b0c7baae04434a28c29068
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=edd24b613ff8605cd5b0c7baae04434a28c29068

Author: Muneyuki Noguchi <nogu.dev at gmail.com>
Date:   Sat Oct 18 23:03:48 2008 +0900

winex11: Prevent XCreateIC from returning NULL when input style isn't "root".

---

 dlls/winex11.drv/x11drv.h      |    1 +
 dlls/winex11.drv/x11drv_main.c |    1 +
 dlls/winex11.drv/xim.c         |   23 +++++++++++++++++++++++
 3 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index e5a40aa..90ec95a 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -515,6 +515,7 @@ struct x11drv_thread_data
     Window   grab_window;          /* window that currently grabs the mouse */
     HWND     last_focus;           /* last window that had focus */
     XIM      xim;                  /* input method */
+    XFontSet font_set;             /* international text drawing font set */
     Window   selection_wnd;        /* window used for selection interactions */
 };
 
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index fc9996a..1569481 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -562,6 +562,7 @@ static void thread_detach(void)
         X11DRV_ResetSelectionOwner();
         wine_tsx11_lock();
         if (data->xim) XCloseIM( data->xim );
+        if (data->font_set) XFreeFontSet( data->display, data->font_set );
         XCloseDisplay( data->display );
         wine_tsx11_unlock();
         HeapFree( GetProcessHeap(), 0, data );
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index 5e413f0..7c3c9d1 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -477,6 +477,26 @@ static BOOL open_xim( Display *display )
 
     thread_data->xim = xim;
 
+    if ((ximStyle & (XIMPreeditNothing | XIMPreeditNone)) == 0 ||
+        (ximStyle & (XIMStatusNothing | XIMStatusNone)) == 0)
+    {
+        char **list;
+        int count;
+        thread_data->font_set = XCreateFontSet(display, "fixed",
+                          &list, &count, NULL);
+        TRACE("ximFontSet = %p\n", thread_data->font_set);
+        TRACE("list = %p, count = %d\n", list, count);
+        if (list != NULL)
+        {
+            int i;
+            for (i = 0; i < count; ++i)
+                TRACE("list[%d] = %s\n", i, list[i]);
+            XFreeStringList(list);
+        }
+    }
+    else
+        thread_data->font_set = NULL;
+
     wine_tsx11_unlock();
     IME_UpdateAssociation(NULL);
     wine_tsx11_lock();
@@ -518,6 +538,7 @@ XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data)
     XICCallback P_StartCB, P_DoneCB, P_DrawCB, P_CaretCB;
     LANGID langid = PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale()));
     Window win = data->whole_window;
+    XFontSet fontSet = x11drv_thread_data()->font_set;
 
     TRACE("xim = %p\n", xim);
 
@@ -552,6 +573,7 @@ XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data)
     if ((ximStyle & (XIMPreeditNothing | XIMPreeditNone)) == 0)
     {
         preedit = XVaCreateNestedList(0,
+                        XNFontSet, fontSet,
                         XNSpotLocation, &spot,
                         XNPreeditStartCallback, &P_StartCB,
                         XNPreeditDoneCallback, &P_DoneCB,
@@ -575,6 +597,7 @@ XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data)
     if ((ximStyle & (XIMStatusNothing | XIMStatusNone)) == 0)
     {
         status = XVaCreateNestedList(0,
+            XNFontSet, fontSet,
             NULL);
         TRACE("status = %p\n", status);
      }




More information about the wine-cvs mailing list