summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dix/events.c3
-rw-r--r--dix/getevents.c24
-rw-r--r--include/input.h4
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,