Make sure XFixes invisible cursor gets freed on server reset

This uses the same hack that dix uses for the rootCursor -- allocate
a resource ID for the invisible cursor so that it gets freed at reset
time. This also allows us to unconditionally create it during
extension initialization; necessary as the privates layout may well be
different on subsequent generations.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Keith Packard 2010-04-30 16:10:32 -07:00
parent cdeb2c23f8
commit a3f5d30ba6

View File

@ -1054,11 +1054,15 @@ createInvisibleCursor (void)
cm.xhot = 0; cm.xhot = 0;
cm.yhot = 0; cm.yhot = 0;
AllocARGBCursor(psrcbits, pmaskbits, if (AllocARGBCursor(psrcbits, pmaskbits,
NULL, &cm, NULL, &cm,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
&pCursor, serverClient, (XID)0); &pCursor, serverClient, (XID)0) != Success)
return NullCursor;
if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer) pCursor))
return NullCursor;
return pCursor; return pCursor;
} }
@ -1091,12 +1095,9 @@ XFixesCursorInit (void)
CursorWindowType = CreateNewResourceType(CursorFreeWindow, CursorWindowType = CreateNewResourceType(CursorFreeWindow,
"XFixesCursorWindow"); "XFixesCursorWindow");
if (pInvisibleCursor == NULL) { pInvisibleCursor = createInvisibleCursor();
pInvisibleCursor = createInvisibleCursor(); if (pInvisibleCursor == NULL)
if (pInvisibleCursor == NULL) { return BadAlloc;
return BadAlloc;
}
}
return CursorClientType && CursorHideCountType && CursorWindowType; return CursorClientType && CursorHideCountType && CursorWindowType;
} }