diff options
author | Søren Sandmann Pedersen <sandmann@redhat.com> | 2008-02-24 20:03:35 -0500 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2008-02-24 20:03:35 -0500 |
commit | 1a1a42a3ca1dfaf42f1094936b71c140fc030fcb (patch) | |
tree | dfc1334c8ad93b55e8821d5601cc827e0e965516 | |
parent | e02e4ccafcaf3eb8993152dfcbfbee0240ea2db2 (diff) | |
download | xorg-lib-libX11-1a1a42a3ca1dfaf42f1094936b71c140fc030fcb.tar.gz |
XIM: Fix a hand when switching input context.
Red Hat bug #201284.
-rw-r--r-- | modules/im/ximcp/imDefIc.c | 4 | ||||
-rw-r--r-- | modules/im/ximcp/imDefLkup.c | 9 | ||||
-rw-r--r-- | src/xlibi18n/XimintP.h | 8 |
3 files changed, 19 insertions, 2 deletions
diff --git a/modules/im/ximcp/imDefIc.c b/modules/im/ximcp/imDefIc.c index cb30ac23..c04744bb 100644 --- a/modules/im/ximcp/imDefIc.c +++ b/modules/im/ximcp/imDefIc.c @@ -949,6 +949,8 @@ _XimProtoSetFocus( (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); + MARK_FOCUSED(ic); + _XimRegisterFilter(ic); return; } @@ -994,6 +996,8 @@ _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 157b076d..66e4add4 100644 --- a/modules/im/ximcp/imDefLkup.c +++ b/modules/im/ximcp/imDefLkup.c @@ -216,8 +216,13 @@ _XimRespSyncReply( 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; } diff --git a/src/xlibi18n/XimintP.h b/src/xlibi18n/XimintP.h index f10d9baa..d36abdc6 100644 --- a/src/xlibi18n/XimintP.h +++ b/src/xlibi18n/XimintP.h @@ -244,6 +244,7 @@ typedef struct _XicProtoPrivateRec { #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 @@ typedef struct _XicProtoPrivateRec { #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 */ |