summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@digia.com>2012-09-25 07:04:01 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-04 11:58:48 +0200
commit595deca5c909d99a8cd157b9fb6c82c64b1db1f5 (patch)
treea725366f91fac27c409270ce97cfe5365fec9613 /src
parent1fb3d849e426fafcd5af30ce8ee6a00a10891746 (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.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm8
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;
}