File bug-197858_dpms.diff of Package xorg-x11-server

Index: hw/xfree86/common/xf86Events.c
===================================================================
--- hw/xfree86/common/xf86Events.c.orig
+++ hw/xfree86/common/xf86Events.c
@@ -115,6 +115,7 @@ typedef struct x_IHRec {
     InputHandlerProc ihproc;
     pointer data;
     Bool enabled;
+    Bool is_input;
     struct x_IHRec *next;
 } IHRec, *IHPtr;
 
@@ -445,9 +446,13 @@ xf86VTSwitch(void)
          * Keep the order: Disable Device > LeaveVT
          *                        EnterVT > EnableDevice
          */
-        for (ih = InputHandlers; ih; ih = ih->next)
+        for (ih = InputHandlers; ih; ih = ih->next) {
+          if (ih->is_input)
             xf86DisableInputHandler(ih);
-        for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
+          else
+           xf86DisableGeneralHandler(ih);
+        }
+	for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) {
             if (pInfo->dev) {
                 xf86ReleaseKeys(pInfo->dev);
                 ProcessInputEvents();
@@ -486,8 +491,12 @@ xf86VTSwitch(void)
                     EnableDevice(pInfo->dev, TRUE);
                 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);
+	    }
 
             xf86UnblockSIGIO(prevSIGIO);
 
@@ -542,8 +551,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);
+	}
 
         xf86UnblockSIGIO(prevSIGIO);
     }
@@ -579,8 +592,10 @@ xf86AddInputHandler(int fd, InputHandler
 {
     IHPtr ih = addInputHandler(fd, proc, data);
 
-    if (ih)
+    if (ih) {
         AddEnabledDevice(fd);
+	ih->is_input = TRUE;
+    }
     return ih;
 }