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:
Egbert Eich 2013-08-12 18:20:36 +02:00 committed by Keith Packard
parent 0cb33ce340
commit 508e05777a
1 changed files with 22 additions and 9 deletions

View File

@ -116,6 +116,7 @@ typedef struct x_IHRec {
InputHandlerProc ihproc;
pointer data;
Bool enabled;
Bool is_input;
struct x_IHRec *next;
} IHRec, *IHPtr;
@ -446,8 +447,12 @@ xf86VTSwitch(void)
* Keep the order: Disable Device > LeaveVT
* EnterVT > EnableDevice
*/
for (ih = InputHandlers; ih; ih = ih->next)
xf86DisableInputHandler(ih);
for (ih = InputHandlers; ih; ih = ih->next) {
if (ih->is_input)
xf86DisableInputHandler(ih);
else
xf86DisableGeneralHandler(ih);
}
for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
if (pInfo->dev) {
if (!pInfo->dev->enabled)
@ -496,9 +501,12 @@ xf86VTSwitch(void)
pInfo->flags &= ~XI86_DEVICE_DISABLED;
pInfo = pInfo->next;
}
for (ih = InputHandlers; ih; ih = ih->next)
xf86EnableInputHandler(ih);
for (ih = InputHandlers; ih; ih = ih->next) {
if (ih->is_input)
xf86EnableInputHandler(ih);
else
xf86EnableGeneralHandler(ih);
}
OsReleaseSIGIO();
}
@ -558,9 +566,12 @@ xf86VTSwitch(void)
pInfo = pInfo->next;
}
for (ih = InputHandlers; ih; ih = ih->next)
xf86EnableInputHandler(ih);
for (ih = InputHandlers; ih; ih = ih->next) {
if (ih->is_input)
xf86EnableInputHandler(ih);
else
xf86EnableGeneralHandler(ih);
}
#ifdef XSERVER_PLATFORM_BUS
/* check for any new output devices */
xf86platformVTProbe();
@ -600,8 +611,10 @@ xf86AddInputHandler(int fd, InputHandlerProc proc, pointer data)
{
IHPtr ih = addInputHandler(fd, proc, data);
if (ih)
if (ih) {
AddEnabledDevice(fd);
ih->is_input = TRUE;
}
return ih;
}