summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-04-15 10:07:10 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-05-11 14:27:36 +1000
commit20fb07f436f7d4a0f330b2067a93a5a4829fccf5 (patch)
treebd792a68e16770fd02208b9d334bbfeea24be330 /dix
parent8670c46bdfdade64e63119d2ebbd5ef63b6fa2c3 (diff)
input: remove DDX event list handling
The current approach to event posting required the DDX to request the event list (allocated by the DIX) and then pass that list into QueuePointerEvent and friends. Remove this step and use the DIX event list directly. This means that QueuePointerEvent is not reentrant but it wasn't before anyway. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
Diffstat (limited to 'dix')
-rw-r--r--dix/events.c6
-rw-r--r--dix/getevents.c43
2 files changed, 19 insertions, 30 deletions
diff --git a/dix/events.c b/dix/events.c
index 895ab4035..276bc75fa 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -5035,8 +5035,7 @@ InitEvents(void)
DontPropagateRefCnts[i] = 0;
}
- InputEventListLen = GetMaximumEventsNum();
- InputEventList = InitEventList(InputEventListLen);
+ InputEventList = InitEventList(GetMaximumEventsNum());
if (!InputEventList)
FatalError("[dix] Failed to allocate input event list.\n");
}
@@ -5044,8 +5043,7 @@ InitEvents(void)
void
CloseDownEvents(void)
{
- FreeEventList(InputEventList, InputEventListLen);
- InputEventListLen = 0;
+ FreeEventList(InputEventList, GetMaximumEventsNum());
InputEventList = NULL;
}
diff --git a/dix/getevents.c b/dix/getevents.c
index e8c2f45b0..13789f6a2 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -68,19 +68,12 @@
/* Number of motion history events to store. */
#define MOTION_HISTORY_SIZE 256
-/* InputEventList is the storage for input events generated by the
- * DDX. The DDX is expected to call GetEventList() and then pass the list into
- * Get{Pointer|Keyboard}Events.
+/**
+ * InputEventList is the storage for input events generated by
+ * QueuePointerEvents, QueueKeyboardEvents, and QueueProximityEvents.
+ * This list is allocated on startup by the DIX.
*/
InternalEvent* InputEventList = NULL;
-int InputEventListLen = 0;
-
-int
-GetEventList(InternalEvent** list)
-{
- *list = InputEventList;
- return InputEventListLen;
-}
/**
* Pick some arbitrary size for Xi motion history.
@@ -937,10 +930,10 @@ queueEventList(DeviceIntPtr device, InternalEvent *events, int nevents)
* Generate internal events representing this keyboard event and enqueue
* them on the event queue.
*
- * FIXME: don't require the event list to be passed in.
+ * This function is not reentrant. Disable signals before calling.
+ *
* FIXME: flags for relative/abs motion?
*
- * @param events Event list used as temporary storage
* @param device The device to generate the event for
* @param type Event type, one of KeyPress or KeyRelease
* @param keycode Key code of the pressed/released key
@@ -948,13 +941,13 @@ queueEventList(DeviceIntPtr device, InternalEvent *events, int nevents)
*
*/
void
-QueueKeyboardEvents(InternalEvent *events, DeviceIntPtr device, int type,
+QueueKeyboardEvents(DeviceIntPtr device, int type,
int keycode, const ValuatorMask *mask)
{
int nevents;
- nevents = GetKeyboardEvents(events, device, type, keycode, mask);
- queueEventList(device, events, nevents);
+ nevents = GetKeyboardEvents(InputEventList, device, type, keycode, mask);
+ queueEventList(device, InputEventList, nevents);
}
/**
@@ -1074,9 +1067,8 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y)
* Generate internal events representing this pointer event and enqueue them
* on the event queue.
*
- * FIXME: don't require the event list to be passed in.
+ * This function is not reentrant. Disable signals before calling.
*
- * @param events Set of events list used as temporary storage
* @param device The device to generate the event for
* @param type Event type, one of ButtonPress, ButtonRelease, MotionNotify
* @param buttons Button number of the buttons modified. Must be 0 for
@@ -1085,13 +1077,13 @@ transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask, int *x, int *y)
* @param mask Valuator mask for valuators present for this event.
*/
void
-QueuePointerEvents(InternalEvent *events, DeviceIntPtr device, int type,
+QueuePointerEvents(DeviceIntPtr device, int type,
int buttons, int flags, const ValuatorMask *mask)
{
int nevents;
- nevents = GetPointerEvents(events, device, type, buttons, flags, mask);
- queueEventList(device, events, nevents);
+ nevents = GetPointerEvents(InputEventList, device, type, buttons, flags, mask);
+ queueEventList(device, InputEventList, nevents);
}
/**
@@ -1252,9 +1244,8 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
* Generate internal events representing this proximity event and enqueue
* them on the event queue.
*
- * FIXME: don't require the event list to be passed in.
+ * This function is not reentrant. Disable signals before calling.
*
- * @param events Event list used as temporary storage
* @param device The device to generate the event for
* @param type Event type, one of ProximityIn or ProximityOut
* @param keycode Key code of the pressed/released key
@@ -1262,13 +1253,13 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, int buttons
*
*/
void
-QueueProximityEvents(InternalEvent *events, DeviceIntPtr device, int type,
+QueueProximityEvents(DeviceIntPtr device, int type,
const ValuatorMask *mask)
{
int nevents;
- nevents = GetProximityEvents(events, device, type, mask);
- queueEventList(device, events, nevents);
+ nevents = GetProximityEvents(InputEventList, device, type, mask);
+ queueEventList(device, InputEventList, nevents);
}
/**