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.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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue