summaryrefslogtreecommitdiff
path: root/modules/im/ximcp/imDefFlt.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/im/ximcp/imDefFlt.c')
-rw-r--r--modules/im/ximcp/imDefFlt.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/modules/im/ximcp/imDefFlt.c b/modules/im/ximcp/imDefFlt.c
index 9bd4f97f..54e738b2 100644
--- a/modules/im/ximcp/imDefFlt.c
+++ b/modules/im/ximcp/imDefFlt.c
@@ -122,7 +122,7 @@ _XimOffKeysCheck(
return False;
}
-static void
+void
_XimPendingFilter(
Xic ic)
{
@@ -363,8 +363,18 @@ void
_XimUnregisterFilter(
Xic ic)
{
+ Xim im = (Xim)ic->core.im;
_XimUnregisterKeyPressFilter(ic);
_XimUnregisterKeyReleaseFilter(ic);
+ /* It is possible that the event from IM is received after unregister
+ * the filter.
+ * Reset any existing fabricated state since we will not be able to
+ * clear the fabricated state for those event in filter.
+ */
+ im->private.proto.fabricated_serial = 0;
+ im->private.proto.fabricated_time = 0;
+ UNMARK_FABRICATED(im);
+ _XimPendingFilter(ic);
return;
}