RRCrtcDestroyResource and RROutputDestroyResource had matching
bugs that would overwrite memory past the end of the storage
of the crtc or output arrays. Oops.
Now that resources can be created during server initialization, make sure
the crtc, output and mode resource types are created before attempting to
create associated resources.
This patch tracks the protocol changes which introduce more complex
semantics for RandR output properties including pending and valid value
information.
To allow RandR objects to be created before the screen object exists,
the resource types must be registered with the resource database.
A driver wishing to create RandR objects must call RRInit before doing so.
Also, fix a segfault when setting Output data before it is associated with a
screen.
xf86 drivers need to create RandR object in the PreInit stage,
before the ScreenRec is allocated. Changing the RandR DIX code
to permit this required the addition of functions that later associate the
objects with the related screen.
An additional change is that modes are now global, and no longer associated
with a specific screen. This change actually makes mode management cleaner
as there is no more per-screen list of modes to deal with.
This changes the RandR 1.2 ABI/API for drivers.
Add function to keep pointer within valid crtc areas.
Finish event delivery and swapping code.
Separate configuration from layout changes to send correct events.
Output options and mode origins both affected driver ABI. memmove mistakes
were causing 'Freeing resource which isn't there' messages.
Prune unused non-user defined modes from available list now.
Provide a Xinerama implementation when DIX version isn't enabled. This
version exposes each crtc as a separate 'screen' and reports the size of
that patch. The extension also sends ConfigureNotify events to the root
window whenever crtcs change so that applications will re-fetch xinerama
information. This actually works for metacity.
RandR is getting too big to live in one file; split into one file per object
type (crtc, mode, screen), leaving the rest of the code in randr.c.
Code is slowly approaching the point where it will drop-in as a replacement
for the old 1.0 implementation.
These changes clean up minor errors to make it possible to list the
available modes for a monitor using legacy APIs in both the X server DDX and
RandR protocol. Setting modes is untested, so it probably doesn't work.
ia64 specific functions + defines.
Still uses /proc interface for some scaning code.
Based on code from Egbert Eich <eich@freedesktop.org>.
(cherry picked from caaa113acf commit)
Additional scanning code uses the /sys interface of 2.6 kernels.
Cleaned up the use of tags and already split domain/bus/dev/fn.
(cherry picked from 5afc6c1a14 commit)
'else if' is not very valid, plus the logic is kind of broken, so just
move it outside the ifdef in the first place.
(cherry picked from b6d7b537ed commit)
Solaris headers are very literal - if you ask for POSIX_C_SOURCE 199309L,
they limit to only the functions in that standard and no more, unless you
also specify __EXTENSIONS__ to allow functions beyond the standard base.
(cherry picked from a2434ec5f3 commit)
We don't actually need to get the CPU clock ID, which means we don't need
the monotonic_usable test. Since there's now only one branch, the
compiler will treat that as likely, so we don't need xproto 7.0.9 anymore.
The fallthrough to gettimeofday() is preserved.
(cherry picked from 004d00e668 commit)
Add support for CLOCK_MONOTONIC from clock_gettime, and use that in
GetTimeInMillis() if available, falling back to the old gettimeofday()
implementation.
This is _slightly_ faster on some 64-bit architectures, and _slightly_
slower on others (though barely measurable).
(cherry picked from d285833290 commit)
Only rewind time when we're more than (original delta + 250ms) away from
executing the timer.
When we're walking the timer list, use a goto to iterate all of them from
the start again, since timers may drop out of the list.
Don't bother trying to be smart in TimerSet, we'll pick it up in
WaitForSomething anyway.
(cherry picked from 51a06b3c44 commit)