--- os/WaitFor.c.orig 2007-01-26 15:53:27.000000000 +0100 +++ os/WaitFor.c 2007-01-29 11:24:14.000000000 +0100 @@ -144,6 +144,7 @@ static OsTimerPtr timers = NULL; * For more info on ClientsWithInput, see ReadRequestFromClient(). * pClientsReady is an array to store ready client->index values into. *****************/ +volatile fd_set tmp_set; int WaitForSomething(int *pClientsReady) @@ -298,10 +299,9 @@ WaitForSomething(int *pClientsReady) if (expired) return 0; } - } + } else - { - fd_set tmp_set; + { if (*checkForInput[0] == *checkForInput[1]) { if (timers) @@ -338,7 +338,8 @@ WaitForSomething(int *pClientsReady) QueueWorkProc(EstablishNewConnections, NULL, (pointer)&LastSelectMask); #ifdef DPMSExtension - if (XFD_ANYSET (&devicesReadable) && (DPMSPowerLevel != DPMSModeOn)) + XFD_ANDSET(&tmp_set, &devicesReadable, &EnabledDevices); + if (XFD_ANYSET (&tmp_set) && (DPMSPowerLevel != DPMSModeOn)) DPMSSet(DPMSModeOn); #endif if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable)) --- hw/xfree86/common/xf86Events.c.orig_1 2007-02-01 10:18:02.000000000 +0100 +++ hw/xfree86/common/xf86Events.c 2007-02-01 10:43:54.000000000 +0100 @@ -164,6 +164,7 @@ typedef struct x_IHRec { InputHandlerProc ihproc; pointer data; Bool enabled; + Bool is_input; struct x_IHRec * next; } IHRec, *IHPtr; @@ -1526,8 +1527,12 @@ xf86VTSwitch() for (i = 0; i < xf86NumScreens; i++) xf86Screens[i]->LeaveVT(i, 0); - 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); + } xf86AccessLeave(); /* We need this here, otherwise */ xf86AccessLeaveState(); /* console won't be restored */ @@ -1563,9 +1568,12 @@ xf86VTSwitch() pInfo = pInfo->next; } #endif /* !__UNIXOS2__ */ - 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); + } xf86UnblockSIGIO(prevSIGIO); } else { @@ -1626,8 +1634,12 @@ xf86VTSwitch() } #endif /* !__UNIXOS2__ */ - 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); + } xf86UnblockSIGIO(prevSIGIO); } @@ -1664,8 +1676,10 @@ xf86AddInputHandler(int fd, InputHandler { IHPtr ih = addInputHandler(fd, proc, data); - if (ih) + if (ih) { AddEnabledDevice(fd); + ih->is_input = TRUE; + } return ih; }