Commit graph

9716 commits

Author SHA1 Message Date
Evan Broder
8a18d18bb3 xfree86/modes: Be sure to only use new EDID for physical output dimensions
The EDID processing regards physical dimensions of 0mm x 0mm as
invalid. Previously the old values for height and width would be
preserved if none of the physical dimension specifications in the new
EDID were considered valid.

This will come up in particular if first a monitor is connected to an
output, and then a projector is connected. Since projectors generally
report physical dimensions of 0mm x 0mm, this would result in the
projector claiming to have the physical dimensions of the monitor.

Signed-off-by: Evan Broder <ebroder@mokafive.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 12b0f7df2c)
2011-03-04 13:44:35 -08:00
Adam Jackson
11bf10e22c xfree86: If the driver found modes on an output, don't add more
Inferring modes from sync ranges is only valid if the monitor says it's
valid.  If the monitor says it's valid, then we'll have already added
those modes during EDID block parse.  If it doesn't, then we should
believe it.

If there's no EDID for an output, but sync ranges from the config, we'll
still add default modes as normal.

Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit dc498b433f)
2011-03-04 13:05:34 -08:00
Jeremy Huddleston
8dd85e585a XQuartz: pbproxy: Protect against possible collision between Cocoa and X11 Cursor types
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 69a9171dbb)
2011-03-03 18:16:08 -08:00
Jeremy Huddleston
f71436014c XQuartz: Don't use deprecated CoreGraphics API on SL and Lion
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 0343aed1f0)
2011-03-03 18:16:08 -08:00
Jeremy Huddleston
a10323c74a XQuartz: RandR: Add RandR modes for the primary display in multi-monitor configs
We now support using RandR to set the resolution of the primary display (and
place a shielding window on other displays) in multi-monitor configurations.

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 8cf3348e90)
2011-03-03 18:16:07 -08:00
Jeremy Huddleston
3be0b136fa XQuartz: RandR: Provide an alert box when entering a RandR mode for the first time.
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 968652983f)
2011-03-03 18:16:07 -08:00
Jeremy Huddleston
ceaa2f438d XQuartz: RandR: Capture the display when switching modes with RandR
This will prevent native windows from resizing as we change resolutions.

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 13578b852b)
2011-03-03 18:16:07 -08:00
Michel Dänzer
7b3b7efe78 EXA/mixed: ModifyPixmapHeader pitch fixes. (bug #33929)
If there's a GPU copy and a non-zero devKind was passed in, set the GPU copy
pitch to that instead of to a possibly bogus value derived from the new width.
This is e.g. used by the radeon driver's drmmode_xf86crtc_resize hook, fixes
https://bugs.freedesktop.org/show_bug.cgi?id=33929 .

On the other hand, the system memory copy doesn't need the pitch to be aligned
beyond the PixmapBytePad of the width.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Cyril Brulebois <kibi@debian.org>
Tested-by: Cyril Brulebois <kibi@debian.org>
Reported-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Tested-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 31704510f4)
2011-02-25 17:36:12 -08:00
Jeremy Huddleston
0e253a9c86 XQuartz: Localization Updates
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit b17fc99cb9)
2011-02-24 20:07:07 -08:00
Jeremy Huddleston
3412f4799c XQuartz: Add LSApplicationCategoryType key to Info.plist
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 59850630fe)
2011-02-24 20:06:57 -08:00
Erkki Seppälä
8369467c20 record: avoid crash when calling RecordFlushReplyBuffer recursively
RecordFlushReplyBuffer can call itself recursively through
WriteClient->CallCallbacks->_CallCallbacks->RecordFlushAllContexts
when the recording client's buffer cannot be completely emptied in one
WriteClient. When a such a recursion occurs, it will not be broken out
of which results in segmentation fault when the stack is exhausted.

This patch adds a counter (a flag, really) that guards against this
situation, to break out of the recursion.

One alternative to this change would be to change _CallCallbacks to
check the corresponding counter before the callback loop, but that
might affect existing behavior, which may be relied upon.

