mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-14 17:18:09 +00:00
mi: Add a callback to notify driver about input event submission
This is useful for mock input drivers that control the server in integration tests. Given that input submission happens on a different thread than processing, it's otherwise impossible for the driver to synchronize with the completion of the processing of submitted events. Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
This commit is contained in:
committed by
Adam Jackson
parent
a5f439dcd2
commit
5eb985e353
6
mi/mi.h
6
mi/mi.h
@@ -205,6 +205,12 @@ extern _X_EXPORT void mieqProcessDeviceEvent(DeviceIntPtr /* dev */ ,
|
||||
extern _X_EXPORT void mieqProcessInputEvents(void
|
||||
);
|
||||
|
||||
extern _X_EXPORT void mieqAddCallbackOnDrained(CallbackProcPtr callback,
|
||||
void *param);
|
||||
|
||||
extern _X_EXPORT void mieqRemoveCallbackOnDrained(CallbackProcPtr callback,
|
||||
void *param);
|
||||
|
||||
extern DeviceIntPtr CopyGetMasterEvent(DeviceIntPtr /* sdev */ ,
|
||||
InternalEvent * /* original */ ,
|
||||
InternalEvent * /* copy */
|
||||
|
||||
18
mi/mieq.c
18
mi/mieq.c
@@ -87,6 +87,8 @@ typedef struct _EventQueue {
|
||||
|
||||
static EventQueueRec miEventQueue;
|
||||
|
||||
static CallbackListPtr miCallbacksWhenDrained = NULL;
|
||||
|
||||
static size_t
|
||||
mieqNumEnqueued(EventQueuePtr eventQueue)
|
||||
{
|
||||
@@ -565,5 +567,21 @@ mieqProcessInputEvents(void)
|
||||
|
||||
inProcessInputEvents = FALSE;
|
||||
|
||||
CallCallbacks(&miCallbacksWhenDrained, NULL);
|
||||
|
||||
input_unlock();
|
||||
}
|
||||
|
||||
void mieqAddCallbackOnDrained(CallbackProcPtr callback, void *param)
|
||||
{
|
||||
input_lock();
|
||||
AddCallback(&miCallbacksWhenDrained, callback, param);
|
||||
input_unlock();
|
||||
}
|
||||
|
||||
void mieqRemoveCallbackOnDrained(CallbackProcPtr callback, void *param)
|
||||
{
|
||||
input_lock();
|
||||
DeleteCallback(&miCallbacksWhenDrained, callback, param);
|
||||
input_unlock();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user