diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-05-01 18:02:59 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-05-01 18:04:18 -0700 |
commit | a338007be6fd4302af012109d959f43ac7eab2b1 (patch) | |
tree | 9ae5c35944cbc2cb2d86bd92f6b159536bca878d /hw | |
parent | 3b8d53452cd6c74d32d7759964a7cd9ee775f161 (diff) |
XQuartz: Adjust the screen origin offset properly for multimonitor setups
(cherry picked from commit f2020b9836bacd0593ac0b4c8541e32714ab02a9)
Diffstat (limited to 'hw')
-rw-r--r-- | hw/xquartz/X11Controller.m | 1 | ||||
-rw-r--r-- | hw/xquartz/darwinEvents.c | 39 | ||||
-rw-r--r-- | 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; i<num_events; i++) mieqEnqueue (dev,&darwinEvents[i]); + for(i=0; i<num_events; i++) { + darwinEvents[i].u.keyButtonPointer.rootX -= darwinMainScreenX + + dixScreenOrigins[miPointerCurrentScreen()->myNum].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<num_events; i++) mieqEnqueue(darwinKeyboard,&darwinEvents[i]); DarwinPokeEQ(); - } mieqEnqueue_unlock(); + } darwinEvents_unlock(); } void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y) { @@ -463,12 +468,12 @@ void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y) { return; } - mieqEnqueue_lock(); { + darwinEvents_lock(); { num_events = GetProximityEvents(darwinEvents, darwinTablet, ev_type, 0, 5, valuators); for(i=0; i<num_events; i++) mieqEnqueue (darwinTablet,&darwinEvents[i]); DarwinPokeEQ(); - } mieqEnqueue_unlock(); + } darwinEvents_unlock(); } @@ -533,8 +538,8 @@ void DarwinSendDDXEvent(int type, int argc, ...) { va_end (args); } - mieqEnqueue_lock(); + darwinEvents_lock(); mieqEnqueue(darwinPointer, &xe); DarwinPokeEQ(); - mieqEnqueue_unlock(); + darwinEvents_unlock(); } diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c index 731222607..d8eb72a48 100644 --- a/hw/xquartz/xpr/xprScreen.c +++ b/hw/xquartz/xpr/xprScreen.c @@ -40,6 +40,7 @@ #include "xprEvent.h" #include "pseudoramiX.h" #include "darwin.h" +#include "darwinEvents.h" #include "rootless.h" #include "dri.h" #include "globals.h" |