diff options
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaapplication.mm | 10 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm | 3 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 5 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.h | 6 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qnsview.mm | 2 |
5 files changed, 21 insertions, 5 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaapplication.mm b/src/plugins/platforms/cocoa/qcocoaapplication.mm index 551a59823c..bac76357da 100644 --- a/src/plugins/platforms/cocoa/qcocoaapplication.mm +++ b/src/plugins/platforms/cocoa/qcocoaapplication.mm @@ -189,6 +189,12 @@ QT_BEGIN_NAMESPACE void qt_redirectNSApplicationSendEvent() { + if (QCoreApplication::testAttribute(Qt::AA_MacPluginApplication)) + // In a plugin we cannot chain sendEvent hooks: a second plugin could + // store the implementation of the first, which during the program flow + // can be unloaded. + return; + if ([NSApp isMemberOfClass:[QNSApplication class]]) { // No need to change implementation since Qt // already controls a subclass of NSApplication @@ -209,6 +215,10 @@ void qt_redirectNSApplicationSendEvent() void qt_resetNSApplicationSendEvent() { + if (QCoreApplication::testAttribute(Qt::AA_MacPluginApplication)) + return; + + qt_cocoa_change_back_implementation([NSApplication class], @selector(sendEvent:), @selector(QT_MANGLE_NAMESPACE(qt_sendEvent_original):)); diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm index 92358ecc74..24ad75ceec 100644 --- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm +++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm @@ -163,6 +163,9 @@ static void cleanupCocoaApplicationDelegate() - (NSMenu *)applicationDockMenu:(NSApplication *)sender { Q_UNUSED(sender); + // Manually invoke the delegate's -menuWillOpen: method. + // See QTBUG-39604 (and its fix) for details. + [[dockMenu delegate] menuWillOpen:dockMenu]; return [[dockMenu retain] autorelease]; } diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index a89979a8ea..3d0201e1a0 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -463,9 +463,8 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, QPoint pos, const QPlatf // Else, we need to transform 'pos' to window or screen coordinates. NSPoint nsPos = NSMakePoint(pos.x() - 1, pos.y()); if (view) { - // Flip y-coordinate first, the convert to content view space. - nsPos.y = view.frame.size.height - nsPos.y; - nsPos = [view convertPoint:nsPos toView:view.window.contentView]; + // convert coordinates from view to the view's window + nsPos = [view convertPoint:nsPos toView:nil]; } else if (!QGuiApplication::screens().isEmpty()) { QScreen *screen = QGuiApplication::screens().at(0); nsPos.y = screen->availableVirtualSize().height() - nsPos.y; diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h index 5387f2a825..cbeecb987f 100644 --- a/src/plugins/platforms/cocoa/qnsview.h +++ b/src/plugins/platforms/cocoa/qnsview.h @@ -48,6 +48,8 @@ #include <QtGui/QImage> #include <QtGui/QAccessible> +#include "private/qcore_mac_p.h" + QT_BEGIN_NAMESPACE class QCocoaWindow; class QCocoaBackingStore; @@ -56,7 +58,7 @@ QT_END_NAMESPACE Q_FORWARD_DECLARE_OBJC_CLASS(QNSViewMouseMoveHelper); -@interface QNSView : NSView <NSTextInputClient> { +@interface QT_MANGLE_NAMESPACE(QNSView) : NSView <NSTextInputClient> { QCocoaBackingStore* m_backingStore; QPoint m_backingStoreOffset; CGImageRef m_maskImage; @@ -134,4 +136,6 @@ Q_FORWARD_DECLARE_OBJC_CLASS(QNSViewMouseMoveHelper); @end +QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSView); + #endif //QNSVIEW_H diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index a18ee7ff71..7ece5dcdf8 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -122,7 +122,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil; @end -@implementation QNSView +@implementation QT_MANGLE_NAMESPACE(QNSView) + (void)initialize { |