xref: /386bsd/usr/X386/lib/Server/include/windowstr.h (revision a2142627)
1 /* $XConsortium: windowstr.h,v 5.13 89/10/04 10:27:15 rws Exp $ */
2 /***********************************************************
3 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
4 and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
5 
6                         All Rights Reserved
7 
8 Permission to use, copy, modify, and distribute this software and its
9 documentation for any purpose and without fee is hereby granted,
10 provided that the above copyright notice appear in all copies and that
11 both that copyright notice and this permission notice appear in
12 supporting documentation, and that the names of Digital or MIT not be
13 used in advertising or publicity pertaining to distribution of the
14 software without specific, written prior permission.
15 
16 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
17 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
18 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
19 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
21 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
22 SOFTWARE.
23 
24 ******************************************************************/
25 
26 #ifndef WINDOWSTRUCT_H
27 #define WINDOWSTRUCT_H
28 
29 #include "window.h"
30 #include "pixmapstr.h"
31 #include "regionstr.h"
32 #include "cursor.h"
33 #include "property.h"
34 #include "resource.h"	/* for ROOT_WINDOW_ID_BASE */
35 #include "dix.h"
36 #include "miscstruct.h"
37 #include "Xprotostr.h"
38 
39 #define GuaranteeNothing	0
40 #define GuaranteeVisBack	1
41 
42 #define SameBackground(as, a, bs, b)				\
43     ((as) == (bs) && ((as) == None ||				\
44 		      (as) == ParentRelative ||			\
45  		      SamePixUnion(a,b,as == BackgroundPixel)))
46 
47 #define SameBorder(as, a, bs, b)				\
48     EqualPixUnion(as, a, bs, b)
49 
50 typedef struct _WindowOpt {
51     VisualID		visual;		   /* default: same as parent */
52     CursorPtr		cursor;		   /* default: window.cursorNone */
53     Colormap		colormap;	   /* default: same as parent */
54     Mask		dontPropagateMask; /* default: window.dontPropagate */
55     Mask		otherEventMasks;   /* default: 0 */
56     struct _OtherClients *otherClients;	   /* default: NULL */
57     struct _GrabRec	*passiveGrabs;	   /* default: NULL */
58     PropertyPtr		userProps;	   /* default: NULL */
59     unsigned long	backingBitPlanes;  /* default: ~0L */
60     unsigned long	backingPixel;	   /* default: 0 */
61 #ifdef SHAPE
62     RegionPtr		boundingShape;	   /* default: NULL */
63     RegionPtr		clipShape;	   /* default: NULL */
64 #endif
65 #ifdef XINPUT
66     struct _OtherInputMasks *inputMasks;   /* default: NULL */
67 #endif
68 } WindowOptRec, *WindowOptPtr;
69 
70 #define BackgroundPixel	    2L
71 #define BackgroundPixmap    3L
72 
73 typedef struct _Window {
74     DrawableRec		drawable;
75     WindowPtr		parent;		/* ancestor chain */
76     WindowPtr		nextSib;	/* next lower sibling */
77     WindowPtr		prevSib;	/* next higher sibling */
78     WindowPtr		firstChild;	/* top-most child */
79     WindowPtr		lastChild;	/* bottom-most child */
80     RegionRec		clipList;	/* clipping rectangle for output */
81     RegionRec		borderClip;	/* NotClippedByChildren + border */
82     union _Validate	*valdata;
83     RegionRec		winSize;
84     RegionRec		borderSize;
85     DDXPointRec		origin;		/* position relative to parent */
86     unsigned short	borderWidth;
87     unsigned short	deliverableEvents;
88     Mask		eventMask;
89     PixUnion		background;
90     PixUnion		border;
91     pointer		backStorage;	/* null when BS disabled */
92     WindowOptPtr	optional;
93     unsigned		backgroundState:2; /* None, Relative, Pixel, Pixmap */
94     unsigned		borderIsPixel:1;
95     unsigned		cursorIsNone:1;	/* else same as parent */
96     unsigned		backingStore:2;
97     unsigned		saveUnder:1;
98     unsigned		DIXsaveUnder:1;
99     unsigned		bitGravity:4;
100     unsigned		winGravity:4;
101     unsigned		overrideRedirect:1;
102     unsigned		visibility:2;
103     unsigned		mapped:1;
104     unsigned		realized:1;	/* ancestors are all mapped */
105     unsigned		viewable:1;	/* realized && InputOutput */
106     unsigned		dontPropagate:3;/* index into DontPropagateMasks */
107     DevUnion		*devPrivates;
108 } WindowRec;
109 
110 /*
111  * Ok, a bunch of macros for accessing the optional record
112  * fields (or filling the appropriate default value)
113  */
114 
115 extern WindowPtr    FindWindowWithOptional();
116 extern Mask	    DontPropagateMasks[];
117 
118 #define wTrackParent(w,field)	((w)->optional ? \
119 				    w->optional->field \
120  				 : FindWindowWithOptional(w)->optional->field)
121 #define wUseDefault(w,field,def)	((w)->optional ? \
122 				    w->optional->field \
123 				 : def)
124 
125 #define wVisual(w)		wTrackParent(w, visual)
126 #define wCursor(w)		((w)->cursorIsNone ? None : wTrackParent(w, cursor))
127 #define wColormap(w)		((w)->drawable.class == InputOnly ? None : wTrackParent(w, colormap))
128 #define wDontPropagateMask(w)	wUseDefault(w, dontPropagateMask, DontPropagateMasks[(w)->dontPropagate])
129 #define wOtherEventMasks(w)	wUseDefault(w, otherEventMasks, 0)
130 #define wOtherClients(w)	wUseDefault(w, otherClients, NULL)
131 #ifdef XINPUT
132 #define wOtherInputMasks(w)	wUseDefault(w, inputMasks, NULL)
133 #else
134 #define wOtherInputMasks(w)	NULL
135 #endif
136 #define wPassiveGrabs(w)	wUseDefault(w, passiveGrabs, NULL)
137 #define wUserProps(w)		wUseDefault(w, userProps, NULL)
138 #define wBackingBitPlanes(w)	wUseDefault(w, backingBitPlanes, ~0L)
139 #define wBackingPixel(w)	wUseDefault(w, backingPixel, 0)
140 #ifdef SHAPE
141 #define wBoundingShape(w)	wUseDefault(w, boundingShape, NULL)
142 #define wClipShape(w)		wUseDefault(w, clipShape, NULL)
143 #endif
144 #define wClient(w)		(clients[CLIENT_ID((w)->drawable.id)])
145 #define wBorderWidth(w)		((int) (w)->borderWidth)
146 
147 /* true when w needs a border drawn. */
148 
149 #ifdef SHAPE
150 #define HasBorder(w)	((w)->borderWidth || wClipShape(w))
151 #else
152 #define HasBorder(w)	((w)->borderWidth)
153 #endif
154 
155 extern int DeleteWindow();
156 extern int ChangeWindowAttributes();
157 extern int WalkTree();
158 extern Bool CreateRootWindow();
159 extern WindowPtr CreateWindow();
160 extern int DeleteWindow();
161 extern int DestroySubwindows();
162 extern int ChangeWindowAttributes();
163 extern int GetWindowAttributes();
164 extern int ConfigureWindow();
165 extern int ReparentWindow();
166 extern int MapWindow();
167 extern int MapSubwindow();
168 extern int UnmapWindow();
169 extern int UnmapSubwindow();
170 extern RegionPtr NotClippedByChildren();
171 extern void SendVisibilityNotify();
172 
173 #endif /* WINDOWSTRUCT_H */
174 
175