Kusanagi Kouichi slash@ma.neweb.ne.jp writes:
- if (data->xic)
return data->xic;
- xim = x11drv_thread_data()->xim;
- if (!xim)
return NULL;
- return X11DRV_CreateIC(xim, data->whole_window, &data->xic);
You shouldn't store a pointer to an internal field of the win_data structure, that makes things hard to follow. You should store win_data or hwnd in the pointer field and dereference it in the callback.
@@ -651,7 +651,10 @@ 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 )))
- data->xim = NULL;
- if (use_xim &&
!XRegisterIMInstantiateCallback(data->display, NULL, NULL, NULL,
X11DRV_SetupXIM, (XPointer)&data->xim))
The XRegisterIMInstantiateCallback should go in xim.c, the initialization code in x11drv_main.c shouldn't need to know about such implementation details.