/*
* Copyright 1989 Massachusetts Institute of Technology
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*
* M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
* BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/***********************************************************************
*
* $XConsortium: screen.h,v 1.61 90/03/15 14:23:04 jim Exp $
*
* twm per-screen data include file
*
* 11-3-88 Dave Payne, Apple Computer File created
*
***********************************************************************/
#ifndef _SCREEN_
#define _SCREEN_
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
#include "list.h"
#include "menus.h"
#include "iconmgr.h"
typedef struct _StdCmap {
struct _StdCmap *next; /* next link in chain */
Atom atom; /* property from which this came */
int nmaps; /* number of maps below */
XStandardColormap *maps; /* the actual maps */
} StdCmap;
#define SIZE_HINDENT 10
#define SIZE_VINDENT 2
typedef struct _TitlebarPixmaps {
Pixmap xlogo;
Pixmap resize;
Pixmap question;
Pixmap menu;
Pixmap delete;
} TitlebarPixmaps;
typedef struct ScreenInfo
{
int screen; /* the default screen */
int d_depth; /* copy of DefaultDepth(dpy, screen) */
Visual *d_visual; /* copy of DefaultVisual(dpy, screen) */
int Monochrome; /* is the display monochrome ? */
int MyDisplayWidth; /* my copy of DisplayWidth(dpy, screen) */
int MyDisplayHeight; /* my copy of DisplayHeight(dpy, screen) */
int MaxWindowWidth; /* largest window to allow */
int MaxWindowHeight; /* ditto */
TwmWindow TwmRoot; /* the head of the twm window list */
Window Root; /* the root window */
Window SizeWindow; /* the resize dimensions window */
Window InfoWindow; /* the information window */
Window VirtualDesktop; /* the virtual root window */
Window Panner; /* the panner window */
int vdtWidth; /* width of the virtual desktop */
int vdtHeight; /* height of the virtual desktop */
int vdtPositionX; /* where the virtual desktop is currently positioned */
int vdtPositionY; /* where the virtual desktop is currently positioned */
int vdtSaveX; /* saved position */
int vdtSaveY; /* saved position */
int vdtScrollDistanceX; /* fraction to pan by in the X direction */
int vdtScrollDistanceY; /* fraction to pan by in the Y direction */
short ShowVirtualNames; /* should we paint the names in the virtual windows? */
name_list *Icons; /* list of icon pixmaps */
name_list *IconsPixmapType; /* type of Pixmap, Xpm or Xbm. ('p' or 'b') */
#ifdef SHAPE
name_list *Iconsmask; /* list of icon pixmaps masks */
name_list *Iconsclip; /* list of icon pixmaps clips */
#endif
TitlebarPixmaps tbpm; /* titlebar pixmaps */
Pixmap UnknownPm; /* the unknown icon pixmap */
#ifdef SHAPE
Pixmap UnknownPmclp; /* the unknown icon pixmap clip */
Pixmap UnknownPmmsk; /* the unknown icon pixmap mask */
#endif
Pixmap siconifyPm; /* the icon manager iconify pixmap */
Pixmap pullPm; /* pull right menu arrow */
int pullW, pullH; /* size of pull right menu icon */
Pixmap hilitePm; /* focus highlight window background */
int hilite_pm_width, hilite_pm_height; /* cache the size */
Pixmap hiliteLeftPm; /* focus highlight window left end */
int hilite_left_pm_width, hilite_left_pm_height; /* cache the size */
Pixmap hiliteRightPm; /* focus highlight window right end */
int hilite_right_pm_width, hilite_right_pm_height; /* cache the size */
Pixmap rootWeave; /* root weave pixmap */
Bool hilite_pm_isXpm; /* True is pixmap is Xpm format */
Bool hilite_left_pm_isXpm, hilite_right_pm_isXpm;
MenuRoot *MenuList; /* head of the menu list */
MenuRoot *LastMenu; /* the last menu (mostly unused?) */
MenuRoot *Windows; /* the TwmWindows menu */
TwmWindow *Ring; /* one of the windows in window ring */
TwmWindow *RingLeader; /* current winodw in ring */
MouseButton Mouse[MAX_BUTTONS+1][NUM_CONTEXTS][MOD_SIZE];
MouseButton DefaultFunction;
MouseButton WindowFunction;
struct {
Colormaps *cmaps; /* current list of colormap windows */
int maxCmaps; /* maximum number of installed colormaps */
unsigned long first_req; /* seq # for first XInstallColormap() req in
pass thru loading a colortable list */
int root_pushes; /* current push level to install root
colormap windows */
TwmWindow *pushed_window; /* saved window to install when pushes drops
to zero */
} cmapInfo;
struct {
StdCmap *head, *tail; /* list of maps */
StdCmap *mru; /* most recently used in list */
int mruindex; /* index of mru in entry */
} StdCmapInfo;
struct {
int nleft, nright; /* numbers of buttons in list */
TitleButton *head; /* start of list */
int border; /* button border */
int pad; /* button-padding */
int width; /* width of single button & border */
int leftx; /* start of left buttons */
int titlex; /* start of title string */
int rightoff; /* offset back from right edge */
} TBInfo;
ColorPair BorderTileC; /* border tile colors */
ColorPair TitleC; /* titlebar colors */
ColorPair MenuC; /* menu colors */
ColorPair MenuTitleC; /* menu title colors */
ColorPair IconC; /* icon colors */
ColorPair IconManagerC; /* icon manager colors */
ColorPair DefaultC; /* default colors */
ColorPair vdtC; /* virtual desktop colors */
ColorPair PannerC; /* Panner colors */
ColorPair VirtualC; /* Virtual window colors */
Pixel BorderColor; /* color of window borders */
Pixel MenuShadowColor; /* menu shadow color */
Pixel IconBorderColor; /* icon border color */
Pixel IconManagerHighlight; /* icon manager highlight */
Cursor TitleCursor; /* title bar cursor */
Cursor FrameCursor; /* frame cursor */
Cursor IconCursor; /* icon cursor */
Cursor IconMgrCursor; /* icon manager cursor */
Cursor ButtonCursor; /* title bar button cursor */
Cursor MoveCursor; /* move cursor */
Cursor ResizeCursor; /* resize cursor */
Cursor WaitCursor; /* wait a while cursor */
Cursor MenuCursor; /* menu cursor */
Cursor SelectCursor; /* dot cursor for f.move, etc. from menus */
Cursor DestroyCursor; /* skull and cross bones, f.destroy */
name_list *BorderColorL;
name_list *IconBorderColorL;
name_list *BorderTileForegroundL;
name_list *BorderTileBackgroundL;
name_list *TitleForegroundL;
name_list *TitleBackgroundL;
name_list *IconForegroundL;
name_list *IconBackgroundL;
name_list *IconManagerFL;
name_list *IconManagerBL;
name_list *IconMgrs;
name_list *NoTitle; /* list of window names with no title bar */
name_list *MakeTitle; /* list of window names with title bar */
name_list *AutoRaise; /* list of window names to auto-raise */
name_list *IconNames; /* list of window names and icon names */
name_list *NoHighlight; /* list of windows to not highlight */
name_list *NoStackModeL; /* windows to ignore stack mode requests */
name_list *NoTitleHighlight;/* list of windows to not highlight the TB*/
name_list *DontIconify; /* don't iconify by unmapping */
name_list *IconMgrNoShow; /* don't show in the icon manager */
name_list *IconMgrShow; /* show in the icon manager */
name_list *IconifyByUn; /* windows to iconify by unmapping */
name_list *StartIconified; /* windows to start iconic */
name_list *IconManagerHighlightL; /* icon manager highlight colors */
name_list *SqueezeTitleL; /* windows of which to squeeze title */
name_list *DontSqueezeTitleL; /* windows of which not to squeeze */
name_list *WindowRingL; /* windows in ring */
name_list *WarpCursorL; /* windows to warp cursor to on deiconify */
name_list *StickyL; /* windows that should be sticky */
name_list *VirtualBackgroundL; /* virtual window colors */
name_list *VirtualForegroundL; /* virtual window colors */
name_list *NoIconTitleL; /* don't display icon names */
name_list *IconTitleL; /* do display icon names */
GC NormalGC; /* normal GC for everything */
GC MenuGC; /* gc for menus */
GC DrawGC; /* GC to draw lines for move and resize */
GC PannerGC; /* GC for the panner outline */
unsigned long Black;
unsigned long White;
unsigned long XORvalue; /* number to use when drawing xor'ed */
MyFont TitleBarFont; /* title bar font structure */
MyFont MenuFont; /* menu font structure */
MyFont MenuTitleFont; /* menu title font structure */
MyFont IconFont; /* icon font structure */
MyFont SizeFont; /* resize font structure */
MyFont IconManagerFont; /* window list font structure */
MyFont DefaultFont;
MyFont VirtualFont; /* names in the small panner windows */
IconMgr iconmgr; /* default icon manager */
struct IconRegion *FirstRegion; /* pointer to icon regions */
struct IconRegion *LastRegion; /* pointer to the last icon region */
char *IconDirectory; /* icon directory to search */
int SizeStringOffset; /* x offset in size window for drawing */
int SizeStringWidth; /* minimum width of size window */
int BorderWidth; /* border width of twm windows */
int IconBorderWidth; /* border width of icon windows */
int UnknownWidth; /* width of the unknown icon */
int UnknownHeight; /* height of the unknown icon */
int TitleHeight; /* height of the title bar window */
TwmWindow *Focus; /* the twm window that has focus */
int EntryHeight; /* menu entry height */
int MenuLineWidth; /* the width of menu lines 0 means no bars */
int FramePadding; /* distance between decorations and border */
int TitleFontPadding; /* additional width to add to font height */
int TitlePadding; /* distance between items in titlebar */
int ButtonIndent; /* amount to shrink buttons on each side */
int NumAutoRaises; /* number of autoraise windows on screen */
short NoIconTitle; /* don't display WM_ICON_NAME */
short NoDefaults; /* do not add in default UI stuff */
short UsePPosition; /* what do with PPosition, see values below */
short AutoRelativeResize; /* start resize relative to position in quad */
short FocusRoot; /* is the input focus on the root ? */
short WarpCursor; /* warp cursor on de-iconify ? */
short ForceIcon; /* force the icon to the user specified */
short NoGrabServer; /* don't do server grabs */
short NoRaiseMove; /* don't raise window following move */
short NoRaiseResize; /* don't raise window following resize */
short NoRaiseDeicon; /* don't raise window on deiconify */
short NoRaiseWarp; /* don't raise window on warp */
short DontMoveOff; /* don't allow windows to be moved off */
short DoZoom; /* zoom in and out of icons */
short TitleFocus; /* focus on window in title bar ? */
short NoTitlebar; /* put title bars on windows */
short DecorateTransients; /* put title bars on transients */
short IconifyByUnmapping; /* simply unmap windows when iconifying */
short ShowIconManager; /* display the window list */
short IconManagerDontShow; /* show nothing in the icon manager */
short BackingStore; /* use backing store for menus */
short SaveUnder; /* use save under's for menus */
short RandomPlacement; /* randomly place windows that no give hints */
short OpaqueMove; /* move the window rather than outline */
short Highlight; /* should we highlight the window borders */
short StackMode; /* should we honor stack mode requests */
short TitleHighlight; /* should we highlight the titlebar */
short MoveDelta; /* number of pixels before f.move starts */
short ZoomCount; /* zoom outline count */
short SortIconMgr; /* sort entries in the icon manager & windows menu */
short Shadow; /* show the menu shadow */
short InterpolateMenuColors;/* make pretty menus */
short NoIconManagers; /* Don't create any icon managers */
short ClientBorderWidth; /* respect client window border width */
short SqueezeTitle; /* make title as small as possible */
short HaveFonts; /* set if fonts have been loaded */
short FirstTime; /* first time we've read .twmrc */
short CaseSensitive; /* be case-sensitive when sorting names */
short WarpUnmapped; /* allow warping to unmapped windows */
short PannerState; /* the initial state of the panner */
short PannerScale; /* scale of the panner */
short PannerOpaqueScroll; /* When you scroll in the panner, is it opaque? */
char *PannerGeometry; /* geometry of the panner */
int PannerOutlineWidth;
int PannerOutlineHeight;
int PannerOutlineX;
int PannerOutlineY;
int PannerWidth;
int PannerHeight;
short vdtBackgroundSet; /* vdt background color has been set */
char *vdtPixmap; /* vdt pixmap */
short PannerBackgroundSet; /* background of panner is set */
char *PannerPixmap; /* Panner pixmap */
short StickyAbove; /* should sticky windows be above? */
short StayUpMenus; /* do the menus stay up upon release of button ? */
short ListRings; /* allow lists to contain rings */
FuncKey FuncKeyRoot;
} ScreenInfo;
extern int MultiScreen;
extern int NumScreens;
extern ScreenInfo **ScreenList;
extern ScreenInfo *Scr;
extern int FirstScreen;
#define PPOS_OFF 0
#define PPOS_ON 1
#define PPOS_NON_ZERO 2
/* may eventually want an option for having the PPosition be the initial
location for the drag lines */
#endif /* _SCREEN_ */
syntax highlighted by Code2HTML, v. 0.9.1