From f210a8593450049fc366098cab040daea10ca758 Mon Sep 17 00:00:00 2001 From: Rick Stockton Date: Thu, 20 Dec 2012 20:38:45 -0800 Subject: cocoa: Fix Mouse Event tracking of button status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Within qcocoahelpers, make function cocoaButton2QtButton() handle all button numbers. Within qnsview, call the function in several places (eliminating duplicate, inefficient code). Task-number: QTBUG-28567 Change-Id: Ibae2ae4e8a881b825a8862afb82aa80437751111 Reviewed-by: Morten Johan Sørvig Reviewed-by: Rick Stockton --- src/plugins/platforms/cocoa/qcocoahelpers.mm | 19 ++--- src/plugins/platforms/cocoa/qnsview.mm | 113 +++------------------------ 2 files changed, 21 insertions(+), 111 deletions(-) (limited to 'src/plugins/platforms') diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm index c6d6e35794..0c5d26054c 100644 --- a/src/plugins/platforms/cocoa/qcocoahelpers.mm +++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm @@ -623,20 +623,17 @@ CGFloat qt_mac_get_scalefactor() Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum) { - switch (buttonNum) { - case 0: + if (buttonNum == 0) return Qt::LeftButton; - case 1: + if (buttonNum == 1) return Qt::RightButton; - case 2: - return Qt::MidButton; - case 3: - return Qt::XButton1; - case 4: - return Qt::XButton2; - default: - return Qt::NoButton; + if (buttonNum == 2) + return Qt::MiddleButton; + if (buttonNum >= 3 && buttonNum <= 31) { // handle XButton1 and higher via logical shift + return Qt::MouseButton(uint(Qt::MiddleButton) << (buttonNum - 3)); } + // else error: buttonNum too high, or negative + return Qt::NoButton; } bool qt_mac_execute_apple_script(const char *script, long script_len, AEDesc *ret) { diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index a0e76cb452..b822061feb 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -403,14 +403,19 @@ static QTouchDevice *touchDevice = 0; m_buttons |= Qt::LeftButton; break; case NSLeftMouseUp: - m_buttons &= QFlag(~int(Qt::LeftButton)); + m_buttons &= ~Qt::LeftButton; break; case NSRightMouseDown: m_buttons |= Qt::RightButton; break; case NSRightMouseUp: - m_buttons &= QFlag(~int(Qt::RightButton)); + m_buttons &= ~Qt::RightButton; break; + case NSOtherMouseDown: + m_buttons |= cocoaButton2QtButton([theEvent buttonNumber]); + break; + case NSOtherMouseUp: + m_buttons &= ~cocoaButton2QtButton([theEvent buttonNumber]); default: break; } @@ -465,10 +470,10 @@ static QTouchDevice *touchDevice = 0; - (void)mouseUp:(NSEvent *)theEvent { if (m_sendUpAsRightButton) { - m_buttons &= QFlag(~int(Qt::RightButton)); + m_buttons &= ~Qt::RightButton; m_sendUpAsRightButton = false; } else { - m_buttons &= QFlag(~int(Qt::LeftButton)); + m_buttons &= ~Qt::LeftButton; } [self handleMouseEvent:theEvent]; } @@ -539,59 +544,13 @@ static QTouchDevice *touchDevice = 0; - (void)rightMouseUp:(NSEvent *)theEvent { - m_buttons &= QFlag(~int(Qt::RightButton)); + m_buttons &= ~Qt::RightButton; [self handleMouseEvent:theEvent]; } - (void)otherMouseDown:(NSEvent *)theEvent { - switch ([theEvent buttonNumber]) { - case 3: - m_buttons |= Qt::MiddleButton; - break; - case 4: - m_buttons |= Qt::ExtraButton1; // AKA Qt::BackButton - break; - case 5: - m_buttons |= Qt::ExtraButton2; // AKA Qt::ForwardButton - break; - case 6: - m_buttons |= Qt::ExtraButton3; - break; - case 7: - m_buttons |= Qt::ExtraButton4; - break; - case 8: - m_buttons |= Qt::ExtraButton5; - break; - case 9: - m_buttons |= Qt::ExtraButton6; - break; - case 10: - m_buttons |= Qt::ExtraButton7; - break; - case 11: - m_buttons |= Qt::ExtraButton8; - break; - case 12: - m_buttons |= Qt::ExtraButton9; - break; - case 13: - m_buttons |= Qt::ExtraButton10; - break; - case 14: - m_buttons |= Qt::ExtraButton11; - break; - case 15: - m_buttons |= Qt::ExtraButton12; - break; - case 16: - m_buttons |= Qt::ExtraButton13; - break; - default: - m_buttons |= Qt::MiddleButton; - break; - } + m_buttons |= cocoaButton2QtButton([theEvent buttonNumber]); [self handleMouseEvent:theEvent]; } @@ -604,53 +563,7 @@ static QTouchDevice *touchDevice = 0; - (void)otherMouseUp:(NSEvent *)theEvent { - switch ([theEvent buttonNumber]) { - case 3: - m_buttons &= QFlag(~int(Qt::MiddleButton)); - break; - case 4: - m_buttons &= QFlag(~int(Qt::ExtraButton1)); // AKA Qt::BackButton - break; - case 5: - m_buttons &= QFlag(~int(Qt::ExtraButton2)); // AKA Qt::ForwardButton - break; - case 6: - m_buttons &= QFlag(~int(Qt::ExtraButton3)); - break; - case 7: - m_buttons &= QFlag(~int(Qt::ExtraButton4)); - break; - case 8: - m_buttons &= QFlag(~int(Qt::ExtraButton5)); - break; - case 9: - m_buttons &= QFlag(~int(Qt::ExtraButton6)); - break; - case 10: - m_buttons &= QFlag(~int(Qt::ExtraButton7)); - break; - case 11: - m_buttons &= QFlag(~int(Qt::ExtraButton8)); - break; - case 12: - m_buttons &= QFlag(~int(Qt::ExtraButton9)); - break; - case 13: - m_buttons &= QFlag(~int(Qt::ExtraButton10)); - break; - case 14: - m_buttons &= QFlag(~int(Qt::ExtraButton11)); - break; - case 15: - m_buttons &= QFlag(~int(Qt::ExtraButton12)); - break; - case 16: - m_buttons &= QFlag(~int(Qt::ExtraButton13)); - break; - default: - m_buttons &= QFlag(~int(Qt::MiddleButton)); - break; - } + m_buttons &= ~cocoaButton2QtButton([theEvent buttonNumber]); [self handleMouseEvent:theEvent]; } @@ -1242,7 +1155,7 @@ static QTouchDevice *touchDevice = 0; // keep our state, and QGuiApplication state (buttons member) in-sync, // or future mouse events will be processed incorrectly - m_buttons &= QFlag(~int(Qt::LeftButton)); + m_buttons &= ~Qt::LeftButton; NSPoint windowPoint = [self convertPoint: point fromView: nil]; QPoint qtWindowPoint(windowPoint.x, windowPoint.y); -- cgit v1.2.3