From d1a9f616f27992f7788e99faed95ee10c25e12b7 Mon Sep 17 00:00:00 2001 From: Ben Byer Date: Fri, 30 Nov 2007 19:22:26 -0800 Subject: [PATCH] Removed redundant scroll wheel event code, and added support for buttons 6 and 7 (horizontal scrolling) --- hw/darwin/darwin.h | 1 - hw/darwin/darwinEvents.c | 26 ------------------ hw/darwin/quartz/X11Application.m | 44 +++++++++++++++++++++++++------ 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/hw/darwin/darwin.h b/hw/darwin/darwin.h index 468cb6eeb..8a48440b8 100644 --- a/hw/darwin/darwin.h +++ b/hw/darwin/darwin.h @@ -124,7 +124,6 @@ enum { kXDarwinUpdateModifiers // update all modifier keys = LASTEvent+1, // (from X.h list of event names) kXDarwinUpdateButtons, // update state of mouse buttons 2 and up - kXDarwinScrollWheel, // scroll wheel event /* * Quartz-specific events -- not used in IOKit mode */ diff --git a/hw/darwin/darwinEvents.c b/hw/darwin/darwinEvents.c index db715d7ff..8a4e1c98d 100644 --- a/hw/darwin/darwinEvents.c +++ b/hw/darwin/darwinEvents.c @@ -53,10 +53,6 @@ in this Software without prior written authorization from The Open Group. #include #include -/* Fake button press/release for scroll wheel move. */ -#define SCROLLWHEELUPFAKE 4 -#define SCROLLWHEELDOWNFAKE 5 - #define QUEUE_SIZE 256 typedef struct _Event { @@ -576,28 +572,6 @@ void ProcessInputEvents(void) break; } - case kXDarwinScrollWheel: - { - short count = xe.u.clientMessage.u.s.shorts0; - - if (count > 0) { - xe.u.u.detail = SCROLLWHEELUPFAKE; - } else { - xe.u.u.detail = SCROLLWHEELDOWNFAKE; - count = -count; - } - - for (; count; --count) { - xe.u.u.type = ButtonPress; - (*darwinEventQueue.pPtr->processInputProc) - (&xe, (DeviceIntPtr)darwinEventQueue.pPtr, 1); - xe.u.u.type = ButtonRelease; - (*darwinEventQueue.pPtr->processInputProc) - (&xe, (DeviceIntPtr)darwinEventQueue.pPtr, 1); - } - break; - } - case kXDarwinDeactivate: DEBUG_LOG("kxDarwinDeactivate\n"); DarwinReleaseModifiers(); diff --git a/hw/darwin/quartz/X11Application.m b/hw/darwin/quartz/X11Application.m index 5c27e4567..36b9c23b9 100644 --- a/hw/darwin/quartz/X11Application.m +++ b/hw/darwin/quartz/X11Application.m @@ -55,6 +55,12 @@ WindowPtr xprGetXWindowFromAppKit(int windowNumber); // xpr/xprFrame.c #define DEFAULTS_FILE "/usr/X11/lib/X11/xserver/Xquartz.plist" +/* Fake button press/release for scroll wheel move. */ +#define SCROLLWHEELUPFAKE 4 +#define SCROLLWHEELDOWNFAKE 5 +#define SCROLLWHEELLEFTFAKE 6 +#define SCROLLWHEELRIGHTFAKE 7 + int X11EnableKeyEquivalents = TRUE; int quartzHasRoot = FALSE, quartzEnableRootless = TRUE; @@ -878,8 +884,9 @@ static void send_nsevent (NSEventType type, NSEvent *e) { xe.u.keyButtonPointer.rootY = pointer_y; switch (type) { - float count; - + float countX, countY; + int signX, signY; + case NSLeftMouseDown: xe.u.u.type = ButtonPress; xe.u.u.detail = 1; @@ -947,16 +954,37 @@ static void send_nsevent (NSEventType type, NSEvent *e) { xe.u.u.detail = [e keyCode]; goto do_event; - case NSScrollWheel: - xe.u.keyButtonPointer.state = convert_flags ([e modifierFlags]); - count = [e deltaY]; - xe.u.u.detail = count > 0.0f ? 4 : 5; - for (count = fabs(count); count > 0.0; count = count - 1.0f) { + case NSScrollWheel: +// xe.u.keyButtonPointer.state = convert_flags ([e modifierFlags]); + countY = [e deltaY]; + countX = [e deltaX]; + signY = countY > 0.0f ? + SCROLLWHEELUPFAKE : SCROLLWHEELDOWNFAKE; + signX = countX > 0.0f ? + SCROLLWHEELLEFTFAKE : SCROLLWHEELRIGHTFAKE; + + countX = fabs(countX); + countY = fabs(countY); + + while ((countX > 0.0f) || (countY > 0.0f)) { + if (countX > 0.0f) { + xe.u.u.detail = signX; xe.u.u.type = ButtonPress; DarwinEQEnqueue(&xe); xe.u.u.type = ButtonRelease; DarwinEQEnqueue(&xe); - } + countX = countX - 1.0f; + } + + if (countY > 0.0f) { + xe.u.u.detail = signY; + xe.u.u.type = ButtonPress; + DarwinEQEnqueue(&xe); + xe.u.u.type = ButtonRelease; + DarwinEQEnqueue(&xe); + countY = countY - 1.0f; + } + } xe.u.u.type = 0; break;