diff options
author | Damien Plisson <damien.plisson@yahoo.fr> | 2010-01-13 20:43:42 +0300 |
---|---|---|
committer | Damien Plisson <damien.plisson@yahoo.fr> | 2010-01-13 20:43:42 +0300 |
commit | 32f4877c8ca590e9d6bf1d5cdabb015158f094c2 (patch) | |
tree | e46ee7be01efd12b5763522500472e474f485125 /intern | |
parent | 75ec61d128071f0646bfedbf900908a08b538e19 (diff) |
Cocoa : properly distinguish mouse from multitouch trackpad scroll events
Mighty mouse trackball now fires proper wheel events (and not trackpad pan ones)
Diffstat (limited to 'intern')
-rw-r--r-- | intern/ghost/intern/GHOST_SystemCocoa.h | 3 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_SystemCocoa.mm | 15 |
2 files changed, 14 insertions, 4 deletions
diff --git a/intern/ghost/intern/GHOST_SystemCocoa.h b/intern/ghost/intern/GHOST_SystemCocoa.h index 23a945f4b76..9f51d7b0748 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.h +++ b/intern/ghost/intern/GHOST_SystemCocoa.h @@ -280,6 +280,9 @@ protected: /** Multitouch trackpad availability */ bool m_hasMultiTouchTrackpad; + + /** Multitouch gesture in progress, useful to distinguish trackpad from mouse scroll events */ + bool m_isGestureInProgress; }; #endif // _GHOST_SYSTEM_COCOA_H_ diff --git a/intern/ghost/intern/GHOST_SystemCocoa.mm b/intern/ghost/intern/GHOST_SystemCocoa.mm index 128ef8a6edf..5f0276c3555 100644 --- a/intern/ghost/intern/GHOST_SystemCocoa.mm +++ b/intern/ghost/intern/GHOST_SystemCocoa.mm @@ -516,6 +516,7 @@ GHOST_SystemCocoa::GHOST_SystemCocoa() m_modifierMask =0; m_pressedMouseButtons =0; + m_isGestureInProgress = false; m_cursorDelta_x=0; m_cursorDelta_y=0; m_outsideLoopEventProcessed = false; @@ -885,6 +886,8 @@ bool GHOST_SystemCocoa::processEvents(bool waitForEvent) case NSOtherMouseDragged: case NSEventTypeMagnify: case NSEventTypeRotate: + case NSEventTypeBeginGesture: + case NSEventTypeEndGesture: handleMouseEvent(event); break; @@ -896,8 +899,6 @@ bool GHOST_SystemCocoa::processEvents(bool waitForEvent) /* Trackpad features, fired only from OS X 10.5.2 case NSEventTypeGesture: case NSEventTypeSwipe: - case NSEventTypeBeginGesture: - case NSEventTypeEndGesture: break; */ /*Unused events @@ -1352,8 +1353,8 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr) case NSScrollWheel: { - /* Send Wheel event if sent from the mouse, trackpad event otherwise */ - if (!m_hasMultiTouchTrackpad || ([event subtype] == NSMouseEventSubtype)) { + /* Send trackpad event if inside a trackpad gesture, send wheel event otherwise */ + if (!m_hasMultiTouchTrackpad || !m_isGestureInProgress) { GHOST_TInt32 delta; double deltaF = [event deltaY]; @@ -1399,6 +1400,12 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr) pushEvent(new GHOST_EventTrackpad([event timestamp]*1000, window, GHOST_kTrackpadEventRotate, mousePos.x, mousePos.y, -[event rotation] * 5.0, 0)); } + case NSEventTypeBeginGesture: + m_isGestureInProgress = true; + break; + case NSEventTypeEndGesture: + m_isGestureInProgress = false; + break; default: return GHOST_kFailure; break; |