[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'upstream-unstable'



Rebased ref, commits from common ancestor:
commit d1320f4f2908fd3a248a79314bd78f76b03c71c5
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Sat Dec 26 10:13:46 2009 +1000

    xserver 1.7.3.902
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/configure.ac b/configure.ac
index 833a092..10cf26f 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.7.3.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2009-12-11"
+AC_INIT([xorg-server], 1.7.3.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2009-12-26"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE

commit c18dd3fd9b2e4bf3862666671042b7c933f64100
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Dec 7 12:58:57 2009 +1000

    xkb: don't assign garbage value to led_return.
    
    As the comment for the function states, led_return is undefined if map is
    NULL. We might as well skip writing to it then.
    
    Found by clang.
    
    Reported-by: Tomas Carnecky <tom@dbservice.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Jamey Sharp <jamey@minilop.net>
    (cherry picked from commit 12fb31815db9de9c01f2d4155a2b74531777c0bf)

diff --git a/xkb/xkb.c b/xkb/xkb.c
index 98e879d..1cd4558 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -3273,20 +3273,21 @@ _XkbFindNamedIndicatorMap(XkbSrvLedInfoPtr sli, Atom indicator,
                           int *led_return)
 {
     XkbIndicatorMapPtr  map;
-    int                 led;
 
     /* search for the right indicator */
     map = NULL;
     if (sli->names && sli->maps) {
+	int led;
+
 	for (led = 0; (led < XkbNumIndicators) && (map == NULL); led++) {
 	    if (sli->names[led] == indicator) {
 		map= &sli->maps[led];
+		*led_return = led;
 		break;
 	    }
 	}
     }
 
-    *led_return = led;
     return map;
 }
 

commit 0f71be87b9174c587ccacd6aa61a9a66d3507ef4
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Dec 14 11:05:20 2009 +1000

    xfree86: belately init RandR12 if xinerama fails. (#24627)
    
    On Fri, Dec 11, 2009 at 10:19:01AM -0800, Keith Packard wrote:
    > On Wed, 9 Dec 2009 11:55:14 +1000, Peter Hutterer <peter.hutterer@who-t.net> wrote:
    > > On Tue, Dec 08, 2009 at 05:24:06PM -0800, Aaron Plattner wrote:
    > > > On Tue, Dec 08, 2009 at 03:52:27PM -0800, Peter Hutterer wrote:
    > > > > Xorg +xinerama crashes immediately due to whacky dependency between Xinerama
    > > > > and RandR12. The latter doesn't initialize if Xinerama is enabled, but if
    > > > > only one screen is found, Xinerama is disabled again and RandR12 tries to
    > > > > access data it never initialized.
    >
    > I'd sure like to have RandR get enabled when xinerama doesn't; is there
    > an easy way of making that happen here? Perhaps having the RandR12 code
    > disable Xinerama when only one screen is found? Or some other kludge?
    
    you know the dependency better than I do so any hints are apreciated.
    afaict, the screenInfo.numScreens (the check used by Xinerama) isn't
    necessarily initialized at this point so we can't use the same check.
    The following seems to work though:
    
    From 670b3ebdb7312a6433a8f093d0820785db2aea20 Mon Sep 17 00:00:00 2001
    From: Peter Hutterer <peter.hutterer@who-t.net>
    Date: Mon, 14 Dec 2009 11:00:58 +1000
    Subject: [PATCH] xfree86: if only one screen was found, disable Xinerama (#24627)
    
    Xorg +xinerama crashes immediately due to whacky dependency between Xinerama
    and RandR12. The latter doesn't initialize if Xinerama is enabled, but if
    only one screen is found, Xinerama is disabled again and RandR12 tries to
    access data it never initialized.
    
    Dependency chain is:
    - ProcessCommandLine sets noPanoramiXExtension to FALSE
    - xf86RandR12Init() is a noop
    - PanoramiXExtensionInit sets noPanoramiXExtension to TRUE
    - xf86RandR12CreateScreenResources tries to use the devPrivates key it never
      initialized.
    
    This hack checks if there's only one screen at the time RandR12 is
    initialized. If so, we expect Xinerama to fail anyhow so we disable it
    ourselves and proceed as planned.
    
    X.Org Bug 24627 <http://bugs.freedesktop.org/show_bug.cgi?id=24627>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Keith Packard <keithp@keithp.com>
    (cherry picked from commit faca1bc582e374d32ee9d63d10e072fbef4940a3)

diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 6ea9d26..1fc63c4 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -871,7 +871,12 @@ xf86RandR12Init (ScreenPtr pScreen)
 #ifdef PANORAMIX
     /* XXX disable RandR when using Xinerama */
     if (!noPanoramiXExtension)
-	return TRUE;
+    {
+        if (xf86NumScreens == 1)
+            noPanoramiXExtension = TRUE;
+        else
+            return TRUE;
+    }
 #endif
 
     if (xf86RandR12Generation != serverGeneration)

commit b98a07d86dab5b6c5d524d36814fda8e9549120c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Dec 21 11:08:26 2009 +1000

    xfree86: remove HistorySize from the xorg.conf man page.
    
    This option isn't parsed by anything anymore.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Keith Packard <keithp@keithp.com>
    (cherry picked from commit 190610e0c62170a27ab3e40c6c6210a583ae1ad4)

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index ea4a641..942c397 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -879,10 +879,6 @@ default. Devices with
 disabled will be \*qfloating\*q and only accessible by clients employing the
 X Input extension. This option controls the startup behavior only, a device
 may be reattached or set floating at runtime.
-.TP 4
-.BI "Option \*qHistorySize\*q  \*q" number \*q
-Sets the motion history size.
-Default: 0.
 .TP 7
 .BI "Option \*qSendDragEvents\*q  \*q" boolean \*q
 ???

commit 7812d760e9b3fe3fc4de710fdddab504c1335fd5
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Dec 21 10:42:32 2009 +1000

    xfree86: reword InputDevice man sections, deprecate CorePointer/CoreKeyboard
    
    Reshuffle and reword - InputDevice sections are only necessary if
    hotplugging is disabled. Put more emphasis on hotplugging and less on HAL
    since we'll switch backends eventually.
    
    CorePointer, CoreKeyboard, and AlwaysCore should be listed as deprecated
    since they don't do what they used to since 1.4. These days, only
    SendCoreEvents matters and it's enabled for any driver calling
    xf86ProcessCommonOptions (== every driver).
    It only controls the startup behavior too, so document this.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Acked-by: Keith Packard <keithp@keithp.com>
    Reviewed-by: Alan Coopersmith <alan.coopersmith@sun.com>
    (cherry picked from commit 094c6b9f97a9f92e5a0ef3cf5be24c09ed4d6063)

diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index e3cbcf5..ea4a641 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -769,11 +769,28 @@ Example: the MIT-SHM extension can be disabled with the following entry:
 The config file may have multiple
 .B InputDevice
 sections.
-If HAL is not being used for input device configuration, there will normally
-be at least two: one for the core (primary) keyboard,
-and one of the core pointer.
+Recent X servers employ input hotplugging to add input devices, with the HAL
+backend being the default backend for X servers since 1.4. It is usually not
+necessary to provide
+.B InputDevice
+sections in the xorg.conf if hotplugging is enabled.
+.PP
+If hotplugging is disabled, there will normally
+be at least two: one for the core (primary) keyboard
+and one for the core pointer.
 If either of these two is missing, a default configuration for the missing
-ones will be used.
+ones will be used. In the absence of an explicitly specified core input
+device, the first
+.B InputDevice
+marked as
+.B CorePointer
+(or
+.BR CoreKeyboard )
+is used.
+If there is no match there, the first
+.B InputDevice
+that uses the \(lqmouse\(rq (or \(lqkbd\(rq) driver is used.
+The final fallback is to use built\-in default configurations.
 Currently the default configuration may not work as expected on all platforms.
 .PP
 .B InputDevice
@@ -828,17 +845,6 @@ and
 .BR mousedrv (__drivermansuffix__)
 on other platforms.
 .PP
-In the absence of an explicitly specified core input device, the first
-.B InputDevice
-marked as
-.B CorePointer
-(or
-.BR CoreKeyboard )
-is used.
-If there is no match there, the first
-.B InputDevice
-that uses the \(lqmouse\(rq (or \(lqkbd\(rq) driver is used.
-The final fallback is to use built\-in default configurations.
 .PP
 .B InputDevice
 sections recognise some driver\-independent
@@ -848,40 +854,31 @@ See the individual input driver manual pages for a description of the
 device\-specific options.
 .TP 7
 .BI "Option \*qCorePointer\*q"
-When this is set, the input device is installed as the core (primary)
-pointer device.
-There must be exactly one core pointer.
-If this option is not set here, or in the
-.B ServerLayout
-section, or from the
-.B \-pointer
-command line option, then the first input device that is capable of
-being used as a core pointer will be selected as the core pointer.
-This option is implicitly set when the obsolete
-.B Pointer
-section is used.
+Deprecated, use
+.B SendCoreEvents
+instead.
 .TP 7
 .BI "Option \*qCoreKeyboard\*q"
-When this is set, the input device is to be installed as the core
-(primary) keyboard device.
-There must be exactly one core keyboard.
-If this option is not set here, in the
-.B ServerLayout
-section, or from the
-.B \-keyboard
-command line option, then the first input device that is capable of
-being used as a core keyboard will be selected as the core keyboard.
-This option is implicitly set when the obsolete
-.B Keyboard
-section is used.
+Deprecated, use
+.B SendCoreEvents
+instead.
 .TP 7
 .BI "Option \*qAlwaysCore\*q  \*q" boolean \*q
+.B
+Deprecated, use
+.B SendCoreEvents
+instead.
 .TP 7
 .BI "Option \*qSendCoreEvents\*q  \*q" boolean \*q
 Both of these options are equivalent, and when enabled cause the
-input device to always report core events.
-This can be used, for example, to allow an additional pointer device to
-generate core pointer events (like moving the cursor, etc).
+input device to report core events through the master device. They are
+enabled by default.  Any device configured to send core events will be
+attached to the virtual core pointer or keyboard and control the cursor by
+default. Devices with
+.B SendCoreEvents
+disabled will be \*qfloating\*q and only accessible by clients employing the
+X Input extension. This option controls the startup behavior only, a device
+may be reattached or set floating at runtime.
 .TP 4
 .BI "Option \*qHistorySize\*q  \*q" number \*q
 Sets the motion history size.

commit 93294355a0429e1f009386632a5fb19d8722c61f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Dec 14 08:43:19 2009 +1000

    xfree86: update man page for special keys handling.
    
    SpecialKeyHandling was removed from the kbd driver with version 1.4.0. Since
    this is the only version that will build against server 1.7+ it's not
    reasonable to mention it in the man page. Reword, point to XKB instead and
    make clear that some key combinations _may_ not be available in any given
    config.
    
    Reported-by: Derek Fawcus
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Alan Coopersmith <alan.coopersmith@sun.com>
    (cherry picked from commit 801bc8075aee664bd4c6b6ff842ab737c143a1de)

diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index 80b1225..8e86a37 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -421,18 +421,12 @@ The
 .B __xservername__
 server is normally configured to recognize various special combinations
 of key presses that instruct the server to perform some action, rather
-than just sending the key press event to a client application.  The
-default XKEYBOARD keymap defines the key combinations listed below.
-The kbd (__drivermansuffix__) driver also has these key combinations
-builtin to its event handler
-for cases where the XKEYBOARD extension is not being used.  When using
-the XKEYBOARD extension, which key combinations perform which actions
-is completely configurable.
+than just sending the key press event to a client application. These actions
+depend on the XKB keymap loaded by a particular keyboard device and may or
+may not be available on a given configuration.
 .PP
-The special combinations of key presses recognized directly
-by
-.B __xservername__
-are:
+The following key combinations are commonly part of the default XKEYBOARD
+keymap.
 .TP 8
 .B Ctrl+Alt+Backspace
 Immediately kills the server -- no questions asked. It can be disabled by

commit 9941075acbeb2d069f78072cf710131b8cacc5ab
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Dec 14 08:41:18 2009 +1000

    xfree86: DontZap has been disabled for a while now, say so in the man page.
    
    1.7 always shipped with DontZap disabled, it's just the default keymaps that
    may not include the symbol to trigger it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Alan Coopersmith <alan.coopersmith@sun.com>
    (cherry picked from commit 753310837cd3812882d8de67f063bb61813db675)

diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index 2f9ff98..80b1225 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -435,11 +435,10 @@ by
 are:
 .TP 8
 .B Ctrl+Alt+Backspace
-Immediately kills the server -- no questions asked.  This is disabled by
-default.  It can be enabled with the -retro command line flag or by setting
-the
+Immediately kills the server -- no questions asked. It can be disabled by
+setting the
 .B DontZap
-__xconfigfile__(__filemansuffix__) file option to a FALSE value.
+__xconfigfile__(__filemansuffix__) file option to a TRUE value.
 .TP 8
 .B Ctrl+Alt+Keypad-Plus
 Change video mode to next one specified in the configuration file.

commit 7f6fc40bedb31a2c1f6723f0e7b9a7654560d69f
Author: Julien Cristau <jcristau@debian.org>
Date:   Tue Dec 22 17:14:09 2009 +0100

    test/xi2: fix maximum max_keycode (bug#25492)
    
    The number of keycodes needs to be lower than 0xFFFD so that the length
    field of xXIKeyInfo doesn't overflow.
    
    Signed-off-by: Julien Cristau <jcristau@debian.org>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit b44c9be244cee286835855483a69c69e80b095c0)

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index 65ddec5..66686cb 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -834,7 +834,7 @@ static void test_convert_XIDeviceChangedEvent(void)
     in.keys.max_keycode = 1 << 8;
     test_XIDeviceChangedEvent(&in);
 
-    in.keys.max_keycode = 0xFFFD; /* highest range, above that the length
+    in.keys.max_keycode = 0xFFFC; /* highest range, above that the length
                                      field gives up */
     test_XIDeviceChangedEvent(&in);
 

commit 7cdc00cac817843c913ad442261a43646eb4240e
Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
Date:   Fri Dec 11 16:42:43 2009 -0800

    Xfake: Nuke -Wl,-undefined=InitExtensions from LDFLAGS
    
    This is not portable, and accodring to Paulo should not be required any more.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
    (cherry picked from commit d50319550458f8127298cf8672b47f914b74ab1f)

diff --git a/hw/kdrive/fake/Makefile.am b/hw/kdrive/fake/Makefile.am
index 71b24b7..be0fa42 100644
--- a/hw/kdrive/fake/Makefile.am
+++ b/hw/kdrive/fake/Makefile.am
@@ -20,7 +20,7 @@ Xfake_LDADD = 						\
 	libfake.la					\
 	@KDRIVE_LIBS@
 
-Xfake_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-undefined=InitExtensions
+Xfake_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
 
 Xfake_DEPENDENCIES =	\
 	libfake.la					\

commit 6cdb0afc9884a13a3fd2da0835fef4724ba94507
Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
Date:   Fri Dec 11 11:53:28 2009 -0800

    dtrace: Add Xserver-dtrace.h to CLEANFILES
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
    Reviewed-by: Alan Coopersmith <alan.coopersmith@sun.com>
    (cherry picked from commit ed7d2527190ec56aed38db19d9e958abe88441b9)

diff --git a/dix/Makefile.am b/dix/Makefile.am
index 1caa5d0..8917aea 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -70,4 +70,4 @@ endif
 dix.c:
 	touch $@
 
-CLEANFILES = dix.c
+CLEANFILES = dix.c Xserver-dtrace.h

commit 01921a2b82da627b223fb2690b4ccd5511437419
Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
Date:   Wed Dec 9 18:27:31 2009 -0800

    XQuartz: pbproxy: Fix building of standalone xpbproxy executable
    
    Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
    (cherry picked from commit 97a6454ea57587db490873fee8ff0f899882972d)

diff --git a/hw/xquartz/pbproxy/Makefile.am b/hw/xquartz/pbproxy/Makefile.am
index e1c537f..02da6b2 100644
--- a/hw/xquartz/pbproxy/Makefile.am
+++ b/hw/xquartz/pbproxy/Makefile.am
@@ -15,6 +15,9 @@ if STANDALONE_XPBPROXY
 bin_PROGRAMS = xpbproxy
 xpbproxy_SOURCES = app-main.m
 xpbproxy_LDADD = libxpbproxy.la
+xpbproxy_LDFLAGS = -Wl,-framework,Cocoa
+
+AM_CPPFLAGS += -DSTANDALONE_XPBPROXY
 
 endif
 

commit 2b8ba62f006ac56c98b1b91a4215581905223255
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Thu Dec 17 18:24:40 2009 -0800

    Change default xkb model from pc104 to pc105
    
    PC105 is a more useful default for non-American keyboard users,
    not harmful for American PC101/PC104 keyboard users.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Keith Packard <keithp@keithp.com>
    (cherry picked from commit 1df4bd6011e110dcf0649b15bfffd4ab9e6961d6)

diff --git a/configure.ac b/configure.ac
index 6353216..833a092 100644
--- a/configure.ac
+++ b/configure.ac
@@ -510,9 +510,9 @@ AC_ARG_WITH(default-xkb-rules, AS_HELP_STRING([--with-default-xkb-rules=RULES],
                                 [ XKB_DFLT_RULES="$withval" ],
                                 [ XKB_DFLT_RULES="" ])
 AC_ARG_WITH(default-xkb-model, AS_HELP_STRING([--with-default-xkb-model=MODEL],
-                                   [Keyboard model (default: pc104)]),
+                                   [Keyboard model (default: pc105)]),
                                 [ XKB_DFLT_MODEL="$withval" ],
-                                [ XKB_DFLT_MODEL="pc104" ])
+                                [ XKB_DFLT_MODEL="pc105" ])
 AC_ARG_WITH(default-xkb-layout, AS_HELP_STRING([--with-default-xkb-layout=LAYOUT],
                                    [Keyboard layout (default: us)]),
                                 [ XKB_DFLT_LAYOUT="$withval" ],

commit 0240ad48884476ad5e43a08d35c371f0dd9a0e44
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Thu Dec 17 18:24:38 2009 -0800

    Add platform compatibility defines for Sun Studio compilers
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
    Signed-off-by: Keith Packard <keithp@keithp.com>
    (cherry picked from commit 48749cc21b074ee8e68c3854bd3977ec7c408225)

diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index a450bd6..ebb7f64 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -55,6 +55,20 @@
 # define DO_PROTOTYPES
 #endif
 
+/* Map Sun compiler platform defines to gcc-style used in the code */
+#if defined(__amd64) && !defined(__amd64__)
+# define __amd64__
+#endif
+#if defined(__i386) && !defined(__i386__)
+# define __i386__
+#endif
+#if defined(__sparc) && !defined(__sparc__)
+# define __sparc__
+#endif
+#if defined(__sparcv9) && !defined(__sparc64__)
+# define __sparc64__
+#endif
+
 #ifndef _X_EXPORT
 # include <X11/Xfuncproto.h>
 #endif

commit 17a1587d1606351d3f0b9b148e9c3cbfb6026193
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Thu Dec 17 18:24:37 2009 -0800

    Convert checks for PC98 support from platform #ifdefs to configure flag
    
    Default remains the same - on for most OS'es on i386 (except Solaris),
    off for everyone else.   Can be manually toggled via --enable-pc98 or
    --disable-pc98.
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
    Signed-off-by: Keith Packard <keithp@keithp.com>
    (cherry picked from commit b63912ed4c69fedd1bea92274d6cae0429a79677)

diff --git a/configure.ac b/configure.ac
index e501a37..6353216 100644
--- a/configure.ac
+++ b/configure.ac
@@ -560,6 +560,9 @@ AC_ARG_ENABLE(null-root-cursor, AS_HELP_STRING([--enable-null-root-cursor], [Use
 AC_ARG_ENABLE(visibility,     AC_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
 				[SYMBOL_VISIBILITY=$enableval],
 				[SYMBOL_VISIBILITY=auto])
+AC_ARG_ENABLE(pc98,     	AC_HELP_STRING([--enable-pc98], [Enable PC98 support in Xorg (default: auto)]),
+				[SUPPORT_PC98=$enableval],
+				[SUPPORT_PC98=auto])
 
 dnl GLX build options
 AC_ARG_WITH(dri-driver-path,  AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]),
@@ -1575,6 +1578,9 @@ if test "x$XORG" = xyes; then
 			XORG_CFLAGS="${XORG_CFLAGS} "'$(SOLARIS_ASM_CFLAGS)'
 		fi
 		AC_SUBST([SOLARIS_ASM_CFLAGS])
+		if test "x$SUPPORT_PC98" = xauto; then
+			SUPPORT_PC98="no"
+		fi
 		;;
 	  gnu*)
 	  	XORG_OS="gnu"
@@ -1596,8 +1602,19 @@ if test "x$XORG" = xyes; then
 	  sparc*)
 		xorg_bus_sparc="yes"
 		;;
+	  i*86)
+		if test "x$SUPPORT_PC98" = xauto; then
+			SUPPORT_PC98="yes"
+		fi
+		;;
 	esac
 
+	if test "x$SUPPORT_PC98" = xauto; then
+		SUPPORT_PC98="no"
+	fi
+	if test "x$SUPPORT_PC98" = xyes; then
+		AC_DEFINE(SUPPORT_PC98, 1, [Support PC98])
+	fi
 	if test "x$XORG_OS_PCI" = x ; then
 		XORG_OS_PCI=$XORG_OS
 	fi
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index a6d66f3..6fbf613 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -71,13 +71,6 @@ extern DeviceAssocRec mouse_assoc;
 #include "picture.h"
 #endif
 
-#if (defined(__i386__)) && \
-    (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
-     defined(__NetBSD__) || defined(linux) || \
-     (defined(SVR4) && !defined(sun)) || defined(__GNU__))
-#define SUPPORT_PC98
-#endif
-
 /*
  * These paths define the way the config file search is done.  The escape
  * sequences are documented in parser/scan.c.
@@ -778,11 +771,10 @@ static OptionInfoRec FlagOptions[] = {
 	{0}, FALSE },
 };
 
-#ifdef __i386__
+#ifdef SUPPORT_PC98
 static Bool
 detectPC98(void)
 {
-#ifdef SUPPORT_PC98
     unsigned char buf[2];
 
     if (xf86ReadBIOS(0xf8000, 0xe80, buf, 2) != 2)
@@ -791,11 +783,8 @@ detectPC98(void)
 	return TRUE;
     else
 	return FALSE;
-#else
-    return FALSE;
-#endif
 }
-#endif /* __i386__ */
+#endif
 
 static Bool
 configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
@@ -1054,7 +1043,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
 	xf86Info.pixmap24 = Pix24DontCare;
 	xf86Info.pix24From = X_DEFAULT;
     }
-#ifdef __i386__
+#ifdef SUPPORT_PC98
     if (xf86GetOptValBool(FlagOptions, FLAG_PC98, &value)) {
 	xf86Info.pc98 = value;
 	if (value) {
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index d8f7f7f..98f8284 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -124,7 +124,7 @@ xf86InfoRec xf86Info = {
     .miscModInDevAllowNonLocal  = FALSE,
     .pixmap24                   = Pix24DontCare,
     .pix24From                  = X_DEFAULT,
-#ifdef __i386__
+#ifdef SUPPORT_PC98
     .pc98                       = FALSE,
 #endif
     .pmFlag                     = TRUE,
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 56ab266..1cc1526 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -2140,7 +2140,7 @@ xf86GetAllowMouseOpenFail(void)
 Bool
 xf86IsPc98(void)
 {
-#ifdef __i386__
+#if SUPPORT_PC98
     return xf86Info.pc98;
 #else
     return FALSE;
diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
index 9982601..b2095aa 100644
--- a/hw/xfree86/common/xf86Privstr.h
+++ b/hw/xfree86/common/xf86Privstr.h
@@ -91,7 +91,7 @@ typedef struct {
 						   input device events */
     Pix24Flags		pixmap24;
     MessageType		pix24From;
-#ifdef __i386__
+#ifdef SUPPORT_PC98
     Bool		pc98;
 #endif
     Bool		pmFlag;
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index 794de7a..9fe7cde 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -133,4 +133,7 @@
 /* Use SIGIO handlers for input device events by default */
 #undef USE_SIGIO_BY_DEFAULT
 
+/* Support PC98 */
+#undef SUPPORT_PC98
+
 #endif /* _XORG_CONFIG_H_ */

commit 2d6a8f668342a5190cdf43b5d385f592d10f5900
Author: Dave Airlie <airlied@redhat.com>
Date:   Mon Dec 21 12:26:26 2009 +1000

    fb: backport fb changes from master for src window operations.
    
    This rolls up the following commits and also keeps the image_from_pict
    API compatiblity. It introduces a new image_from_pict_18 API that is
    used by the server leaving the old API alone.
    
    I've rolled this up as I don't want to introduce ABI breaks in bisection.
    
    a72c65e9176c51de95db2fdbf4c5d946a4911695 fb: Adjust transform or composite coordinates for pixman operations
    bd567061c8b84b268d9bbb01bc4d8981feefb862 Split fbGetDrawable into fbGetDrawablePixmap and fbGetPixmapBitsData
    61335052972a78d67c0ba74f902273b34c63a198 Revert "Fix clipping when windows are used as sources"
    071b3c1810d9f2602173acc8578caac20e0b771e Revert "Use IncludeInferiors when copying windows before compositing."
    8e640d6b131d2865a9725d8997023865b0ef3d69 Revert "Reserve space for two GC values in copy_drawable()."
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/fb/fb.h b/fb/fb.h
index 37de71e..8b2839a 100644
--- a/fb/fb.h
+++ b/fb/fb.h
@@ -700,38 +700,41 @@ typedef struct {
 #define __fbPixOffXPix(pPix)	(__fbPixDrawableX(pPix))
 #define __fbPixOffYPix(pPix)	(__fbPixDrawableY(pPix))
 
-#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
-    PixmapPtr   _pPix; \
-    if ((pDrawable)->type != DRAWABLE_PIXMAP) { \
-	_pPix = fbGetWindowPixmap(pDrawable); \
-	(xoff) = __fbPixOffXWin(_pPix); \
-	(yoff) = __fbPixOffYWin(_pPix); \
-    } else { \
-	_pPix = (PixmapPtr) (pDrawable); \
-	(xoff) = __fbPixOffXPix(_pPix); \
-	(yoff) = __fbPixOffYPix(_pPix); \
-    } \
-    fbPrepareAccess(pDrawable); \
-    (pointer) = (FbBits *) _pPix->devPrivate.ptr; \
-    (stride) = ((int) _pPix->devKind) / sizeof (FbBits); (void)(stride); \
-    (bpp) = _pPix->drawable.bitsPerPixel;  (void)(bpp); \
+#define fbGetDrawablePixmap(pDrawable, pixmap, xoff, yoff) {			\
+    if ((pDrawable)->type != DRAWABLE_PIXMAP) { 				\
+	(pixmap) = fbGetWindowPixmap(pDrawable);				\
+	(xoff) = __fbPixOffXWin(pixmap); 					\
+	(yoff) = __fbPixOffYWin(pixmap); 					\
+    } else { 									\
+	(pixmap) = (PixmapPtr) (pDrawable);					\
+	(xoff) = __fbPixOffXPix(pixmap); 					\
+	(yoff) = __fbPixOffYPix(pixmap); 					\
+    } 										\
+    fbPrepareAccess(pDrawable); 						\
 }
 
-#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
-    PixmapPtr   _pPix; \
-    if ((pDrawable)->type != DRAWABLE_PIXMAP) { \
-	_pPix = fbGetWindowPixmap(pDrawable); \
-	(xoff) = __fbPixOffXWin(_pPix); \
-	(yoff) = __fbPixOffYWin(_pPix); \
-    } else { \
-	_pPix = (PixmapPtr) (pDrawable); \
-	(xoff) = __fbPixOffXPix(_pPix); \
-	(yoff) = __fbPixOffYPix(_pPix); \
-    } \
-    fbPrepareAccess(pDrawable); \
-    (pointer) = (FbStip *) _pPix->devPrivate.ptr; \
-    (stride) = ((int) _pPix->devKind) / sizeof (FbStip); (void)(stride); \
-    (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \
+#define fbGetPixmapBitsData(pixmap, pointer, stride, bpp) {			\
+    (pointer) = (FbBits *) (pixmap)->devPrivate.ptr; 			       	\
+    (stride) = ((int) (pixmap)->devKind) / sizeof (FbBits); (void)(stride);	\
+    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
+}
+
+#define fbGetPixmapStipData(pixmap, pointer, stride, bpp) {			\
+    (pointer) = (FbStip *) (pixmap)->devPrivate.ptr; 			       	\
+    (stride) = ((int) (pixmap)->devKind) / sizeof (FbStip); (void)(stride);	\
+    (bpp) = (pixmap)->drawable.bitsPerPixel;  (void)(bpp); 			\
+}
+
+#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 		\
+    PixmapPtr   _pPix; 								\
+    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff); 				\
+    fbGetPixmapBitsData(_pPix, pointer, stride, bpp);				\
+}
+
+#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { 	\
+    PixmapPtr   _pPix; 								\
+    fbGetDrawablePixmap(pDrawable, _pPix, xoff, yoff);				\
+    fbGetPixmapStipData(_pPix, pointer, stride, bpp);				\
 }
 
 /*
@@ -2079,9 +2082,16 @@ fbFillRegionSolid (DrawablePtr	pDrawable,
 		   FbBits	xor);
 
 extern _X_EXPORT pixman_image_t *
-image_from_pict (PicturePtr pict,
-		 Bool       has_clip,
-		 Bool       is_src);
+image_from_pict (PicturePtr	pict,
+		 Bool		has_clip,
+		 Bool		is_src);
+
+extern _X_EXPORT pixman_image_t *
+image_from_pict_18 (PicturePtr	pict,
+		 Bool		has_clip,
+		 int		*xoff,
+		 int		*yoff);
+
 extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
 
 #endif /* _FB_H_ */
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 8fdaa58..f9f4343 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -158,19 +158,24 @@ fbComposite (CARD8      op,
 	     CARD16     height)
 {
     pixman_image_t *src, *mask, *dest;
+    int src_xoff, src_yoff;
+    int msk_xoff, msk_yoff;
+    int dst_xoff, dst_yoff;
     
-    miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height);
+    miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height);
     if (pMask)
-	miCompositeSourceValidate (pMask, xMask, yMask, width, height);
+	miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height);
     
-    src = image_from_pict (pSrc, TRUE, TRUE);
-    mask = image_from_pict (pMask, TRUE, TRUE);
-    dest = image_from_pict (pDst, TRUE, FALSE);
+    src = image_from_pict_18 (pSrc, FALSE, &src_xoff, &src_yoff);
+    mask = image_from_pict_18 (pMask, FALSE, &msk_xoff, &msk_yoff);
+    dest = image_from_pict_18 (pDst, TRUE, &dst_xoff, &dst_yoff);
 
     if (src && dest && !(pMask && !mask))
     {
 	pixman_image_composite (op, src, mask, dest,
-				xSrc, ySrc, xMask, yMask, xDst, yDst,
+				xSrc + src_xoff, ySrc + src_yoff,
+				xMask + msk_xoff, yMask + msk_yoff,
+				xDst + dst_xoff, yDst + dst_yoff,
 				width, height);
     }
 
@@ -270,22 +275,22 @@ create_conical_gradient_image (PictGradient *gradient)
 
 static pixman_image_t *
 create_bits_picture (PicturePtr pict,
-		     Bool       has_clip)
+		     Bool       has_clip,
+		     int	*xoff,
+		     int	*yoff)
 {
+    PixmapPtr pixmap;
     FbBits *bits;
     FbStride stride;
-    int bpp, xoff, yoff;
+    int bpp;
     pixman_image_t *image;
     
-    fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
-
-    bits = (FbBits*)((CARD8*)bits +
-		     (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) +
-		     (pict->pDrawable->x + xoff) * (bpp / 8));
+    fbGetDrawablePixmap (pict->pDrawable, pixmap, *xoff, *yoff);
+    fbGetPixmapBitsData(pixmap, bits, stride, bpp);
 
     image = pixman_image_create_bits (
 	pict->format,
-	pict->pDrawable->width, pict->pDrawable->height,
+	pixmap->drawable.width, pixmap->drawable.height,
 	(uint32_t *)bits, stride * sizeof (FbStride));
     
     
@@ -311,30 +316,52 @@ create_bits_picture (PicturePtr pict,
 	if (pict->clientClipType != CT_NONE)
 	    pixman_image_set_has_client_clip (image, TRUE);
 
-	pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y);
+	if (*xoff || *yoff)
+	    pixman_region_translate (pict->pCompositeClip, *xoff, *yoff);
 
 	pixman_image_set_clip_region (image, pict->pCompositeClip);
 
-	pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y);
+	if (*xoff || *yoff)
+	    pixman_region_translate (pict->pCompositeClip, -*xoff, -*yoff);
     }
     
     /* Indexed table */
     if (pict->pFormat->index.devPrivate)
 	pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
 
+    /* Add in drawable origin to position within the image */
+    *xoff += pict->pDrawable->x;
+    *yoff += pict->pDrawable->y;
+
     return image;
 }
 
 static void
-set_image_properties (pixman_image_t *image, PicturePtr pict)
+set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
 {
     pixman_repeat_t repeat;
     pixman_filter_t filter;
     
     if (pict->transform)
     {
-	pixman_image_set_transform (
-	    image, (pixman_transform_t *)pict->transform);
+	/* For source images, adjust the transform to account
+	 * for the drawable offset within the pixman image,
+	 * then set the offset to 0 as it will be used
+	 * to compute positions within the transformed image.
+	 */
+	if (!has_clip) {
+	    struct pixman_transform	adjusted;
+
+	    adjusted = *pict->transform;
+	    pixman_transform_translate(&adjusted,
+				       NULL,
+				       pixman_int_to_fixed(*xoff),
+				       pixman_int_to_fixed(*yoff));
+	    pixman_image_set_transform (image, &adjusted);
+	    *xoff = 0;
+	    *yoff = 0;
+	} else
+	    pixman_image_set_transform (image, pict->transform);
     }
     
     switch (pict->repeatType)
@@ -361,7 +388,8 @@ set_image_properties (pixman_image_t *image, PicturePtr pict)
     
     if (pict->alphaMap)
     {
-	pixman_image_t *alpha_map = image_from_pict (pict->alphaMap, TRUE, TRUE);
+	int alpha_xoff, alpha_yoff;
+	pixman_image_t *alpha_map = image_from_pict_18 (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff);
 	
 	pixman_image_set_alpha_map (
 	    image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
@@ -393,10 +421,9 @@ set_image_properties (pixman_image_t *image, PicturePtr pict)
     pixman_image_set_source_clipping (image, TRUE);
 }
 
+
 pixman_image_t *
-image_from_pict (PicturePtr pict,
-		 Bool has_clip,
-		 Bool is_src)
+image_from_pict_18 (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
 {
     pixman_image_t *image = NULL;
 
@@ -405,7 +432,7 @@ image_from_pict (PicturePtr pict,
 
     if (pict->pDrawable)
     {
-	image = create_bits_picture (pict, has_clip);
+	image = create_bits_picture (pict, has_clip, xoff, yoff);
     }
     else if (pict->pSourcePict)
     {
@@ -429,11 +456,18 @@ image_from_pict (PicturePtr pict,
     }
     
     if (image)
-	set_image_properties (image, pict);
+	set_image_properties (image, pict, has_clip, xoff, yoff);
     
     return image;
 }
 
+pixman_image_t *
+image_from_pict (PicturePtr pict, Bool has_clip, Bool is_src)
+{
+    int xoff = 0, yoff = 0;
+    return image_from_pict_18(pict, has_clip, &xoff, &yoff);
+}
+


Reply to: