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:
parent
d43ca38556
commit
bb33446f2a
1 changed files with 17 additions and 1 deletions
18
src/xterm.c
18
src/xterm.c
|
|
@ -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. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue