diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index 0436db8f9..6ca697583 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -894,6 +894,7 @@ static void send_nsevent(NSEvent *e) { NSWindow *window; int pointer_x, pointer_y, ev_button, ev_type; float pressure, tilt_x, tilt_y; + DeviceIntPtr pDev; /* convert location to be relative to top-left of primary display */ location = [e locationInWindow]; @@ -935,10 +936,13 @@ static void send_nsevent(NSEvent *e) { case NSTabletPoint: ev_button=0; ev_type=MotionNotify; goto handle_mouse; handle_mouse: + pDev = darwinPointer; if ([e type] == NSTabletPoint || [e subtype] == NSTabletPointEventSubtype) { pressure = [e pressure]; tilt_x = [e tilt].x; - tilt_y = [e tilt].y; + tilt_y = [e tilt].y; + + pDev = darwinTabletCurrent; } if([e subtype] == NSTabletProximityEventSubtype) { @@ -958,9 +962,11 @@ static void send_nsevent(NSEvent *e) { DarwinSendProximityEvents([e isEnteringProximity]?ProximityIn:ProximityOut, pointer_x, pointer_y); + + pDev = darwinTabletCurrent; } - - DarwinSendPointerEvents(ev_type, ev_button, pointer_x, pointer_y, + + DarwinSendPointerEvents(pDev, ev_type, ev_button, pointer_x, pointer_y, pressure, tilt_x, tilt_y); break; diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 92179d38c..d5d17edc3 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -407,11 +407,10 @@ static void DarwinPrepareValuators(int *valuators, ScreenPtr screen, // valuators[0], valuators[1], valuators[2], valuators[3], valuators[4]); } -void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y, +void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, int pointer_x, int pointer_y, float pressure, float tilt_x, float tilt_y) { static int darwinFakeMouseButtonDown = 0; int i, num_events; - DeviceIntPtr dev; ScreenPtr screen; int valuators[5]; @@ -422,12 +421,7 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin return; } - if (pressure == 0 && tilt_x == 0 && tilt_y == 0) - dev = darwinPointer; - else - dev = darwinTabletCurrent; - - screen = miPointerGetScreen(dev); + screen = miPointerGetScreen(pDev); if(!screen) { DEBUG_LOG("DarwinSendPointerEvents called before screen was initialized\n"); return; @@ -437,7 +431,7 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin if (ev_type == ButtonPress && darwinFakeButtons && ev_button == 1) { if(darwinFakeMouseButtonDown != 0) { /* We're currently "down" with another button, so release it first */ - DarwinSendPointerEvents(ButtonRelease, darwinFakeMouseButtonDown, pointer_x, pointer_y, pressure, tilt_x, tilt_y); + DarwinSendPointerEvents(pDev, ButtonRelease, darwinFakeMouseButtonDown, pointer_x, pointer_y, pressure, tilt_x, tilt_y); darwinFakeMouseButtonDown=0; } if (darwin_modifier_flags & darwinFakeMouse2Mask) { @@ -467,9 +461,9 @@ void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int poin DarwinPrepareValuators(valuators, screen, pointer_x, pointer_y, pressure, tilt_x, tilt_y); darwinEvents_lock(); { - num_events = GetPointerEvents(darwinEvents, dev, ev_type, ev_button, - POINTER_ABSOLUTE, 0, dev==darwinTabletCurrent?5:2, valuators); - for(i=0; i 0.0f) || (count_y > 0.0f)) { if (count_x > 0.0f) { - DarwinSendPointerEvents(ButtonPress, sign_x, pointer_x, pointer_y, pressure, tilt_x, tilt_y); - DarwinSendPointerEvents(ButtonRelease, sign_x, pointer_x, pointer_y, pressure, tilt_x, tilt_y); + DarwinSendPointerEvents(darwinPointer, ButtonPress, sign_x, pointer_x, pointer_y, pressure, tilt_x, tilt_y); + DarwinSendPointerEvents(darwinPointer, ButtonRelease, sign_x, pointer_x, pointer_y, pressure, tilt_x, tilt_y); count_x = count_x - 1.0f; } if (count_y > 0.0f) { - DarwinSendPointerEvents(ButtonPress, sign_y, pointer_x, pointer_y, pressure, tilt_x, tilt_y); - DarwinSendPointerEvents(ButtonRelease, sign_y, pointer_x, pointer_y, pressure, tilt_x, tilt_y); + DarwinSendPointerEvents(darwinPointer, ButtonPress, sign_y, pointer_x, pointer_y, pressure, tilt_x, tilt_y); + DarwinSendPointerEvents(darwinPointer, ButtonRelease, sign_y, pointer_x, pointer_y, pressure, tilt_x, tilt_y); count_y = count_y - 1.0f; } } diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h index 61efa7526..003f5faa8 100644 --- a/hw/xquartz/darwinEvents.h +++ b/hw/xquartz/darwinEvents.h @@ -32,7 +32,7 @@ Bool DarwinEQInit(void); void DarwinEQEnqueue(const xEventPtr e); void DarwinEQPointerPost(DeviceIntPtr pDev, xEventPtr e); void DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX); -void DarwinSendPointerEvents(int ev_type, int ev_button, int pointer_x, int pointer_y, +void DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, int pointer_x, int pointer_y, float pressure, float tilt_x, float tilt_y); void DarwinSendProximityEvents(int ev_type, int pointer_x, int pointer_y); void DarwinSendKeyboardEvents(int ev_type, int keycode);