Move raw event selection on GTK+ 2 to a more appropriate place
* src/xfns.c (setup_xi_event_mask): Stop selecting for RawKeyPress on the root window. * src/xterm.c (x_new_focus_frame): Select here instead, once a frame becomes focused.
This commit is contained in:
parent
8259e36800
commit
ed6237e039
2 changed files with 25 additions and 9 deletions
|
@ -3688,15 +3688,6 @@ setup_xi_event_mask (struct frame *f)
|
||||||
XISelectEvents (FRAME_X_DISPLAY (f),
|
XISelectEvents (FRAME_X_DISPLAY (f),
|
||||||
FRAME_X_WINDOW (f),
|
FRAME_X_WINDOW (f),
|
||||||
&mask, 1);
|
&mask, 1);
|
||||||
|
|
||||||
#if defined USE_GTK && !defined HAVE_GTK3
|
|
||||||
memset (m, 0, l);
|
|
||||||
XISetMask (m, XI_RawKeyPress);
|
|
||||||
|
|
||||||
XISelectEvents (FRAME_X_DISPLAY (f),
|
|
||||||
FRAME_DISPLAY_INFO (f)->root_window,
|
|
||||||
&mask, 1);
|
|
||||||
#endif
|
|
||||||
unblock_input ();
|
unblock_input ();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
25
src/xterm.c
25
src/xterm.c
|
@ -9067,6 +9067,20 @@ static void
|
||||||
x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame)
|
x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame)
|
||||||
{
|
{
|
||||||
struct frame *old_focus = dpyinfo->x_focus_frame;
|
struct frame *old_focus = dpyinfo->x_focus_frame;
|
||||||
|
#if defined USE_GTK && !defined HAVE_GTK3 && defined HAVE_XINPUT2
|
||||||
|
XIEventMask mask;
|
||||||
|
ptrdiff_t l;
|
||||||
|
|
||||||
|
if (dpyinfo->supports_xi2)
|
||||||
|
{
|
||||||
|
l = XIMaskLen (XI_LASTEVENT);
|
||||||
|
mask.mask = alloca (l);
|
||||||
|
mask.mask_len = l;
|
||||||
|
memset (mask.mask, 0, l);
|
||||||
|
|
||||||
|
mask.deviceid = XIAllDevices;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (frame != dpyinfo->x_focus_frame)
|
if (frame != dpyinfo->x_focus_frame)
|
||||||
{
|
{
|
||||||
|
@ -9074,6 +9088,17 @@ x_new_focus_frame (struct x_display_info *dpyinfo, struct frame *frame)
|
||||||
the correct value of x_focus_frame. */
|
the correct value of x_focus_frame. */
|
||||||
dpyinfo->x_focus_frame = frame;
|
dpyinfo->x_focus_frame = frame;
|
||||||
|
|
||||||
|
/* Once none of our frames are focused anymore, stop selecting
|
||||||
|
for raw input events from the root window. */
|
||||||
|
|
||||||
|
#if defined USE_GTK && !defined HAVE_GTK3 && defined HAVE_XINPUT2
|
||||||
|
if (frame && dpyinfo->supports_xi2)
|
||||||
|
XISetMask (mask.mask, XI_RawKeyPress);
|
||||||
|
|
||||||
|
if (dpyinfo->supports_xi2)
|
||||||
|
XISelectEvents (dpyinfo->display, dpyinfo->root_window, &mask, 1);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (old_focus && old_focus->auto_lower)
|
if (old_focus && old_focus->auto_lower)
|
||||||
x_lower_frame (old_focus);
|
x_lower_frame (old_focus);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue