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

Index: hw/xfree86/common/xf86Events.c
================================================================================
--- hw/xfree86/common/xf86Events.c
+++ hw/xfree86/common/xf86Events.c
@@ -115,6 +115,7 @@
     InputHandlerProc	ihproc;
     pointer		data;
     Bool		enabled;
+    Bool		is_input;
     struct x_IHRec *	next;
 } IHRec, *IHPtr;
 
@@ -449,8 +450,12 @@
      * 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) {
           xf86ReleaseKeys(pInfo->dev);
@@ -492,8 +497,12 @@
             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);
 
@@ -549,8 +558,12 @@
       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);
   }
@@ -587,8 +600,10 @@
 {
     IHPtr ih = addInputHandler(fd, proc, data);
 
-    if (ih)
+    if (ih) {
         AddEnabledDevice(fd);
+	ih->is_input = TRUE;
+    }
     return ih;
 }
 
openSUSE Build Service is sponsored by