diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 260690ce5..c59359625 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -54,6 +54,9 @@ in this Software without prior written authorization from The Open Group. #include #include #include +#include +#include + #include /* Fake button press/release for scroll wheel move. */ @@ -77,6 +80,25 @@ static int old_flags = 0; // last known modifier state xEvent *darwinEvents = NULL; +pthread_mutex_t mieqEnqueue_mutex; +static inline void mieqEnqueue_lock(void) { + int err; + if((err = pthread_mutex_lock(&mieqEnqueue_mutex))) { + ErrorF("%s:%s:%d: Failed to lock mieqEnqueue_mutex: %d\n", + __FILE__, __FUNCTION__, __LINE__, err); + spewCallStack(); + } +} + +static inline void mieqEnqueue_unlock(void) { + int err; + if((err = pthread_mutex_unlock(&mieqEnqueue_mutex))) { + ErrorF("%s:%s:%d: Failed to unlock mieqEnqueue_mutex: %d\n", + __FILE__, __FUNCTION__, __LINE__, err); + spewCallStack(); + } +} + /* * DarwinPressModifierMask * Press or release the given modifier key, specified by its mask. @@ -197,107 +219,119 @@ static void DarwinSimulateMouseClick( mieqSetHandler. */ void DarwinEventHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) { - int i; - - DEBUG_LOG("DarwinEventHandler(%d, %p, %p, %d)\n", screenNum, xe, dev, nevents); - for (i=0; i oh, i ... er ... christ. @@ -398,15 +434,18 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin return; } - num_events = GetPointerEvents(darwinEvents, darwinPointer, ev_type, ev_button, - POINTER_ABSOLUTE, 0, 5, valuators); - - for(i=0; i