#ifndef WINDOWSTRUCT_H
#define WINDOWSTRUCT_H
#include "window.h"
#include "pixmapstr.h"
#include "regionstr.h"
#include "cursor.h"
#include "property.h"
#include "resource.h"
#include "dix.h"
#include "miscstruct.h"
#include <X11/Xprotostr.h>
#include "opaque.h"
#define GuaranteeNothing 0
#define GuaranteeVisBack 1
#define SameBackground(as, a, bs, b) \
((as) == (bs) && ((as) == None || \
(as) == ParentRelative || \
SamePixUnion(a,b,as == BackgroundPixel)))
#define SameBorder(as, a, bs, b) \
EqualPixUnion(as, a, bs, b)
typedef struct _WindowOpt {
VisualID visual;
CursorPtr cursor;
Colormap colormap;
Mask dontPropagateMask;
Mask otherEventMasks;
struct _OtherClients *otherClients;
struct _GrabRec *passiveGrabs;
PropertyPtr userProps;
unsigned long backingBitPlanes;
unsigned long backingPixel;
#ifdef SHAPE
RegionPtr boundingShape;
RegionPtr clipShape;
RegionPtr inputShape;
#endif
#ifdef XINPUT
struct _OtherInputMasks *inputMasks;
#endif
} WindowOptRec, *WindowOptPtr;
#define BackgroundPixel 2L
#define BackgroundPixmap 3L
typedef struct _Window {
DrawableRec drawable;
WindowPtr parent;
WindowPtr nextSib;
WindowPtr prevSib;
WindowPtr firstChild;
WindowPtr lastChild;
RegionRec clipList;
RegionRec borderClip;
union _Validate *valdata;
RegionRec winSize;
RegionRec borderSize;
DDXPointRec origin;
unsigned short borderWidth;
unsigned short deliverableEvents;
Mask eventMask;
PixUnion background;
PixUnion border;
pointer backStorage;
WindowOptPtr optional;
unsigned backgroundState:2;
unsigned borderIsPixel:1;
unsigned cursorIsNone:1;
unsigned backingStore:2;
unsigned saveUnder:1;
unsigned DIXsaveUnder:1;
unsigned bitGravity:4;
unsigned winGravity:4;
unsigned overrideRedirect:1;
unsigned visibility:2;
unsigned mapped:1;
unsigned realized:1;
unsigned viewable:1;
unsigned dontPropagate:3;
unsigned forcedBS:1;
#ifdef NEED_DBE_BUF_BITS
#define DBE_FRONT_BUFFER 1
#define DBE_BACK_BUFFER 0
unsigned dstBuffer:1;
unsigned srcBuffer:1;
#endif
#ifdef COMPOSITE
unsigned redirectDraw:1;
#endif
DevUnion *devPrivates;
} WindowRec;
extern Mask DontPropagateMasks[];
#define wTrackParent(w,field) ((w)->optional ? \
(w)->optional->field \
: FindWindowWithOptional(w)->optional->field)
#define wUseDefault(w,field,def) ((w)->optional ? \
(w)->optional->field \
: def)
#define wVisual(w) wTrackParent(w, visual)
#define wCursor(w) ((w)->cursorIsNone ? None : wTrackParent(w, cursor))
#define wColormap(w) ((w)->drawable.class == InputOnly ? None : wTrackParent(w, colormap))
#define wDontPropagateMask(w) wUseDefault(w, dontPropagateMask, DontPropagateMasks[(w)->dontPropagate])
#define wOtherEventMasks(w) wUseDefault(w, otherEventMasks, 0)
#define wOtherClients(w) wUseDefault(w, otherClients, NULL)
#ifdef XINPUT
#define wOtherInputMasks(w) wUseDefault(w, inputMasks, NULL)
#else
#define wOtherInputMasks(w) NULL
#endif
#define wPassiveGrabs(w) wUseDefault(w, passiveGrabs, NULL)
#define wUserProps(w) wUseDefault(w, userProps, NULL)
#define wBackingBitPlanes(w) wUseDefault(w, backingBitPlanes, ~0L)
#define wBackingPixel(w) wUseDefault(w, backingPixel, 0)
#ifdef SHAPE
#define wBoundingShape(w) wUseDefault(w, boundingShape, NULL)
#define wClipShape(w) wUseDefault(w, clipShape, NULL)
#define wInputShape(w) wUseDefault(w, inputShape, NULL)
#endif
#define wClient(w) (clients[CLIENT_ID((w)->drawable.id)])
#define wBorderWidth(w) ((int) (w)->borderWidth)
#ifdef SHAPE
#define HasBorder(w) ((w)->borderWidth || wClipShape(w))
#else
#define HasBorder(w) ((w)->borderWidth)
#endif
typedef struct _ScreenSaverStuff {
WindowPtr pWindow;
XID wid;
char blanked;
Bool (*ExternalScreenSaver)(
ScreenPtr ,
int ,
Bool );
} ScreenSaverStuffRec, *ScreenSaverStuffPtr;
#define SCREEN_IS_BLANKED 0
#define SCREEN_ISNT_SAVED 1
#define SCREEN_IS_TILED 2
#define SCREEN_IS_BLACK 3
#define HasSaverWindow(i) (savedScreenInfo[i].pWindow != NullWindow)
extern int screenIsSaved;
extern ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
#ifndef NO_BACK_SAVE
#define DO_SAVE_UNDERS(pWin) ((pWin)->drawable.pScreen->saveUnderSupport ==\
USE_DIX_SAVE_UNDERS)
#define USE_DIX_SAVE_UNDERS 0x40
#endif
extern int numSaveUndersViewable;
extern int deltaSaveUndersViewable;
#ifdef XEVIE
extern WindowPtr xeviewin;
#endif
#endif