/************************************************************** * * Startup code for the Quartz Darwin X Server * * Copyright (c) 2001-2004 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"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name(s) of the above copyright * holders shall not be used in advertising or otherwise to promote the sale, * use or other dealings in this Software without prior written authorization. */ #include #include #include #include "quartzCommon.h" #include "darwin.h" #include "quartz.h" #include "opaque.h" #include "micmap.h" #include char **envpGlobal; // argcGlobal and argvGlobal // are from dix/globals.c void X11ControllerMain(int argc, char *argv[], void (*server_thread) (void *), void *server_arg); static void server_thread (void *arg) { extern int main(int argc, char **argv, char **envp); exit (main (argcGlobal, argvGlobal, envpGlobal)); } /* * DarwinHandleGUI * This function is called first from main(). The first time * it is called we start the Mac OS X front end. The front end * will call main() again from another thread to run the X * server. On the second call this function loads the user * preferences set by the Mac OS X front end. */ void DarwinHandleGUI( int argc, char *argv[], char *envp[] ) { static Bool been_here = FALSE; int i; int fd[2]; if (been_here) { return; } been_here = TRUE; // Make a pipe to pass events assert( pipe(fd) == 0 ); darwinEventReadFD = fd[0]; darwinEventWriteFD = fd[1]; fcntl(darwinEventReadFD, F_SETFL, O_NONBLOCK); // Store command line arguments to pass back to main() argcGlobal = argc; argvGlobal = argv; envpGlobal = envp; quartzStartClients = 1; for (i = 1; i < argc; i++) { // Display version info without starting Mac OS X UI if requested if (!strcmp( argv[i], "-showconfig" ) || !strcmp( argv[i], "-version" )) { DarwinPrintBanner(); exit(0); } // Determine if we need to start X clients // and what display mode to use if (!strcmp(argv[i], "-nostartx")) { quartzStartClients = 0; } else if (!strcmp( argv[i], "-fullscreen")) { quartzRootless = 0; } else if (!strcmp( argv[i], "-rootless")) { quartzRootless = 1; } } extern void _InitHLTB(void); _InitHLTB(); X11ControllerMain(argc, argv, server_thread, NULL); exit(0); }