diff options
-rw-r--r-- | src/sun_mouse.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/sun_mouse.c b/src/sun_mouse.c index 3539ba7..20ec10d 100644 --- a/src/sun_mouse.c +++ b/src/sun_mouse.c @@ -742,8 +742,21 @@ vuidMouseProc(DeviceIntPtr pPointer, int what) } break; - case DEVICE_OFF: case DEVICE_CLOSE: + if (vuidMouseList == pVuidMse) + vuidMouseList = vuidMouseList->next; + else { + VuidMsePtr m = vuidMouseList; + + while ((m != NULL) && (m->next != pVuidMse)) { + m = m->next; + } + + if (m != NULL) + m->next = pVuidMse->next; + } + /* fallthrough */ + case DEVICE_OFF: if (pInfo->fd != -1) { if (pVuidMse->strmod) { SYSCALL(i = ioctl(pInfo->fd, I_POP, pVuidMse->strmod)); |