diff options
author | Andy Shaw <andy.shaw@digia.com> | 2012-09-25 07:04:01 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-04 11:58:48 +0200 |
commit | 595deca5c909d99a8cd157b9fb6c82c64b1db1f5 (patch) | |
tree | a725366f91fac27c409270ce97cfe5365fec9613 /src | |
parent | 1fb3d849e426fafcd5af30ce8ee6a00a10891746 (diff) |
Update the window style when the modality changes on Cocoa
On Cocoa if the modality of a dialog changes then the style of the
window needs to change to reflect this. So we add a variable to
cache the windows modality when it is created to compare against when
being made visible.
Task-number: QTBUG-22316
Change-Id: I7bfd016321510a9ec70ccb90672f5203a0f3a468
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.h | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 20648e8c61..4a146767d5 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -157,6 +157,7 @@ public: // for QNSView NSWindow *m_nsWindow; Qt::WindowFlags m_windowFlags; Qt::WindowState m_synchedWindowState; + Qt::WindowModality m_windowModality; QPointer<QWindow> m_activePopupWindow; bool m_inConstructor; diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 1524c71f72..4902e31249 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -187,6 +187,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) : QPlatformWindow(tlw) , m_nsWindow(0) , m_synchedWindowState(Qt::WindowActive) + , m_windowModality(Qt::NonModal) , m_inConstructor(true) , m_glContext(0) , m_menubar(0) @@ -248,6 +249,9 @@ void QCocoaWindow::setVisible(bool visible) qDebug() << "QCocoaWindow::setVisible" << window() << visible; #endif if (visible) { + // We need to recreate if the modality has changed as the style mask will need updating + if (m_windowModality != window()->windowModality()) + recreateWindow(parent()); QCocoaWindow *parentCocoaWindow = 0; if (window()->transientParent()) { parentCocoaWindow = static_cast<QCocoaWindow *>(window()->transientParent()->handle()); @@ -359,6 +363,8 @@ NSUInteger QCocoaWindow::windowStyleMask(Qt::WindowFlags flags) Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint; if (flags == Qt::Window) { styleMask = (NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask); + } else if ((flags & Qt::Dialog) && (window()->windowModality() != Qt::NonModal)) { + styleMask = NSTitledWindowMask; } else if (!(flags & Qt::FramelessWindowHint)) { if (flags & Qt::WindowMaximizeButtonHint) styleMask |= NSResizableWindowMask; @@ -655,7 +661,7 @@ NSWindow * QCocoaWindow::createNSWindow() NSInteger level = windowLevel(flags); [createdWindow setLevel:level]; - + m_windowModality = window()->windowModality(); return createdWindow; } |