xim.c: dont leak fontSet

Aric Stewart aric at codeweavers.com
Tue Oct 24 12:17:40 CDT 2006


Only create a fontSet if we are going to be using it in the XIC.  We do 
not need to free it as it is appearers to be taken care of by X
-------------- next part --------------
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index 155c8d7..4ca9c7f 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -456,7 +456,7 @@ err:
 
 XIC X11DRV_CreateIC(XIM xim, Display *display, Window win)
 {
-    XFontSet fontSet;
+    XFontSet fontSet = NULL;
     char **list;
     int count;
     XPoint spot = {0};
@@ -485,22 +485,27 @@ XIC X11DRV_CreateIC(XIM xim, Display *di
         return xic;
     }
 
-    fontSet = XCreateFontSet(display,
-                      "*", /*FIXME*/
-                      &list, &count, NULL);
 
-    TRACE("ximFontSet = %p\n", fontSet);
-    TRACE("list = %p, count = %d\n", list, count);
-
-    if (list != NULL)
+    if (((ximStyle & (XIMPreeditNothing | XIMPreeditNone)) == 0) ||
+        ((ximStyle & (XIMStatusNothing | XIMStatusNone)) == 0))
     {
-        int i;
+        fontSet = XCreateFontSet(display,
+                          "*", /*FIXME*/
+                          &list, &count, NULL);
+
+        TRACE("ximFontSet = %p\n", fontSet);
+        TRACE("list = %p, count = %d\n", list, count);
 
-        for (i = 0; i < count; ++i)
+        if (list != NULL)
         {
-            TRACE("list[%d] = %s\n", i, list[i]);
+            int i;
+
+            for (i = 0; i < count; ++i)
+            {
+                TRACE("list[%d] = %s\n", i, list[i]);
+            }
+            XFreeStringList(list);
         }
-        XFreeStringList(list);
     }
 
     /* create callbacks */


More information about the wine-patches mailing list