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
}