diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2012-03-28 09:21:15 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-30 12:19:27 +0200 |
commit | 5211d1786485bc42ca2b5ab4266883f6cb187463 (patch) | |
tree | 66beec81f505da8c32fa05293db9c2db3dd9d552 /src/plugins/platforms/cocoa | |
parent | 177a78b0357a985609dc45448c8679aa0b36d7dd (diff) |
Cocoa: set window levels when creating NSWindow/NSPanel
Port the QWidgetPrivate::setWindowLevel() function from Qt 4 so that we
get compatible window level behavior in Qt 5.
Change-Id: I67f036941f1e460be678b28e7079d36b1a6622ac
Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 310317cd15..de58842772 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -365,6 +365,30 @@ NSWindow * QCocoaWindow::createNSWindow() NSUInteger styleMask; NSWindow *createdWindow = 0; + NSInteger windowLevel = -1; + + if (type == Qt::Tool) { + windowLevel = NSFloatingWindowLevel; + } else if ((type & Qt::Popup) == Qt::Popup) { + // styleMask = NSBorderlessWindowMask; + windowLevel = NSPopUpMenuWindowLevel; + + // Popup should be in at least the same level as its parent. + const QWindow * const transientParent = window()->transientParent(); + const QCocoaWindow * const transientParentWindow = transientParent ? static_cast<QCocoaWindow *>(transientParent->handle()) : 0; + if (transientParentWindow) + windowLevel = qMax([transientParentWindow->m_nsWindow level], windowLevel); + } + + // StayOnTop window should appear above Tool windows. + if (flags & Qt::WindowStaysOnTopHint) + windowLevel = NSPopUpMenuWindowLevel; + // Tooltips should appear above StayOnTop windows. + if (type == Qt::ToolTip) + windowLevel = NSScreenSaverWindowLevel; + // All other types are Normal level. + if (windowLevel == -1) + windowLevel = NSNormalWindowLevel; // Use NSPanel for popup-type windows. (Popup, Tool, ToolTip, SplashScreen) if ((type & Qt::Popup) == Qt::Popup) { @@ -404,6 +428,9 @@ NSWindow * QCocoaWindow::createNSWindow() createdWindow = window; } + + [createdWindow setLevel:windowLevel]; + return createdWindow; } |