Xi: add helper functions to alloc/free InputClientPtrs

Currently not needed since the InputClientRec is a self-contained struct. As
part of the touch rework that won't be the case in the future and a function
to allocate/free memory appropriately is required.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
Peter Hutterer 2011-11-03 15:45:34 +10:00
parent 4acf999c29
commit ee9346bb31

View File

@ -1628,6 +1628,19 @@ SelectForWindow(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client,
return Success;
}
static void
FreeInputClient(InputClientsPtr *other)
{
free(*other);
*other = NULL;
}
static InputClientsPtr
AllocInputClient(void)
{
return calloc(1, sizeof(InputClients));
}
int
AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
{
@ -1635,7 +1648,7 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
if (!pWin->optional && !MakeWindowOptional(pWin))
return BadAlloc;
others = calloc(1, sizeof(InputClients));
others = AllocInputClient();
if (!others)
return BadAlloc;
if (!pWin->optional->inputMasks && !MakeInputMasks(pWin))
@ -1649,7 +1662,7 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
return Success;
bail:
free(others);
FreeInputClient(&others);
return BadAlloc;
}
@ -1721,14 +1734,14 @@ InputClientGone(WindowPtr pWin, XID id)
if (other->resource == id) {
if (prev) {
prev->next = other->next;
free(other);
FreeInputClient(&other);
} else if (!(other->next)) {
if (ShouldFreeInputMasks(pWin, TRUE)) {
wOtherInputMasks(pWin)->inputClients = other->next;
free(wOtherInputMasks(pWin));
pWin->optional->inputMasks = (OtherInputMasks *) NULL;
CheckWindowOptionalNeed(pWin);
free(other);
FreeInputClient(&other);
} else {
other->resource = FakeClientID(0);
if (!AddResource(other->resource, RT_INPUTCLIENT,
@ -1737,7 +1750,7 @@ InputClientGone(WindowPtr pWin, XID id)
}
} else {
wOtherInputMasks(pWin)->inputClients = other->next;
free(other);
FreeInputClient(&other);
}
RecalculateDeviceDeliverableEvents(pWin);
return Success;