screen.h revision 0bbfda8a
1645f5050Syouri/*
20bbfda8aSnia * twm per-screen data include file
3645f5050Syouri *
4645f5050Syouri *
50bbfda8aSnia * Copyright 1989 Massachusetts Institute of Technology
6645f5050Syouri *
70bbfda8aSnia * $XConsortium: screen.h,v 1.62 91/05/01 17:33:09 keith Exp $
8645f5050Syouri *
90bbfda8aSnia * 11-3-88 Dave Payne, Apple Computer                   File created
10645f5050Syouri *
110bbfda8aSnia * Copyright 1992 Claude Lecommandeur.
12645f5050Syouri */
13645f5050Syouri
140bbfda8aSnia#ifndef _CTWM_SCREEN_H
150bbfda8aSnia#define _CTWM_SCREEN_H
160bbfda8aSnia
170bbfda8aSnia/* Needed for doxygen to get at the #define's for config (like EMWH) */
180bbfda8aSnia#ifdef DOXYGEN
190bbfda8aSnia# include "ctwm_config.h"
20645f5050Syouri#endif
21645f5050Syouri
220bbfda8aSnia#include "menus.h"  // embedded MouseButton/Func{Button,Key}
230bbfda8aSnia#include "workspace_structs.h"  // embedded ScreenInfo.workSpaceMgr
240bbfda8aSnia
250bbfda8aSnia
260bbfda8aSnia/**
270bbfda8aSnia * Type for iconification styles.  Options correspond to the values in
280bbfda8aSnia * IconifyStyle config var.  \sa ScreenInfo.IconifyStyle   \todo Maybe
290bbfda8aSnia * should just be moved inline in ScreenInfo struct, since it's never
300bbfda8aSnia * directly used elsewhere.
310bbfda8aSnia */
320bbfda8aSniatypedef enum {
330bbfda8aSnia	ICONIFY_NORMAL,
340bbfda8aSnia	ICONIFY_MOSAIC,
350bbfda8aSnia	ICONIFY_ZOOMIN,
360bbfda8aSnia	ICONIFY_ZOOMOUT,
370bbfda8aSnia	ICONIFY_FADE,
380bbfda8aSnia	ICONIFY_SWEEP,
390bbfda8aSnia} IcStyle;
400bbfda8aSnia
410bbfda8aSnia
420bbfda8aSnia/**
430bbfda8aSnia * Information about some XStandardColormap we're using.  See Xlib docs
440bbfda8aSnia * for details.
450bbfda8aSnia */
460bbfda8aSniastruct StdCmap {
470bbfda8aSnia	struct StdCmap *next;               /* next link in chain */
480bbfda8aSnia	Atom atom;                          /* property from which this came */
490bbfda8aSnia	int nmaps;                          /* number of maps below */
500bbfda8aSnia	XStandardColormap *maps;            /* the actual maps */
51645f5050Syouri};
52645f5050Syouri
530bbfda8aSnia
540bbfda8aSnia/**
550bbfda8aSnia * Internal padding in the size window.  \sa ScreenInfo.SizeWindow
560bbfda8aSnia * \todo Possibly these should be in another header...
570bbfda8aSnia */
58645f5050Syouri#define SIZE_HINDENT 10
590bbfda8aSnia#define SIZE_VINDENT 2  ///< \copydoc #SIZE_HINDENT
60645f5050Syouri
61645f5050Syouri
620bbfda8aSnia/**
630bbfda8aSnia * Stash for memoizing various pixmaps used in titlebars.
640bbfda8aSnia * \sa the TBPM_* constants in image.h
650bbfda8aSnia * \todo This probably doesn't need to live on its own, since it only
660bbfda8aSnia * exists to define a member in the ScreenInfo struct.  Maybe it should
670bbfda8aSnia * just be moved to being defined nested in there...
68645f5050Syouri */
690bbfda8aSniastruct TitlebarPixmaps {
700bbfda8aSnia	Pixmap xlogo;    ///< #TBPM_XLOGO
710bbfda8aSnia	Pixmap resize;   ///< #TBPM_RESIZE
720bbfda8aSnia	Pixmap question; ///< #TBPM_QUESTION
730bbfda8aSnia	Pixmap menu;     ///< #TBPM_MENU
740bbfda8aSnia	Pixmap delete;   ///< #TBPM_DOT
750bbfda8aSnia};
760bbfda8aSnia
77645f5050Syouri
780bbfda8aSnia/**
790bbfda8aSnia * Info and control for each X Screen we control.
800bbfda8aSnia *
810bbfda8aSnia * We start up on an X Display (e.g., ":0"), and by default try to take
820bbfda8aSnia * over each X Screen on that display (e.g, ":0.0", ":0.1", ...).  Each
830bbfda8aSnia * of those Screens will have its own ScreenInfo.
840bbfda8aSnia *
850bbfda8aSnia * This contains pure physical or X info (size, coordinates, color
860bbfda8aSnia * depth), ctwm info (lists of windows on it, window rings, how it fits
870bbfda8aSnia * with other Screens we control), most of the config file settings which
880bbfda8aSnia * may differ from Screen to Screen, menus, special windows (Occupy,
890bbfda8aSnia * Identify, etc), and piles of other stuff.
900bbfda8aSnia *
910bbfda8aSnia * \note
920bbfda8aSnia * Possibly this should be broken up somewhat.  e.g., much of the
930bbfda8aSnia * config-related bits pulled out into their own structure, which could
940bbfda8aSnia * allow decoupling the config parsing from the X screens a bit.
950bbfda8aSnia */
960bbfda8aSniastruct ScreenInfo {
970bbfda8aSnia	int screen;       ///< Which screen (i.e., the x after the dot in ":0.x")
980bbfda8aSnia
990bbfda8aSnia	/// Whether we're taking over this screen.  Usually true, unless
1000bbfda8aSnia	/// running captive or \--cfgchk
1010bbfda8aSnia	bool takeover;
1020bbfda8aSnia
1030bbfda8aSnia	int d_depth;      ///< Copy of DefaultDepth(dpy, screen)
1040bbfda8aSnia	Visual *d_visual; ///< Copy of DefaultVisual(dpy, screen)
1050bbfda8aSnia	int Monochrome;   ///< Is the display monochrome?
1060bbfda8aSnia
1070bbfda8aSnia	/**
1080bbfda8aSnia	 * The x coordinate of the root window relative to RealRoot.  This is
1090bbfda8aSnia	 * usually 0, except in the case of captive mode where it shows where
1100bbfda8aSnia	 * we are on the real screen, or when we have VirtualScreens and are
1110bbfda8aSnia	 * positioning our real Screens on a virtual RealRoot.
1120bbfda8aSnia	 */
1130bbfda8aSnia	int rootx;
1140bbfda8aSnia	/// The y coordinate of the root window relative to RealRoot.
1150bbfda8aSnia	/// \copydetails rootx
1160bbfda8aSnia	int rooty;
1170bbfda8aSnia
1180bbfda8aSnia	int rootw; ///< Copy of DisplayWidth(dpy, screen)
1190bbfda8aSnia	int rooth; ///< Copy of DisplayHeight(dpy, screen)
1200bbfda8aSnia
1210bbfda8aSnia	/**
1220bbfda8aSnia	 * \defgroup scr_captive_bits Captive ctwm bits
1230bbfda8aSnia	 * These are various fields related to running a captive ctwm (i.e.,
1240bbfda8aSnia	 * with \--window).  They'll generally be empty for non-captive
1250bbfda8aSnia	 * invocations, or describe our position inside the "outside" world
1260bbfda8aSnia	 * if we are.
1270bbfda8aSnia	 * @{
1280bbfda8aSnia	 */
1290bbfda8aSnia	/// The name of the captive root window if any.  Autogen'd or set
1300bbfda8aSnia	/// with \--name
1310bbfda8aSnia	char *captivename;
1320bbfda8aSnia	/// The x coordinate of the captive root window if any.
1330bbfda8aSnia	int crootx;
1340bbfda8aSnia	/// The y coordinate of the captive root window if any.
1350bbfda8aSnia	int crooty;
1360bbfda8aSnia	/// Initially copy of DisplayWidth(dpy, screen).  See also
1370bbfda8aSnia	/// ConfigureCaptiveRootWindow()
1380bbfda8aSnia	int crootw;
1390bbfda8aSnia	/// Initially copy of DisplayHeight(dpy, screen).
1400bbfda8aSnia	/// \copydetails crootw
1410bbfda8aSnia	int crooth;
1420bbfda8aSnia	/// @}
1430bbfda8aSnia
1440bbfda8aSnia	int MaxWindowWidth;   ///< Largest window width to allow
1450bbfda8aSnia	int MaxWindowHeight;  ///< Largest window height to allow
1460bbfda8aSnia
1470bbfda8aSnia	/// The head of the screen's twm window list.  This is used for
1480bbfda8aSnia	/// places where we need to iterate over the TwmWindow's in a single
1490bbfda8aSnia	/// Screen, by following the TwmWindow.next pointers.
1500bbfda8aSnia	TwmWindow *FirstWindow;
1510bbfda8aSnia
1520bbfda8aSnia	Colormaps RootColormaps;  ///< The colormaps of the root window
1530bbfda8aSnia
1540bbfda8aSnia
1550bbfda8aSnia	/**
1560bbfda8aSnia	 * \defgroup scr_roots Various root and pseudo-root Windows.
1570bbfda8aSnia	 * These are the various forms of root and almost-root windows that
1580bbfda8aSnia	 * things on this Screen reside in.  It's probable that there's a lot
1590bbfda8aSnia	 * of confusion of these, and they get set, reset, and used
1600bbfda8aSnia	 * incorrectly in a lot of places.  We mostly get away with it
1610bbfda8aSnia	 * because in normal usage, they're often all identical.
1620bbfda8aSnia	 *
1630bbfda8aSnia	 * \verbatim
1640bbfda8aSnia	 *
1650bbfda8aSnia	 *  +--RealRoot-----------------------------------------------------------+
1660bbfda8aSnia	 *  | the root of the display (most uses of this are probably incorrect!) |
1670bbfda8aSnia	 *  |                                                                     |
1680bbfda8aSnia	 *  |   +--CaptiveRoot--------------------------------------------------+ |
1690bbfda8aSnia	 *  |   | when captive window is used (most uses are likely incorrect!) | |
1700bbfda8aSnia	 *  |   |                                                               | |
1710bbfda8aSnia	 *  |   | +--XineramaRoot---------------------------------------------+ | |
1720bbfda8aSnia	 *  |   | | the root that encompasses all virtual screens             | | |
1730bbfda8aSnia	 *  |   | |                                                           | | |
1740bbfda8aSnia	 *  |   | | +--Root-----------+ +--Root--------+ +--Root------------+ | | |
1750bbfda8aSnia	 *  |   | | | one or more     | | Most cases   | |                  | | | |
1760bbfda8aSnia	 *  |   | | | virtual screens | | use Root.    | |                  | | | |
1770bbfda8aSnia	 *  |   | | |                 | |              | |                  | | | |
1780bbfda8aSnia	 *  |   | | |                 | |              | |                  | | | |
1790bbfda8aSnia	 *  |   | | +-----------------+ +--------------+ +------------------+ | | |
1800bbfda8aSnia	 *  |   | +-----------------------------------------------------------+ | |
1810bbfda8aSnia	 *  |   +---------------------------------------------------------------+ |
1820bbfda8aSnia	 *  +---------------------------------------------------------------------+
1830bbfda8aSnia	 * \endverbatim
1840bbfda8aSnia	 *
1850bbfda8aSnia	 * @{
1860bbfda8aSnia	 */
1870bbfda8aSnia
1880bbfda8aSnia	/**
1890bbfda8aSnia	 * Root window for the current vscreen.  Initially either the real X
1900bbfda8aSnia	 * RootWindow(), or the existing or created Window for a captive
1910bbfda8aSnia	 * ctwm.  Gets reset to a vscreen's window in InitVirtualScreens().
1920bbfda8aSnia	 */
1930bbfda8aSnia	Window Root;
1940bbfda8aSnia
1950bbfda8aSnia	/**
1960bbfda8aSnia	 * Root window holding our vscreens.  Initialized to the same value
1970bbfda8aSnia	 * as ScreenInfo.Root, and isn't changed afterward.
1980bbfda8aSnia	 */
1990bbfda8aSnia	Window XineramaRoot;
2000bbfda8aSnia	/// The captive root window, if any, or None
2010bbfda8aSnia	Window CaptiveRoot;
2020bbfda8aSnia	/// The actual X root window of the display.  This is always X's
2030bbfda8aSnia	/// RootWindow().
2040bbfda8aSnia	Window RealRoot;
2050bbfda8aSnia	/// @}
2060bbfda8aSnia
2070bbfda8aSnia
2080bbfda8aSnia	/**
2090bbfda8aSnia	 * Dimensions/coordinates window.  This is the small window (usually
2100bbfda8aSnia	 * in the upper left of the screen, unless
2110bbfda8aSnia	 * ScreenInfo.CenterFeedbackWindow is set) that shows
2120bbfda8aSnia	 * dimensions/coordinates for resize/move operations.
2130bbfda8aSnia	 */
2140bbfda8aSnia	Window SizeWindow;
2150bbfda8aSnia
2160bbfda8aSnia	/**
2170bbfda8aSnia	 * Window info window.  This is the window that pops up with the
2180bbfda8aSnia	 * various information when you f.identify a window, and also the
2190bbfda8aSnia	 * truncated version of that that f.version pulls up.
2200bbfda8aSnia	 */
2210bbfda8aSnia	struct _InfoWindow {
2220bbfda8aSnia		Window       win;          ///< Actual X window
2230bbfda8aSnia		bool         mapped;       ///< Whether it's currently up
2240bbfda8aSnia		int          lines;        ///< Current number of lines
2250bbfda8aSnia		unsigned int width;        ///< Current size
2260bbfda8aSnia		unsigned int height;       ///< Current size
2270bbfda8aSnia	} InfoWindow; ///< \copydoc ScreenInfo::_InfoWindow
2280bbfda8aSnia	/*
2290bbfda8aSnia	 * Naming this struct type is pointless, but necessary for doxygen to
2300bbfda8aSnia	 * not barf on it.  The copydoc is needed so the desc shows up in the
2310bbfda8aSnia	 * ScreenInfo docs as well as the struct's own.
2320bbfda8aSnia	 */
2330bbfda8aSnia
2340bbfda8aSnia	/**
2350bbfda8aSnia	 * \defgroup scr_maskwin Screen masking window stuff
2360bbfda8aSnia	 * These are bits for a window that covers up everything on the
2370bbfda8aSnia	 * screen during startup if we're showing the "Welcome window"
2380bbfda8aSnia	 * splash screen.  That is, if ScreenInfo.ShowWelcomeWindow is true.
2390bbfda8aSnia	 * @{
2400bbfda8aSnia	 */
2410bbfda8aSnia	/// Startup splash screen masking window if
2420bbfda8aSnia	/// ScreenInfo.ShowWelcomeWindow
2430bbfda8aSnia	Window WindowMask;
2440bbfda8aSnia	/// Utility window for animated icons
2450bbfda8aSnia	Window ShapeWindow;
2460bbfda8aSnia	/// Image to show on ScreenInfo.WindowMask
2470bbfda8aSnia	Image *WelcomeImage;
2480bbfda8aSnia	/// GC for drawing ScreenInfo.WelcomeImage on ScreenInfo.WindowMask
2490bbfda8aSnia	GC     WelcomeGC;
2500bbfda8aSnia	/// Colormap for ScreenInfo.WindowMask
2510bbfda8aSnia	Colormap WelcomeCmap;
2520bbfda8aSnia	/// @}
2530bbfda8aSnia
2540bbfda8aSnia	name_list *ImageCache;  ///< Cached pixmaps used in image loading
2550bbfda8aSnia	TitlebarPixmaps tbpm;   ///< Memoized titlebar pixmaps
2560bbfda8aSnia	Image *UnknownImage;    ///< Fallback icon pixmap
2570bbfda8aSnia	Pixmap siconifyPm;      ///< In-icon manager iconifed marker pixmap
2580bbfda8aSnia	Pixmap pullPm;          ///< In-menu submenu item marker icon
2590bbfda8aSnia	unsigned int pullW;     ///< Dimensions of ScreenInfo.pullPm
2600bbfda8aSnia	unsigned int pullH;     ///< Dimensions of ScreenInfo.pullPm
2610bbfda8aSnia
2620bbfda8aSnia	/**
2630bbfda8aSnia	 * Name of titlebar focus hilite image if any.  This is an
2640bbfda8aSnia	 * alternative to the builtin shading on the titlebar when a window
2650bbfda8aSnia	 * has focus.  See Pixmaps config var.
2660bbfda8aSnia	 */
2670bbfda8aSnia	char *HighlightPixmapName;
2680bbfda8aSnia
2690bbfda8aSnia	/// \defgroup scr_menu_bits Various menus
2700bbfda8aSnia	/// These hold references to the various menus on the Screen.
2710bbfda8aSnia	/// @{
2720bbfda8aSnia	MenuRoot *MenuList;    ///< Head of the menu list
2730bbfda8aSnia	MenuRoot *LastMenu;    ///< Temp var used in creating the Screen's menus
2740bbfda8aSnia	MenuRoot *Windows;     ///< f.menu TwmWindows
2750bbfda8aSnia	MenuRoot *Icons;       ///< f.menu TwmIcons
2760bbfda8aSnia	MenuRoot *Workspaces;  ///< f.menu TwmWorkspaces
2770bbfda8aSnia	MenuRoot *AllWindows;  ///< f.menu TwmAllWindows
2780bbfda8aSnia
2790bbfda8aSnia	/*Added by dl 2004 */
2800bbfda8aSnia	MenuRoot *AllIcons;    ///< f.menu TwmAllIcons
2810bbfda8aSnia
2820bbfda8aSnia	/* Added by Dan Lilliehorn (dl@dl.nu) 2000-02-29)     */
2830bbfda8aSnia	MenuRoot *Keys;        ///< f.menu TwmKeys
2840bbfda8aSnia	MenuRoot *Visible;     ///< f.menu TwmVisible
2850bbfda8aSnia
2860bbfda8aSnia	/// @}
2870bbfda8aSnia
2880bbfda8aSnia	TwmWindow *Ring;       ///< One of the windows in the Screen's ring
2890bbfda8aSnia	TwmWindow *RingLeader; ///< Current window in ring
2900bbfda8aSnia
2910bbfda8aSnia	MouseButton DefaultFunction;   ///< DefaultFunction config var
2920bbfda8aSnia	MouseButton WindowFunction;    ///< WindowFunction config var
2930bbfda8aSnia	MouseButton ChangeWorkspaceFunction; ///< ChangeWorkspaceFunction config var
2940bbfda8aSnia	MouseButton DeIconifyFunction; ///< DeIconifyFunction config var
2950bbfda8aSnia	MouseButton IconifyFunction;   ///< IconifyFunction config var
2960bbfda8aSnia
2970bbfda8aSnia	/// Various colormaps used on the Screen.  These probably have little
2980bbfda8aSnia	/// effect in a world where 24bpp is a baseline...
2990bbfda8aSnia	struct _cmapInfo {
3000bbfda8aSnia		Colormaps *cmaps;  ///< Current list of colormap windows
3010bbfda8aSnia		int maxCmaps;      ///< Maximum number of installed colormaps
3020bbfda8aSnia		/// seq # for first XInstallColormap() req in pass thru loading a
3030bbfda8aSnia		/// colortable list
3040bbfda8aSnia		unsigned long first_req;
3050bbfda8aSnia		/// current push level to install root colormap windows
3060bbfda8aSnia		int root_pushes;
3070bbfda8aSnia		/// saved colormaps to install when pushes drops to zero
3080bbfda8aSnia		Colormaps *pushed_cmaps;
3090bbfda8aSnia	} cmapInfo; ///< \copydoc ScreenInfo::_cmapInfo
3100bbfda8aSnia	///< \todo Somebody needs to understand and document this better.
3110bbfda8aSnia	// x-ref trailing comment on InfoWindow above
3120bbfda8aSnia
3130bbfda8aSnia	/**
3140bbfda8aSnia	 * Various XStandardColormaps on the screen.  See Xlib documentation
3150bbfda8aSnia	 * for XStandardColormaps (e.g.,
3160bbfda8aSnia	 * <https://www.x.org/releases/X11R7.7/doc/libX11/libX11/libX11.html#Standard_Colormaps>)
3170bbfda8aSnia	 * if you need to make sense of it.
3180bbfda8aSnia	 */
3190bbfda8aSnia	struct _StdCmapInfo {
3200bbfda8aSnia		StdCmap *head;         ///< list of maps
3210bbfda8aSnia		StdCmap *tail;         ///< list of maps
3220bbfda8aSnia		StdCmap *mru;          ///< Most recently used in list
3230bbfda8aSnia		int mruindex;          ///< index of mru in entry
3240bbfda8aSnia	} StdCmapInfo; ///< \copydoc ScreenInfo::_StdCmapInfo
3250bbfda8aSnia	///< \todo Somebody needs to understand and document this better.
3260bbfda8aSnia	// x-ref trailing comment on InfoWindow above
3270bbfda8aSnia
3280bbfda8aSnia	/**
3290bbfda8aSnia	 * Various titlebar buttons that will be put in the window
3300bbfda8aSnia	 * decorations for the screen.  This is setup by
3310bbfda8aSnia	 * InitTitlebarButtons() and possibly added to via
3320bbfda8aSnia	 * Left/RightTitleButton config vars.
3330bbfda8aSnia	 * \sa CreateWindowTitlebarButtons() where this gets used to build
3340bbfda8aSnia	 * the titlebar of an individual window.
3350bbfda8aSnia	 */
3360bbfda8aSnia	struct _TBInfo {
3370bbfda8aSnia		int nleft;         ///< numbers of buttons on left side
3380bbfda8aSnia		int nright;        ///< numbers of buttons on right side
3390bbfda8aSnia		TitleButton *head; ///< start of list
3400bbfda8aSnia		int border;        ///< button border
3410bbfda8aSnia		int pad;           ///< button-padding
3420bbfda8aSnia		int width;         ///< width of single button & border
3430bbfda8aSnia		int leftx;         ///< start of left buttons
3440bbfda8aSnia		int titlex;        ///< start of title
3450bbfda8aSnia		int rightoff;      ///< offset back from right edge
3460bbfda8aSnia		int titlew;        ///< width of title part
3470bbfda8aSnia	} TBInfo; ///< \copydoc ScreenInfo::_TBInfo
3480bbfda8aSnia	// x-ref trailing comment on InfoWindow above
3490bbfda8aSnia
3500bbfda8aSnia	/**
3510bbfda8aSnia	 * \defgroup scr_color_bits Various color definitions.
3520bbfda8aSnia	 * These define various colors we use for things on the screen.
3530bbfda8aSnia	 * They tend to come from things inside a Color {} section in the
3540bbfda8aSnia	 * config.  There are often correspondences between the "simple"
3550bbfda8aSnia	 * ColorPair or Pixel values (for the "normal" colors of each type)
3560bbfda8aSnia	 * and a name_list (for per-window settings of that type).
3570bbfda8aSnia	 * @{
3580bbfda8aSnia	 */
3590bbfda8aSnia	/// Border tile colors.  \sa ScreenInfo.BorderTileForegroundL
3600bbfda8aSnia	/// \sa ScreenInfo.BorderTileBackgroundL
3610bbfda8aSnia	ColorPair BorderTileC;
3620bbfda8aSnia
3630bbfda8aSnia	/// Titlebar colors  \sa ScreenInfo.TitleForegroundL
3640bbfda8aSnia	/// \sa ScreenInfo.TitleBackgroundL
3650bbfda8aSnia	ColorPair TitleC;
3660bbfda8aSnia
3670bbfda8aSnia	/// Menu colors
3680bbfda8aSnia	ColorPair MenuC;
3690bbfda8aSnia
3700bbfda8aSnia	/// Menu title colors
3710bbfda8aSnia	ColorPair MenuTitleC;
3720bbfda8aSnia
3730bbfda8aSnia	/// %Icon colors.  \sa ScreenInfo.IconForegroundL
3740bbfda8aSnia	/// \sa ScreenInfo.IconBackgroundL
3750bbfda8aSnia	ColorPair IconC;
3760bbfda8aSnia
3770bbfda8aSnia	/// %Icon manager colors.  \sa ScreenInfo.IconManagerFL
3780bbfda8aSnia	/// \sa ScreenInfo.IconManagerBL
3790bbfda8aSnia	ColorPair IconManagerC;
3800bbfda8aSnia
3810bbfda8aSnia	/// Default colors
3820bbfda8aSnia	ColorPair DefaultC;
3830bbfda8aSnia
3840bbfda8aSnia	/// Color of window borders.  \sa ScreenInfo.BorderColorL
3850bbfda8aSnia	ColorPair BorderColorC;
3860bbfda8aSnia
3870bbfda8aSnia	/// Specialized border colors for windows.  From BorderColor config
3880bbfda8aSnia	/// var.  \sa ScreenInfo.BorderColorC
3890bbfda8aSnia	name_list *BorderColorL;
3900bbfda8aSnia
3910bbfda8aSnia	/// Specialized border colors for icons.  From IconBorderColor config
3920bbfda8aSnia	/// var.  \sa ScreenInfo.IconBorderColor
3930bbfda8aSnia	name_list *IconBorderColorL;
3940bbfda8aSnia
3950bbfda8aSnia	/// Specialized border coloring.  From BorderTileForeground config
3960bbfda8aSnia	/// var.  \sa ScreenInfo.BorderTileC
3970bbfda8aSnia	name_list *BorderTileForegroundL;
3980bbfda8aSnia
3990bbfda8aSnia	/// \copydoc ScreenInfo::BorderTileForegroundL
4000bbfda8aSnia	name_list *BorderTileBackgroundL;
4010bbfda8aSnia
4020bbfda8aSnia	/// Specialized titlebar foreground coloring.  From TitleForeground
4030bbfda8aSnia	/// config var.  \sa ScreenInfo.TitleC
4040bbfda8aSnia	name_list *TitleForegroundL;
4050bbfda8aSnia
4060bbfda8aSnia	/// Specialized titlebar background coloring.  From TitleBackground
4070bbfda8aSnia	/// config var.  \sa ScreenInfo.TitleC
4080bbfda8aSnia	name_list *TitleBackgroundL;
4090bbfda8aSnia
4100bbfda8aSnia	/// Specialized icon foreground coloring.  From IconForeground
4110bbfda8aSnia	/// config var.  \sa ScreenInfo.IconC
4120bbfda8aSnia	name_list *IconForegroundL;
4130bbfda8aSnia
4140bbfda8aSnia	/// Specialized icon background coloring.  From IconBackground
4150bbfda8aSnia	/// config var.  \sa ScreenInfo.IconC
4160bbfda8aSnia	name_list *IconBackgroundL;
4170bbfda8aSnia
4180bbfda8aSnia	/// Specialized icon manager foreground coloring.  From
4190bbfda8aSnia	/// IconManagerForeground config var.  \sa ScreenInfo.IconManagerC
4200bbfda8aSnia	name_list *IconManagerFL;
4210bbfda8aSnia
4220bbfda8aSnia	/// Specialized icon manager background coloring.  From
4230bbfda8aSnia	/// IconManagerBackground config var.  \sa ScreenInfo.IconManagerC
4240bbfda8aSnia	name_list *IconManagerBL;
4250bbfda8aSnia
4260bbfda8aSnia	/// Color to highlight focused windows in icon manager.
4270bbfda8aSnia	/// \sa ScreenInfo.IconManagerHighlight
4280bbfda8aSnia	name_list *IconManagerHighlightL;
4290bbfda8aSnia
4300bbfda8aSnia	/// Menu shadow color
4310bbfda8aSnia	Pixel MenuShadowColor;
4320bbfda8aSnia
4330bbfda8aSnia	/// %Icon border color.  \sa ScreenInfo.IconBorderColorL
4340bbfda8aSnia	Pixel IconBorderColor;
4350bbfda8aSnia
4360bbfda8aSnia	/// %Icon manager highlight color.
4370bbfda8aSnia	/// \sa ScreenInfo.IconManagerHighlightL
4380bbfda8aSnia	Pixel IconManagerHighlight;
4390bbfda8aSnia
4400bbfda8aSnia	/// The contrast of the clear shadow
4410bbfda8aSnia	short ClearShadowContrast;
4420bbfda8aSnia
4430bbfda8aSnia	/// The contrast of the dark shadow
4440bbfda8aSnia	short DarkShadowContrast;
4450bbfda8aSnia	/// @}
4460bbfda8aSnia
4470bbfda8aSnia	/**
4480bbfda8aSnia	 * \defgroup scr_icon_bits Various icon control bits.
4490bbfda8aSnia	 * Various configurations for how icons get displayed and laid out.
4500bbfda8aSnia	 * @{
4510bbfda8aSnia	 */
4520bbfda8aSnia	/// How icon images/titles are aligned.  From IconJustification
4530bbfda8aSnia	/// config var.  X-ref IconRegion.TitleJustification.
4540bbfda8aSnia	TitleJust IconJustification;
4550bbfda8aSnia
4560bbfda8aSnia	/// How icons are laid out horizontally inside a region.  From
4570bbfda8aSnia	/// IconRegionJustificationconfig var.
4580bbfda8aSnia	IRJust IconRegionJustification;
4590bbfda8aSnia
4600bbfda8aSnia	/// How icons are laid out vertically inside a region.  From
4610bbfda8aSnia	/// IconRegionAlignement config var.
4620bbfda8aSnia	IRAlignement IconRegionAlignement;
4630bbfda8aSnia
4640bbfda8aSnia	/// How to animate window iconification, if any.  From IconifyStyle
4650bbfda8aSnia	/// config var.
4660bbfda8aSnia	IcStyle IconifyStyle;       /* ICONIFY_* */
4670bbfda8aSnia	/// Limit on icon title size.  From MaxIconTitleWidth config var.
4680bbfda8aSnia	int MaxIconTitleWidth;
4690bbfda8aSnia#ifdef EWMH
4700bbfda8aSnia	int PreferredIconWidth;     ///< Width from IconSize config var
4710bbfda8aSnia	int PreferredIconHeight;    ///< Height from IconSize config var
4720bbfda8aSnia#endif
4730bbfda8aSnia	/// @}
4740bbfda8aSnia
4750bbfda8aSnia	/// How title text is aligned in window titlebars.  From
4760bbfda8aSnia	/// TitleJustification config var.  \note Despite the naming
4770bbfda8aSnia	/// similarity, this is *not* related to
4780bbfda8aSnia	/// IconRegion.TitleJustification.  That comes instead from
4790bbfda8aSnia	/// ScreenInfo.IconJustification.
4800bbfda8aSnia	TitleJust TitleJustification;
4810bbfda8aSnia
4820bbfda8aSnia	/// \defgroup scr_cursors Various cursors used on the screen.
4830bbfda8aSnia	/// These all come from the Cursors config var, or defaults.
4840bbfda8aSnia	/// @{
4850bbfda8aSnia	Cursor TitleCursor;    ///< title bar cursor
4860bbfda8aSnia	Cursor FrameCursor;    ///< frame cursor
4870bbfda8aSnia	Cursor IconCursor;     ///< icon cursor
4880bbfda8aSnia	Cursor IconMgrCursor;  ///< icon manager cursor
4890bbfda8aSnia	Cursor ButtonCursor;   ///< title bar button cursor
4900bbfda8aSnia	Cursor MoveCursor;     ///< move cursor
4910bbfda8aSnia	Cursor ResizeCursor;   ///< resize cursor
4920bbfda8aSnia	Cursor WaitCursor;     ///< wait a while cursor
4930bbfda8aSnia	Cursor MenuCursor;     ///< menu cursor
4940bbfda8aSnia	Cursor SelectCursor;   ///< dot cursor for f.move, etc. from menus
4950bbfda8aSnia	Cursor DestroyCursor;  ///< skull and cross bones, f.destroy
4960bbfda8aSnia	Cursor AlterCursor;    ///< cursor for alternate keymaps
4970bbfda8aSnia	/// @}
4980bbfda8aSnia
4990bbfda8aSnia	/// Info about the WorkSpaceManager (and Occupy window) for the screen.
5000bbfda8aSnia	WorkSpaceMgr workSpaceMgr;
5010bbfda8aSnia	bool workSpaceManagerActive; ///< Whether the WSM is being shown
5020bbfda8aSnia
5030bbfda8aSnia	/// \defgroup scr_vscreen_bits VScreen bits
5040bbfda8aSnia	/// @{
5050bbfda8aSnia	VirtualScreen *vScreenList;    ///< Linked list of per-VS info
5060bbfda8aSnia	VirtualScreen *currentvs;      ///< Currently active VS
5070bbfda8aSnia	name_list     *VirtualScreens; ///< List of defined VS's
5080bbfda8aSnia	int           numVscreens;     ///< Number of defined VS's
5090bbfda8aSnia	/// @}
5100bbfda8aSnia
5110bbfda8aSnia	name_list   *OccupyAll;       ///< OccupyAll config var
5120bbfda8aSnia	name_list   *UnmapByMovingFarAway; ///< UnmapByMovingFarAway config var
5130bbfda8aSnia	name_list   *DontSetInactive; ///< DontSetInactive config var
5140bbfda8aSnia	name_list   *AutoSqueeze;     ///< AutoSqueeze config var
5150bbfda8aSnia	name_list   *StartSqueezed;   ///< StartSqueezed config var
5160bbfda8aSnia
5170bbfda8aSnia	bool  use3Dmenus;        ///< UseThreeDMenus config var
5180bbfda8aSnia	bool  use3Dtitles;       ///< UseThreeDTitles config var
5190bbfda8aSnia	bool  use3Diconmanagers; ///< UseThreeDIconManagers config var
5200bbfda8aSnia	bool  use3Dborders;      ///< UseThreeDBorders config var
5210bbfda8aSnia	bool  use3Dwmap;         ///< UseThreeDWMap config var
5220bbfda8aSnia	bool  SunkFocusWindowTitle;  ///< SunkFocusWindowTitle config var
5230bbfda8aSnia	short WMgrVertButtonIndent;  ///< WMgrVertButtonIndent config var
5240bbfda8aSnia	short WMgrHorizButtonIndent; ///< WMgrHorizButtonIndent config var
5250bbfda8aSnia	short WMgrButtonShadowDepth; ///< WMgrButtonShadowDepth config var
5260bbfda8aSnia	bool  BeNiceToColormap; ///< BeNiceToColormap config var
5270bbfda8aSnia	bool  BorderCursors;    ///< BorderResizeCursors config var
5280bbfda8aSnia	/// AutoPopup config flag.  \sa ScreenInfo.AutoPopupL
5290bbfda8aSnia	bool  AutoPopup;
5300bbfda8aSnia	short BorderShadowDepth;      ///< BorderShadowDepth config var
5310bbfda8aSnia	short TitleButtonShadowDepth; ///< TitleButtonShadowDepth config var
5320bbfda8aSnia	short TitleShadowDepth;       ///< TitleShadowDepth config var
5330bbfda8aSnia	short MenuShadowDepth;        ///< MenuShadowDepth config var
5340bbfda8aSnia	short IconManagerShadowDepth; ///< IconManagerShadowDepth config var
5350bbfda8aSnia	/// ReallyMoveInWorkspaceManager config var
5360bbfda8aSnia	bool  ReallyMoveInWorkspaceManager;
5370bbfda8aSnia	/// AlwaysShowWindowWhenMovingFromWorkspaceManager config var
5380bbfda8aSnia	bool  ShowWinWhenMovingInWmgr;
5390bbfda8aSnia	bool  ReverseCurrentWorkspace; ///< ReverseCurrentWorkspace config var
5400bbfda8aSnia	bool  DontWarpCursorInWMap;  ///< DontWarpCursorInWMap config var
5410bbfda8aSnia	short XMoveGrid;             ///< XMoveGrid config var
5420bbfda8aSnia	short YMoveGrid;             ///< YMoveGrid config var
5430bbfda8aSnia	bool  CenterFeedbackWindow;  ///< CenterFeedbackWindow config var
5440bbfda8aSnia	bool  ShrinkIconTitles;      ///< ShrinkIconTitles config var
5450bbfda8aSnia	bool  AutoRaiseIcons;        ///< AutoRaiseIcons config var
5460bbfda8aSnia	bool  AutoFocusToTransients; ///< AutoFocusToTransients config var
5470bbfda8aSnia	bool  PackNewWindows;        ///< PackNewWindows config var
5480bbfda8aSnia
5490bbfda8aSnia	/// Stash of various OTP info about the windows on the screen.  This
5500bbfda8aSnia	/// is only used internally in various otp.c code; nothing else
5510bbfda8aSnia	/// currently references it.
5520bbfda8aSnia	struct OtpPreferences *OTP;
5530bbfda8aSnia	/// Stash of OTP info about icons on the screen. \copydetails OTP
5540bbfda8aSnia	struct OtpPreferences *IconOTP;
5550bbfda8aSnia	/// Pointer to the start of the OTP winlists for the screen.
5560bbfda8aSnia	struct OtpWinList *bottomOwl;
5570bbfda8aSnia
5580bbfda8aSnia	/// From IconManagers config var.  This is a mapping from the window
5590bbfda8aSnia	/// name pattern to the IconMgr structure it should go in.  All the
5600bbfda8aSnia	/// IM's for the screen wind up in the iconmgr element.
5610bbfda8aSnia	/// \sa ScreenInfo.iconmgr
5620bbfda8aSnia	name_list *IconMgrs;
5630bbfda8aSnia
5640bbfda8aSnia	/// AutoPopup config var (list).  Windows that popup when changed.
5650bbfda8aSnia	/// \sa ScreenInfo.AutoPopup
5660bbfda8aSnia	name_list *AutoPopupL;
5670bbfda8aSnia
5680bbfda8aSnia	/// NoBorder config var.  Windows without borders.
5690bbfda8aSnia	name_list *NoBorder;
5700bbfda8aSnia
5710bbfda8aSnia	/// NoIconTitle config var (list).  Windows to not show a title on
5720bbfda8aSnia	/// the icons for.  \sa ScreenInfo.NoIconTitlebar
5730bbfda8aSnia	name_list *NoIconTitle;
5740bbfda8aSnia
5750bbfda8aSnia	/// NoTitle config var (list).  Windows to not put a titlebar on.
5760bbfda8aSnia	/// \sa ScreenInfo.NoTitlebar
5770bbfda8aSnia	name_list *NoTitle;
5780bbfda8aSnia
5790bbfda8aSnia	/// MakeTitle config var.  Windows to pup a titlebar on when general
5800bbfda8aSnia	/// NoTitle is set.  \sa ScreenInfo.NoTitlebar \sa ScreenInfo.NoTitle
5810bbfda8aSnia	name_list *MakeTitle;
5820bbfda8aSnia
5830bbfda8aSnia	/// AutoRaise config var (list).  Windows to automatically raise when
5840bbfda8aSnia	/// pointed to (possible after a delay).
5850bbfda8aSnia	/// \sa ScreenInfo.AutoRaiseDefault \sa ScreenInfo.RaiseDelay
5860bbfda8aSnia	name_list *AutoRaise;
5870bbfda8aSnia
5880bbfda8aSnia	/// WarpOnDeIconify config var.  Windows to occupy over to current
5890bbfda8aSnia	/// workspace on deiconification.  \note Minor nomenclature issue;
5900bbfda8aSnia	/// 'Warp' in name suggests we move to the win, but it actually means
5910bbfda8aSnia	/// move the win to us.
5920bbfda8aSnia	name_list *WarpOnDeIconify;
5930bbfda8aSnia
5940bbfda8aSnia	/// AutoLower config var (list).  Windows to automatically lower when
5950bbfda8aSnia	/// pointed away from.  \sa ScreenInfo.AutoLowerDefault
5960bbfda8aSnia	name_list *AutoLower;
5970bbfda8aSnia
5980bbfda8aSnia	/// Icons config var.  Manually specified icons for particular
5990bbfda8aSnia	/// windows.
6000bbfda8aSnia	name_list *IconNames;
6010bbfda8aSnia
6020bbfda8aSnia	/// NoHightlight config var (list).  Windows to not highlight border
6030bbfda8aSnia	/// of when focused.  \sa ScreenInfo.Highlight
6040bbfda8aSnia	name_list *NoHighlight;
6050bbfda8aSnia
6060bbfda8aSnia	/// NoStackMode config var (list).  Windows to ignore
6070bbfda8aSnia	/// application-initiated restacking requests from.
6080bbfda8aSnia	/// \sa ScreenInfo.StackMode
6090bbfda8aSnia	name_list *NoStackModeL;
6100bbfda8aSnia
6110bbfda8aSnia	/// NoTitleHighlight config var (list).  Windows to not highlight in
6120bbfda8aSnia	/// titlevar when focused.  \sa ScreenInfo.TitleHighlight
6130bbfda8aSnia	name_list *NoTitleHighlight;
6140bbfda8aSnia
6150bbfda8aSnia	/// DontIconifyByUnmapping config var.  Windows to iconify by making
6160bbfda8aSnia	/// an icon for, overriding IconifyByUnmapping setting.
6170bbfda8aSnia	name_list *DontIconify;
6180bbfda8aSnia
6190bbfda8aSnia	/// IconManagerDontShow config var (list).
6200bbfda8aSnia	/// \sa ScreenInfo.IconManagerDontShow
6210bbfda8aSnia	name_list *IconMgrNoShow;
6220bbfda8aSnia
6230bbfda8aSnia	/// IconManagerShow config var.  Windows to show in icon manager even
6240bbfda8aSnia	/// if global IconManagerDontShow is set.
6250bbfda8aSnia	name_list *IconMgrShow;
6260bbfda8aSnia
6270bbfda8aSnia	/// IconifyByUnmapping config var (list).  \sa ScreenInfo.IconifyByUnmapping
6280bbfda8aSnia	name_list *IconifyByUn;
6290bbfda8aSnia
6300bbfda8aSnia	/// StartIconified config var.
6310bbfda8aSnia	name_list *StartIconified;
6320bbfda8aSnia
6330bbfda8aSnia	/// SqueezeTitle config var (list).  \sa ScreenInfo.SqueezeTitle
6340bbfda8aSnia	name_list *SqueezeTitleL;
6350bbfda8aSnia
6360bbfda8aSnia	/// DontSqueezeTitle config var (list).  \sa ScreenInfo.SqueezeTitle
6370bbfda8aSnia	name_list *DontSqueezeTitleL;
6380bbfda8aSnia
6390bbfda8aSnia	/// AlwaysSqueezeToGravity config var (list).
6400bbfda8aSnia	/// \sa ScreenInfo.AlwaysSqueezeToGravity
6410bbfda8aSnia	name_list *AlwaysSqueezeToGravityL;
6420bbfda8aSnia
6430bbfda8aSnia	/// WindowRing config var (list).  Windows to put in warp ring.
6440bbfda8aSnia	/// \sa ScreenInfo.WindowRingAll
6450bbfda8aSnia	name_list *WindowRingL;
6460bbfda8aSnia
6470bbfda8aSnia	/// WindowRingExclude config var.  Windows to exclude from warp ring.
6480bbfda8aSnia	name_list *WindowRingExcludeL;
6490bbfda8aSnia
6500bbfda8aSnia	/// WarpCursor config var (list).  Windows to warp to on deiconify.
6510bbfda8aSnia	/// \sa ScreenInfo.WarpCursor
6520bbfda8aSnia	name_list *WarpCursorL;
6530bbfda8aSnia
6540bbfda8aSnia	/// DontSave config var.  Windows to not save info in session manager.
6550bbfda8aSnia	name_list *DontSave;
6560bbfda8aSnia
6570bbfda8aSnia	/// WindowGeometries config var.  Default geometries for windows.
6580bbfda8aSnia	name_list *WindowGeometries;
6590bbfda8aSnia
6600bbfda8aSnia	/// IgnoreTransient config var.  Windows that we should pretend
6610bbfda8aSnia	/// aren't transient even if they are.
6620bbfda8aSnia	name_list *IgnoreTransientL;
6630bbfda8aSnia
6640bbfda8aSnia	/// OpaqueMove config var (list).  Windows to move opaquely rather
6650bbfda8aSnia	/// than in outline.  \sa ScreenInfo.DoOpaqueMove
6660bbfda8aSnia	name_list *OpaqueMoveList;
6670bbfda8aSnia
6680bbfda8aSnia	/// NoOpaqueMove config var (list).  Windows to not move opaquely.
6690bbfda8aSnia	/// \sa ScreenInfo.DoOpaqueMove
6700bbfda8aSnia	name_list *NoOpaqueMoveList;
6710bbfda8aSnia
6720bbfda8aSnia	/// OpaqueResize config var (list).  Windows to resize opaquely
6730bbfda8aSnia	/// rather than in outline.  \sa ScreenInfo.DoOpaqueResize
6740bbfda8aSnia	name_list *OpaqueResizeList;
6750bbfda8aSnia
6760bbfda8aSnia	/// NoOpaqueResize config var (list).  Windows to not resize
6770bbfda8aSnia	/// opaquely.  \sa ScreenInfo.DoOpaqueResize
6780bbfda8aSnia	name_list *NoOpaqueResizeList;
6790bbfda8aSnia
6800bbfda8aSnia	/// IconMenuDontShow config var.  Windows whose icons to not list in
6810bbfda8aSnia	/// TwmIcons menu.
6820bbfda8aSnia	name_list *IconMenuDontShow;
6830bbfda8aSnia
6840bbfda8aSnia
6850bbfda8aSnia	/**
6860bbfda8aSnia	 * \defgroup scr_gc_bits Various graphics contexts
6870bbfda8aSnia	 * These are X Graphics Contexts, which are used for various sorts of
6880bbfda8aSnia	 * drawing in X.  Stuff that needs to draw lines, or write out text,
6890bbfda8aSnia	 * all needs to use a GC.  X-ref
6900bbfda8aSnia	 * <https://www.x.org/releases/X11R7.7/doc/libX11/libX11/libX11.html#Graphics_Context_Functions>
6910bbfda8aSnia	 * for upstream details.
6920bbfda8aSnia	 * @{
6930bbfda8aSnia	 */
6940bbfda8aSnia	GC NormalGC; ///< normal GC for everything
6950bbfda8aSnia	GC MenuGC;   ///< GC for menus
6960bbfda8aSnia	GC DrawGC;   ///< GC to draw lines for move and resize
6970bbfda8aSnia	GC BorderGC; ///< GC for drawing 3D borders
6980bbfda8aSnia	GC rootGC;   ///< GC for internal pixmaps in image.c / image_bitmap.c
6990bbfda8aSnia	/// @}
7000bbfda8aSnia
7010bbfda8aSnia	Pixel Black; ///< Stash of "Black" X color for the screen
7020bbfda8aSnia	Pixel White; ///< Stash of "White" X color for the screen
7030bbfda8aSnia	unsigned long XORvalue;  ///< XorValue config var, or default
7040bbfda8aSnia
7050bbfda8aSnia	/// \defgroup scr_font_bits Various font settings
7060bbfda8aSnia	/// Definitions of various fonts to use on the Screen.
7070bbfda8aSnia	/// @{
7080bbfda8aSnia	MyFont TitleBarFont;     ///< TitleFont config var
7090bbfda8aSnia	MyFont MenuFont;         ///< MenuFont config var
7100bbfda8aSnia	MyFont IconFont;         ///< IconFont config var
7110bbfda8aSnia	MyFont SizeFont;         ///< SizeFont config var
7120bbfda8aSnia	MyFont IconManagerFont;  ///< IconManagerFont config var
7130bbfda8aSnia	MyFont DefaultFont;      ///< Hardcoded fallback font
7140bbfda8aSnia	/// @}
7150bbfda8aSnia
7160bbfda8aSnia	/// Head of linked list of Screen's icon managers.  The head is also
7170bbfda8aSnia	/// the default icon manager for the screen.  \sa ScreenInfo.IconMgrs
7180bbfda8aSnia	IconMgr *iconmgr;
7190bbfda8aSnia
7200bbfda8aSnia	/// Head of the list of IconRegion structs on the Screen.  Built out
7210bbfda8aSnia	/// from %IconRegion config var.
7220bbfda8aSnia	struct IconRegion *FirstRegion;
7230bbfda8aSnia
7240bbfda8aSnia	/// Tail of the list of IconRegion structs on the Screen.  Used as an
7250bbfda8aSnia	/// optimization in configuring the list on startup.  \todo Is this
7260bbfda8aSnia	/// actually necessary?  Does the order matter?
7270bbfda8aSnia	struct IconRegion *LastRegion;
7280bbfda8aSnia
7290bbfda8aSnia	/// Pointer to head of list of window regions on screen.  Built from
7300bbfda8aSnia	/// %WindowRegion config var.
7310bbfda8aSnia	struct WindowRegion *FirstWindowRegion;
7320bbfda8aSnia
7330bbfda8aSnia	/// Pointer to head of list of windowboxes on screen.  Built from
7340bbfda8aSnia	/// %WindowBox config var.
7350bbfda8aSnia	WindowBox *FirstWindowBox;
7360bbfda8aSnia
7370bbfda8aSnia	char *IconDirectory;    ///< IconDirectory config var
7380bbfda8aSnia	char *PixmapDirectory;  ///< PixmapDirectory config var
7390bbfda8aSnia
7400bbfda8aSnia	int SizeStringOffset;   ///< X offset in size window for drawing
7410bbfda8aSnia	int SizeStringWidth;    ///< Minimum width of size window
7420bbfda8aSnia
7430bbfda8aSnia	int BorderWidth;        ///< BorderWidth config var
7440bbfda8aSnia	int BorderLeft;         ///< BorderLeft config var
7450bbfda8aSnia	int BorderRight;        ///< BorderRight config var
7460bbfda8aSnia	int BorderTop;          ///< BorderTop config var
7470bbfda8aSnia	int BorderBottom;       ///< BorderBottom config var
7480bbfda8aSnia	int ThreeDBorderWidth;  ///< ThreeDBorderWidth config var
7490bbfda8aSnia	int IconBorderWidth;    ///< IconBorderWidth config var
7500bbfda8aSnia
7510bbfda8aSnia	/// Height of the title bar window.  Calculated from font height and
7520bbfda8aSnia	/// padding.  \todo Maybe this should be in ScreenInfo.TBInfo above?
7530bbfda8aSnia	/// Same can be said for a number of following fields that are
7540bbfda8aSnia	/// titlebar related...
7550bbfda8aSnia	int TitleHeight;
7560bbfda8aSnia
7570bbfda8aSnia	TwmWindow *Focus;    ///< The twm window that has focus.
7580bbfda8aSnia	int EntryHeight;     ///< Menu entry height.  Calc'd from font height.
7590bbfda8aSnia
7600bbfda8aSnia	/// FramePadding config var.  Distance between titlebar contents and
7610bbfda8aSnia	/// frame.
7620bbfda8aSnia	int FramePadding;
7630bbfda8aSnia	/// TitlePadding config var.  Distance between items in titlebar.
7640bbfda8aSnia	int TitlePadding;
7650bbfda8aSnia
7660bbfda8aSnia	/// ButtonIndent config var.  Amount to shrink titlebar buttons.
7670bbfda8aSnia	int ButtonIndent;
7680bbfda8aSnia	int NumAutoRaises;   ///< Number of autoraise windows on screen
7690bbfda8aSnia	int NumAutoLowers;   ///< Number of autolower windows on screen
7700bbfda8aSnia	int TransientOnTop;  ///< TransientOnTop config var
7710bbfda8aSnia
7720bbfda8aSnia	/// AutoRaise config flag.  \sa ScreenInfo.AutoRaise
7730bbfda8aSnia	bool AutoRaiseDefault;
7740bbfda8aSnia
7750bbfda8aSnia	/// AutoLower config flag.  \sa ScreenInfo.AutoLower
7760bbfda8aSnia	bool AutoLowerDefault;
7770bbfda8aSnia
7780bbfda8aSnia	bool NoDefaults;    ///< NoDefaults config var
7790bbfda8aSnia	UsePPoss UsePPosition;     ///< UsePPosition config var
7800bbfda8aSnia	bool UseSunkTitlePixmap;  ///< UseSunkTitlePixmap config var
7810bbfda8aSnia	bool AutoRelativeResize;  ///< AutoRelativeResize config var
7820bbfda8aSnia
7830bbfda8aSnia	/// Whether focus is allowed to move.  At one point this allegedly
7840bbfda8aSnia	/// meant something like "is the input focus on the root?".  In
7850bbfda8aSnia	/// current use, however, it's used as a flag for whether to
7860bbfda8aSnia	/// auto-move focus to a new window; it's set to false in the
7870bbfda8aSnia	/// ClickToFocus case, as well as when f.focus is called on a window,
7880bbfda8aSnia	/// and then prevents Enter notifications from setting focus on new
7890bbfda8aSnia	/// windows.
7900bbfda8aSnia	/// \todo Rename to something better fitting.
7910bbfda8aSnia	bool  FocusRoot;
7920bbfda8aSnia
7930bbfda8aSnia	bool WarpCursor;    ///< WarpCursor config var.  \sa ScreenInfo.WarpCursorL
7940bbfda8aSnia	bool ForceIcon;     ///< ForceIcons config var
7950bbfda8aSnia	bool NoGrabServer;  ///< NoGrabServer config var
7960bbfda8aSnia	bool NoRaiseMove;   ///< NoRaiseOnMove config var
7970bbfda8aSnia	bool NoRaiseResize; ///< NoRaiseOnResize config var
7980bbfda8aSnia	bool NoRaiseDeicon; ///< NoRaiseOnDeiconify config var
7990bbfda8aSnia	bool RaiseOnWarp;   ///< NoRaiseOnWarp config var (inverse)
8000bbfda8aSnia	bool DontMoveOff;   ///< DontMoveOff config var
8010bbfda8aSnia	int MoveOffResistance;  ///< MoveOffResistence config var
8020bbfda8aSnia	int MovePackResistance; ///< MovePackResistence config var
8030bbfda8aSnia
8040bbfda8aSnia	/// Whether we're animating [de]iconification zooms.  From Zoom
8050bbfda8aSnia	/// config var.  \sa ScreenInfo.ZoomCount
8060bbfda8aSnia	bool DoZoom;
8070bbfda8aSnia
8080bbfda8aSnia	bool TitleFocus;       ///< NoTitleFocus config var (inverse)
8090bbfda8aSnia	bool IconManagerFocus; ///< NoIconManagerFocus config var (inverse)
8100bbfda8aSnia
8110bbfda8aSnia	/// NoIconTitle config var.  \sa ScreenInfo.NoIconTitle
8120bbfda8aSnia	bool NoIconTitlebar;
8130bbfda8aSnia
8140bbfda8aSnia	/// NoTitle config var.  \sa ScreenInfo.NoTitle
8150bbfda8aSnia	bool NoTitlebar;
8160bbfda8aSnia
8170bbfda8aSnia	bool DecorateTransients; ///< DecorateTransients config var
8180bbfda8aSnia
8190bbfda8aSnia	/// IconifyByUnmapping config var.  \sa ScreenInfo.IconifyByUn
8200bbfda8aSnia	bool IconifyByUnmapping;
8210bbfda8aSnia
8220bbfda8aSnia	bool ShowIconManager; ///< ShowIconManager config var
8230bbfda8aSnia	bool ShowWorkspaceManager; ///< ShowWorkSpaceManager config var
8240bbfda8aSnia
8250bbfda8aSnia	/// IconManagerDontShow config var.  \sa ScreenInfo.IconMgrNoShow
8260bbfda8aSnia	bool IconManagerDontShow;
8270bbfda8aSnia
8280bbfda8aSnia	bool AutoOccupy;   ///< AutoOccupy config var
8290bbfda8aSnia	bool AutoPriority; ///< AutoPriority config var
8300bbfda8aSnia	bool TransientHasOccupation; ///< TransientHasOccupation config var
8310bbfda8aSnia	bool DontPaintRootWindow;    ///< DontPaintRootWindow config var
8320bbfda8aSnia	bool BackingStore; ///< BackingStore config var
8330bbfda8aSnia	bool SaveUnder;    ///< NoSaveUnders config var (inverse)
8340bbfda8aSnia	RandPlac RandomPlacement;  ///< RandomPlacement config var (1st arg)
8350bbfda8aSnia	short RandomDisplacementX; ///< RandomPlacement config var (2nd arg)
8360bbfda8aSnia	short RandomDisplacementY; ///< RandomPlacement config var (2nd arg)
8370bbfda8aSnia
8380bbfda8aSnia	/// Whether we're doing a window opaque move.  This is set at runtime
8390bbfda8aSnia	/// for each particular move we start doing, acting as a "what are we
8400bbfda8aSnia	/// in the middle of" flag.  It will get figured based on various
8410bbfda8aSnia	/// things, like TwmWindow.OpaqueMove and
8420bbfda8aSnia	/// ScreenInfo.OpaqueMoveThreshold.
8430bbfda8aSnia	bool OpaqueMove;
8440bbfda8aSnia
8450bbfda8aSnia	/// OpaqueMove config var.  \sa ScreenInfo.OpaqueMoveList
8460bbfda8aSnia	bool DoOpaqueMove;
8470bbfda8aSnia
8480bbfda8aSnia	unsigned short OpaqueMoveThreshold;  ///< OpaqueMoveThreshold config var
8490bbfda8aSnia
8500bbfda8aSnia	/// OpaqueResize config var.  \sa ScreenInfo.OpaqueResizeList
8510bbfda8aSnia	bool DoOpaqueResize;
8520bbfda8aSnia
8530bbfda8aSnia	/// Whether we're in the midst of an opaque resizing.  Transiently
8540bbfda8aSnia	/// set at runtime based on things like TwmWindow.OpaqueResize and
8550bbfda8aSnia	/// ScreenInfo.OpaqueResizeThreshold.  X-ref ScreenInfo.OpaqueMove
8560bbfda8aSnia	/// for its counterpart in the window-moving department.
8570bbfda8aSnia	bool OpaqueResize;
8580bbfda8aSnia
8590bbfda8aSnia	unsigned short OpaqueResizeThreshold; ///< OpaqueResizeThreshold config var
8600bbfda8aSnia
8610bbfda8aSnia	/// NoHighlight config var (inverse).  \sa ScreenInfo.NoHighlight
8620bbfda8aSnia	bool Highlight;
8630bbfda8aSnia
8640bbfda8aSnia	/// NoStackMode config var (inverse).  \sa ScreenInfo.NoStackModeL
8650bbfda8aSnia	bool StackMode;
8660bbfda8aSnia
8670bbfda8aSnia	/// NoTitleHighlight config var (inverse).  \sa ScreenInfo.NoTitleHighlight
8680bbfda8aSnia	bool TitleHighlight;
8690bbfda8aSnia
8700bbfda8aSnia	/// MoveDelta config var.  Number of pixels before f.move starts
8710bbfda8aSnia	short MoveDelta;
8720bbfda8aSnia
8730bbfda8aSnia	/// Zoom config var.  Number of animated steps in [de]iconifying.
8740bbfda8aSnia	short ZoomCount;
8750bbfda8aSnia
8760bbfda8aSnia	bool SortIconMgr;  ///< SortIconManager config var
8770bbfda8aSnia	bool Shadow;       ///< NoMenuShadows config var (inverse)
8780bbfda8aSnia	bool InterpolateMenuColors;  ///< InterpolateMenuColors config var
8790bbfda8aSnia	bool StayUpMenus;  ///< StayUpMenus config var
8800bbfda8aSnia	bool WarpToDefaultMenuEntry; ///< WarpToDefaultMenuEntry config var
8810bbfda8aSnia	bool ClickToFocus; ///< ClickToFocus config var
8820bbfda8aSnia	bool SloppyFocus;  ///< SloppyFocus config var
8830bbfda8aSnia	bool SaveWorkspaceFocus; ///< SaveWorkspaceFocus config var
8840bbfda8aSnia	bool NoIconManagers;     ///< NoIconManagers config var
8850bbfda8aSnia	bool ClientBorderWidth;  ///< ClientBorderWidth config var
8860bbfda8aSnia
8870bbfda8aSnia	/// SqueezeTitle and/or DontSqueezeTitle config vars.
8880bbfda8aSnia	/// \sa ScreenInfo.SqueezeTitleL  \sa ScreenInfo.DontSqueezeTitleL
8890bbfda8aSnia	bool SqueezeTitle;
8900bbfda8aSnia
8910bbfda8aSnia	/// AlwaysSqueezeToGravity config var.
8920bbfda8aSnia	/// \sa ScreenInfo.AlwaysSqueezeToGravityL
8930bbfda8aSnia	bool AlwaysSqueezeToGravity;
8940bbfda8aSnia
8950bbfda8aSnia	/// Whether fonts have been loaded yet in the startup process
8960bbfda8aSnia	bool HaveFonts;
8970bbfda8aSnia
8980bbfda8aSnia	/// Some sort of attempt to determine whether this is the first
8990bbfda8aSnia	/// config file we've parsed for this screen (which is bogus, since
9000bbfda8aSnia	/// we only parse one file for each screen!), but also used in some
9010bbfda8aSnia	/// color getting for obscure reasons.  This needs careful
9020bbfda8aSnia	/// consideration and auditing; it may be just bogus.  X-ref work
9030bbfda8aSnia	/// vtwm did in adjusting its use in GetColor() to avoid all the
9040bbfda8aSnia	/// save/restore dances on calls around it, and the \#ifdef inside
9050bbfda8aSnia	/// GetColor().  \todo Evaulate to determine whether it should exist.
9060bbfda8aSnia	bool FirstTime;
9070bbfda8aSnia
9080bbfda8aSnia	bool  CaseSensitive; ///< NoCaseSensitive config var (inverse)
9090bbfda8aSnia	bool  WarpUnmapped;  ///< WarpUnmapped config var
9100bbfda8aSnia	bool  WindowRingAll; ///< WindowRing config var.  \sa ScreenInfo.WindowRingL
9110bbfda8aSnia	bool  WarpRingAnyWhere;       ///< WarpRingOnScreen config var (inverse)
9120bbfda8aSnia	bool  ShortAllWindowsMenus;   ///< ShortAllWindowsMenus config var
9130bbfda8aSnia	short OpenWindowTimeout;      ///< OpenWindowTimeout config var
9140bbfda8aSnia	bool  RaiseWhenAutoUnSqueeze; ///< RaiseWhenAutoUnSqueeze config var
9150bbfda8aSnia	bool  RaiseOnClick;           ///< RaiseOnClick config var
9160bbfda8aSnia	short RaiseOnClickButton;     ///< RaiseOnClickButton config var
9170bbfda8aSnia	unsigned int IgnoreModifier;  ///< IgnoreModifier config var
9180bbfda8aSnia	bool IgnoreCaseInMenuSelection;  ///< IgnoreCaseInMenuSelection config var
9190bbfda8aSnia	bool NoWarpToMenuTitle;          ///< NoWarpToMenuTitle config var
9200bbfda8aSnia	bool NoImagesInWorkSpaceManager; ///< NoImagesInWorkSpaceManager config var
9210bbfda8aSnia
9220bbfda8aSnia	/// DontToggleWorkspaceManagerState config var
9230bbfda8aSnia	bool DontToggleWorkspaceManagerState;
9240bbfda8aSnia
9250bbfda8aSnia	/// Whether to show the welcome window.  Related to the
9260bbfda8aSnia	/// DontShowWelcomeWindow config var or the \--nowelcome command-line
9270bbfda8aSnia	/// arg.  \ingroup scr_maskwin
9280bbfda8aSnia	bool ShowWelcomeWindow;
9290bbfda8aSnia
9300bbfda8aSnia	bool NameDecorations;  ///< DontNameDecorations config var (inverse)
9310bbfda8aSnia
9320bbfda8aSnia	/// Whether to be strict about what encoding of window naming
9330bbfda8aSnia	/// properties (WM_NAME etc) we accept.  From StrictWinNameEncoding
9340bbfda8aSnia	/// config var.
9350bbfda8aSnia	bool StrictWinNameEncoding;
9360bbfda8aSnia
9370bbfda8aSnia	/// ForceFocus config var.  Forcing focus-setting on windows.
9380bbfda8aSnia	/// \sa ScreenInfo.ForceFocusL
9390bbfda8aSnia	bool      ForceFocus;
9400bbfda8aSnia	/// \copybrief ForceFocus \sa ScreenInfo.ForceFocus
9410bbfda8aSnia	name_list *ForceFocusL;
9420bbfda8aSnia
9430bbfda8aSnia	FuncKey FuncKeyRoot;       ///< Key bindings
9440bbfda8aSnia	FuncButton FuncButtonRoot; ///< Mouse click bindings
9450bbfda8aSnia
9460bbfda8aSnia#ifdef EWMH
9470bbfda8aSnia	/// Special-purpose window for WM_S<screennum> window selection.  See
9480bbfda8aSnia	/// ICCCM sections 4.3, 2.8.
9490bbfda8aSnia	Window icccm_Window;
9500bbfda8aSnia
9510bbfda8aSnia	/// List of known client windows.  Stashed in _NET_CLIENT_LIST
9520bbfda8aSnia	/// property.
9530bbfda8aSnia	long *ewmh_CLIENT_LIST;
9540bbfda8aSnia	int ewmh_CLIENT_LIST_size; ///< Allocated ScreenInfo.ewmh_CLIENT_LIST memory
9550bbfda8aSnia	int ewmh_CLIENT_LIST_used; ///< Used ScreenInfo.ewmh_CLIENT_LIST slots
9560bbfda8aSnia
9570bbfda8aSnia	/// List of EWMH struts.  From _NET_WM_STRUT properties.  EWMH config
9580bbfda8aSnia	/// for windows that reserve spaces at the sides of a screen (e.g.,
9590bbfda8aSnia	/// taskbars, panels, etc).
9600bbfda8aSnia	EwmhStrut *ewmhStruts;
9610bbfda8aSnia
9620bbfda8aSnia	name_list *EWMHIgnore; ///< EWMHIgnore config var.  Messages to ignore.
9630bbfda8aSnia#endif /* EWMH */
9640bbfda8aSnia
9650bbfda8aSnia	name_list *MWMIgnore; ///< Motif WM messages to ignore
966645f5050Syouri};
967645f5050Syouri
968645f5050Syouri
969645f5050Syouri
9700bbfda8aSnia/*
9710bbfda8aSnia * A few global vars that talk about Screen stuff
9720bbfda8aSnia */
9730bbfda8aSniaextern int NumScreens;  ///< How many Screens are on our display
9740bbfda8aSniaextern ScreenInfo **ScreenList; ///< List of ScreenInfo structs for each Screen
9750bbfda8aSniaextern ScreenInfo *Scr; ///< The ScreenInfo struct for the current Screen
976645f5050Syouri
977645f5050Syouri
9780bbfda8aSnia#endif /* _CTWM_SCREEN_H */
979