Choe, I'm a bit confused here. This looks like an older version of your patch from: https://bugs.freedesktop.org/attachment.cgi?id=13405
Bernd provided an updated version https://bugs.freedesktop.org/attachment.cgi?id=21093 which took into account changes in libX11 http://cgit.freedesktop.org/xorg/lib/libX11/diff/?id=1a1a42a3ca1dfaf42f1094936b71c140fc030fcb Those consolidated changes had issues: https://bugs.freedesktop.org/show_bug.cgi?id=7869#c25 The patch that I wanted to see sent to the list for review was the one actually used by SuSE: https://bugzillafiles.novell.org/attachment.cgi?id=276799 I'll send a followup with the SuSE patch. On Oct 9, 2011, at 07:31, Choe Hwanjin wrote: > NEED_SYNC_REPLY flag should be in Xim not in Xic. > Because the focused Xic can be changed before sending sync reply. > After focused Xic changed, the new Xic doesn't have NEED_SYNC_REPLY > flag enabled, so libX11 doesn't send XIM_SYNC_REPLY packet. > > This patch adds sync reply flag to Xim and removes sync reply > from Xic. > > Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=7869 > > Signed-off-by: Choe Hwanjin <choe.hwan...@gmail.com> > --- > modules/im/ximcp/imDefFlt.c | 12 ++++++------ > modules/im/ximcp/imDefIc.c | 4 ---- > modules/im/ximcp/imDefLkup.c | 12 ++++-------- > modules/im/ximcp/imExten.c | 2 +- > src/xlibi18n/XimintP.h | 40 ++++++++++++++++------------------------ > 5 files changed, 27 insertions(+), 43 deletions(-) > > diff --git a/modules/im/ximcp/imDefFlt.c b/modules/im/ximcp/imDefFlt.c > index ee304c8..0eb1797 100644 > --- a/modules/im/ximcp/imDefFlt.c > +++ b/modules/im/ximcp/imDefFlt.c > @@ -128,9 +128,9 @@ _XimPendingFilter( > { > Xim im = (Xim)ic->core.im; > > - if (IS_NEED_SYNC_REPLY(ic)) { > + if (IS_NEED_SYNC_REPLY(im)) { > (void)_XimProcSyncReply(im, ic); > - UNMARK_NEED_SYNC_REPLY(ic); > + UNMARK_NEED_SYNC_REPLY(im); > } > return; > } > @@ -144,9 +144,9 @@ _XimProtoKeypressFilter( > Xim im = (Xim)ic->core.im; > #endif > > - if (IS_FABLICATED(ic)) { > + if (IS_FABRICATED(ic->core.im)) { > _XimPendingFilter(ic); > - UNMARK_FABLICATED(ic); > + UNMARK_FABRICATED(ic->core.im); > return NOTFILTERD; > } > > @@ -207,9 +207,9 @@ _XimProtoKeyreleaseFilter( > Xim im = (Xim)ic->core.im; > #endif > > - if (IS_FABLICATED(ic)) { > + if (IS_FABRICATED(ic->core.im)) { > _XimPendingFilter(ic); > - UNMARK_FABLICATED(ic); > + UNMARK_FABRICATED(ic->core.im); > return NOTFILTERD; > } > > diff --git a/modules/im/ximcp/imDefIc.c b/modules/im/ximcp/imDefIc.c > index a962c1b..a06f6a7 100644 > --- a/modules/im/ximcp/imDefIc.c > +++ b/modules/im/ximcp/imDefIc.c > @@ -968,8 +968,6 @@ _XimProtoSetFocus( > (void)_XimWrite(im, len, (XPointer)buf); > _XimFlush(im); > > - MARK_FOCUSED(ic); > - > _XimRegisterFilter(ic); > return; > } > @@ -1015,8 +1013,6 @@ _XimProtoUnsetFocus( > (void)_XimWrite(im, len, (XPointer)buf); > _XimFlush(im); > > - UNMARK_FOCUSED(ic); > - > _XimUnregisterFilter(ic); > return; > } > diff --git a/modules/im/ximcp/imDefLkup.c b/modules/im/ximcp/imDefLkup.c > index 996d36a..cf75919 100644 > --- a/modules/im/ximcp/imDefLkup.c > +++ b/modules/im/ximcp/imDefLkup.c > @@ -213,12 +213,8 @@ _XimRespSyncReply( > Xic ic, > BITMASK16 mode) > { > - if (mode & XimSYNCHRONUS) /* SYNC Request */ { > - if (IS_FOCUSED(ic)) > - MARK_NEED_SYNC_REPLY(ic); > - else > - _XimProcSyncReply((Xim)ic->core.im, ic); > - } > + if (mode & XimSYNCHRONUS) /* SYNC Request */ > + MARK_NEED_SYNC_REPLY(ic->core.im); > > return True; > } > @@ -356,7 +352,7 @@ _XimProcEvent( > ev->xany.serial |= serial << 16; > ev->xany.send_event = False; > ev->xany.display = d; > - MARK_FABLICATED(ic); > + MARK_FABRICATED(ic->core.im); > return; > } > > @@ -708,7 +704,7 @@ _XimCommitRecv( > > (void)_XimRespSyncReply(ic, flag); > > - MARK_FABLICATED(ic); > + MARK_FABRICATED(im); > > ev.type = KeyPress; > ev.send_event = False; > diff --git a/modules/im/ximcp/imExten.c b/modules/im/ximcp/imExten.c > index 946d780..65e59bc 100644 > --- a/modules/im/ximcp/imExten.c > +++ b/modules/im/ximcp/imExten.c > @@ -159,7 +159,7 @@ _XimProcExtForwardKeyEvent( > XPutBackEvent(im->core.display, &ev); > > _XimRespSyncReply(ic, buf_s[0]); > - MARK_FABLICATED(ic); > + MARK_FABRICATED(im); > > return True; > } > diff --git a/src/xlibi18n/XimintP.h b/src/xlibi18n/XimintP.h > index 0e384ab..14a7e6d 100644 > --- a/src/xlibi18n/XimintP.h > +++ b/src/xlibi18n/XimintP.h > @@ -161,6 +161,8 @@ typedef struct _XimProtoPrivateRec { > #define DELAYBINDABLE (1L << 3) > #define RECONNECTABLE (1L << 4) > #endif /* XIM_CONNECTABLE */ > +#define FABRICATED (1L << 5) > +#define NEED_SYNC_REPLY (1L << 6) > > /* > * macro for the flag of XIMPrivateRec > @@ -199,6 +201,20 @@ typedef struct _XimProtoPrivateRec { > (((Xim)im)->private.proto.flag &= ~(DELAYBINDABLE|RECONNECTABLE)) > #endif /* XIM_CONNECTABLE */ > > +#define IS_FABRICATED(im) \ > + (((Xim)im)->private.proto.flag & FABRICATED) > +#define MARK_FABRICATED(im) \ > + (((Xim)im)->private.proto.flag |= FABRICATED) > +#define UNMARK_FABRICATED(im) \ > + (((Xim)im)->private.proto.flag &= ~FABRICATED) > + > +#define IS_NEED_SYNC_REPLY(im) \ > + (((Xim)im)->private.proto.flag & NEED_SYNC_REPLY) > +#define MARK_NEED_SYNC_REPLY(im) \ > + (((Xim)im)->private.proto.flag |= NEED_SYNC_REPLY) > +#define UNMARK_NEED_SYNC_REPLY(im) \ > + (((Xim)im)->private.proto.flag &= ~NEED_SYNC_REPLY) > + > /* > * bit mask for the register_filter_event of XIMPrivateRec/XICPrivateRec > */ > @@ -259,9 +275,6 @@ typedef struct _XicProtoPrivateRec { > * bit mask for the flag of XICPrivateRec > */ > #define IC_CONNECTED (1L) > -#define FABLICATED (1L << 1) > -#define NEED_SYNC_REPLY (1L << 2) > -#define FOCUSED (1L << 3) > > /* > * macro for the flag of XICPrivateRec > @@ -273,27 +286,6 @@ typedef struct _XicProtoPrivateRec { > #define UNMARK_IC_CONNECTED(ic) \ > (((Xic)ic)->private.proto.flag &= ~IC_CONNECTED) > > -#define IS_FABLICATED(ic) \ > - (((Xic)ic)->private.proto.flag & FABLICATED) > -#define MARK_FABLICATED(ic) \ > - (((Xic)ic)->private.proto.flag |= FABLICATED) > -#define UNMARK_FABLICATED(ic) \ > - (((Xic)ic)->private.proto.flag &= ~FABLICATED) > - > -#define IS_NEED_SYNC_REPLY(ic) \ > - (((Xic)ic)->private.proto.flag & NEED_SYNC_REPLY) > -#define MARK_NEED_SYNC_REPLY(ic) \ > - (((Xic)ic)->private.proto.flag |= NEED_SYNC_REPLY) > -#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 > */ > -- > 1.7.5.4 > > _______________________________________________ > xorg-devel@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel