ChangeLog | 152 +++++++++++++++++++++++++++++++++++ configure.ac | 4 debian/changelog | 10 ++ debian/control | 23 +++-- debian/rules | 11 +- debian/xserver-common.install | 2 debian/xserver-xorg-core.install | 1 debian/xserver-xorg-core.postinst.in | 22 +++++ debian/xserver-xorg-core.postrm.in | 13 ++ debian/xserver-xorg-core.preinst.in | 21 ++++ dix/getevents.c | 6 - glx/Makefile.am | 6 + hw/xfree86/ddc/interpret_edid.c | 41 +++++++++ hw/xfree86/dixmods/extmod/xf86dga.c | 7 + hw/xfree86/int10/helper_exec.c | 15 --- hw/xfree86/modes/xf86Crtc.c | 3 mfb/mfbscrinit.c | 1 xkb/XKBMisc.c | 13 ++ xkb/xkb.c | 17 +-- xkb/xkbUtils.c | 39 +++++++- 20 files changed, 349 insertions(+), 58 deletions(-)
New commits: commit 67dcdfd59390d8f4c49eed0224c5a5c8684bec05 Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sat Oct 11 03:49:19 2008 +0200 Also remove /etc/X11/xserver if it's empty diff --git a/debian/xserver-xorg-core.postinst.in b/debian/xserver-xorg-core.postinst.in index fca5608..d047bb1 100644 --- a/debian/xserver-xorg-core.postinst.in +++ b/debian/xserver-xorg-core.postinst.in @@ -11,6 +11,7 @@ case "$1" in configure) if dpkg --compare-versions "$2" lt-nl 2:1.5.2-1; then remove_conffile_commit /etc/X11/xserver/SecurityPolicy + rmdir /etc/X11/xserver || true fi esac commit 6e9638e4566b041975f6a2a209c0bd8bd9064add Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sat Oct 11 03:30:51 2008 +0200 Remove obsolete conffile /etc/X11/xserver/SecurityPolicy on upgrades. diff --git a/debian/changelog b/debian/changelog index 868a763..8f99cb6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,7 @@ xorg-server (2:1.5.2-1) UNRELEASED; urgency=low /usr/lib/xorg/protocol.txt and the Xserver(1) manpage for now. * debian/rules: Use filter instead of findstring for noopt in DEB_BUILD_OPTIONS. + * Remove obsolete conffile /etc/X11/xserver/SecurityPolicy on upgrades. -- Julien Cristau <[EMAIL PROTECTED]> Thu, 25 Sep 2008 18:50:19 +0200 diff --git a/debian/xserver-xorg-core.postinst.in b/debian/xserver-xorg-core.postinst.in new file mode 100644 index 0000000..fca5608 --- /dev/null +++ b/debian/xserver-xorg-core.postinst.in @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +THIS_PACKAGE=xserver-xorg-core +THIS_SCRIPT=postinst + +#INCLUDE_SHELL_LIB# + +case "$1" in + configure) + if dpkg --compare-versions "$2" lt-nl 2:1.5.2-1; then + remove_conffile_commit /etc/X11/xserver/SecurityPolicy + fi +esac + +#DEBHELPER# + +exit 0 + +# vim:set ai et sw=2 ts=2 tw=80: diff --git a/debian/xserver-xorg-core.postrm.in b/debian/xserver-xorg-core.postrm.in index 7d4be1b..19bec1e 100644 --- a/debian/xserver-xorg-core.postrm.in +++ b/debian/xserver-xorg-core.postrm.in @@ -7,9 +7,18 @@ THIS_SCRIPT=postrm #INCLUDE_SHELL_LIB# -if [ "$1" = "purge" ]; then +case "$1" in +abort-install|abort-upgrade) + if dpkg --compare-versions "$2" lt-nl "2:1.5.2-1"; then + remove_conffile_rollback /etc/X11/xserver/SecurityPolicy + fi + ;; +purge) rm /var/log/Xorg.*.log || true rm /var/log/Xorg.*.log.old || true -fi + ;; +esac #DEBHELPER# + +# vim:set ai et sts=2 sw=2 tw=0: diff --git a/debian/xserver-xorg-core.preinst.in b/debian/xserver-xorg-core.preinst.in new file mode 100644 index 0000000..c1b84a2 --- /dev/null +++ b/debian/xserver-xorg-core.preinst.in @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +THIS_PACKAGE=xserver-xorg-core +THIS_SCRIPT=preinst + +#INCLUDE_SHELL_LIB# + +case "$1" in +upgrade|install) + if dpkg --compare-versions "$2" lt-nl 2:1.5.2-1; then + remove_conffile_lookup xserver-xorg-core /etc/X11/xserver/SecurityPolicy + fi +esac + +#DEBHELPER# + +exit 0 + +# vim:set ai et sw=2 ts=2 tw=80: commit 2ac3a730aa1ab59e0ef74d2393722268862a0a0c Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sat Oct 11 02:55:51 2008 +0200 debian/rules: Use filter instead of findstring for noopt in DEB_BUILD_OPTIONS. diff --git a/debian/changelog b/debian/changelog index be877d1..868a763 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ xorg-server (2:1.5.2-1) UNRELEASED; urgency=low it for Xprint. * Re-introduce the xserver-common package, containing /usr/lib/xorg/protocol.txt and the Xserver(1) manpage for now. + * debian/rules: Use filter instead of findstring for noopt in + DEB_BUILD_OPTIONS. -- Julien Cristau <[EMAIL PROTECTED]> Thu, 25 Sep 2008 18:50:19 +0200 diff --git a/debian/rules b/debian/rules index ee13076..0c808dc 100755 --- a/debian/rules +++ b/debian/rules @@ -10,7 +10,7 @@ include debian/xsfbs/xsfbs.mk CFLAGS = -Wall -g -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) +ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 commit 735a92cebaf157b0fd31d7892c259d2d5075eef0 Author: Julien Cristau <[EMAIL PROTECTED]> Date: Fri Oct 10 23:51:14 2008 +0200 update changelogs diff --git a/ChangeLog b/ChangeLog index fef4b74..5b7377f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,155 @@ +commit 6dcfa994b0777bf0cabeb71672f13e650b340817 +Author: Adam Jackson <[EMAIL PROTECTED]> +Date: Fri Oct 10 15:26:32 2008 -0400 + + xserver 1.5.2 + +commit 75504517a30f1bdd593c2a32af81084b59b398a5 +Author: Adam Jackson <[EMAIL PROTECTED]> +Date: Fri Oct 10 13:41:50 2008 -0400 + + EDID: Catch monitors that encode aspect ratio for physical size. + + This is not legal in either EDID 1.3 or 1.4, but hey, when did a little + thing like legality stop anyone. + (cherry picked from commit 0660dd9d7009147c395b9ea904539f76f55b9a7f) + +commit b595b65e54b1e15fbce872fe3719da14cfae5b92 +Author: Adam Jackson <[EMAIL PROTECTED]> +Date: Thu Oct 9 14:53:29 2008 -0400 + + Revert "Array-index based devPrivates implementation." + + This reverts commit 8ef37c194fa08d3911095299413a42a01162b078. + +commit ca659813a81074cae55ffec51f923c658480b618 +Author: Julien Cristau <[EMAIL PROTECTED]> +Date: Wed Oct 8 19:46:50 2008 +0200 + + Fix GKVE with key_code > 255 + + Move the keycode validation checks before use. + +commit 8337c9aa3d2009eea801a84b3a65272e03e65e1a +Author: Luc Verhaegen <[EMAIL PROTECTED]> +Date: Wed Oct 8 14:55:29 2008 +0200 + + DGA: Fix ProcXF86DGASetViewPort for missing support in driver. + + Fixes a segfault when trying to activate a DGA mode without checking + whether DGA modesetting is at all possible. + (cherry picked from commit 1feb69eb63e6739ff5db255ad529e84adf941a10) + +commit 4e6cbd323854709ae00c44108c93ab6596151de2 +Author: Zhenyu Wang <[EMAIL PROTECTED]> +Date: Wed Oct 8 13:33:55 2008 +0800 + + Check nextEnabledOutput()'s return in bestModeForAspect() + + In case no enabled outputs, we will reference wrong index of + output array. + (cherry picked from commit 56c615368c5a8e7acb0398434c2c68578626aa38) + +commit 43e3af9cac2e9fd613a61a870bfe00f4782a368d +Author: Adam Jackson <[EMAIL PROTECTED]> +Date: Tue Oct 7 13:41:25 2008 -0400 + + int10: Fix a nasty memory leak. + (cherry picked from commit 94919480d8bb66e1807b4fe87b8f326ef6e012c6) + +commit 00ac80a0c408106158bf258b6da8350611fbfe84 +Author: Adam Jackson <[EMAIL PROTECTED]> +Date: Tue Oct 7 13:39:10 2008 -0400 + + int10: Don't warn when scanning for devices we don't have. + + Some BIOSes (hi XGI!) will attempt to enumerate the PCI bus by asking + for the config space of every possible device number. This despite + perfectly functional BIOS methods to enumerate the bus exactly. + (cherry picked from commit a57b2f172c1291f22f7ba2780c1b2f55e353c3e9) + +commit c6ce2f6b3fe12e65b0e8a75cc1bc0a21875e14e3 +Author: Adam Jackson <[EMAIL PROTECTED]> +Date: Tue Oct 7 13:38:12 2008 -0400 + + int10: Remove useless check. + + If you have more than one PCI device with the same d/b/d/f, you're + already in trouble. + (cherry picked from commit a65e36a873cd1ba9896cd0f9a3e94dd933666005) + +commit 8ef37c194fa08d3911095299413a42a01162b078 +Author: Eamon Walsh <[EMAIL PROTECTED]> +Date: Fri Sep 12 19:11:53 2008 -0400 + + Array-index based devPrivates implementation. + + Note: DevPrivateKey is now pointer-to-int, which means + each key now needs to point to some global storage of + size at least sizeof(int). + + (cherry picked from commit b6ab114212c0e4c3346ceb5b207f14c526ab81e7) + +commit e88df87851232d6b6c8da5fff802b33f5275b050 +Author: Peter Hutterer <[EMAIL PROTECTED]> +Date: Mon Sep 22 11:10:46 2008 +0930 + + xkb: squash canonical types into explicit ones on core reconstruction. + + If we update key types from core, and groups 2 - n have a canonical type but + the same symbols as the explicit type of group 1, assume that it was a core + sym duplication according to Section 12.4 of the XKB Protocol Spec. + Ignore the canonical types and pretend there's only one group for the key - + with the explicit key type. + + The protocol spec does not cover this case, so we have to guess here. + (cherry picked from commit 30c3c13f1030268aaa6a3598d538fafd0592d77a) + +commit be3b3cb970d040f0db4bead018c338012547334f +Author: Peter Hutterer <[EMAIL PROTECTED]> +Date: Fri Sep 19 18:27:24 2008 +0930 + + xkb: fix core keyboard map generation. #14373 + + According to Section 12.4 of the XKB Protocol Spec, if a key only has a single + group but the keyboard has multiple groups defined, the core description of + the key is a duplication of the single group across all symbols. i.e. + G1L1 G1L2 G1L1 G1L2 G1L3 G1L4 G1L3 G1L4 + + The previous code generated G1L1 G1L2 G1L3 G1L4 G1L3 G1L4, leading to + "invented" groups when the process is reversed. + + Note that this creates wrong key types on reconstruction from core to xkb, + i.e. any single-group key with a key type that is not one of the canonical + four (Sec 12.2.3), will get the assigned type on group 1, and a canonical type + for the other gruops. + + X.Org Bug 14373 <http://bugs.freedesktop.org/show_bug.cgi?id=14373> + (cherry picked from commit ae986d1c73d2f720bd0309d8c33328d14e8eed25) + +commit 3bf826f59013ec14fbcf19b85a03e2967a821661 +Author: Kim Woelders <[EMAIL PROTECTED]> +Date: Mon Sep 22 08:37:29 2008 +0930 + + xkb: fix use of uninitialized variable. + + And some cosmetic changes to use stuff->change consistently. + + Signed-off-by: Peter Hutterer <[EMAIL PROTECTED]> + (cherry picked from commit 8c46505d7d91e0644b19cccc4b342fceb6f86cab) + +commit 88ebde608daaca4793e1b637302899ba65d165ec +Author: Alan Coopersmith <[EMAIL PROTECTED]> +Date: Mon Oct 6 20:10:25 2008 -0700 + + Remove usage of mfbChangeWindowAttributes missed in e4d11e58c... + +commit af8cef461c4d107f7a03645568a635d0458da9b8 +Author: Alan Hourihane <[EMAIL PROTECTED]> +Date: Wed Sep 24 14:24:36 2008 +0100 + + only build dri2 when DRI2 is enabled + commit 97f688f2b4b8ebfba77be00db68c4e6a555a5d62 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Tue Sep 23 14:51:33 2008 -0400 diff --git a/debian/changelog b/debian/changelog index 7f27aa0..be877d1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ -xorg-server (2:1.5.1-2) UNRELEASED; urgency=low +xorg-server (2:1.5.2-1) UNRELEASED; urgency=low + * New upstream bugfix release. * debian/rules: define PCI_TXT_IDS_DIR to unbreak the pci id matching using plain text files provided by drivers. * Don't pass --with-serverconfig-path to configure, we only used to override commit 99941cae92a49b113e40309c9787aa926dccac3d Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sat Oct 11 02:50:12 2008 +0200 Re-introduce the xserver-common package It contains /usr/lib/xorg/protocol.txt and the Xserver(1) manpage for now. diff --git a/debian/changelog b/debian/changelog index e8a1f7e..7f27aa0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ xorg-server (2:1.5.1-2) UNRELEASED; urgency=low plain text files provided by drivers. * Don't pass --with-serverconfig-path to configure, we only used to override it for Xprint. + * Re-introduce the xserver-common package, containing + /usr/lib/xorg/protocol.txt and the Xserver(1) manpage for now. -- Julien Cristau <[EMAIL PROTECTED]> Thu, 25 Sep 2008 18:50:19 +0200 diff --git a/debian/control b/debian/control index 7320cda..533ec77 100644 --- a/debian/control +++ b/debian/control @@ -40,15 +40,15 @@ Vcs-Browser: http://git.debian.org/?p=pkg-xorg/xserver/xorg-server.git Package: xserver-xorg-core Architecture: any -Depends: x11-common (>= 1:7.0.0), ${shlibs:Depends}, ${misc:Depends}, xserver-xorg +Depends: xserver-common (>> 7), ${shlibs:Depends}, ${misc:Depends}, xserver-xorg Recommends: xkb-data, xfonts-base, libgl1-mesa-dri (>= 7.1~rc1) Suggests: xfonts-100dpi | xfonts-75dpi, xfonts-scalable Conflicts: xserver-xorg (<< 6.8.2-38), xserver-xfree86 (<< 1:7.0.0), - xserver-xorg-video, xserver-common, xserver-xorg-video-1.0, xserver-xorg-input, + xserver-xorg-video, xserver-common (<< 7), xserver-xorg-video-1.0, xserver-xorg-input, xserver-xorg-video-1.9, xserver-xorg-input-wacom (<< 0.7.8), xserver-xorg-video-2, xserver-xorg-input-2 Replaces: xserver-xorg (<< 6.8.2-38), xserver-xfree86 (<< 1:7.0.0), - xserver-common + xserver-common (<< 7) Provides: xserver Description: Xorg X server - core server The Xorg X server is an X server for several architectures and operating @@ -93,7 +93,7 @@ Description: Xorg X server - development files Package: xdmx Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${shlibs:Depends}, ${misc:Depends}, xserver-common Description: distributed multihead X server Xdmx is a proxy X server that uses one or more other X servers as its display device(s). It provides multi-head X functionality for displays that @@ -128,7 +128,7 @@ Description: Distributed Multihead X tools Package: xnest Architecture: any -Depends: x11-common, ${shlibs:Depends}, ${misc:Depends} +Depends: xserver-common, ${shlibs:Depends}, ${misc:Depends} Recommends: libgl1-mesa-dri (>= 7.1~rc1) Description: Nested X server Xnest is a nested X server that simply relays all its requests to another @@ -147,7 +147,7 @@ Description: Nested X server Package: xvfb Architecture: any -Depends: x11-common, ${shlibs:Depends}, ${misc:Depends} +Depends: xserver-common, ${shlibs:Depends}, ${misc:Depends} Recommends: xauth, xfonts-base Description: Virtual Framebuffer 'fake' X server Xvfb provides an X server that can run on machines with no display hardware @@ -174,7 +174,7 @@ Description: Virtual Framebuffer 'fake' X server Package: xserver-xephyr Architecture: any -Depends: x11-common, ${shlibs:Depends}, ${misc:Depends} +Depends: xserver-common, ${shlibs:Depends}, ${misc:Depends} Recommends: xbase-clients, xfonts-base, libgl1-mesa-dri (>= 7.1~rc1) Description: nested X server Xephyr is an X server that can be run inside another X server, @@ -191,7 +191,7 @@ Description: nested X server Package: xserver-xfbdev Architecture: alpha amd64 arm armeb armel hppa i386 ia64 lpia m32r m68k mips mipsel powerpc ppc64 sh3 sh3eb sh4 sh4eb sparc -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: xserver-common, ${shlibs:Depends}, ${misc:Depends} Recommends: xbase-clients, xfonts-base Description: Linux framebuffer device tiny X server xserver-xfbdev is a Linux framebuffer device tiny X server based on the @@ -217,3 +217,10 @@ Description: Xorg - the X.Org X server (debugging symbols) . This package provides debugging symbols for the Xorg X server and associated modules. + +Package: xserver-common +Architecture: all +Depends: x11-common +Replaces: xserver-xorg-core (<< 2:1.5.2) +Description: common files used by various X servers + This package provides files necessary for all X.Org based X servers. diff --git a/debian/rules b/debian/rules index 69da3cd..ee13076 100755 --- a/debian/rules +++ b/debian/rules @@ -174,7 +174,13 @@ binary-arch: build install # Build architecture-independent files here -binary-indep: +binary-indep: build install + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-initial + dh_install -i --sourcedir=debian/tmp + dh_installdocs -i + dh_installchangelogs -i + + $(MAKE) -f debian/rules DH_OPTIONS=-i binary-deb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install diff --git a/debian/xserver-common.install b/debian/xserver-common.install new file mode 100644 index 0000000..46a7630 --- /dev/null +++ b/debian/xserver-common.install @@ -0,0 +1,2 @@ +usr/lib/xorg/protocol.txt +usr/share/man/man1/Xserver.1 diff --git a/debian/xserver-xorg-core.install b/debian/xserver-xorg-core.install index 2fe61f9..c88d80f 100644 --- a/debian/xserver-xorg-core.install +++ b/debian/xserver-xorg-core.install @@ -5,7 +5,6 @@ usr/lib/xorg/modules/linux/*.so usr/lib/xorg/modules/freebsd/*.so usr/lib/xorg/modules/multimedia/*.so usr/bin/Xorg -usr/share/man/man1/Xserver.1 usr/share/man/man1/Xorg.1 usr/share/man/man4/exa.4 usr/share/man/man4/fbdevhw.4 commit c422dc76386eee5743f74c34978f9e9d7466925b Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sat Oct 11 02:49:35 2008 +0200 Don't pass --with-serverconfig-path to configure We only used to override it for Xprint. diff --git a/debian/changelog b/debian/changelog index 72a4dc2..e8a1f7e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,8 @@ xorg-server (2:1.5.1-2) UNRELEASED; urgency=low * debian/rules: define PCI_TXT_IDS_DIR to unbreak the pci id matching using plain text files provided by drivers. + * Don't pass --with-serverconfig-path to configure, we only used to override + it for Xprint. -- Julien Cristau <[EMAIL PROTECTED]> Thu, 25 Sep 2008 18:50:19 +0200 diff --git a/debian/rules b/debian/rules index c04a817..69da3cd 100755 --- a/debian/rules +++ b/debian/rules @@ -47,7 +47,6 @@ VENDOR = $(shell lsb_release -i -s) confflags += --disable-static \ --enable-xorg \ --with-default-font-path="/usr/share/fonts/X11/misc,/usr/share/fonts/X11/cyrillic,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1,/usr/share/fonts/X11/100dpi,/usr/share/fonts/X11/75dpi,/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" \ - --with-serverconfig-path=/etc/X11/xserver \ --enable-xtrap \ --enable-glx-tls \ --enable-dmx \ commit 6dcfa994b0777bf0cabeb71672f13e650b340817 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Fri Oct 10 15:26:32 2008 -0400 xserver 1.5.2 diff --git a/configure.ac b/configure.ac index ef276cc..88749a5 100644 --- a/configure.ac +++ b/configure.ac @@ -26,8 +26,8 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([xorg-server], 1.5.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="23 September 2008" +AC_INIT([xorg-server], 1.5.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="10 October 2008" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([dist-bzip2 foreign]) AM_MAINTAINER_MODE commit 75504517a30f1bdd593c2a32af81084b59b398a5 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Fri Oct 10 13:41:50 2008 -0400 EDID: Catch monitors that encode aspect ratio for physical size. This is not legal in either EDID 1.3 or 1.4, but hey, when did a little thing like legality stop anyone. (cherry picked from commit 0660dd9d7009147c395b9ea904539f76f55b9a7f) diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index 21391dd..958247c 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -85,6 +85,47 @@ handle_edid_quirks(xf86MonPtr m) } } } + + /* + * some monitors encode the aspect ratio instead of the physical size. + * try to find the largest detailed timing that matches that aspect + * ratio and use that to fill in the feature section. + */ + if ((m->features.hsize == 16 && m->features.vsize == 9) || + (m->features.hsize == 16 && m->features.vsize == 10) || + (m->features.hsize == 4 && m->features.vsize == 3) || + (m->features.hsize == 5 && m->features.vsize == 4)) { + int real_hsize = 0, real_vsize = 0; + float target_aspect, timing_aspect; + + target_aspect = (float)m->features.hsize / (float)m->features.vsize; + for (i = 0; i < 4; i++) { + if (m->det_mon[i].type == DT) { + struct detailed_timings *timing; + timing = &m->det_mon[i].section.d_timings; + + if (!timing->v_size) + continue; + + timing_aspect = (float)timing->h_size / (float)timing->v_size; + if (fabs(1 - (timing_aspect / target_aspect)) < 0.05) { + real_hsize = max(real_hsize, timing->h_size); + real_vsize = max(real_vsize, timing->v_size); + } + } + } + + if (real_hsize && real_vsize) { + /* convert mm to cm */ + m->features.hsize = (real_hsize + 5) / 10; + m->features.vsize = (real_vsize + 5) / 10; + } else { + m->features.hsize = m->features.vsize = 0; + } + + xf86Msg(X_INFO, "Quirked EDID physical size to %dx%d cm\n", + m->features.hsize, m->features.vsize); + } } xf86MonPtr commit b595b65e54b1e15fbce872fe3719da14cfae5b92 Author: Adam Jackson <[EMAIL PROTECTED]> Date: Thu Oct 9 14:53:29 2008 -0400 Revert "Array-index based devPrivates implementation." This reverts commit 8ef37c194fa08d3911095299413a42a01162b078. diff --git a/dix/privates.c b/dix/privates.c index ca03317..efb3204 100644 --- a/dix/privates.c +++ b/dix/privates.c @@ -40,8 +40,9 @@ from The Open Group. #include "inputstr.h" struct _Private { - int state; - pointer value; + DevPrivateKey key; + pointer value; + struct _Private *next; }; typedef struct _PrivateDesc { @@ -49,36 +50,22 @@ typedef struct _PrivateDesc { unsigned size; CallbackListPtr initfuncs; CallbackListPtr deletefuncs; + struct _PrivateDesc *next; } PrivateDescRec; -#define PRIV_MAX 256 -#define PRIV_STEP 16 - /* list of all allocated privates */ -static PrivateDescRec items[PRIV_MAX]; -static int nextPriv; +static PrivateDescRec *items = NULL; -static PrivateDescRec * +static _X_INLINE PrivateDescRec * findItem(const DevPrivateKey key) { - if (!*key) { - if (nextPriv >= PRIV_MAX) - return NULL; - - items[nextPriv].key = key; - *key = nextPriv; - nextPriv++; + PrivateDescRec *item = items; + while (item) { + if (item->key == key) + return item; + item = item->next; } - - return items + *key; -} - -static _X_INLINE int -privateExists(PrivateRec **privates, const DevPrivateKey key) -{ - return *key && *privates && - (*privates)[0].state > *key && - (*privates)[*key].state; + return NULL; } /* @@ -88,10 +75,21 @@ _X_EXPORT int dixRequestPrivate(const DevPrivateKey key, unsigned size) { PrivateDescRec *item = findItem(key); - if (!item) - return FALSE; - if (size > item->size) + if (item) { + if (size > item->size) + item->size = size; + } else { + item = (PrivateDescRec *)xalloc(sizeof(PrivateDescRec)); + if (!item) + return FALSE; + memset(item, 0, sizeof(PrivateDescRec)); + + /* add privates descriptor */ + item->key = key; item->size = size; + item->next = items; + items = item; + } return TRUE; } @@ -102,52 +100,25 @@ _X_EXPORT pointer * dixAllocatePrivate(PrivateRec **privates, const DevPrivateKey key) { PrivateDescRec *item = findItem(key); - PrivateCallbackRec calldata; PrivateRec *ptr; - pointer value; - int oldsize, newsize; - - newsize = (*key / PRIV_STEP + 1) * PRIV_STEP; + unsigned size = sizeof(PrivateRec); + + if (item) + size += item->size; - /* resize or init privates array */ - if (!item) + ptr = (PrivateRec *)xcalloc(size, 1); + if (!ptr) return NULL; - - /* initialize privates array if necessary */ - if (!*privates) { - ptr = xcalloc(newsize, sizeof(*ptr)); - if (!ptr) - return NULL; - *privates = ptr; - (*privates)[0].state = newsize; - } - - oldsize = (*privates)[0].state; - - /* resize privates array if necessary */ - if (*key >= oldsize) { - ptr = xrealloc(*privates, newsize * sizeof(*ptr)); - if (!ptr) - return NULL; - memset(ptr + oldsize, 0, (newsize - oldsize) * sizeof(*ptr)); - *privates = ptr; - (*privates)[0].state = newsize; - } - - /* initialize slot */ - ptr = *privates + *key; - ptr->state = 1; - if (item->size) { - value = xcalloc(item->size, 1); - if (!value) - return NULL; - ptr->value = value; + ptr->key = key; + ptr->value = (size > sizeof(PrivateRec)) ? (ptr + 1) : NULL; + ptr->next = *privates; + *privates = ptr; + + /* call any init funcs and return */ + if (item) { + PrivateCallbackRec calldata = { key, &ptr->value }; + CallCallbacks(&item->initfuncs, &calldata); } - - calldata.key = key; - calldata.value = &ptr->value; - CallCallbacks(&item->initfuncs, &calldata); - return &ptr->value; } @@ -157,10 +128,14 @@ dixAllocatePrivate(PrivateRec **privates, const DevPrivateKey key) _X_EXPORT pointer dixLookupPrivate(PrivateRec **privates, const DevPrivateKey key) { + PrivateRec *rec = *privates; pointer *ptr; - if (privateExists(privates, key)) - return (*privates)[*key].value; + while (rec) { + if (rec->key == key) + return rec->value; + rec = rec->next; + } ptr = dixAllocatePrivate(privates, key); return ptr ? *ptr : NULL; @@ -172,8 +147,13 @@ dixLookupPrivate(PrivateRec **privates, const DevPrivateKey key) _X_EXPORT pointer * dixLookupPrivateAddr(PrivateRec **privates, const DevPrivateKey key) { - if (privateExists(privates, key)) - return &(*privates)[*key].value; + PrivateRec *rec = *privates; + + while (rec) { + if (rec->key == key) + return &rec->value; + rec = rec->next; + } return dixAllocatePrivate(privates, key); } @@ -184,10 +164,16 @@ dixLookupPrivateAddr(PrivateRec **privates, const DevPrivateKey key) _X_EXPORT int dixSetPrivate(PrivateRec **privates, const DevPrivateKey key, pointer val) { + PrivateRec *rec; + top: - if (privateExists(privates, key)) { - (*privates)[*key].value = val; - return TRUE; + rec = *privates; + while (rec) { + if (rec->key == key) { + rec->value = val; + return TRUE; + } + rec = rec->next; } if (!dixAllocatePrivate(privates, key)) @@ -201,23 +187,27 @@ dixSetPrivate(PrivateRec **privates, const DevPrivateKey key, pointer val) _X_EXPORT void dixFreePrivates(PrivateRec *privates) { - int i; + PrivateRec *ptr, *next; + PrivateDescRec *item; PrivateCallbackRec calldata; - if (privates) - for (i = 1; i < privates->state; i++) - if (privates[i].state) { - /* call the delete callbacks */ - calldata.key = items[i].key; - calldata.value = &privates[i].value; - CallCallbacks(&items[i].deletefuncs, &calldata); - - /* free pre-allocated memory */ - if (items[i].size) - xfree(privates[i].value); - } - - xfree(privates); + /* first pass calls the delete callbacks */ + for (ptr = privates; ptr; ptr = ptr->next) { + item = findItem(ptr->key); + if (item) { + calldata.key = ptr->key; + calldata.value = &ptr->value; + CallCallbacks(&item->deletefuncs, &calldata); + } + } + + /* second pass frees the memory */ + ptr = privates; + while (ptr) { + next = ptr->next; + xfree(ptr); + ptr = next; + } } /* @@ -228,9 +218,11 @@ dixRegisterPrivateInitFunc(const DevPrivateKey key, CallbackProcPtr callback, pointer data) { PrivateDescRec *item = findItem(key); - if (!item) - return FALSE; - + if (!item) { + if (!dixRequestPrivate(key, 0)) + return FALSE; + item = findItem(key); + } return AddCallback(&item->initfuncs, callback, data); } @@ -239,9 +231,11 @@ dixRegisterPrivateDeleteFunc(const DevPrivateKey key, CallbackProcPtr callback, pointer data) { PrivateDescRec *item = findItem(key); - if (!item) - return FALSE; - + if (!item) { + if (!dixRequestPrivate(key, 0)) + return FALSE; + item = findItem(key); + } return AddCallback(&item->deletefuncs, callback, data); } @@ -298,17 +292,16 @@ dixLookupPrivateOffset(RESTYPE type) int dixResetPrivates(void) { - int i; - - /* reset private descriptors */ - for (i = 1; i < nextPriv; i++) { - *items[i].key = 0; - DeleteCallbackList(&items[i].initfuncs); - DeleteCallbackList(&items[i].deletefuncs); + PrivateDescRec *next; + + /* reset internal structures */ + while (items) { + next = items->next; + DeleteCallbackList(&items->initfuncs); + DeleteCallbackList(&items->deletefuncs); + xfree(items); + items = next; } - nextPriv = 1; - - /* reset offsets */ if (offsets) xfree(offsets); offsetsSize = sizeof(offsetDefaults); diff --git a/include/privates.h b/include/privates.h index e3fa83c..98d893c 100644 --- a/include/privates.h +++ b/include/privates.h @@ -19,7 +19,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * STUFF FOR PRIVATES *****************************************************************/ -typedef int *DevPrivateKey; +typedef void *DevPrivateKey; struct _Private; typedef struct _Private PrivateRec; commit ca659813a81074cae55ffec51f923c658480b618 Author: Julien Cristau <[EMAIL PROTECTED]> Date: Wed Oct 8 19:46:50 2008 +0200 Fix GKVE with key_code > 255 Move the keycode validation checks before use. diff --git a/dix/getevents.c b/dix/getevents.c index fbead11..1e0edbf 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -411,9 +411,6 @@ GetKeyboardValuatorEvents(xEvent *events, DeviceIntPtr pDev, int type, KeySym sym; deviceKeyButtonPointer *kbp = NULL; - sym = map[(key_code - pDev->key->curKeySyms.minKeyCode) - * pDev->key->curKeySyms.mapWidth]; - if (!events) return 0; @@ -428,6 +425,9 @@ GetKeyboardValuatorEvents(xEvent *events, DeviceIntPtr pDev, int type, if (key_code < 8 || key_code > 255) return 0; + sym = map[(key_code - pDev->key->curKeySyms.minKeyCode) + * pDev->key->curKeySyms.mapWidth]; + if (pDev->coreEvents) numEvents = 2; else commit 8337c9aa3d2009eea801a84b3a65272e03e65e1a Author: Luc Verhaegen <[EMAIL PROTECTED]> Date: Wed Oct 8 14:55:29 2008 +0200 DGA: Fix ProcXF86DGASetViewPort for missing support in driver. Fixes a segfault when trying to activate a DGA mode without checking whether DGA modesetting is at all possible. (cherry picked from commit 1feb69eb63e6739ff5db255ad529e84adf941a10) diff --git a/hw/xfree86/dixmods/extmod/xf86dga.c b/hw/xfree86/dixmods/extmod/xf86dga.c index 0736167..c66bca2 100644 --- a/hw/xfree86/dixmods/extmod/xf86dga.c +++ b/hw/xfree86/dixmods/extmod/xf86dga.c @@ -93,7 +93,7 @@ ProcXF86DGADirectVideo(ClientPtr client) REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq); - if (!DGAAvailable(stuff->screen)) + if (!DGAAvailable(stuff->screen)) return DGAErrorBase + XF86DGANoDirectVideoMode; if (stuff->enable & XF86DGADirectGraphics) { @@ -128,7 +128,7 @@ ProcXF86DGAGetViewPortSize(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]