diff options
Diffstat (limited to 'hw/xfree86/common/xf86Xinput.c')
-rw-r--r-- | hw/xfree86/common/xf86Xinput.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index e31aab31e..009527285 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -110,8 +110,16 @@ static int xf86InputDevicePostInit(DeviceIntPtr dev); -static InputInfoPtr *new_input_devices; -static int new_input_devices_count; +typedef struct { + struct xorg_list node; + InputInfoPtr pInfo; +} PausedInputDeviceRec; +typedef PausedInputDeviceRec *PausedInputDevicePtr; + +static struct xorg_list new_input_devices_list = { + .next = &new_input_devices_list, + .prev = &new_input_devices_list, +}; /** * Eval config and modify DeviceVelocityRec accordingly @@ -907,11 +915,10 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable) if (fd != -1) { if (paused) { /* Put on new_input_devices list for delayed probe */ - new_input_devices = xnfreallocarray(new_input_devices, - new_input_devices_count + 1, - sizeof(pInfo)); - new_input_devices[new_input_devices_count] = pInfo; - new_input_devices_count++; + PausedInputDevicePtr new_device = xnfalloc(sizeof *new_device); + new_device->pInfo = pInfo; + + xorg_list_append(&new_device->node, &new_input_devices_list); systemd_logind_release_fd(pInfo->major, pInfo->minor, fd); free(path); return BadMatch; @@ -1540,11 +1547,12 @@ xf86PostTouchEvent(DeviceIntPtr dev, uint32_t touchid, uint16_t type, void xf86InputEnableVTProbe(void) { - int i, is_auto = 0; + int is_auto = 0; DeviceIntPtr pdev; + PausedInputDevicePtr d, tmp; - for (i = 0; i < new_input_devices_count; i++) { - InputInfoPtr pInfo = new_input_devices[i]; + xorg_list_for_each_entry_safe(d, tmp, &new_input_devices_list, node) { + InputInfoPtr pInfo = d->pInfo; const char *value = xf86findOptionValue(pInfo->options, "_source"); is_auto = 0; @@ -1557,8 +1565,9 @@ xf86InputEnableVTProbe(void) xf86NewInputDevice(pInfo, &pdev, (!is_auto || (is_auto && xf86Info.autoEnableDevices))); + xorg_list_del(&d->node); + free(d); } - new_input_devices_count = 0; } /* end of xf86Xinput.c */ |