diff options
author | David Boddie <dboddie@trolltech.com> | 2010-01-15 16:11:09 (GMT) |
---|---|---|
committer | David Boddie <dboddie@trolltech.com> | 2010-01-15 16:11:09 (GMT) |
commit | 13240f5f0cdb08ec4dbb80482bd0d7d95cb6b530 (patch) | |
tree | c2dadf2c74e4e5b663d57cab23e096a56b5e9039 | |
parent | 51fe84689320f9443117196fec2ee25c6353b79b (diff) | |
parent | 7e22fb22acffe1d0f101a8ab3ef05a4ef7ad9b83 (diff) | |
download | Qt-13240f5f0cdb08ec4dbb80482bd0d7d95cb6b530.zip Qt-13240f5f0cdb08ec4dbb80482bd0d7d95cb6b530.tar.gz Qt-13240f5f0cdb08ec4dbb80482bd0d7d95cb6b530.tar.bz2 |
Merge branch '4.6' of git@scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.6
75 files changed, 1039 insertions, 1508 deletions
diff --git a/configure.exe b/configure.exe Binary files differindex a410efc..d88da13 100644 --- a/configure.exe +++ b/configure.exe diff --git a/dist/changes-4.6.1 b/dist/changes-4.6.1 index cfb82d2..6e95fd5 100644 --- a/dist/changes-4.6.1 +++ b/dist/changes-4.6.1 @@ -235,6 +235,8 @@ QtWebKit - Fixed wrapping of QObjects with recurring identity (webkit.org/b/31681) - Fixed compilation with ICC - Fixed assertion when dragging SVG images (webkit.org/b/32511) + - Fixed crash with ACID3 test on Symbian + - Fixed security issue XSL stylesheets and security origins. - Added the framecapture example to the default build (merge request 2235) QtScript diff --git a/doc/src/snippets/audio/main.cpp b/doc/src/snippets/audio/main.cpp index f000075..019f208 100644 --- a/doc/src/snippets/audio/main.cpp +++ b/doc/src/snippets/audio/main.cpp @@ -89,9 +89,9 @@ private: { //![1] QAudioFormat format; - format.setSampleRate(44100); + format.setFrequency(44100); //![1] - format.setChannelCount(2); + format.setChannels(2); format.setSampleSize(16); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); diff --git a/examples/multimedia/audiodevices/audiodevices.cpp b/examples/multimedia/audiodevices/audiodevices.cpp index 6373d57..7d09c38 100644 --- a/examples/multimedia/audiodevices/audiodevices.cpp +++ b/examples/multimedia/audiodevices/audiodevices.cpp @@ -96,8 +96,8 @@ void AudioTest::test() } else { QAudioFormat nearest = deviceInfo.nearestFormat(settings); logOutput->append(tr("Failed")); - nearestFreq->setText(QString("%1").arg(nearest.sampleRate())); - nearestChannel->setText(QString("%1").arg(nearest.channelCount())); + nearestFreq->setText(QString("%1").arg(nearest.frequency())); + nearestChannel->setText(QString("%1").arg(nearest.channels())); nearestCodec->setText(nearest.codec()); nearestSampleSize->setText(QString("%1").arg(nearest.sampleSize())); @@ -149,18 +149,18 @@ void AudioTest::deviceChanged(int idx) deviceInfo = deviceBox->itemData(idx).value<QAudioDeviceInfo>(); frequencyBox->clear(); - QList<int> freqz = deviceInfo.supportedSampleRates(); + QList<int> freqz = deviceInfo.supportedFrequencies(); for(int i = 0; i < freqz.size(); ++i) frequencyBox->addItem(QString("%1").arg(freqz.at(i))); if(freqz.size()) - settings.setSampleRate(freqz.at(0)); + settings.setFrequency(freqz.at(0)); channelsBox->clear(); - QList<int> chz = deviceInfo.supportedChannelCounts(); + QList<int> chz = deviceInfo.supportedChannels(); for(int i = 0; i < chz.size(); ++i) channelsBox->addItem(QString("%1").arg(chz.at(i))); if(chz.size()) - settings.setChannelCount(chz.at(0)); + settings.setChannels(chz.at(0)); codecsBox->clear(); QStringList codecz = deviceInfo.supportedCodecs(); @@ -217,12 +217,12 @@ void AudioTest::deviceChanged(int idx) void AudioTest::freqChanged(int idx) { // freq has changed - settings.setSampleRate(frequencyBox->itemText(idx).toInt()); + settings.setFrequency(frequencyBox->itemText(idx).toInt()); } void AudioTest::channelChanged(int idx) { - settings.setChannelCount(channelsBox->itemText(idx).toInt()); + settings.setChannels(channelsBox->itemText(idx).toInt()); } void AudioTest::codecChanged(int idx) diff --git a/examples/multimedia/audioinput/audioinput.cpp b/examples/multimedia/audioinput/audioinput.cpp index 86650da..8cc9948 100644 --- a/examples/multimedia/audioinput/audioinput.cpp +++ b/examples/multimedia/audioinput/audioinput.cpp @@ -198,8 +198,8 @@ InputTest::InputTest() pullMode = true; - format.setSampleRate(8000); - format.setChannelCount(1); + format.setFrequency(8000); + format.setChannels(1); format.setSampleSize(16); format.setSampleType(QAudioFormat::SignedInt); format.setByteOrder(QAudioFormat::LittleEndian); diff --git a/examples/multimedia/audiooutput/audiooutput.cpp b/examples/multimedia/audiooutput/audiooutput.cpp index 58dbbaf..0c57f4d 100644 --- a/examples/multimedia/audiooutput/audiooutput.cpp +++ b/examples/multimedia/audiooutput/audiooutput.cpp @@ -164,8 +164,8 @@ AudioTest::AudioTest() gen->start(); - settings.setSampleRate(SYSTEM_FREQ); - settings.setChannelCount(1); + settings.setFrequency(SYSTEM_FREQ); + settings.setChannels(1); settings.setSampleSize(16); settings.setCodec("audio/pcm"); settings.setByteOrder(QAudioFormat::LittleEndian); diff --git a/mkspecs/linux-g++-maemo/qmake.conf b/mkspecs/linux-g++-maemo/qmake.conf index b0f3ca3..38c26a6 100644 --- a/mkspecs/linux-g++-maemo/qmake.conf +++ b/mkspecs/linux-g++-maemo/qmake.conf @@ -29,5 +29,7 @@ QMAKE_CXXFLAGS_RELEASE += -g -fno-omit-frame-pointer -fno-optimize-sibling-call # Work round PowerVR SGX 1.3 driver bug with glScissor & FBOs: DEFINES += QT_GL_NO_SCISSOR_TEST +# Work round SGX 1.4 driver bug (text corrupted), modify glyph cache width: +DEFINES += QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH=1024 load(qt_config) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 4a01a89..7424d1d 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -2411,16 +2411,14 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT //qmake it if(!subtarget->profile.isEmpty()) { - QString out = out_directory + subtarget->makefile, - in = fileFixify(in_directory + subtarget->profile, in_directory); - if(in.startsWith(in_directory)) - in = in.mid(in_directory.length()); + QString out = subtarget->makefile; + QString in = fileFixify(in_directory + subtarget->profile, out_directory, QString(), FileFixifyAbsolute); if(out.startsWith(in_directory)) out = out.mid(in_directory.length()); t << mkfile << ": " << "\n\t"; if(!in_directory.isEmpty()) { - t << mkdir_p_asstring(in_directory) - << in_directory_cdin + t << mkdir_p_asstring(out_directory) + << out_directory_cdin << "$(QMAKE) " << in << buildArgs(in_directory) << " -o " << out << in_directory_cdout << endl; } else { @@ -2431,8 +2429,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT t << " FORCE"; t << "\n\t"; if(!in_directory.isEmpty()) { - t << mkdir_p_asstring(in_directory) - << in_directory_cdin + t << mkdir_p_asstring(out_directory) + << out_directory_cdin << "$(QMAKE) " << in << buildArgs(in_directory) << " -o " << out << in_directory_cdout << endl; } else { diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index bc6d661..4f33e22 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -8,4 +8,4 @@ The commit imported was from the and has the sha1 checksum - 8b9165d3bc84d1c8cc7df49a191cc3857b5530d4 + 8f6992f4e8f027818429d428393b08068eca9ffa diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 357b787..cd47982 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,12 @@ +2010-01-14 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Update Symbian .def symbol export files after private API additions. + + * symbian/bwins/QtWebKitu.def: + * symbian/eabi/QtWebKitu.def: + 2009-12-18 Joe Ligman <joseph.ligman@nokia.com> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def b/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def index e5631f8..086e986 100644 --- a/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def +++ b/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def @@ -620,4 +620,8 @@ EXPORTS ?staticMetaObject@QWebPage@@2UQMetaObject@@B @ 619 NONAME ; struct QMetaObject const QWebPage::staticMetaObject ?staticMetaObject@QWebView@@2UQMetaObject@@B @ 620 NONAME ; struct QMetaObject const QWebView::staticMetaObject ?attributeNames@QWebElement@@QBE?AVQStringList@@ABVQString@@@Z @ 621 NONAME ; class QStringList QWebElement::attributeNames(class QString const &) const + ?qt_networkAccessAllowed@@YAX_N@Z @ 622 NONAME ; void qt_networkAccessAllowed(bool) + ?qt_resumeActiveDOMObjects@@YAXPAVQWebFrame@@@Z @ 623 NONAME ; void qt_resumeActiveDOMObjects(class QWebFrame *) + ?qt_suspendActiveDOMObjects@@YAXPAVQWebFrame@@@Z @ 624 NONAME ; void qt_suspendActiveDOMObjects(class QWebFrame *) + ?qtwebkit_webframe_scrollRecursively@@YA_NPAVQWebFrame@@HH@Z @ 625 NONAME ; bool qtwebkit_webframe_scrollRecursively(class QWebFrame *, int, int) diff --git a/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def b/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def index 4aad884..5dd2e20 100644 --- a/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def +++ b/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def @@ -690,4 +690,8 @@ EXPORTS _ZThn8_N16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 689 NONAME _ZThn8_NK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 690 NONAME _ZNK11QWebElement14attributeNamesERK7QString @ 691 NONAME + _Z23qt_networkAccessAllowedb @ 692 NONAME + _Z25qt_resumeActiveDOMObjectsP9QWebFrame @ 693 NONAME + _Z26qt_suspendActiveDOMObjectsP9QWebFrame @ 694 NONAME + _Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index 6395cc7..4c7f3f0 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -643,6 +643,7 @@ QFile::remove() qWarning("QFile::remove: Empty or null file name"); return false; } + unsetError(); close(); if(error() == QFile::NoError) { if(fileEngine()->remove()) { diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 3d59463..21650bb 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -1222,12 +1222,6 @@ QFileDialog::ViewMode QFileDialog::viewMode() const void QFileDialog::setFileMode(QFileDialog::FileMode mode) { Q_D(QFileDialog); - if (d->nativeDialogInUse){ - d->model->setFilter(d->filterForMode(filter())); - d->setFilter_sys(); - return; - } - d->fileMode = mode; d->retranslateWindowTitle(); @@ -1263,6 +1257,11 @@ void QFileDialog::setFileMode(QFileDialog::FileMode mode) } } setLabelText(Accept, buttonText); + if (d->nativeDialogInUse){ + d->setFilter_sys(); + return; + } + d->qFileDialogUi->fileTypeCombo->setEnabled(!testOption(ShowDirsOnly)); d->_q_updateOkButton(); } @@ -1300,6 +1299,10 @@ void QFileDialog::setAcceptMode(QFileDialog::AcceptMode mode) d->qFileDialogUi->lookInCombo->setEditable(false); } d->retranslateWindowTitle(); +#if defined(Q_WS_MAC) + d->deleteNativeDialog_sys(); + setAttribute(Qt::WA_DontShowOnScreen, false); +#endif } /* diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm index db5c356..67daced 100644 --- a/src/gui/dialogs/qfiledialog_mac.mm +++ b/src/gui/dialogs/qfiledialog_mac.mm @@ -639,9 +639,16 @@ void QFileDialogPrivate::setFilter_sys() { #ifndef QT_MAC_USE_COCOA #else + Q_Q(QFileDialog); QMacCocoaAutoReleasePool pool; QNSOpenSavePanelDelegate *delegate = static_cast<QNSOpenSavePanelDelegate *>(mDelegate); *(delegate->mQDirFilter) = model->filter(); + delegate->mFileMode = fileMode; + [delegate->mSavePanel setTitle:qt_mac_QStringToNSString(q->windowTitle())]; + [delegate->mSavePanel setPrompt:[delegate strip:acceptLabel]]; + if (fileNameLabelExplicitlySat) + [delegate->mSavePanel setNameFieldLabel:[delegate strip:qFileDialogUi->fileNameLabel->text()]]; + [delegate updateProperties]; #endif } diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index 30892f2..d1b2e3f 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -58,6 +58,7 @@ #include <QtGui/qtextdocument.h> #include <QtGui/qapplication.h> #include <QtGui/qtextedit.h> +#include <QtGui/qtextbrowser.h> #include <QtGui/qmenu.h> #include "qdialog_p.h" #include <QtGui/qfont.h> @@ -188,8 +189,8 @@ public: bool autoAddOkButton; QAbstractButton *detectedEscapeButton; QLabel *informativeLabel; -#ifdef Q_OS_SYMBIAN - QTextEdit *textEdit; +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) + QTextBrowser *textBrowser; #endif QPointer<QObject> receiverToDisconnectOnClose; QByteArray memberToDisconnectOnClose; @@ -2462,12 +2463,12 @@ void QMessageBox::setInformativeText(const QString &text) #endif label->setWordWrap(true); QGridLayout *grid = static_cast<QGridLayout *>(layout()); -#ifdef Q_OS_SYMBIAN +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) label->hide(); - QTextEdit *textEdit = new QTextEdit(this); - textEdit->setReadOnly(true); - grid->addWidget(textEdit, 1, 1, 1, 1); - d->textEdit = textEdit; + QTextBrowser *textBrowser = new QTextBrowser(this); + textBrowser->setOpenExternalLinks(true); + grid->addWidget(textBrowser, 1, 1, 1, 1); + d->textBrowser = textBrowser; #else grid->addWidget(label, 1, 1, 1, 1); #endif @@ -2475,9 +2476,9 @@ void QMessageBox::setInformativeText(const QString &text) } d->informativeLabel->setText(text); -#ifdef Q_OS_SYMBIAN - //We need to put the informative label inside textEdit to enable scrolling of long texts. - d->textEdit->setText(d->informativeLabel->text()); +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) + //We need to put the informative label inside textBrowser to enable scrolling of long texts. + d->textBrowser->setText(d->informativeLabel->text()); #endif d->updateSize(); diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp index 90145fe..ad23df3 100644 --- a/src/gui/effects/qgraphicseffect.cpp +++ b/src/gui/effects/qgraphicseffect.cpp @@ -374,6 +374,11 @@ QGraphicsEffectSourcePrivate::~QGraphicsEffectSourcePrivate() invalidateCache(); } +void QGraphicsEffectSourcePrivate::setCachedOffset(const QPoint &offset) +{ + m_cachedOffset = offset; +} + void QGraphicsEffectSourcePrivate::invalidateCache(InvalidateReason reason) const { if (m_cachedMode != QGraphicsEffect::PadToEffectiveBoundingRect diff --git a/src/gui/effects/qgraphicseffect_p.h b/src/gui/effects/qgraphicseffect_p.h index 91ad74a..e34dbf9 100644 --- a/src/gui/effects/qgraphicseffect_p.h +++ b/src/gui/effects/qgraphicseffect_p.h @@ -129,8 +129,10 @@ public: QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToTransparentBorder) const = 0; virtual void effectBoundingRectChanged() = 0; + void setCachedOffset(const QPoint &offset); void invalidateCache(InvalidateReason reason = SourceChanged) const; Qt::CoordinateSystem currentCachedSystem() const { return m_cachedSystem; } + QGraphicsEffect::PixmapPadMode currentCachedMode() const { return m_cachedMode; } friend class QGraphicsScenePrivate; friend class QGraphicsItem; diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 168a9a3..cae9660 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -10715,27 +10715,18 @@ void QGraphicsItemEffectSourcePrivate::draw(QPainter *painter) } } -QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint *offset, - QGraphicsEffect::PixmapPadMode mode) const +QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const { - const bool deviceCoordinates = (system == Qt::DeviceCoordinates); - if (!info && deviceCoordinates) { - // Device coordinates without info not yet supported. - qWarning("QGraphicsEffectSource::pixmap: Not yet implemented, lacking device context"); - return QPixmap(); - } - if (!item->d_ptr->scene) - return QPixmap(); - QGraphicsScenePrivate *scened = item->d_ptr->scene->d_func(); - - const QRectF sourceRect = boundingRect(system); QRectF effectRectF; - bool unpadded = false; + if (unpadded) + *unpadded = false; + if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) { if (info) { effectRectF = item->graphicsEffect()->boundingRectFor(boundingRect(Qt::DeviceCoordinates)); - unpadded = (effectRectF.size() == sourceRect.size()); + if (unpadded) + *unpadded = (effectRectF.size() == sourceRect.size()); if (info && system == Qt::LogicalCoordinates) effectRectF = info->painter->worldTransform().inverted().mapRect(effectRectF); } else { @@ -10747,10 +10738,29 @@ QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QP effectRectF = sourceRect.adjusted(-1.5, -1.5, 1.5, 1.5); } else { effectRectF = sourceRect; - unpadded = true; + if (unpadded) + *unpadded = true; + } + + return effectRectF.toAlignedRect(); +} + +QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint *offset, + QGraphicsEffect::PixmapPadMode mode) const +{ + const bool deviceCoordinates = (system == Qt::DeviceCoordinates); + if (!info && deviceCoordinates) { + // Device coordinates without info not yet supported. + qWarning("QGraphicsEffectSource::pixmap: Not yet implemented, lacking device context"); + return QPixmap(); } + if (!item->d_ptr->scene) + return QPixmap(); + QGraphicsScenePrivate *scened = item->d_ptr->scene->d_func(); - QRect effectRect = effectRectF.toAlignedRect(); + bool unpadded; + const QRectF sourceRect = boundingRect(system); + QRect effectRect = paddedEffectRect(system, mode, sourceRect, &unpadded); if (offset) *offset = effectRect.topLeft(); diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index c8d2061..2d34b80 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -609,6 +609,7 @@ public: QPixmap pixmap(Qt::CoordinateSystem system, QPoint *offset, QGraphicsEffect::PixmapPadMode mode) const; + QRect paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const; QGraphicsItem *item; QGraphicsItemPaintInfo *info; diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 5c6a8ae..cea723c 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -4686,8 +4686,31 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter * if (sourced->currentCachedSystem() != Qt::LogicalCoordinates && sourced->lastEffectTransform != painter->worldTransform()) { + bool unclipped = false; + if (sourced->lastEffectTransform.type() <= QTransform::TxTranslate + && painter->worldTransform().type() <= QTransform::TxTranslate) + { + QRectF itemRect = item->boundingRect(); + if (!item->d_ptr->children.isEmpty()) + itemRect |= item->childrenBoundingRect(); + + QRectF oldSourceRect = sourced->lastEffectTransform.mapRect(itemRect); + QRectF newSourceRect = painter->worldTransform().mapRect(itemRect); + + QRect oldEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), oldSourceRect); + QRect newEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), newSourceRect); + + QRect deviceRect(0, 0, painter->device()->width(), painter->device()->height()); + if (deviceRect.contains(oldEffectRect) && deviceRect.contains(newEffectRect)) { + sourced->setCachedOffset(newEffectRect.topLeft()); + unclipped = true; + } + } + sourced->lastEffectTransform = painter->worldTransform(); - sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged); + + if (!unclipped) + sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged); } item->d_ptr->graphicsEffect->draw(painter); diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index 30fb7a3..37a6a18 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -953,7 +953,7 @@ static void grayscale(const QImage &image, QImage &dest, const QRect& rect = QRe srcRect = dest.rect(); destRect = dest.rect(); } - if (image != dest) { + if (&image != &dest) { destRect.moveTo(QPoint(0, 0)); } diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp index f289c7d..19b1e8c 100644 --- a/src/gui/itemviews/qlistview.cpp +++ b/src/gui/itemviews/qlistview.cpp @@ -2621,6 +2621,13 @@ bool QIconModeViewBase::filterDropEvent(QDropEvent *e) const QSize contents = contentsSize; QPoint offset(horizontalOffset(), verticalOffset()); QPoint end = e->pos() + offset; + if (qq->acceptDrops()) { + const Qt::ItemFlags dropableFlags = Qt::ItemIsDropEnabled|Qt::ItemIsEnabled; + const QVector<QModelIndex> &dropIndices = intersectingSet(QRect(end, QSize(1, 1))); + foreach (const QModelIndex &index, dropIndices) + if ((index.flags() & dropableFlags) == dropableFlags) + return false; + } QPoint start = dd->pressedPosition; QPoint delta = (dd->movement == QListView::Snap ? snapToGrid(end) - snapToGrid(start) : end - start); QList<QModelIndex> indexes = dd->selectionModel->selectedIndexes(); diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp index 058f226..4f2fffa 100644 --- a/src/gui/painting/qpaintengineex.cpp +++ b/src/gui/painting/qpaintengineex.cpp @@ -417,13 +417,6 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen) } else if (style == Qt::NoPen) { d->activeStroker = 0; } else { - // ### re-enable... - if (pen.isCosmetic()) { - d->dasher.setClipRect(d->exDeviceRect); - } else { - QRectF clipRect = state()->matrix.inverted().mapRect(QRectF(d->exDeviceRect)); - d->dasher.setClipRect(clipRect); - } d->dasher.setDashPattern(pen.dashPattern()); d->dasher.setDashOffset(pen.dashOffset()); d->activeStroker = &d->dasher; @@ -434,6 +427,15 @@ void QPaintEngineEx::stroke(const QVectorPath &path, const QPen &pen) return; } + if (pen.style() > Qt::SolidLine) { + if (pen.isCosmetic()) { + d->activeStroker->setClipRect(d->exDeviceRect); + } else { + QRectF clipRect = state()->matrix.inverted().mapRect(QRectF(d->exDeviceRect)); + d->activeStroker->setClipRect(clipRect); + } + } + const QPainterPath::ElementType *types = path.elements(); const qreal *points = path.points(); int pointCount = path.elementCount(); diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index abb9e1e..211f4ce 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -1377,7 +1377,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom else { gtkCachedPainter.paintFlatBox(gtkEntry, "entry_bg", contentRect, option->state & State_Enabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE, - GTK_SHADOW_NONE, gtkCombo->style, entryPath + QString::number(focus)); + GTK_SHADOW_NONE, gtkEntry->style, entryPath + QString::number(focus)); } gtkCachedPainter.paintShadow(gtkEntry, comboBox->editable ? "entry" : "frame", frameRect, frameState, diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 4c57dff..bbd35f1 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -1614,7 +1614,11 @@ bool QFont::operator==(const QFont &f) const && f.d->overline == d->overline && f.d->strikeOut == d->strikeOut && f.d->kerning == d->kerning - && f.d->capital == d->capital)); + && f.d->capital == d->capital + && f.d->letterSpacingIsAbsolute == d->letterSpacingIsAbsolute + && f.d->letterSpacing == d->letterSpacing + && f.d->wordSpacing == d->wordSpacing + )); } @@ -1648,6 +1652,10 @@ bool QFont::operator<(const QFont &f) const #endif // Q_WS_X11 if (f.d->capital != d->capital) return f.d->capital < d->capital; + if (f.d->letterSpacingIsAbsolute != d->letterSpacingIsAbsolute) return f.d->letterSpacingIsAbsolute < d->letterSpacingIsAbsolute; + if (f.d->letterSpacing != d->letterSpacing) return f.d->letterSpacing < d->letterSpacing; + if (f.d->wordSpacing != d->wordSpacing) return f.d->wordSpacing < d->wordSpacing; + int f1attrs = (f.d->underline << 3) + (f.d->overline << 2) + (f.d->strikeOut<<1) + f.d->kerning; int f2attrs = (d->underline << 3) + (d->overline << 2) + (d->strikeOut<<1) + d->kerning; return f1attrs < f2attrs; diff --git a/src/gui/widgets/qabstractspinbox.cpp b/src/gui/widgets/qabstractspinbox.cpp index 13e67e9..4a6235c 100644 --- a/src/gui/widgets/qabstractspinbox.cpp +++ b/src/gui/widgets/qabstractspinbox.cpp @@ -66,7 +66,7 @@ #endif #if defined(Q_OS_SYMBIAN) -#include <W32STD.H> +#include <w32std.h> #include <private/qt_s60_p.h> #endif diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index 070091a..414c2ed 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -510,10 +510,12 @@ void QLineControl::draw(QPainter *painter, const QPoint &offset, const QRect &cl o.format.setForeground(m_palette.brush(QPalette::HighlightedText)); } else { // mask selection - o.start = m_cursor; - o.length = 1; - o.format.setBackground(m_palette.brush(QPalette::Text)); - o.format.setForeground(m_palette.brush(QPalette::Window)); + if(!m_blinkPeriod || m_blinkStatus){ + o.start = m_cursor; + o.length = 1; + o.format.setBackground(m_palette.brush(QPalette::Text)); + o.format.setForeground(m_palette.brush(QPalette::Window)); + } } selections.append(o); } diff --git a/src/multimedia/audio/qaudio_mac.cpp b/src/multimedia/audio/qaudio_mac.cpp index 61a00ce..14fee8b 100644 --- a/src/multimedia/audio/qaudio_mac.cpp +++ b/src/multimedia/audio/qaudio_mac.cpp @@ -48,8 +48,8 @@ QT_BEGIN_NAMESPACE QDebug operator<<(QDebug dbg, const QAudioFormat& audioFormat) { dbg.nospace() << "QAudioFormat(" << - audioFormat.sampleRate() << "," << - audioFormat.channelCount() << "," << + audioFormat.frequency() << "," << + audioFormat.channels() << "," << audioFormat.sampleSize()<< "," << audioFormat.codec() << "," << audioFormat.byteOrder() << "," << @@ -64,8 +64,8 @@ QAudioFormat toQAudioFormat(AudioStreamBasicDescription const& sf) { QAudioFormat audioFormat; - audioFormat.setSampleRate(sf.mSampleRate); - audioFormat.setChannelCount(sf.mChannelsPerFrame); + audioFormat.setFrequency(sf.mSampleRate); + audioFormat.setChannels(sf.mChannelsPerFrame); audioFormat.setSampleSize(sf.mBitsPerChannel); audioFormat.setCodec(QString::fromLatin1("audio/pcm")); audioFormat.setByteOrder(sf.mFormatFlags & kLinearPCMFormatFlagIsBigEndian != 0 ? QAudioFormat::BigEndian : QAudioFormat::LittleEndian); @@ -84,9 +84,9 @@ AudioStreamBasicDescription toAudioStreamBasicDescription(QAudioFormat const& au AudioStreamBasicDescription sf; sf.mFormatFlags = kAudioFormatFlagIsPacked; - sf.mSampleRate = audioFormat.sampleRate(); + sf.mSampleRate = audioFormat.frequency(); sf.mFramesPerPacket = 1; - sf.mChannelsPerFrame = audioFormat.channelCount(); + sf.mChannelsPerFrame = audioFormat.channels(); sf.mBitsPerChannel = audioFormat.sampleSize(); sf.mBytesPerFrame = sf.mChannelsPerFrame * (sf.mBitsPerChannel / 8); sf.mBytesPerPacket = sf.mFramesPerPacket * sf.mBytesPerFrame; diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp index ca20eda..092efc5 100644 --- a/src/multimedia/audio/qaudiodeviceinfo.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo.cpp @@ -100,13 +100,13 @@ public: You can also query each device for the formats it supports. A format in this context is a set consisting of a specific byte - order, channel, codec, sample rate, sample size and sample type. A + order, channel, codec, frequency, sample rate, and sample type. A format is represented by the QAudioFormat class. The values supported by the the device for each of these parameters can be fetched with supportedByteOrders(), supportedChannels(), supportedCodecs(), - supportedSampleRates(), supportedSampleSizes(), and + supportedFrequencies(), supportedSampleSizes(), and supportedSampleTypes(). The combinations supported are dependent on the platform, audio plugins installed and the audio device capabilities. If you need a specific format, you can check if the device supports it with isFormatSupported(), or fetch a @@ -259,16 +259,7 @@ QStringList QAudioDeviceInfo::supportedCodecs() const } /*! - Returns a list of supported sample rates. -*/ - -QList<int> QAudioDeviceInfo::supportedSampleRates() const -{ - return supportedFrequencies(); -} - -/*! - \internal + Returns a list of supported frequencies. */ QList<int> QAudioDeviceInfo::supportedFrequencies() const @@ -277,16 +268,7 @@ QList<int> QAudioDeviceInfo::supportedFrequencies() const } /*! - Returns a list of supported channel counts. -*/ - -QList<int> QAudioDeviceInfo::supportedChannelCounts() const -{ - return supportedChannels(); -} - -/*! - \internal + Returns a list of supported channels. */ QList<int> QAudioDeviceInfo::supportedChannels() const diff --git a/src/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/audio/qaudiodeviceinfo.h index 1cc0731..62dc8a2 100644 --- a/src/multimedia/audio/qaudiodeviceinfo.h +++ b/src/multimedia/audio/qaudiodeviceinfo.h @@ -84,9 +84,7 @@ public: QStringList supportedCodecs() const; QList<int> supportedFrequencies() const; - QList<int> supportedSampleRates() const; QList<int> supportedChannels() const; - QList<int> supportedChannelCounts() const; QList<int> supportedSampleSizes() const; QList<QAudioFormat::Endian> supportedByteOrders() const; QList<QAudioFormat::SampleType> supportedSampleTypes() const; diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index a77a428..36270a7 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -78,20 +78,20 @@ QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const { QAudioFormat nearest; if(mode == QAudio::AudioOutput) { - nearest.setSampleRate(44100); - nearest.setChannelCount(2); + nearest.setFrequency(44100); + nearest.setChannels(2); nearest.setByteOrder(QAudioFormat::LittleEndian); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(16); nearest.setCodec(QLatin1String("audio/pcm")); } else { - nearest.setSampleRate(8000); - nearest.setChannelCount(1); + nearest.setFrequency(8000); + nearest.setChannels(1); nearest.setSampleType(QAudioFormat::UnSignedInt); nearest.setSampleSize(8); nearest.setCodec(QLatin1String("audio/pcm")); if(!testSettings(nearest)) { - nearest.setChannelCount(2); + nearest.setChannels(2); nearest.setSampleSize(16); nearest.setSampleType(QAudioFormat::SignedInt); } @@ -253,8 +253,8 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const snd_pcm_hw_params_any( handle, params ); // set the values! - snd_pcm_hw_params_set_channels(handle,params,format.channelCount()); - snd_pcm_hw_params_set_rate(handle,params,format.sampleRate(),dir); + snd_pcm_hw_params_set_channels(handle,params,format.channels()); + snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir); switch(format.sampleSize()) { case 8: if(format.sampleType() == QAudioFormat::SignedInt) @@ -295,18 +295,18 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const } else testCodec = true; - if(err>=0 && format.channelCount() != -1) { - err = snd_pcm_hw_params_test_channels(handle,params,format.channelCount()); + if(err>=0 && format.channels() != -1) { + err = snd_pcm_hw_params_test_channels(handle,params,format.channels()); if(err>=0) - err = snd_pcm_hw_params_set_channels(handle,params,format.channelCount()); + err = snd_pcm_hw_params_set_channels(handle,params,format.channels()); if(err>=0) testChannel = true; } - if(err>=0 && format.sampleRate() != -1) { - err = snd_pcm_hw_params_test_rate(handle,params,format.sampleRate(),0); + if(err>=0 && format.frequency() != -1) { + err = snd_pcm_hw_params_test_rate(handle,params,format.frequency(),0); if(err>=0) - err = snd_pcm_hw_params_set_rate(handle,params,format.sampleRate(),dir); + err = snd_pcm_hw_params_set_rate(handle,params,format.frequency(),dir); if(err>=0) testFreq = true; } diff --git a/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp index 9334069..ecd03e5 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_mac_p.cpp @@ -144,10 +144,10 @@ QAudioFormat QAudioDeviceInfoInternal::nearestFormat(const QAudioFormat& format) rc.setCodec(QString::fromLatin1("audio/pcm")); - if (rc.sampleRate() != target.sampleRate()) - rc.setSampleRate(target.sampleRate()); - if (rc.channelCount() != target.channelCount()) - rc.setChannelCount(target.channelCount()); + if (rc.frequency() != target.frequency()) + rc.setFrequency(target.frequency()); + if (rc.channels() != target.channels()) + rc.setChannels(target.channels()); if (rc.sampleSize() != target.sampleSize()) rc.setSampleSize(target.sampleSize()); if (rc.byteOrder() != target.byteOrder()) diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp index 373e23d..f6b8154 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp @@ -94,15 +94,15 @@ QAudioFormat QAudioDeviceInfoInternal::preferredFormat() const { QAudioFormat nearest; if(mode == QAudio::AudioOutput) { - nearest.setSampleRate(44100); - nearest.setChannelCount(2); + nearest.setFrequency(44100); + nearest.setChannels(2); nearest.setByteOrder(QAudioFormat::LittleEndian); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(16); nearest.setCodec(QLatin1String("audio/pcm")); } else { - nearest.setSampleRate(11025); - nearest.setChannelCount(1); + nearest.setFrequency(11025); + nearest.setChannels(1); nearest.setByteOrder(QAudioFormat::LittleEndian); nearest.setSampleType(QAudioFormat::SignedInt); nearest.setSampleSize(8); @@ -181,12 +181,12 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const if(!format.codec().startsWith(QLatin1String("audio/pcm"))) failed = true; - if(!failed && !(format.channelCount() == 1 || format.channelCount() == 2)) + if(!failed && !(format.channels() == 1 || format.channels() == 2)) failed = true; if(!failed) { - if(!(format.sampleRate() == 8000 || format.sampleRate() == 11025 || format.sampleRate() == 22050 || - format.sampleRate() == 44100 || format.sampleRate() == 48000 || format.sampleRate() == 96000)) + if(!(format.frequency() == 8000 || format.frequency() == 11025 || format.frequency() == 22050 || + format.frequency() == 44100 || format.frequency() == 48000 || format.frequency() == 96000)) failed = true; } diff --git a/src/multimedia/audio/qaudioformat.cpp b/src/multimedia/audio/qaudioformat.cpp index 58bb571..89ae0ff 100644 --- a/src/multimedia/audio/qaudioformat.cpp +++ b/src/multimedia/audio/qaudioformat.cpp @@ -144,7 +144,7 @@ public: Values are initialized as follows: \list \o frequency() = -1 - \o channelCount() = -1 + \o channels() = -1 \o sampleSize() = -1 \o byteOrder() = QAudioFormat::Endian(QSysInfo::ByteOrder) \o sampleType() = QAudioFormat::Unknown @@ -224,16 +224,7 @@ bool QAudioFormat::isValid() const } /*! - Sets the sample rate to \a samplerate Hertz. -*/ - -void QAudioFormat::setSampleRate(int samplerate) -{ - d->frequency = samplerate; -} - -/*! - \internal + Sets the frequency to \a frequency. */ void QAudioFormat::setFrequency(int frequency) @@ -242,16 +233,7 @@ void QAudioFormat::setFrequency(int frequency) } /*! - Returns the current sample rate in Hertz. -*/ - -int QAudioFormat::sampleRate() const -{ - return d->frequency; -} - -/*! - \internal + Returns the current frequency value. */ int QAudioFormat::frequency() const @@ -260,16 +242,7 @@ int QAudioFormat::frequency() const } /*! - Sets the channel count to \a channels. -*/ - -void QAudioFormat::setChannelCount(int channels) -{ - d->channels = channels; -} - -/*! - \internal + Sets the channels to \a channels. */ void QAudioFormat::setChannels(int channels) @@ -278,16 +251,7 @@ void QAudioFormat::setChannels(int channels) } /*! - Returns the current channel count value. -*/ - -int QAudioFormat::channelCount() const -{ - return d->channels; -} - -/*! - \internal + Returns the current channel value. */ int QAudioFormat::channels() const diff --git a/src/multimedia/audio/qaudioformat.h b/src/multimedia/audio/qaudioformat.h index b255907..cb58d1c 100644 --- a/src/multimedia/audio/qaudioformat.h +++ b/src/multimedia/audio/qaudioformat.h @@ -76,12 +76,6 @@ public: void setFrequency(int frequency); int frequency() const; - void setSampleRate(int samplerate); - int sampleRate() const; - - void setChannelCount(int channels); - int channelCount() const; - void setChannels(int channels); int channels() const; diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp index da39c4a..45cafc1 100644 --- a/src/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/audio/qaudioinput.cpp @@ -88,8 +88,8 @@ QT_BEGIN_NAMESPACE QAudioFormat format; // set up the format you want, eg. - format.setSampleRate(8000); - format.setChannelCount(1); + format.setFrequency(8000); + format.setChannels(1); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index ea68c8d6..26e46b3 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -256,7 +256,7 @@ bool QAudioInputPrivate::open() int dir; int err=-1; int count=0; - unsigned int freakuency=settings.sampleRate(); + unsigned int freakuency=settings.frequency(); QString dev = QString(QLatin1String(m_device.constData())); QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput); @@ -332,7 +332,7 @@ bool QAudioInputPrivate::open() } } if ( !fatal ) { - err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channelCount() ); + err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() ); if ( err < 0 ) { fatal = true; errMessage = QString::fromLatin1("QAudioInput: snd_pcm_hw_params_set_channels: err = %1").arg(err); @@ -505,7 +505,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) errorState = QAudio::NoError; deviceState = QAudio::IdleState; } else { - totalTimeValue += snd_pcm_bytes_to_frames(handle, err)*1000000/settings.sampleRate(); + totalTimeValue += snd_pcm_bytes_to_frames(handle, err)*1000000/settings.frequency(); resuming = false; errorState = QAudio::NoError; deviceState = QAudio::ActiveState; @@ -702,7 +702,7 @@ qint64 InputPrivate::readData( char* data, qint64 len) count++; } if(err > 0 && readFrames > 0) { - audioDevice->totalTimeValue += readFrames*1000/audioDevice->settings.sampleRate()*1000; + audioDevice->totalTimeValue += readFrames*1000/audioDevice->settings.frequency()*1000; audioDevice->deviceState = QAudio::ActiveState; return err; } diff --git a/src/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/audio/qaudioinput_mac_p.cpp index f5be8ee..7251513 100644 --- a/src/multimedia/audio/qaudioinput_mac_p.cpp +++ b/src/multimedia/audio/qaudioinput_mac_p.cpp @@ -814,7 +814,7 @@ int QAudioInputPrivate::notifyInterval() const qint64 QAudioInputPrivate::processedUSecs() const { - return totalFrames * 1000000 / audioFormat.sampleRate(); + return totalFrames * 1000000 / audioFormat.frequency(); } qint64 QAudioInputPrivate::elapsedUSecs() const diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp index 5c597ef..17e8bfb 100644 --- a/src/multimedia/audio/qaudioinput_win32_p.cpp +++ b/src/multimedia/audio/qaudioinput_win32_p.cpp @@ -225,16 +225,16 @@ bool QAudioInputPrivate::open() header = 0; if(buffer_size == 0) { // Default buffer size, 100ms, default period size is 20ms - buffer_size = settings.sampleRate()*settings.channelCount()*(settings.sampleSize()/8)*0.1; + buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.1; period_size = buffer_size/5; } else { period_size = buffer_size/5; } timeStamp.restart(); elapsedTimeOffset = 0; - wfx.nSamplesPerSec = settings.sampleRate(); + wfx.nSamplesPerSec = settings.frequency(); wfx.wBitsPerSample = settings.sampleSize(); - wfx.nChannels = settings.channelCount(); + wfx.nChannels = settings.channels(); wfx.cbSize = 0; wfx.wFormatTag = WAVE_FORMAT_PCM; @@ -374,8 +374,8 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) } else { totalTimeValue += waveBlocks[header].dwBytesRecorded - /((settings.channelCount()*settings.sampleSize()/8)) - *10000/settings.sampleRate()*100; + /((settings.channels()*settings.sampleSize()/8)) + *10000/settings.frequency()*100; errorState = QAudio::NoError; deviceState = QAudio::ActiveState; resuming = false; @@ -388,8 +388,8 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l; #endif totalTimeValue += waveBlocks[header].dwBytesRecorded - /((settings.channelCount()*settings.sampleSize()/8)) - *10000/settings.sampleRate()*100; + /((settings.channels()*settings.sampleSize()/8)) + *10000/settings.frequency()*100; errorState = QAudio::NoError; deviceState = QAudio::ActiveState; resuming = false; diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp index b61aa4f..afd8a84 100644 --- a/src/multimedia/audio/qaudiooutput.cpp +++ b/src/multimedia/audio/qaudiooutput.cpp @@ -83,8 +83,8 @@ QT_BEGIN_NAMESPACE QAudioFormat format; // Set up the format, eg. - format.setSampleRate(8000); - format.setChannelCount(1); + format.setFrequency(8000); + format.setChannels(1); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index 43b65ec..7b89cef 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -279,7 +279,7 @@ bool QAudioOutputPrivate::open() int dir; int err=-1; int count=0; - unsigned int freakuency=settings.sampleRate(); + unsigned int freakuency=settings.frequency(); QString dev = QLatin1String(m_device.constData()); QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput); @@ -354,7 +354,7 @@ bool QAudioOutputPrivate::open() } } if ( !fatal ) { - err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channelCount() ); + err = snd_pcm_hw_params_set_channels( handle, hwparams, (unsigned int)settings.channels() ); if ( err < 0 ) { fatal = true; errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_channels: err = %1").arg(err); @@ -494,7 +494,7 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) err = snd_pcm_writei( handle, data, frames ); } if(err > 0) { - totalTimeValue += err*1000000/settings.sampleRate(); + totalTimeValue += err*1000000/settings.frequency(); resuming = false; errorState = QAudio::NoError; deviceState = QAudio::ActiveState; diff --git a/src/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/audio/qaudiooutput_mac_p.cpp index 4367ee7..518f78f 100644 --- a/src/multimedia/audio/qaudiooutput_mac_p.cpp +++ b/src/multimedia/audio/qaudiooutput_mac_p.cpp @@ -87,8 +87,8 @@ public: m_device(0) { m_buffer = new QAudioRingBuffer(bufferSize + (bufferSize % maxPeriodSize == 0 ? 0 : maxPeriodSize - (bufferSize % maxPeriodSize))); - m_bytesPerFrame = (audioFormat.sampleSize() / 8) * audioFormat.channelCount(); - m_periodTime = m_maxPeriodSize / m_bytesPerFrame * 1000 / audioFormat.sampleRate(); + m_bytesPerFrame = (audioFormat.sampleSize() / 8) * audioFormat.channels(); + m_periodTime = m_maxPeriodSize / m_bytesPerFrame * 1000 / audioFormat.frequency(); m_fillTimer = new QTimer(this); connect(m_fillTimer, SIGNAL(timeout()), SLOT(fillBuffer())); @@ -546,7 +546,7 @@ int QAudioOutputPrivate::notifyInterval() const qint64 QAudioOutputPrivate::processedUSecs() const { - return totalFrames * 1000000 / audioFormat.sampleRate(); + return totalFrames * 1000000 / audioFormat.frequency(); } qint64 QAudioOutputPrivate::elapsedUSecs() const diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp index b6e9762..c31e048 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp @@ -213,7 +213,7 @@ bool QAudioOutputPrivate::open() #endif if(buffer_size == 0) { // Default buffer size, 200ms, default period size is 40ms - buffer_size = settings.sampleRate()*settings.channelCount()*(settings.sampleSize()/8)*0.2; + buffer_size = settings.frequency()*settings.channels()*(settings.sampleSize()/8)*0.2; period_size = buffer_size/5; } else { period_size = buffer_size/5; @@ -232,9 +232,9 @@ bool QAudioOutputPrivate::open() timeStamp.restart(); elapsedTimeOffset = 0; - wfx.nSamplesPerSec = settings.sampleRate(); + wfx.nSamplesPerSec = settings.frequency(); wfx.wBitsPerSample = settings.sampleSize(); - wfx.nChannels = settings.channelCount(); + wfx.nChannels = settings.channels(); wfx.cbSize = 0; wfx.wFormatTag = WAVE_FORMAT_PCM; @@ -289,8 +289,8 @@ void QAudioOutputPrivate::close() return; deviceState = QAudio::StoppedState; - int delay = (buffer_size-bytesFree())*1000/(settings.sampleRate() - *settings.channelCount()*(settings.sampleSize()/8)); + int delay = (buffer_size-bytesFree())*1000/(settings.frequency() + *settings.channels()*(settings.sampleSize()/8)); waveOutReset(hWaveOut); Sleep(delay+10); @@ -386,8 +386,8 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) LeaveCriticalSection(&waveOutCriticalSection); #endif totalTimeValue += current->dwBufferLength - /(settings.channelCount()*(settings.sampleSize()/8)) - *1000000/settings.sampleRate();; + /(settings.channels()*(settings.sampleSize()/8)) + *1000000/settings.frequency();; waveCurrentBlock++; waveCurrentBlock %= buffer_size/period_size; current = &waveBlocks[waveCurrentBlock]; diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 39d09aa..1955dba 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -260,7 +260,7 @@ bool QHttpNetworkConnectionChannel::sendRequest() // ensure we try to receive a reply in all cases, even if _q_readyRead_ hat not been called // this is needed if the sends an reply before we have finished sending the request. In that // case receiveReply had been called before but ignored the server reply - QMetaObject::invokeMethod(connection, "_q_receiveReply", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, "_q_receiveReply", Qt::QueuedConnection); break; } case QHttpNetworkConnectionChannel::ReadingState: diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index a262ded..3f32cf3 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -124,9 +124,6 @@ public: }; Q_GLOBAL_STATIC(QGLDefaultOverlayFormat, defaultOverlayFormatInstance) -QGLExtensions::Extensions QGLExtensions::glExtensions = 0; -bool QGLExtensions::nvidiaFboNeedsFinish = false; - Q_GLOBAL_STATIC(QGLSignalProxy, theSignalProxy) QGLSignalProxy *QGLSignalProxy::instance() { @@ -154,11 +151,9 @@ public: // falling back to the GL 1 engine.. static bool mac_x1600_check_done = false; if (!mac_x1600_check_done) { - QGLWidget *tmp = 0; - if (!QGLContext::currentContext()) { - tmp = new QGLWidget(); - tmp->makeCurrent(); - } + QGLTemporaryContext *tmp = 0; + if (!QGLContext::currentContext()) + tmp = new QGLTemporaryContext(); if (strstr((char *) glGetString(GL_RENDERER), "X1600")) engineType = QPaintEngine::OpenGL; if (tmp) @@ -178,7 +173,7 @@ public: // from an old GL 1.1 server to a GL 2.x client. In that case we can't // use GL 2.0. if ((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) - && (QGLExtensions::glExtensions & QGLExtensions::FragmentShader) + && (QGLExtensions::glExtensions() & QGLExtensions::FragmentShader) && qgetenv("QT_GL_USE_OPENGL1ENGINE").isEmpty()) engineType = QPaintEngine::OpenGL2; else @@ -1250,7 +1245,7 @@ QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags() static bool cachedDefault = false; static OpenGLVersionFlags defaultVersionFlags = OpenGL_Version_None; QGLContext *currentCtx = const_cast<QGLContext *>(QGLContext::currentContext()); - QGLWidget *dummy = 0; + QGLTemporaryContext *tmpContext = 0; if (currentCtx && currentCtx->d_func()->version_flags_cached) return currentCtx->d_func()->version_flags; @@ -1261,8 +1256,7 @@ QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags() } else { if (!hasOpenGL()) return defaultVersionFlags; - dummy = new QGLWidget; - dummy->makeCurrent(); // glGetString() needs a current context + tmpContext = new QGLTemporaryContext; cachedDefault = true; } } @@ -1273,9 +1267,9 @@ QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags() currentCtx->d_func()->version_flags_cached = true; currentCtx->d_func()->version_flags = versionFlags; } - if (dummy) { + if (tmpContext) { defaultVersionFlags = versionFlags; - delete dummy; + delete tmpContext; } return versionFlags; @@ -1493,6 +1487,8 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) max_texture_size = -1; version_flags_cached = false; version_flags = QGLFormat::OpenGL_Version_None; + extension_flags_cached = false; + extension_flags = 0; current_fbo = 0; default_fbo = 0; active_engine = 0; @@ -2147,7 +2143,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G int tx_h = qt_next_power_of_two(image.height()); QImage img = image; - if (!(QGLExtensions::glExtensions & QGLExtensions::NPOTTextures) + if (!(QGLExtensions::glExtensions() & QGLExtensions::NPOTTextures) && !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0) && (target == GL_TEXTURE_2D && (tx_w != image.width() || tx_h != image.height()))) { @@ -2169,7 +2165,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G bool genMipmap = false; #endif if (glFormat.directRendering() - && (QGLExtensions::glExtensions & QGLExtensions::GenerateMipmap) + && (QGLExtensions::glExtensions() & QGLExtensions::GenerateMipmap) && target == GL_TEXTURE_2D && (options & QGLContext::MipmapBindOption)) { @@ -2197,9 +2193,12 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G bool premul = options & QGLContext::PremultipliedAlphaBindOption; GLenum externalFormat; GLuint pixel_type; - if (QGLExtensions::glExtensions & QGLExtensions::BGRATextureFormat) { + if (QGLExtensions::glExtensions() & QGLExtensions::BGRATextureFormat) { externalFormat = GL_BGRA; - pixel_type = GL_UNSIGNED_INT_8_8_8_8_REV; + if (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_2) + pixel_type = GL_UNSIGNED_INT_8_8_8_8_REV; + else + pixel_type = GL_UNSIGNED_BYTE; } else { externalFormat = GL_RGBA; pixel_type = GL_UNSIGNED_BYTE; @@ -2278,12 +2277,9 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G qgl_byteSwapImage(img, pixel_type); } #ifdef QT_OPENGL_ES - // OpenGL/ES requires that the internal and external formats be identical. - // This is typically used to convert GL_RGBA into GL_BGRA. - // Also, we need to use GL_UNSIGNED_BYTE when the format is GL_BGRA. + // OpenGL/ES requires that the internal and external formats be + // identical. internalFormat = externalFormat; - if (pixel_type == GL_UNSIGNED_INT_8_8_8_8_REV) - pixel_type = GL_UNSIGNED_BYTE; #endif #ifdef QGL_BIND_TEXTURE_DEBUG printf(" - uploading, image.format=%d, externalFormat=0x%x, internalFormat=0x%x, pixel_type=0x%x\n", @@ -4868,9 +4864,13 @@ QGLWidget::QGLWidget(QGLContext *context, QWidget *parent, #endif // QT3_SUPPORT -void QGLExtensions::init_extensions() +/* + Returns the GL extensions for the current context. +*/ +QGLExtensions::Extensions QGLExtensions::currentContextExtensions() { QGLExtensionMatcher extensions(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS))); + Extensions glExtensions; if (extensions.match("GL_ARB_texture_rectangle")) glExtensions |= TextureRectangle; @@ -4931,6 +4931,46 @@ void QGLExtensions::init_extensions() if (extensions.match("GL_EXT_bgra")) glExtensions |= BGRATextureFormat; + + return glExtensions; +} + +/* + Returns the GL extensions for the current QGLContext. If there is no + current QGLContext, a default context will be created and the extensions + for that context will be returned instead. +*/ +QGLExtensions::Extensions QGLExtensions::glExtensions() +{ + QGLTemporaryContext *tmpContext = 0; + static bool cachedDefault = false; + static Extensions defaultExtensions = 0; + QGLContext *currentCtx = const_cast<QGLContext *>(QGLContext::currentContext()); + + if (currentCtx && currentCtx->d_func()->extension_flags_cached) + return currentCtx->d_func()->extension_flags; + + if (!currentCtx) { + if (cachedDefault) { + return defaultExtensions; + } else { + tmpContext = new QGLTemporaryContext; + cachedDefault = true; + } + } + + Extensions extensionFlags = currentContextExtensions(); + if (currentCtx) { + currentCtx->d_func()->extension_flags_cached = true; + currentCtx->d_func()->extension_flags = extensionFlags; + } else { + defaultExtensions = extensionFlags; + } + + if (tmpContext) + delete tmpContext; + + return extensionFlags; } /* @@ -4942,7 +4982,6 @@ void QGLWidgetPrivate::initContext(QGLContext *context, const QGLWidget* shareWi glDevice.setWidget(q); - QGLExtensions::init(); glcx = 0; autoSwap = true; @@ -5191,7 +5230,7 @@ QSize QGLTexture::bindCompressedTexture } #if !defined(QT_OPENGL_ES) if (!glCompressedTexImage2D) { - if (!(QGLExtensions::glExtensions & QGLExtensions::TextureCompression)) { + if (!(QGLExtensions::glExtensions() & QGLExtensions::TextureCompression)) { qWarning("QGLContext::bindTexture(): The GL implementation does " "not support texture compression extensions."); return QSize(); @@ -5230,7 +5269,7 @@ QSize QGLTexture::bindCompressedTextureDDS(const char *buf, int len) return QSize(); // Bail out if the necessary extension is not present. - if (!(QGLExtensions::glExtensions & QGLExtensions::DDSTextureCompression)) { + if (!(QGLExtensions::glExtensions() & QGLExtensions::DDSTextureCompression)) { qWarning("QGLContext::bindTexture(): DDS texture compression is not supported."); return QSize(); } @@ -5340,13 +5379,13 @@ QSize QGLTexture::bindCompressedTexturePVR(const char *buf, int len) // Bail out if the necessary extension is not present. if (textureFormat == GL_ETC1_RGB8_OES) { - if (!(QGLExtensions::glExtensions & + if (!(QGLExtensions::glExtensions() & QGLExtensions::ETC1TextureCompression)) { qWarning("QGLContext::bindTexture(): ETC1 texture compression is not supported."); return QSize(); } } else { - if (!(QGLExtensions::glExtensions & + if (!(QGLExtensions::glExtensions() & QGLExtensions::PVRTCTextureCompression)) { qWarning("QGLContext::bindTexture(): PVRTC texture compression is not supported."); return QSize(); diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index 374c6d6..1a04ff9 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -401,6 +401,7 @@ private: friend class QGLContextGroup; friend class QGLSharedResourceGuard; friend class QGLPixmapBlurFilter; + friend class QGLExtensions; friend QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags(); #ifdef Q_WS_MAC public: diff --git a/src/opengl/qgl_mac.mm b/src/opengl/qgl_mac.mm index 6ed07e5..c01575b 100644 --- a/src/opengl/qgl_mac.mm +++ b/src/opengl/qgl_mac.mm @@ -116,6 +116,68 @@ extern void qt_mac_dispose_rgn(RgnHandle); //qregion_mac.cpp extern QRegion qt_mac_convert_mac_region(RgnHandle); //qregion_mac.cpp extern void qt_mac_to_pascal_string(QString s, Str255 str, TextEncoding encoding=0, int len=-1); //qglobal.cpp +/* + QGLTemporaryContext implementation +*/ + +class QGLTemporaryContextPrivate +{ +public: +#ifndef QT_MAC_USE_COCOA + AGLContext ctx; +#else + NSOpenGLContext *ctx; +#endif +}; + +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->ctx = 0; +#ifndef QT_MAC_USE_COCOA + GLint attribs[] = {AGL_RGBA, AGL_NONE}; + AGLPixelFormat fmt = aglChoosePixelFormat(0, 0, attribs); + if (!fmt) { + qDebug("QGLTemporaryContext: Couldn't find any RGB visuals"); + return; + } + d->ctx = aglCreateContext(fmt, 0); + if (!d->ctx) + qDebug("QGLTemporaryContext: Unable to create context"); + else + aglSetCurrentContext(d->ctx); + aglDestroyPixelFormat(fmt); +#else + QMacCocoaAutoReleasePool pool; + NSOpenGLPixelFormatAttribute attribs[] = { 0 }; + NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs]; + if (!fmt) { + qWarning("QGLTemporaryContext: Cannot find any visuals"); + return; + } + + d->ctx = [[NSOpenGLContext alloc] initWithFormat:fmt shareContext:0]; + if (!d->ctx) + qWarning("QGLTemporaryContext: Cannot create context"); + else + [d->ctx makeCurrentContext]; + [fmt release]; +#endif +} + +QGLTemporaryContext::~QGLTemporaryContext() +{ + if (d->ctx) { +#ifndef QT_MAC_USE_COCOA + aglSetCurrentContext(0); + aglDestroyContext(d->ctx); +#else + [NSOpenGLContext clearCurrentContext]; + [d->ctx release]; +#endif + } +} + bool QGLFormat::hasOpenGL() { return true; @@ -918,54 +980,6 @@ void QGLWidgetPrivate::updatePaintDevice() q->update(); } - -void QGLExtensions::init() -{ - static bool init_done = false; - - if (init_done) - return; - init_done = true; - -#ifndef QT_MAC_USE_COCOA - GLint attribs[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat fmt = aglChoosePixelFormat(0, 0, attribs); - if (!fmt) { - qDebug("QGLExtensions: Couldn't find any RGB visuals"); - return; - } - AGLContext ctx = aglCreateContext(fmt, 0); - if (!ctx) { - qDebug("QGLExtensions: Unable to create context"); - } else { - aglSetCurrentContext(ctx); - init_extensions(); - aglSetCurrentContext(0); - aglDestroyContext(ctx); - } - aglDestroyPixelFormat(fmt); -#else - QMacCocoaAutoReleasePool pool; - NSOpenGLPixelFormatAttribute attribs[] = { 0 }; - NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs]; - if (!fmt) { - qWarning("QGLExtensions: Cannot find any visuals"); - return; - } - - NSOpenGLContext *ctx = [[NSOpenGLContext alloc] initWithFormat:fmt shareContext:0]; - if (!ctx) { - qWarning("QGLExtensions: Cannot create context"); - } else { - [ctx makeCurrentContext]; - init_extensions(); - [NSOpenGLContext clearCurrentContext]; - [ctx release]; - } - [fmt release]; -#endif -} - #endif QT_END_NAMESPACE diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 30f5591..0104f07 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -261,6 +261,60 @@ private: // "ctx" is destroyed. Returns null if nothing is sharing with ctx. Q_OPENGL_EXPORT const QGLContext *qt_gl_transfer_context(const QGLContext *); +// GL extension definitions +class QGLExtensions { +public: + enum Extension { + TextureRectangle = 0x00000001, + SampleBuffers = 0x00000002, + GenerateMipmap = 0x00000004, + TextureCompression = 0x00000008, + FragmentProgram = 0x00000010, + MirroredRepeat = 0x00000020, + FramebufferObject = 0x00000040, + StencilTwoSide = 0x00000080, + StencilWrap = 0x00000100, + PackedDepthStencil = 0x00000200, + NVFloatBuffer = 0x00000400, + PixelBufferObject = 0x00000800, + FramebufferBlit = 0x00001000, + NPOTTextures = 0x00002000, + BGRATextureFormat = 0x00004000, + DDSTextureCompression = 0x00008000, + ETC1TextureCompression = 0x00010000, + PVRTCTextureCompression = 0x00020000, + FragmentShader = 0x00040000 + }; + Q_DECLARE_FLAGS(Extensions, Extension) + + static Extensions glExtensions(); + +private: + static Extensions currentContextExtensions(); +}; + +/* + QGLTemporaryContext - the main objective of this class is to have a way of + creating a GL context and making it current, without going via QGLWidget + and friends. At certain points during GL initialization we need a current + context in order decide what GL features are available, and to resolve GL + extensions. Having a light-weight way of creating such a context saves + initial application startup time, and it doesn't wind up creating recursive + conflicts. + The class currently uses a private d pointer to hide the platform specific + types. This could possibly been done inline with #ifdef'ery, but it causes + major headaches on e.g. X11 due to namespace pollution. +*/ +class QGLTemporaryContextPrivate; +class QGLTemporaryContext { +public: + QGLTemporaryContext(bool directRendering = true, QWidget *parent = 0); + ~QGLTemporaryContext(); + +private: + QScopedPointer<QGLTemporaryContextPrivate> d; +}; + class QGLTexture; // This probably needs to grow to GL_MAX_VERTEX_ATTRIBS, but 3 is ok for now as that's @@ -333,10 +387,12 @@ public: uint crWin : 1; uint internal_context : 1; uint version_flags_cached : 1; + uint extension_flags_cached : 1; QPaintDevice *paintDevice; QColor transpColor; QGLContext *q_ptr; QGLFormat::OpenGLVersionFlags version_flags; + QGLExtensions::Extensions extension_flags; QGLContextGroup *group; GLint max_texture_size; @@ -375,41 +431,8 @@ Q_SIGNALS: void aboutToDestroyContext(const QGLContext *context); }; -// GL extension definitions -class QGLExtensions { -public: - enum Extension { - TextureRectangle = 0x00000001, - SampleBuffers = 0x00000002, - GenerateMipmap = 0x00000004, - TextureCompression = 0x00000008, - FragmentProgram = 0x00000010, - MirroredRepeat = 0x00000020, - FramebufferObject = 0x00000040, - StencilTwoSide = 0x00000080, - StencilWrap = 0x00000100, - PackedDepthStencil = 0x00000200, - NVFloatBuffer = 0x00000400, - PixelBufferObject = 0x00000800, - FramebufferBlit = 0x00001000, - NPOTTextures = 0x00002000, - BGRATextureFormat = 0x00004000, - DDSTextureCompression = 0x00008000, - ETC1TextureCompression = 0x00010000, - PVRTCTextureCompression = 0x00020000, - FragmentShader = 0x00040000 - }; - Q_DECLARE_FLAGS(Extensions, Extension) - - static Extensions glExtensions; - static bool nvidiaFboNeedsFinish; - static void init(); // sys dependent - static void init_extensions(); // general: called by init() -}; - Q_DECLARE_OPERATORS_FOR_FLAGS(QGLExtensions::Extensions) - // Temporarily make a context current if not already current or // shared with the current contex. The previous context is made // current when the object goes out of scope. @@ -533,7 +556,7 @@ bool qt_gl_preferGL2Engine(); inline GLenum qt_gl_preferredTextureFormat() { - return (QGLExtensions::glExtensions & QGLExtensions::BGRATextureFormat) && QSysInfo::ByteOrder == QSysInfo::LittleEndian + return (QGLExtensions::glExtensions() & QGLExtensions::BGRATextureFormat) && QSysInfo::ByteOrder == QSysInfo::LittleEndian ? GL_BGRA : GL_RGBA; } @@ -542,7 +565,7 @@ inline GLenum qt_gl_preferredTextureTarget() #if defined(QT_OPENGL_ES_2) return GL_TEXTURE_2D; #else - return (QGLExtensions::glExtensions & QGLExtensions::TextureRectangle) + return (QGLExtensions::glExtensions() & QGLExtensions::TextureRectangle) && !qt_gl_preferGL2Engine() ? GL_TEXTURE_RECTANGLE_NV : GL_TEXTURE_2D; @@ -614,7 +637,7 @@ private: }; -// This class can be used to match GL extensions with doing any mallocs. The +// This class can be used to match GL extensions without doing any mallocs. The // class assumes that the GL extension string ends with a space character, // which it should do on all conformant platforms. Create the object and pass // in a pointer to the extension string, then call match() on each extension diff --git a/src/opengl/qgl_qws.cpp b/src/opengl/qgl_qws.cpp index f69ad7b..d4adc8b 100644 --- a/src/opengl/qgl_qws.cpp +++ b/src/opengl/qgl_qws.cpp @@ -83,6 +83,28 @@ static QGLScreen *glScreenForDevice(QPaintDevice *device) return 0; } +/* + QGLTemporaryContext implementation +*/ + +class QGLTemporaryContextPrivate +{ +public: + QGLWidget *widget; +}; + +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->widget = new QGLWidget; + d->widget->makeCurrent(); +} + +QGLTemporaryContext::~QGLTemporaryContext() +{ + delete d->widget; +} + /***************************************************************************** QOpenGL debug facilities *****************************************************************************/ @@ -311,36 +333,4 @@ void QGLWidget::setColormap(const QGLColormap &) { } -void QGLExtensions::init() -{ - static bool init_done = false; - - if (init_done) - return; - init_done = true; - - // We need a context current to initialize the extensions, - // but getting a valid EGLNativeWindowType this early can be - // problematic under QWS. So use a pbuffer instead. - // - // Unfortunately OpenGL/ES 2.0 systems don't normally - // support pbuffers, so we have no choice but to try - // our luck with a window on those systems. -#if defined(QT_OPENGL_ES_2) - QGLWidget tmpWidget; - tmpWidget.makeCurrent(); - - init_extensions(); - - tmpWidget.doneCurrent(); -#else - QGLPixelBuffer pbuffer(16, 16); - pbuffer.makeCurrent(); - - init_extensions(); - - pbuffer.doneCurrent(); -#endif -} - QT_END_NAMESPACE diff --git a/src/opengl/qgl_win.cpp b/src/opengl/qgl_win.cpp index 443fbf2..ed4814f 100644 --- a/src/opengl/qgl_win.cpp +++ b/src/opengl/qgl_win.cpp @@ -551,7 +551,7 @@ QGLFormat pfiToQGLFormat(HDC hdc, int pfi) QVarLengthArray<int> iAttributes(40); QVarLengthArray<int> iValues(40); int i = 0; - bool has_sample_buffers = QGLExtensions::glExtensions & QGLExtensions::SampleBuffers; + bool has_sample_buffers = QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers; iAttributes[i++] = WGL_DOUBLE_BUFFER_ARB; // 0 iAttributes[i++] = WGL_DEPTH_BITS_ARB; // 1 @@ -628,52 +628,14 @@ QGLFormat pfiToQGLFormat(HDC hdc, int pfi) /* - Creates a temporary GL context and makes it current - - cleans up when the object is destructed. + QGLTemporaryContext implementation */ Q_GUI_EXPORT const QString qt_getRegisteredWndClass(); -class QGLTempContext +class QGLTemporaryContextPrivate { public: - QGLTempContext(bool directRendering, QWidget *parent = 0) - { - QString windowClassName = qt_getRegisteredWndClass(); - if (parent && !parent->internalWinId()) - parent = parent->nativeParentWidget(); - - dmy_id = CreateWindow((const wchar_t *)windowClassName.utf16(), - 0, 0, 0, 0, 1, 1, - parent ? parent->winId() : 0, 0, qWinAppInst(), 0); - - dmy_pdc = GetDC(dmy_id); - PIXELFORMATDESCRIPTOR dmy_pfd; - memset(&dmy_pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); - dmy_pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - dmy_pfd.nVersion = 1; - dmy_pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; - dmy_pfd.iPixelType = PFD_TYPE_RGBA; - if (!directRendering) - dmy_pfd.dwFlags |= PFD_GENERIC_FORMAT; - - int dmy_pf = ChoosePixelFormat(dmy_pdc, &dmy_pfd); - SetPixelFormat(dmy_pdc, dmy_pf, &dmy_pfd); - dmy_rc = wglCreateContext(dmy_pdc); - old_dc = wglGetCurrentDC(); - old_context = wglGetCurrentContext(); - wglMakeCurrent(dmy_pdc, dmy_rc); - } - - ~QGLTempContext() { - wglMakeCurrent(dmy_pdc, 0); - wglDeleteContext(dmy_rc); - ReleaseDC(dmy_id, dmy_pdc); - DestroyWindow(dmy_id); - if (old_dc && old_context) - wglMakeCurrent(old_dc, old_context); - } - HDC dmy_pdc; HGLRC dmy_rc; HDC old_dc; @@ -681,6 +643,45 @@ public: WId dmy_id; }; +QGLTemporaryContext::QGLTemporaryContext(bool directRendering, QWidget *parent) + : d(new QGLTemporaryContextPrivate) +{ + QString windowClassName = qt_getRegisteredWndClass(); + if (parent && !parent->internalWinId()) + parent = parent->nativeParentWidget(); + + d->dmy_id = CreateWindow((const wchar_t *)windowClassName.utf16(), + 0, 0, 0, 0, 1, 1, + parent ? parent->winId() : 0, 0, qWinAppInst(), 0); + + d->dmy_pdc = GetDC(d->dmy_id); + PIXELFORMATDESCRIPTOR dmy_pfd; + memset(&dmy_pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); + dmy_pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + dmy_pfd.nVersion = 1; + dmy_pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; + dmy_pfd.iPixelType = PFD_TYPE_RGBA; + if (!directRendering) + dmy_pfd.dwFlags |= PFD_GENERIC_FORMAT; + + int dmy_pf = ChoosePixelFormat(d->dmy_pdc, &dmy_pfd); + SetPixelFormat(d->dmy_pdc, dmy_pf, &dmy_pfd); + d->dmy_rc = wglCreateContext(d->dmy_pdc); + d->old_dc = wglGetCurrentDC(); + d->old_context = wglGetCurrentContext(); + wglMakeCurrent(d->dmy_pdc, d->dmy_rc); +} + +QGLTemporaryContext::~QGLTemporaryContext() +{ + wglMakeCurrent(d->dmy_pdc, 0); + wglDeleteContext(d->dmy_rc); + ReleaseDC(d->dmy_id, d->dmy_pdc); + DestroyWindow(d->dmy_id); + if (d->old_dc && d->old_context) + wglMakeCurrent(d->old_dc, d->old_context); +} + bool QGLContext::chooseContext(const QGLContext* shareContext) { Q_D(QGLContext); @@ -721,10 +722,10 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) myDc = GetDC(d->win); } - // NB! the QGLTempContext object is needed for the + // NB! the QGLTemporaryContext object is needed for the // wglGetProcAddress() calls to succeed and are absolutely // necessary - don't remove! - QGLTempContext tmp_ctx(d->glFormat.directRendering(), widget); + QGLTemporaryContext tmp_ctx(d->glFormat.directRendering(), widget); if (!myDc) { qWarning("QGLContext::chooseContext(): Paint device cannot be null"); @@ -965,7 +966,7 @@ int QGLContext::choosePixelFormat(void* dummyPfd, HDC pdc) iAttributes[i++] = 1; } int si = 0; - bool trySampleBuffers = QGLExtensions::glExtensions & QGLExtensions::SampleBuffers; + bool trySampleBuffers = QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers; if (trySampleBuffers && d->glFormat.sampleBuffers()) { iAttributes[i++] = WGL_SAMPLE_BUFFERS_ARB; iAttributes[i++] = TRUE; @@ -1471,15 +1472,4 @@ void QGLWidget::setColormap(const QGLColormap & c) } } -void QGLExtensions::init() -{ - static bool init_done = false; - - if (init_done) - return; - init_done = true; - QGLTempContext temp_ctx(QGLFormat::defaultFormat().directRendering()); - init_extensions(); -} - QT_END_NAMESPACE diff --git a/src/opengl/qgl_wince.cpp b/src/opengl/qgl_wince.cpp index 460f10d..00a125a 100644 --- a/src/opengl/qgl_wince.cpp +++ b/src/opengl/qgl_wince.cpp @@ -95,8 +95,27 @@ public: #include <qcolor.h> +/* + QGLTemporaryContext implementation +*/ +class QGLTemporaryContextPrivate +{ +public: + QGLWidget *widget; +}; +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->widget = new QGLWidget; + d->widget->makeCurrent(); +} + +QGLTemporaryContext::~QGLTemporaryContext() +{ + delete d->widget; +} /***************************************************************************** QGLFormat Win32/WGL-specific code @@ -627,21 +646,4 @@ void QGLWidget::setColormap(const QGLColormap & c) } } -void QGLExtensions::init() -{ - static bool init_done = false; - - if (init_done) - return; - init_done = true; - - // We need a context current to initialize the extensions. - QGLWidget tmpWidget; - tmpWidget.makeCurrent(); - - init_extensions(); - - tmpWidget.doneCurrent(); -} - QT_END_NAMESPACE diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp index e883ddc..f4cc7c7 100644 --- a/src/opengl/qgl_x11.cpp +++ b/src/opengl/qgl_x11.cpp @@ -549,7 +549,7 @@ void *QGLContext::chooseVisual() bool triedDouble = false; bool triedSample = false; if (fmt.sampleBuffers()) - fmt.setSampleBuffers(QGLExtensions::glExtensions & QGLExtensions::SampleBuffers); + fmt.setSampleBuffers(QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers); while(!fail && !(vis = tryVisual(fmt, bufDepths[i]))) { if (!fmt.rgba() && bufDepths[i] > 1) { i++; @@ -1132,71 +1132,70 @@ void *QGLContext::getProcAddress(const QString &proc) const return glXGetProcAddressARB(reinterpret_cast<const GLubyte *>(proc.toLatin1().data())); } -// -// This class is used to create a temporary, minimal GL context, which is used -// to retrive GL version and extension info. It's significantly faster to -// construct than a QGLWidget, and it doesn't have the recursive creation -// problem that QGLWidget would have. E.g. creating a temporary QGLWidget to -// retrieve GL info as part of the QGLWidget initialization. -// -class QGLTempContext -{ +/* + QGLTemporaryContext implementation +*/ + +class QGLTemporaryContextPrivate { public: - QGLTempContext(int screen = 0) : - initialized(false), - old_drawable(0), - old_context(0) - { - int attribs[] = {GLX_RGBA, XNone}; - XVisualInfo *vi = glXChooseVisual(X11->display, screen, attribs); - if (!vi) { - qWarning("QGLTempContext: No GL capable X visuals available."); - return; - } + bool initialized; + Window drawable; + GLXContext context; + GLXDrawable oldDrawable; + GLXContext oldContext; +}; - int useGL; - glXGetConfig(X11->display, vi, GLX_USE_GL, &useGL); - if (!useGL) { - XFree(vi); - return; - } +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->initialized = false; + d->oldDrawable = 0; + d->oldContext = 0; + int screen = 0; + + int attribs[] = {GLX_RGBA, XNone}; + XVisualInfo *vi = glXChooseVisual(X11->display, screen, attribs); + if (!vi) { + qWarning("QGLTempContext: No GL capable X visuals available."); + return; + } - old_drawable = glXGetCurrentDrawable(); - old_context = glXGetCurrentContext(); - - XSetWindowAttributes a; - a.colormap = qt_gl_choose_cmap(X11->display, vi); - drawable = XCreateWindow(X11->display, RootWindow(X11->display, screen), - 0, 0, 1, 1, 0, - vi->depth, InputOutput, vi->visual, - CWColormap, &a); - context = glXCreateContext(X11->display, vi, 0, True); - if (context && glXMakeCurrent(X11->display, drawable, context)) { - initialized = true; - } else { - qWarning("QGLTempContext: Unable to create GL context."); - XDestroyWindow(X11->display, drawable); - } + int useGL; + glXGetConfig(X11->display, vi, GLX_USE_GL, &useGL); + if (!useGL) { XFree(vi); + return; } - ~QGLTempContext() { - if (initialized) { - glXMakeCurrent(X11->display, 0, 0); - glXDestroyContext(X11->display, context); - XDestroyWindow(X11->display, drawable); - } - if (old_drawable && old_context) - glXMakeCurrent(X11->display, old_drawable, old_context); + d->oldDrawable = glXGetCurrentDrawable(); + d->oldContext = glXGetCurrentContext(); + + XSetWindowAttributes a; + a.colormap = qt_gl_choose_cmap(X11->display, vi); + d->drawable = XCreateWindow(X11->display, RootWindow(X11->display, screen), + 0, 0, 1, 1, 0, + vi->depth, InputOutput, vi->visual, + CWColormap, &a); + d->context = glXCreateContext(X11->display, vi, 0, True); + if (d->context && glXMakeCurrent(X11->display, d->drawable, d->context)) { + d->initialized = true; + } else { + qWarning("QGLTempContext: Unable to create GL context."); + XDestroyWindow(X11->display, d->drawable); } + XFree(vi); +} -private: - bool initialized; - Window drawable; - GLXContext context; - GLXDrawable old_drawable; - GLXContext old_context; -}; +QGLTemporaryContext::~QGLTemporaryContext() +{ + if (d->initialized) { + glXMakeCurrent(X11->display, 0, 0); + glXDestroyContext(X11->display, d->context); + XDestroyWindow(X11->display, d->drawable); + } + if (d->oldDrawable && d->oldContext) + glXMakeCurrent(X11->display, d->oldDrawable, d->oldContext); +} /***************************************************************************** QGLOverlayWidget (Internal overlay class for X11) @@ -1632,27 +1631,6 @@ void QGLWidget::setColormap(const QGLColormap & c) delete [] cmw; } -void QGLExtensions::init() -{ - static bool init_done = false; - - if (init_done) - return; - init_done = true; - - QGLTempContext context; - init_extensions(); - - // nvidia 9x.xx unix drivers contain a bug which requires us to call glFinish before releasing an fbo - // to avoid painting artifacts - const QByteArray versionString(reinterpret_cast<const char*>(glGetString(GL_VERSION))); - const int pos = versionString.indexOf("NVIDIA"); - if (pos >= 0) { - const float nvidiaDriverVersion = versionString.mid(pos + strlen("NVIDIA")).toFloat(); - nvidiaFboNeedsFinish = nvidiaDriverVersion >= 90.0 && nvidiaDriverVersion < 100.0; - } -} - // Solaris defines glXBindTexImageEXT as part of the GL library #if defined(GLX_VERSION_1_3) && !defined(Q_OS_HPUX) typedef void (*qt_glXBindTexImageEXT)(Display*, GLXDrawable, int, const int*); @@ -1668,7 +1646,7 @@ static bool qt_resolveTextureFromPixmap(QPaintDevice *paintDevice) resolvedTextureFromPixmap = true; // Check to see if we have NPOT texture support - if ( !(QGLExtensions::glExtensions & QGLExtensions::NPOTTextures) && + if ( !(QGLExtensions::glExtensions() & QGLExtensions::NPOTTextures) && !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0)) { return false; // Can't use TFP without NPOT diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index 85daf95..572834b 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -55,112 +55,115 @@ QT_BEGIN_NAMESPACE bool qt_egl_setup_x11_visual(XVisualInfo &vi, EGLDisplay display, EGLConfig config, const QX11Info &x11Info, bool useArgbVisual); -// -// QGLTempContext is a class for creating a temporary GL context -// (which is needed during QGLWidget initialization to retrieve GL -// extension info). Faster to construct than a full QGLWidget. -// -class QGLTempContext + +/* + QGLTemporaryContext implementation +*/ + +class QGLTemporaryContextPrivate { public: - QGLTempContext(int screen = 0) : - initialized(false), - window(0), - context(0), - surface(0) - { - display = eglGetDisplay(EGLNativeDisplayType(X11->display)); + bool initialized; + Window window; + EGLContext context; + EGLSurface surface; + EGLDisplay display; +}; - if (!eglInitialize(display, NULL, NULL)) { - qWarning("QGLTempContext: Unable to initialize EGL display."); - return; - } +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->initialized = false; + d->window = 0; + d->context = 0; + d->surface = 0; + int screen = 0; + + d->display = eglGetDisplay(EGLNativeDisplayType(X11->display)); - EGLConfig config; - int numConfigs = 0; - EGLint attribs[] = { - EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + if (!eglInitialize(d->display, NULL, NULL)) { + qWarning("QGLTemporaryContext: Unable to initialize EGL display."); + return; + } + + EGLConfig config; + int numConfigs = 0; + EGLint attribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, #ifdef QT_OPENGL_ES_2 - EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, #endif - EGL_NONE - }; + EGL_NONE + }; - eglChooseConfig(display, attribs, &config, 1, &numConfigs); - if (!numConfigs) { - qWarning("QGLTempContext: No EGL configurations available."); - return; - } + eglChooseConfig(d->display, attribs, &config, 1, &numConfigs); + if (!numConfigs) { + qWarning("QGLTemporaryContext: No EGL configurations available."); + return; + } - XVisualInfo visualInfo; - XVisualInfo *vi; - int numVisuals; - EGLint id = 0; - - eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &id); - if (id == 0) { - // EGL_NATIVE_VISUAL_ID is optional and might not be supported - // on some implementations - we'll have to do it the hard way - QX11Info xinfo; - qt_egl_setup_x11_visual(visualInfo, display, config, xinfo, false); - } else { - visualInfo.visualid = id; - } - vi = XGetVisualInfo(X11->display, VisualIDMask, &visualInfo, &numVisuals); - if (!vi || numVisuals < 1) { - qWarning("QGLTempContext: Unable to get X11 visual info id."); - return; - } + XVisualInfo visualInfo; + XVisualInfo *vi; + int numVisuals; + EGLint id = 0; + + eglGetConfigAttrib(d->display, config, EGL_NATIVE_VISUAL_ID, &id); + if (id == 0) { + // EGL_NATIVE_VISUAL_ID is optional and might not be supported + // on some implementations - we'll have to do it the hard way + QX11Info xinfo; + qt_egl_setup_x11_visual(visualInfo, d->display, config, xinfo, false); + } else { + visualInfo.visualid = id; + } + vi = XGetVisualInfo(X11->display, VisualIDMask, &visualInfo, &numVisuals); + if (!vi || numVisuals < 1) { + qWarning("QGLTemporaryContext: Unable to get X11 visual info id."); + return; + } - window = XCreateWindow(X11->display, RootWindow(X11->display, screen), - 0, 0, 1, 1, 0, - vi->depth, InputOutput, vi->visual, - 0, 0); + d->window = XCreateWindow(X11->display, RootWindow(X11->display, screen), + 0, 0, 1, 1, 0, + vi->depth, InputOutput, vi->visual, + 0, 0); - surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType) window, NULL); + d->surface = eglCreateWindowSurface(d->display, config, (EGLNativeWindowType) d->window, NULL); - if (surface == EGL_NO_SURFACE) { - qWarning("QGLTempContext: Error creating EGL surface."); - XFree(vi); - XDestroyWindow(X11->display, window); - return; - } + if (d->surface == EGL_NO_SURFACE) { + qWarning("QGLTemporaryContext: Error creating EGL surface."); + XFree(vi); + XDestroyWindow(X11->display, d->window); + return; + } - EGLint contextAttribs[] = { + EGLint contextAttribs[] = { #ifdef QT_OPENGL_ES_2 - EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_CONTEXT_CLIENT_VERSION, 2, #endif - EGL_NONE - }; - context = eglCreateContext(display, config, 0, contextAttribs); - if (context != EGL_NO_CONTEXT - && eglMakeCurrent(display, surface, surface, context)) - { - initialized = true; - } else { - qWarning("QGLTempContext: Error creating EGL context."); - eglDestroySurface(display, surface); - XDestroyWindow(X11->display, window); - } - XFree(vi); + EGL_NONE + }; + d->context = eglCreateContext(d->display, config, 0, contextAttribs); + if (d->context != EGL_NO_CONTEXT + && eglMakeCurrent(d->display, d->surface, d->surface, d->context)) + { + d->initialized = true; + } else { + qWarning("QGLTemporaryContext: Error creating EGL context."); + eglDestroySurface(d->display, d->surface); + XDestroyWindow(X11->display, d->window); } + XFree(vi); +} - ~QGLTempContext() { - if (initialized) { - eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - eglDestroyContext(display, context); - eglDestroySurface(display, surface); - XDestroyWindow(X11->display, window); - } +QGLTemporaryContext::~QGLTemporaryContext() +{ + if (d->initialized) { + eglMakeCurrent(d->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglDestroyContext(d->display, d->context); + eglDestroySurface(d->display, d->surface); + XDestroyWindow(X11->display, d->window); } - -private: - bool initialized; - Window window; - EGLContext context; - EGLSurface surface; - EGLDisplay display; -}; +} bool QGLFormat::hasOpenGLOverlays() { @@ -547,19 +550,6 @@ void QGLWidget::setColormap(const QGLColormap &) { } -void QGLExtensions::init() -{ - static bool init_done = false; - - if (init_done) - return; - init_done = true; - - // We need a context current to initialize the extensions. - QGLTempContext context; - init_extensions(); -} - // Re-creates the EGL surface if the window ID has changed or if force is true void QGLWidgetPrivate::recreateEglSurface(bool force) { diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index ed21923..ce80796 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -396,7 +396,7 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, QGLContext *ctx = const_cast<QGLContext *>(QGLContext::currentContext()); fbo_guard.setContext(ctx); - bool ext_detected = (QGLExtensions::glExtensions & QGLExtensions::FramebufferObject); + bool ext_detected = (QGLExtensions::glExtensions() & QGLExtensions::FramebufferObject); if (!ext_detected || (ext_detected && !qt_resolve_framebufferobject_extensions(ctx))) return; @@ -466,7 +466,7 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz, } if (attachment == QGLFramebufferObject::CombinedDepthStencil - && (QGLExtensions::glExtensions & QGLExtensions::PackedDepthStencil)) { + && (QGLExtensions::glExtensions() & QGLExtensions::PackedDepthStencil)) { // depth and stencil buffer needs another extension glGenRenderbuffers(1, &depth_stencil_buffer); Q_ASSERT(!glIsRenderbuffer(depth_stencil_buffer)); @@ -1028,8 +1028,7 @@ QPaintEngine *QGLFramebufferObject::paintEngine() const */ bool QGLFramebufferObject::hasOpenGLFramebufferObjects() { - QGLExtensions::init(); - return (QGLExtensions::glExtensions & QGLExtensions::FramebufferObject); + return (QGLExtensions::glExtensions() & QGLExtensions::FramebufferObject); } /*! @@ -1188,8 +1187,7 @@ bool QGLFramebufferObject::isBound() const */ bool QGLFramebufferObject::hasOpenGLFramebufferBlit() { - QGLExtensions::init(); - return (QGLExtensions::glExtensions & QGLExtensions::FramebufferBlit); + return (QGLExtensions::glExtensions() & QGLExtensions::FramebufferBlit); } /*! @@ -1229,7 +1227,7 @@ void QGLFramebufferObject::blitFramebuffer(QGLFramebufferObject *target, const Q GLbitfield buffers, GLenum filter) { - if (!(QGLExtensions::glExtensions & QGLExtensions::FramebufferBlit)) + if (!(QGLExtensions::glExtensions() & QGLExtensions::FramebufferBlit)) return; const QGLContext *ctx = QGLContext::currentContext(); diff --git a/src/opengl/qglpixelbuffer_mac.mm b/src/opengl/qglpixelbuffer_mac.mm index 49c1845..6731dd8 100644 --- a/src/opengl/qglpixelbuffer_mac.mm +++ b/src/opengl/qglpixelbuffer_mac.mm @@ -92,7 +92,7 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge GLenum target = GL_TEXTURE_2D; - if ((QGLExtensions::glExtensions & QGLExtensions::TextureRectangle) + if ((QGLExtensions::glExtensions() & QGLExtensions::TextureRectangle) && (size.width() != nearest_gl_texture_size(size.width()) || size.height() != nearest_gl_texture_size(size.height()))) { @@ -223,7 +223,7 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge GLenum target = GL_TEXTURE_2D; - if ((QGLExtensions::glExtensions & QGLExtensions::TextureRectangle) + if ((QGLExtensions::glExtensions() & QGLExtensions::TextureRectangle) && (size.width() != nearest_gl_texture_size(size.width()) || size.height() != nearest_gl_texture_size(size.height()))) { diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h index f40b7c5..c85dc5a 100644 --- a/src/opengl/qglpixelbuffer_p.h +++ b/src/opengl/qglpixelbuffer_p.h @@ -154,7 +154,6 @@ class QGLPixelBufferPrivate { public: QGLPixelBufferPrivate(QGLPixelBuffer *q) : q_ptr(q), invalid(true), qctx(0), pbuf(0), ctx(0) { - QGLExtensions::init(); #ifdef Q_WS_WIN dc = 0; #elif defined(Q_WS_MACX) diff --git a/src/opengl/qglpixelbuffer_win.cpp b/src/opengl/qglpixelbuffer_win.cpp index a986ccf..8d0d105 100644 --- a/src/opengl/qglpixelbuffer_win.cpp +++ b/src/opengl/qglpixelbuffer_win.cpp @@ -221,7 +221,7 @@ static void qt_format_to_attrib_list(bool has_render_texture, const QGLFormat &f } if ((f.redBufferSize() > 8 || f.greenBufferSize() > 8 || f.blueBufferSize() > 8 || f.alphaBufferSize() > 8) - && (QGLExtensions::glExtensions & QGLExtensions::NVFloatBuffer)) + && (QGLExtensions::glExtensions() & QGLExtensions::NVFloatBuffer)) { attribs[i++] = WGL_FLOAT_COMPONENTS_NV; attribs[i++] = TRUE; @@ -368,11 +368,9 @@ void QGLPixelBuffer::releaseFromDynamicTexture() bool QGLPixelBuffer::hasOpenGLPbuffers() { bool ret = false; - QGLWidget *dmy = 0; - if (!QGLContext::currentContext()) { - dmy = new QGLWidget; - dmy->makeCurrent(); - } + QGLTemporaryContext *tmpContext = 0; + if (!QGLContext::currentContext()) + tmpContext = new QGLTemporaryContext; PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB"); if (wglGetExtensionsStringARB) { @@ -382,8 +380,8 @@ bool QGLPixelBuffer::hasOpenGLPbuffers() ret = true; } } - if (dmy) - delete dmy; + if (tmpContext) + delete tmpContext; return ret; } diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp index c823187..57918d0 100644 --- a/src/opengl/qpaintengine_opengl.cpp +++ b/src/opengl/qpaintengine_opengl.cpp @@ -108,6 +108,10 @@ static bool DEBUG_TEMP_FLAG; #define DEBUG_ONCE_STR(str) DEBUG_ONCE qDebug() << (str); #endif +#ifdef Q_WS_X11 +static bool qt_nvidiaFboNeedsFinish = false; +#endif + static inline void qt_glColor4ubv(unsigned char *col) { glColor4f(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, col[3]/255.0f); @@ -423,7 +427,7 @@ inline void QGLOffscreen::release() #ifdef Q_WS_X11 // workaround for bug in nvidia driver versions 9x.xx - if (QGLExtensions::nvidiaFboNeedsFinish) + if (qt_nvidiaFboNeedsFinish) glFinish(); #endif @@ -477,7 +481,7 @@ inline QGLContext *QGLOffscreen::context() const bool QGLOffscreen::isSupported() { - return (QGLExtensions::glExtensions & QGLExtensions::FramebufferObject); // for fbo + return (QGLExtensions::glExtensions() & QGLExtensions::FramebufferObject); // for fbo } struct QDrawQueueItem @@ -1266,7 +1270,7 @@ bool QOpenGLPaintEngine::begin(QPaintDevice *pdev) for (int j = 0; j < 4; ++j) d->mv_matrix[i][j] = (i == j ? qreal(1) : qreal(0)); - bool has_frag_program = (QGLExtensions::glExtensions & QGLExtensions::FragmentProgram) + bool has_frag_program = (QGLExtensions::glExtensions() & QGLExtensions::FragmentProgram) && (pdev->devType() != QInternal::Pixmap); QGLContext *ctx = const_cast<QGLContext *>(d->device->context()); @@ -1279,11 +1283,27 @@ bool QOpenGLPaintEngine::begin(QPaintDevice *pdev) has_frag_program = qt_resolve_frag_program_extensions(ctx) && qt_resolve_version_1_3_functions(ctx); d->use_stencil_method = d->device->format().stencil() - && (QGLExtensions::glExtensions & QGLExtensions::StencilWrap); + && (QGLExtensions::glExtensions() & QGLExtensions::StencilWrap); if (d->device->format().directRendering() - && (d->use_stencil_method && QGLExtensions::glExtensions & QGLExtensions::StencilTwoSide)) + && (d->use_stencil_method && QGLExtensions::glExtensions() & QGLExtensions::StencilTwoSide)) d->has_stencil_face_ext = qt_resolve_stencil_face_extension(ctx); +#ifdef Q_WS_X11 + static bool nvidia_workaround_needs_init = true; + if (nvidia_workaround_needs_init) { + // nvidia 9x.xx unix drivers contain a bug which requires us to + // call glFinish before releasing an fbo to avoid painting + // artifacts + const QByteArray versionString(reinterpret_cast<const char*>(glGetString(GL_VERSION))); + const int pos = versionString.indexOf("NVIDIA"); + if (pos >= 0) { + const float nvidiaDriverVersion = versionString.mid(pos + strlen("NVIDIA")).toFloat(); + qt_nvidiaFboNeedsFinish = nvidiaDriverVersion >= 90.0 && nvidiaDriverVersion < 100.0; + } + nvidia_workaround_needs_init = false; + } +#endif + #ifndef QT_OPENGL_ES if (!ctx->d_ptr->internal_context) { glGetDoublev(GL_PROJECTION_MATRIX, &d->projection_matrix[0][0]); @@ -1333,10 +1353,10 @@ bool QOpenGLPaintEngine::begin(QPaintDevice *pdev) glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); - if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers) + if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers) glDisable(GL_MULTISAMPLE); glDisable(GL_TEXTURE_2D); - if (QGLExtensions::glExtensions & QGLExtensions::TextureRectangle) + if (QGLExtensions::glExtensions() & QGLExtensions::TextureRectangle) glDisable(GL_TEXTURE_RECTANGLE_NV); glDisable(GL_STENCIL_TEST); glDisable(GL_CULL_FACE); @@ -1534,7 +1554,7 @@ void QOpenGLPaintEnginePrivate::updateGradient(const QBrush &brush, const QRectF #ifdef QT_OPENGL_ES Q_UNUSED(brush); #else - bool has_mirrored_repeat = QGLExtensions::glExtensions & QGLExtensions::MirroredRepeat; + bool has_mirrored_repeat = QGLExtensions::glExtensions() & QGLExtensions::MirroredRepeat; Qt::BrushStyle style = brush.style(); QTransform m = brush.transform(); @@ -2098,7 +2118,7 @@ static inline bool needsEmulation(Qt::BrushStyle style) { return !(style == Qt::SolidPattern || (style == Qt::LinearGradientPattern - && (QGLExtensions::glExtensions & QGLExtensions::MirroredRepeat))); + && (QGLExtensions::glExtensions() & QGLExtensions::MirroredRepeat))); } void QOpenGLPaintEnginePrivate::updateUseEmulation() @@ -2420,12 +2440,12 @@ void QOpenGLPaintEngine::updateRenderHints(QPainter::RenderHints hints) d->high_quality_antialiasing = true; } else { d->high_quality_antialiasing = false; - if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers) + if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers) glEnable(GL_MULTISAMPLE); } } else { d->high_quality_antialiasing = false; - if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers) + if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers) glDisable(GL_MULTISAMPLE); } @@ -2435,14 +2455,14 @@ void QOpenGLPaintEngine::updateRenderHints(QPainter::RenderHints hints) if (!d->offscreen.isValid()) { DEBUG_ONCE_STR("Unable to initialize offscreen, disabling high quality antialiasing"); d->high_quality_antialiasing = false; - if (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers) + if (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers) glEnable(GL_MULTISAMPLE); } } d->has_antialiasing = d->high_quality_antialiasing || ((hints & QPainter::Antialiasing) - && (QGLExtensions::glExtensions & QGLExtensions::SampleBuffers)); + && (QGLExtensions::glExtensions() & QGLExtensions::SampleBuffers)); } diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 8ee4361..7a565e6 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -295,7 +295,6 @@ QGLWindowSurface::QGLWindowSurface(QWidget *window) : QWindowSurface(window), d_ptr(new QGLWindowSurfacePrivate) { Q_ASSERT(window->isTopLevel()); - QGLExtensions::init(); d_ptr->pb = 0; d_ptr->fbo = 0; d_ptr->ctx = 0; @@ -520,7 +519,7 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & glDisable(GL_SCISSOR_TEST); - if (d_ptr->fbo && (QGLExtensions::glExtensions & QGLExtensions::FramebufferBlit)) { + if (d_ptr->fbo && (QGLExtensions::glExtensions() & QGLExtensions::FramebufferBlit)) { const int h = d_ptr->fbo->height(); const int sx0 = br.left(); @@ -698,7 +697,7 @@ void QGLWindowSurface::updateGeometry() { } if (d_ptr->destructive_swap_buffers - && (QGLExtensions::glExtensions & QGLExtensions::FramebufferObject) + && (QGLExtensions::glExtensions() & QGLExtensions::FramebufferObject) && (d_ptr->fbo || !d_ptr->tried_fbo) && qt_gl_preferGL2Engine()) { @@ -712,7 +711,7 @@ void QGLWindowSurface::updateGeometry() { format.setInternalTextureFormat(GLenum(GL_RGBA)); format.setTextureTarget(target); - if (QGLExtensions::glExtensions & QGLExtensions::FramebufferBlit) + if (QGLExtensions::glExtensions() & QGLExtensions::FramebufferBlit) format.setSamples(8); d_ptr->fbo = new QGLFramebufferObject(rect.size(), format); diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 4215e97..9b91c7d 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -8,10 +8,14 @@ TEMPLATE = subdirs compiler \ compilerwarnings \ linguist \ + maketestselftest \ moc \ uic \ uic3 \ - guiapplauncher + guiapplauncher \ + #atwrapper \ # These tests need significant updating, + #uiloader \ # they have hardcoded machine names etc. + Q3SUBDIRS += \ q3accel \ q3action \ @@ -130,6 +134,7 @@ SUBDIRS += \ qdoublevalidator \ qdrag \ qerrormessage \ + qevent \ qeventloop \ qexplicitlyshareddatapointer \ qfile \ @@ -478,7 +483,8 @@ embedded:!wince* { } symbian { - SUBDIRS += qsoftkeymanager + SUBDIRS += qsoftkeymanager \ + qs60mainapplication } # Enable the tests specific to QtXmlPatterns. If you add a test, remember to diff --git a/tests/auto/maketestselftest/maketestselftest.pro b/tests/auto/maketestselftest/maketestselftest.pro new file mode 100644 index 0000000..6cc1744 --- /dev/null +++ b/tests/auto/maketestselftest/maketestselftest.pro @@ -0,0 +1,9 @@ +load(qttest_p4) + +SOURCES += tst_maketestselftest.cpp +QT = core + +DEFINES += SRCDIR=\\\"$$PWD/\\\" + +requires(!cross_compile) + diff --git a/tests/auto/maketestselftest/tst_maketestselftest.cpp b/tests/auto/maketestselftest/tst_maketestselftest.cpp new file mode 100644 index 0000000..ea7f36c --- /dev/null +++ b/tests/auto/maketestselftest/tst_maketestselftest.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QDir> +#include <QFile> +#include <QRegExp> +#include <QStringList> +#include <QTest> + +class tst_MakeTestSelfTest: public QObject +{ + Q_OBJECT + +private slots: + void auto_dot_pro(); + void auto_dot_pro_data(); +}; + +/* Verify that all tests are listed somewhere in auto.pro */ +void tst_MakeTestSelfTest::auto_dot_pro() +{ + static QStringList lines; + + if (lines.isEmpty()) { + QString filename = QString::fromLatin1(SRCDIR "/../auto.pro"); + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + QFAIL(qPrintable(QString("open %1: %2").arg(filename).arg(file.errorString()))); + } + while (!file.atEnd()) { + lines << file.readLine().trimmed(); + } + } + + QFETCH(QString, subdir); + QRegExp re(QString("( |=|^|#)%1( |\\\\|$)").arg(QRegExp::escape(subdir))); + foreach (const QString& line, lines) { + if (re.indexIn(line) != -1) { + return; + } + } + + QFAIL(qPrintable(QString( + "Subdir `%1' is missing from tests/auto/auto.pro\n" + "This means the test won't be compiled or run on any platform.\n" + "If this is intentional, please put the test name in a comment in auto.pro.").arg(subdir)) + ); +} + +void tst_MakeTestSelfTest::auto_dot_pro_data() +{ + QTest::addColumn<QString>("subdir"); + QDir dir(SRCDIR "/.."); + QStringList subdirs = dir.entryList(QDir::AllDirs|QDir::NoDotAndDotDot); + + foreach (const QString& subdir, subdirs) { + QTest::newRow(qPrintable(subdir)) << subdir; + } +} + +QTEST_MAIN(tst_MakeTestSelfTest) +#include "tst_maketestselftest.moc" diff --git a/tests/auto/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp b/tests/auto/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp index e332e11..d3d81e6 100644 --- a/tests/auto/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp +++ b/tests/auto/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp @@ -128,7 +128,7 @@ void tst_QAudioDeviceInfo::codecs() void tst_QAudioDeviceInfo::channels() { if(available) { - QList<int> avail = device->supportedChannelCounts(); + QList<int> avail = device->supportedChannels(); QVERIFY(avail.size() > 0); } } @@ -160,7 +160,7 @@ void tst_QAudioDeviceInfo::sampleTypes() void tst_QAudioDeviceInfo::frequencies() { if(available) { - QList<int> avail = device->supportedSampleRates(); + QList<int> avail = device->supportedFrequencies(); QVERIFY(avail.size() > 0); } } @@ -169,8 +169,8 @@ void tst_QAudioDeviceInfo::isformat() { if(available) { QAudioFormat format; - format.setSampleRate(44100); - format.setChannelCount(2); + format.setFrequency(44100); + format.setChannels(2); format.setSampleType(QAudioFormat::SignedInt); format.setByteOrder(QAudioFormat::LittleEndian); format.setSampleSize(16); @@ -185,8 +185,8 @@ void tst_QAudioDeviceInfo::preferred() { if(available) { QAudioFormat format = device->preferredFormat(); - QVERIFY(format.sampleRate() == 44100); - QVERIFY(format.channelCount() == 2); + QVERIFY(format.frequency() == 44100); + QVERIFY(format.channels() == 2); } } @@ -194,9 +194,9 @@ void tst_QAudioDeviceInfo::nearest() { if(available) { QAudioFormat format1, format2; - format1.setSampleRate(8000); + format1.setFrequency(8000); format2 = device->nearestFormat(format1); - QVERIFY(format2.sampleRate() == 44100); + QVERIFY(format2.frequency() == 44100); } } diff --git a/tests/auto/qaudioformat/tst_qaudioformat.cpp b/tests/auto/qaudioformat/tst_qaudioformat.cpp index a7200c4..0206798 100644 --- a/tests/auto/qaudioformat/tst_qaudioformat.cpp +++ b/tests/auto/qaudioformat/tst_qaudioformat.cpp @@ -77,8 +77,8 @@ void tst_QAudioFormat::checkNull() QAudioFormat audioFormat1(audioFormat0); QVERIFY(!audioFormat1.isValid()); - audioFormat0.setSampleRate(44100); - audioFormat0.setChannelCount(2); + audioFormat0.setFrequency(44100); + audioFormat0.setChannels(2); audioFormat0.setSampleSize(16); audioFormat0.setCodec("audio/pcm"); audioFormat0.setSampleType(QAudioFormat::SignedInt); @@ -88,15 +88,15 @@ void tst_QAudioFormat::checkNull() void tst_QAudioFormat::checkFrequency() { QAudioFormat audioFormat; - audioFormat.setSampleRate(44100); - QVERIFY(audioFormat.sampleRate() == 44100); + audioFormat.setFrequency(44100); + QVERIFY(audioFormat.frequency() == 44100); } void tst_QAudioFormat::checkChannels() { QAudioFormat audioFormat; - audioFormat.setChannelCount(2); - QVERIFY(audioFormat.channelCount() == 2); + audioFormat.setChannels(2); + QVERIFY(audioFormat.channels() == 2); } void tst_QAudioFormat::checkSampleSize() @@ -137,15 +137,15 @@ void tst_QAudioFormat::checkEquality() QVERIFY(!(audioFormat0 != audioFormat1)); // on filled formats - audioFormat0.setSampleRate(8000); - audioFormat0.setChannelCount(1); + audioFormat0.setFrequency(8000); + audioFormat0.setChannels(1); audioFormat0.setSampleSize(8); audioFormat0.setCodec("audio/pcm"); audioFormat0.setByteOrder(QAudioFormat::LittleEndian); audioFormat0.setSampleType(QAudioFormat::UnSignedInt); - audioFormat1.setSampleRate(8000); - audioFormat1.setChannelCount(1); + audioFormat1.setFrequency(8000); + audioFormat1.setChannels(1); audioFormat1.setSampleSize(8); audioFormat1.setCodec("audio/pcm"); audioFormat1.setByteOrder(QAudioFormat::LittleEndian); @@ -154,7 +154,7 @@ void tst_QAudioFormat::checkEquality() QVERIFY(audioFormat0 == audioFormat1); QVERIFY(!(audioFormat0 != audioFormat1)); - audioFormat0.setSampleRate(44100); + audioFormat0.setFrequency(44100); QVERIFY(audioFormat0 != audioFormat1); QVERIFY(!(audioFormat0 == audioFormat1)); } @@ -164,8 +164,8 @@ void tst_QAudioFormat::checkAssignment() QAudioFormat audioFormat0; QAudioFormat audioFormat1; - audioFormat0.setSampleRate(8000); - audioFormat0.setChannelCount(1); + audioFormat0.setFrequency(8000); + audioFormat0.setChannels(1); audioFormat0.setSampleSize(8); audioFormat0.setCodec("audio/pcm"); audioFormat0.setByteOrder(QAudioFormat::LittleEndian); diff --git a/tests/auto/qaudioinput/tst_qaudioinput.cpp b/tests/auto/qaudioinput/tst_qaudioinput.cpp index 9468413..40b7fbb 100644 --- a/tests/auto/qaudioinput/tst_qaudioinput.cpp +++ b/tests/auto/qaudioinput/tst_qaudioinput.cpp @@ -68,8 +68,8 @@ private: void tst_QAudioInput::initTestCase() { - format.setSampleRate(8000); - format.setChannelCount(1); + format.setFrequency(8000); + format.setChannels(1); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); @@ -94,8 +94,8 @@ void tst_QAudioInput::settings() // Confirm the setting we added in the init function. QAudioFormat f = audio->format(); - QVERIFY(format.channelCount() == f.channelCount()); - QVERIFY(format.sampleRate() == f.sampleRate()); + QVERIFY(format.channels() == f.channels()); + QVERIFY(format.frequency() == f.frequency()); QVERIFY(format.sampleSize() == f.sampleSize()); QVERIFY(format.codec() == f.codec()); QVERIFY(format.byteOrder() == f.byteOrder()); diff --git a/tests/auto/qaudiooutput/tst_qaudiooutput.cpp b/tests/auto/qaudiooutput/tst_qaudiooutput.cpp index 5005838..aeb2286 100644 --- a/tests/auto/qaudiooutput/tst_qaudiooutput.cpp +++ b/tests/auto/qaudiooutput/tst_qaudiooutput.cpp @@ -71,8 +71,8 @@ private: void tst_QAudioOutput::initTestCase() { - format.setSampleRate(8000); - format.setChannelCount(1); + format.setFrequency(8000); + format.setChannels(1); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); @@ -95,8 +95,8 @@ void tst_QAudioOutput::settings() // Confirm the setting we added in the init function. QAudioFormat f = audio->format(); - QVERIFY(format.channelCount() == f.channelCount()); - QVERIFY(format.sampleRate() == f.sampleRate()); + QVERIFY(format.channels() == f.channels()); + QVERIFY(format.frequency() == f.frequency()); QVERIFY(format.sampleSize() == f.sampleSize()); QVERIFY(format.codec() == f.codec()); QVERIFY(format.byteOrder() == f.byteOrder()); diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp index 8c8ab81..16a621a 100644 --- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp +++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp @@ -1669,6 +1669,9 @@ void tst_QGraphicsAnchorLayout::floatConflict() void tst_QGraphicsAnchorLayout::infiniteMaxSizes() { + if (sizeof(qreal) <= 4) { + QSKIP("qreal has too little precision, result will be wrong", SkipAll); + } QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout; l->setContentsMargins(0, 0, 0, 0); l->setSpacing(0); diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp index e3d1bbe..7880d2d 100644 --- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp +++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp @@ -1525,7 +1525,11 @@ void tst_QGraphicsAnchorLayout1::testMulti_data() } - QTest::newRow("Linear multi") << QSizeF(width, height) << theData << theResult; + if (sizeof(qreal) == 4) { + qDebug("Linear multi: Skipping! (qreal has too little precision, result will be wrong)"); + } else { + QTest::newRow("Linear multi") << QSizeF(width, height) << theData << theResult; + } } // Multiple widgets, V shape @@ -1595,7 +1599,11 @@ void tst_QGraphicsAnchorLayout1::testMulti_data() } } - QTest::newRow("V multi") << QSizeF(width, height) << theData << theResult; + if (sizeof(qreal) == 4) { + qDebug("V multi: Skipping! (qreal has too little precision, result will be wrong)"); + } else { + QTest::newRow("V multi") << QSizeF(width, height) << theData << theResult; + } } // Multiple widgets, grid @@ -1653,7 +1661,11 @@ void tst_QGraphicsAnchorLayout1::testMulti_data() << BasicResult(i, QRectF(((i%d)+1)*horizontalStep, ((i/d)+1)*verticalStep, horizontalStep, verticalStep) ); } - QTest::newRow("Grid multi") << QSizeF(200, 100) << theData << theResult; + if (sizeof(qreal) == 4) { + qDebug("Grid multi: Skipping! (qreal has too little precision, result will be wrong)"); + } else { + QTest::newRow("Grid multi") << QSizeF(200, 100) << theData << theResult; + } } } @@ -1669,16 +1681,16 @@ inline QGraphicsLayoutItem *getItem( return widgets[index]; } -static QRectF truncate(QRectF original) +static bool fuzzierCompare(qreal a, qreal b) { - QRectF result; + return qAbs(a - b) <= qreal(0.0001); +} - result.setX(qRound(original.x() * 1000000) / 1000000.0); - result.setY(qRound(original.y() * 1000000) / 1000000.0); - result.setWidth(qRound(original.width() * 1000000) / 1000000.0); - result.setHeight(qRound(original.height() * 1000000) / 1000000.0); +static bool fuzzierCompare(const QRectF &r1, const QRectF &r2) +{ - return result; + return fuzzierCompare(r1.x(), r2.x()) && fuzzierCompare(r1.y(), r2.y()) + && fuzzierCompare(r1.width(), r2.width()) && fuzzierCompare(r1.height(), r2.height()); } void tst_QGraphicsAnchorLayout1::testBasicLayout() @@ -1727,10 +1739,10 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout() // Validate for (int i = 0; i < result.count(); ++i) { const BasicLayoutTestResult item = result[i]; - QRectF expected = truncate(item.rect); - QRectF actual = truncate(widgets[item.index]->geometry()); + QRectF expected = item.rect; + QRectF actual = widgets[item.index]->geometry(); - QCOMPARE(actual, expected); + QVERIFY(fuzzierCompare(actual, expected)); } // Test mirrored mode @@ -1744,10 +1756,10 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout() if (mirroredRect.isValid()){ mirroredRect.moveLeft(size.width()-item.rect.width()-item.rect.left()); } - QRectF expected = truncate(mirroredRect); - QRectF actual = truncate(widgets[item.index]->geometry()); + QRectF expected = mirroredRect; + QRectF actual = widgets[item.index]->geometry(); - QCOMPARE(actual, expected); + QVERIFY(fuzzierCompare(actual, expected)); } qDeleteAll(widgets); diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 95de70e..51e2a57 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -70,6 +70,7 @@ private slots: void grayscale(); void colorize(); void drawPixmapItem(); + void deviceCoordinateTranslateCaching(); }; void tst_QGraphicsEffect::initTestCase() @@ -514,6 +515,51 @@ void tst_QGraphicsEffect::drawPixmapItem() QTRY_VERIFY(effect->repaints >= 2); } +class DeviceEffect : public QGraphicsEffect +{ +public: + QRectF boundingRectFor(const QRectF &rect) const + { return rect; } + + void draw(QPainter *painter) + { + QPoint offset; + QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset, QGraphicsEffect::NoPad); + + if (pixmap.isNull()) + return; + + painter->save(); + painter->setWorldTransform(QTransform()); + painter->drawPixmap(offset, pixmap); + painter->restore(); + } +}; + +void tst_QGraphicsEffect::deviceCoordinateTranslateCaching() +{ + QGraphicsScene scene; + CustomItem *item = new CustomItem(0, 0, 10, 10); + scene.addItem(item); + scene.setSceneRect(0, 0, 50, 0); + + item->setGraphicsEffect(new DeviceEffect); + item->setPen(Qt::NoPen); + item->setBrush(Qt::red); + + QGraphicsView view(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + QTRY_VERIFY(item->numRepaints >= 1); + int numRepaints = item->numRepaints; + + item->translate(10, 0); + QTest::qWait(50); + + QVERIFY(item->numRepaints == numRepaints); +} + QTEST_MAIN(tst_QGraphicsEffect) #include "tst_qgraphicseffect.moc" diff --git a/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp index 73e4fb6..3415163 100644 --- a/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp +++ b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp @@ -112,6 +112,7 @@ class MyQObject : public QObject Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) Q_PROPERTY(CustomType propWithCustomType READ propWithCustomType WRITE setPropWithCustomType) Q_PROPERTY(Policy enumProperty READ enumProperty WRITE setEnumProperty) + Q_PROPERTY(Ability flagsProperty READ flagsProperty WRITE setFlagsProperty) Q_ENUMS(Policy Strategy) Q_FLAGS(Ability) @@ -150,6 +151,7 @@ public: m_writeOnlyValue(789), m_readOnlyValue(987), m_enumValue(BarPolicy), + m_flagsValue(FooAbility), m_qtFunctionInvoked(-1) { } @@ -216,6 +218,11 @@ public: void setEnumProperty(Policy policy) { m_enumValue = policy; } + Ability flagsProperty() const + { return m_flagsValue; } + void setFlagsProperty(Ability ability) + { m_flagsValue = ability; } + int qtFunctionInvoked() const { return m_qtFunctionInvoked; } @@ -316,6 +323,10 @@ public: { m_qtFunctionInvoked = 56; return arg; } Q_INVOKABLE QObject* myInvokableReturningMyQObjectAsQObject() { m_qtFunctionInvoked = 57; return this; } + Q_INVOKABLE Ability myInvokableWithFlagsArg(Ability arg) + { m_qtFunctionInvoked = 58; m_actuals << int(arg); return arg; } + Q_INVOKABLE MyQObject::Ability myInvokableWithQualifiedFlagsArg(MyQObject::Ability arg) + { m_qtFunctionInvoked = 59; m_actuals << int(arg); return arg; } Q_INVOKABLE QObjectList findObjects() const { return findChildren<QObject *>(); } @@ -433,6 +444,7 @@ protected: QKeySequence m_shortcut; CustomType m_customType; Policy m_enumValue; + Ability m_flagsValue; int m_qtFunctionInvoked; QVariantList m_actuals; QByteArray m_connectedSignal; @@ -826,7 +838,7 @@ void tst_QScriptExtQObject::getSetStaticProperty() { QScriptValue val = m_engine->evaluate("myObject.enumProperty"); QVERIFY(val.isNumber()); - QCOMPARE(val.toInt32(), (int)MyQObject::BarPolicy); + QCOMPARE(val.toInt32(), int(MyQObject::BarPolicy)); } m_engine->evaluate("myObject.enumProperty = 2"); QCOMPARE(m_myObject->enumProperty(), MyQObject::BazPolicy); @@ -846,6 +858,25 @@ void tst_QScriptExtQObject::getSetStaticProperty() m_engine->evaluate("myObject.enumProperty = 'nada'"); QCOMPARE(m_myObject->enumProperty(), (MyQObject::Policy)-1); + // flags property + QCOMPARE(m_myObject->flagsProperty(), MyQObject::FooAbility); + { + QScriptValue val = m_engine->evaluate("myObject.flagsProperty"); + QVERIFY(val.isNumber()); + QCOMPARE(val.toInt32(), int(MyQObject::FooAbility)); + } + m_engine->evaluate("myObject.flagsProperty = 0x80"); + QCOMPARE(m_myObject->flagsProperty(), MyQObject::BarAbility); + m_engine->evaluate("myObject.flagsProperty = 0x81"); + QCOMPARE(m_myObject->flagsProperty(), MyQObject::Ability(MyQObject::FooAbility | MyQObject::BarAbility)); + m_engine->evaluate("myObject.flagsProperty = 123"); // bogus values are accepted + QCOMPARE(int(m_myObject->flagsProperty()), 123); + m_engine->evaluate("myObject.flagsProperty = 'BazAbility'"); + QCOMPARE(m_myObject->flagsProperty(), MyQObject::BazAbility); + m_engine->evaluate("myObject.flagsProperty = 'ScoobyDoo'"); + // ### ouch! Shouldn't QMetaProperty::write() rather not change the value...? + QCOMPARE(m_myObject->flagsProperty(), (MyQObject::Ability)-1); + // auto-dereferencing of pointers { QBrush b = QColor(0xCA, 0xFE, 0xBA, 0xBE); @@ -2017,6 +2048,7 @@ void tst_QScriptExtQObject::classEnums() QScriptValue myClass = m_engine->newQMetaObject(m_myObject->metaObject(), m_engine->undefinedValue()); m_engine->globalObject().setProperty("MyQObject", myClass); + QVERIFY(m_engine->evaluate("MyQObject.FooPolicy").isNumber()); // no strong typing QCOMPARE(static_cast<MyQObject::Policy>(m_engine->evaluate("MyQObject.FooPolicy").toInt32()), MyQObject::FooPolicy); QCOMPARE(static_cast<MyQObject::Policy>(m_engine->evaluate("MyQObject.BarPolicy").toInt32()), @@ -2031,6 +2063,7 @@ void tst_QScriptExtQObject::classEnums() QCOMPARE(static_cast<MyQObject::Strategy>(m_engine->evaluate("MyQObject.BazStrategy").toInt32()), MyQObject::BazStrategy); + QVERIFY(m_engine->evaluate("MyQObject.NoAbility").isNumber()); // no strong typing QCOMPARE(MyQObject::Ability(m_engine->evaluate("MyQObject.NoAbility").toInt32()), MyQObject::NoAbility); QCOMPARE(MyQObject::Ability(m_engine->evaluate("MyQObject.FooAbility").toInt32()), @@ -2042,6 +2075,9 @@ void tst_QScriptExtQObject::classEnums() QCOMPARE(MyQObject::Ability(m_engine->evaluate("MyQObject.AllAbility").toInt32()), MyQObject::AllAbility); + // Constructors for flags are not provided + QVERIFY(m_engine->evaluate("MyQObject.Ability").isUndefined()); + QScriptValue::PropertyFlags expectedEnumFlags = QScriptValue::ReadOnly | QScriptValue::Undeletable; QCOMPARE(myClass.propertyFlags("FooPolicy"), expectedEnumFlags); QCOMPARE(myClass.propertyFlags("BarPolicy"), expectedEnumFlags); @@ -2094,6 +2130,25 @@ void tst_QScriptExtQObject::classEnums() QCOMPARE(ret.isNumber(), true); } + m_myObject->resetQtFunctionInvoked(); + { + QScriptValue ret = m_engine->evaluate("myObject.myInvokableWithFlagsArg(MyQObject.FooAbility)"); + QCOMPARE(m_myObject->qtFunctionInvoked(), 58); + QCOMPARE(m_myObject->qtFunctionActuals().size(), 1); + QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), int(MyQObject::FooAbility)); + QCOMPARE(ret.isNumber(), true); + QCOMPARE(ret.toInt32(), int(MyQObject::FooAbility)); + } + m_myObject->resetQtFunctionInvoked(); + { + QScriptValue ret = m_engine->evaluate("myObject.myInvokableWithQualifiedFlagsArg(MyQObject.BarAbility)"); + QCOMPARE(m_myObject->qtFunctionInvoked(), 59); + QCOMPARE(m_myObject->qtFunctionActuals().size(), 1); + QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), int(MyQObject::BarAbility)); + QCOMPARE(ret.isNumber(), true); + QCOMPARE(ret.toInt32(), int(MyQObject::BarAbility)); + } + // enum properties are not deletable or writable QVERIFY(!m_engine->evaluate("delete MyQObject.BazPolicy").toBool()); myClass.setProperty("BazPolicy", QScriptValue()); diff --git a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp index c781108..1304f4e 100644 --- a/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp +++ b/tests/auto/qtemporaryfile/tst_qtemporaryfile.cpp @@ -95,6 +95,7 @@ private slots: void keepOpenMode(); void resetTemplateAfterError(); void setTemplateAfterOpen(); + void autoRemoveAfterFailedRename(); public: }; @@ -558,5 +559,40 @@ void tst_QTemporaryFile::setTemplateAfterOpen() QCOMPARE( temp.fileTemplate(), newTemplate ); } +void tst_QTemporaryFile::autoRemoveAfterFailedRename() +{ + struct CleanOnReturn + { + ~CleanOnReturn() + { + if (!tempName.isEmpty()) + QFile::remove(tempName); + } + + void reset() + { + tempName.clear(); + } + + QString tempName; + }; + + CleanOnReturn cleaner; + + { + QTemporaryFile file; + QVERIFY( file.open() ); + cleaner.tempName = file.fileName(); + + QVERIFY( QFile::exists(cleaner.tempName) ); + QVERIFY( !QFileInfo("i-do-not-exist").isDir() ); + QVERIFY( !file.rename("i-do-not-exist/file.txt") ); + QVERIFY( QFile::exists(cleaner.tempName) ); + } + + QVERIFY( !QFile::exists(cleaner.tempName) ); + cleaner.reset(); +} + QTEST_MAIN(tst_QTemporaryFile) #include "tst_qtemporaryfile.moc" diff --git a/tests/auto/tests.xml b/tests/auto/tests.xml deleted file mode 100644 index f197de0..0000000 --- a/tests/auto/tests.xml +++ /dev/null @@ -1,821 +0,0 @@ -<Configuration> - <Tests> - <Test name="atwrapper" location="tests/auto/atwrapper/tst_atwrapper" /> - <Test name="bic" location="tests/auto/bic/tst_bic" /> - <Test name="checkxmlfiles" location="tests/auto/checkxmlfiles/tst_checkxmlfiles" /> - <Test name="collections" location="tests/auto/collections/tst_collections" /> - <Test name="compile" location="tests/auto/compile/tst_compile" /> - <Test name="compilerwarnings" location="tests/auto/compilerwarnings/tst_compilerwarnings" /> - <Test name="exceptionsafety" location="tests/auto/exceptionsafety/tst_exceptionsafety" /> - <Test name="headers" location="tests/auto/headers/tst_headers" /> - <Test name="languagechange" location="tests/auto/languagechange/tst_languagechange" /> - <Test name="lrelease" location="tests/auto/linguist/lrelease/tst_lrelease" /> - <Test name="lconvert" location="tests/auto/linguist/lconvert/tst_convert" /> - <Test name="lupdate" location="tests/auto/linguist/lupdate/tst_lupdate" /> - <Test name="macgui" location="tests/auto/macgui/tst_macgui" platforms="macx-g++" /> - <Test name="mediaobject" location="tests/auto/mediaobject/tst_mediaobject" /> - <Test name="moc" location="tests/auto/moc/tst_moc" /> - <Test name="patternistexamplefiletree" location="tests/auto/patternistexamplefiletree/tst_patternistexamplefiletree" /> - <Test name="patternistexamples" location="tests/auto/patternistexamples/tst_patternistexamples" /> - <Test name="patternistheaders" location="tests/auto/patternistheaders/tst_patternistheaders" /> - <Test name="qabstractbutton" location="tests/auto/qabstractbutton/tst_qabstractbutton" /> - <Test name="qabstractitemmodel" location="tests/auto/qabstractitemmodel/tst_qabstractitemmodel" /> - <Test name="qabstractitemview" location="tests/auto/qabstractitemmodel/tst_qabstractitemmodel" /> - <Test name="qabstractmessagehandler" location="tests/auto/qabstractmessagehandler/tst_qabstractmessagehandler" /> - <Test name="qabstractprintdialog" location="tests/auto/qabstractprintdialog/tst_qabstractprintdialog" /> - <Test name="qabstractproxymodel" location="tests/auto/qabstractproxymodel/tst_qabstractproxymodel" /> - <Test name="qabstractscrollarea" location="tests/auto/qabstractscrollarea/tst_qabstractscrollarea" /> - <Test name="qabstractslider" location="tests/auto/qabstractslider/tst_qabstractslider" /> - <Test name="qabstractsocket" location="tests/auto/qabstractsocket/tst_qabstractsocket" /> - <Test name="qabstractspinbox" location="tests/auto/qabstractspinbox/tst_qabstractspinbox" /> - <Test name="qabstracttextdocumentlayout" location="tests/auto/qabstracttextdocumentlayout/tst_qabstracttextdocumentlayout" /> - <Test name="qabstracturiresolver" location="tests/auto/qabstracturiresolver/tst_qabstracturiresolver" /> - <Test name="qabstractxmlforwarditerator" location="tests/auto/qabstractxmlforwarditerator/tst_qabstractxmlforwarditerator" /> - <Test name="qabstractxmlnodemodel" location="tests/auto/qabstractxmlnodemodel/tst_qabstractxmlnodemodel" /> - <Test name="qabstractxmlreceiver" location="tests/auto/qabstractxmlreceiver/tst_qabstractxmlreceiver" /> - <Test name="qaccessibility" location="tests/auto/qaccessibility/tst_qaccessibility" /> - <Test name="qaccessibility_mac" location="tests/auto/qaccessibility_mac/tst_qaccessibility_mac" /> - <Test name="qaction" location="tests/auto/qaction/tst_qaction" /> - <Test name="qactiongroup" location="tests/auto/qactiongroup/tst_qactiongroup" /> - <Test name="qalgorithms" location="tests/auto/qalgorithms/tst_qalgorithms" /> - <Test name="qapplication" location="tests/auto/qapplication/tst_qapplication" /> - <Test name="qatomicint" location="tests/auto/qatomicint/tst_qatomicint" /> - <Test name="qatomicpointer" location="tests/auto/qatomicpointer/tst_qatomicpointer" /> - <Test name="qautoptr" location="tests/auto/qautoptr/tst_qautoptr" /> - <Test name="qbitarray" location="tests/auto/qbitarray/tst_qbitarray" /> - <Test name="qboxlayout" location="tests/auto/qboxlayout/tst_qboxlayout" /> - <Test name="qbrush" location="tests/auto/qbrush/tst_qbrush" /> - <Test name="qbuffer" location="tests/auto/qbuffer/tst_qbuffer" /> - <Test name="qbuttongroup" location="tests/auto/qbuttongroup/tst_qbuttongroup" /> - <Test name="qbytearray" location="tests/auto/qbytearray/tst_qbytearray" /> - <Test name="qcache" location="tests/auto/qcache/tst_qcache" /> - <Test name="qcalendarwidget" location="tests/auto/qcalendarwidget/tst_qcalendarwidget" /> - <Test name="qchar" location="tests/auto/qchar/tst_qchar" /> - <Test name="qcheckbox" location="tests/auto/qcheckbox/tst_qcheckbox" /> - <Test name="qclipboard" location="tests/auto/qclipboard/tst_qclipboard" /> - <Test name="qcolor" location="tests/auto/qcolor/tst_qcolor" /> - <Test name="qcolordialog" location="tests/auto/qcolordialog/tst_qcolordialog" /> - <Test name="qcolumnview" location="tests/auto/qcolumnview/tst_qcolumnview" /> - <Test name="qcombobox" location="tests/auto/qcombobox/tst_qcombobox" /> - <Test name="qcommandlinkbutton" location="tests/auto/qcommandlinkbutton/tst_qcommandlinkbutton" /> - <Test name="qcompleter" location="tests/auto/qcompleter/tst_qcompleter" /> - <Test name="qcomplextext" location="tests/auto/qcomplextext/tst_qcomplextext" /> - <Test name="qcopchannel" location="tests/auto/qcopchannel/tst_qcopchannel" /> - <Test name="qcoreapplication" location="tests/auto/qcoreapplication/tst_qcoreapplication" /> - <Test name="qcryptographichash" location="tests/auto/qcryptographichash/tst_qcryptographichash" /> - <Test name="qcssparser" location="tests/auto/qcssparser/tst_qcssparser" /> - <Test name="qdatastream" location="tests/auto/qdatastream/tst_qdatastream" /> - <Test name="qdatawidgetmapper" location="tests/auto/qdatawidgetmapper/tst_qdatawidgetmapper" /> - <Test name="qdate" location="tests/auto/qdate/tst_qdate" /> - <Test name="qdatetime" location="tests/auto/qdatetime/tst_qdatetime" /> - <Test name="qdatetimeedit" location="tests/auto/qdatetimeedit/tst_qdatetimeedit" /> - <Test name="qdbusabstractadaptor" location="tests/auto/qdbusabstractadaptor/tst_qdbusabstractadaptor" /> - <Test name="qdbusconnection" location="tests/auto/qdbusconnection/tst_qdbusconnection" /> - <Test name="qdbuscontext" location="tests/auto/qdbuscontext/tst_qdbuscontext" /> - <Test name="qdbusinterface" location="tests/auto/qdbusinterface/tst_qdbusinterface" /> - <Test name="qdbuslocalcalls" location="tests/auto/qdbuslocalcalls/tst_qdbuslocalcalls" /> - <Test name="qdbusmarshall" location="tests/auto/qdbusmarshall/tst_qdbusmarshall" /> - <Test name="qdbusmetaobject" location="tests/auto/qdbusmetaobject/tst_qdbusmetaobject" /> - <Test name="qdbusmetatype" location="tests/auto/qdbusmetatype/tst_qdbusmetatype" /> - <Test name="qdbusperformance" location="tests/auto/qdbusperformance/tst_qdbusperformance" /> - <Test name="qdbusreply" location="tests/auto/qdbusreply/tst_qdbusreply" /> - <Test name="qdbusserver" location="tests/auto/qdbusserver/tst_qdbusserver" /> - <Test name="qdbusthreading" location="tests/auto/qdbusthreading/tst_qdbusthreading" /> - <Test name="qdbusxmlparser" location="tests/auto/qdbusxmlparser/tst_qdbusxmlparser" /> - <Test name="qdebug" location="tests/auto/qdebug/tst_qdebug" /> - <Test name="qdesktopservices" location="tests/auto/qdesktopservices/tst_qdesktopservices" /> - <Test name="qdesktopwidget" location="tests/auto/qdesktopwidget/tst_qdesktopwidget" /> - <Test name="qdial" location="tests/auto/qdial/tst_qdial" /> - <Test name="qdialog" location="tests/auto/qdialog/tst_qdialog" /> - <Test name="qdialogbuttonbox" location="tests/auto/qdialogbuttonbox/tst_qdialogbuttonbox" /> - <Test name="qdir" location="tests/auto/qdir/tst_qdir" /> - <Test name="qdirectpainter" location="tests/auto/qdirectpainter/tst_qdirectpainter" /> - <Test name="qdiriterator" location="tests/auto/qdiriterator/tst_qdiriterator" /> - <Test name="qdirmodel" location="tests/auto/qdirmodel/tst_qdirmodel" /> - <Test name="qdockwidget" location="tests/auto/qdockwidget/tst_qdockwidget" /> - <Test name="qdom" location="tests/auto/qdom/tst_qdom" /> - <Test name="qdoublespinbox" location="tests/auto/qdoublespinbox/tst_qdoublespinbox" /> - <Test name="qdoublevalidator" location="tests/auto/qdoublevalidator/tst_qdoublevalidator" /> - <Test name="qdrag" location="tests/auto/qdrag/tst_qdrag" /> - <Test name="qerrormessage" location="tests/auto/qerrormessage/tst_qerrormessage" /> - <Test name="qevent" location="tests/auto/qevent/tst_qevent" /> - <Test name="qeventloop" location="tests/auto/qeventloop/tst_qeventloop" /> - <Test name="qexplicitlyshareddatapointer" location="tests/auto/qexplicitlyshareddatapointer/tst_qexplicitlyshareddatapointer" /> - <Test name="qfile" location="tests/auto/qfile/tst_qfile" /> - <Test name="qfiledialog" location="tests/auto/qfiledialog/tst_qfiledialog" /> - <Test name="qfileinfo" location="tests/auto/qfileinfo/tst_qfileinfo" /> - <Test name="qfilesystemmodel" location="tests/auto/qfilesystemmodel/tst_qfilesystemmodel" /> - <Test name="qfilesystemwatcher" location="tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher" /> - <Test name="qflags" location="tests/auto/qflags/tst_qflags" /> - <Test name="qfocusevent" location="tests/auto/qfocusevent/tst_qfocusevent" /> - <Test name="qfocusframe" location="tests/auto/qfocusframe/tst_qfocusframe" /> - <Test name="qfont" location="tests/auto/qfont/tst_qfont" /> - <Test name="qfontcombobox" location="tests/auto/qfontcombobox/tst_qfontcombobox" /> - <Test name="qfontdatabase" location="tests/auto/qfontdatabase/tst_qfontdatabase" /> - <Test name="qfontdialog" location="tests/auto/qfontdialog/tst_qfontdialog" /> - <Test name="qfontmetrics" location="tests/auto/qfontmetrics/tst_qfontmetrics" /> - <Test name="qformlayout" location="tests/auto/qformlayout/tst_qformlayout" /> - <Test name="qftp" location="tests/auto/qftp/tst_qftp" /> - <Test name="q_func_info" location="tests/auto/q_func_info/tst_q_func_info" /> - <Test name="qfuture" location="tests/auto/qfuture/tst_qfuture" /> - <Test name="qfuturewatcher" location="tests/auto/qfuturewatcher/tst_qfuturewatcher" /> - <Test name="qgetputenv" location="tests/auto/qgetputenv/tst_qgetputenv" /> - <Test name="qgl" location="tests/auto/qgl/tst_qgl" /> - <Test name="qglobal" location="tests/auto/qglobal/tst_qglobal" /> - <Test name="qgraphicsgridlayout" location="tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout" /> - <Test name="qgraphicsitem" location="tests/auto/qgraphicsitem/tst_qgraphicsitem" /> - <Test name="qgraphicsitemanimation" location="tests/auto/qgraphicsitemanimation/tst_qgraphicsitemanimation" /> - <Test name="qgraphicslayout" location="tests/auto/qgraphicslayout/tst_qgraphicslayout" /> - <Test name="qgraphicslayoutitem" location="tests/auto/qgraphicslayoutitem/tst_qgraphicslayoutitem" /> - <Test name="qgraphicslinearlayout" location="tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout" /> - <Test name="qgraphicsanchorlayout" location="tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout" /> - <Test name="qgraphicspixmapitem" location="tests/auto/qgraphicspixmapitem/tst_qgraphicspixmapitem" /> - <Test name="qgraphicspolygonitem" location="tests/auto/qgraphicspolygonitem/tst_qgraphicspolygonitem" /> - <Test name="qgraphicsproxywidget" location="tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget" /> - <Test name="qgraphicsscene" location="tests/auto/qgraphicsscene/tst_qgraphicsscene" /> - <Test name="qgraphicsview" location="tests/auto/qgraphicsview/tst_qgraphicsview" /> - <Test name="qgraphicswidget" location="tests/auto/qgraphicswidget/tst_qgraphicswidget" /> - <Test name="qgridlayout" location="tests/auto/qgridlayout/tst_qgridlayout" /> - <Test name="qgroupbox" location="tests/auto/qgroupbox/tst_qgroupbox" /> - <Test name="qguivariant" location="tests/auto/qguivariant/tst_qguivariant" /> - <Test name="qhash" location="tests/auto/qhash/tst_qhash" /> - <Test name="qheaderview" location="tests/auto/qheaderview/tst_qheaderview" /> - <Test name="qhelpcontentmodel" location="tests/auto/qhelpcontentmodel/tst_qhelpcontentmodel" /> - <Test name="qhelpenginecore" location="tests/auto/qhelpenginecore/tst_qhelpenginecore" /> - <Test name="qhelpgenerator" location="tests/auto/qhelpgenerator/tst_qhelpgenerator" /> - <Test name="qhelpindexmodel" location="tests/auto/qhelpindexmodel/tst_qhelpindexmodel" /> - <Test name="qhelpprojectdata" location="tests/auto/qhelpprojectdata/tst_qhelpprojectdata" /> - <Test name="qhostaddress" location="tests/auto/qhostaddress/tst_qhostaddress" /> - <Test name="qhostinfo" location="tests/auto/qhostinfo/tst_qhostinfo" /> - <Test name="qhttp" location="tests/auto/qhttp/tst_qhttp" /> - <Test name="qhttpnetworkconnection" location="tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection" /> - <Test name="qhttpnetworkreply" location="tests/auto/qhttpnetworkreply/tst_qhttpnetworkreply" /> - <Test name="qhttpsocketengine" location="tests/auto/qhttpsocketengine/tst_qhttpsocketengine" /> - <Test name="qicoimageformat" location="tests/auto/qicoimageformat/tst_qicoimageformat" /> - <Test name="qicon" location="tests/auto/qicon/tst_qicon" /> - <Test name="qimage" location="tests/auto/qimage/tst_qimage" /> - <Test name="qimageiohandler" location="tests/auto/qimageiohandler/tst_qimageiohandler" /> - <Test name="qimagereader" location="tests/auto/qimagereader/tst_qimagereader" /> - <Test name="qimagewriter" location="tests/auto/qimagewriter/tst_qimagewriter" /> - <Test name="qinputdialog" location="tests/auto/qinputdialog/tst_qinputdialog" /> - <Test name="qintvalidator" location="tests/auto/qintvalidator/tst_qintvalidator" /> - <Test name="qiodevice" location="tests/auto/qiodevice/tst_qiodevice" /> - <Test name="qitemdelegate" location="tests/auto/qitemdelegate/tst_qitemdelegate" /> - <Test name="qitemeditorfactory" location="tests/auto/qitemeditorfactory/tst_qitemeditorfactory" /> - <Test name="qitemmodel" location="tests/auto/qitemmodel/tst_qitemmodel" /> - <Test name="qitemselectionmodel" location="tests/auto/qitemselectionmodel/tst_qitemselectionmodel" /> - <Test name="qitemview" location="tests/auto/qitemview/tst_qitemview" /> - <Test name="qkeyevent" location="tests/auto/qkeyevent/tst_qkeyevent" /> - <Test name="qkeysequence" location="tests/auto/qkeysequence/tst_qkeysequence" /> - <Test name="qlabel" location="tests/auto/qlabel/tst_qlabel" /> - <Test name="qlayout" location="tests/auto/qlayout/tst_qlayout" /> - <Test name="qlcdnumber" location="tests/auto/qlcdnumber/tst_qlcdnumber" /> - <Test name="qlibrary" location="tests/auto/qlibrary/tst_qlibrary" /> - <Test name="qline" location="tests/auto/qline/tst_qline" /> - <Test name="qlineedit" location="tests/auto/qlineedit/tst_qlineedit" /> - <Test name="qlistbox" location="tests/auto/qlistbox/tst_qlistbox" /> - <Test name="qlistview" location="tests/auto/qlistview/tst_qlistview" /> - <Test name="qlistwidget" location="tests/auto/qlistwidget/tst_qlistwidget" /> - <Test name="qlocale" location="tests/auto/qlocale/tst_qlocale" /> - <Test name="qlocalsocket" location="tests/auto/qlocalsocket/tst_qlocalsocket" /> - <Test name="qmacstyle" location="tests/auto/qmacstyle/tst_qmacstyle" /> - <Test name="qmainwindow" location="tests/auto/qmainwindow/tst_qmainwindow" /> - <Test name="qmake" location="tests/auto/qmake/tst_qmake" /> - <Test name="qmap" location="tests/auto/qmap/tst_qmap" /> - <Test name="qmdiarea" location="tests/auto/qmdiarea/tst_qmdiarea" /> - <Test name="qmdisubwindow" location="tests/auto/qmdisubwindow/tst_qmdisubwindow" /> - <Test name="qmenu" location="tests/auto/qmenu/tst_qmenu" /> - <Test name="qmenubar" location="tests/auto/qmenubar/tst_qmenubar" /> - <Test name="qmessagebox" location="tests/auto/qmessagebox/tst_qmessagebox" /> - <Test name="qmetaobject" location="tests/auto/qmetaobject/tst_qmetaobject" /> - <Test name="qmetatype" location="tests/auto/qmetatype/tst_qmetatype" /> - <Test name="qmouseevent" location="tests/auto/qmouseevent/tst_qmouseevent" /> - <Test name="qmouseevent_modal" location="tests/auto/qmouseevent_modal/tst_qmousevent_modal" /> - <Test name="qmovie" location="tests/auto/qmovie/tst_qmovie" /> - <Test name="qmultiscreen" location="tests/auto/qmultiscreen/tst_qmultiscreen" /> - <Test name="qmutex" location="tests/auto/qmutex/tst_qmutex" /> - <Test name="qmutexlocker" location="tests/auto/qmutexlocker/tst_qmutexlocker" /> - <Test name="qnativesocketengine" location="tests/auto/qnativesocketengine/tst_qnativesocketengine" /> - <Test name="qnetworkcookie" location="tests/auto/qnetworkcookie/tst_qnetworkcookie" /> - <Test name="qnetworkcookiejar" location="tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar" /> - <Test name="qnetworkinterface" location="tests/auto/qnetworkinterface/tst_qnetworkinterface" /> - <Test name="qnetworkproxy" location="tests/auto/qnetworkproxy/tst_qnetworkproxy" /> - <Test name="qnetworkreply" location="tests/auto/qnetworkreply/tst_qnetworkreply" /> - <Test name="qnetworkrequest" location="tests/auto/qnetworkrequest/tst_qnetworkrequest" /> - <Test name="qnumeric" location="tests/auto/qnumeric/tst_qnumeric" /> - <Test name="qobject" location="tests/auto/qobject/tst_qobject" /> - <Test name="qobjectperformance" location="tests/auto/qobjectperformance/tst_qobjectperformance" /> - <Test name="qobjectrace" location="tests/auto/qobjectrace/tst_qobjectrace" /> - <Test name="qpaintengine" location="tests/auto/qpaintengine/tst_qpaintengine" /> - <Test name="qpainter" location="tests/auto/qpainter/tst_qpainter" /> - <Test name="qpainterpath" location="tests/auto/qpainterpath/tst_qpainterpath" /> - <Test name="qpainterpathstroker" location="tests/auto/qpainterpathstroker/tst_qpainterpathstroker" /> - <Test name="qpalette" location="tests/auto/qpalette/tst_qpalette" /> - <Test name="qpathclipper" location="tests/auto/qpathclipper/tst_qpathclipper" /> - <Test name="qpen" location="tests/auto/qpen/tst_qpen" /> - <Test name="qpicture" location="tests/auto/qpicture/tst_qpicture" /> - <Test name="qpixmap" location="tests/auto/qpixmap/tst_qpixmap" /> - <Test name="qpixmapcache" location="tests/auto/qpixmapcache/tst_qpixmapcache" /> - <Test name="qpixmapfilter" location="tests/auto/qpixmapfilter/tst_qpixmapfilter" /> - <Test name="qplaintextedit" location="tests/auto/qplaintextedit/tst_qplaintextedit" /> - <Test name="qplugin" location="tests/auto/qplugin/tst_qplugin" /> - <Test name="qpluginloader" location="tests/auto/qpluginloader/tst_qpluginloader" /> - <Test name="qpoint" location="tests/auto/qpoint/tst_qpoint" /> - <Test name="qpointarray" location="tests/auto/qpointarray/tst_qpointarray" /> - <Test name="qpointer" location="tests/auto/qpointer/tst_qpointer" /> - <Test name="qpopmenu" location="tests/auto/qpopmenu/tst_qpopmenu" /> - <Test name="qprinter" location="tests/auto/qprinter/tst_qprinter" /> - <Test name="qprinterinfo" location="tests/auto/qprinterinfo/tst_qprinterinfo" /> - <Test name="qprocess" location="tests/auto/qprocess/tst_qprocess" /> - <Test name="qprogressbar" location="tests/auto/qprogressbar/tst_qprogressbar" /> - <Test name="qprogressdialog" location="tests/auto/qprogressdialog/tst_qprogressdialog" /> - <Test name="qpushbutton" location="tests/auto/qpushbutton/tst_qpushbutton" /> - <Test name="qqueue" location="tests/auto/qqueue/tst_qqueue" /> - <Test name="qradiobutton" location="tests/auto/qradiobutton/tst_qradiobutton" /> - <Test name="qrand" location="tests/auto/qrand/tst_qrand" /> - <Test name="qreadlocker" location="tests/auto/qreadlocker/tst_qreadlocker" /> - <Test name="qreadwritelock" location="tests/auto/qreadwritelock/tst_qreadwritelock" /> - <Test name="qrect" location="tests/auto/qrect/tst_qrect" /> - <Test name="qregexp" location="tests/auto/qregexp/tst_qregexp" /> - <Test name="qregexpvalidator" location="tests/auto/qregexpvalidator/tst_qregexpvalidator" /> - <Test name="qregion" location="tests/auto/qregion/tst_qregion" /> - <Test name="qresourceengine" location="tests/auto/qresourceengine/tst_qresourceengine" /> - <Test name="qscriptable" location="tests/auto/qscriptable/tst_qscriptable" /> - <Test name="qscriptclass" location="tests/auto/qscriptclass/tst_qscriptclass" /> - <Test name="qscriptcontext" location="tests/auto/qscriptcontext/tst_qscriptcontext" /> - <Test name="qscriptcontextinfo" location="tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo" /> - <Test name="qscriptengine" location="tests/auto/qscriptengine/tst_qscriptengine" /> - <Test name="qscriptengineagent" location="tests/auto/qscriptengineagent/tst_qscriptengineagent" /> - <Test name="qscriptjstestsuite" location="tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite" /> - <Test name="qscriptobject" location="tests/auto/qscriptobject/tst_qscriptobject" /> - <Test name="qscriptstring" location="tests/auto/qscriptstring/tst_qscriptstring" /> - <Test name="qscriptvalue" location="tests/auto/qscriptvalue/tst_qscriptvalue" /> - <Test name="qscriptvalueiterator" location="tests/auto/qscriptvalueiterator/tst_qscriptvalueiterator" /> - <Test name="qscrollarea" location="tests/auto/qscrollarea/tst_qscrollarea" /> - <Test name="qscrollbar" location="tests/auto/qscrollbar/tst_qscrollbar" /> - <Test name="qscrollview" location="tests/auto/qscrollview/tst_qscrollview" /> - <Test name="qsemaphore" location="tests/auto/qsemaphore/tst_qsemaphore" /> - <Test name="qset" location="tests/auto/qset/tst_qset" /> - <Test name="qsettings" location="tests/auto/qsettings/tst_qsettings" /> - <Test name="qsharedmemory" location="tests/auto/qsharedmemory/tst_qsharedmemory" /> - <Test name="qshortcut" location="tests/auto/qshortcut/tst_qshortcut" /> - <Test name="qsidebar" location="tests/auto/qsidebar/tst_qsidebar" /> - <Test name="qsignalmapper" location="tests/auto/qsignalmapper/tst_qsignalmapper" /> - <Test name="qsignalspy" location="tests/auto/qsignalspy/tst_qsignalspy" /> - <Test name="qsimplexmlnodemodel" location="tests/auto/qsimplexmlnodemodel/tst_qsimplexmlnodemodel" /> - <Test name="qsize" location="tests/auto/qsize/tst_qsize" /> - <Test name="qsizef" location="tests/auto/qsizef/tst_qsizef" /> - <Test name="qsizegrip" location="tests/auto/qsizegrip/tst_qsizegrip" /> - <Test name="qslider" location="tests/auto/qslider/tst_qslider" /> - <Test name="qsocket" location="tests/auto/qsocket/tst_qsocket" /> - <Test name="qsocketnotifier" location="tests/auto/qsocketnotifier/tst_qsocketnotifier" /> - <Test name="qsocks5socketengine" location="tests/auto/qsocks5socketengine/tst_qsocks5socketengine" /> - <Test name="qsortfilterproxymodel" location="tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel" /> - <Test name="qsound" location="tests/auto/qsound/tst_qsound" /> - <Test name="qaudiodeviceid" location="tests/auto/qaudiodeviceid/tst_qaudiodeviceid" /> - <Test name="qaudioformat" location="tests/auto/qaudioformat/tst_qaudioformat" /> - <Test name="qaudiooutput" location="tests/auto/qaudiooutput/tst_qaudiooutput" /> - <Test name="qaudioinput" location="tests/auto/qaudioinput/tst_qaudioinput" /> - <Test name="qsourcelocation" location="tests/auto/qsourcelocation/tst_qsourcelocation" /> - <Test name="qspinbox" location="tests/auto/qspinbox/tst_qspinbox" /> - <Test name="qsplitter" location="tests/auto/qsplitter/tst_qsplitter" /> - <Test name="qsql" location="tests/auto/qsql/tst_qsql" /> - <Test name="qsqlbatch" location="tests/auto/qsqlbatch/tst_qsqlbatch" /> - <Test name="qsqlcursor" location="tests/auto/qsqlcursor/tst_qsqlcursor" /> - <Test name="qsqldatabase" location="tests/auto/qsqldatabase/tst_qsqldatabase" /> - <Test name="qsqlerror" location="tests/auto/qsqlerror/tst_qsqlerror" /> - <Test name="qsqlfield" location="tests/auto/qsqlfield/tst_qsqlfield" /> - <Test name="qsqlquery" location="tests/auto/qsqlquery/tst_qsqlquery" /> - <Test name="qsqlquerymodel" location="tests/auto/qsqlquerymodel/tst_qsqlquerymodel" /> - <Test name="qsqlrecord" location="tests/auto/qsqlrecord/tst_qsqlrecord" /> - <Test name="qsqlrelationaltablemodel" location="tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel" /> - <Test name="qsqlselectcursor" location="tests/auto/qsqlselectcursor/tst_qsqlselectcursor" /> - <Test name="qsqltablemodel" location="tests/auto/qsqltablemodel/tst_qsqltablemodel" /> - <Test name="qsqlthread" location="tests/auto/qsqlthread/tst_qsqlthread" /> - <Test name="qsslcertificate" location="tests/auto/qsslcertificate/tst_qsslcertificate" /> - <Test name="qsslcipher" location="tests/auto/qsslcipher/tst_qsslcipher" /> - <Test name="qsslerror" location="tests/auto/qsslerror/tst_qsslerror" /> - <Test name="qsslkey" location="tests/auto/qsslkey/tst_qsslkey" /> - <Test name="qsslsocket" location="tests/auto/qsslsocket/tst_qsslsocket" /> - <Test name="qstackedlayout" location="tests/auto/qstackedlayout/tst_qstackedlayout" /> - <Test name="qstackedwidget" location="tests/auto/qstackedwidget/tst_qstackedwidget" /> - <Test name="qstandarditem" location="tests/auto/qstandarditem/tst_qstandarditem" /> - <Test name="qstandarditemmodel" location="tests/auto/qstandarditemmodel/tst_qstandarditemmodel" /> - <Test name="qstatusbar" location="tests/auto/qstatusbar/tst_qstatusbar" /> - <Test name="qstl" location="tests/auto/qstl/tst_qstl" /> - <Test name="qstring" location="tests/auto/qstring/tst_qstring" /> - <Test name="qstringlist" location="tests/auto/qstringlist/tst_qstringlist" /> - <Test name="qstringlistmodel" location="tests/auto/qstringlistmodel/tst_qstringlistmodel" /> - <Test name="qstyle" location="tests/auto/qstyle/tst_qstyle" /> - <Test name="qstyleoption" location="tests/auto/qstyleoption/tst_qstyleoption" /> - <Test name="qstylesheetstyle" location="tests/auto/qstylesheetstyle/tst_qstylesheetstyle" /> - <Test name="qsvgdevice" location="tests/auto/qsvgdevice/tst_qsvgdevice" /> - <Test name="qsvggenerator" location="tests/auto/qsvggenerator/tst_qsvggenerator" /> - <Test name="qsvgrenderer" location="tests/auto/qsvgrenderer/tst_qsvgrenderer" /> - <Test name="qsyntaxhighlighter" location="tests/auto/qsyntaxhighlighter/tst_qsyntaxhighlighter" /> - <Test name="qsysinfo" location="tests/auto/qsysinfo/tst_qsysinfo" /> - <Test name="qsystemsemaphore" location="tests/auto/qsystemsemaphore/tst_qsystemsemaphore" /> - <Test name="qsystemtrayicon" location="tests/auto/qsystemtrayicon/tst_qsystemtrayicon" /> - <Test name="qtabbar" location="tests/auto/qtabbar/tst_qtabbar" /> - <Test name="qtableview" location="tests/auto/qtableview/tst_qtableview" /> - <Test name="qtablewidget" location="tests/auto/qtablewidget/tst_qtablewidget" /> - <Test name="qtabwidget" location="tests/auto/qtabwidget/tst_qtabwidget" /> - <Test name="qtconcurrentfilter" location="tests/auto/qtconcurrentfilter/tst_qtconcurrentfilter" /> - <Test name="qtconcurrentiteratekernel" location="tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel" /> - <Test name="qtconcurrentmap" location="tests/auto/qtconcurrentmap/tst_qtconcurrentmap" /> - <Test name="qtconcurrentrun" location="tests/auto/qtconcurrentrun/tst_qtconcurrentrun" /> - <Test name="qtconcurrentthreadengine" location="tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine" /> - <Test name="qtcpserver" location="tests/auto/qtcpserver/tst_qtcpserver" /> - <Test name="qtcpsocket" location="tests/auto/qtcpsocket/tst_qtcpsocket" /> - <Test name="qtemporaryfile" location="tests/auto/qtemporaryfile/tst_qtemporaryfile" /> - <Test name="qtessellator" location="tests/auto/qtessellator/tst_qtessellator" /> - <Test name="qtextblock" location="tests/auto/qtextblock/tst_qtextblock" /> - <Test name="qtextboundaryfinder" location="tests/auto/qtextboundaryfinder/tst_qtextboundaryfinder" /> - <Test name="qtextbrowser" location="tests/auto/qtextbrowser/tst_qtextbrowser" /> - <Test name="qtextcodec" location="tests/auto/qtextcodec/tst_qtextcodec" /> - <Test name="qtextcursor" location="tests/auto/qtextcursor/tst_qtextcursor" /> - <Test name="qtextdocument" location="tests/auto/qtextdocument/tst_qtextdocument" /> - <Test name="qtextdocumentfragment" location="tests/auto/qtextdocumentfragment/tst_qtextdocumentfragment" /> - <Test name="qtextdocumentlayout" location="tests/auto/qtextdocumentlayout/tst_qtextdocumentlayout" /> - <Test name="qtextedit" location="tests/auto/qtextedit/tst_qtextedit" /> - <Test name="qtextformat" location="tests/auto/qtextformat/tst_qtextformat" /> - <Test name="qtextlayout" location="tests/auto/qtextlayout/tst_qtextlayout" /> - <Test name="qtextlist" location="tests/auto/qtextlist/tst_qtextlist" /> - <Test name="qtextobject" location="tests/auto/qtextobject/tst_qtextobject" /> - <Test name="qtextpiecetable" location="tests/auto/qtextpiecetable/tst_qtextpiecetable" /> - <Test name="qtextscriptengine" location="tests/auto/qtextscriptengine/tst_qtextscriptengine" /> - <Test name="qtextstream" location="tests/auto/qtextstream/tst_qtextstream" /> - <Test name="qtexttable" location="tests/auto/qtexttable/tst_qtexttable" /> - <Test name="qthread" location="tests/auto/qthread/tst_qthread" /> - <Test name="qthreadpool" location="tests/auto/qthreadpool/tst_qthreadpool" /> - <Test name="qthreadstorage" location="tests/auto/qthreadstorage/tst_qthreadstorage" /> - <Test name="qtime" location="tests/auto/qtime/tst_qtime" /> - <Test name="qtimeline" location="tests/auto/qtimeline/tst_qtimeline" /> - <Test name="qtimer" location="tests/auto/qtimer/tst_qtimer" /> - <Test name="qtmd5" location="tests/auto/qtmd5/tst_qtmd5" /> - <Test name="qtoolbar" location="tests/auto/qtoolbar/tst_qtoolbar" /> - <Test name="qtoolbox" location="tests/auto/qtoolbox/tst_qtoolbox" /> - <Test name="qtoolbutton" location="tests/auto/qtoolbutton/tst_qtoolbutton" /> - <Test name="qtooltip" location="tests/auto/qtooltip/tst_qtooltip" /> - <Test name="qtransform" location="tests/auto/qtransform/tst_qtransform" /> - <Test name="qtransformedscreen" location="tests/auto/qtransformedscreen/tst_qtransformedscreen" /> - <Test name="qtranslator" location="tests/auto/qtranslator/tst_qtranslator" /> - <Test name="qtreeview" location="tests/auto/qtreeview/tst_qtreeview" /> - <Test name="qtreewidget" location="tests/auto/qtreewidget/tst_qtreewidget" /> - <Test name="qtreewidgetitemiterator" location="tests/auto/qtreewidgetitemiterator/tst_qtreewidgetitemiterator" /> - <Test name="qtwidgets" location="tests/auto/qtwidgets/tst_qtwidgets" /> - <Test name="qudpsocket" location="tests/auto/qudpsocket/tst_qudpsocket" /> - <Test name="qundogroup" location="tests/auto/qundogroup/tst_qundogroup" /> - <Test name="qundostack" location="tests/auto/qundostack/tst_qundostack" /> - <Test name="quridrag" location="tests/auto/quridrag/tst_quridrag" /> - <Test name="qurl" location="tests/auto/qurl/tst_qurl" /> - <Test name="quuid" location="tests/auto/quuid/tst_quuid" /> - <Test name="qvariant" location="tests/auto/qvariant/tst_qvariant" /> - <Test name="qvarlengtharray" location="tests/auto/qvarlengtharray/tst_qvarlengtharray" /> - <Test name="qvector" location="tests/auto/qvector/tst_qvector" /> - <Test name="qwaitcondition" location="tests/auto/qwaitcondition/tst_qwaitcondition" /> - <Test name="qwebframe" location="tests/auto/qwebframe/tst_qwebframe" /> - <Test name="qwebpage" location="tests/auto/qwebpage/tst_qwebpage" /> - <Test name="qwidget" location="tests/auto/qwidget/tst_qwidget" /> - <Test name="qwidgetaction" location="tests/auto/qwidgetaction/tst_qwidgetaction" /> - <Test name="qwidgetstack" location="tests/auto/qwidgetstack/tst_qwidgetstack" /> - <Test name="qwidget_window" location="tests/auto/qwidget_window/tst_qwidget_window" /> - <Test name="qwindowsurface" location="tests/auto/qwindowsurface/tst_qwindowsurface" /> - <Test name="qwineventnotifier" location="tests/auto/qwineventnotifier/tst_qwineventnotifier" /> - <Test name="qwizard" location="tests/auto/qwizard/tst_qwizard" /> - <Test name="qwmatrix" location="tests/auto/qwmatrix/tst_qwmatrix" /> - <Test name="qworkspace" location="tests/auto/qworkspace/tst_qworkspace" /> - <Test name="qwritelocker" location="tests/auto/qwritelocker/tst_qwritelocker" /> - <Test name="qwsembedwidget" location="tests/auto/qwsembedwidget/tst_qwsembedwidget" /> - <Test name="qwsinputmethod" location="tests/auto/qwsinputmethod/tst_qwsinputmethod" /> - <Test name="qwswindowsystem" location="tests/auto/qwswindowsystem/tst_qwswindowsystem" /> - <Test name="qx11info" location="tests/auto/qx11info/tst_qx11info" /> - <Test name="qxml" location="tests/auto/qxml/tst_qxml" /> - <Test name="qxmlformatter" location="tests/auto/qxmlformatter/tst_qxmlformatter" /> - <Test name="qxmlinputsource" location="tests/auto/qxmlinputsource/tst_qxmlinputsource" /> - <Test name="qxmlitem" location="tests/auto/qxmlitem/tst_qxmlitem" /> - <Test name="qxmlname" location="tests/auto/qxmlname/tst_qxmlname" /> - <Test name="qxmlnamepool" location="tests/auto/qxmlnamepool/tst_qxmlnamepool" /> - <Test name="qxmlnodemodelindex" location="tests/auto/qxmlnodemodelindex/tst_qxmlnodemodelindex" /> - <Test name="qxmlquery" location="tests/auto/qxmlquery/tst_qxmlquery" /> - <Test name="qxmlresultitems" location="tests/auto/qxmlresultitems/tst_qxmlresultitems" /> - <Test name="qxmlserializer" location="tests/auto/qxmlserializer/tst_qxmlserializer" /> - <Test name="qxmlsimplereader" location="tests/auto/qxmlsimplereader/tst_qxmlsimplereader" /> - <Test name="qxmlstream" location="tests/auto/qxmlstream/tst_qxmlstream" /> - <Test name="selftests" location="tests/auto/selftests/tst_selftests" /> - <Test name="symbols" location="tests/auto/symbols/tst_symbols" /> - <Test name="tests" location="tests/auto/tests/tst_tests" /> - <Test name="uic" location="tests/auto/uic/tst_uic" /> - <Test name="xmlpatterns" location="tests/auto/xmlpatterns/tst_xmlpatterns" /> - <Test name="xmlpatternsxqts" location="tests/auto/xmlpatternsxqts/tst_xmlpatternsxqts" /> - </Tests> - <TestSuites> - <TestSuite name="qt-4.4"> - <Test id="atwrapper" /> - <Test id="bic" /> - <Test id="checkxmlfiles" /> - <Test id="collections" /> - <Test id="compile" /> - <Test id="compilerwarnings" /> - <Test id="exceptionsafety" /> - <Test id="headers" /> - <Test id="languagechange" /> - <Test id="lrelease" /> - <Test id="lconvert" /> - <Test id="lupdate" /> - <Test id="macgui" /> - <Test id="mediaobject" /> - <Test id="moc" /> - <Test id="patternistexamplefiletree" /> - <Test id="patternistexamples" /> - <Test id="patternistheaders" /> - <Test id="qabstractbutton" /> - <Test id="qabstractitemmodel" /> - <Test id="qabstractitemview" /> - <Test id="qabstractmessagehandler" /> - <Test id="qabstractprintdialog" /> - <Test id="qabstractproxymodel" /> - <Test id="qabstractscrollarea" /> - <Test id="qabstractslider" /> - <Test id="qabstractsocket" /> - <Test id="qabstractspinbox" /> - <Test id="qabstracttextdocumentlayout" /> - <Test id="qabstracturiresolver" /> - <Test id="qabstractxmlforwarditerator" /> - <Test id="qabstractxmlnodemodel" /> - <Test id="qabstractxmlreceiver" /> - <Test id="qaccessibility" /> - <Test id="qaccessibility_mac" /> - <Test id="qaction" /> - <Test id="qactiongroup" /> - <Test id="qalgorithms" /> - <Test id="qapplication" /> - <Test id="qatomicint" /> - <Test id="qatomicpointer" /> - <Test id="qautoptr" /> - <Test id="qbitarray" /> - <Test id="qboxlayout" /> - <Test id="qbrush" /> - <Test id="qbuffer" /> - <Test id="qbuttongroup" /> - <Test id="qbytearray" /> - <Test id="qcache" /> - <Test id="qcalendarwidget" /> - <Test id="qchar" /> - <Test id="qcheckbox" /> - <Test id="qclipboard" /> - <Test id="qcolor" /> - <Test id="qcolordialog" /> - <Test id="qcolumnview" /> - <Test id="qcombobox" /> - <Test id="qcommandlinkbutton" /> - <Test id="qcompleter" /> - <Test id="qcomplextext" /> - <Test id="qcopchannel" /> - <Test id="qcoreapplication" /> - <Test id="qcryptographichash" /> - <Test id="qcssparser" /> - <Test id="qdatastream" /> - <Test id="qdatawidgetmapper" /> - <Test id="qdate" /> - <Test id="qdatetime" /> - <Test id="qdatetimeedit" /> - <Test id="qdbusabstractadaptor" /> - <Test id="qdbusconnection" /> - <Test id="qdbuscontext" /> - <Test id="qdbusinterface" /> - <Test id="qdbuslocalcalls" /> - <Test id="qdbusmarshall" /> - <Test id="qdbusmetaobject" /> - <Test id="qdbusmetatype" /> - <Test id="qdbusperformance" /> - <Test id="qdbusreply" /> - <Test id="qdbusserver" /> - <Test id="qdbusthreading" /> - <Test id="qdbusxmlparser" /> - <Test id="qdebug" /> - <Test id="qdesktopservices" /> - <Test id="qdesktopwidget" /> - <Test id="qdial" /> - <Test id="qdialog" /> - <Test id="qdialogbuttonbox" /> - <Test id="qdir" /> - <Test id="qdirectpainter" /> - <Test id="qdiriterator" /> - <Test id="qdirmodel" /> - <Test id="qdockwidget" /> - <Test id="qdom" /> - <Test id="qdoublespinbox" /> - <Test id="qdoublevalidator" /> - <Test id="qdrag" /> - <Test id="qerrormessage" /> - <Test id="qevent" /> - <Test id="qeventloop" /> - <Test id="qexplicitlyshareddatapointer" /> - <Test id="qfile" /> - <Test id="qfiledialog" /> - <Test id="qfileinfo" /> - <Test id="qfilesystemmodel" /> - <Test id="qfilesystemwatcher" /> - <Test id="qflags" /> - <Test id ="qfocusevent" /> - <Test id="qfocusframe" /> - <Test id="qfont" /> - <Test id="qfontcombobox" /> - <Test id="qfontdatabase" /> - <Test id="qfontdialog" /> - <Test id="qfontmetrics" /> - <Test id="qformlayout" /> - <Test id="qftp" /> - <Test id="q_func_info" /> - <Test id="qfuture" /> - <Test id="qfuturewatcher" /> - <Test id="qgetputenv" /> - <Test id="qgl" /> - <Test id="qglobal" /> - <Test id="qgraphicsgridlayout" /> - <Test id="qgraphicsitem" /> - <Test id="qgraphicsitemanimation" /> - <Test id="qgraphicslayout" /> - <Test id="qgraphicslayoutitem" /> - <Test id="qgraphicslinearlayout" /> - <Test id="qgraphicsanchorlayout" /> - <Test id="qgraphicspixmapitem" /> - <Test id="qgraphicspolygonitem" /> - <Test id="qgraphicsproxywidget" /> - <Test id="qgraphicsscene" /> - <Test id="qgraphicsview" /> - <Test id="qgraphicswidget" /> - <Test id="qgridlayout" /> - <Test id="qgroupbox" /> - <Test id="qguivariant" /> - <Test id="qhash" /> - <Test id="qheaderview" /> - <Test id="qhelpcontentmodel" /> - <Test id="qhelpenginecore" /> - <Test id="qhelpgenerator" /> - <Test id="qhelpindexmodel" /> - <Test id="qhelpprojectdata" /> - <Test id="qhostaddress" /> - <Test id="qhostinfo" /> - <Test id="qhttp" /> - <Test id="qhttpnetworkconnection" /> - <Test id="qhttpnetworkreply" /> - <Test id="qhttpsocketengine" /> - <Test id="qicoimageformat" /> - <Test id="qicon" /> - <Test id="qimage" /> - <Test id="qimageiohandler" /> - <Test id="qimagereader" /> - <Test id="qimagewriter" /> - <Test id="qinputdialog" /> - <Test id="qintvalidator" /> - <Test id="qiodevice" /> - <Test id="qitemdelegate" /> - <Test id="qitemeditorfactory" /> - <Test id="qitemmodel" /> - <Test id="qitemselectionmodel" /> - <Test id="qitemview" /> - <Test id="qkeyevent" /> - <Test id="qkeysequence" /> - <Test id="qlabel" /> - <Test id="qlayout" /> - <Test id="qlcdnumber" /> - <Test id="qlibrary" /> - <Test id="qline" /> - <Test id="qlineedit" /> - <Test id="qlistbox" /> - <Test id="qlistview" /> - <Test id="qlistwidget" /> - <Test id="qlocale" /> - <Test id="qlocalsocket" /> - <Test id="qmacstyle" /> - <Test id="qmainwindow" /> - <Test id="qmake" /> - <Test id="qmap" /> - <Test id="qmdiarea" /> - <Test id="qmdisubwindow" /> - <Test id="qmenu" /> - <Test id="qmenubar" /> - <Test id="qmessagebox" /> - <Test id="qmetaobject" /> - <Test id="qmetatype" /> - <Test id="qmouseevent" /> - <Test id="qmouseevent_modal" /> - <Test id="qmovie" /> - <Test id="qmultiscreen" /> - <Test id="qmutex" /> - <Test id="qmutexlocker" /> - <Test id="qnativesocketengine" /> - <Test id="qnetworkcookie" /> - <Test id="qnetworkcookiejar" /> - <Test id="qnetworkinterface" /> - <Test id="qnetworkproxy" /> - <Test id="qnetworkreply" /> - <Test id="qnetworkrequest" /> - <Test id="qnumeric" /> - <Test id="qobject" /> - <Test id="qobjectperformance" /> - <Test id="qobjectrace" /> - <Test id="qpaintengine" /> - <Test id="qpainter" /> - <Test id="qpainterpath" /> - <Test id="qpainterpathstroker" /> - <Test id="qpalette" /> - <Test id="qpathclipper" /> - <Test id="qpen" /> - <Test id="qpicture" /> - <Test id="qpixmap" /> - <Test id="qpixmapcache" /> - <Test id="qplaintextedit" /> - <Test id="qplugin" /> - <Test id="qpluginloader" /> - <Test id="qpoint" /> - <Test id="qpointarray" /> - <Test id="qpointer" /> - <Test id="qpopmenu" /> - <Test id="qprinter" /> - <Test id="qprinterinfo" /> - <Test id="qprocess" /> - <Test id="qprogressbar" /> - <Test id="qprogressdialog" /> - <Test id="qpushbutton" /> - <Test id="qqueue" /> - <Test id="qradiobutton" /> - <Test id="qrand" /> - <Test id="qreadlocker" /> - <Test id="qreadwritelock" /> - <Test id="qrect" /> - <Test id="qregexp" /> - <Test id="qregexpvalidator" /> - <Test id="qregion" /> - <Test id="qresourceengine" /> - <Test id="qscriptable" /> - <Test id="qscriptclass" /> - <Test id="qscriptcontext" /> - <Test id="qscriptcontextinfo" /> - <Test id="qscriptengine" /> - <Test id="qscriptengineagent" /> - <Test id="qscriptjstestsuite" /> - <Test id="qscriptobject" /> - <Test id="qscriptstring" /> - <Test id="qscriptvalue" /> - <Test id="qscriptvalueiterator" /> - <Test id="qscrollarea" /> - <Test id="qscrollbar" /> - <Test id="qscrollview" /> - <Test id="qsemaphore" /> - <Test id="qset" /> - <Test id="qsettings" /> - <Test id="qsharedmemory" /> - <Test id="qshortcut" /> - <Test id="qsidebar" /> - <Test id="qsignalmapper" /> - <Test id="qsignalspy" /> - <Test id="qsimplexmlnodemodel" /> - <Test id="qsize" /> - <Test id="qsizef" /> - <Test id="qsizegrip" /> - <Test id="qslider" /> - <Test id="qsocket" /> - <Test id="qsocketnotifier" /> - <Test id="qsocks5socketengine" /> - <Test id="qsortfilterproxymodel" /> - <Test id="qsound" /> - <Test id="qaudiodeviceid" /> - <Test id="qaudioformat" /> - <Test id="qaudiooutput" /> - <Test id="qaudioinput" /> - <Test id="qsourcelocation" /> - <Test id="qspinbox" /> - <Test id="qsplitter" /> - <Test id="qsql" /> - <Test id="qsqlbatch" /> - <Test id="qsqlcursor" /> - <Test id="qsqldatabase" /> - <Test id="qsqlerror" /> - <Test id="qsqlfield" /> - <Test id="qsqlquery" /> - <Test id="qsqlquerymodel" /> - <Test id="qsqlrecord" /> - <Test id="qsqlrelationaltablemodel" /> - <Test id="qsqlselectcursor" /> - <Test id="qsqltablemodel" /> - <Test id="qsqlthread" /> - <Test id="qsslcertificate" /> - <Test id="qsslcipher" /> - <Test id="qsslerror" /> - <Test id="qsslkey" /> - <Test id="qsslsocket" /> - <Test id="qstackedlayout" /> - <Test id="qstackedwidget" /> - <Test id="qstandarditem" /> - <Test id="qstandarditemmodel" /> - <Test id="qstatusbar" /> - <Test id="qstl" /> - <Test id="qstring" /> - <Test id="qstringlist" /> - <Test id="qstringlistmodel" /> - <Test id="qstyle" /> - <Test id="qstyleoption" /> - <Test id="qstylesheetstyle" /> - <Test id="qsvgdevice" /> - <Test id="qsvggenerator" /> - <Test id="qsvgrenderer" /> - <Test id="qsyntaxhighlighter" /> - <Test id="qsysinfo" /> - <Test id="qsystemsemaphore" /> - <Test id="qsystemtrayicon" /> - <Test id="qtabbar" /> - <Test id="qtableview" /> - <Test id="qtablewidget" /> - <Test id="qtabwidget" /> - <Test id="qtconcurrentfilter" /> - <Test id="qtconcurrentiteratekernel" /> - <Test id="qtconcurrentmap" /> - <Test id="qtconcurrentrun" /> - <Test id="qtconcurrentthreadengine" /> - <Test id="qtcpserver" /> - <Test id="qtcpsocket" /> - <Test id="qtemporaryfile" /> - <Test id="qtessellator" /> - <Test id="qtextblock" /> - <Test id="qtextboundaryfinder" /> - <Test id="qtextbrowser" /> - <Test id="qtextcodec" /> - <Test id="qtextcursor" /> - <Test id="qtextdocument" /> - <Test id="qtextdocumentfragment" /> - <Test id="qtextdocumentlayout" /> - <Test id="qtextedit" /> - <Test id="qtextformat" /> - <Test id="qtextlayout" /> - <Test id="qtextlist" /> - <Test id="qtextobject" /> - <Test id="qtextpiecetable" /> - <Test id="qtextscriptengine" /> - <Test id="qtextstream" /> - <Test id="qtexttable" /> - <Test id="qthread" /> - <Test id="qthreadpool" /> - <Test id="qthreadstorage" /> - <Test id="qtime" /> - <Test id="qtimeline" /> - <Test id="qtimer" /> - <Test id="qtmd5" /> - <Test id="qtoolbar" /> - <Test id="qtoolbox" /> - <Test id="qtoolbutton" /> - <Test id="qtooltip" /> - <Test id="qtransform" /> - <Test id="qtransformedscreen" /> - <Test id="qtranslator" /> - <Test id="qtreeview" /> - <Test id="qtreewidget" /> - <Test id="qtreewidgetitemiterator" /> - <Test id="qtwidgets" /> - <Test id="qudpsocket" /> - <Test id="qundogroup" /> - <Test id="qundostack" /> - <Test id="quridrag" /> - <Test id="qurl" /> - <Test id="quuid" /> - <Test id="qvariant" /> - <Test id="qvarlengtharray" /> - <Test id="qvector" /> - <Test id="qwaitcondition" /> - <Test id="qwebframe" /> - <Test id="qwebpage" /> - <Test id="qwidget" /> - <Test id="qwidgetaction" /> - <Test id="qwidgetstack" /> - <Test id="qwidget_window" /> - <Test id="qwindowsurface" /> - <Test id="qwineventnotifier" /> - <Test id="qwizard" /> - <Test id="qwmatrix" /> - <Test id="qworkspace" /> - <Test id="qwritelocker" /> - <Test id="qwsembedwidget" /> - <Test id="qwsinputmethod" /> - <Test id="qwswindowsystem" /> - <Test id="qx11info" /> - <Test id="qxml" /> - <Test id="qxmlformatter" /> - <Test id="qxmlinputsource" /> - <Test id="qxmlitem" /> - <Test id="qxmlname" /> - <Test id="qxmlnamepool" /> - <Test id="qxmlnodemodelindex" /> - <Test id="qxmlquery" /> - <Test id="qxmlresultitems" /> - <Test id="qxmlserializer" /> - <Test id="qxmlsimplereader" /> - <Test id="qxmlstream" /> - </TestSuite> - </TestSuites> - <Testruns> - <Testrun name="qt-4.4-macx-g++" suite="qt-4.4" results="/Users/pulse/results" qt="4.4" qtest="4.4" hostname="macbuilder" makespec="macx-g++" timeout="300000" os="osx" /> - <Testrun name="qt-4.4-linux-g++" suite="qt-4.4" results="/home/pulse/results" qt="4.4" qtest="4.4" hostname="sv-linux-g++" makespec="linux-g++" timeout="300000" os="unix" /> - </Testruns> -</Configuration> diff --git a/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp index 6327123..a92359f 100644 --- a/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/benchmarks/qnetworkreply/tst_qnetworkreply.cpp @@ -262,8 +262,22 @@ protected: port = server.serverPort(); ready.release(); - server.waitForNewConnection(-1); + QVERIFY(server.waitForNewConnection(10*1000)); client = server.nextPendingConnection(); + + // read lines until we read the empty line seperating HTTP request from HTTP request body + do { + if (client->canReadLine()) { + QString line = client->readLine(); + if (line == "\n" || line == "\r\n") + break; // empty line + } + if (!client->waitForReadyRead(10*1000)) { + client->close(); + return; + } + } while (client->state() == QAbstractSocket::ConnectedState); + client->write("HTTP/1.0 200 OK\r\n"); client->write("Content-length: 0\r\n"); client->write("\r\n"); diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 46f2280..919e68f 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2770,8 +2770,9 @@ void Configure::generateCachefile() if (!dictionary["QT_LIBINFIX"].isEmpty()) configStream << "QT_LIBINFIX = " << dictionary["QT_LIBINFIX"] << endl; + configStream << "#Qt for Symbian FPU settings" << endl; if(!dictionary["ARM_FPU_TYPE"].isEmpty()) { - configStream<<"QMAKE_CXXFLAGS.ARMCC += --fpu "<< dictionary["ARM_FPU_TYPE"]; + configStream<<"MMP_RULES += \"ARMFPU "<< dictionary["ARM_FPU_TYPE"]<< "\""; } configStream.flush(); |