dix: add InputEventListLen and SetMinimumEventSize
The latter is used to increase the amount of allocated memory for the event list. This will be needed for ClassesChangedEvents that can be of more or less arbitrary size (larger than 32 anyway).
This commit is contained in:
parent
3fe64d8d27
commit
77dba004a9
|
@ -5712,7 +5712,8 @@ InitEvents(void)
|
||||||
DontPropagateRefCnts[i] = 0;
|
DontPropagateRefCnts[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputEventList = InitEventList(GetMaximumEventsNum());
|
InputEventListLen = GetMaximumEventsNum();
|
||||||
|
InputEventList = InitEventList(InputEventListLen);
|
||||||
if (!InputEventList)
|
if (!InputEventList)
|
||||||
FatalError("[dix] Failed to allocate input event list.\n");
|
FatalError("[dix] Failed to allocate input event list.\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,7 @@ extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
|
||||||
* Get{Pointer|Keyboard}Events.
|
* Get{Pointer|Keyboard}Events.
|
||||||
*/
|
*/
|
||||||
EventListPtr InputEventList = NULL;
|
EventListPtr InputEventList = NULL;
|
||||||
|
int InputEventListLen = 0;
|
||||||
|
|
||||||
_X_EXPORT EventListPtr
|
_X_EXPORT EventListPtr
|
||||||
GetEventList()
|
GetEventList()
|
||||||
|
@ -598,6 +599,29 @@ InitEventList(int num_events)
|
||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocs min_size memory for each event in the list.
|
||||||
|
*/
|
||||||
|
_X_EXPORT void
|
||||||
|
SetMinimumEventSize(EventListPtr list, int num_events, int min_size)
|
||||||
|
{
|
||||||
|
if (!list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while(num_events--)
|
||||||
|
{
|
||||||
|
if (list[num_events].evlen < min_size)
|
||||||
|
{
|
||||||
|
list[num_events].event = realloc(list[num_events].event, min_size);
|
||||||
|
if (!list[num_events].event)
|
||||||
|
{
|
||||||
|
FatalError("[dix] Failed to set event list's "
|
||||||
|
"min_size to %d.\n", min_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free an event list.
|
* Free an event list.
|
||||||
*
|
*
|
||||||
|
|
|
@ -96,6 +96,7 @@ typedef struct _EventList {
|
||||||
|
|
||||||
/* The DIX stores incoming input events in this list */
|
/* The DIX stores incoming input events in this list */
|
||||||
extern EventListPtr InputEventList;
|
extern EventListPtr InputEventList;
|
||||||
|
extern int InputEventListLen;
|
||||||
|
|
||||||
typedef int (*DeviceProc)(
|
typedef int (*DeviceProc)(
|
||||||
DeviceIntPtr /*device*/,
|
DeviceIntPtr /*device*/,
|
||||||
|
@ -400,6 +401,9 @@ extern int GetMaximumEventsNum(void);
|
||||||
|
|
||||||
extern EventListPtr GetEventList();
|
extern EventListPtr GetEventList();
|
||||||
extern EventListPtr InitEventList(int num_events);
|
extern EventListPtr InitEventList(int num_events);
|
||||||
|
extern void SetMinimumEventSize(EventListPtr list,
|
||||||
|
int num_events,
|
||||||
|
int min_size);
|
||||||
extern void FreeEventList(EventListPtr list, int num_events);
|
extern void FreeEventList(EventListPtr list, int num_events);
|
||||||
|
|
||||||
extern void CreateClassesChangedEvent(EventListPtr event,
|
extern void CreateClassesChangedEvent(EventListPtr event,
|
||||||
|
|
Loading…
Reference in New Issue