aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/packages/rpm/sle11/SOURCES/bug-197858_dpms.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/packages/rpm/sle11/SOURCES/bug-197858_dpms.diff')
-rw-r--r--contrib/packages/rpm/sle11/SOURCES/bug-197858_dpms.diff105
1 files changed, 105 insertions, 0 deletions
diff --git a/contrib/packages/rpm/sle11/SOURCES/bug-197858_dpms.diff b/contrib/packages/rpm/sle11/SOURCES/bug-197858_dpms.diff
new file mode 100644
index 00000000..945b2802
--- /dev/null
+++ b/contrib/packages/rpm/sle11/SOURCES/bug-197858_dpms.diff
@@ -0,0 +1,105 @@
+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;
+ }
+
+--- os/WaitFor.c
++++ os/WaitFor.c
+@@ -142,6 +142,7 @@
+ * 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)
+@@ -279,10 +280,9 @@
+ if (expired)
+ return 0;
+ }
+- }
++ }
+ else
+- {
+- fd_set tmp_set;
++ {
+
+ if (*checkForInput[0] == *checkForInput[1]) {
+ if (timers)
+@@ -317,6 +317,12 @@
+ QueueWorkProc(EstablishNewConnections, NULL,
+ (pointer)&LastSelectMask);
+
++#ifdef DPMSExtension
++ XFD_ANDSET(&tmp_set, &devicesReadable, &EnabledDevices);
++ if (XFD_ANYSET (&tmp_set) && (DPMSPowerLevel != DPMSModeOn))
++ DPMSSet(serverClient, DPMSModeOn);
++#endif
++
+ if (XFD_ANYSET (&devicesReadable) || XFD_ANYSET (&clientsReadable))
+ break;
+ /* check here for DDXes that queue events during Block/Wakeup */