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:
parent
cdeb2c23f8
commit
a3f5d30ba6
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user