diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-05-17 00:30:12 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-05-17 00:30:12 (GMT) |
commit | bdbe09ad2c01ae11d10511b51f8d7a3dfb27b17c (patch) | |
tree | fbe4f71381c380f295a959fac6c5ce72a62ba20c /src/gui | |
parent | 6100e83f3cbf40199da3078c1954a4dc1f77cb8f (diff) | |
parent | 040ad2dc679ebfb3dec7685edf617fc57bb66ccf (diff) | |
download | Qt-bdbe09ad2c01ae11d10511b51f8d7a3dfb27b17c.zip Qt-bdbe09ad2c01ae11d10511b51f8d7a3dfb27b17c.tar.gz Qt-bdbe09ad2c01ae11d10511b51f8d7a3dfb27b17c.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1: (24 commits)
Empty commit to trigger a rebuild in the CI system
Use case-insensitive comparison for the "data" scheme in URLs
tst_bic: Fix building on Mac 64
Fix building of tst_QTcpSocket
Autotest: some improvements to timeout testing of tst_QTcpSocket
Revert "Optimized pixmapcache key generation for icons and styles"
Revert "More improvements to pixmap cache key generation"
More improvements to pixmap cache key generation
More 4.7 stuff.
Fix for autotest failure in qwidget::saveRestoreGeometry()
Optimized pixmapcache key generation for icons and styles
doc: Another upgrade of the top page and overviews.
Mac: restoreGeometry()
[Regression] Build failure on Mac Carbon
doc: Added some \briefs to how-to docs.
Some 4.7 changes.
Updated changelog.
Cherry pick fix for MOBILITY-932 from Qt Mobility.
Cherry pick fix for MOBILITY-962 from Qt Mobility.
Cherry pick fix for MOBILITY-828 from Qt Mobility.
...
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/kernel/qcocoawindowdelegate_mac.mm | 21 | ||||
-rw-r--r-- | src/gui/kernel/qt_mac_p.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwidget.cpp | 22 | ||||
-rw-r--r-- | src/gui/kernel/qwidget_p.h | 8 | ||||
-rw-r--r-- | src/gui/text/qtextdocument.cpp | 2 |
5 files changed, 51 insertions, 4 deletions
diff --git a/src/gui/kernel/qcocoawindowdelegate_mac.mm b/src/gui/kernel/qcocoawindowdelegate_mac.mm index 24498f8..2b9cf85 100644 --- a/src/gui/kernel/qcocoawindowdelegate_mac.mm +++ b/src/gui/kernel/qcocoawindowdelegate_mac.mm @@ -202,6 +202,11 @@ static void cleanupCocoaWindowDelegate() 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); @@ -305,9 +310,19 @@ static void cleanupCocoaWindowDelegate() 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; } diff --git a/src/gui/kernel/qt_mac_p.h b/src/gui/kernel/qt_mac_p.h index 3341ce1..ca9541a 100644 --- a/src/gui/kernel/qt_mac_p.h +++ b/src/gui/kernel/qt_mac_p.h @@ -57,7 +57,9 @@ #ifdef __OBJC__ #include <Cocoa/Cocoa.h> +#ifdef QT_MAC_USE_COCOA #include <objc/runtime.h> +#endif // QT_MAC_USE_COCOA #endif #include <CoreServices/CoreServices.h> diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 4a9fa94..1f2cd8c 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1581,6 +1581,11 @@ void QWidgetPrivate::createTLExtra() x->inTopLevelResize = false; x->inRepaint = false; x->embedded = 0; +#ifdef Q_WS_MAC +#ifdef QT_MAC_USE_COCOA + x->wasMaximized = false; +#endif // QT_MAC_USE_COCOA +#endif // Q_WS_MAC createTLSysExtra(); #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; @@ -6720,6 +6725,18 @@ void QWidget::setGeometry(const QRect &r) */ QByteArray QWidget::saveGeometry() const { +#ifdef QT_MAC_USE_COCOA + // We check if the window was maximized during this invocation. If so, we need to record the + // starting position as 0,0. + Q_D(const QWidget); + QRect newFramePosition = frameGeometry(); + QRect newNormalPosition = normalGeometry(); + if(d->topData()->wasMaximized && !(windowState() & Qt::WindowMaximized)) { + // Change the starting position + newFramePosition.moveTo(0, 0); + newNormalPosition.moveTo(0, 0); + } +#endif // QT_MAC_USE_COCOA QByteArray array; QDataStream stream(&array, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_4_0); @@ -6729,8 +6746,13 @@ QByteArray QWidget::saveGeometry() const stream << magicNumber << majorVersion << minorVersion +#ifdef QT_MAC_USE_COCOA + << newFramePosition + << newNormalPosition +#else << frameGeometry() << normalGeometry() +#endif // QT_MAC_USE_COCOA << qint32(QApplication::desktop()->screenNumber(this)) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen); diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index cad60b5..3f494d8 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -170,6 +170,14 @@ struct QTLWExtra { WindowGroupRef group; IconRef windowIcon; // the current window icon, if set with setWindowIcon_sys. quint32 savedWindowAttributesFromMaximized; // Saved attributes from when the calling updateMaximizeButton_sys() +#ifdef QT_MAC_USE_COCOA + // This value is just to make sure we maximize and restore to the right location, yet we allow apps to be maximized and + // manually resized. + // The name is misleading, since this is set when maximizing the window. It is a hint to saveGeometry(..) to record the + // starting position as 0,0 instead of the normal starting position. + bool wasMaximized; +#endif // QT_MAC_USE_COCOA + #elif defined(Q_WS_QWS) // <--------------------------------------------------------- QWS #ifndef QT_NO_QWS_MANAGER QWSManager *qwsManager; diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index afba678..c7a9756 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -1947,7 +1947,7 @@ QVariant QTextDocument::loadResource(int type, const QUrl &name) #endif // handle data: URLs - if (r.isNull() && name.scheme() == QLatin1String("data")) + if (r.isNull() && name.scheme().compare(QLatin1String("data"), Qt::CaseInsensitive) == 0) r = qDecodeDataUrl(name).second; // if resource was not loaded try to load it here |