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