1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-28 00:01:33 -08:00

Fix event source attribution for GTK input methods

* src/gtkutil.c (xg_im_context_commit): Use pending keystroke
source if it exists.
This commit is contained in:
Po Lu 2022-04-11 19:27:07 +08:00
parent 11080420dd
commit 07ee24d83d

View file

@ -6274,6 +6274,10 @@ xg_im_context_commit (GtkIMContext *imc, gchar *str,
{
struct frame *f = user_data;
struct input_event ie;
#ifdef HAVE_XINPUT2
struct xi_device_t *source;
struct x_display_info *dpyinfo;
#endif
EVENT_INIT (ie);
/* This used to use g_utf8_to_ucs4_fast, which led to bad results
@ -6292,6 +6296,22 @@ xg_im_context_commit (GtkIMContext *imc, gchar *str,
make_fixnum (SCHARS (ie.arg)),
Qcoding, Qt, ie.arg);
#ifdef HAVE_XINPUT2
dpyinfo = FRAME_DISPLAY_INFO (f);
/* There is no timestamp associated with commit events, so use the
device that sent the last event to be filtered. */
if (dpyinfo->pending_keystroke_time)
{
dpyinfo->pending_keystroke_time = 0;
source = xi_device_from_id (dpyinfo,
dpyinfo->pending_keystroke_source);
if (source)
ie.device = source->name;
}
#endif
XSETFRAME (ie.frame_or_window, f);
ie.modifiers = 0;
ie.timestamp = 0;