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

View File

@ -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;
} }