2015-10-15 21:39:42 +02:00

483 lines
21 KiB
C

/*
* 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.
*/
/*
* [ ctwm ]
*
* Copyright 1992 Claude Lecommandeur.
*
* Permission to use, copy, modify and distribute this software [ctwm] and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting documen-
* tation, and that the name of Claude Lecommandeur not be used in adverti-
* sing or publicity pertaining to distribution of the software without
* specific, written prior permission. Claude Lecommandeur make no represen-
* tations about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty.
*
* Claude Lecommandeur DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
* EVENT SHALL Claude Lecommandeur 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.
*
* Author: Claude Lecommandeur [ lecom@sic.epfl.ch ][ April 1992 ]
*/
/***********************************************************************
*
* $XConsortium: screen.h,v 1.62 91/05/01 17:33:09 keith Exp $
*
* twm per-screen data include file
*
* 11-3-88 Dave Payne, Apple Computer File created
*
***********************************************************************/
#ifndef _SCREEN_
#define _SCREEN_
#ifdef VMS
#include <decw$include/Xlib.h>
#include <decw$include/Xutil.h>
#include <decw$include/cursorfont.h>
#else
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
#endif
#ifdef GNOME
# include "gnome.h"
#endif /* GNOME */
#include "list.h"
#include "menus.h"
#include "iconmgr.h"
#include "vscreen.h"
#include "workmgr.h"
#define ICONIFY_NORMAL 0
#define ICONIFY_MOSAIC 1
#define ICONIFY_ZOOMIN 2
#define ICONIFY_ZOOMOUT 3
#define ICONIFY_SWEEP 4
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 */
};
#define SIZE_HINDENT 10
#define SIZE_VINDENT 2
struct _TitlebarPixmaps {
Pixmap xlogo;
Pixmap resize;
Pixmap question;
Pixmap menu;
Pixmap delete;
};
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 rootx; /* The x coordinate of the root window (virtual screen) relative to RealRoot */
int rooty; /* The y coordinate of the root window (virtual screen) relative to RealRoot */
int rootw; /* my copy of DisplayWidth(dpy, screen) */
int rooth; /* my copy of DisplayHeight(dpy, screen) */
int crootx; /* The x coordinate of the captive root window if any */
int crooty; /* The y coordinate of the captive root window if any */
int crootw; /* my copy of DisplayWidth(dpy, screen) */
int crooth; /* my copy of DisplayHeight(dpy, screen) */
int MaxWindowWidth; /* largest window to allow */
int MaxWindowHeight; /* ditto */
TwmWindow *FirstWindow; /* the head of the twm window list */
Colormaps RootColormaps; /* the colormaps of the root window */
Window Root; /* the root window: the current virual screen */
Window XineramaRoot; /* the root window, may be CaptiveRoot or otherwise RealRoot */
Window CaptiveRoot; /* the captive root window, if any, or 0 */
Window RealRoot; /* the actual root window of the display */
/*
* +--RealRoot-----------------------------------------------------------+
* | the root of the display (most uses of this are probably incorrect!) |
* | |
* | +--CaptiveRoot--------------------------------------------------+ |
* | | when captive window is used (most uses are likely incorrect!) | |
* | | | |
* | | +--XineramaRoot---------------------------------------------+ | |
* | | | the root that encompasses all virual screens | | |
* | | | | | |
* | | | +--Root-----------+ +--Root--------+ +--Root------------+ | | |
* | | | | one or more | | Most cases | | | | | |
* | | | | virtual screens | | use Root. | | | | | |
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* | | | +-----------------+ +--------------+ +------------------+ | | |
* | | +-----------------------------------------------------------+ | |
* | +---------------------------------------------------------------+ |
* +---------------------------------------------------------------------+
*/
Window SizeWindow; /* the resize dimensions window */
Window InfoWindow; /* the information window */
Window WindowMask; /* the window masking the screen at startup */
Window ShapeWindow; /* an utilitary window for animated icons */
Image *WelcomeImage;
GC WelcomeGC;
Colormap WelcomeCmap;
Visual *WelcomeVisual;
name_list *ImageCache; /* list of pixmaps */
TitlebarPixmaps tbpm; /* titlebar pixmaps */
Image *UnknownImage; /* the unknown icon pixmap */
Pixmap siconifyPm; /* the icon manager iconify pixmap */
Pixmap pullPm; /* pull right menu icon */
unsigned int pullW, pullH; /* size of pull right menu icon */
char *HighlightPixmapName; /* name of the hilite image if any */
MenuRoot *MenuList; /* head of the menu list */
MenuRoot *LastMenu; /* the last menu (mostly unused?) */
MenuRoot *Windows; /* the TwmWindows menu */
MenuRoot *Icons; /* the TwmIcons menu */
MenuRoot *Workspaces; /* the TwmWorkspaces menu */
MenuRoot *AllWindows; /* the TwmAllWindows menu */
/*Added by dl 2004 */
MenuRoot *AllIcons; /* the TwmAllIcons menu */
/******************************************************/
/* Added by Dan Lilliehorn (dl@dl.nu) 2000-02-29) */
MenuRoot *Keys; /* the TwmKeys menu */
MenuRoot *Visible; /* thw TwmVisible menu */
TwmWindow *Ring; /* one of the windows in window ring */
TwmWindow *RingLeader; /* current window in ring */
MouseButton DefaultFunction;
MouseButton WindowFunction;
MouseButton ChangeWorkspaceFunction;
MouseButton DeIconifyFunction;
MouseButton IconifyFunction;
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 */
Colormaps *pushed_cmaps; /* saved colormaps 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 */
int rightoff; /* offset back from right edge */
int titlew; /* width of title part */
} 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 BorderColorC; /* color of window borders */
Pixel MenuShadowColor; /* menu shadow color */
Pixel IconBorderColor; /* icon border color */
Pixel IconManagerHighlight; /* icon manager highlight */
short ClearShadowContrast; /* The contrast of the clear shadow */
short DarkShadowContrast; /* The contrast of the dark shadow */
short IconJustification; /* J_LEFT, J_CENTER or J_RIGHT */
short IconRegionJustification; /* J_LEFT, J_CENTER J_RIGHT or J_BORDER */
short IconRegionAlignement; /* J_TOP, J_CENTER, J_BOTTOM or J_BORDER */
short TitleJustification; /* J_LEFT, J_CENTER or J_RIGHT */
short IconifyStyle; /* ICONIFY_* */
int MaxIconTitleWidth; /* */
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 */
Cursor AlterCursor; /* cursor for alternate keymaps */
WorkSpaceMgr workSpaceMgr;
short workSpaceManagerActive;
virtualScreen *vScreenList;
virtualScreen *currentvs;
name_list *VirtualScreens;
name_list *OccupyAll; /* list of window names occupying all workspaces at startup */
name_list *UnmapByMovingFarAway;
name_list *DontSetInactive;
name_list *AutoSqueeze;
name_list *StartSqueezed;
short use3Dmenus;
short use3Dtitles;
short use3Diconmanagers;
short use3Dborders;
short use3Dwmap;
short use3Diconborders;
short SunkFocusWindowTitle;
short WMgrVertButtonIndent;
short WMgrHorizButtonIndent;
short WMgrButtonShadowDepth;
short BeNiceToColormap;
short BorderCursors;
short BorderShadowDepth;
short TitleButtonShadowDepth;
short TitleShadowDepth;
short MenuShadowDepth;
short IconManagerShadowDepth;
short ReallyMoveInWorkspaceManager;
short ShowWinWhenMovingInWmgr;
short ReverseCurrentWorkspace;
short DontWarpCursorInWMap;
short XMoveGrid, YMoveGrid;
short FastServer;
short CenterFeedbackWindow;
short ShrinkIconTitles;
short AutoRaiseIcons;
short AutoFocusToTransients; /* kai */
short PackNewWindows;
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 *NoBorder; /* list of window without borders */
name_list *NoIconTitle; /* list of window names with no icon title */
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 *AutoLower; /* list of window names to auto-lower */
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 *AlwaysOnTopL; /* windows to keep on top */
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 *AlwaysSqueezeToGravityL; /* windows which should squeeze toward gravity */
name_list *WindowRingL; /* windows in ring */
name_list *WindowRingExcludeL; /* windows excluded from ring */
name_list *WarpCursorL; /* windows to warp cursor to on deiconify */
name_list *DontSave;
name_list *WindowGeometries;
name_list *IgnoreTransientL;
name_list *OpaqueMoveList;
name_list *NoOpaqueMoveList;
name_list *OpaqueResizeList;
name_list *NoOpaqueResizeList;
name_list *IconMenuDontShow;
GC NormalGC; /* normal GC for everything */
GC MenuGC; /* gc for menus */
GC DrawGC; /* GC to draw lines for move and resize */
GC BorderGC; /* for drawing 3D borders */
GC rootGC; /* used for allocating pixmaps in FindPixmap (util.c) */
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 IconFont; /* icon font structure */
MyFont SizeFont; /* resize font structure */
MyFont IconManagerFont; /* window list font structure */
MyFont DefaultFont;
IconMgr *iconmgr; /* default icon manager */
struct IconRegion *FirstRegion; /* pointer to icon regions */
struct IconRegion *LastRegion; /* pointer to the last icon region */
struct WindowRegion *FirstWindowRegion; /* pointer to window regions */
WindowBox *FirstWindowBox; /* pointer to window boxes list */
char *IconDirectory; /* icon directory to search */
char *PixmapDirectory; /* Pixmap 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 BorderLeft;
int BorderRight;
int BorderTop;
int BorderBottom;
int ThreeDBorderWidth; /* 3D border width of twm windows */
int IconBorderWidth; /* border width of icon windows */
int TitleHeight; /* height of the title bar window */
TwmWindow *Focus; /* the twm window that has focus */
int EntryHeight; /* menu entry height */
int FramePadding; /* distance between decorations and border */
int TitlePadding; /* distance between items in titlebar */
int ButtonIndent; /* amount to shrink buttons on each side */
int NumAutoRaises; /* number of autoraise windows on screen */
int NumAutoLowers; /* number of autolower windows on screen */
int TransientOnTop; /* Percentage of the surface of it's leader */
short AutoRaiseDefault; /* AutoRaise all windows if true */
short AutoLowerDefault; /* AutoLower all windows if true */
short NoDefaults; /* do not add in default UI stuff */
short UsePPosition; /* what do with PPosition, see values below */
short UseSunkTitlePixmap;
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 RaiseOnWarp; /* do raise window on warp */
short DontMoveOff; /* don't allow windows to be moved off */
int MoveOffResistance; /* nb of pixel before moveOff gives up */
int MovePackResistance; /* nb of pixel before f.movepack gives up */
short DoZoom; /* zoom in and out of icons */
short TitleFocus; /* focus on window in title bar ? */
short IconManagerFocus; /* focus on iconified window ? */
short NoIconTitlebar; /* put title bars on icons */
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 ShowWorkspaceManager; /* display the workspace manager */
short IconManagerDontShow; /* show nothing in the icon manager */
short AutoOccupy; /* Do we automatically change occupation when name changes */
short TransientHasOccupation; /* Do transient-for windows have their own occupation */
short DontPaintRootWindow; /* don't paint anything on the root window */
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 RandomDisplacementX; /* randomly displace by this much horizontally */
short RandomDisplacementY; /* randomly displace by this much vertically */
short OpaqueMove; /* move the window rather than outline */
short DoOpaqueMove; /* move the window rather than outline */
short OpaqueMoveThreshold; /* */
short DoOpaqueResize; /* resize the window rather than outline */
short OpaqueResize; /* resize the window rather than outline */
short OpaqueResizeThreshold; /* */
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 */
short Shadow; /* show the menu shadow */
short InterpolateMenuColors;/* make pretty menus */
short StayUpMenus; /* stay up menus */
short WarpToDefaultMenuEntry; /* warp cursor to default menu entry, if any */
short ClickToFocus; /* click to focus */
short SloppyFocus; /* "sloppy" focus */
short SaveWorkspaceFocus; /* Save and restore focus on workspace change. */
short NoIconManagers; /* Don't create any icon managers */
short ClientBorderWidth; /* respect client window border width */
short SqueezeTitle; /* make title as small as possible */
short AlwaysSqueezeToGravity; /* squeeze toward gravity */
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 WindowRingAll; /* add all windows to the ring */
short WarpRingAnyWhere; /* warp to ring even if window is not visible */
short ShortAllWindowsMenus; /* Eliminates Icon and Workspace Managers */
short OpenWindowTimeout; /* Timeout when a window tries to open */
short RaiseWhenAutoUnSqueeze;
short RaiseOnClick; /* Raise a window when clieked into */
short RaiseOnClickButton; /* Raise a window when clieked into */
short IgnoreLockModifier; /* Should we ignore the lock modifier */
unsigned int IgnoreModifier;
short IgnoreCaseInMenuSelection; /* Should we ignore case in menu selection */
short NoWarpToMenuTitle; /* warp cursor to clipped menu title */
short NoImagesInWorkSpaceManager; /* do not display mini images of the desktop background images on WSmap */
FuncKey FuncKeyRoot;
FuncButton FuncButtonRoot;
#ifdef GNOME
GnomeData *gnomedata;
#endif /* GNOME */
};
extern int captive;
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 */
#define RP_OFF 0
#define RP_ALL 1
#define RP_UNMAPPED 2
#define ONTOP_MAX 16
#define ONTOP_DEFAULT 8
#endif /* _SCREEN_ */