+ if (!m_nsWindow)
+ return;
+ if ([m_nsWindow isVisible])
+ [m_nsWindow orderBack: m_nsWindow];
+}
+
+void QCocoaWindow::propagateSizeHints()
+{
+ QCocoaAutoReleasePool pool;
+ if (!m_nsWindow)
+ return;
+
+#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG
+ qDebug() << "QCocoaWindow::propagateSizeHints" << this;
+ qDebug() << " min/max " << window()->minimumSize() << window()->maximumSize();
+ qDebug() << "size increment" << window()->sizeIncrement();
+ qDebug() << " basesize" << window()->baseSize();
+ qDebug() << " geometry" << geometry();
+#endif
+
+ // Set the minimum content size.
+ const QSize minimumSize = window()->minimumSize();
+ if (!minimumSize.isValid()) // minimumSize is (-1, -1) when not set. Make that (0, 0) for Cocoa.
+ [m_nsWindow setContentMinSize : NSMakeSize(0.0, 0.0)];
+ [m_nsWindow setContentMinSize : NSMakeSize(minimumSize.width(), minimumSize.height())];
+
+ // Set the maximum content size.
+ const QSize maximumSize = window()->maximumSize();
+ [m_nsWindow setContentMaxSize : NSMakeSize(maximumSize.width(), maximumSize.height())];
+
+ // sizeIncrement is observed to take values of (-1, -1) and (0, 0) for windows that should be
+ // resizable and that have no specific size increment set. Cocoa expects (1.0, 1.0) in this case.
+ if (!window()->sizeIncrement().isEmpty())
+ [m_nsWindow setResizeIncrements : qt_mac_toNSSize(window()->sizeIncrement())];
+ else
+ [m_nsWindow setResizeIncrements : NSMakeSize(1.0, 1.0)];
+
+ QRect rect = geometry();
+ QSize baseSize = window()->baseSize();
+ if (!baseSize.isNull() && baseSize.isValid()) {
+ [m_nsWindow setFrame:NSMakeRect(rect.x(), rect.y(), baseSize.width(), baseSize.height()) display:YES];
+ }
+}
+
+void QCocoaWindow::setOpacity(qreal level)
+{
+ if (m_nsWindow)
+ [m_nsWindow setAlphaValue:level];
+}
+
+void QCocoaWindow::setMask(const QRegion ®ion)
+{
+ if (m_nsWindow) {
+ [m_nsWindow setOpaque:NO];
+ [m_nsWindow setBackgroundColor:[NSColor clearColor]];
+ }
+
+ [m_contentView setMaskRegion:®ion];
+}
+
+bool QCocoaWindow::setKeyboardGrabEnabled(bool grab)
+{
+ if (!m_nsWindow)
+ return false;
+
+ if (grab && ![m_nsWindow isKeyWindow])
+ [m_nsWindow makeKeyWindow];
+ else if (!grab && [m_nsWindow isKeyWindow])
+ [m_nsWindow resignKeyWindow];
+ return true;
+}
+
+bool QCocoaWindow::setMouseGrabEnabled(bool grab)
+{
+ if (!m_nsWindow)
+ return false;
+
+ if (grab && ![m_nsWindow isKeyWindow])
+ [m_nsWindow makeKeyWindow];
+ else if (!grab && [m_nsWindow isKeyWindow])
+ [m_nsWindow resignKeyWindow];
+ return true;