[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master bb33446f2a: Better handle devices being enabled on XI2
From: |
Po Lu |
Subject: |
master bb33446f2a: Better handle devices being enabled on XI2 |
Date: |
Mon, 14 Feb 2022 20:20:42 -0500 (EST) |
branch: master
commit bb33446f2a4a2540fe3fcbc07d9fadacb024f963
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
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.
---
src/xterm.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/xterm.c b/src/xterm.c
index cff4b07c6e..9c24a074e3 100644
--- a/src/xterm.c
+++ b/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. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master bb33446f2a: Better handle devices being enabled on XI2,
Po Lu <=