From 595deca5c909d99a8cd157b9fb6c82c64b1db1f5 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Tue, 25 Sep 2012 07:04:01 +0200 Subject: [PATCH] Update the window style when the modality changes on Cocoa MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/plugins/platforms/cocoa/qcocoawindow.h | 1 + src/plugins/platforms/cocoa/qcocoawindow.mm | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 20648e8..4a14676 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 m_activePopupWindow; bool m_inConstructor; diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 1524c71..4902e31 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(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; } -- 2.7.4