/* * 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 #include #include #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 */ #ifdef XPM name_list *IconsPixmapType; /* type of Pixmap, Xpm or Xbm. ('p' or 'b') */ #endif #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 */ #ifdef XPM Bool hilite_pm_isXpm; /* True is pixmap is Xpm format */ Bool hilite_left_pm_isXpm, hilite_right_pm_isXpm; #endif 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_ */