merge XFree86 4.3.0.1 to -CURRENT

This commit is contained in:
Kaleb Keithley
2003-11-17 19:03:47 +00:00
parent 9508a382f8
commit c57959ad6a
615 changed files with 42990 additions and 101132 deletions

View File

@@ -48,6 +48,30 @@ SOFTWARE.
*/
/* The panoramix components contained the following notice */
/****************************************************************
* *
* Copyright (c) Digital Equipment Corporation, 1991, 1997 *
* *
* All Rights Reserved. Unpublished rights reserved under *
* the copyright laws of the United States. *
* *
* The software contained on this media is proprietary to *
* and embodies the confidential technology of Digital *
* Equipment Corporation. Possession, use, duplication or *
* dissemination of the software and media is authorized only *
* pursuant to a valid written license from Digital Equipment *
* Corporation. *
* *
* RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure *
* by the U.S. Government is subject to restrictions as set *
* forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, *
* or in FAR 52.227-19, as applicable. *
* *
*****************************************************************/
/* $XFree86: xc/programs/Xserver/dix/window.c,v 3.32 2003/01/12 02:44:26 dawes Exp $ */
#include "misc.h"
#include "scrnintstr.h"
#include "os.h"
@@ -61,15 +85,27 @@ SOFTWARE.
#include "dixstruct.h"
#include "gcstruct.h"
#include "servermd.h"
#ifdef PANORAMIX
#include "panoramiX.h"
#include "panoramiXsrv.h"
#endif
#include "dixevents.h"
#include "globals.h"
#ifdef XAPPGROUP
#include "extensions/Xagsrv.h"
#include "Xagsrv.h"
#endif
#ifdef XCSECURITY
#define _SECURITY_SERVER
#include "extensions/security.h"
#include "security.h"
#endif
extern Bool permitOldBugs;
#if defined(NEED_SCREEN_REGIONS)
#define REGION_PTR(pScreen,pWin) \
register ScreenPtr pScreen = pWin->drawable.pScreen;
#else
#define REGION_PTR(pScreen,pWin) /* nothing */
#endif
/******
* Window stuff for server
@@ -88,13 +124,12 @@ int screenIsSaved = SCREEN_SAVER_OFF;
ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
extern WindowPtr *WindowTable;
#if 0
extern void DeleteWindowFromAnyEvents();
extern Mask EventMaskForClient();
extern void WindowHasNewCursor();
extern void RecalculateDeliverableEvents();
extern int rand();
#endif
static Bool TileScreenSaver(
#if NeedFunctionPrototypes
@@ -220,12 +255,17 @@ WalkTree(pScreen, func, data)
int defaultBackingStore = NotUseful;
/* hack to force no backing store */
Bool disableBackingStore = FALSE;
Bool enableBackingStore = FALSE;
/* hack to force no save unders */
Bool disableSaveUnders = FALSE;
static void
#if NeedFunctionPrototypes
SetWindowToDefaults(register WindowPtr pWin)
#else
SetWindowToDefaults(pWin)
register WindowPtr pWin;
#endif
{
pWin->prevSib = NullWindow;
pWin->firstChild = NullWindow;
@@ -260,8 +300,12 @@ SetWindowToDefaults(pWin)
}
static void
#if NeedFunctionPrototypes
MakeRootTile(WindowPtr pWin)
#else
MakeRootTile(pWin)
WindowPtr pWin;
#endif
{
ScreenPtr pScreen = pWin->drawable.pScreen;
GCPtr pGC;
@@ -270,13 +314,13 @@ MakeRootTile(pWin)
register unsigned char *from, *to;
register int i, j;
pWin->background.pixmap = (*pScreen->CreatePixmap)(pScreen, len, 4,
pWin->background.pixmap = (*pScreen->CreatePixmap)(pScreen, 4, 4,
pScreen->rootDepth);
pWin->backgroundState = BackgroundPixmap;
pGC = GetScratchGC(pScreen->rootDepth, pScreen);
if (!pWin->background.pixmap || !pGC)
FatalError("cound not create root tile");
FatalError("could not create root tile");
{
CARD32 attributes[2];
@@ -296,6 +340,9 @@ MakeRootTile(pWin)
for (j = len; j > 0; j--)
*to++ = *from;
if (blackRoot)
bzero(back, sizeof(back));
(*pGC->ops->PutImage)((DrawablePtr)pWin->background.pixmap, pGC, 1,
0, 0, len, 4, 0, XYBitmap, (char *)back);
@@ -428,6 +475,8 @@ CreateRootWindow(pScreen)
if (disableBackingStore)
pScreen->backingStoreSupport = NotUseful;
if (enableBackingStore)
pScreen->backingStoreSupport = Always;
#ifdef DO_SAVE_UNDERS
if ((pScreen->backingStoreSupport != NotUseful) &&
@@ -483,7 +532,7 @@ ClippedRegionFromBox(pWin, Rgn, x, y, w, h)
register int x, y;
int w, h;
{
register ScreenPtr pScreen = pWin->drawable.pScreen;
REGION_PTR(pScreen, pWin)
BoxRec box;
box = *(REGION_EXTENTS(pScreen, &pWin->winSize));
@@ -571,9 +620,8 @@ CreateWindow(wid, pParent, x, y, w, h, bw, class, vmask, vlist,
}
pScreen = pParent->drawable.pScreen;
if ((class == InputOutput) && (depth == 0))
depth = pParent->drawable.depth;
depth = pParent->drawable.depth;
ancwopt = pParent->optional;
if (!ancwopt)
ancwopt = FindWindowWithOptional(pParent)->optional;
@@ -768,17 +816,18 @@ CreateWindow(wid, pParent, x, y, w, h, bw, class, vmask, vlist,
event.u.createNotify.override = pWin->overrideRedirect;
DeliverEvents(pParent, &event, 1, NullWindow);
}
return pWin;
}
static void
#if NeedFunctionPrototypes
FreeWindowResources(register WindowPtr pWin)
#else
FreeWindowResources(pWin)
register WindowPtr pWin;
#endif
{
register ScreenPtr pScreen;
pScreen = pWin->drawable.pScreen;
register ScreenPtr pScreen = pWin->drawable.pScreen;
DeleteWindowFromAnySaveSet(pWin);
DeleteWindowFromAnySelections(pWin);
@@ -805,11 +854,15 @@ FreeWindowResources(pWin)
}
static void
#if NeedFunctionPrototypes
CrushTree(WindowPtr pWin)
#else
CrushTree(pWin)
WindowPtr pWin;
#endif
{
register WindowPtr pChild, pSib, pParent;
Bool (* UnrealizeWindow)();
UnrealizeWindowProcPtr UnrealizeWindow;
xEvent event;
if (!(pChild = pWin->firstChild))
@@ -937,7 +990,7 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
XID *vlist;
ClientPtr client;
{
register Mask index;
register Mask index2;
register XID *pVlist;
PixmapPtr pPixmap;
Pixmap pixID;
@@ -966,9 +1019,9 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
tmask = vmask;
while (tmask)
{
index = (Mask) lowbit (tmask);
tmask &= ~index;
switch (index)
index2 = (Mask) lowbit (tmask);
tmask &= ~index2;
switch (index2)
{
case CWBackPixmap:
pixID = (Pixmap )*pVlist;
@@ -992,7 +1045,7 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
}
else
{ /* didn't change the background to None, so don't tell ddx */
index = 0;
index2 = 0;
}
#endif
}
@@ -1068,7 +1121,7 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
pWin->border = pWin->parent->border;
if ((pWin->borderIsPixel = pWin->parent->borderIsPixel) == TRUE)
{
index = CWBorderPixel;
index2 = CWBorderPixel;
}
else
{
@@ -1146,14 +1199,14 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
pWin->forcedBS = FALSE;
break;
case CWBackingPlanes:
if (pWin->optional || ((CARD32)*pVlist != ~0L)) {
if (pWin->optional || ((CARD32)*pVlist != (CARD32)~0L)) {
if (!pWin->optional && !MakeWindowOptional (pWin))
{
error = BadAlloc;
goto PatchUp;
}
pWin->optional->backingBitPlanes = (CARD32) *pVlist;
if ((CARD32)*pVlist == ~0L)
if ((CARD32)*pVlist == (CARD32)~0L)
checkOptional = TRUE;
}
pVlist++;
@@ -1267,7 +1320,8 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
*/
win_owner = clients[CLIENT_ID(pWin->drawable.id)];
if (win_owner->appgroup && !pWin->parent->parent &&
if ( win_owner && win_owner->appgroup &&
!pWin->parent->parent &&
(ag_colormap = XagDefaultColormap (win_owner)))
cmap = ag_colormap;
else
@@ -1338,7 +1392,7 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
if (pChild->optional->colormap == cmap)
CheckWindowOptionalNeed (pChild);
}
xE.u.u.type = ColormapNotify;
xE.u.colormap.window = pWin->drawable.id;
xE.u.colormap.colormap = cmap;
@@ -1440,7 +1494,7 @@ ChangeWindowAttributes(pWin, vmask, vlist, client)
client->errorValue = vmask;
goto PatchUp;
}
vmaskCopy |= index;
vmaskCopy |= index2;
}
PatchUp:
if (checkOptional)
@@ -1521,6 +1575,8 @@ MoveWindowInStack(pWin, pNextSib)
if (pWin->nextSib != pNextSib)
{
WindowPtr pOldNextSib = pWin->nextSib;
if (!pNextSib) /* move to bottom */
{
if (pParent->firstChild == pWin)
@@ -1577,6 +1633,8 @@ MoveWindowInStack(pWin, pNextSib)
pFirstChange = pFirstChange->nextSib;
}
}
if(pWin->drawable.pScreen->RestackWindow)
(*pWin->drawable.pScreen->RestackWindow)(pWin, pOldNextSib);
}
return( pFirstChange );
@@ -1596,7 +1654,7 @@ CreateUnclippedWinSize (pWin)
pRgn = REGION_CREATE(pWin->drawable.pScreen, &box, 1);
#ifdef SHAPE
if (wBoundingShape (pWin) || wClipShape (pWin)) {
ScreenPtr pScreen = pWin->drawable.pScreen;
REGION_PTR(pScreen, pWin)
REGION_TRANSLATE(pScreen, pRgn, - pWin->drawable.x,
- pWin->drawable.y);
@@ -1620,7 +1678,7 @@ SetWinSize (pWin)
(int)pWin->drawable.height);
#ifdef SHAPE
if (wBoundingShape (pWin) || wClipShape (pWin)) {
ScreenPtr pScreen = pWin->drawable.pScreen;
REGION_PTR(pScreen, pWin)
REGION_TRANSLATE(pScreen, &pWin->winSize, - pWin->drawable.x,
- pWin->drawable.y);
@@ -1650,7 +1708,7 @@ SetBorderSize (pWin)
(int)(pWin->drawable.height + (bw<<1)));
#ifdef SHAPE
if (wBoundingShape (pWin)) {
ScreenPtr pScreen = pWin->drawable.pScreen;
REGION_PTR(pScreen, pWin)
REGION_TRANSLATE(pScreen, &pWin->borderSize, - pWin->drawable.x,
- pWin->drawable.y);
@@ -1760,6 +1818,7 @@ ResizeChildrenWinSize(pWin, dx, dy, dw, dh)
SetWinSize (pSib);
SetBorderSize (pSib);
(*pScreen->PositionWindow)(pSib, pSib->drawable.x, pSib->drawable.y);
if ( (pChild = pSib->firstChild) )
{
while (1)
@@ -1817,8 +1876,14 @@ ResizeChildrenWinSize(pWin, dx, dy, dw, dh)
*/
static int
#if NeedFunctionPrototypes
IsSiblingAboveMe(
register WindowPtr pMe,
register WindowPtr pSib)
#else
IsSiblingAboveMe(pMe, pSib)
register WindowPtr pMe, pSib;
#endif
{
register WindowPtr pWin;
@@ -1835,9 +1900,15 @@ IsSiblingAboveMe(pMe, pSib)
}
static BoxPtr
#if NeedFunctionPrototypes
WindowExtents(
register WindowPtr pWin,
register BoxPtr pBox)
#else
WindowExtents(pWin, pBox)
register WindowPtr pWin;
register BoxPtr pBox;
#endif
{
pBox->x1 = pWin->drawable.x - wBorderWidth (pWin);
pBox->y1 = pWin->drawable.y - wBorderWidth (pWin);
@@ -1852,12 +1923,18 @@ WindowExtents(pWin, pBox)
#define IS_SHAPED(pWin) (wBoundingShape (pWin) != (RegionPtr) NULL)
static RegionPtr
#if NeedFunctionPrototypes
MakeBoundingRegion (
register WindowPtr pWin,
BoxPtr pBox)
#else
MakeBoundingRegion (pWin, pBox)
register WindowPtr pWin;
BoxPtr pBox;
#endif
{
RegionPtr pRgn;
register ScreenPtr pScreen = pWin->drawable.pScreen;
REGION_PTR(pScreen, pWin)
pRgn = REGION_CREATE(pScreen, pBox, 1);
if (wBoundingShape (pWin)) {
@@ -1871,9 +1948,17 @@ MakeBoundingRegion (pWin, pBox)
}
static Bool
#if NeedFunctionPrototypes
ShapeOverlap (
WindowPtr pWin,
BoxPtr pWinBox,
WindowPtr pSib,
BoxPtr pSibBox)
#else
ShapeOverlap (pWin, pWinBox, pSib, pSibBox)
WindowPtr pWin, pSib;
BoxPtr pWinBox, pSibBox;
#endif
{
RegionPtr pWinRgn, pSibRgn;
register ScreenPtr pScreen;
@@ -1893,9 +1978,16 @@ ShapeOverlap (pWin, pWinBox, pSib, pSibBox)
#endif
static Bool
#if NeedFunctionPrototypes
AnyWindowOverlapsMe(
WindowPtr pWin,
WindowPtr pHead,
register BoxPtr box)
#else
AnyWindowOverlapsMe(pWin, pHead, box)
WindowPtr pWin, pHead;
register BoxPtr box;
#endif
{
register WindowPtr pSib;
BoxRec sboxrec;
@@ -1918,9 +2010,15 @@ AnyWindowOverlapsMe(pWin, pHead, box)
}
static Bool
#if NeedFunctionPrototypes
IOverlapAnyWindow(
WindowPtr pWin,
register BoxPtr box)
#else
IOverlapAnyWindow(pWin, box)
WindowPtr pWin;
register BoxPtr box;
#endif
{
register WindowPtr pSib;
BoxRec sboxrec;
@@ -1971,11 +2069,22 @@ IOverlapAnyWindow(pWin, box)
*/
static WindowPtr
#if NeedFunctionPrototypes
WhereDoIGoInTheStack(
register WindowPtr pWin,
register WindowPtr pSib,
short x,
short y,
unsigned short w,
unsigned short h,
int smode)
#else
WhereDoIGoInTheStack(pWin, pSib, x, y, w, h, smode)
register WindowPtr pWin, pSib;
short x, y;
unsigned short w, h;
int smode;
#endif
{
BoxRec box;
register ScreenPtr pScreen;
@@ -2074,9 +2183,16 @@ WhereDoIGoInTheStack(pWin, pSib, x, y, w, h, smode)
}
static void
#if NeedFunctionPrototypes
ReflectStackChange(
register WindowPtr pWin,
register WindowPtr pSib,
VTKind kind)
#else
ReflectStackChange(pWin, pSib, kind)
register WindowPtr pWin, pSib;
VTKind kind;
#endif
{
/* Note that pSib might be NULL */
@@ -2140,8 +2256,8 @@ ConfigureWindow(pWin, mask, vlist, client)
#define REBORDER_WIN 3
register WindowPtr pSib = NullWindow;
register WindowPtr pParent = pWin->parent;
Window sibwid;
Mask index, tmask;
Window sibwid = 0;
Mask index2, tmask;
register XID *pVlist;
short x, y, beforeX, beforeY;
unsigned short w = pWin->drawable.width,
@@ -2198,9 +2314,9 @@ ConfigureWindow(pWin, mask, vlist, client)
tmask = mask & ~ChangeMask;
while (tmask)
{
index = (Mask)lowbit (tmask);
tmask &= ~index;
switch (index)
index2 = (Mask)lowbit (tmask);
tmask &= ~index2;
switch (index2)
{
case CWBorderWidth:
GET_CARD16(CWBorderWidth, bw);
@@ -2273,6 +2389,12 @@ ConfigureWindow(pWin, mask, vlist, client)
event.u.u.detail = Above;
event.u.configureRequest.x = x;
event.u.configureRequest.y = y;
#ifdef PANORAMIX
if(!noPanoramiXExtension && (!pParent || !pParent->parent)) {
event.u.configureRequest.x += panoramiXdataPtr[0].x;
event.u.configureRequest.y += panoramiXdataPtr[0].y;
}
#endif
event.u.configureRequest.width = w;
event.u.configureRequest.height = h;
event.u.configureRequest.borderWidth = bw;
@@ -2350,6 +2472,12 @@ ActuallyDoSomething:
event.u.configureNotify.aboveSibling = None;
event.u.configureNotify.x = x;
event.u.configureNotify.y = y;
#ifdef PANORAMIX
if(!noPanoramiXExtension && (!pParent || !pParent->parent)) {
event.u.configureNotify.x += panoramiXdataPtr[0].x;
event.u.configureNotify.y += panoramiXdataPtr[0].y;
}
#endif
event.u.configureNotify.width = w;
event.u.configureNotify.height = h;
event.u.configureNotify.borderWidth = bw;
@@ -2383,7 +2511,6 @@ ActuallyDoSomething:
if (action != RESTACK_WIN)
CheckCursorConfinement(pWin);
return(Success);
#undef RESTACK_WIN
#undef MOVE_WIN
@@ -2461,9 +2588,15 @@ CirculateWindow(pParent, direction, client)
}
static int
#if NeedFunctionPrototypes
CompareWIDs(
WindowPtr pWin,
pointer value) /* must conform to VisitWindowProcPtr */
#else
CompareWIDs(pWin, value)
WindowPtr pWin;
pointer value; /* must conform to VisitWindowProcPtr */
#endif
{
Window *wid = (Window *)value;
@@ -2503,6 +2636,12 @@ ReparentWindow(pWin, pParent, x, y, client)
event.u.reparent.parent = pParent->drawable.id;
event.u.reparent.x = x;
event.u.reparent.y = y;
#ifdef PANORAMIX
if(!noPanoramiXExtension && !pParent->parent) {
event.u.reparent.x += panoramiXdataPtr[0].x;
event.u.reparent.y += panoramiXdataPtr[0].y;
}
#endif
event.u.reparent.override = pWin->overrideRedirect;
DeliverEvents(pWin, &event, 1, pParent);
@@ -2566,11 +2705,15 @@ ReparentWindow(pWin, pParent, x, y, client)
}
static void
#if NeedFunctionPrototypes
RealizeTree(WindowPtr pWin)
#else
RealizeTree(pWin)
WindowPtr pWin;
#endif
{
register WindowPtr pChild;
Bool (* Realize)();
RealizeWindowProcPtr Realize;
Realize = pWin->drawable.pScreen->RealizeWindow;
pChild = pWin;
@@ -2854,9 +2997,15 @@ MapSubwindows(pParent, client)
}
static void
#if NeedFunctionPrototypes
UnrealizeTree(
WindowPtr pWin,
Bool fromConfigure)
#else
UnrealizeTree(pWin, fromConfigure)
WindowPtr pWin;
Bool fromConfigure;
#endif
{
register WindowPtr pChild;
UnrealizeWindowProcPtr Unrealize;
@@ -2871,6 +3020,15 @@ UnrealizeTree(pWin, fromConfigure)
{
pChild->realized = FALSE;
pChild->visibility = VisibilityNotViewable;
#ifdef PANORAMIX
if(!noPanoramiXExtension && !pChild->drawable.pScreen->myNum) {
PanoramiXRes *win;
win = (PanoramiXRes*)LookupIDByType(pChild->drawable.id,
XRT_WINDOW);
if(win)
win->u.win.visibility = VisibilityNotViewable;
}
#endif
(* Unrealize)(pChild);
DeleteWindowFromAnyEvents(pChild, FALSE);
if (pChild->viewable)
@@ -2978,7 +3136,7 @@ UnmapSubwindows(pWin)
Bool wasViewable = (Bool)pWin->viewable;
Bool anyMarked = FALSE;
Mask parentNotify;
WindowPtr pLayerWin;
WindowPtr pLayerWin = NULL;
ScreenPtr pScreen = pWin->drawable.pScreen;
if (!pWin->firstChild)
@@ -3139,15 +3297,71 @@ NotClippedByChildren(pWin)
return(pReg);
}
void
SendVisibilityNotify(pWin)
WindowPtr pWin;
{
xEvent event;
unsigned int visibility = pWin->visibility;
#ifdef PANORAMIX
/* This is not quite correct yet, but it's close */
if(!noPanoramiXExtension) {
PanoramiXRes *win;
WindowPtr pWin2;
int i, Scrnum;
Scrnum = pWin->drawable.pScreen->myNum;
win = PanoramiXFindIDByScrnum(XRT_WINDOW, pWin->drawable.id, Scrnum);
if(!win || (win->u.win.visibility == visibility))
return;
switch(visibility) {
case VisibilityUnobscured:
for(i = 0; i < PanoramiXNumScreens; i++) {
if(i == Scrnum) continue;
pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW);
if (pWin2) {
if(pWin2->visibility == VisibilityPartiallyObscured)
return;
if(!i) pWin = pWin2;
}
}
break;
case VisibilityPartiallyObscured:
if(Scrnum) {
pWin2 = (WindowPtr)LookupIDByType(win->info[0].id, RT_WINDOW);
if (pWin2) pWin = pWin2;
}
break;
case VisibilityFullyObscured:
for(i = 0; i < PanoramiXNumScreens; i++) {
if(i == Scrnum) continue;
pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW);
if (pWin2) {
if(pWin2->visibility != VisibilityFullyObscured)
return;
if(!i) pWin = pWin2;
}
}
break;
}
win->u.win.visibility = visibility;
}
#endif
event.u.u.type = VisibilityNotify;
event.u.visibility.window = pWin->drawable.id;
event.u.visibility.state = pWin->visibility;
event.u.visibility.state = visibility;
DeliverEvents(pWin, &event, 1, NullWindow);
}
@@ -3155,7 +3369,6 @@ SendVisibilityNotify(pWin)
#define RANDOM_WIDTH 32
#ifndef NOLOGOHACK
extern int logoScreenSaver;
static void DrawLogo(
#if NeedFunctionPrototypes
WindowPtr /*pWin*/
@@ -3237,6 +3450,15 @@ SaveScreens(on, mode)
#endif
screenIsSaved = SCREEN_SAVER_ON;
}
/*
* Call the DDX saver in case it wants to do something
* at cycle time
*/
else if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED)
{
(* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i],
type);
}
break;
case SCREEN_SAVER_ON:
if (ScreenSaverBlanking != DontPreferBlanking)
@@ -3268,9 +3490,13 @@ SaveScreens(on, mode)
}
static Bool
#if NeedFunctionPrototypes
TileScreenSaver(int i, int kind)
#else
TileScreenSaver(i, kind)
int i;
int kind;
#endif
{
int j;
int result;
@@ -3280,7 +3506,7 @@ TileScreenSaver(i, kind)
CursorMetricRec cm;
unsigned char *srcbits, *mskbits;
CursorPtr cursor;
XID cursorID;
XID cursorID = 0;
int attri;
mask = 0;
@@ -3510,17 +3736,40 @@ DisposeWindowOptional (pWin)
* everything is peachy. Delete the optional record
* and clean up
*/
if (pWin->cursorIsNone == FALSE)
/*
* TOG changed this code to:
*
* if (pWin->cursorIsNone == FALSE)
* FreeCursor (pWin->optional->cursor, (Cursor)0);
* pWin->cursorIsNone = TRUE;
*
* This is blatently wrong; windows without optionals can have
* two different cursor values, either None or sharing their
* parents cursor. This difference is controlled by the
* cursorIsNone value; when TRUE, the window has no cursor,
* when false, it shares its cursor with its parent; TOG
* made it impossible for a window to have a cursor without
* an optional record.
*/
if (pWin->optional->cursor)
{
FreeCursor (pWin->optional->cursor, (Cursor)0);
pWin->cursorIsNone = TRUE;
pWin->cursorIsNone = FALSE;
}
else
pWin->cursorIsNone = TRUE;
xfree (pWin->optional);
pWin->optional = NULL;
}
#ifndef NOLOGOHACK
static void
#if NeedFunctionPrototypes
DrawLogo(WindowPtr pWin)
#else
DrawLogo(pWin)
WindowPtr pWin;
#endif
{
DrawablePtr pDraw;
ScreenPtr pScreen;