diff options
-rw-r--r-- | dix/events.c | 3 | ||||
-rw-r--r-- | dix/getevents.c | 24 | ||||
-rw-r--r-- | include/input.h | 4 |
3 files changed, 30 insertions, 1 deletions
diff --git a/dix/events.c b/dix/events.c index 1155178b1..bf2df9f44 100644 --- a/dix/events.c +++ b/dix/events.c @@ -5712,7 +5712,8 @@ InitEvents(void) DontPropagateRefCnts[i] = 0; } - InputEventList = InitEventList(GetMaximumEventsNum()); + InputEventListLen = GetMaximumEventsNum(); + InputEventList = InitEventList(InputEventListLen); if (!InputEventList) FatalError("[dix] Failed to allocate input event list.\n"); } diff --git a/dix/getevents.c b/dix/getevents.c index 2a9df0f40..407ac58b2 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -75,6 +75,7 @@ extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies); * Get{Pointer|Keyboard}Events. */ EventListPtr InputEventList = NULL; +int InputEventListLen = 0; _X_EXPORT EventListPtr GetEventList() @@ -599,6 +600,29 @@ InitEventList(int num_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. * * @param list The list to be freed. diff --git a/include/input.h b/include/input.h index fb24e7637..af330a798 100644 --- a/include/input.h +++ b/include/input.h @@ -96,6 +96,7 @@ typedef struct _EventList { /* The DIX stores incoming input events in this list */ extern EventListPtr InputEventList; +extern int InputEventListLen; typedef int (*DeviceProc)( DeviceIntPtr /*device*/, @@ -400,6 +401,9 @@ extern int GetMaximumEventsNum(void); extern EventListPtr GetEventList(); 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 CreateClassesChangedEvent(EventListPtr event, |