diff options
author | Takao Fujiwara <tfujiwar@redhat.com> | 2024-04-26 01:29:34 +0900 |
---|---|---|
committer | Takao Fujiwara <tfujiwar@redhat.com> | 2024-04-26 01:29:34 +0900 |
commit | 898746f9b1fb384d6d24ed827c836ec8a0b3da3b (patch) | |
tree | 188016e5f669fc6771bc698f1b4ba5953e791ae8 /modules | |
parent | 5a1e62d77b65ba148b1c6d1d22a81dc2b07e7d9e (diff) |
ximcp: Unmark fabricated with serial 0 and Xic commit_info
GTK2 XIM resets the XKeyEvent serial to 0 even if _XimCommitRecv()
sets the serial so now checks if the events are sent with
Xic->private.proto.commit_info.
Closes: !246
Part-of: <https://gitlab.freedesktop.org/xorg/lib/libx11/-/merge_requests/246>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/im/ximcp/imDefFlt.c | 4 | ||||
-rw-r--r-- | modules/im/ximcp/imDefLkup.c | 12 |
2 files changed, 13 insertions, 3 deletions
diff --git a/modules/im/ximcp/imDefFlt.c b/modules/im/ximcp/imDefFlt.c index f07d4187..9bd4f97f 100644 --- a/modules/im/ximcp/imDefFlt.c +++ b/modules/im/ximcp/imDefFlt.c @@ -145,7 +145,7 @@ _XimProtoKeypressFilter( if (_XimIsFabricatedSerial(im, ev)) { _XimPendingFilter(ic); - _XimUnfabricateSerial(im, ev); + _XimUnfabricateSerial(im, ic, ev); return NOTFILTERD; } /* w=0 is used for _XimIsFabricatedSerial() only */ @@ -210,7 +210,7 @@ _XimProtoKeyreleaseFilter( if (_XimIsFabricatedSerial(im, ev)) { _XimPendingFilter(ic); - _XimUnfabricateSerial(im, ev); + _XimUnfabricateSerial(im, ic, ev); return NOTFILTERD; } /* w=0 is used for _XimIsFabricatedSerial() only */ diff --git a/modules/im/ximcp/imDefLkup.c b/modules/im/ximcp/imDefLkup.c index e25a2258..2e53ab23 100644 --- a/modules/im/ximcp/imDefLkup.c +++ b/modules/im/ximcp/imDefLkup.c @@ -367,10 +367,20 @@ _XimFabricateSerial( Bool _XimUnfabricateSerial( Xim im, + Xic ic, XKeyEvent *event) { + if (!im->private.proto.enable_fabricated_order) { + UNMARK_FABRICATED(im); + return True; + } /* GTK2 XIM module sets serial=0. */ - if (!event->serial || !im->private.proto.enable_fabricated_order) { + if (!event->serial) { + /* _XimCommitRecv() sets event->serial and call _XimFabricateSerial() + * but GTK2 XIM always reset event->serial=0 with XFilterEvent(). + */ + if (ic && ic->private.proto.commit_info) + im->private.proto.fabricated_serial = 0; UNMARK_FABRICATED(im); return True; } |