1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-25 15:00:45 -08:00

Better handle devices being enabled on XI2

* src/xterm.c (handle_one_xevent): Don't abort on DeviceChanged
if the device couldn't be found, instead regenerating the device
hierarchy to see if it was enabled.
This commit is contained in:
Po Lu 2022-02-15 09:19:12 +08:00
parent d43ca38556
commit bb33446f2a

View file

@ -581,6 +581,11 @@ x_free_xi_devices (struct x_display_info *dpyinfo)
/* Setup valuator tracking for XI2 master devices on
DPYINFO->display. */
/* This function's name is a misnomer: these days, it keeps a
client-side record of all devices, which includes basic information
about the device and also touchscreen tracking information, instead
of just scroll valuators. */
static void
x_init_master_valuators (struct x_display_info *dpyinfo)
{
@ -11906,7 +11911,18 @@ handle_one_xevent (struct x_display_info *dpyinfo,
device = xi_device_from_id (dpyinfo, device_changed->deviceid);
if (!device)
emacs_abort ();
{
/* An existing device might have been enabled. */
x_init_master_valuators (dpyinfo);
/* Now try to find the device again, in case it was
just enabled. */
device = xi_device_from_id (dpyinfo, device_changed->deviceid);
}
/* If it wasn't enabled, then stop handling this event. */
if (!device)
goto XI_OTHER;
/* Free data that we will regenerate from new
information. */