summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoawindow.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 114efc3e92..2c4c06fdbc 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -1282,7 +1282,7 @@ void QCocoaWindow::windowDidEndLiveResize()
{
if (m_synchedWindowState == Qt::WindowMaximized && ![m_nsWindow isZoomed]) {
m_effectivelyMaximized = false;
- [qnsview_cast(m_view) notifyWindowStateChanged:Qt::WindowNoState];
+ handleWindowStateChanged(Qt::WindowNoState);
}
}
@@ -1320,22 +1320,22 @@ void QCocoaWindow::windowDidResignKey()
void QCocoaWindow::windowDidMiniaturize()
{
- [qnsview_cast(m_view) notifyWindowStateChanged:Qt::WindowMinimized];
+ handleWindowStateChanged(Qt::WindowMinimized);
}
void QCocoaWindow::windowDidDeminiaturize()
{
- [qnsview_cast(m_view) notifyWindowStateChanged:Qt::WindowNoState];
+ handleWindowStateChanged(Qt::WindowNoState);
}
void QCocoaWindow::windowDidEnterFullScreen()
{
- [qnsview_cast(m_view) notifyWindowStateChanged:Qt::WindowFullScreen];
+ handleWindowStateChanged(Qt::WindowFullScreen);
}
void QCocoaWindow::windowDidExitFullScreen()
{
- [qnsview_cast(m_view) notifyWindowStateChanged:Qt::WindowNoState];
+ handleWindowStateChanged(Qt::WindowNoState);
}
void QCocoaWindow::windowDidOrderOffScreen()
@@ -1399,12 +1399,6 @@ bool QCocoaWindow::windowShouldClose()
// --------------------------------------------------------------------------
-void QCocoaWindow::setSynchedWindowStateFromWindow()
-{
- if (QWindow *w = window())
- m_synchedWindowState = w->windowState();
-}
-
bool QCocoaWindow::windowIsPopupType(Qt::WindowType type) const
{
if (type == Qt::Widget)
@@ -1834,6 +1828,20 @@ void QCocoaWindow::syncWindowState(Qt::WindowState newState)
m_synchedWindowState = predictedState;
}
+void QCocoaWindow::handleWindowStateChanged(Qt::WindowState newState)
+{
+ // If the window was maximized, then fullscreen, then tried to go directly to "normal" state,
+ // this notification will say that it is "normal", but it will still look maximized, and
+ // if you called performZoom it would actually take it back to "normal".
+ // So we should say that it is maximized because it actually is.
+ if (newState == Qt::WindowNoState && m_effectivelyMaximized)
+ newState = Qt::WindowMaximized;
+
+ QWindowSystemInterface::handleWindowStateChanged<QWindowSystemInterface::SynchronousDelivery>(window(), newState);
+
+ m_synchedWindowState = window()->windowState();
+}
+
bool QCocoaWindow::setWindowModified(bool modified)
{
if (!m_nsWindow)