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 )