You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.9 KiB
53 lines
1.9 KiB
diff -up libX11-1.6.3/modules/im/ximcp/imDefFlt.c.jx libX11-1.6.3/modules/im/ximcp/imDefFlt.c |
|
--- libX11-1.6.3/modules/im/ximcp/imDefFlt.c.jx 2015-03-09 18:28:45.000000000 -0400 |
|
+++ libX11-1.6.3/modules/im/ximcp/imDefFlt.c 2015-03-10 12:32:31.912149644 -0400 |
|
@@ -142,7 +142,7 @@ _XimProtoKeypressFilter( |
|
{ |
|
Xim im = (Xim)ic->core.im; |
|
|
|
- if (IS_FABRICATED(im)) { |
|
+ if ((ev->keycode == 0) || IS_FABRICATED(im)) { |
|
_XimPendingFilter(ic); |
|
UNMARK_FABRICATED(im); |
|
return NOTFILTERD; |
|
diff -up libX11-1.6.3/modules/im/ximcp/imDefLkup.c.jx libX11-1.6.3/modules/im/ximcp/imDefLkup.c |
|
--- libX11-1.6.3/modules/im/ximcp/imDefLkup.c.jx 2015-03-09 18:28:45.000000000 -0400 |
|
+++ libX11-1.6.3/modules/im/ximcp/imDefLkup.c 2015-03-10 12:32:31.911149637 -0400 |
|
@@ -332,6 +332,17 @@ _XimForwardEvent( |
|
XEvent *ev, |
|
Bool sync) |
|
{ |
|
+ /* |
|
+ * Don't forward a key event which has keycode=0. |
|
+ * keycode=0 is reserved for special purpose to let Xmb/wcLookupString() |
|
+ * functions know that there is a commited string available from IM. |
|
+ */ |
|
+ if (((ev->type == KeyPress) || (ev->type == KeyRelease))) { |
|
+ if (((XKeyEvent *)ev)->keycode == 0) { |
|
+ return True; |
|
+ } |
|
+ } |
|
+ |
|
#ifdef EXT_FORWARD |
|
if (((ev->type == KeyPress) || (ev->type == KeyRelease))) |
|
if (_XimExtForwardKeyEvent(ic, (XKeyEvent *)ev, sync)) |
|
@@ -604,6 +615,19 @@ _XimUnregCommitInfo( |
|
Xfree(info->keysym); |
|
ic->private.proto.commit_info = info->next; |
|
Xfree(info); |
|
+ |
|
+ /* |
|
+ * "Commit" uses fabricated flag to process a commited string |
|
+ * from IM engine. |
|
+ * Turn off the fabricated flag here (unregister the commited |
|
+ * information function). Otherwise, next regular key press |
|
+ * event will be ignored at _XimProtoKeypressFilter() and it |
|
+ * will not be passed to IM engine. |
|
+ */ |
|
+ if (IS_FABRICATED(ic)) { |
|
+ UNMARK_FABRICATED(ic); |
|
+ } |
|
+ |
|
return; |
|
} |
|
|
|
|