Blob Blame Raw
--- libX11-1.0.3/modules/im/ximcp/imDefLkup.c.bug-201284	2006-10-30 23:58:41.000000000 -0500
+++ libX11-1.0.3/modules/im/ximcp/imDefLkup.c	2006-10-30 23:58:41.000000000 -0500
@@ -216,8 +216,13 @@
     Xic		 ic,
     BITMASK16	 mode)
 {
-    if (mode & XimSYNCHRONUS) /* SYNC Request */
-	MARK_NEED_SYNC_REPLY(ic);
+    if (mode & XimSYNCHRONUS) /* SYNC Request */ {
+	if (IS_FOCUSED(ic))
+	    MARK_NEED_SYNC_REPLY(ic);
+	else
+	    _XimProcSyncReply(ic->core.im, ic);
+    }
+    
     return True;
 }
 
--- libX11-1.0.3/modules/im/ximcp/imDefIc.c.bug-201284	2006-06-22 17:22:22.000000000 -0400
+++ libX11-1.0.3/modules/im/ximcp/imDefIc.c	2006-10-30 23:58:41.000000000 -0500
@@ -949,6 +949,8 @@
     (void)_XimWrite(im, len, (XPointer)buf);
     _XimFlush(im);
 
+    MARK_FOCUSED(ic);
+
     _XimRegisterFilter(ic);
     return;
 }
@@ -994,6 +996,8 @@
     (void)_XimWrite(im, len, (XPointer)buf);
     _XimFlush(im);
 
+    UNMARK_FOCUSED(ic);
+    
     _XimUnregisterFilter(ic);
     return;
 }
--- libX11-1.0.3/src/xlibi18n/XimintP.h.bug-201284	2006-06-22 17:22:23.000000000 -0400
+++ libX11-1.0.3/src/xlibi18n/XimintP.h	2006-10-31 00:01:30.000000000 -0500
@@ -244,6 +244,7 @@
 #define IC_CONNECTED		(1L)
 #define FABLICATED		(1L << 1)
 #define	NEED_SYNC_REPLY		(1L << 2)
+#define FOCUSED			(1L << 3)
 
 /*
  * macro for the flag of XICPrivateRec
@@ -269,6 +270,13 @@
 #define	UNMARK_NEED_SYNC_REPLY(ic) \
 		(((Xic)ic)->private.proto.flag &= ~NEED_SYNC_REPLY)
 
+#define IS_FOCUSED(ic) \
+		(((Xic)ic)->private.proto.flag & FOCUSED)
+#define MARK_FOCUSED(ic) \
+		(((Xic)ic)->private.proto.flag |= FOCUSED)
+#define UNMARK_FOCUSED(ic) \
+		(((Xic)ic)->private.proto.flag &= ~FOCUSED)
+
 /*
  * macro for the filter_event_mask of XICPrivateRec
  */