summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2008-05-01 18:02:59 -0700
committerJeremy Huddleston <jeremyhu@freedesktop.org>2008-05-01 18:04:18 -0700
commita338007be6fd4302af012109d959f43ac7eab2b1 (patch)
tree9ae5c35944cbc2cb2d86bd92f6b159536bca878d /hw
parent3b8d53452cd6c74d32d7759964a7cd9ee775f161 (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.m1
-rw-r--r--hw/xquartz/darwinEvents.c39
-rw-r--r--hw/xquartz/xpr/xprScreen.c1
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"