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:
parent
11080420dd
commit
07ee24d83d
1 changed files with 20 additions and 0 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue