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:
Povilas Kanapickas
2020-09-17 00:55:17 +03:00
committed by Adam Jackson
parent a5f439dcd2
commit 5eb985e353
4 changed files with 43 additions and 0 deletions

View File

@@ -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 */

View File

@@ -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();
}