|  | /* Copyright (c) 1994-1996 David Hogan, see README for licence details */ | 
|  |  | 
|  | #define BORDER		_border | 
|  | #define CORNER		_corner | 
|  | #define	INSET		_inset | 
|  | #define MAXHIDDEN	128 | 
|  | #define B3FIXED 	5 | 
|  | #define NUMVIRTUALS	12 | 
|  |  | 
|  | #define AllButtonMask	(Button1Mask|Button2Mask|Button3Mask \ | 
|  | |Button4Mask|Button5Mask) | 
|  | #define ButtonMask	(ButtonPressMask|ButtonReleaseMask) | 
|  | #define MenuMask	(ButtonMask|ButtonMotionMask|ExposureMask) | 
|  | #define MenuGrabMask	(ButtonMask|ButtonMotionMask|StructureNotifyMask) | 
|  |  | 
|  | #ifdef	Plan9 | 
|  | #define DEFSHELL	"/bin/rc" | 
|  | #else | 
|  | #define DEFSHELL	"/bin/sh" | 
|  | #endif | 
|  |  | 
|  | typedef struct Client Client; | 
|  | typedef struct Menu Menu; | 
|  | typedef struct ScreenInfo ScreenInfo; | 
|  |  | 
|  | struct Client { | 
|  | Window		window; | 
|  | Window		parent; | 
|  | Window		trans; | 
|  | Client		*next; | 
|  | Client		*revert; | 
|  |  | 
|  | int 		x; | 
|  | int 		y; | 
|  | int 		dx; | 
|  | int 		dy; | 
|  | int 		border; | 
|  |  | 
|  | XSizeHints	size; | 
|  | int 		min_dx; | 
|  | int 		min_dy; | 
|  |  | 
|  | int 		state; | 
|  | int 		init; | 
|  | int 		reparenting; | 
|  | int 		is9term; | 
|  | int 		hold; | 
|  | int 		proto; | 
|  | int			virt; | 
|  |  | 
|  | char		*label; | 
|  | char		*instance; | 
|  | char		*class; | 
|  | char		*name; | 
|  | char		*iconname; | 
|  |  | 
|  | Colormap	cmap; | 
|  | int 		ncmapwins; | 
|  | Window		*cmapwins; | 
|  | Colormap	*wmcmaps; | 
|  | ScreenInfo	*screen; | 
|  | }; | 
|  |  | 
|  | #define hidden(c)	((c)->state == IconicState) | 
|  | #define withdrawn(c)	((c)->state == WithdrawnState) | 
|  | #define normal(c)	((c)->state == NormalState) | 
|  |  | 
|  | /* c->proto */ | 
|  | #define Pdelete 	1 | 
|  | #define Ptakefocus	2 | 
|  | #define Plosefocus	4 | 
|  |  | 
|  | struct Menu { | 
|  | char	**item; | 
|  | char	*(*gen)(); | 
|  | int	lasthit; | 
|  | }; | 
|  |  | 
|  | enum BorderOrient { | 
|  | BorderUnknown = 0, /* we depend on this!*/ | 
|  | BorderN, | 
|  | BorderNNE, | 
|  | BorderENE, | 
|  | BorderE, | 
|  | BorderESE, | 
|  | BorderSSE, | 
|  | BorderS, | 
|  | BorderSSW, | 
|  | BorderWSW, | 
|  | BorderW, | 
|  | BorderWNW, | 
|  | BorderNNW, | 
|  | NBorder | 
|  | }; | 
|  | typedef enum BorderOrient BorderOrient; | 
|  |  | 
|  | struct ScreenInfo { | 
|  | int			num; | 
|  | int			depth; | 
|  | Visual		*vis; | 
|  | int			width; | 
|  | int			height; | 
|  | Window		root; | 
|  | Window		menuwin; | 
|  | Window		sweepwin; | 
|  | Colormap		def_cmap; | 
|  | GC			gc; | 
|  | GC			gccopy; | 
|  | GC			gcred; | 
|  | GC			gcsweep; | 
|  | GC			gcmenubg; | 
|  | GC			gcmenubgs; | 
|  | GC			gcmenufg; | 
|  | GC			gcmenufgs; | 
|  | unsigned long	black; | 
|  | unsigned long	white; | 
|  | unsigned long	activeholdborder; | 
|  | unsigned long	inactiveholdborder; | 
|  | unsigned long	activeborder; | 
|  | unsigned long	inactiveborder; | 
|  | unsigned long	red; | 
|  | Pixmap		bkup[2]; | 
|  | int			min_cmaps; | 
|  | Cursor		target; | 
|  | Cursor		sweep0; | 
|  | Cursor		boxcurs; | 
|  | Cursor		arrow; | 
|  | Cursor		bordcurs[NBorder]; | 
|  | Pixmap		root_pixmap; | 
|  | char			display[256];	/* arbitrary limit */ | 
|  | }; | 
|  |  | 
|  | /* main.c */ | 
|  | extern Display		*dpy; | 
|  | extern ScreenInfo	*screens; | 
|  | extern int			num_screens; | 
|  | extern int			initting; | 
|  | extern XFontStruct	*font; | 
|  | extern int			nostalgia; | 
|  | extern char		**myargv; | 
|  | extern Bool 		shape; | 
|  | extern char 		*termprog; | 
|  | extern char 		*shell; | 
|  | extern char 		*version[]; | 
|  | extern int			_border; | 
|  | extern int			_corner; | 
|  | extern int			_inset; | 
|  | extern int			curtime; | 
|  | extern int			debug; | 
|  | extern int			solidsweep; | 
|  | extern int			numvirtuals; | 
|  | extern int			scrolling; | 
|  | extern int			ffm;	/* focus follows mouse */ | 
|  |  | 
|  | extern Atom		exit_rio; | 
|  | extern Atom		restart_rio; | 
|  | extern Atom 		wm_state; | 
|  | extern Atom		wm_change_state; | 
|  | extern Atom 		_rio_hold_mode; | 
|  | extern Atom 		wm_protocols; | 
|  | extern Atom 		wm_delete; | 
|  | extern Atom 		wm_take_focus; | 
|  | extern Atom		wm_lose_focus; | 
|  | extern Atom 		wm_colormaps; | 
|  | extern Atom		wm_state_fullscreen; | 
|  | extern Atom		wm_state; | 
|  | /* client.c */ | 
|  | extern Client		*clients; | 
|  | extern Client		*current; | 
|  | extern Client		*currents[]; | 
|  |  | 
|  | /* menu.c */ | 
|  | extern Client		*hiddenc[]; | 
|  | extern int 			numhidden; | 
|  | extern char 		*b2items[]; | 
|  | extern Menu 		b2menu; | 
|  | extern char 		*b3items[]; | 
|  | extern Menu 		b3menu; | 
|  | extern int			virt; | 
|  |  | 
|  | /* manage.c */ | 
|  | extern int			isNew; | 
|  |  | 
|  | /* error.c */ | 
|  | extern int 			ignore_badwindow; |