Reviewed-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 0801afbd7c)
2011-02-24 20:05:18 -08:00
Adam Jackson
f60f586c64 xselinux: Fix GetDrawableContext
M_DRAWABLE_PIXMAP is the lookup mask to dixLookupDrawable, and _not_ the
type value in the drawable itself.

Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Eamon Walsh <ewalsh@tycho.nsa.gov>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit ac0a00a840)
2011-02-16 17:04:07 -08:00
Maarten Maathuis
0a4b0de9af exa: Only call driver FinishAccess hook if PrepareAccess hook succeeded.
Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit af87f6367e)
2011-02-07 10:06:50 -08:00
Jeremy Huddleston
ce83d1bd5a xorg-server 1.9.4
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-02-04 11:37:07 -08:00
Jeremy Huddleston
df12f4a4d9 xorg-server 1.9.3.902
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-01-30 17:07:25 -08:00
Jeremy Huddleston
79a367d6e3 XQuartz: Localization Updates
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 8c1f75a1d4)
2011-01-30 17:06:56 -08:00
Jeremy Huddleston
3396d237a5 XQuartz: Use the default signal handler
This allows better interaction with CrashTracer

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit effaf9459c)
2011-01-30 17:06:52 -08:00
Jeremy Huddleston
e7871a9512 XQuartz: Call RRScreenSizeNotify after handling externally-generated XP_EVENT_DISPLAY_CHANGED
We get an XP_EVENT_DISPLAY_CHANGED event when our display configuration is
changed.  If this change was caused by hotplugging a monitor or Mac Display
Preferences changes by the user, we need to call RRScreenSizeNotify in order
to ensure new connections get the correct screen size.

http://xquartz.macosforge.org/trac/ticket/460

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 418bb57a39)
2011-01-30 17:06:43 -08:00
Jeremy Huddleston
824ebda72a XQuartz: Bump version string to 2.6.1
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 6f52b10b9e)
2011-01-30 17:06:34 -08:00
Oliver McFadden
188148e1cc dix: GetPointerEvents: added valuator range checking
Button events may be sent with no valuators (e.g. to simply indicate
ButtonPress or ButtonRelease without any coordinates); when this happens
the server would read uninitialized memory.

==9999== Conditional jump or move depends on uninitialised value(s)
==9999==    at 0x48E87E8: pixman_f_transform_point (in /usr/lib/libpixman-1.so.0.18.2)
==9999==  Uninitialised value was created by a stack allocation
==9999==    at 0x37524: GetPointerEvents (getevents.c:1074)
==9999==
==9999== Conditional jump or move depends on uninitialised value(s)
==9999==    at 0x496D074: lround (s_lround.c:40)
==9999==    by 0x3773B: GetPointerEvents (getevents.c:1048)
==9999==    by 0x683BB: xf86PostButtonEventP (xf86Xinput.c:1162)
==9999==    by 0x6853B: xf86PostButtonEvent (xf86Xinput.c:1126)
==9999==    by 0x5779037: process_state (multitouch.c:321)      (xf86-input-mtev)
==9999==    by 0x577908F: read_input (multitouch.c:331))        (xf86-input-mtev)
==9999==    by 0x66B4F: xf86SigioReadInput (xf86Events.c:298)
==9999==    by 0x112697: xf86SIGIO (sigio.c:118)
==9999==    by 0x4A12B2F: ??? (sigrestorer.S:51)
==9999==  Uninitialised value was created by a stack allocation
==9999==    at 0x37524: GetPointerEvents (getevents.c:1074)

Signed-off-by: Oliver McFadden <oliver.mcfadden@nokia.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-01-24 22:21:14 -08:00
Pauli Nieminen
089a510dc9 mi: Fix the debug message
Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
(cherry picked from commit bf48082f30)
2011-01-12 10:58:40 +10:00
Pauli Nieminen
b22415b0d5 udev: Fix removing of the wake up handler
RemoveBlockAndWakeupHandlers requires caller to pass same block data
parameter as for RegisterBlockAndWakeupHandlers.

Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
(cherry picked from commit 3e1455505a)
2011-01-12 10:57:47 +10:00
Jeremy Huddleston
6451a3ff94 xorg-server 1.9.3.901 (1.9.4 RC1)
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-01-07 17:21:38 -08:00
Jeremy Huddleston
c11f9bfc08 XQuartz: Update copyright dates in bundle's plist
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-01-07 17:21:33 -08:00
Zhao Yakui
3d12e6d25a edid: Fix incorrect timings for VIC61
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Anssi Hannula <anssi.hannula@iki.fi>
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
(cherry picked from commit 86ca434a1a)
2011-01-06 15:16:58 -05:00
Adam Jackson
9213c2525a x86emu: Fix more mis-decoding of the data prefix
cc2c73ddcb4370a7c3ad439cda4da825156c26c9's three-cent titanium tax
doesn't go too far enough.  Fix the rest of the call and jmp
instructions to handle the data prefix correctly.

Reference: Intel 64 and IA-32 Architectures Software Developer's Manual
Volume 2A: Instruction Set Reference, A-M

