diff options
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 17 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.mm | 5 |
3 files changed, 12 insertions, 12 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index ff3aeaeb11..a92f4e875c 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -48,6 +48,7 @@ #include "qcocoaapplication.h" #include "qcocoamenuloader.h" #include "qcocoawindow.h" +#import "qnsview.h" static inline QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *getMenuLoader() { @@ -313,18 +314,10 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, QPoint pos, const QPlatf NSPoint nsPos = NSMakePoint(pos.x(), pos.y()); [m_nativeMenu popUpMenuPositioningItem:nsItem atLocation:nsPos inView:view]; - // The call above blocks and swallows the mouse release event, so we send a - // synthetic one to bring back any QQuickMouseArea back to a more normal state. - NSEvent *releaseEvent = [NSEvent mouseEventWithType:NSLeftMouseUp - location:nsPos - modifierFlags:0 - timestamp:0 - windowNumber:view.window.windowNumber - context:[NSGraphicsContext currentContext] - eventNumber:0 - clickCount:0 - pressure:1.0]; - [view.window sendEvent:releaseEvent]; + // The call above blocks, and also swallows any mouse release event, + // so we need to clear any mouse button that triggered the menu popup. + if ([view isKindOfClass:[QNSView class]]) + [(QNSView *)view resetMouseButtons]; } QPlatformMenuItem *QCocoaMenu::menuItemAt(int position) const diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h index 8bccc2cf33..eec0cfe5f6 100644 --- a/src/plugins/platforms/cocoa/qnsview.h +++ b/src/plugins/platforms/cocoa/qnsview.h @@ -84,6 +84,8 @@ QT_END_NAMESPACE - (BOOL)acceptsFirstResponder; - (BOOL)becomeFirstResponder; +- (void)resetMouseButtons; + - (void)handleMouseEvent:(NSEvent *)theEvent; - (void)mouseDown:(NSEvent *)theEvent; - (void)mouseDragged:(NSEvent *)theEvent; diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 5d39dd2d9c..82fde6221d 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -398,6 +398,11 @@ static QTouchDevice *touchDevice = 0; } } +- (void)resetMouseButtons +{ + m_buttons = Qt::NoButton; +} + - (void)handleMouseEvent:(NSEvent *)theEvent { QPoint qtWindowPoint, qtScreenPoint; |