void QGCINInputContext::setMicroFocus(int x, int y, int, int h, QFont *f) { QWidget *widget = focusWidget(); if (widget ) { QPoint p( x, y ); QPoint p2 = widget->mapTo( widget->topLevelWidget(), QPoint( 0, 0 ) ); p = widget->topLevelWidget()->mapFromGlobal( p ); setComposePosition(p.x(), p.y() + h); } }
void QXIMInputContext::setHolderWidget( QWidget *widget ) { if ( ! widget ) return; QInputContext::setHolderWidget( widget ); #if !defined(QT_NO_XIM) if (! qt_xim) { qWarning("QInputContext: no input method context available"); return; } if (! widget->isTopLevel()) { qWarning("QInputContext: cannot create input context for non-toplevel widgets"); return; } XVaNestedList preedit_attr = 0; XIMCallback startcallback, drawcallback, donecallback; startcallback.client_data = (XPointer) this; startcallback.callback = (XIMProc) xic_start_callback; drawcallback.client_data = (XPointer) this; drawcallback.callback = (XIMProc)xic_draw_callback; donecallback.client_data = (XPointer) this; donecallback.callback = (XIMProc) xic_done_callback; preedit_attr = XVaCreateNestedList(0, XNPreeditStartCallback, &startcallback, XNPreeditDrawCallback, &drawcallback, XNPreeditDoneCallback, &donecallback, (char *) 0); if (preedit_attr) { ic = XCreateIC(qt_xim, XNInputStyle, XIMPreeditCallbacks|XIMStatusCallbacks, XNClientWindow, widget->winId(), XNPreeditAttributes, preedit_attr, (char *) 0); XFree(preedit_attr); } else { ic = XCreateIC(qt_xim, XNInputStyle, XIMPreeditCallbacks|XIMStatusCallbacks, XNClientWindow, widget->winId(), (char *) 0); } if (! ic) qFatal("Failed to create XIM input context!"); setComposePosition(1,1); // when resetting the input context, preserve the input state (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0); if( ! ximContextList ) ximContextList = new QPtrList<QXIMInputContext>; ximContextList->append( this ); #endif // !QT_NO_XIM }