DDX/Events: Distinguish between Input- and GeneralHandlers in xf86VTSwitch()
When enabling/disabling input handlers in xf86VTSwitch() we treat Input- and GeneralHandlers equally. The result is that after a VT switch the masks for EnabledDevices and AllSockets are equal and the distiction between both types is lost. Signed-off-by: Egbert Eich <eich@freedesktop.org> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
0cb33ce340
commit
508e05777a
|
@ -116,6 +116,7 @@ typedef struct x_IHRec {
|
||||||
InputHandlerProc ihproc;
|
InputHandlerProc ihproc;
|
||||||
pointer data;
|
pointer data;
|
||||||
Bool enabled;
|
Bool enabled;
|
||||||
|
Bool is_input;
|
||||||
struct x_IHRec *next;
|
struct x_IHRec *next;
|
||||||
} IHRec, *IHPtr;
|
} IHRec, *IHPtr;
|
||||||
|
|
||||||
|
@ -446,8 +447,12 @@ xf86VTSwitch(void)
|
||||||
* Keep the order: Disable Device > LeaveVT
|
* Keep the order: Disable Device > LeaveVT
|
||||||
* EnterVT > EnableDevice
|
* EnterVT > EnableDevice
|
||||||
*/
|
*/
|
||||||
for (ih = InputHandlers; ih; ih = ih->next)
|
for (ih = InputHandlers; ih; ih = ih->next) {
|
||||||
xf86DisableInputHandler(ih);
|
if (ih->is_input)
|
||||||
|
xf86DisableInputHandler(ih);
|
||||||
|
else
|
||||||
|
xf86DisableGeneralHandler(ih);
|
||||||
|
}
|
||||||
for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
|
for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
|
||||||
if (pInfo->dev) {
|
if (pInfo->dev) {
|
||||||
if (!pInfo->dev->enabled)
|
if (!pInfo->dev->enabled)
|
||||||
|
@ -496,9 +501,12 @@ xf86VTSwitch(void)
|
||||||
pInfo->flags &= ~XI86_DEVICE_DISABLED;
|
pInfo->flags &= ~XI86_DEVICE_DISABLED;
|
||||||
pInfo = pInfo->next;
|
pInfo = pInfo->next;
|
||||||
}
|
}
|
||||||
for (ih = InputHandlers; ih; ih = ih->next)
|
for (ih = InputHandlers; ih; ih = ih->next) {
|
||||||
xf86EnableInputHandler(ih);
|
if (ih->is_input)
|
||||||
|
xf86EnableInputHandler(ih);
|
||||||
|
else
|
||||||
|
xf86EnableGeneralHandler(ih);
|
||||||
|
}
|
||||||
OsReleaseSIGIO();
|
OsReleaseSIGIO();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -558,9 +566,12 @@ xf86VTSwitch(void)
|
||||||
pInfo = pInfo->next;
|
pInfo = pInfo->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ih = InputHandlers; ih; ih = ih->next)
|
for (ih = InputHandlers; ih; ih = ih->next) {
|
||||||
xf86EnableInputHandler(ih);
|
if (ih->is_input)
|
||||||
|
xf86EnableInputHandler(ih);
|
||||||
|
else
|
||||||
|
xf86EnableGeneralHandler(ih);
|
||||||
|
}
|
||||||
#ifdef XSERVER_PLATFORM_BUS
|
#ifdef XSERVER_PLATFORM_BUS
|
||||||
/* check for any new output devices */
|
/* check for any new output devices */
|
||||||
xf86platformVTProbe();
|
xf86platformVTProbe();
|
||||||
|
@ -600,8 +611,10 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data)
|
||||||
{
|
{
|
||||||
IHPtr ih = addInputHandler(fd, proc, data);
|
IHPtr ih = addInputHandler(fd, proc, data);
|
||||||
|
|
||||||
if (ih)
|
if (ih) {
|
||||||
AddEnabledDevice(fd);
|
AddEnabledDevice(fd);
|
||||||
|
ih->is_input = TRUE;
|
||||||
|
}
|
||||||
return ih;
|
return ih;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue