sandmann 0df6210
--- libX11-1.0.3/modules/im/ximcp/imDefLkup.c.dont-forward-keycode-0	2006-06-22 17:22:22.000000000 -0400
sandmann 0df6210
+++ libX11-1.0.3/modules/im/ximcp/imDefLkup.c	2006-09-20 17:57:49.000000000 -0400
sandmann 0df6210
@@ -332,6 +332,17 @@
sandmann 0df6210
     XEvent	*ev,
sandmann 0df6210
     Bool	 sync)
sandmann 0df6210
 {
sandmann 0df6210
+    /*
sandmann 0df6210
+     * Don't forward a key event which has keycode=0.
sandmann 0df6210
+     * keycode=0 is reserved for special purpose to let Xmb/wcLookupString()
sandmann 0df6210
+     * functions know that there is a commited string available from IM.
sandmann 0df6210
+     */
sandmann 0df6210
+    if (((ev->type == KeyPress) || (ev->type == KeyRelease))) {
sandmann 0df6210
+        if (((XKeyEvent *)ev)->keycode == 0) {
sandmann 0df6210
+            return True;
sandmann 0df6210
+        }
sandmann 0df6210
+    }
sandmann 0df6210
+
sandmann 0df6210
 #ifdef EXT_FORWARD
sandmann 0df6210
     if (((ev->type == KeyPress) || (ev->type == KeyRelease)))
sandmann 0df6210
 	if (_XimExtForwardKeyEvent(ic, (XKeyEvent *)ev, sync))
sandmann 0df6210
@@ -605,6 +616,19 @@
sandmann 0df6210
 	Xfree(info->keysym);
sandmann 0df6210
     ic->private.proto.commit_info = info->next;
sandmann 0df6210
     Xfree(info);
sandmann 0df6210
+
sandmann 0df6210
+    /*
sandmann 0df6210
+     * "Commit" uses fabricated flag to process a commited string
sandmann 0df6210
+     * from IM engine.  
sandmann 0df6210
+     * Turn off the fabricated flag here (unregister the commited
sandmann 0df6210
+     * information function). Otherwise, next regular key press
sandmann 0df6210
+     * event will be ignored at _XimProtoKeypressFilter() and it
sandmann 0df6210
+     * will not be passed to IM engine.
sandmann 0df6210
+     */
sandmann 0df6210
+    if (IS_FABLICATED(ic)) {
sandmann 0df6210
+        UNMARK_FABLICATED(ic);
sandmann 0df6210
+    }
sandmann 0df6210
+
sandmann 0df6210
     return;
sandmann 0df6210
 }
sandmann 0df6210
 
sandmann 0df6210
--- libX11-1.0.3/modules/im/ximcp/imDefFlt.c.dont-forward-keycode-0	2006-06-22 17:22:22.000000000 -0400
sandmann 0df6210
+++ libX11-1.0.3/modules/im/ximcp/imDefFlt.c	2006-09-20 17:57:49.000000000 -0400
sandmann 0df6210
@@ -147,7 +147,7 @@
sandmann 0df6210
     Xim		im = (Xim)ic->core.im;
sandmann 0df6210
 #endif
sandmann 0df6210
 
sandmann 0df6210
-    if (IS_FABLICATED(ic)) {
sandmann 0df6210
+    if ((ev->keycode == 0) || IS_FABLICATED(ic)) {
sandmann 0df6210
 	_XimPendingFilter(ic);
sandmann 0df6210
 	UNMARK_FABLICATED(ic);
sandmann 0df6210
 	return NOTFILTERD;