diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 799c25f..84bd263 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -9,7 +9,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.3.0.0 -Release: 12%{?dist} +Release: 13%{?dist} URL: http://www.x.org License: MIT/X11 Group: User Interface/X @@ -65,6 +65,7 @@ Patch2006: xserver-1.3.0-less-randr-fakerama.patch Patch2007: xserver-1.3.0-randr12-config-hack.patch Patch2008: xserver-1.3.0-randrama-no-zero-screens.patch Patch2009: xserver-1.3.0-arm-iopl.patch +Patch2010: xserver-1.3.0-idletime.patch # assorted PCI layer shenanigans. oh the pain. Patch2500: xorg-x11-server-1.2.99-unbreak-domain.patch @@ -319,6 +320,7 @@ Xserver source code needed to build VNC server (Xvnc) %patch2007 -p1 -b .randrconfig %patch2008 -p1 -b .randrama-zero-screens %patch2009 -p1 -b .arm +%patch2010 -p1 -b .idletime %patch2500 -p1 -b .unbreak-domains %patch2501 -p1 -b .pci-bus-count @@ -329,6 +331,12 @@ Xserver source code needed to build VNC server (Xvnc) %build +%if %{fedora} == 7 +%define default_font_path "unix/:7100,catalogue:/etc/X11/fontpath.d,built-ins" +%else +%define default_font_path "catalogue:/etc/X11/fontpath.d,built-ins" +%endif + # --with-rgb-path should be superfluous now ? # --with-pie ? aclocal ; automake -a ; autoconf @@ -343,7 +351,7 @@ aclocal ; automake -a ; autoconf --enable-xcsecurity \ --enable-xevie \ --with-int10=x86emu \ - --with-default-font-path="catalogue:/etc/X11/fontpath.d,built-ins" \ + --with-default-font-path=%{default_font_path} \ --with-module-dir=%{moduledir} \ --with-os-name="Fedora Core 7" \ --with-os-vendor="Red Hat, Inc." \ @@ -588,6 +596,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Jul 02 2007 Adam Jackson 1.3.0.0-13 +- Add IDLETIME sync counter for great powersaving justice. +- Conditionalise default font path for F7 spec compatibility. + * Wed Jun 27 2007 Adam Jackson 1.3.0.0-12 - Tweak %%post Xorg slightly to not demolish ModulePath lines installed by the nvidia driver. (#244359) diff --git a/xserver-1.3.0-idletime.patch b/xserver-1.3.0-idletime.patch new file mode 100644 index 0000000..ca32b67 --- /dev/null +++ b/xserver-1.3.0-idletime.patch @@ -0,0 +1,152 @@ +commit 7e2c935920cafadbd87c351f1a3239932864fb90 +Author: Fredrik Höglund +Date: Fri May 18 20:06:14 2007 +0200 + + Add a new IDLETIME system sync counter. + + This counter exposes the time in milliseconds since the last + input event. Clients such as screen savers and power managers + can set an alarm on this counter to find out when the idle time + reaches a certain value, without having to poll the server. + +diff --git a/Xext/sync.c b/Xext/sync.c +index c5441a1..6fc2dcc 100644 +--- a/Xext/sync.c ++++ b/Xext/sync.c +@@ -243,6 +243,11 @@ SyncInitServerTime( + void + ); + ++static void ++SyncInitIdleTime( ++ void ++); ++ + static void + SyncResetProc( + ExtensionEntry * /* extEntry */ +@@ -2400,6 +2405,7 @@ SyncExtensionInit(INITARGS) + * because there is always a servertime counter. + */ + SyncInitServerTime(); ++ SyncInitIdleTime(); + + #ifdef DEBUG + fprintf(stderr, "Sync Extension %d.%d\n", +@@ -2520,3 +2526,116 @@ SyncInitServerTime(void) + ServertimeQueryValue, ServertimeBracketValues); + pnext_time = NULL; + } ++ ++ ++ ++/* ++ * IDLETIME implementation ++ */ ++ ++static pointer IdleTimeCounter; ++static XSyncValue *pIdleTimeValueLess; ++static XSyncValue *pIdleTimeValueGreater; ++ ++static void ++IdleTimeQueryValue (pointer pCounter, CARD64 *pValue_return) ++{ ++ CARD32 idle = GetTimeInMillis() - lastDeviceEventTime.milliseconds; ++ XSyncIntsToValue (pValue_return, idle, 0); ++} ++ ++static void ++IdleTimeBlockHandler (pointer env, ++ struct timeval **wt, ++ pointer LastSelectMask) ++{ ++ XSyncValue idle; ++ ++ if (!pIdleTimeValueLess && !pIdleTimeValueGreater) ++ return; ++ ++ IdleTimeQueryValue (NULL, &idle); ++ ++ if (pIdleTimeValueLess && ++ XSyncValueLessOrEqual (idle, *pIdleTimeValueLess)) ++ { ++ AdjustWaitForDelay (wt, 0); ++ } ++ else if (pIdleTimeValueGreater) ++ { ++ unsigned long timeout = 0; ++ ++ if (XSyncValueLessThan (idle, *pIdleTimeValueGreater)) ++ { ++ XSyncValue value; ++ Bool overflow; ++ ++ XSyncValueSubtract (&value, *pIdleTimeValueGreater, ++ idle, &overflow); ++ timeout = XSyncValueLow32 (value); ++ } ++ ++ AdjustWaitForDelay (wt, timeout); ++ } ++} ++ ++static void ++IdleTimeWakeupHandler (pointer env, ++ int rc, ++ pointer LastSelectMask) ++{ ++ XSyncValue idle; ++ ++ if (!pIdleTimeValueLess && !pIdleTimeValueGreater) ++ return; ++ ++ IdleTimeQueryValue (NULL, &idle); ++ ++ if ((pIdleTimeValueGreater && ++ XSyncValueGreaterThan (idle, *pIdleTimeValueGreater)) || ++ (pIdleTimeValueLess && XSyncValueLessThan (idle, *pIdleTimeValueLess))) ++ { ++ SyncChangeCounter (IdleTimeCounter, idle); ++ } ++} ++ ++static void ++IdleTimeBracketValues (pointer pCounter, ++ CARD64 *pbracket_less, ++ CARD64 *pbracket_greater) ++{ ++ Bool registered = (pIdleTimeValueLess || pIdleTimeValueGreater); ++ ++ if (registered && !pbracket_less && !pbracket_greater) ++ { ++ RemoveBlockAndWakeupHandlers(IdleTimeBlockHandler, ++ IdleTimeWakeupHandler, ++ NULL); ++ } ++ else if (!registered && (pbracket_less || pbracket_greater)) ++ { ++ RegisterBlockAndWakeupHandlers(IdleTimeBlockHandler, ++ IdleTimeWakeupHandler, ++ NULL); ++ } ++ ++ pIdleTimeValueGreater = pbracket_greater; ++ pIdleTimeValueLess = pbracket_less; ++} ++ ++static void ++SyncInitIdleTime (void) ++{ ++ CARD64 resolution; ++ XSyncValue idle; ++ ++ IdleTimeQueryValue (NULL, &idle); ++ XSyncIntToValue (&resolution, 4); ++ ++ IdleTimeCounter = SyncCreateSystemCounter ("IDLETIME", idle, resolution, ++ XSyncCounterUnrestricted, ++ IdleTimeQueryValue, ++ IdleTimeBracketValues); ++ ++ pIdleTimeValueLess = pIdleTimeValueGreater = NULL; ++}