From 2432a821aa272e567ae20e04ef8588112c4400dc Mon Sep 17 00:00:00 2001 From: Christoph Schleifenbaum Date: Sat, 14 Mar 2015 15:51:53 +0100 Subject: [PATCH] Cocoa: Fix minimizing/zooming frameless windows. Use miniaturize instead of performMiniaturize when the window has no minimize button (even if frameless). Make sure the window is resizable before performing zoom. Even restore this, of course. Change-Id: I43217153b4d4fcec0ded4afcde3009817e01feba Task-number: QTBUG-32184 QTBUG-45339 Reviewed-by: Timur Pocheptsov Reviewed-by: Christoph Schleifenbaum Reviewed-by: Gabriel de Dietrich --- src/plugins/platforms/cocoa/qcocoawindow.mm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 0a7c6b573a..ec289aba99 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -1488,10 +1488,23 @@ void QCocoaWindow::syncWindowState(Qt::WindowState newState) } Qt::WindowState predictedState = newState; + if ((m_synchedWindowState & Qt::WindowMaximized) != (newState & Qt::WindowMaximized)) { + const int styleMask = [m_nsWindow styleMask]; + const bool usePerform = styleMask & NSResizableWindowMask; + [m_nsWindow setStyleMask:styleMask | NSResizableWindowMask]; + if (usePerform) + [m_nsWindow performZoom : m_nsWindow]; // toggles + else + [m_nsWindow zoom : m_nsWindow]; // toggles + [m_nsWindow setStyleMask:styleMask]; + } if ((m_synchedWindowState & Qt::WindowMinimized) != (newState & Qt::WindowMinimized)) { if (newState & Qt::WindowMinimized) { - [m_nsWindow performMiniaturize : m_nsWindow]; + if ([m_nsWindow styleMask] & NSMiniaturizableWindowMask) + [m_nsWindow performMiniaturize : m_nsWindow]; + else + [m_nsWindow miniaturize : m_nsWindow]; } else { [m_nsWindow deminiaturize : m_nsWindow]; }