http://www.intel.com/Assets/PDF/manual/253666.pdf

Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit bb18f27715)
2011-01-06 15:16:52 -05:00
Pauli Nieminen
dc24f90ddc os: Fix a memory leak
Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
(cherry picked from commit 617b7d2211)
2011-01-06 15:16:28 -05:00
Pauli Nieminen
a87a5b7e83 render: Don't filter 0 return from GetTimeInMillis
In animate cursor block handler code assumes GetTimeInMillis returns
always nonzero value. This isn't true when time wraps around.

To prevent any problems in case GetTimeInMillis would return zero use
activeDevice variable to track if we have received time.

Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
(cherry picked from commit aa8cea953d)
2011-01-06 15:15:53 -05:00
Ville Syrjälä
aec278eb65 xfree86/modes: Take rotation into account when checking mode size
Assume that a mode can be used in either landscape or portrait
orientation. I suppose the correct thing to do would be to
collect all the supported rotations from the CRTCs that can be used
with a specific output, but that information doesn't seem to be
readily available when these checks are done. So just assume that
either orientation is fine.

Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 2e781457d4)
2011-01-06 15:15:24 -05:00
Ville Syrjälä
005b465048 dri2: Don't page flip when the window size doesn't match the pixmap size
If the drawable size doesn't match the pixmap size page flipping should
not be allowed.

If the window is larger than the pixmap, page flipping might need to
reposition the CRTC somewhere in the middle of the pixmap. I didn't
spot any code that would handle that at least in the intel driver.

Also the root pixmap could then move to some negative screen
coordinates. Not sure if all bits of code could handle that. Perhaps
when composite is enabled screen_x/y would make it work, but without
composite there's no way that it would work AFAICS.

Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
(cherry picked from commit 0ce25fd790)
2011-01-06 15:15:17 -05:00
Daniel Stone
651a96982f GetTimeInMillis: Use CLOCK_MONOTONIC_COARSE where available
On some systems, using CLOCK_MONOTONIC forces a readback of HPET or some
similarly expensive timer.  CLOCK_MONOTONIC_COARSE can alleviate this,
at the cost of negligibly-reduced resolution, so prefer that where we
can.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Reviewed-by: Tiago Vignatti <tiago.vignatti@nokia.com>
(cherry picked from commit 44adb31bfe)
2011-01-06 15:15:08 -05:00
Tiago Vignatti
08db658a19 randr: check for virtual size limits before set crtc
Return a error if the screen is configured to an invalid size.

Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit d1107918d4)
2011-01-06 15:14:35 -05:00
Michel Dänzer
a3c7b86472 EXA: Pad size of system memory copy for 1x1 pixmaps (bug #32803).
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=32803 .

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 6358a60065)
2011-01-06 11:58:00 -08:00
James Jones
93b75c7ce8 Add and use SERVER_SYNC_*_VERSION
Most extensions have a version defined
in the protocol headers, and also in the
server's protocol-versions.h.  The latter
defines which version the server advertises
support for.  Sync wasn't included in
protocol-versions.h, and was advertising
support for whatever was in the protocol
headers the server was built against.

Signed-off-by: James Jones <jajones@nvidia.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 27593eea7e)
2010-12-30 18:06:55 -08:00
Michel Dänzer
295a893aa3 EXA: Fix crash with fill using 1x1 tile of depth < 8 (bug #24703).
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=24703 .

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit e06fa80400)
2010-12-23 14:14:25 -08:00
Jörn Horstmann
d819ff1cb5 Add EDID quirk for HP Compaq nc8430.
Like some other LPL panels, this one reports the vertical size in cm rather
than mm.
Patch taken from Launchpad bug #380009 <https://launchpad.net/bugs/380009>

X.Org Bug 28414 <https://bugs.freedesktop.org/show_bug.cgi?id=28414>

Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 4b88c7be8d)
2010-12-21 10:51:19 -08:00
Christopher James Halse Rogers
11696bb133 IDLETIME: Fix edge-case in IdleTimeBlockHandler
Ensure that if we're called exactly on the threshold of a
NegativeTransition trigger that we reshedule to pick up
an idle time over the threshold.

Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit a2e67a6412)
2010-12-21 10:51:04 -08:00
Christopher James Halse Rogers
625cb4c142 Xext: Fix edge case with {Positive, Negative}Transition triggers.
The {Positive,Negative}Transition triggers only fire when the counter
goes from strictly {below,above} the threshold.  If
SyncComputeBracketValues gets called exactly at this threshold we may update
the bracket values so that the counter is not updated past the threshold.

Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit b55bf24858)
2010-12-21 10:50:51 -08:00
Peter Hutterer
a2c674b75d test: reduce range of byte-padding macro tests.
Byte padding and conversion is interesting for the rage of 0-8 bytes, and
then interesting towards the end of the valid range (INT_MAX - 7 and INT_MAX
- 3).

