040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * All Rights Reserved.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Permission is hereby granted, free of charge, to any person obtaining
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * a copy of this software and associated documentation files (the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * "Software"), to deal in the Software without restriction, including
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * without limitation on the rights to use, copy, modify, merge,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * publish, distribute, sublicense, and/or sell copies of the Software,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * and to permit persons to whom the Software is furnished to do so,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * subject to the following conditions:
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * The above copyright notice and this permission notice (including the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * next paragraph) shall be included in all copies or substantial
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * portions of the Software.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * SOFTWARE.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Kevin E. Martin <kem@redhat.com>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * David H. Dawes <dawes@xfree86.org>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Rickard E. (Rik) Faith <faith@redhat.com>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Main header file included by all other DMX-related files.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** \mainpage
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * - <a href="http://dmx.sourceforge.net">DMX Home Page</a>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * - <a href="http://sourceforge.net/projects/dmx">DMX Project Page (on
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Source Forge)</a>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * - <a href="http://dmx.sourceforge.net/dmx.html">Distributed Multihead
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * X design</a>, the design document for DMX
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * - <a href="http://dmx.sourceforge.net/DMXSpec.txt">Client-to-Server
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * DMX Extension to the X Protocol</a>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* Handle client-side include files in one place. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef enum {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** Provide the typedef globally, but keep the contents opaque outside
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * of the input routines. \see dmxinput.h */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** Provide the typedef globally, but keep the contents opaque outside
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * of the XSync statistic routines. \see dmxstat.c */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** Global structure containing information about each backend screen. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const char *name; /**< Name from command line or config file */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /*---------- Back-end X server information ----------*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Display *beDisplay; /**< Back-end X server's display */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int beNumDepths; /**< Number of depths on BE server */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int beNumPixmapFormats; /**< Number of pixmap formats on BE */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XPixmapFormatValues *bePixmapFormats; /**< Pixmap formats on BE */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XVisualInfo *beVisuals; /**< Visuals from BE server */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int beDefVisualIndex; /**< Default visual index of BE */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int beNumDefColormaps; /**< Number of default colormaps */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Colormap *beDefColormaps; /**< Default colormaps for DMX server */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Pixel beBlackPixel; /**< Default black pixel for BE */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Pixel beWhitePixel; /**< Default white pixel for BE */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /*---------- Screen window information ----------*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Window scrnWin; /**< "Screen" window on backend display */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int scrnX; /**< X offset of "screen" WRT BE display */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int scrnY; /**< Y offset of "screen" WRT BE display */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Default drawables for "screen" */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync struct _DMXScreenInfo *next; /**< List of "screens" on same display */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync struct _DMXScreenInfo *over; /**< List of "screens" that overlap */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /*---------- Root window information ----------*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Window rootWin; /**< "Root" window on backend display */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int rootX; /**< X offset of "root" window WRT "screen"*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int rootY; /**< Y offset of "root" window WRT "screen"*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int rootXOrigin; /**< Global X origin of "root" window */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int rootYOrigin; /**< Global Y origin of "root" window */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /*---------- Shadow framebuffer information ----------*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *shadow; /**< Shadow framebuffer data (if enabled) */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XlibGC shadowGC; /**< Default GC used by shadow FB code */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XImage *shadowFBImage; /**< Screen image used by shadow FB code */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /*---------- Other related information ----------*/
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int shared; /**< Non-zero if another Xdmx is running */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* Support for cursors on overlapped
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * backend displays. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int cursorNotShared; /* for overlapping screens on a backend */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PositionType where; /**< Relative layout information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int whereRefScreen; /**< Relative layout information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int savedTimeout; /**< Original screen saver timeout */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int dpmsCapable; /**< Non-zero if backend is DPMS capable */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int dpmsStandby; /**< Original DPMS standby value */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int dpmsSuspend; /**< Original DPMS suspend value */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool needsSync; /**< True if an XSync is pending */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Visual information for glxProxy */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** FB config information for glxProxy */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Function pointers to wrapped screen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * functions */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ChangeWindowAttributesProcPtr ChangeWindowAttributes;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* Global variables available to all Xserver/hw/dmx routines. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int dmxNumScreens; /**< Number of dmxScreens */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern DMXScreenInfo *dmxScreens; /**< List of outputs */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * shadow frame-buffer
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * (deprecated) */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern XErrorEvent dmxLastErrorEvent; /**< Last error that
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * occurred */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * occurred */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * optimizations */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern Bool dmxSubdividePrimitives; /**< True if using the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * primitive subdivision
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * optimization */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern Bool dmxLazyWindowCreation; /**< True if using the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * lazy window creation
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * optimization */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * extension should be
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * used with the backend
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * servers */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * non-zero */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * support is enabled */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern Bool dmxGLXSwapGroupSupport; /**< True if glxProxy
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * support for swap
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * groups and barriers
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * is enabled */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * should force an XSync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * request after each
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * swap buffers call */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * should force a
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * glFinish request
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * after each swap
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * buffers call */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * path is set on the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * command line;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * otherwise, a string
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * of comma separated
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * paths built from the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * command line
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * specified font
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern Bool dmxIgnoreBadFontPaths; /**< True if bad font
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * paths should be
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * ignored during server
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern Bool dmxAddRemoveScreens; /**< True if add and
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * remove screens support
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * is enabled */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** Wrap screen or GC function pointer */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define DMX_WRAP(_entry, _newfunc, _saved, _actual) \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/** Unwrap screen or GC function pointer */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* Define the MAXSCREENSALLOC/FREE macros, when MAXSCREENS patch has not
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * been applied to sources. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREEN_MAKECONSTSTR2(x) MAXSCREEN_MAKECONSTSTR1(x)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync MAXSCREEN_MAKECONSTSTR2(__LINE__) ":" __FILE__ "] to allocate object: "
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (!o) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (!o && fatal) FatalError(MAXSCREEN_FAILED_TXT #o); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } while (0)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (!o) { \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (!o) return retval; \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } while (0)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync if (o) xfree(o); \
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync } while (0)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSALLOC(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 0)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSALLOC_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 1)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSALLOC_RETURN(o,r) _MAXSCREENSALLOCR(o,MAXSCREENS, (r))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSALLOCPLUSONE(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,0)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSALLOCPLUSONE_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,1)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSCALLOC(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),0)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define MAXSCREENSCALLOC_FATAL(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),1)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* DMX_H */