1 /***********************************************************
2 
3 Copyright 1987, 1998  The Open Group
4 
5 Permission to use, copy, modify, distribute, and sell this software and its
6 documentation for any purpose is hereby granted without fee, provided that
7 the above copyright notice appear in all copies and that both that
8 copyright notice and this permission notice appear in supporting
9 documentation.
10 
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 
21 Except as contained in this notice, the name of The Open Group shall not be
22 used in advertising or otherwise to promote the sale, use or other dealings
23 in this Software without prior written authorization from The Open Group.
24 
25 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
26 
27                         All Rights Reserved
28 
29 Permission to use, copy, modify, and distribute this software and its
30 documentation for any purpose and without fee is hereby granted,
31 provided that the above copyright notice appear in all copies and that
32 both that copyright notice and this permission notice appear in
33 supporting documentation, and that the name of Digital not be
34 used in advertising or publicity pertaining to distribution of the
35 software without specific, written prior permission.
36 
37 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
43 SOFTWARE.
44 
45 ******************************************************************/
46 
47 #ifndef WINDOW_H
48 #define WINDOW_H
49 
50 #include "misc.h"
51 #include "region.h"
52 #include "screenint.h"
53 #include <X11/Xproto.h>
54 
55 #define TOTALLY_OBSCURED 0
56 #define UNOBSCURED 1
57 #define OBSCURED 2
58 
59 #define VisibilityNotViewable	3
60 
61 /* return values for tree-walking callback procedures */
62 #define WT_STOPWALKING		0
63 #define WT_WALKCHILDREN		1
64 #define WT_DONTWALKCHILDREN	2
65 #define WT_NOMATCH 3
66 #define NullWindow ((WindowPtr) 0)
67 
68 /* Forward declaration, we can't include input.h here */
69 struct _DeviceIntRec;
70 struct _Cursor;
71 
72 typedef struct _BackingStore *BackingStorePtr;
73 typedef struct _Window *WindowPtr;
74 
75 enum RootClipMode {
76     ROOT_CLIP_NONE = 0, /**< resize the root window to 0x0 */
77     ROOT_CLIP_FULL = 1, /**< resize the root window to fit screen */
78     ROOT_CLIP_INPUT_ONLY = 2, /**< as above, but no rendering to screen */
79 };
80 
81 typedef int (*VisitWindowProcPtr) (WindowPtr pWin,
82                                    void *data);
83 
84 extern _X_EXPORT int TraverseTree(WindowPtr pWin,
85                                   VisitWindowProcPtr func,
86                                   void *data);
87 
88 extern _X_EXPORT int WalkTree(ScreenPtr pScreen,
89                               VisitWindowProcPtr func,
90                               void *data);
91 
92 extern _X_EXPORT Bool CreateRootWindow(ScreenPtr /*pScreen */ );
93 
94 extern _X_EXPORT void InitRootWindow(WindowPtr /*pWin */ );
95 
96 typedef WindowPtr (*RealChildHeadProc) (WindowPtr pWin);
97 
98 extern _X_EXPORT void RegisterRealChildHeadProc(RealChildHeadProc proc);
99 
100 extern _X_EXPORT WindowPtr RealChildHead(WindowPtr /*pWin */ );
101 
102 extern _X_EXPORT WindowPtr CreateWindow(Window /*wid */ ,
103                                         WindowPtr /*pParent */ ,
104                                         int /*x */ ,
105                                         int /*y */ ,
106                                         unsigned int /*w */ ,
107                                         unsigned int /*h */ ,
108                                         unsigned int /*bw */ ,
109                                         unsigned int /*class */ ,
110                                         Mask /*vmask */ ,
111                                         XID * /*vlist */ ,
112                                         int /*depth */ ,
113                                         ClientPtr /*client */ ,
114                                         VisualID /*visual */ ,
115                                         int * /*error */ );
116 
117 extern _X_EXPORT int DeleteWindow(void *pWin,
118                                   XID wid);
119 
120 extern _X_EXPORT int DestroySubwindows(WindowPtr /*pWin */ ,
121                                        ClientPtr /*client */ );
122 
123 /* Quartz support on Mac OS X uses the HIToolbox
124    framework whose ChangeWindowAttributes function conflicts here. */
125 #ifdef __APPLE__
126 #define ChangeWindowAttributes Darwin_X_ChangeWindowAttributes
127 #endif
128 extern _X_EXPORT int ChangeWindowAttributes(WindowPtr /*pWin */ ,
129                                             Mask /*vmask */ ,
130                                             XID * /*vlist */ ,
131                                             ClientPtr /*client */ );
132 
133 extern _X_EXPORT int ChangeWindowDeviceCursor(WindowPtr /*pWin */ ,
134                                               struct _DeviceIntRec * /*pDev */ ,
135                                               struct _Cursor * /*pCursor */ );
136 
137 extern _X_EXPORT struct _Cursor *WindowGetDeviceCursor(WindowPtr /*pWin */ ,
138                                                        struct _DeviceIntRec *
139                                                        /*pDev */ );
140 
141 /* Quartz support on Mac OS X uses the HIToolbox
142    framework whose GetWindowAttributes function conflicts here. */
143 #ifdef __APPLE__
144 #define GetWindowAttributes(w,c,x) Darwin_X_GetWindowAttributes(w,c,x)
145 extern void Darwin_X_GetWindowAttributes(
146 #else
147 extern _X_EXPORT void GetWindowAttributes(
148 #endif
149                                              WindowPtr /*pWin */ ,
150                                              ClientPtr /*client */ ,
151                                              xGetWindowAttributesReply *
152                                              /* wa */ );
153 
154 extern _X_EXPORT void GravityTranslate(int /*x */ ,
155                                        int /*y */ ,
156                                        int /*oldx */ ,
157                                        int /*oldy */ ,
158                                        int /*dw */ ,
159                                        int /*dh */ ,
160                                        unsigned /*gravity */ ,
161                                        int * /*destx */ ,
162                                        int * /*desty */ );
163 
164 extern _X_EXPORT int ConfigureWindow(WindowPtr /*pWin */ ,
165                                      Mask /*mask */ ,
166                                      XID * /*vlist */ ,
167                                      ClientPtr /*client */ );
168 
169 extern _X_EXPORT int CirculateWindow(WindowPtr /*pParent */ ,
170                                      int /*direction */ ,
171                                      ClientPtr /*client */ );
172 
173 extern _X_EXPORT int ReparentWindow(WindowPtr /*pWin */ ,
174                                     WindowPtr /*pParent */ ,
175                                     int /*x */ ,
176                                     int /*y */ ,
177                                     ClientPtr /*client */ );
178 
179 extern _X_EXPORT int MapWindow(WindowPtr /*pWin */ ,
180                                ClientPtr /*client */ );
181 
182 extern _X_EXPORT void MapSubwindows(WindowPtr /*pParent */ ,
183                                     ClientPtr /*client */ );
184 
185 extern _X_EXPORT int UnmapWindow(WindowPtr /*pWin */ ,
186                                  Bool /*fromConfigure */ );
187 
188 extern _X_EXPORT void UnmapSubwindows(WindowPtr /*pWin */ );
189 
190 extern _X_EXPORT void HandleSaveSet(ClientPtr /*client */ );
191 
192 extern _X_EXPORT Bool PointInWindowIsVisible(WindowPtr /*pWin */ ,
193                                              int /*x */ ,
194                                              int /*y */ );
195 
196 extern _X_EXPORT RegionPtr NotClippedByChildren(WindowPtr /*pWin */ );
197 
198 extern _X_EXPORT void SendVisibilityNotify(WindowPtr /*pWin */ );
199 
200 extern _X_EXPORT int dixSaveScreens(ClientPtr client, int on, int mode);
201 
202 extern _X_EXPORT int SaveScreens(int on, int mode);
203 
204 extern _X_EXPORT WindowPtr FindWindowWithOptional(WindowPtr /*w */ );
205 
206 extern _X_EXPORT void CheckWindowOptionalNeed(WindowPtr /*w */ );
207 
208 extern _X_EXPORT Bool MakeWindowOptional(WindowPtr /*pWin */ );
209 
210 extern _X_EXPORT WindowPtr MoveWindowInStack(WindowPtr /*pWin */ ,
211                                              WindowPtr /*pNextSib */ );
212 
213 extern _X_EXPORT void SetWinSize(WindowPtr /*pWin */ );
214 
215 extern _X_EXPORT void SetBorderSize(WindowPtr /*pWin */ );
216 
217 extern _X_EXPORT void ResizeChildrenWinSize(WindowPtr /*pWin */ ,
218                                             int /*dx */ ,
219                                             int /*dy */ ,
220                                             int /*dw */ ,
221                                             int /*dh */ );
222 
223 extern _X_EXPORT void SendShapeNotify(WindowPtr /* pWin */ ,
224                                       int /* which */);
225 
226 extern _X_EXPORT RegionPtr CreateBoundingShape(WindowPtr /* pWin */ );
227 
228 extern _X_EXPORT RegionPtr CreateClipShape(WindowPtr /* pWin */ );
229 
230 extern _X_EXPORT void SetRootClip(ScreenPtr pScreen, int enable);
231 extern _X_EXPORT void PrintWindowTree(void);
232 extern _X_EXPORT void PrintPassiveGrabs(void);
233 
234 extern _X_EXPORT VisualPtr WindowGetVisual(WindowPtr /*pWin*/);
235 #endif                          /* WINDOW_H */
236