Crap, I just noticed that the machine I was on was tracking the wrong master, and this was pushed to origin instead of ~jeremyhu/master. I'm terribly sorry about that. I was planning on sending a [PULL] for this soon anyways, but I wanted to get some of the changes reviewed-by first.
I'm terribly sorry for pushing. I'll go hide in a corner now. --Jeremy On Apr 19, 2012, at 10:02 PM, Jeremy Huddleston <[email protected]> wrote: > Xext/xres.c | 3 > hw/xquartz/X11Application.m | 154 ++++++++++++++++++++++++++---- > hw/xquartz/console_redirect.c | 2 > hw/xquartz/darwin.c | 57 ++++++----- > hw/xquartz/darwinEvents.c | 210 > +++++++++++++++++------------------------- > hw/xquartz/darwinEvents.h | 13 +- > hw/xquartz/xpr/xprFrame.c | 2 > include/os.h | 3 > test/Makefile.am | 5 - > 9 files changed, 271 insertions(+), 178 deletions(-) > > New commits: > commit 9e681a8d331b73c6f544a27aa33752f9054a6cdb > Author: Jeremy Huddleston <[email protected]> > Date: Thu Apr 19 16:38:06 2012 -0700 > > XQuartz: darwinPointer now sends both absolute and relative motion > > This should hopefully help out wine clients that were continuing to > have issues after the earlier changes. > > http://xquartz.macosforge.org/trac/ticket/548 > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m > index 2a9ad73..0c3283e 100644 > --- a/hw/xquartz/X11Application.m > +++ b/hw/xquartz/X11Application.m > @@ -215,7 +215,8 @@ message_kit_thread(SEL selector, NSObject *arg) > if (state) { > if (bgMouseLocationUpdated) { > DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, > - bgMouseLocation.x, bgMouseLocation.y); > + bgMouseLocation.x, bgMouseLocation.y, > + 0.0, 0.0); > bgMouseLocationUpdated = FALSE; > } > DarwinSendDDXEvent(kXquartzActivate, 0); > @@ -1595,14 +1596,16 @@ handle_mouse: > if (bgMouseLocationUpdated) { > if (!(ev_type == MotionNotify && ev_button == 0)) { > DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, > - location.x, location.y); > + location.x, location.y, > + 0.0, 0.0); > } > bgMouseLocationUpdated = FALSE; > } > > if (pDev == darwinPointer) { > DarwinSendPointerEvents(pDev, ev_type, ev_button, > - location.x, location.y); > + location.x, location.y, > + [e deltaX], [e deltaY]); > } else { > DarwinSendTabletEvents(pDev, ev_type, ev_button, > location.x, location.y, pressure, > @@ -1667,7 +1670,8 @@ handle_mouse: > if (!XQuartzServerVisible && noTestExtensions) { > bgMouseLocationUpdated = FALSE; > DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, > - location.x, location.y); > + location.x, location.y, > + 0.0, 0.0); > } > #endif > #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 > diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c > index 03030ad..41db72a 100644 > --- a/hw/xquartz/darwin.c > +++ b/hw/xquartz/darwin.c > @@ -309,7 +309,7 @@ static int > DarwinMouseProc(DeviceIntPtr pPointer, int what) > { > #define NBUTTONS 3 > -#define NAXES 4 > +#define NAXES 6 > // 3 buttons: left, middle, right > CARD8 map[NBUTTONS + 1] = { 0, 1, 2, 3}; > Atom btn_labels[NBUTTONS] = { 0 }; > @@ -323,10 +323,12 @@ DarwinMouseProc(DeviceIntPtr pPointer, int what) > btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); > btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); > > - axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); > - axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); > - axes_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_WHEEL); > - axes_labels[3] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_HWHEEL); > + axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_X); > + axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_Y); > + axes_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); > + axes_labels[3] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); > + axes_labels[4] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_WHEEL); > + axes_labels[5] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_HWHEEL); > > // Set button map. > InitPointerDeviceStruct((DevicePtr)pPointer, map, NBUTTONS, > @@ -334,21 +336,27 @@ DarwinMouseProc(DeviceIntPtr pPointer, int what) > (PtrCtrlProcPtr)NoopDDA, > GetMotionHistorySize(), NAXES, > axes_labels); > - InitValuatorAxisStruct(pPointer, 0, axes_labels[0], > + InitValuatorAxisStruct(pPointer, 0, axes_labels[0], > NO_AXIS_LIMITS, NO_AXIS_LIMITS, > - 1, 0, 1, Relative); > - InitValuatorAxisStruct(pPointer, 1, axes_labels[1], > + 0, 0, 0, Absolute); > + InitValuatorAxisStruct(pPointer, 1, axes_labels[1], > NO_AXIS_LIMITS, NO_AXIS_LIMITS, > - 1, 0, 1, Relative); > + 0, 0, 0, Absolute); > InitValuatorAxisStruct(pPointer, 2, axes_labels[2], > NO_AXIS_LIMITS, NO_AXIS_LIMITS, > 1, 0, 1, Relative); > InitValuatorAxisStruct(pPointer, 3, axes_labels[3], > NO_AXIS_LIMITS, NO_AXIS_LIMITS, > 1, 0, 1, Relative); > + InitValuatorAxisStruct(pPointer, 4, axes_labels[4], > + NO_AXIS_LIMITS, NO_AXIS_LIMITS, > + 1, 0, 1, Relative); > + InitValuatorAxisStruct(pPointer, 5, axes_labels[5], > + NO_AXIS_LIMITS, NO_AXIS_LIMITS, > + 1, 0, 1, Relative); > > - SetScrollValuator(pPointer, 2, SCROLL_TYPE_VERTICAL, -1.0, > SCROLL_FLAG_PREFERRED); > - SetScrollValuator(pPointer, 3, SCROLL_TYPE_HORIZONTAL, -1.0, > SCROLL_FLAG_NONE); > + SetScrollValuator(pPointer, 4, SCROLL_TYPE_VERTICAL, -1.0, > SCROLL_FLAG_PREFERRED); > + SetScrollValuator(pPointer, 5, SCROLL_TYPE_HORIZONTAL, -1.0, > SCROLL_FLAG_NONE); > break; > > case DEVICE_ON: > @@ -399,23 +407,24 @@ DarwinTabletProc(DeviceIntPtr pPointer, int what) > axes_labels); > InitProximityClassDeviceStruct(pPointer); > > - InitValuatorAxisStruct(pPointer, 0, axes_labels[0], 0, > - XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, > - Absolute); > - InitValuatorAxisStruct(pPointer, 1, axes_labels[1], 0, > - XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, > - Absolute); > - InitValuatorAxisStruct(pPointer, 2, axes_labels[2], 0, > - XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, > - Absolute); > + InitValuatorAxisStruct(pPointer, 0, axes_labels[0], > + 0, XQUARTZ_VALUATOR_LIMIT, > + 1, 0, 1, Absolute); > + InitValuatorAxisStruct(pPointer, 1, axes_labels[1], > + 0, XQUARTZ_VALUATOR_LIMIT, > + 1, 0, 1, Absolute); > + InitValuatorAxisStruct(pPointer, 2, axes_labels[2], > + 0, XQUARTZ_VALUATOR_LIMIT, > + 1, 0, 1, Absolute); > InitValuatorAxisStruct(pPointer, 3, axes_labels[3], > -XQUARTZ_VALUATOR_LIMIT, > - XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, > - Absolute); > + XQUARTZ_VALUATOR_LIMIT, > + 1, 0, 1, Absolute); > InitValuatorAxisStruct(pPointer, 4, axes_labels[4], > -XQUARTZ_VALUATOR_LIMIT, > - XQUARTZ_VALUATOR_LIMIT, 1, 0, 1, > - Absolute); > + XQUARTZ_VALUATOR_LIMIT, > + 1, 0, 1, Absolute); > + > // pPointer->use = IsXExtensionDevice; > break; > > diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c > index 25f011b..b41c6fd 100644 > --- a/hw/xquartz/darwinEvents.c > +++ b/hw/xquartz/darwinEvents.c > @@ -74,12 +74,6 @@ > > #include <IOKit/hidsystem/IOLLEvent.h> > > -/* Fake button press/release for scroll wheel move. */ > -#define SCROLLWHEELUPFAKE 4 > -#define SCROLLWHEELDOWNFAKE 5 > -#define SCROLLWHEELLEFTFAKE 6 > -#define SCROLLWHEELRIGHTFAKE 7 > - > #include <X11/extensions/applewmconst.h> > #include "applewmExt.h" > > @@ -497,12 +491,6 @@ DarwinSendTabletEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > pointer_x -= darwinMainScreenX + screen->x; > pointer_y -= darwinMainScreenY + screen->y; > > - if (pointer_x < 0.0) > - pointer_x = 0.0; > - > - if (pointer_y < 0.0) > - pointer_y = 0.0; > - > /* Adjust our pointer location to the [0,1] range */ > pointer_x = pointer_x / (double)screenInfo.width; > pointer_y = pointer_y / (double)screenInfo.height; > @@ -528,7 +516,8 @@ DarwinSendTabletEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > > void > DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > - double pointer_x, double pointer_y) > + double pointer_x, double pointer_y, > + double pointer_dx, double pointer_dy) > { > static int darwinFakeMouseButtonDown = 0; > ScreenPtr screen; > @@ -553,7 +542,7 @@ DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > /* We're currently "down" with another button, so release it > first */ > DarwinSendPointerEvents(pDev, ButtonRelease, > darwinFakeMouseButtonDown, > - pointer_x, pointer_y); > + pointer_x, pointer_y, 0.0, 0.0); > darwinFakeMouseButtonDown = 0; > } > if (darwin_all_modifier_flags & darwinFakeMouse2Mask) { > @@ -591,22 +580,23 @@ DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > pointer_x -= darwinMainScreenX + screen->x; > pointer_y -= darwinMainScreenY + screen->y; > > - if (pointer_x < 0.0) > - pointer_x = 0.0; > - > - if (pointer_y < 0.0) > - pointer_y = 0.0; > - > valuator_mask_zero(&valuators); > valuator_mask_set_double(&valuators, 0, pointer_x); > valuator_mask_set_double(&valuators, 1, pointer_y); > > + if (ev_type == MotionNotify) { > + if (pointer_dx != 0.0) > + valuator_mask_set_double(&valuators, 2, pointer_dx); > + if (pointer_dy != 0.0) > + valuator_mask_set_double(&valuators, 3, pointer_dy); > + } > + > darwinEvents_lock(); > { > QueuePointerEvents(pDev, ev_type, ev_button, POINTER_ABSOLUTE, > &valuators); > DarwinPokeEQ(); > - } darwinEvents_unlock(); > + } darwinEvents_unlock(); > } > > void > @@ -647,8 +637,8 @@ DarwinSendScrollEvents(double scroll_x, double scroll_y) { > } > > valuator_mask_zero(&valuators); > - valuator_mask_set_double(&valuators, 2, scroll_y); > - valuator_mask_set_double(&valuators, 3, scroll_x); > + valuator_mask_set_double(&valuators, 4, scroll_y); > + valuator_mask_set_double(&valuators, 5, scroll_x); > > darwinEvents_lock(); > { > diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h > index 812a5dc..448e730 100644 > --- a/hw/xquartz/darwinEvents.h > +++ b/hw/xquartz/darwinEvents.h > @@ -49,7 +49,8 @@ DarwinSendTabletEvents(DeviceIntPtr pDev, int ev_type, int > ev_button, > double tilt_x, double tilt_y); > void > DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > - double pointer_x, double pointer_y); > + double pointer_x, double pointer_y, > + double pointer_dx, double pointer_dy); > void > DarwinSendKeyboardEvents(int ev_type, int keycode); > void > commit 4efd35ecdd79eeaca765b461ebf3dcf2509ed0b1 > Author: Jeremy Huddleston <[email protected]> > Date: Thu Apr 19 18:48:22 2012 -0700 > > XQuartz: Add a hack to better handle clicky wheel scroll mice > > We loose information from AppKit being in our way. Before adopting > smooth scrolling, we always rounded-up the number of scroll button > clicks per NSEvent. Now, the scroll value is accumulated in the > dix, and clicky scroll wheels with legacy X11 clients are seeing > an accumulation of error due to so many translations (button press > to smooth scrolling value in AppKit, passed to the dix, and then > synthesized into a button press). This attempts to make the > situation better. > > http://xquartz.macosforge.org/trac/ticket/562 > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m > index f700c67..2a9ad73 100644 > --- a/hw/xquartz/X11Application.m > +++ b/hw/xquartz/X11Application.m > @@ -1638,8 +1638,28 @@ handle_mouse: > > case NSScrollWheel: > { > - float deltaX = [e deltaX]; > - float deltaY = [e deltaY]; > + CGFloat deltaX = [e deltaX]; > + CGFloat deltaY = [e deltaY]; > + CGEventRef cge = [e CGEvent]; > + BOOL isContinuous = > + CGEventGetIntegerValueField(cge, > kCGScrollWheelEventIsContinuous); > + > +#if 0 > + /* Scale the scroll value by line height */ > + CGEventSourceRef source = CGEventCreateSourceFromEvent(cge); > + if (source) { > + double lineHeight = CGEventSourceGetPixelsPerLine(source); > + CFRelease(source); > + > + /* There's no real reason for the 1/5 ratio here other than that > + * it feels like a good ratio after some testing. > + */ > + > + deltaX *= lineHeight / 5.0; > + deltaY *= lineHeight / 5.0; > + } > +#endif > + > #if !defined(XPLUGIN_VERSION) || XPLUGIN_VERSION == 0 > /* If we're in the background, we need to send a MotionNotify event > * first, since we aren't getting them on background mouse motion > @@ -1659,6 +1679,93 @@ handle_mouse: > deltaY *= -1; > } > #endif > + /* This hack is in place to better deal with "clicky" scroll wheels: > + * http://xquartz.macosforge.org/trac/ticket/562 > + */ > + if (!isContinuous) { > + static NSTimeInterval lastScrollTime = 0.0; > + > + /* These store how much extra we have already scrolled. > + * ie, this is how much we ignore on the next event. > + */ > + static double deficit_x = 0.0; > + static double deficit_y = 0.0; > + > + /* If we have past a second since the last scroll, wipe the slate > + * clean > + */ > + if ([e timestamp] - lastScrollTime > 1.0) { > + deficit_x = deficit_y = 0.0; > + } > + lastScrollTime = [e timestamp]; > + > + if (deltaX != 0.0) { > + /* If we changed directions, wipe the slate clean */ > + if ((deficit_x < 0.0 && deltaX > 0.0) || > + (deficit_x > 0.0 && deltaX < 0.0)) { > + deficit_x = 0.0; > + } > + > + /* Eat up the deficit, but ensure that something is > + * always sent > + */ > + if (fabs(deltaX) > fabs(deficit_x)) { > + deltaX -= deficit_x; > + > + if (deltaX > 0.0) { > + deficit_x = ceil(deltaX) - deltaX; > + deltaX = ceil(deltaX); > + } else { > + deficit_x = floor(deltaX) - deltaX; > + deltaX = floor(deltaX); > + } > + } else { > + deficit_x -= deltaX; > + > + if (deltaX > 0.0) { > + deltaX = 1.0; > + } else { > + deltaX = -1.0; > + } > + > + deficit_x += deltaX; > + } > + } > + > + if (deltaY != 0.0) { > + /* If we changed directions, wipe the slate clean */ > + if ((deficit_y < 0.0 && deltaY > 0.0) || > + (deficit_y > 0.0 && deltaY < 0.0)) { > + deficit_y = 0.0; > + } > + > + /* Eat up the deficit, but ensure that something is > + * always sent > + */ > + if (fabs(deltaY) > fabs(deficit_y)) { > + deltaY -= deficit_y; > + > + if (deltaY > 0.0) { > + deficit_y = ceil(deltaY) - deltaY; > + deltaY = ceil(deltaY); > + } else { > + deficit_y = floor(deltaY) - deltaY; > + deltaY = floor(deltaY); > + } > + } else { > + deficit_y -= deltaY; > + > + if (deltaY > 0.0) { > + deltaY = 1.0; > + } else { > + deltaY = -1.0; > + } > + > + deficit_y += deltaY; > + } > + } > + } > + > DarwinSendScrollEvents(deltaX, deltaY); > break; > } > commit 873acd8e62a2678870e6aae984cd9b6693846757 > Author: Jeremy Huddleston <[email protected]> > Date: Thu Apr 19 16:20:30 2012 -0700 > > XQuartz: Use screenInfo.{width,height} instead of grabbing it from the > first screen > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c > index 9fc23a3..25f011b 100644 > --- a/hw/xquartz/darwinEvents.c > +++ b/hw/xquartz/darwinEvents.c > @@ -504,8 +504,8 @@ DarwinSendTabletEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > pointer_y = 0.0; > > /* Adjust our pointer location to the [0,1] range */ > - pointer_x = pointer_x / (double)screenInfo.screens[0]->width; > - pointer_y = pointer_y / (double)screenInfo.screens[0]->height; > + pointer_x = pointer_x / (double)screenInfo.width; > + pointer_y = pointer_y / (double)screenInfo.height; > > valuator_mask_zero(&valuators); > valuator_mask_set_double(&valuators, 0, XQUARTZ_VALUATOR_LIMIT * > pointer_x); > commit 53fe023393cea635ad2093f2aeb5cef7409d3867 > Author: Jeremy Huddleston <[email protected]> > Date: Wed Apr 18 17:50:55 2012 -0700 > > XQuartz: Separate out tablet and mouse event delivery into separate > functions > > This should have no immediate impact aside from fake mouse buttons no > longer > working with tablets (where they aren't needed or desired anyways). This > prepares us for future changes. > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m > index a203f78..f700c67 100644 > --- a/hw/xquartz/X11Application.m > +++ b/hw/xquartz/X11Application.m > @@ -215,9 +215,7 @@ message_kit_thread(SEL selector, NSObject *arg) > if (state) { > if (bgMouseLocationUpdated) { > DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, > - bgMouseLocation.x, bgMouseLocation.y, > 0.0, > - 0.0, > - 0.0); > + bgMouseLocation.x, bgMouseLocation.y); > bgMouseLocationUpdated = FALSE; > } > DarwinSendDDXEvent(kXquartzActivate, 0); > @@ -1549,9 +1547,9 @@ handle_mouse: > if ([e isEnteringProximity]) > needsProximityIn = YES; > else > - DarwinSendProximityEvents(darwinTabletCurrent, ProximityOut, > - location.x, location.y, pressure, > - tilt.x, tilt.y); > + DarwinSendTabletEvents(darwinTabletCurrent, ProximityOut, 0, > + location.x, location.y, pressure, > + tilt.x, tilt.y); > return; > } > > @@ -1563,9 +1561,9 @@ handle_mouse: > pDev = darwinTabletCurrent; > > if (needsProximityIn) { > - DarwinSendProximityEvents(darwinTabletCurrent, ProximityIn, > - location.x, location.y, pressure, > - tilt.x, tilt.y); > + DarwinSendTabletEvents(darwinTabletCurrent, ProximityIn, 0, > + location.x, location.y, pressure, > + tilt.x, tilt.y); > > needsProximityIn = NO; > } > @@ -1596,14 +1594,20 @@ handle_mouse: > > if (bgMouseLocationUpdated) { > if (!(ev_type == MotionNotify && ev_button == 0)) { > - DarwinSendPointerEvents(pDev, MotionNotify, 0, location.x, > - location.y, pressure, tilt.x, > tilt.y); > + DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, > + location.x, location.y); > } > bgMouseLocationUpdated = FALSE; > } > > - DarwinSendPointerEvents(pDev, ev_type, ev_button, location.x, > - location.y, pressure, tilt.x, tilt.y); > + if (pDev == darwinPointer) { > + DarwinSendPointerEvents(pDev, ev_type, ev_button, > + location.x, location.y); > + } else { > + DarwinSendTabletEvents(pDev, ev_type, ev_button, > + location.x, location.y, pressure, > + tilt.x, tilt.y); > + } > > break; > > @@ -1627,9 +1631,9 @@ handle_mouse: > if ([e isEnteringProximity]) > needsProximityIn = YES; > else > - DarwinSendProximityEvents(darwinTabletCurrent, ProximityOut, > - location.x, location.y, pressure, > - tilt.x, tilt.y); > + DarwinSendTabletEvents(darwinTabletCurrent, ProximityOut, 0, > + location.x, location.y, pressure, > + tilt.x, tilt.y); > break; > > case NSScrollWheel: > @@ -1643,8 +1647,7 @@ handle_mouse: > if (!XQuartzServerVisible && noTestExtensions) { > bgMouseLocationUpdated = FALSE; > DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, > - location.x, location.y, pressure, > - tilt.x, tilt.y); > + location.x, location.y); > } > #endif > #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 > diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c > index c62dd44..9fc23a3 100644 > --- a/hw/xquartz/darwinEvents.c > +++ b/hw/xquartz/darwinEvents.c > @@ -44,19 +44,20 @@ > #include <dix-config.h> > #endif > > -#include <X11/X.h> > -#include <X11/Xmd.h> > -#include <X11/Xproto.h> > -#include "misc.h" > -#include "windowstr.h" > -#include "pixmapstr.h" > -#include "inputstr.h" > -#include "inpututils.h" > -#include "eventstr.h" > -#include "mi.h" > -#include "scrnintstr.h" > -#include "mipointer.h" > -#include "os.h" > +#include <X11/X.h> > +#include <X11/Xmd.h> > +#include <X11/Xproto.h> > +#include "misc.h" > +#include "windowstr.h" > +#include "pixmapstr.h" > +#include "inputstr.h" > +#include "inpututils.h" > +#include "eventstr.h" > +#include "mi.h" > +#include "scrnintstr.h" > +#include "mipointer.h" > +#include "os.h" > +#include "exglobals.h" > > #include "darwin.h" > #include "quartz.h" > @@ -442,56 +443,6 @@ DarwinPokeEQ(void) > write(darwinEventWriteFD, &nullbyte, sizeof(nullbyte)); > } > > -/* Convert from Appkit pointer input values to X input values: > - * Note: pointer_x and pointer_y are relative to the upper-left of primary > - * display. > - */ > -static void > -DarwinPrepareValuators(DeviceIntPtr pDev, ValuatorMask *pmask, > - ScreenPtr screen, > - double pointer_x, double pointer_y, > - double pressure, double tilt_x, > - double tilt_y) > -{ > - > - valuator_mask_zero(pmask); > - > - /* Fix offset between darwin and X screens */ > - pointer_x -= darwinMainScreenX + screen->x; > - pointer_y -= darwinMainScreenY + screen->y; > - > - if (pointer_x < 0.0) > - pointer_x = 0.0; > - > - if (pointer_y < 0.0) > - pointer_y = 0.0; > - > - if (pDev == darwinPointer) { > - valuator_mask_set_double(pmask, 0, pointer_x); > - valuator_mask_set_double(pmask, 1, pointer_y); > - } > - else { > - valuator_mask_set_double(pmask, 0, XQUARTZ_VALUATOR_LIMIT * > - (pointer_x / > - (double)screenInfo.screens[0]->width)); > - valuator_mask_set_double(pmask, 1, XQUARTZ_VALUATOR_LIMIT * > - (pointer_y / > - (double)screenInfo.screens[0]->height)); > - valuator_mask_set_double(pmask, 2, XQUARTZ_VALUATOR_LIMIT * > pressure); > - valuator_mask_set_double(pmask, 3, XQUARTZ_VALUATOR_LIMIT * tilt_x); > - valuator_mask_set_double(pmask, 4, XQUARTZ_VALUATOR_LIMIT * tilt_y); > - DEBUG_LOG("Pointer (%lf, %lf), Valuators: {%lf,%lf,%lf,%lf,%lf}\n", > - pointer_x, pointer_y, > - valuator_mask_get_double(pmask, > - 0), > - valuator_mask_get_double(pmask, 1), > - valuator_mask_get_double(pmask, > - 2), > - valuator_mask_get_double(pmask, 3), > - valuator_mask_get_double(pmask, 4)); > - } > -} > - > void > DarwinInputReleaseButtonsAndKeys(DeviceIntPtr pDev) > { > @@ -521,27 +472,78 @@ DarwinInputReleaseButtonsAndKeys(DeviceIntPtr pDev) > } > > void > +DarwinSendTabletEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > + double pointer_x, double pointer_y, > + double pressure, double tilt_x, > + double tilt_y) > +{ > + ScreenPtr screen; > + ValuatorMask valuators; > + > + if (!darwinEvents) { > + DEBUG_LOG("%s called before darwinEvents was initialized\n", > + __FUNCTION__); > + return; > + } > + > + screen = miPointerGetScreen(pDev); > + if (!screen) { > + DEBUG_LOG("%s called before screen was initialized\n", > + __FUNCTION__); > + return; > + } > + > + /* Fix offset between darwin and X screens */ > + pointer_x -= darwinMainScreenX + screen->x; > + pointer_y -= darwinMainScreenY + screen->y; > + > + if (pointer_x < 0.0) > + pointer_x = 0.0; > + > + if (pointer_y < 0.0) > + pointer_y = 0.0; > + > + /* Adjust our pointer location to the [0,1] range */ > + pointer_x = pointer_x / (double)screenInfo.screens[0]->width; > + pointer_y = pointer_y / (double)screenInfo.screens[0]->height; > + > + valuator_mask_zero(&valuators); > + valuator_mask_set_double(&valuators, 0, XQUARTZ_VALUATOR_LIMIT * > pointer_x); > + valuator_mask_set_double(&valuators, 1, XQUARTZ_VALUATOR_LIMIT * > pointer_y); > + valuator_mask_set_double(&valuators, 2, XQUARTZ_VALUATOR_LIMIT * > pressure); > + valuator_mask_set_double(&valuators, 3, XQUARTZ_VALUATOR_LIMIT * tilt_x); > + valuator_mask_set_double(&valuators, 4, XQUARTZ_VALUATOR_LIMIT * tilt_y); > + > + darwinEvents_lock(); > + { > + if (ev_type == ProximityIn || ev_type == ProximityOut) { > + QueueProximityEvents(pDev, ev_type, &valuators); > + } else { > + QueuePointerEvents(pDev, ev_type, ev_button, POINTER_ABSOLUTE, > + &valuators); > + } > + DarwinPokeEQ(); > + } darwinEvents_unlock(); > +} > + > +void > DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > - double pointer_x, double pointer_y, > - double pressure, double tilt_x, > - double tilt_y) > + double pointer_x, double pointer_y) > { > static int darwinFakeMouseButtonDown = 0; > ScreenPtr screen; > ValuatorMask valuators; > > - //DEBUG_LOG("x=%f, y=%f, p=%f, tx=%f, ty=%f\n", pointer_x, pointer_y, > pressure, tilt_x, tilt_y); > - > if (!darwinEvents) { > - DEBUG_LOG( > - "DarwinSendPointerEvents called before darwinEvents was > initialized\n"); > + DEBUG_LOG("%s called before darwinEvents was initialized\n", > + __FUNCTION__); > return; > } > > screen = miPointerGetScreen(pDev); > if (!screen) { > - DEBUG_LOG( > - "DarwinSendPointerEvents called before screen was > initialized\n"); > + DEBUG_LOG("%s called before screen was initialized\n", > + __FUNCTION__); > return; > } > > @@ -550,9 +552,8 @@ DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > if (darwinFakeMouseButtonDown != 0) { > /* We're currently "down" with another button, so release it > first */ > DarwinSendPointerEvents(pDev, ButtonRelease, > - darwinFakeMouseButtonDown, pointer_x, > - pointer_y, pressure, tilt_x, > - tilt_y); > + darwinFakeMouseButtonDown, > + pointer_x, pointer_y); > darwinFakeMouseButtonDown = 0; > } > if (darwin_all_modifier_flags & darwinFakeMouse2Mask) { > @@ -586,9 +587,20 @@ DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, > int ev_button, > darwinFakeMouseButtonDown = 0; > } > > - DarwinPrepareValuators(pDev, &valuators, screen, pointer_x, pointer_y, > - pressure, tilt_x, > - tilt_y); > + /* Fix offset between darwin and X screens */ > + pointer_x -= darwinMainScreenX + screen->x; > + pointer_y -= darwinMainScreenY + screen->y; > + > + if (pointer_x < 0.0) > + pointer_x = 0.0; > + > + if (pointer_y < 0.0) > + pointer_y = 0.0; > + > + valuator_mask_zero(&valuators); > + valuator_mask_set_double(&valuators, 0, pointer_x); > + valuator_mask_set_double(&valuators, 1, pointer_y); > + > darwinEvents_lock(); > { > QueuePointerEvents(pDev, ev_type, ev_button, POINTER_ABSOLUTE, > @@ -615,42 +627,6 @@ DarwinSendKeyboardEvents(int ev_type, int keycode) > } darwinEvents_unlock(); > } > > -void > -DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, double pointer_x, > - double pointer_y, > - double pressure, double tilt_x, > - double tilt_y) > -{ > - ScreenPtr screen; > - ValuatorMask valuators; > - > - DEBUG_LOG("DarwinSendProximityEvents: %d l:%f,%f p:%f t:%f,%f\n", > ev_type, > - pointer_x, pointer_y, pressure, tilt_x, > - tilt_y); > - > - if (!darwinEvents) { > - DEBUG_LOG( > - "DarwinSendProximityEvents called before darwinEvents was > initialized\n"); > - return; > - } > - > - screen = miPointerGetScreen(pDev); > - if (!screen) { > - DEBUG_LOG( > - "DarwinSendPointerEvents called before screen was > initialized\n"); > - return; > - } > - > - DarwinPrepareValuators(pDev, &valuators, screen, pointer_x, pointer_y, > - pressure, tilt_x, > - tilt_y); > - darwinEvents_lock(); > - { > - QueueProximityEvents(pDev, ev_type, &valuators); > - DarwinPokeEQ(); > - } darwinEvents_unlock(); > -} > - > /* Send the appropriate number of button clicks to emulate scroll wheel */ > void > DarwinSendScrollEvents(double scroll_x, double scroll_y) { > diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h > index 61ace6e..812a5dc 100644 > --- a/hw/xquartz/darwinEvents.h > +++ b/hw/xquartz/darwinEvents.h > @@ -44,14 +44,12 @@ DarwinEQSwitchScreen(ScreenPtr pScreen, Bool fromDIX); > void > DarwinInputReleaseButtonsAndKeys(DeviceIntPtr pDev); > void > -DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > - double pointer_x, double pointer_y, double pressure, > - double tilt_x, > - double tilt_y); > +DarwinSendTabletEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > + double pointer_x, double pointer_y, double pressure, > + double tilt_x, double tilt_y); > void > -DarwinSendProximityEvents(DeviceIntPtr pDev, int ev_type, double pointer_x, > - double pointer_y, double pressure, double tilt_x, > - double tilt_y); > +DarwinSendPointerEvents(DeviceIntPtr pDev, int ev_type, int ev_button, > + double pointer_x, double pointer_y); > void > DarwinSendKeyboardEvents(int ev_type, int keycode); > void > commit 4cb519dd1d4acfe4bb920b8558452152ece9724a > Author: Jeremy Huddleston <[email protected]> > Date: Thu Apr 19 16:06:45 2012 -0700 > > XQuartz: Correct calculation of the size of our file descriptor array in > console_redirect > > Reported-by: Joe Rohde <[email protected]> > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/hw/xquartz/console_redirect.c b/hw/xquartz/console_redirect.c > index 7b92eca..1e0e56b 100644 > --- a/hw/xquartz/console_redirect.c > +++ b/hw/xquartz/console_redirect.c > @@ -336,7 +336,7 @@ xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int > fd) > { > /* Reallocate if we need more space */ > if (fd >= n_redirect_fds) { > - size_t new_n = 1 << (ffs(fd) + 1); > + size_t new_n = 1 << (fls(fd) + 1); > asl_redirect *new_array = > realloc(redirect_fds, new_n * > sizeof(*redirect_fds)); > commit 4c44bcbf6208df1de93206f5cb1bdf4eba5b0f72 > Author: Jeremy Huddleston <[email protected]> > Date: Wed Apr 18 01:01:44 2012 -0700 > > XQuartz: Fix a deadlock in pre-dispatch code > > The fact that this has been in place so long makes me really wonder if > anybody cares about this running in Tiger or Leopard. > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c > index 4c7aac4..01f1def 100644 > --- a/hw/xquartz/xpr/xprFrame.c > +++ b/hw/xquartz/xpr/xprFrame.c > @@ -212,7 +212,7 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr > pScreen, > #else > pthread_rwlock_wrlock(&window_hash_rwlock); > x_hash_table_insert(window_hash, pFrame->wid, pFrame); > - pthread_rwlock_wrlock(&window_hash_rwlock); > + pthread_rwlock_unlock(&window_hash_rwlock); > #endif > > xprSetNativeProperty(pFrame); > commit 4ce2be2ed0860ecfa9d7019957ae64dabe2a5ee3 > Author: Jeremy Huddleston <[email protected]> > Date: Sat Apr 7 15:26:53 2012 -0700 > > test: Fix make dist > > It seems like make dist should be doing te right thing without this commit, > but it's not in some cases. Don't ask me to explain why. > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/test/Makefile.am b/test/Makefile.am > index 8c7e412..8582397 100644 > --- a/test/Makefile.am > +++ b/test/Makefile.am > @@ -54,8 +54,6 @@ libxservertest_la_LIBADD += \ > $(top_builddir)/hw/xfree86/dixmods/libxorgxkb.la \ > @XORG_LIBS@ > > -EXTRA_DIST = ddxstubs.c > - > else > nodist_libxservertest_la_SOURCES = \ > ddxstubs.c \ > @@ -111,3 +109,6 @@ endif > > libxservertest_la_DEPENDENCIES = $(libxservertest_la_LIBADD) > endif > + > +EXTRA_DIST = ddxstubs.c > + > commit fc8983279ca06da385d8ce741eeeddd35b3ada9f > Author: Jeremy Huddleston <[email protected]> > Date: Thu Apr 19 16:39:23 2012 -0700 > > os: Annotate OsVendorFatalError as _X_ATTRIBUTE_PRINTF > > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/include/os.h b/include/os.h > index 166c60c..276eb52 100644 > --- a/include/os.h > +++ b/include/os.h > @@ -321,7 +321,8 @@ extern _X_EXPORT void > OsCleanup(Bool); > > extern _X_EXPORT void > -OsVendorFatalError(const char *f, va_list args); > +OsVendorFatalError(const char *f, va_list args) > +_X_ATTRIBUTE_PRINTF(1, 0); > > extern _X_EXPORT void > OsVendorInit(void); > commit 319841fcaaa6e0491658b4b4940bac86ee51ac1a > Author: Jeremy Huddleston <[email protected]> > Date: Thu Apr 19 16:51:46 2012 -0700 > > xres: Fix build without composite > > Regression from: b8d0d19a6d410776b53a41e7cae90f68d4b22bb7 > Signed-off-by: Jeremy Huddleston <[email protected]> > > diff --git a/Xext/xres.c b/Xext/xres.c > index ecef0c0..dbefeeb 100644 > --- a/Xext/xres.c > +++ b/Xext/xres.c > @@ -29,7 +29,10 @@ > #include <string.h> > #include "hashtable.h" > #include "picturestr.h" > + > +#ifdef COMPOSITE > #include "compint.h" > +#endif > > /** @brief Holds fragments of responses for ConstructClientIds. > * > _______________________________________________ > xorg-commit mailing list > [email protected] > http://lists.x.org/mailman/listinfo/xorg-commit > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
