From a338007be6fd4302af012109d959f43ac7eab2b1 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Thu, 1 May 2008 18:02:59 -0700 Subject: [PATCH] XQuartz: Adjust the screen origin offset properly for multimonitor setups (cherry picked from commit f2020b9836bacd0593ac0b4c8541e32714ab02a9) --- hw/xquartz/X11Controller.m | 1 + hw/xquartz/darwinEvents.c | 39 +++++++++++++++++++++----------------- hw/xquartz/xpr/xprScreen.c | 1 + 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m index df328f38c..107d8ee9b 100644 --- a/hw/xquartz/X11Controller.m +++ b/hw/xquartz/X11Controller.m @@ -42,6 +42,7 @@ #include "opaque.h" #include "darwin.h" +#include "darwinEvents.h" #include "quartz.h" #define _APPLEWM_SERVER_ #include "X11/extensions/applewm.h" diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 7b3091d40..161fd9d52 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -81,22 +81,21 @@ int input_check_zero, input_check_flag; static int old_flags = 0; // last known modifier state xEvent *darwinEvents = NULL; +pthread_mutex_t darwinEvents_mutex = PTHREAD_MUTEX_INITIALIZER; -pthread_mutex_t mieqEnqueue_mutex = PTHREAD_MUTEX_INITIALIZER; - -static inline void mieqEnqueue_lock(void) { +static inline void darwinEvents_lock(void) { int err; - if((err = pthread_mutex_lock(&mieqEnqueue_mutex))) { - ErrorF("%s:%s:%d: Failed to lock mieqEnqueue_mutex: %d\n", + if((err = pthread_mutex_lock(&darwinEvents_mutex))) { + ErrorF("%s:%s:%d: Failed to lock darwinEvents_mutex: %d\n", __FILE__, __FUNCTION__, __LINE__, err); spewCallStack(); } } -static inline void mieqEnqueue_unlock(void) { +static inline void darwinEvents_unlock(void) { int err; - if((err = pthread_mutex_unlock(&mieqEnqueue_mutex))) { - ErrorF("%s:%s:%d: Failed to unlock mieqEnqueue_mutex: %d\n", + if((err = pthread_mutex_unlock(&darwinEvents_mutex))) { + ErrorF("%s:%s:%d: Failed to unlock darwinEvents_mutex: %d\n", __FILE__, __FUNCTION__, __LINE__, err); spewCallStack(); } @@ -413,13 +412,19 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin return; } - mieqEnqueue_lock(); { + darwinEvents_lock(); { num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button, POINTER_ABSOLUTE, 0, dev==darwinTablet?5:2, valuators); - for(i=0; imyNum].x; + darwinEvents[i].u.keyButtonPointer.rootY -= darwinMainScreenY + + dixScreenOrigins[miPointerCurrentScreen()->myNum].y; + mieqEnqueue (dev, &darwinEvents[i]); + } DarwinPokeEQ(); - } mieqEnqueue_unlock(); + } darwinEvents_unlock(); } void DarwinSendKeyboardEvents(int ev_type, int keycode) { @@ -443,11 +448,11 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) { } } - mieqEnqueue_lock(); { + darwinEvents_lock(); { num_events = GetKeyboardEvents(darwinEvents, darwinKeyboard, ev_type, keycode + MIN_KEYCODE); for(i=0; i