src/gui/kernel/qcocoawindowdelegate_mac.mm
changeset 30 5dc02b23752f
parent 18 2f34d5167611
child 37 758a864f9613
equal deleted inserted replaced
29:b72c6db6890b 30:5dc02b23752f
   200     if (!(qwidget->windowState() & (Qt::WindowMaximized | Qt::WindowFullScreen)) && [window isZoomed]) {
   200     if (!(qwidget->windowState() & (Qt::WindowMaximized | Qt::WindowFullScreen)) && [window isZoomed]) {
   201         widgetData->window_state = widgetData->window_state | Qt::WindowMaximized;
   201         widgetData->window_state = widgetData->window_state | Qt::WindowMaximized;
   202         QWindowStateChangeEvent e(Qt::WindowStates(widgetData->window_state
   202         QWindowStateChangeEvent e(Qt::WindowStates(widgetData->window_state
   203                                                    & ~Qt::WindowMaximized));
   203                                                    & ~Qt::WindowMaximized));
   204         qt_sendSpontaneousEvent(qwidget, &e);
   204         qt_sendSpontaneousEvent(qwidget, &e);
       
   205     } else {
       
   206         widgetData->window_state = widgetData->window_state & ~Qt::WindowMaximized;
       
   207         QWindowStateChangeEvent e(Qt::WindowStates(widgetData->window_state
       
   208                                                    | Qt::WindowMaximized));
       
   209         qt_sendSpontaneousEvent(qwidget, &e);
   205     }
   210     }
   206     NSRect rect = [[window contentView] frame];
   211     NSRect rect = [[window contentView] frame];
   207     const QSize newSize(rect.size.width, rect.size.height);
   212     const QSize newSize(rect.size.width, rect.size.height);
   208     const QSize &oldSize = widgetData->crect.size();
   213     const QSize &oldSize = widgetData->crect.size();
   209     if (newSize != oldSize) {
   214     if (newSize != oldSize) {
   267 
   272 
   268 -(void)windowDidBecomeMain:(NSNotification*)notification
   273 -(void)windowDidBecomeMain:(NSNotification*)notification
   269 {
   274 {
   270     QWidget *qwidget = m_windowHash->value([notification object]);
   275     QWidget *qwidget = m_windowHash->value([notification object]);
   271     Q_ASSERT(qwidget);
   276     Q_ASSERT(qwidget);
   272     if (qwidget->isActiveWindow())
       
   273         return;  // Widget is already active, no need to go through re-activation.
       
   274 
       
   275     onApplicationWindowChangedActivation(qwidget, true);
   277     onApplicationWindowChangedActivation(qwidget, true);
   276 }
   278 }
   277 
   279 
   278 -(void)windowDidResignMain:(NSNotification*)notification
   280 -(void)windowDidResignMain:(NSNotification*)notification
   279 {
   281 {
   286 // tiny difference between main and key windows.
   288 // tiny difference between main and key windows.
   287 -(void)windowDidBecomeKey:(NSNotification*)notification
   289 -(void)windowDidBecomeKey:(NSNotification*)notification
   288 {
   290 {
   289     QWidget *qwidget = m_windowHash->value([notification object]);
   291     QWidget *qwidget = m_windowHash->value([notification object]);
   290     Q_ASSERT(qwidget);
   292     Q_ASSERT(qwidget);
   291     if (qwidget->isActiveWindow())
       
   292         return;  // Widget is already active, no need to go through re-activation
       
   293 
       
   294 
       
   295     onApplicationWindowChangedActivation(qwidget, true);
   293     onApplicationWindowChangedActivation(qwidget, true);
   296 }
   294 }
   297 
   295 
   298 -(void)windowDidResignKey:(NSNotification*)notification
   296 -(void)windowDidResignKey:(NSNotification*)notification
   299 {
   297 {
   310 - (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
   308 - (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
   311 {
   309 {
   312     Q_UNUSED(newFrame);
   310     Q_UNUSED(newFrame);
   313     // saving the current window geometry before the window is maximized
   311     // saving the current window geometry before the window is maximized
   314     QWidget *qwidget = m_windowHash->value(window);
   312     QWidget *qwidget = m_windowHash->value(window);
   315     if (qwidget->isWindow() && !(qwidget->windowState() & Qt::WindowMaximized)) {
   313     QWidgetPrivate *widgetPrivate = qt_widget_private(qwidget);
   316         QWidgetPrivate *widgetPrivate = qt_widget_private(qwidget);
   314     if (qwidget->isWindow()) {
   317         widgetPrivate->topData()->normalGeometry = qwidget->geometry();
   315         if(qwidget->windowState() & Qt::WindowMaximized) {
       
   316             // Restoring
       
   317             widgetPrivate->topData()->wasMaximized = false;
       
   318         } else {
       
   319             // Maximizing
       
   320             widgetPrivate->topData()->normalGeometry = qwidget->geometry();
       
   321             // If the window was maximized we need to update the coordinates since now it will start at 0,0.
       
   322             // We do this in a special field that is only used when not restoring but manually resizing the window.
       
   323             // Since the coordinates are fixed we just set a boolean flag.
       
   324             widgetPrivate->topData()->wasMaximized = true;
       
   325         }
   318     }
   326     }
   319     return YES;
   327     return YES;
   320 }
   328 }
   321 
   329 
   322 - (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)defaultFrame
   330 - (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)defaultFrame