Make sure that all mouse buttons are released when clients
using /dev/consolectl close. This fixes a problem where if a USB mouse is detached while a button is pressed, that button is never released. MFC after: 1 week
This commit is contained in:
parent
40a2400cbe
commit
7280eb0924
@ -253,11 +253,13 @@ static struct ttydevsw sc_ttydevsw = {
|
||||
};
|
||||
|
||||
static d_ioctl_t consolectl_ioctl;
|
||||
static d_close_t consolectl_close;
|
||||
|
||||
static struct cdevsw consolectl_devsw = {
|
||||
.d_version = D_VERSION,
|
||||
.d_flags = D_NEEDGIANT,
|
||||
.d_flags = D_NEEDGIANT | D_TRACKCLOSE,
|
||||
.d_ioctl = consolectl_ioctl,
|
||||
.d_close = consolectl_close,
|
||||
.d_name = "consolectl",
|
||||
};
|
||||
|
||||
@ -1561,6 +1563,23 @@ consolectl_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
|
||||
return sctty_ioctl(dev->si_drv1, cmd, data, td);
|
||||
}
|
||||
|
||||
static int
|
||||
consolectl_close(struct cdev *dev, int flags, int mode, struct thread *td)
|
||||
{
|
||||
#ifndef SC_NO_SYSMOUSE
|
||||
mouse_info_t info;
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.operation = MOUSE_ACTION;
|
||||
|
||||
/*
|
||||
* Make sure all buttons are released when moused and other
|
||||
* console daemons exit, so that no buttons are left pressed.
|
||||
*/
|
||||
(void) sctty_ioctl(dev->si_drv1, CONS_MOUSECTL, (caddr_t)&info, td);
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
sc_cnprobe(struct consdev *cp)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user