--- /usr/src/packages/BUILD/xc/lib/X11/XimintP.h 2004-07-23 08:19:57.000000000 -0700 +++ ./XimintP.h 2005-02-04 12:02:38.158935944 -0800 @@ -235,6 +235,7 @@ XrmQuark *saved_icvalues; int num_saved_icvalues; XimPendingCallback pend_cb_que; + Bool process_pend_cb_que; Bool waitCallback; } XicProtoPrivateRec ; --- /usr/src/packages/BUILD/xc/lib/X11/imDefIc.c 2005-02-02 14:12:14.000000000 -0800 +++ ./imDefIc.c 2005-02-04 12:02:54.402466552 -0800 @@ -751,6 +751,9 @@ _XimFlush(im); if (buf != tmp_buf) Xfree(buf); + + _XimProcessPendingCallbacks (ic); + ic->private.proto.waitCallback = True; buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, --- /usr/src/packages/BUILD/xc/lib/X11/imCallbk.c 2004-07-23 08:19:57.000000000 -0700 +++ ./imCallbk.c 2005-02-04 12:05:14.341192632 -0800 @@ -143,11 +143,14 @@ return(!ic->private.proto.waitCallback); /* check HM */ } -Private void +Public void _XimProcessPendingCallbacks(Xic ic) { XimPendingCallback pcbq; + if (ic->private.proto.process_pend_cb_que) + return; + ic->private.proto.process_pend_cb_que = True; while (((pcbq = ic->private.proto.pend_cb_que) != (XimPendingCallback)NULL) && _XimIsReadyForProcess(ic)) { (void) (*callback_table[pcbq->major_opcode])(pcbq->im, @@ -158,6 +161,7 @@ Xfree(pcbq->proto); /* free memory of XimPendingCallback */ Xfree(pcbq); } + ic->private.proto.process_pend_cb_que = False; } Private void @@ -175,6 +179,7 @@ } if (pcbq == (XimPendingCallback)NULL) { ic->private.proto.pend_cb_que = call_data; + ic->private.proto.process_pend_cb_que = False; } else { pcbq->next = call_data;