src/gui/kernel/qcocoawindowdelegate_mac.mm
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 37 758a864f9613
--- a/src/gui/kernel/qcocoawindowdelegate_mac.mm	Wed Jun 23 19:07:03 2010 +0300
+++ b/src/gui/kernel/qcocoawindowdelegate_mac.mm	Tue Jul 06 15:10:48 2010 +0300
@@ -202,6 +202,11 @@
         QWindowStateChangeEvent e(Qt::WindowStates(widgetData->window_state
                                                    & ~Qt::WindowMaximized));
         qt_sendSpontaneousEvent(qwidget, &e);
+    } else {
+        widgetData->window_state = widgetData->window_state & ~Qt::WindowMaximized;
+        QWindowStateChangeEvent e(Qt::WindowStates(widgetData->window_state
+                                                   | Qt::WindowMaximized));
+        qt_sendSpontaneousEvent(qwidget, &e);
     }
     NSRect rect = [[window contentView] frame];
     const QSize newSize(rect.size.width, rect.size.height);
@@ -269,9 +274,6 @@
 {
     QWidget *qwidget = m_windowHash->value([notification object]);
     Q_ASSERT(qwidget);
-    if (qwidget->isActiveWindow())
-        return;  // Widget is already active, no need to go through re-activation.
-
     onApplicationWindowChangedActivation(qwidget, true);
 }
 
@@ -288,10 +290,6 @@
 {
     QWidget *qwidget = m_windowHash->value([notification object]);
     Q_ASSERT(qwidget);
-    if (qwidget->isActiveWindow())
-        return;  // Widget is already active, no need to go through re-activation
-
-
     onApplicationWindowChangedActivation(qwidget, true);
 }
 
@@ -312,9 +310,19 @@
     Q_UNUSED(newFrame);
     // saving the current window geometry before the window is maximized
     QWidget *qwidget = m_windowHash->value(window);
-    if (qwidget->isWindow() && !(qwidget->windowState() & Qt::WindowMaximized)) {
-        QWidgetPrivate *widgetPrivate = qt_widget_private(qwidget);
-        widgetPrivate->topData()->normalGeometry = qwidget->geometry();
+    QWidgetPrivate *widgetPrivate = qt_widget_private(qwidget);
+    if (qwidget->isWindow()) {
+        if(qwidget->windowState() & Qt::WindowMaximized) {
+            // Restoring
+            widgetPrivate->topData()->wasMaximized = false;
+        } else {
+            // Maximizing
+            widgetPrivate->topData()->normalGeometry = qwidget->geometry();
+            // If the window was maximized we need to update the coordinates since now it will start at 0,0.
+            // We do this in a special field that is only used when not restoring but manually resizing the window.
+            // Since the coordinates are fixed we just set a boolean flag.
+            widgetPrivate->topData()->wasMaximized = true;
+        }
     }
     return YES;
 }