Note: this changes the upper range for pad_to_int32() and bytes_to_int32()
from the previous (INT_MAX - 4) to (INT_MAX - 3).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit d435e1ecb8)
2010-12-15 13:07:01 +10:00
Peter Hutterer
8d0866559d test: compare byte padding macros against the expected bytes.
We calculate the expected bytes for each value, let's use it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Julien Cristau <jcristau@debian.org>
(cherry picked from commit f49ee9074a)
2010-12-15 13:06:59 +10:00
Eoghan Sherry
97f40a17af Xi: Fix master button update when slave buttons are mapped. #24887
It is currently assumed that an event button delieved to a master device
corresponds to the slave button states. However, the event button is a
logical (mapped) slave button and slave button states correspond to
physical (unmapped) slave buttons. This leads to incorrect update of the
master button state and incorrect events devlivered to clients. Fix the
situation by taking the slave button map into account when querying a
slave button state.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=24887

Signed-off-by: Eoghan Sherry <ejsherry@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 36b614dedf)
2010-12-15 13:05:16 +10:00
Peter Hutterer
faecab3b13 mi: handle DGA subtypes when determining the master device.
The subtype in the DGA event is the core type and all ET_ event types (where
applicable) are identical to the core types. Thus the switch statement below
will work as required and assign the right master device.

Fixes a crasher bug on keyboard devices with valuators. If a device sends a
motion event while grabbed and a DGA client is active (but has not selected
input through DGA), the valuator event is posted through the VCK and
eventually results in a NULL-pointer dereference on dev->valuator.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 31ab9f8860)
2010-12-15 13:04:56 +10:00
Jeremy Huddleston
e1e37ef7eb XQuartz GL: Add $(GL_CFLAGS) to CFLAGS
This fixes a build failure I found on tinderbox.

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit f641e4b34a)
2010-12-14 17:55:19 -08:00
Jeremy Huddleston
f7d60dae09 XQuartz: Just NSBeep() for XBell()
The CoreAudio path uses deprecated API and has reported crashes that
aren't worth fixing (4e8bf12b13 fixed
one and introduced another).  NSBeep() does the job just fine.

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 883039e07b)
2010-12-13 12:10:02 -08:00
Jeremy Huddleston
4b8d43033b Version bumped to 1.9.3
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2010-12-13 11:45:02 -08:00
Jeremy Huddleston
07b114eb9c Version bumped to 1.9.2.902 (1.9.3 RC2)
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2010-12-03 21:56:54 -08:00
Jeremy Huddleston
47d474ee8f XQuartz: RandR: Fix mode changing for multi-monitor configurations.
This just fixes the regression whereby we couldn't switch between the legacy
fullscreen mode and rootless on multi-monitor configurations.  This was
happening because ref wasn't being set in these cases (since we don't ever
actually change CG modes), so we failed a CFEqual.  Setting the references
fixes this regression and places us one step closer to more mode RandR
mode switching in multi-monitor configurations.

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 714b68d9e5)
2010-12-03 21:56:26 -08:00
Jeremy Huddleston
4c3aaef3ff XQuartz: Cleanup some compiler warnings
Mark __crashreporter_info__ as __attribute__((__used__))

Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit 14f00449eb)
2010-12-03 21:56:20 -08:00
Jeremy Huddleston
438dd53e4b XQuartz: Disable the Mac OS X screensaver when in full screen mode
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
(cherry picked from commit ca431371a2)
2010-12-03 21:56:06 -08:00
Nicolas Peninguy
18f21d7c8a Fix Xdmx and Xephyr build when DTrace support is enabled
This fixes the following build errors when DTrace is enabled
(--with-dtrace):

  CCLD   Xdmx
/usr/bin/ld: ../../os/os.O: undefined reference to symbol 'dladdr@@GLIBC_2.2.5'
/usr/bin/ld: note: 'dladdr@@GLIBC_2.2.5' is defined in DSO /lib64/libdl.so.2 so try adding it to the linker command line

  CCLD   Xephyr
../../../os/os.O: In function `TimerForce':
/home/nico/work/xserver/os/WaitFor.c:481: multiple definition of `TimerForce'
../../../os/os.O:/home/nico/work/xserver/os/WaitFor.c:481: first defined here

Signed-off-by: Nicolas Peninguy <nico@lostgeeks.org>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 311cad3315)
2010-12-03 16:21:41 -08:00