QXIMInputContext::QXIMInputContext() { if (!qt_xim_preferred_style) // no configured input style, use the default qt_xim_preferred_style = xim_default_style; xim = 0; QByteArray ximServerName(qt_ximServer); if (qt_ximServer) ximServerName.prepend("@im="); else ximServerName = ""; if (!XSupportsLocale()) #ifndef QT_NO_DEBUG qWarning("Qt: Locale not supported on X server") #endif ; #ifdef USE_X11R6_XIM else if (XSetLocaleModifiers (ximServerName.constData()) == 0) qWarning("Qt: Cannot set locale modifiers: %s", ximServerName.constData()); else XRegisterIMInstantiateCallback(X11->display, 0, 0, 0, (XIMProc) xim_create_callback, reinterpret_cast<char *>(this)); #else // !USE_X11R6_XIM else if (XSetLocaleModifiers ("") == 0)
void QXIMInputContext::init_xim() { #ifndef QT_NO_XIM if(!isInitXIM) isInitXIM = TRUE; bool codesetIsUtf8 = (QString::compare(nl_langinfo(CODESET), "UTF-8") == 0); if (!codesetIsUtf8) { setlocale(LC_CTYPE, "en_US.UTF-8"); } qt_xim = 0; QString ximServerName(qt_ximServer); if (qt_ximServer) ximServerName.prepend("@im="); else ximServerName = ""; if ( !XSupportsLocale() ) qWarning("Qt: Locales not supported on X server"); #ifdef USE_X11R6_XIM else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 ) qWarning( "Qt: Cannot set locale modifiers: %s", ximServerName.ascii()); else { Display *dpy = QPaintDevice::x11AppDisplay(); XWindowAttributes attr; // XIM unselects all events on the root window XGetWindowAttributes( dpy, QPaintDevice::x11AppRootWindow(), &attr ); XRegisterIMInstantiateCallback(dpy, 0, 0, 0, (XIMProc) xim_create_callback, 0); XSelectInput( dpy, QPaintDevice::x11AppRootWindow(), attr.your_event_mask ); } #else // !USE_X11R6_XIM else if ( XSetLocaleModifiers ("") == 0 )
void X11DRV_SetupXIM(void) { Display *display = thread_display(); if (!open_xim( display )) XRegisterIMInstantiateCallback( display, NULL, NULL, NULL, open_xim_callback, NULL ); }
/* initialize info->im */ static void xim_info_try_im (GtkOXIMInfo *info) { GdkScreen *screen = info->screen; GdkDisplay *display = gdk_screen_get_display (screen); g_assert (info->im == NULL); if (info->reconnecting) return; if (XSupportsLocale ()) { if (!XSetLocaleModifiers ("@im=oxim")) g_warning ("Unable to set locale modifiers with XSetLocaleModifiers()"); info->im = XOpenIM (GDK_DISPLAY_XDISPLAY (display), NULL, NULL, NULL); if (!info->im) { XRegisterIMInstantiateCallback (GDK_DISPLAY_XDISPLAY(display), NULL, NULL, NULL, xim_instantiate_callback, (XPointer)info); info->reconnecting = TRUE; return; } setup_im (info); } }
static void X11DRV_DestroyIM(XIM xim, XPointer p, XPointer data) { struct x11drv_thread_data *thread_data = x11drv_thread_data(); TRACE("xim = %p, p = %p\n", xim, p); thread_data->xim = NULL; ximStyle = 0; XRegisterIMInstantiateCallback( thread_data->display, NULL, NULL, NULL, open_xim_callback, NULL ); }
static void xim_destroy_callback(XIM /*im*/, XPointer client_data, XPointer /*call_data*/) { QXIMInputContext *qic = reinterpret_cast<QXIMInputContext *>(client_data); // qDebug("xim_destroy_callback"); qic->close_xim(); XRegisterIMInstantiateCallback(X11->display, 0, 0, 0, (XIMProc) xim_create_callback, reinterpret_cast<char *>(qic)); }
static void xim_destroy_callback(XIM /*im*/, XPointer /*client_data*/, XPointer /*call_data*/) { // qDebug("xim_destroy_callback"); QXIMInputContext::close_xim(); Display *dpy = QPaintDevice::x11AppDisplay(); XRegisterIMInstantiateCallback(dpy, 0, 0, 0, (XIMProc) xim_create_callback, 0); }
static void X11DRV_DestroyIM(XIM xim, XPointer p, XPointer data) { struct x11drv_thread_data *thread_data = x11drv_thread_data(); TRACE("xim = %p, p = %p\n", xim, p); thread_data->xim = NULL; ximStyle = 0; wine_tsx11_lock(); XRegisterIMInstantiateCallback( thread_data->display, NULL, NULL, NULL, X11DRV_OpenIM, NULL ); wine_tsx11_unlock(); }
void X11DRV_SetupXIM(void) { wine_tsx11_lock(); XRegisterIMInstantiateCallback(thread_display(), NULL, NULL, NULL, X11DRV_OpenIM, NULL); wine_tsx11_unlock(); }