merge latest (4.3.99.16) from XFree86 (vendor) branch

This commit is contained in:
Kaleb Keithley
2003-11-26 22:49:07 +00:00
parent c57959ad6a
commit 0097b6fe2d
796 changed files with 58012 additions and 26524 deletions

View File

@@ -1,11 +1,11 @@
/**************************************************************
*
* Shared code for the Darwin X Server
* running with Quartz or the IOKit
* running with Quartz or IOKit display mode
*
**************************************************************/
/*
* Copyright (c) 2001-2002 Torrey T. Lyons. All Rights Reserved.
* Copyright (c) 2001-2003 Torrey T. Lyons. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -29,7 +29,7 @@
* holders shall not be used in advertising or otherwise to promote the sale,
* use or other dealings in this Software without prior written authorization.
*/
/* $XFree86: xc/programs/Xserver/hw/darwin/darwin.c,v 1.50 2003/02/26 09:21:33 dawes Exp $ */
/* $XFree86: xc/programs/Xserver/hw/darwin/darwin.c,v 1.55 2003/11/15 00:07:09 torrey Exp $ */
#include "X.h"
#include "Xproto.h"
@@ -52,6 +52,7 @@
#include <sys/syslimits.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define NO_CFPLUGIN
#include <IOKit/IOKitLib.h>
@@ -60,8 +61,6 @@
#include "darwin.h"
#include "darwinClut8.h"
#include "quartz/quartz.h"
#include "xfIOKit.h"
/*
* X server shared global variables
@@ -69,9 +68,9 @@
int darwinScreensFound = 0;
int darwinScreenIndex = 0;
io_connect_t darwinParamConnect = 0;
int darwinEventFD = -1;
Bool quartz = FALSE;
int quartzMouseAccelChange = 1;
int darwinEventReadFD = -1;
int darwinEventWriteFD = -1;
int darwinMouseAccelChange = 1;
int darwinFakeButtons = 0;
// location of X11's (0,0) point in global screen coordinates
@@ -113,7 +112,7 @@ const int NUMFORMATS = sizeof(formats)/sizeof(formats[0]);
#define PRE_RELEASE XF86_VERSION_SNAP
#endif
static void
void
DarwinPrintBanner()
{
#if PRE_RELEASE
@@ -193,11 +192,7 @@ static Bool DarwinAddScreen(
SCREEN_PRIV(pScreen) = dfb;
// setup hardware/mode specific details
if (quartz) {
ret = QuartzAddScreen(foundIndex, pScreen);
} else {
ret = XFIOKitAddScreen(foundIndex, pScreen);
}
ret = DarwinModeAddScreen(foundIndex, pScreen);
foundIndex++;
if (! ret)
return FALSE;
@@ -276,14 +271,8 @@ static Bool DarwinAddScreen(
pScreen->SaveScreen = DarwinSaveScreen;
// finish mode dependent screen setup including cursor support
if (quartz) {
if (! QuartzSetupScreen(index, pScreen)) {
return FALSE;
}
} else {
if (! XFIOKitSetupScreen(index, pScreen)) {
return FALSE;
}
if (!DarwinModeSetupScreen(index, pScreen)) {
return FALSE;
}
// create and install the default colormap and
@@ -337,7 +326,7 @@ static void DarwinChangePointerControl(
kern_return_t kr;
double acceleration;
if (!quartzMouseAccelChange)
if (!darwinMouseAccelChange)
return;
acceleration = ctrl->num / ctrl->den;
@@ -378,13 +367,13 @@ static int DarwinMouseProc(
case DEVICE_ON:
pPointer->public.on = TRUE;
AddEnabledDevice( darwinEventFD );
AddEnabledDevice( darwinEventReadFD );
return Success;
case DEVICE_CLOSE:
case DEVICE_OFF:
pPointer->public.on = FALSE;
RemoveEnabledDevice( darwinEventFD );
RemoveEnabledDevice( darwinEventReadFD );
return Success;
}
@@ -404,11 +393,11 @@ static int DarwinKeybdProc( DeviceIntPtr pDev, int onoff )
break;
case DEVICE_ON:
pDev->public.on = TRUE;
AddEnabledDevice( darwinEventFD );
AddEnabledDevice( darwinEventReadFD );
break;
case DEVICE_OFF:
pDev->public.on = FALSE;
RemoveEnabledDevice( darwinEventFD );
RemoveEnabledDevice( darwinEventReadFD );
break;
case DEVICE_CLOSE:
break;
@@ -529,12 +518,61 @@ void InitInput( int argc, char **argv )
darwinKeyboard = AddInputDevice(DarwinKeybdProc, TRUE);
RegisterKeyboardDevice( darwinKeyboard );
DarwinEQInit( (DevicePtr)darwinKeyboard, (DevicePtr)darwinPointer );
if (serverGeneration == 1) {
DarwinEQInit( (DevicePtr)darwinKeyboard, (DevicePtr)darwinPointer );
}
if (quartz) {
QuartzInitInput(argc, argv);
} else {
XFIOKitInitInput(argc, argv);
DarwinModeInitInput(argc, argv);
}
/*
* DarwinAdjustScreenOrigins
* Shift all screens so the X11 (0, 0) coordinate is at the top
* left of the global screen coordinates.
*
* Screens can be arranged so the top left isn't on any screen, so
* instead use the top left of the leftmost screen as (0,0). This
* may mean some screen space is in -y, but it's better that (0,0)
* be onscreen, or else default xterms disappear. It's better that
* -y be used than -x, because when popup menus are forced
* "onscreen" by dumb window managers like twm, they'll shift the
* menus down instead of left, which still looks funny but is an
* easier target to hit.
*/
void
DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo)
{
int i, left, top;
left = dixScreenOrigins[0].x;
top = dixScreenOrigins[0].y;
/* Find leftmost screen. If there's a tie, take the topmost of the two. */
for (i = 1; i < pScreenInfo->numScreens; i++) {
if (dixScreenOrigins[i].x < left ||
(dixScreenOrigins[i].x == left &&
dixScreenOrigins[i].y < top))
{
left = dixScreenOrigins[i].x;
top = dixScreenOrigins[i].y;
}
}
darwinMainScreenX = left;
darwinMainScreenY = top;
/* Shift all screens so that there is a screen whose top left
is at X11 (0,0) and at global screen coordinate
(darwinMainScreenX, darwinMainScreenY). */
if (darwinMainScreenX != 0 || darwinMainScreenY != 0) {
for (i = 0; i < pScreenInfo->numScreens; i++) {
dixScreenOrigins[i].x -= darwinMainScreenX;
dixScreenOrigins[i].y -= darwinMainScreenY;
ErrorF("Screen %d placed at X11 coordinate (%d,%d).\n",
i, dixScreenOrigins[i].x, dixScreenOrigins[i].y);
}
}
}
@@ -554,7 +592,7 @@ void InitInput( int argc, char **argv )
*/
void InitOutput( ScreenInfo *pScreenInfo, int argc, char **argv )
{
int i, left, top;
int i;
static unsigned long generation = 0;
pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER;
@@ -574,55 +612,14 @@ void InitOutput( ScreenInfo *pScreenInfo, int argc, char **argv )
}
// Discover screens and do mode specific initialization
if (quartz) {
QuartzInitOutput(argc, argv);
} else {
XFIOKitInitOutput(argc, argv);
}
DarwinModeInitOutput(argc, argv);
// Add screens
for (i = 0; i < darwinScreensFound; i++) {
AddScreen( DarwinAddScreen, argc, argv );
}
// Shift all screens so the X11 (0, 0) coordinate is at the top left
// of the global screen coordinates.
// Screens can be arranged so the top left isn't on any screen,
// so instead use the top left of the leftmost screen as (0,0).
// This may mean some screen space is in -y, but it's better
// that (0,0) be onscreen, or else default xterms disappear.
// It's better that -y be used than -x, because when popup
// menus are forced "onscreen" by dumb window managers like twm,
// they'll shift the menus down instead of left, which still looks
// funny but is an easier target to hit.
left = dixScreenOrigins[0].x;
top = dixScreenOrigins[0].y;
// Find leftmost screen. If there's a tie, take the topmost of the two.
for (i = 1; i < pScreenInfo->numScreens; i++) {
if (dixScreenOrigins[i].x < left ||
(dixScreenOrigins[i].x == left &&
dixScreenOrigins[i].y < top))
{
left = dixScreenOrigins[i].x;
top = dixScreenOrigins[i].y;
}
}
darwinMainScreenX = left;
darwinMainScreenY = top;
// Shift all screens so that there is a screen whose top left
// is at X11 (0,0) and at global screen coordinate
// (darwinMainScreenX, darwinMainScreenY).
if (darwinMainScreenX != 0 || darwinMainScreenY != 0) {
for (i = 0; i < pScreenInfo->numScreens; i++) {
dixScreenOrigins[i].x -= darwinMainScreenX;
dixScreenOrigins[i].y -= darwinMainScreenY;
ErrorF("Screen %d placed at X11 coordinate (%d,%d).\n",
i, dixScreenOrigins[i].x, dixScreenOrigins[i].y);
}
}
DarwinAdjustScreenOrigins(pScreenInfo);
}
@@ -648,13 +645,16 @@ void OsVendorInit(void)
// Find the full path to the keymapping file.
if ( darwinKeymapFile ) {
char *tempStr = DarwinFindLibraryFile(darwinKeymapFile, "Keyboards");
if ( !tempStr )
FatalError("Could not find keymapping file %s.\n",
darwinKeymapFile);
if ( !tempStr ) {
ErrorF("Could not find keymapping file %s.\n", darwinKeymapFile);
} else {
ErrorF("Using keymapping provided in %s.\n", tempStr);
}
darwinKeymapFile = tempStr;
ErrorF("Using keymapping provided in %s.\n", darwinKeymapFile);
} else {
ErrorF("Reading keymapping from the kernel.\n");
}
if ( !darwinKeymapFile ) {
ErrorF("Reading keymap from the system.\n");
}
}
@@ -667,12 +667,10 @@ void OsVendorInit(void)
*/
int ddxProcessArgument( int argc, char *argv[], int i )
{
#ifdef DARWIN_WITH_QUARTZ
int numDone;
if ((numDone = QuartzProcessArgument( argc, argv, i )))
if ((numDone = DarwinModeProcessArgument( argc, argv, i )))
return numDone;
#endif
if ( !strcmp( argv[i], "-fakebuttons" ) ) {
darwinFakeButtons = TRUE;
@@ -833,11 +831,7 @@ void ddxGiveUp( void )
{
ErrorF( "Quitting XDarwin...\n" );
if (quartz) {
QuartzGiveUp();
} else {
XFIOKitGiveUp();
}
DarwinModeGiveUp();
}