From 6b366d4f26ed088f7edcc4b74f56cdbdc7a15024 Mon Sep 17 00:00:00 2001
From: Rohan McGovern <rohan.mcgovern@nokia.com>
Date: Mon, 22 Mar 2010 16:40:45 +1000
Subject: Fixed inconsistent test naming.

TARGET and test class name should always match.

Backport 91ebcc413f0650ab235b93689776d4457bdbc80e from 4.7
---
 tests/auto/qfiledialog2/tst_qfiledialog2.cpp       |  76 +++++-----
 .../tst_qtconcurrentiteratekernel.cpp              |  22 +--
 tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp |  62 ++++----
 tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp |  22 +--
 .../tst_qtconcurrentthreadengine.cpp               |  24 +--
 tests/auto/qvectornd/tst_qvectornd.cpp             | 166 ++++++++++-----------
 .../tst_xmlpatternsdiagnosticsts.cpp               |  10 +-
 7 files changed, 191 insertions(+), 191 deletions(-)

diff --git a/tests/auto/qfiledialog2/tst_qfiledialog2.cpp b/tests/auto/qfiledialog2/tst_qfiledialog2.cpp
index f2e1dbd..6bfa8be 100644
--- a/tests/auto/qfiledialog2/tst_qfiledialog2.cpp
+++ b/tests/auto/qfiledialog2/tst_qfiledialog2.cpp
@@ -87,13 +87,13 @@ public:
     }
 };
 
-class tst_QFiledialog : public QObject
+class tst_QFileDialog2 : public QObject
 {
 Q_OBJECT
 
 public:
-    tst_QFiledialog();
-    virtual ~tst_QFiledialog();
+    tst_QFileDialog2();
+    virtual ~tst_QFileDialog2();
 
 public slots:
     void init();
@@ -138,18 +138,18 @@ private:
     QByteArray userSettings;
 };
 
-tst_QFiledialog::tst_QFiledialog()
+tst_QFileDialog2::tst_QFileDialog2()
 {   
 #if defined(Q_OS_WINCE)
     qApp->setAutoMaximizeThreshold(-1);
 #endif
 }
 
-tst_QFiledialog::~tst_QFiledialog()
+tst_QFileDialog2::~tst_QFileDialog2()
 {
 }
 
-void tst_QFiledialog::init()
+void tst_QFileDialog2::init()
 {
     // Save the developers settings so they don't get mad when their sidebar folders are gone.
     QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
@@ -164,14 +164,14 @@ void tst_QFiledialog::init()
 #endif
 }
 
-void tst_QFiledialog::cleanup()
+void tst_QFileDialog2::cleanup()
 {
     QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
     settings.beginGroup(QLatin1String("Qt"));
     settings.setValue(QLatin1String("filedialog"), userSettings);
 }
 
-void tst_QFiledialog::listRoot()
+void tst_QFileDialog2::listRoot()
 {
 #if defined QT_BUILD_INTERNAL
     QFileInfoGatherer fileInfoGatherer;
@@ -193,7 +193,7 @@ void tst_QFiledialog::listRoot()
 #endif
 }
 
-void tst_QFiledialog::heapCorruption()
+void tst_QFileDialog2::heapCorruption()
 {
     QVector<QNonNativeFileDialog*> dialogs;
     for (int i=0; i < 10; i++) {
@@ -205,12 +205,12 @@ void tst_QFiledialog::heapCorruption()
 
 struct FriendlyQFileDialog : public QNonNativeFileDialog
 {
-    friend class tst_QFileDialog;
+    friend class tst_QFileDialog2;
     Q_DECLARE_PRIVATE(QFileDialog)
 };
 
 
-void tst_QFiledialog::deleteDirAndFiles()
+void tst_QFileDialog2::deleteDirAndFiles()
 {
 #if defined QT_BUILD_INTERNAL
     QString tempPath = QDir::tempPath() + '/' + "QFileDialogTestDir4FullDelete";
@@ -242,7 +242,7 @@ void tst_QFiledialog::deleteDirAndFiles()
 #endif
 }
 
-void tst_QFiledialog::filter()
+void tst_QFileDialog2::filter()
 {
     QNonNativeFileDialog fd;
     QAction *hiddenAction = qFindChild<QAction*>(&fd, "qt_show_hidden_action");
@@ -255,7 +255,7 @@ void tst_QFiledialog::filter()
     QVERIFY(hiddenAction->isChecked());
 }
 
-void tst_QFiledialog::showNameFilterDetails()
+void tst_QFileDialog2::showNameFilterDetails()
 {
     QNonNativeFileDialog fd;
     QComboBox *filters = qFindChild<QComboBox*>(&fd, "fileTypeCombo");
@@ -280,7 +280,7 @@ void tst_QFiledialog::showNameFilterDetails()
     QCOMPARE(filters->itemText(2), filterChoices.at(2));
 }
 
-void tst_QFiledialog::unc()
+void tst_QFileDialog2::unc()
 {
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
     // Only test UNC on Windows./
@@ -295,7 +295,7 @@ void tst_QFiledialog::unc()
     QCOMPARE(model->index(fd.directory().absolutePath()), model->index(dir));
 }
 
-void tst_QFiledialog::emptyUncPath()
+void tst_QFileDialog2::emptyUncPath()
 {
     QNonNativeFileDialog fd;
 	fd.show();
@@ -308,7 +308,7 @@ void tst_QFiledialog::emptyUncPath()
     QVERIFY(model);
 }
 
-void tst_QFiledialog::task178897_minimumSize()
+void tst_QFileDialog2::task178897_minimumSize()
 {
     QNonNativeFileDialog fd;
     QSize oldMs = fd.layout()->minimumSize();
@@ -322,7 +322,7 @@ void tst_QFiledialog::task178897_minimumSize()
     QVERIFY(ms.width() <= oldMs.width());
 }
 
-void tst_QFiledialog::task180459_lastDirectory_data()
+void tst_QFileDialog2::task180459_lastDirectory_data()
 {
     QTest::addColumn<QString>("path");
     QTest::addColumn<QString>("directory");
@@ -345,7 +345,7 @@ void tst_QFiledialog::task180459_lastDirectory_data()
 
 }
 
-void tst_QFiledialog::task180459_lastDirectory()
+void tst_QFileDialog2::task180459_lastDirectory()
 {
     //first visit the temp directory and close the dialog
     QNonNativeFileDialog *dlg = new QNonNativeFileDialog(0, "", QDir::tempPath());
@@ -449,7 +449,7 @@ QString &dir, const QString &filter)
         }
 };
 
-void tst_QFiledialog::task227304_proxyOnFileDialog()
+void tst_QFileDialog2::task227304_proxyOnFileDialog()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd(0, "", QDir::currentPath(), 0);
@@ -488,7 +488,7 @@ void tst_QFiledialog::task227304_proxyOnFileDialog()
 #endif
 }
 
-void tst_QFiledialog::task227930_correctNavigationKeyboardBehavior()
+void tst_QFileDialog2::task227930_correctNavigationKeyboardBehavior()
 {
     QDir current = QDir::currentPath();
     current.mkdir("test");
@@ -527,7 +527,7 @@ void tst_QFiledialog::task227930_correctNavigationKeyboardBehavior()
 }
 
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
-void tst_QFiledialog::task226366_lowerCaseHardDriveWindows()
+void tst_QFileDialog2::task226366_lowerCaseHardDriveWindows()
 {
     QNonNativeFileDialog fd;
     fd.setDirectory(QDir::root().path());
@@ -553,7 +553,7 @@ void tst_QFiledialog::task226366_lowerCaseHardDriveWindows()
 }
 #endif
 
-void tst_QFiledialog::completionOnLevelAfterRoot()
+void tst_QFileDialog2::completionOnLevelAfterRoot()
 {
     QNonNativeFileDialog fd;
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
@@ -592,7 +592,7 @@ void tst_QFiledialog::completionOnLevelAfterRoot()
 #endif
 }
 
-void tst_QFiledialog::task233037_selectingDirectory()
+void tst_QFileDialog2::task233037_selectingDirectory()
 {
     QDir current = QDir::currentPath();
     current.mkdir("test");
@@ -615,7 +615,7 @@ void tst_QFiledialog::task233037_selectingDirectory()
     current.rmdir("test");
 }
 
-void tst_QFiledialog::task235069_hideOnEscape()
+void tst_QFileDialog2::task235069_hideOnEscape()
 {
     QDir current = QDir::currentPath();
     QNonNativeFileDialog fd;
@@ -637,7 +637,7 @@ void tst_QFiledialog::task235069_hideOnEscape()
     QCOMPARE(fd2.isVisible(), false);
 }
 
-void tst_QFiledialog::task236402_dontWatchDeletedDir()
+void tst_QFileDialog2::task236402_dontWatchDeletedDir()
 {
 #if defined QT_BUILD_INTERNAL
     //THIS TEST SHOULD NOT DISPLAY WARNINGS
@@ -662,7 +662,7 @@ void tst_QFiledialog::task236402_dontWatchDeletedDir()
 #endif
 }
 
-void tst_QFiledialog::task203703_returnProperSeparator()
+void tst_QFileDialog2::task203703_returnProperSeparator()
 {
     QDir current = QDir::currentPath();
     current.mkdir("aaaaaaaaaaaaaaaaaa");
@@ -687,7 +687,7 @@ void tst_QFiledialog::task203703_returnProperSeparator()
     current.rmdir("aaaaaaaaaaaaaaaaaa");
 }
 
-void tst_QFiledialog::task228844_ensurePreviousSorting()
+void tst_QFileDialog2::task228844_ensurePreviousSorting()
 {
     QDir current = QDir::currentPath();
     current.mkdir("aaaaaaaaaaaaaaaaaa");
@@ -789,7 +789,7 @@ void tst_QFiledialog::task228844_ensurePreviousSorting()
 }
 
 
-void tst_QFiledialog::task239706_editableFilterCombo()
+void tst_QFileDialog2::task239706_editableFilterCombo()
 {
     QNonNativeFileDialog d;
     d.setNameFilter("*.cpp *.h");
@@ -812,7 +812,7 @@ void tst_QFiledialog::task239706_editableFilterCombo()
     QTest::keyPress(filterCombo, Qt::Key_Enter); // should not trigger assertion failure
 }
 
-void tst_QFiledialog::task218353_relativePaths()
+void tst_QFileDialog2::task218353_relativePaths()
 {
     QDir appDir = QDir::current();
     QVERIFY(appDir.cdUp() != false);
@@ -829,7 +829,7 @@ void tst_QFiledialog::task218353_relativePaths()
     appDir.rmdir("test");
 }
 
-void tst_QFiledialog::task251321_sideBarHiddenEntries()
+void tst_QFileDialog2::task251321_sideBarHiddenEntries()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd;
@@ -889,7 +889,7 @@ public :
 };
 #endif
 
-void tst_QFiledialog::task251341_sideBarRemoveEntries()
+void tst_QFileDialog2::task251341_sideBarRemoveEntries()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd;
@@ -954,7 +954,7 @@ void tst_QFiledialog::task251341_sideBarRemoveEntries()
 #endif
 }
 
-void tst_QFiledialog::task254490_selectFileMultipleTimes()
+void tst_QFileDialog2::task254490_selectFileMultipleTimes()
 {
     QString tempPath = QDir::tempPath();
     QTemporaryFile *t;
@@ -986,7 +986,7 @@ void tst_QFiledialog::task254490_selectFileMultipleTimes()
     t->deleteLater();
 }
 
-void tst_QFiledialog::task257579_sideBarWithNonCleanUrls()
+void tst_QFileDialog2::task257579_sideBarWithNonCleanUrls()
 {
 #if defined QT_BUILD_INTERNAL
     QDir tempDir = QDir::temp();
@@ -1012,7 +1012,7 @@ void tst_QFiledialog::task257579_sideBarWithNonCleanUrls()
 #endif
 }
 
-void tst_QFiledialog::task259105_filtersCornerCases()
+void tst_QFileDialog2::task259105_filtersCornerCases()
 {
     QNonNativeFileDialog fd(0, "TestFileDialog");
     fd.setNameFilter(QLatin1String("All Files! (*);;Text Files (*.txt)"));
@@ -1056,7 +1056,7 @@ void tst_QFiledialog::task259105_filtersCornerCases()
     QCOMPARE(filters->currentText(), QLatin1String("Text Files"));
 }
 
-void tst_QFiledialog::QTBUG4419_lineEditSelectAll()
+void tst_QFileDialog2::QTBUG4419_lineEditSelectAll()
 {
     QString tempPath = QDir::tempPath();
     QTemporaryFile *t;
@@ -1082,7 +1082,7 @@ void tst_QFiledialog::QTBUG4419_lineEditSelectAll()
     QCOMPARE(tempPath + QChar('/') + lineEdit->selectedText(), t->fileName());
 }
 
-void tst_QFiledialog::QTBUG6558_showDirsOnly()
+void tst_QFileDialog2::QTBUG6558_showDirsOnly()
 {
     const QString tempPath = QDir::tempPath();
     QDir dirTemp(tempPath);
@@ -1148,7 +1148,7 @@ void tst_QFiledialog::QTBUG6558_showDirsOnly()
     dirTemp.rmdir(tempName);
 }
 
-void tst_QFiledialog::QTBUG4842_selectFilterWithHideNameFilterDetails()
+void tst_QFileDialog2::QTBUG4842_selectFilterWithHideNameFilterDetails()
 {
     QStringList filtersStr;
     filtersStr << "Images (*.png *.xpm *.jpg)" << "Text files (*.txt)" << "XML files (*.xml)";
@@ -1188,5 +1188,5 @@ void tst_QFiledialog::QTBUG4842_selectFilterWithHideNameFilterDetails()
 
 }
 
-QTEST_MAIN(tst_QFiledialog)
+QTEST_MAIN(tst_QFileDialog2)
 #include "tst_qfiledialog2.moc"
diff --git a/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
index 29cb341..4f7822d 100644
--- a/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
+++ b/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
@@ -90,7 +90,7 @@ int distance(TestIterator &a, TestIterator &b)
 
 using namespace QtConcurrent;
 
-class tst_iteratekernel: public QObject
+class tst_QtConcurrentIterateKernel: public QObject
 {
     Q_OBJECT
 private slots:
@@ -149,13 +149,13 @@ public:
 };
 
 
-void tst_iteratekernel::instantiate()
+void tst_QtConcurrentIterateKernel::instantiate()
 {
     startThreadEngine(new PrintFor(0, 40)).startBlocking();
     QCOMPARE((int)iterations, 40);
 }
 
-void tst_iteratekernel::cancel()
+void tst_QtConcurrentIterateKernel::cancel()
 {
     {
         QFuture<void> f = startThreadEngine(new SleepPrintFor(0, 40)).startAsynchronously();
@@ -182,7 +182,7 @@ public:
     }
 };
 
-void tst_iteratekernel::stresstest()
+void tst_QtConcurrentIterateKernel::stresstest()
 {
     const int iterations = 1000;
     const int times = 50;
@@ -194,7 +194,7 @@ void tst_iteratekernel::stresstest()
     }
 }
 
-void tst_iteratekernel::noIterations()
+void tst_QtConcurrentIterateKernel::noIterations()
 {
     const int times = 20000;
     for (int i = 0; i < times; ++i)
@@ -242,7 +242,7 @@ public:
     bool throttling;
 };
 
-void tst_iteratekernel::throttling()
+void tst_QtConcurrentIterateKernel::throttling()
 {
     const int totalIterations = 400;
     iterations = 0;
@@ -271,7 +271,7 @@ public:
     }
 };
 
-void tst_iteratekernel::blockSize()
+void tst_QtConcurrentIterateKernel::blockSize()
 {
 #ifdef QT_NO_STL
     QSKIP("Missing stl iterators prevent correct block size calculation", SkipAll);
@@ -296,7 +296,7 @@ public:
 };
 
 
-void tst_iteratekernel::multipleResults()
+void tst_QtConcurrentIterateKernel::multipleResults()
 {
 #ifdef QT_NO_STL
     QSKIP("Missing stl iterators prevent correct summation", SkipAll);
@@ -320,7 +320,7 @@ public:
     }
 };
 
-void tst_iteratekernel::instantiateWhile()
+void tst_QtConcurrentIterateKernel::instantiateWhile()
 {
     PrintWhile w;
     w.startBlocking();
@@ -339,7 +339,7 @@ public:
     }
 };
 
-void tst_iteratekernel::stresstestWhile()
+void tst_QtConcurrentIterateKernel::stresstestWhile()
 {
     int iterations = 100000;
     StressWhile w(iterations);
@@ -348,7 +348,7 @@ void tst_iteratekernel::stresstestWhile()
 }
 #endif
 
-QTEST_MAIN(tst_iteratekernel)
+QTEST_MAIN(tst_QtConcurrentIterateKernel)
 
 #include "tst_qtconcurrentiteratekernel.moc"
 
diff --git a/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp b/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp
index d3417b1..894bac4 100644
--- a/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp
+++ b/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp
@@ -56,7 +56,7 @@ Q_DECLARE_METATYPE(QList<int>);
 Q_DECLARE_METATYPE(QList<double>);
 Q_DECLARE_METATYPE(QList<QString>);
 
-class tst_map: public QObject
+class tst_QtConcurrentMap: public QObject
 {
     Q_OBJECT
 private slots:
@@ -114,7 +114,7 @@ public:
 
 Q_DECLARE_METATYPE(QList<Number>);
 
-void tst_map::map()
+void tst_QtConcurrentMap::map()
 {
     // functors take arguments by reference, modifying the sequence in place
     {
@@ -246,7 +246,7 @@ void tst_map::map()
 #endif
 }
 
-void tst_map::blocking_map()
+void tst_QtConcurrentMap::blocking_map()
 {
     // functors take arguments by reference, modifying the sequence in place
     {
@@ -428,7 +428,7 @@ public:
     }
 };
 
-void tst_map::mapped()
+void tst_QtConcurrentMap::mapped()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -790,7 +790,7 @@ void tst_map::mapped()
     }
 }
 
-void tst_map::blocking_mapped()
+void tst_QtConcurrentMap::blocking_mapped()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -1244,7 +1244,7 @@ public:
     }
 };
 
-void tst_map::mappedReduced()
+void tst_QtConcurrentMap::mappedReduced()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -1625,7 +1625,7 @@ void tst_map::mappedReduced()
     // ### the same as above, with an initial result value
 }
 
-void tst_map::blocking_mappedReduced()
+void tst_QtConcurrentMap::blocking_mappedReduced()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -2010,7 +2010,7 @@ int sleeper(int val)
     return val;
 }
 
-void tst_map::assignResult()
+void tst_QtConcurrentMap::assignResult()
 {
     const QList<int> startList = QList<int>() << 0 << 1 << 2;
     QList<int> list = QtConcurrent::blockingMapped(startList, sleeper);
@@ -2077,7 +2077,7 @@ public:
 Q_DECLARE_METATYPE(QVector<MemFnTester>);
 Q_DECLARE_METATYPE(QList<MemFnTester>);
 
-void tst_map::functionOverloads()
+void tst_QtConcurrentMap::functionOverloads()
 {
     QList<int> intList;
     const QList<int> constIntList;
@@ -2159,7 +2159,7 @@ void fastReduce(int &result, const InstanceCounter&)
     ++result;
 }
 
-void tst_map::throttling()
+void tst_QtConcurrentMap::throttling()
 {
     const int itemcount = 100;
     const int allowedTemporaries = QThread::idealThreadCount() * 40;
@@ -2208,7 +2208,7 @@ void throwMapper(int &e)
     throw QtConcurrent::Exception();
 }
 
-void tst_map::exceptions()
+void tst_QtConcurrentMap::exceptions()
 {
     bool caught = false;
     try  {
@@ -2228,7 +2228,7 @@ int mapper(const int &i)
     return i;
 }
 
-void tst_map::incrementalResults()
+void tst_QtConcurrentMap::incrementalResults()
 {
     const int count = 200;
     QList<int> ints; 
@@ -2256,7 +2256,7 @@ void tst_map::incrementalResults()
     Test that mapped does not cause deep copies when holding
     references to Qt containers.
 */
-void tst_map::noDetatch()
+void tst_QtConcurrentMap::noDetatch()
 {
     {
         QList<int> l = QList<int>() << 1;
@@ -2299,7 +2299,7 @@ void tst_map::noDetatch()
 
 }
 
-void tst_map::stlContainers()
+void tst_QtConcurrentMap::stlContainers()
 {
 #ifdef QT_NO_STL
     QSKIP("Qt compiled without STL support", SkipAll);
@@ -2331,7 +2331,7 @@ InstanceCounter ic_fn(const InstanceCounter & ic)
 
 // Verify that held results are deleted when a future is
 // assigned over with operator ==
-void tst_map::qFutureAssignmentLeak()
+void tst_QtConcurrentMap::qFutureAssignmentLeak()
 {
     currentInstanceCount = 0;
     peakInstanceCount = 0;
@@ -2370,7 +2370,7 @@ void add(int &result, const int &sum)
     result += sum;
 }
 
-void tst_map::stressTest()
+void tst_QtConcurrentMap::stressTest()
 {
     const int listSize = 1000;
     const int sum = (listSize - 1) * (listSize / 2);
@@ -2399,26 +2399,26 @@ void tst_map::stressTest()
     }
 }
 
-QTEST_MAIN(tst_map)
+QTEST_MAIN(tst_QtConcurrentMap)
 
 #else
 
-void tst_map::map() {}
-void tst_map::blocking_map() {}
-void tst_map::mapped() {}
-void tst_map::blocking_mapped() {}
-void tst_map::mappedReduced() {}
-void tst_map::blocking_mappedReduced() {}
-void tst_map::assignResult() {}
-void tst_map::functionOverloads() {}
+void tst_QtConcurrentMap::map() {}
+void tst_QtConcurrentMap::blocking_map() {}
+void tst_QtConcurrentMap::mapped() {}
+void tst_QtConcurrentMap::blocking_mapped() {}
+void tst_QtConcurrentMap::mappedReduced() {}
+void tst_QtConcurrentMap::blocking_mappedReduced() {}
+void tst_QtConcurrentMap::assignResult() {}
+void tst_QtConcurrentMap::functionOverloads() {}
 #ifndef QT_NO_EXCEPTIONS
-void tst_map::exceptions() {}
+void tst_QtConcurrentMap::exceptions() {}
 #endif
-void tst_map::incrementalResults() {}
-void tst_map::stressTest() {}
-void tst_map::throttling() {}
-void tst_map::stlContainers() {}
-void tst_map::noDetatch() {}
+void tst_QtConcurrentMap::incrementalResults() {}
+void tst_QtConcurrentMap::stressTest() {}
+void tst_QtConcurrentMap::throttling() {}
+void tst_QtConcurrentMap::stlContainers() {}
+void tst_QtConcurrentMap::noDetatch() {}
 
 QTEST_NOOP_MAIN
 
diff --git a/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp
index b9ab6d3..8fdc50c 100644
--- a/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp
+++ b/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp
@@ -49,7 +49,7 @@
 
 using namespace QtConcurrent;
 
-class TestRunFunction: public QObject
+class tst_QtConcurrentRun: public QObject
 {
     Q_OBJECT
 private slots:
@@ -73,7 +73,7 @@ private slots:
 #endif
 
 
-QTEST_MAIN(TestRunFunction)
+QTEST_MAIN(tst_QtConcurrentRun)
 
 void light()
 {
@@ -91,7 +91,7 @@ void heavy()
 }
 
 
-void TestRunFunction::runLightFunction()
+void tst_QtConcurrentRun::runLightFunction()
 {
     qDebug("starting function");
     QFuture<void> future = run(F(light));
@@ -100,7 +100,7 @@ void TestRunFunction::runLightFunction()
     qDebug("done");
 }
 
-void TestRunFunction::runHeavyFunction()
+void tst_QtConcurrentRun::runHeavyFunction()
 {
     qDebug("starting function");
     QFuture<void> future = run(F(heavy));
@@ -141,7 +141,7 @@ public:
     int operator()(int in) const { return in; }
 };
 
-void TestRunFunction::returnValue()
+void tst_QtConcurrentRun::returnValue()
 {
     QFuture<int> f;
     
@@ -217,7 +217,7 @@ struct TestConstClass
     void fooInt(int) const { };
 };
 
-void TestRunFunction::functionObject()
+void tst_QtConcurrentRun::functionObject()
 {
     QFuture<void> f;
     TestClass c;
@@ -235,7 +235,7 @@ void TestRunFunction::functionObject()
 }
 
 
-void TestRunFunction::memberFunctions()
+void tst_QtConcurrentRun::memberFunctions()
 {
     TestClass c;
 
@@ -278,7 +278,7 @@ void stringIntFunction(QString)
 }
 
 
-void TestRunFunction::implicitConvertibleTypes()
+void tst_QtConcurrentRun::implicitConvertibleTypes()
 {
     double d;
     run(F(doubleFunction), d).waitForFinished();
@@ -294,7 +294,7 @@ void TestRunFunction::implicitConvertibleTypes()
 
 void fn() { }
 
-void TestRunFunction::runWaitLoop()
+void tst_QtConcurrentRun::runWaitLoop()
 {
     for (int i = 0; i < 1000; ++i)
         run(fn).waitForFinished();
@@ -324,7 +324,7 @@ int recursiveResult(int level)
     return 1;
 }
 
-void TestRunFunction::recursive()
+void tst_QtConcurrentRun::recursive()
 {
     int levels = 15;
 
@@ -375,7 +375,7 @@ int fn2(double, int *)
 }
 
 #if 0
-void TestRunFunction::createFunctor()
+void tst_QtConcurrentRun::createFunctor()
 {
     e = 0;
     ::QtConcurrent::createFunctor(vfn0)();
diff --git a/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp b/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
index 6f586d7..23fd19b 100644
--- a/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
+++ b/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
@@ -48,7 +48,7 @@
 
 using namespace QtConcurrent;
 
-class tst_threadengine: public QObject
+class tst_QtConcurrentThreadEngine: public QObject
 {
     Q_OBJECT
 public:
@@ -79,7 +79,7 @@ public:
     }
 };
 
-void tst_threadengine::runDirectly()
+void tst_QtConcurrentThreadEngine::runDirectly()
 {
     {
         PrintUser engine;
@@ -120,7 +120,7 @@ public:
     bool done;
 };
 
-void tst_threadengine::result()
+void tst_QtConcurrentThreadEngine::result()
 {
     StringResultUser engine;
     QCOMPARE(*engine.startBlocking(), QString("Foo"));
@@ -147,7 +147,7 @@ public:
     bool done;
 };
 
-void tst_threadengine::runThroughStarter()
+void tst_QtConcurrentThreadEngine::runThroughStarter()
 {
     {
         ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
@@ -180,7 +180,7 @@ public:
     }
 };
 
-void tst_threadengine::cancel()
+void tst_QtConcurrentThreadEngine::cancel()
 {
     {
         CancelUser *engine = new CancelUser();
@@ -234,7 +234,7 @@ public:
 // Test that a user task with a thread function that always
 // want to be throttled still completes. The thread engine
 // should make keep one thread running at all times.
-void tst_threadengine::throttle()
+void tst_QtConcurrentThreadEngine::throttle()
 {
     const int repeats = 10;
     for (int i = 0; i < repeats; ++i) {
@@ -280,7 +280,7 @@ public:
     bool finishing;
 };
 
-void tst_threadengine::threadCount()
+void tst_QtConcurrentThreadEngine::threadCount()
 {
     const int repeats = 10;
     for (int i = 0; i < repeats; ++i) {
@@ -320,7 +320,7 @@ public:
 };
 
 
-void tst_threadengine::multipleResults()
+void tst_QtConcurrentThreadEngine::multipleResults()
 {
     MultipleResultsUser *engine =  new MultipleResultsUser();
     QFuture<int> f = engine->startAsynchronously();
@@ -351,7 +351,7 @@ public:
     }
 };
 
-void tst_threadengine::stresstest()
+void tst_QtConcurrentThreadEngine::stresstest()
 {
     const int times = 20000;
 
@@ -379,7 +379,7 @@ public:
     ThreadFunctionResult threadFunction() { QTest::qSleep(sleepTime); return ThreadFinished; }
 };
 
-void tst_threadengine::cancelQueuedSlowUser()
+void tst_QtConcurrentThreadEngine::cancelQueuedSlowUser()
 {
     const int times = 100;
 
@@ -436,7 +436,7 @@ public:
     QThread *blockThread;
 };
 
-void tst_threadengine::exceptions()
+void tst_QtConcurrentThreadEngine::exceptions()
 {
     // Asynchronous mode:
     {
@@ -527,7 +527,7 @@ void tst_threadengine::exceptions()
 
 #endif
 
-QTEST_MAIN(tst_threadengine)
+QTEST_MAIN(tst_QtConcurrentThreadEngine)
 
 #include "tst_qtconcurrentthreadengine.moc"
 
diff --git a/tests/auto/qvectornd/tst_qvectornd.cpp b/tests/auto/qvectornd/tst_qvectornd.cpp
index 2be7264..2850f32 100644
--- a/tests/auto/qvectornd/tst_qvectornd.cpp
+++ b/tests/auto/qvectornd/tst_qvectornd.cpp
@@ -45,12 +45,12 @@
 #include <QtGui/qvector3d.h>
 #include <QtGui/qvector4d.h>
 
-class tst_QVector : public QObject
+class tst_QVectorND : public QObject
 {
     Q_OBJECT
 public:
-    tst_QVector() {}
-    ~tst_QVector() {}
+    tst_QVectorND() {}
+    ~tst_QVectorND() {}
 
 private slots:
     void create2();
@@ -155,7 +155,7 @@ static bool fuzzyCompare(qreal x, qreal y)
 
 // Test the creation of QVector2D objects in various ways:
 // construct, copy, and modify.
-void tst_QVector::create2()
+void tst_QVectorND::create2()
 {
     QVector2D null;
     QCOMPARE(null.x(), (qreal)0.0f);
@@ -244,7 +244,7 @@ void tst_QVector::create2()
 
 // Test the creation of QVector3D objects in various ways:
 // construct, copy, and modify.
-void tst_QVector::create3()
+void tst_QVectorND::create3()
 {
     QVector3D null;
     QCOMPARE(null.x(), (qreal)0.0f);
@@ -370,7 +370,7 @@ void tst_QVector::create3()
 
 // Test the creation of QVector4D objects in various ways:
 // construct, copy, and modify.
-void tst_QVector::create4()
+void tst_QVectorND::create4()
 {
     QVector4D null;
     QCOMPARE(null.x(), (qreal)0.0f);
@@ -556,7 +556,7 @@ void tst_QVector::create4()
 }
 
 // Test vector length computation for 2D vectors.
-void tst_QVector::length2_data()
+void tst_QVectorND::length2_data()
 {
     QTest::addColumn<qreal>("x");
     QTest::addColumn<qreal>("y");
@@ -569,7 +569,7 @@ void tst_QVector::length2_data()
     QTest::newRow("-1y") << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f;
     QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)qSqrt(8.0f);
 }
-void tst_QVector::length2()
+void tst_QVectorND::length2()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -581,7 +581,7 @@ void tst_QVector::length2()
 }
 
 // Test vector length computation for 3D vectors.
-void tst_QVector::length3_data()
+void tst_QVectorND::length3_data()
 {
     QTest::addColumn<qreal>("x");
     QTest::addColumn<qreal>("y");
@@ -597,7 +597,7 @@ void tst_QVector::length3_data()
     QTest::newRow("-1z") << (qreal)0.0f << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f;
     QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)2.0f << (qreal)qSqrt(12.0f);
 }
-void tst_QVector::length3()
+void tst_QVectorND::length3()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -610,7 +610,7 @@ void tst_QVector::length3()
 }
 
 // Test vector length computation for 4D vectors.
-void tst_QVector::length4_data()
+void tst_QVectorND::length4_data()
 {
     QTest::addColumn<qreal>("x");
     QTest::addColumn<qreal>("y");
@@ -629,7 +629,7 @@ void tst_QVector::length4_data()
     QTest::newRow("-1w") << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f;
     QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)2.0f << (qreal)2.0f << (qreal)qSqrt(16.0f);
 }
-void tst_QVector::length4()
+void tst_QVectorND::length4()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -643,12 +643,12 @@ void tst_QVector::length4()
 }
 
 // Test the unit vector conversion for 2D vectors.
-void tst_QVector::normalized2_data()
+void tst_QVectorND::normalized2_data()
 {
     // Use the same test data as the length test.
     length2_data();
 }
-void tst_QVector::normalized2()
+void tst_QVectorND::normalized2()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -665,12 +665,12 @@ void tst_QVector::normalized2()
 }
 
 // Test the unit vector conversion for 3D vectors.
-void tst_QVector::normalized3_data()
+void tst_QVectorND::normalized3_data()
 {
     // Use the same test data as the length test.
     length3_data();
 }
-void tst_QVector::normalized3()
+void tst_QVectorND::normalized3()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -689,12 +689,12 @@ void tst_QVector::normalized3()
 }
 
 // Test the unit vector conversion for 4D vectors.
-void tst_QVector::normalized4_data()
+void tst_QVectorND::normalized4_data()
 {
     // Use the same test data as the length test.
     length4_data();
 }
-void tst_QVector::normalized4()
+void tst_QVectorND::normalized4()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -715,12 +715,12 @@ void tst_QVector::normalized4()
 }
 
 // Test the unit vector conversion for 2D vectors.
-void tst_QVector::normalize2_data()
+void tst_QVectorND::normalize2_data()
 {
     // Use the same test data as the length test.
     length2_data();
 }
-void tst_QVector::normalize2()
+void tst_QVectorND::normalize2()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -735,12 +735,12 @@ void tst_QVector::normalize2()
 }
 
 // Test the unit vector conversion for 3D vectors.
-void tst_QVector::normalize3_data()
+void tst_QVectorND::normalize3_data()
 {
     // Use the same test data as the length test.
     length3_data();
 }
-void tst_QVector::normalize3()
+void tst_QVectorND::normalize3()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -756,12 +756,12 @@ void tst_QVector::normalize3()
 }
 
 // Test the unit vector conversion for 4D vectors.
-void tst_QVector::normalize4_data()
+void tst_QVectorND::normalize4_data()
 {
     // Use the same test data as the length test.
     length4_data();
 }
-void tst_QVector::normalize4()
+void tst_QVectorND::normalize4()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -778,7 +778,7 @@ void tst_QVector::normalize4()
 }
 
 // Test the comparison operators for 2D vectors.
-void tst_QVector::compare2()
+void tst_QVectorND::compare2()
 {
     QVector2D v1(1, 2);
     QVector2D v2(1, 2);
@@ -791,7 +791,7 @@ void tst_QVector::compare2()
 }
 
 // Test the comparison operators for 3D vectors.
-void tst_QVector::compare3()
+void tst_QVectorND::compare3()
 {
     QVector3D v1(1, 2, 4);
     QVector3D v2(1, 2, 4);
@@ -806,7 +806,7 @@ void tst_QVector::compare3()
 }
 
 // Test the comparison operators for 4D vectors.
-void tst_QVector::compare4()
+void tst_QVectorND::compare4()
 {
     QVector4D v1(1, 2, 4, 8);
     QVector4D v2(1, 2, 4, 8);
@@ -823,7 +823,7 @@ void tst_QVector::compare4()
 }
 
 // Test vector addition for 2D vectors.
-void tst_QVector::add2_data()
+void tst_QVectorND::add2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -852,7 +852,7 @@ void tst_QVector::add2_data()
         << (qreal)4.0f << (qreal)5.0f
         << (qreal)5.0f << (qreal)7.0f;
 }
-void tst_QVector::add2()
+void tst_QVectorND::add2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -876,7 +876,7 @@ void tst_QVector::add2()
 }
 
 // Test vector addition for 3D vectors.
-void tst_QVector::add3_data()
+void tst_QVectorND::add3_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -913,7 +913,7 @@ void tst_QVector::add3_data()
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f
         << (qreal)5.0f << (qreal)7.0f << (qreal)-3.0f;
 }
-void tst_QVector::add3()
+void tst_QVectorND::add3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -941,7 +941,7 @@ void tst_QVector::add3()
 }
 
 // Test vector addition for 4D vectors.
-void tst_QVector::add4_data()
+void tst_QVectorND::add4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -986,7 +986,7 @@ void tst_QVector::add4_data()
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)9.0f
         << (qreal)5.0f << (qreal)7.0f << (qreal)-3.0f << (qreal)17.0f;
 }
-void tst_QVector::add4()
+void tst_QVectorND::add4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1018,12 +1018,12 @@ void tst_QVector::add4()
 }
 
 // Test vector subtraction for 2D vectors.
-void tst_QVector::subtract2_data()
+void tst_QVectorND::subtract2_data()
 {
     // Use the same test data as the add test.
     add2_data();
 }
-void tst_QVector::subtract2()
+void tst_QVectorND::subtract2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1055,12 +1055,12 @@ void tst_QVector::subtract2()
 }
 
 // Test vector subtraction for 3D vectors.
-void tst_QVector::subtract3_data()
+void tst_QVectorND::subtract3_data()
 {
     // Use the same test data as the add test.
     add3_data();
 }
-void tst_QVector::subtract3()
+void tst_QVectorND::subtract3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1097,12 +1097,12 @@ void tst_QVector::subtract3()
 }
 
 // Test vector subtraction for 4D vectors.
-void tst_QVector::subtract4_data()
+void tst_QVectorND::subtract4_data()
 {
     // Use the same test data as the add test.
     add4_data();
 }
-void tst_QVector::subtract4()
+void tst_QVectorND::subtract4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1144,7 +1144,7 @@ void tst_QVector::subtract4()
 }
 
 // Test component-wise vector multiplication for 2D vectors.
-void tst_QVector::multiply2_data()
+void tst_QVectorND::multiply2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1173,7 +1173,7 @@ void tst_QVector::multiply2_data()
         << (qreal)4.0f << (qreal)5.0f
         << (qreal)4.0f << (qreal)10.0f;
 }
-void tst_QVector::multiply2()
+void tst_QVectorND::multiply2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1197,7 +1197,7 @@ void tst_QVector::multiply2()
 }
 
 // Test component-wise vector multiplication for 3D vectors.
-void tst_QVector::multiply3_data()
+void tst_QVectorND::multiply3_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1234,7 +1234,7 @@ void tst_QVector::multiply3_data()
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f
         << (qreal)4.0f << (qreal)10.0f << (qreal)-18.0f;
 }
-void tst_QVector::multiply3()
+void tst_QVectorND::multiply3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1262,7 +1262,7 @@ void tst_QVector::multiply3()
 }
 
 // Test component-wise vector multiplication for 4D vectors.
-void tst_QVector::multiply4_data()
+void tst_QVectorND::multiply4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1307,7 +1307,7 @@ void tst_QVector::multiply4_data()
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)9.0f
         << (qreal)4.0f << (qreal)10.0f << (qreal)-18.0f << (qreal)72.0f;
 }
-void tst_QVector::multiply4()
+void tst_QVectorND::multiply4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1339,7 +1339,7 @@ void tst_QVector::multiply4()
 }
 
 // Test vector multiplication by a factor for 2D vectors.
-void tst_QVector::multiplyFactor2_data()
+void tst_QVectorND::multiplyFactor2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1372,7 +1372,7 @@ void tst_QVector::multiplyFactor2_data()
         << (qreal)0.0f
         << (qreal)0.0f << (qreal)0.0f;
 }
-void tst_QVector::multiplyFactor2()
+void tst_QVectorND::multiplyFactor2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1395,7 +1395,7 @@ void tst_QVector::multiplyFactor2()
 }
 
 // Test vector multiplication by a factor for 3D vectors.
-void tst_QVector::multiplyFactor3_data()
+void tst_QVectorND::multiplyFactor3_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1435,7 +1435,7 @@ void tst_QVector::multiplyFactor3_data()
         << (qreal)0.0f
         << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f;
 }
-void tst_QVector::multiplyFactor3()
+void tst_QVectorND::multiplyFactor3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1461,7 +1461,7 @@ void tst_QVector::multiplyFactor3()
 }
 
 // Test vector multiplication by a factor for 4D vectors.
-void tst_QVector::multiplyFactor4_data()
+void tst_QVectorND::multiplyFactor4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1508,7 +1508,7 @@ void tst_QVector::multiplyFactor4_data()
         << (qreal)0.0f
         << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f;
 }
-void tst_QVector::multiplyFactor4()
+void tst_QVectorND::multiplyFactor4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1537,12 +1537,12 @@ void tst_QVector::multiplyFactor4()
 }
 
 // Test vector division by a factor for 2D vectors.
-void tst_QVector::divide2_data()
+void tst_QVectorND::divide2_data()
 {
     // Use the same test data as the multiply test.
     multiplyFactor2_data();
 }
-void tst_QVector::divide2()
+void tst_QVectorND::divide2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1567,12 +1567,12 @@ void tst_QVector::divide2()
 }
 
 // Test vector division by a factor for 3D vectors.
-void tst_QVector::divide3_data()
+void tst_QVectorND::divide3_data()
 {
     // Use the same test data as the multiply test.
     multiplyFactor3_data();
 }
-void tst_QVector::divide3()
+void tst_QVectorND::divide3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1600,12 +1600,12 @@ void tst_QVector::divide3()
 }
 
 // Test vector division by a factor for 4D vectors.
-void tst_QVector::divide4_data()
+void tst_QVectorND::divide4_data()
 {
     // Use the same test data as the multiply test.
     multiplyFactor4_data();
 }
-void tst_QVector::divide4()
+void tst_QVectorND::divide4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1636,12 +1636,12 @@ void tst_QVector::divide4()
 }
 
 // Test vector negation for 2D vectors.
-void tst_QVector::negate2_data()
+void tst_QVectorND::negate2_data()
 {
     // Use the same test data as the add test.
     add2_data();
 }
-void tst_QVector::negate2()
+void tst_QVectorND::negate2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1653,12 +1653,12 @@ void tst_QVector::negate2()
 }
 
 // Test vector negation for 3D vectors.
-void tst_QVector::negate3_data()
+void tst_QVectorND::negate3_data()
 {
     // Use the same test data as the add test.
     add3_data();
 }
-void tst_QVector::negate3()
+void tst_QVectorND::negate3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1671,12 +1671,12 @@ void tst_QVector::negate3()
 }
 
 // Test vector negation for 4D vectors.
-void tst_QVector::negate4_data()
+void tst_QVectorND::negate4_data()
 {
     // Use the same test data as the add test.
     add4_data();
 }
-void tst_QVector::negate4()
+void tst_QVectorND::negate4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1690,7 +1690,7 @@ void tst_QVector::negate4()
 }
 
 // Test the computation of vector cross-products.
-void tst_QVector::crossProduct_data()
+void tst_QVectorND::crossProduct_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1721,7 +1721,7 @@ void tst_QVector::crossProduct_data()
         << (qreal)-3.0f << (qreal)6.0f << (qreal)-3.0f
         << (qreal)32.0f;
 }
-void tst_QVector::crossProduct()
+void tst_QVectorND::crossProduct()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1751,12 +1751,12 @@ void tst_QVector::crossProduct()
 }
 
 // Test the computation of normals.
-void tst_QVector::normal_data()
+void tst_QVectorND::normal_data()
 {
     // Use the same test data as the crossProduct test.
     crossProduct_data();
 }
-void tst_QVector::normal()
+void tst_QVectorND::normal()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1780,7 +1780,7 @@ void tst_QVector::normal()
 }
 
 // Test distance to plane calculations.
-void tst_QVector::distanceToPlane_data()
+void tst_QVectorND::distanceToPlane_data()
 {
     QTest::addColumn<qreal>("x1");  // Point on plane
     QTest::addColumn<qreal>("y1");
@@ -1823,7 +1823,7 @@ void tst_QVector::distanceToPlane_data()
         << (qreal)0.0f << (qreal)2.0f << (qreal)0.0f
         << (qreal)-2.0f;
 }
-void tst_QVector::distanceToPlane()
+void tst_QVectorND::distanceToPlane()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1853,7 +1853,7 @@ void tst_QVector::distanceToPlane()
 }
 
 // Test distance to line calculations.
-void tst_QVector::distanceToLine_data()
+void tst_QVectorND::distanceToLine_data()
 {
     QTest::addColumn<qreal>("x1");  // Point on line
     QTest::addColumn<qreal>("y1");
@@ -1896,7 +1896,7 @@ void tst_QVector::distanceToLine_data()
         << (qreal)0.0f << (qreal)5.0f << (qreal)0.0f
         << (qreal)5.0f;
 }
-void tst_QVector::distanceToLine()
+void tst_QVectorND::distanceToLine()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1917,7 +1917,7 @@ void tst_QVector::distanceToLine()
 }
 
 // Test the computation of dot products for 2D vectors.
-void tst_QVector::dotProduct2_data()
+void tst_QVectorND::dotProduct2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1940,7 +1940,7 @@ void tst_QVector::dotProduct2_data()
         << (qreal)4.0f << (qreal)5.0f
         << (qreal)14.0f;
 }
-void tst_QVector::dotProduct2()
+void tst_QVectorND::dotProduct2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1960,12 +1960,12 @@ void tst_QVector::dotProduct2()
 }
 
 // Test the computation of dot products for 3D vectors.
-void tst_QVector::dotProduct3_data()
+void tst_QVectorND::dotProduct3_data()
 {
     // Use the same test data as the crossProduct test.
     crossProduct_data();
 }
-void tst_QVector::dotProduct3()
+void tst_QVectorND::dotProduct3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1994,7 +1994,7 @@ void tst_QVector::dotProduct3()
 }
 
 // Test the computation of dot products for 4D vectors.
-void tst_QVector::dotProduct4_data()
+void tst_QVectorND::dotProduct4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -2021,7 +2021,7 @@ void tst_QVector::dotProduct4_data()
         << (qreal)4.0f << (qreal)5.0f << (qreal)6.0f << (qreal)7.0f
         << (qreal)60.0f;
 }
-void tst_QVector::dotProduct4()
+void tst_QVectorND::dotProduct4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -2044,14 +2044,14 @@ void tst_QVector::dotProduct4()
     QCOMPARE(QVector4D::dotProduct(v1, v2), d);
 }
 
-class tst_QVectorProperties : public QObject
+class tst_QVectorNDProperties : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(QVector2D vector2D READ vector2D WRITE setVector2D)
     Q_PROPERTY(QVector3D vector3D READ vector3D WRITE setVector3D)
     Q_PROPERTY(QVector4D vector4D READ vector4D WRITE setVector4D)
 public:
-    tst_QVectorProperties(QObject *parent = 0) : QObject(parent) {}
+    tst_QVectorNDProperties(QObject *parent = 0) : QObject(parent) {}
 
     QVector2D vector2D() const { return v2; }
     void setVector2D(const QVector2D& value) { v2 = value; }
@@ -2069,9 +2069,9 @@ private:
 };
 
 // Test getting and setting vector properties via the metaobject system.
-void tst_QVector::properties()
+void tst_QVectorND::properties()
 {
-    tst_QVectorProperties obj;
+    tst_QVectorNDProperties obj;
 
     obj.setVector2D(QVector2D(1.0f, 2.0f));
     obj.setVector3D(QVector3D(3.0f, 4.0f, 5.0f));
@@ -2115,7 +2115,7 @@ void tst_QVector::properties()
     QCOMPARE(v4.w(), (qreal)-9.0f);
 }
 
-void tst_QVector::metaTypes()
+void tst_QVectorND::metaTypes()
 {
     QVERIFY(QMetaType::type("QVector2D") == QMetaType::QVector2D);
     QVERIFY(QMetaType::type("QVector3D") == QMetaType::QVector3D);
@@ -2137,6 +2137,6 @@ void tst_QVector::metaTypes()
     QVERIFY(qMetaTypeId<QVector4D>() == QMetaType::QVector4D);
 }
 
-QTEST_APPLESS_MAIN(tst_QVector)
+QTEST_APPLESS_MAIN(tst_QVectorND)
 
 #include "tst_qvectornd.moc"
diff --git a/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp b/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp
index 4a11404..f4f6181 100644
--- a/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp
+++ b/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp
@@ -52,25 +52,25 @@
  \since 4.5
  \brief Test QtXmlPatterns test suite driver in tests/auto/xmlpatternsxqts/lib/.
  */
-class tst_XmlPatternsXSLTS : public tst_SuiteTest
+class tst_XmlPatternsDiagnosticsTS : public tst_SuiteTest
 {
     Q_OBJECT
 public:
-    tst_XmlPatternsXSLTS();
+    tst_XmlPatternsDiagnosticsTS();
 protected:
     virtual void catalogPath(QString &write) const;
 };
 
-tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true)
+tst_XmlPatternsDiagnosticsTS::tst_XmlPatternsDiagnosticsTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true)
 {
 }
 
-void tst_XmlPatternsXSLTS::catalogPath(QString &write) const
+void tst_XmlPatternsDiagnosticsTS::catalogPath(QString &write) const
 {
     write = QLatin1String("TestSuite/DiagnosticsCatalog.xml");
 }
 
-QTEST_MAIN(tst_XmlPatternsXSLTS)
+QTEST_MAIN(tst_XmlPatternsDiagnosticsTS)
 
 #include "tst_xmlpatternsdiagnosticsts.moc"
 #else
-- 
cgit v0.12


From 00d25e88ba57241d840ec4d81d75a3853520ba37 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Mon, 22 Mar 2010 09:42:40 +0000
Subject: Updated dist/changes-4.6.3

---
 dist/changes-4.6.3 | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/dist/changes-4.6.3 b/dist/changes-4.6.3
index 57cc453..d8e9fb4 100644
--- a/dist/changes-4.6.3
+++ b/dist/changes-4.6.3
@@ -138,6 +138,14 @@ Qt for Windows CE
 
  -
 
+Qt for Symbian
+--------------
+
+ - [QT-567] Implementation of QtMultimedia QAudio* APIs
+ - [QTBUG-8919] Modified Phonon MMF backend to support video playback on
+   platforms which use graphics surfaces (i.e. platforms using the
+   New Graphics Architecture a.k.a. ScreenPlay)
+
 ****************************************************************************
 *                          Tools                                           *
 ****************************************************************************
-- 
cgit v0.12


From 28d469475ccb708ab3f141d9e3c48a24dff4b5e1 Mon Sep 17 00:00:00 2001
From: Simon Hausmann <simon.hausmann@nokia.com>
Date: Mon, 22 Mar 2010 12:43:51 +0100
Subject: Updated WebKit from /home/shausman/src/webkit/trunk to
 qtwebkit/qtwebkit-4.6 ( d95c54951e7af2aa7def4346a142b2162bd89bbd )

Changes in WebKit/qt since the last update:

 https://bugs.webkit.org/show_bug.cgi?id=33408 -- Add flag IGNORE_FIXED_BACKGROUNDS (disabled by default) to ignore fixed background images and accelerate web page scrolling on low-powered/mobile devices
 https://bugs.webkit.org/show_bug.cgi?id=34168 -- [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms
 https://bugs.webkit.org/show_bug.cgi?id=33150 -- Do not render the full frame when there is some elements with fixed positioning
---
 src/3rdparty/webkit/VERSION                        |  2 +-
 src/3rdparty/webkit/WebCore/ChangeLog              | 46 +++++++++++++
 src/3rdparty/webkit/WebCore/WebCore.pro            |  4 ++
 src/3rdparty/webkit/WebCore/page/FrameView.cpp     | 75 +++++++++++++++++++++-
 src/3rdparty/webkit/WebCore/page/FrameView.h       |  7 ++
 .../webkit/WebCore/platform/ScrollView.cpp         |  7 +-
 src/3rdparty/webkit/WebCore/platform/ScrollView.h  |  3 +
 .../webkit/WebCore/rendering/RenderBlock.h         |  1 +
 .../webkit/WebCore/rendering/RenderBox.cpp         | 10 +++
 .../WebCore/rendering/RenderBoxModelObject.cpp     | 11 ++++
 .../webkit/WebCore/rendering/RenderObject.cpp      | 15 +++--
 11 files changed, 174 insertions(+), 7 deletions(-)

diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION
index a2d5f37..def66ef 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
 
-        266a6c4f1938dd9edf4a8125faf91c62495e3ce2
+        d95c54951e7af2aa7def4346a142b2162bd89bbd
diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog
index a3f70d3..869e225 100644
--- a/src/3rdparty/webkit/WebCore/ChangeLog
+++ b/src/3rdparty/webkit/WebCore/ChangeLog
@@ -1,3 +1,49 @@
+2010-01-31  Benjamin Poulain  <benjamin.poulain@nokia.com>
+
+        Reviewed by Eric Seidel.
+
+        [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms
+        https://bugs.webkit.org/show_bug.cgi?id=34168
+
+        Enable FAST_MOBILE_SCROLLING for Qt on Maemo 5, Linux embedded
+        and Symbian
+
+        * WebCore.pro:
+
+2010-01-19  Daniel Bates  <dbates@rim.com>
+
+        Reviewed by Adam Treat.
+
+        https://bugs.webkit.org/show_bug.cgi?id=33408
+
+        Implements an optimization to ignore fixed background images
+        (i.e. background-attachment: fixed) when a page does not contain
+        any fixed position elements so as to allow fast repaints (via bit
+        blit) when scrolling a page.
+
+        Currently, if a page has elements that specify either a fixed
+        background or a fixed position then we perform a slow repaint
+        (i.e disable blitting) so as to avoid rendering artifacts.
+        However, on low-powered/mobile devices slow repaints can cause
+        noticeable delays when scrolling a page with a fixed background
+        image. By sacrificing support for fixed background images when
+        there are no fixed elements on the page and with come care, we
+        don't need to force slow repaints and can avoid rendering artifacts.
+        Hence, on such devices we can improve the responsiveness of
+        scrolling a page with a fixed background image.
+
+        Note, this optimization is only enabled if the WebKit is built
+        with FAST_MOBILE_SCROLLING enabled.
+
+        Tests: fast/fast-mobile-scrolling/fixed-position-element.html
+               fast/fast-mobile-scrolling/no-fixed-position-elements.html
+
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
+        Disable fixed background attachment if we can blit on scroll.
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::styleWillChange):
+
 2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>
 
         Reviewed by Tor Arne Vestbø.
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 5654a18..735c8ef 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -162,6 +162,10 @@ contains(DEFINES, ENABLE_SINGLE_THREADED=1) {
     DEFINES += ENABLE_SVG_FONTS=0 ENABLE_SVG_FOREIGN_OBJECT=0 ENABLE_SVG_ANIMATION=0 ENABLE_SVG_AS_IMAGE=0 ENABLE_SVG_USE=0
 }
 
+mameo5|symbian|embedded {
+    DEFINES += ENABLE_FAST_MOBILE_SCROLLING=1
+}
+
 # HTML5 ruby support
 !contains(DEFINES, ENABLE_RUBY=.): DEFINES += ENABLE_RUBY=1
 
diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/WebCore/page/FrameView.cpp
index bc4e4f2..4c3a0ab 100644
--- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp
+++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp
@@ -106,6 +106,7 @@ struct ScheduledEvent {
 FrameView::FrameView(Frame* frame)
     : m_frame(frame)
     , m_slowRepaintObjectCount(0)
+    , m_fixedObjectCount(0)
     , m_layoutTimer(this, &FrameView::layoutTimerFired)
     , m_layoutRoot(0)
     , m_postLayoutTasksTimer(this, &FrameView::postLayoutTimerFired)
@@ -735,7 +736,7 @@ String FrameView::mediaType() const
 
 bool FrameView::useSlowRepaints() const
 {
-    return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || m_isOverlapped || !m_contentIsOpaque;
+    return m_useSlowRepaints || m_slowRepaintObjectCount > 0 || (platformWidget() && m_fixedObjectCount > 0) || m_isOverlapped || !m_contentIsOpaque;
 }
 
 void FrameView::setUseSlowRepaints()
@@ -759,6 +760,78 @@ void FrameView::removeSlowRepaintObject()
         setCanBlitOnScroll(!useSlowRepaints());
 }
 
+void FrameView::addFixedObject()
+{
+    if (!m_fixedObjectCount && platformWidget())
+        setCanBlitOnScroll(false);
+    ++m_fixedObjectCount;
+}
+
+void FrameView::removeFixedObject()
+{
+    ASSERT(m_fixedObjectCount > 0);
+    m_fixedObjectCount--;
+    if (!m_fixedObjectCount)
+        setCanBlitOnScroll(!useSlowRepaints());
+}
+
+void FrameView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
+{
+    const size_t fixedObjectThreshold = 5;
+
+    ListHashSet<RenderBox*>* positionedObjects = 0;
+    if (RenderView* root = m_frame->contentRenderer())
+        positionedObjects = root->positionedObjects();
+
+    if (!positionedObjects || positionedObjects->isEmpty()) {
+        hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
+        return;
+    }
+
+    // Get the rects of the fixed objects visible in the rectToScroll
+    Vector<IntRect, fixedObjectThreshold> subRectToUpdate;
+    bool updateInvalidatedSubRect = true;
+    ListHashSet<RenderBox*>::const_iterator end = positionedObjects->end();
+    for (ListHashSet<RenderBox*>::const_iterator it = positionedObjects->begin(); it != end; ++it) {
+        RenderBox* renderBox = *it;
+        if (renderBox->style()->position() != FixedPosition)
+            continue;
+        IntRect topLevelRect;
+        IntRect updateRect = renderBox->paintingRootRect(topLevelRect);
+        updateRect.move(-scrollX(), -scrollY());
+        updateRect.intersect(rectToScroll);
+        if (!updateRect.isEmpty()) {
+            if (subRectToUpdate.size() >= fixedObjectThreshold) {
+                updateInvalidatedSubRect = false;
+                break;
+            }
+            subRectToUpdate.append(updateRect);
+        }
+    }
+
+    // Scroll the view
+    if (updateInvalidatedSubRect) {
+        // 1) scroll
+        hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
+
+        // 2) update the area of fixed objets that has been invalidated
+        size_t fixObjectsCount = subRectToUpdate.size();
+        for (size_t i = 0; i < fixObjectsCount; ++i) {
+            IntRect updateRect = subRectToUpdate[i];
+            IntRect scrolledRect = updateRect;
+            scrolledRect.move(scrollDelta);
+            updateRect.unite(scrolledRect);
+            updateRect.intersect(rectToScroll);
+            hostWindow()->repaint(updateRect, true, false, true);
+        }
+    } else {
+        // the number of fixed objects exceed the threshold, so we repaint everything.
+        IntRect updateRect = clipRect;
+        updateRect.intersect(rectToScroll);
+        hostWindow()->repaint(updateRect, true, false, true);
+    }
+}
+
 void FrameView::setIsOverlapped(bool isOverlapped)
 {
     if (isOverlapped == m_isOverlapped)
diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.h b/src/3rdparty/webkit/WebCore/page/FrameView.h
index 3d17d2c..5243c02 100644
--- a/src/3rdparty/webkit/WebCore/page/FrameView.h
+++ b/src/3rdparty/webkit/WebCore/page/FrameView.h
@@ -143,6 +143,9 @@ public:
     void addSlowRepaintObject();
     void removeSlowRepaintObject();
 
+    void addFixedObject();
+    void removeFixedObject();
+
     void beginDeferredRepaints();
     void endDeferredRepaints();
     void checkStopDelayingDeferredRepaints();
@@ -196,6 +199,9 @@ public:
     bool isFrameViewScrollCorner(RenderScrollbarPart* scrollCorner) const { return m_scrollCorner == scrollCorner; }
     void invalidateScrollCorner();
 
+protected:
+    virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
+
 private:
     FrameView(Frame*);
 
@@ -261,6 +267,7 @@ private:
     bool m_isOverlapped;
     bool m_contentIsOpaque;
     unsigned m_slowRepaintObjectCount;
+    unsigned m_fixedObjectCount;
 
     int m_borderX, m_borderY;
 
diff --git a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp
index e67daf9..9e15c43 100644
--- a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp
@@ -509,7 +509,7 @@ void ScrollView::scrollContents(const IntSize& scrollDelta)
 
     if (canBlitOnScroll()) { // The main frame can just blit the WebView window
        // FIXME: Find a way to blit subframes without blitting overlapping content
-       hostWindow()->scroll(-scrollDelta, scrollViewRect, clipRect);
+       scrollContentsFastPath(-scrollDelta, scrollViewRect, clipRect);
     } else { 
        // We need to go ahead and repaint the entire backing store.  Do it now before moving the
        // windowed plugins.
@@ -524,6 +524,11 @@ void ScrollView::scrollContents(const IntSize& scrollDelta)
     hostWindow()->paint();
 }
 
+void ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
+{
+    hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
+}
+
 IntPoint ScrollView::windowToContents(const IntPoint& windowPoint) const
 {
     IntPoint viewPoint = convertFromContainingWindow(windowPoint);
diff --git a/src/3rdparty/webkit/WebCore/platform/ScrollView.h b/src/3rdparty/webkit/WebCore/platform/ScrollView.h
index 5dacff5..7060d07 100644
--- a/src/3rdparty/webkit/WebCore/platform/ScrollView.h
+++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.h
@@ -244,6 +244,9 @@ protected:
     IntRect scrollCornerRect() const;
     virtual void updateScrollCorner();
     virtual void paintScrollCorner(GraphicsContext*, const IntRect& cornerRect);
+
+    // Scroll the content by blitting the pixels
+    virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
     
 private:
     RefPtr<Scrollbar> m_horizontalScrollbar;
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h
index 7ba5fce..3300d01 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h
@@ -75,6 +75,7 @@ public:
     void insertPositionedObject(RenderBox*);
     void removePositionedObject(RenderBox*);
     void removePositionedObjects(RenderBlock*);
+    ListHashSet<RenderBox*>* positionedObjects() const { return m_positionedObjects; }
 
     void addPercentHeightDescendant(RenderBox*);
     static void removePercentHeightDescendant(RenderBox*);
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
index 1df82a4..7ca2ff8 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
@@ -145,6 +145,16 @@ void RenderBox::styleWillChange(StyleDifference diff, const RenderStyle* newStyl
                 removeFloatingOrPositionedChildFromBlockLists();
         }
     }
+    if (FrameView *frameView = view()->frameView()) {
+        bool newStyleIsFixed = newStyle && newStyle->position() == FixedPosition;
+        bool oldStyleIsFixed = style() && style()->position() == FixedPosition;
+        if (newStyleIsFixed != oldStyleIsFixed) {
+            if (newStyleIsFixed)
+                frameView->addFixedObject();
+            else
+                frameView->removeFixedObject();
+        }
+    }
 
     RenderBoxModelObject::styleWillChange(diff, newStyle);
 }
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp
index 23dad2d..9d0f1ed 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp
@@ -557,6 +557,17 @@ void RenderBoxModelObject::calculateBackgroundImageGeometry(const FillLayer* fil
     // Determine the background positioning area and set destRect to the background painting area.
     // destRect will be adjusted later if the background is non-repeating.
     bool fixedAttachment = fillLayer->attachment() == FixedBackgroundAttachment;
+
+#if ENABLE(FAST_MOBILE_SCROLLING)
+    if (view()->frameView() && view()->frameView()->canBlitOnScroll()) {
+        // As a side effect of an optimization to blit on scroll, we do not honor the CSS
+        // property "background-attachment: fixed" because it may result in rendering
+        // artifacts. Note, these artifacts only appear if we are blitting on scroll of
+        // a page that has fixed background images.
+        fixedAttachment = false;
+    }
+#endif
+
     if (!fixedAttachment) {
         destRect = IntRect(tx, ty, w, h);
 
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp
index a10ffd9..199de4a 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp
@@ -1591,10 +1591,17 @@ void RenderObject::styleWillChange(StyleDifference diff, const RenderStyle* newS
         s_affectsParentBlock = false;
 
     if (view()->frameView()) {
-        // FIXME: A better solution would be to only invalidate the fixed regions when scrolling.  It's overkill to
-        // prevent the entire view from blitting on a scroll.
-        bool newStyleSlowScroll = newStyle && (newStyle->position() == FixedPosition || newStyle->hasFixedBackgroundImage());
-        bool oldStyleSlowScroll = m_style && (m_style->position() == FixedPosition || m_style->hasFixedBackgroundImage());
+        bool shouldBlitOnFixedBackgroundImage = false;
+#if ENABLE(FAST_MOBILE_SCROLLING)
+        // On low-powered/mobile devices, preventing blitting on a scroll can cause noticeable delays
+        // when scrolling a page with a fixed background image. As an optimization, assuming there are
+        // no fixed positoned elements on the page, we can acclerate scrolling (via blitting) if we
+        // ignore the CSS property "background-attachment: fixed".
+        shouldBlitOnFixedBackgroundImage = true;
+#endif
+
+        bool newStyleSlowScroll = newStyle && !shouldBlitOnFixedBackgroundImage && newStyle->hasFixedBackgroundImage();
+        bool oldStyleSlowScroll = m_style && !shouldBlitOnFixedBackgroundImage && m_style->hasFixedBackgroundImage();
         if (oldStyleSlowScroll != newStyleSlowScroll) {
             if (oldStyleSlowScroll)
                 view()->frameView()->removeSlowRepaintObject();
-- 
cgit v0.12


From 22993cbada46fb9e170d4ac7a08413c968fce2a2 Mon Sep 17 00:00:00 2001
From: "Bradley T. Hughes" <bradley.hughes@nokia.com>
Date: Mon, 22 Mar 2010 13:06:29 +0100
Subject: Stop QHostInfo thread pool when application is about to exit

Ensure that the threadpool QHostInfo uses internally has cleanup its
threads when the application exits. This avoids the warning from
QWaitCondition on Windows (which happens due to thread termination at
application exit).

Task-number: QTBUG-7691
Reviewed-by: mgoetz
---
 src/network/kernel/qhostinfo.cpp | 1 +
 src/network/kernel/qhostinfo_p.h | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index 7150fb7..6894978 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -479,6 +479,7 @@ void QHostInfoRunnable::run()
 QHostInfoLookupManager::QHostInfoLookupManager() : mutex(QMutex::Recursive), wasDeleted(false)
 {
     moveToThread(QCoreApplicationPrivate::mainThread());
+    connect(QCoreApplication::instance(), SIGNAL(destroyed()), SLOT(waitForThreadPoolDone()), Qt::DirectConnection);
     threadPool.setMaxThreadCount(5); // do 5 DNS lookups in parallel
 }
 
diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h
index 2b26b07..4fc74e9 100644
--- a/src/network/kernel/qhostinfo_p.h
+++ b/src/network/kernel/qhostinfo_p.h
@@ -184,6 +184,9 @@ protected:
     QMutex mutex;
 
     bool wasDeleted;
+
+private slots:
+    void waitForThreadPoolDone() { threadPool.waitForDone(); }
 };
 
 #endif
-- 
cgit v0.12


From 6da8cec6042823da5622d048bb66ca7c40aed9b3 Mon Sep 17 00:00:00 2001
From: Sami Merila <sami.merila@nokia.com>
Date: Mon, 22 Mar 2010 14:55:40 +0200
Subject: Adding custom pixel metrics requires cleaning and rebuilding of QtGui

This is due that the size of the pixel metrics table is stored in some
object file and the file is not updated, even if we increase the table
size integer. Removing direct calls from internal methods to member
variable data[] removes the need to do whole rebuild when adding
values.

Relates to task #9247.

Task-number: QTBUG-9247
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style_s60.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 14782d8..bb862a3 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -1096,7 +1096,7 @@ void QS60StylePrivate::setActiveLayout()
         activeLayoutIndex += (!landscape) ? 1 : 0;
     }
 
-    m_pmPointer = data[activeLayoutIndex];
+    setCurrentLayout(activeLayoutIndex);
 }
 
 Q_GLOBAL_STATIC(QList<QS60StyleAnimation *>, m_animations)
-- 
cgit v0.12


From c3dd4b356e277c8ec2a2634dbae04cdc7e798ca9 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Date: Mon, 22 Mar 2010 13:40:54 +0100
Subject: Recommit 1ebeb971d3382aec0fff927

This reverts commit 725c2c29c192349016b1332824a7716bbb992f31 which reverted
the original commit because of a test failure on qws. This recommit adds
a test for whether the metrics from QFontEngine::boundingBox() are valid,
which is required for the bearings to be calculated. This test was also
in the original logic.
---
 src/gui/text/qfontengine.cpp     | 15 +++++++++++++++
 src/gui/text/qfontengine_p.h     |  3 +++
 src/gui/text/qfontengine_win.cpp | 24 ++++++++++++++++++++++++
 src/gui/text/qfontengine_win_p.h |  2 ++
 src/gui/text/qfontmetrics.cpp    | 21 +++++++++++++--------
 src/gui/text/qtextlayout.cpp     |  6 +++---
 6 files changed, 60 insertions(+), 11 deletions(-)

diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index c000457..629db66 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -379,6 +379,15 @@ void QFontEngine::getGlyphPositions(const QGlyphLayout &glyphs, const QTransform
     Q_ASSERT(positions.size() == glyphs_out.size());
 }
 
+void QFontEngine::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing)
+{
+    glyph_metrics_t gi = boundingBox(glyph);
+    bool isValid = gi.isValid();
+    if (leftBearing != 0)
+        *leftBearing = isValid ? gi.x.toReal() : 0.0;
+    if (rightBearing != 0)
+        *rightBearing = isValid ? (gi.xoff - gi.x - gi.width).toReal() : 0.0;
+}
 
 glyph_metrics_t QFontEngine::tightBoundingBox(const QGlyphLayout &glyphs)
 {
@@ -1385,6 +1394,12 @@ glyph_metrics_t QFontEngineMulti::boundingBox(const QGlyphLayout &glyphs)
     return overall;
 }
 
+void QFontEngineMulti::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing)
+{
+    int which = highByte(glyph);
+    engine(which)->getGlyphBearings(stripped(glyph), leftBearing, rightBearing);
+}
+
 void QFontEngineMulti::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs,
                                         QPainterPath *path, QTextItem::RenderFlags flags)
 {
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 71ab5a5..e645caf 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -206,6 +206,8 @@ public:
     virtual qreal minLeftBearing() const { return qreal(); }
     virtual qreal minRightBearing() const { return qreal(); }
 
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+
     virtual const char *name() const = 0;
 
     virtual bool canRender(const QChar *string, int len) = 0;
@@ -374,6 +376,7 @@ public:
     virtual void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const;
     virtual void doKerning(QGlyphLayout *, QTextEngine::ShaperFlags) const;
     virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags);
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
 
     virtual QFixed ascent() const;
     virtual QFixed descent() const;
diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp
index 1a815d3..a133b48 100644
--- a/src/gui/text/qfontengine_win.cpp
+++ b/src/gui/text/qfontengine_win.cpp
@@ -649,6 +649,30 @@ static const ushort char_table[] = {
 
 static const int char_table_entries = sizeof(char_table)/sizeof(ushort);
 
+void QFontEngineWin::getGlyphBearings(glyph_t glyph, qreal *leftBearing, qreal *rightBearing)
+{
+    HDC hdc = shared_dc();
+    SelectObject(hdc, hfont);
+
+#ifndef Q_WS_WINCE
+    if (ttf)
+#endif
+
+    {
+        ABC abcWidths;
+        GetCharABCWidthsI(hdc, glyph, 1, 0, &abcWidths);
+        if (leftBearing)
+            *leftBearing = abcWidths.abcA;
+        if (rightBearing)
+            *rightBearing = abcWidths.abcC;
+    }
+
+#ifndef Q_WS_WINCE
+    else {
+        QFontEngine::getGlyphBearings(glyph, leftBearing, rightBearing);
+    }
+#endif
+}
 
 qreal QFontEngineWin::minLeftBearing() const
 {
diff --git a/src/gui/text/qfontengine_win_p.h b/src/gui/text/qfontengine_win_p.h
index f9d8f8b..f19e48e 100644
--- a/src/gui/text/qfontengine_win_p.h
+++ b/src/gui/text/qfontengine_win_p.h
@@ -106,6 +106,8 @@ public:
     virtual QImage alphaMapForGlyph(glyph_t, const QTransform &xform);
     virtual QImage alphaRGBMapForGlyph(glyph_t t, int margin, const QTransform &xform);
 
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+
     int getGlyphIndexes(const QChar *ch, int numChars, QGlyphLayout *glyphs, bool mirrored) const;
     void getCMap();
 
diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp
index 41d0af1..44a18de 100644
--- a/src/gui/text/qfontmetrics.cpp
+++ b/src/gui/text/qfontmetrics.cpp
@@ -472,8 +472,9 @@ int QFontMetrics::leftBearing(QChar ch) const
     int nglyphs = 9;
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return qRound(gi.x);
+    qreal lb;
+    engine->getGlyphBearings(glyphs.glyphs[0], &lb);
+    return qRound(lb);
 }
 
 /*!
@@ -506,8 +507,9 @@ int QFontMetrics::rightBearing(QChar ch) const
     int nglyphs = 9;
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return qRound(gi.xoff - gi.x - gi.width);
+    qreal rb;
+    engine->getGlyphBearings(glyphs.glyphs[0], 0, &rb);
+    return qRound(rb);
 }
 
 /*!
@@ -1317,8 +1319,9 @@ qreal QFontMetricsF::leftBearing(QChar ch) const
     int nglyphs = 9;
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return gi.x.toReal();
+    qreal lb;
+    engine->getGlyphBearings(glyphs.glyphs[0], &lb);
+    return lb;
 }
 
 /*!
@@ -1351,8 +1354,10 @@ qreal QFontMetricsF::rightBearing(QChar ch) const
     int nglyphs = 9;
     engine->stringToCMap(&ch, 1, &glyphs, &nglyphs, 0);
     // ### can nglyphs != 1 happen at all? Not currently I think
-    glyph_metrics_t gi = engine->boundingBox(glyphs.glyphs[0]);
-    return (gi.xoff - gi.x - gi.width).toReal();
+    qreal rb;
+    engine->getGlyphBearings(glyphs.glyphs[0], 0, &rb);
+    return rb;
+
 }
 
 /*!
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 204effa..3c0e85e 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -1688,9 +1688,9 @@ namespace {
             if (currentPosition <= 0)
                 return;
 
-            glyph_metrics_t gi = fontEngine->boundingBox(currentGlyph());
-            if (gi.isValid())
-                rightBearing = qMin(QFixed(), gi.xoff - gi.x - gi.width);
+            qreal rb;
+            fontEngine->getGlyphBearings(currentGlyph(), 0, &rb);
+            rightBearing = qMin(QFixed(), QFixed::fromReal(rb));
         }
 
         inline void resetRightBearing()
-- 
cgit v0.12


From 669c8042fa78c539cdefec87c85bce91e561871d Mon Sep 17 00:00:00 2001
From: Sami Merila <sami.merila@nokia.com>
Date: Mon, 22 Mar 2010 14:59:25 +0200
Subject: Custom pixel metric values cannot be inquired from outside the class

This is due that
a) custom values are internal and not exposed
b) values use different format - they are indexes for internal data[]
table and not according to QStyle documentation for pixel metrics.

Task-number: QTBUG-9247
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp | 7 +++++++
 src/gui/styles/qs60style.h   | 9 +++++++++
 src/gui/styles/qs60style_p.h | 3 +++
 3 files changed, 19 insertions(+)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 750e19f..ed2074a 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -307,6 +307,13 @@ void QS60StylePrivate::drawSkinPart(QS60StyleEnums::SkinParts part,
 
 short QS60StylePrivate::pixelMetric(int metric)
 {
+    //If it is a custom value, need to strip away the base to map to internal
+    //pixel metric value table
+    if (metric & QStyle::PM_CustomBase) {
+        metric -= QStyle::PM_CustomBase;
+        metric += MAX_NON_CUSTOM_PIXELMETRICS - 1;
+    }
+
     Q_ASSERT(metric < MAX_PIXELMETRICS);
     const short returnValue = m_pmPointer[metric];
     return returnValue;
diff --git a/src/gui/styles/qs60style.h b/src/gui/styles/qs60style.h
index 82cc21c..af17843 100644
--- a/src/gui/styles/qs60style.h
+++ b/src/gui/styles/qs60style.h
@@ -52,6 +52,15 @@ QT_MODULE(Gui)
 
 #if !defined(QT_NO_STYLE_S60)
 
+//Public custom pixel metrics values.
+//These can be used to fetch custom pixel metric value from outside QS60Style.
+enum {
+    PM_FrameCornerWidth = QStyle::PM_CustomBase + 1,
+    PM_FrameCornerHeight,
+    PM_BoldLineWidth,
+    PM_ThinLineWidth
+    };
+
 class QS60StylePrivate;
 
 class Q_GUI_EXPORT QS60Style : public QCommonStyle
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index 16d82e7..84f50ea 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -61,12 +61,15 @@ QT_BEGIN_NAMESPACE
 
 const int MAX_NON_CUSTOM_PIXELMETRICS = 92;
 const int CUSTOMVALUESCOUNT = 4;
+
+//internal custom pixel metrics values, these map to entry in data[] table
 enum {
     PM_Custom_FrameCornerWidth = MAX_NON_CUSTOM_PIXELMETRICS,
     PM_Custom_FrameCornerHeight,
     PM_Custom_BoldLineWidth,
     PM_Custom_ThinLineWidth
     };
+
 const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT;
 
 typedef struct {
-- 
cgit v0.12


From c1e23f855826942d7d3821a944c35272d9ecffb4 Mon Sep 17 00:00:00 2001
From: Kent Hansen <kent.hansen@nokia.com>
Date: Mon, 22 Mar 2010 14:00:02 +0100
Subject: Reset history states when (re)starting state machine

State saved in QHistoryState should not be persistent between
state machine starts/stops.

Task-number: QTBUG-8842
Reviewed-by: Eskil Abrahamsen Blomfeldt
---
 src/corelib/statemachine/qstatemachine.cpp     | 11 +++++
 src/corelib/statemachine/qstatemachine_p.h     |  2 +
 tests/auto/qstatemachine/tst_qstatemachine.cpp | 59 ++++++++++++++++++++++++++
 3 files changed, 72 insertions(+)

diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index bd7e626..9d5c49f 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -1175,6 +1175,16 @@ void QStateMachinePrivate::removeStartState()
     _startState = 0;
 }
 
+void QStateMachinePrivate::clearHistory()
+{
+    Q_Q(QStateMachine);
+    QList<QHistoryState*> historyStates = qFindChildren<QHistoryState*>(q);
+    for (int i = 0; i < historyStates.size(); ++i) {
+        QHistoryState *h = historyStates.at(i);
+        QHistoryStatePrivate::get(h)->configuration.clear();
+    }
+}
+
 void QStateMachinePrivate::_q_start()
 {
     Q_Q(QStateMachine);
@@ -1186,6 +1196,7 @@ void QStateMachinePrivate::_q_start()
     internalEventQueue.clear();
     qDeleteAll(externalEventQueue);
     externalEventQueue.clear();
+    clearHistory();
 
 #ifdef QSTATEMACHINE_DEBUG
     qDebug() << q << ": starting";
diff --git a/src/corelib/statemachine/qstatemachine_p.h b/src/corelib/statemachine/qstatemachine_p.h
index 0fead5d..5e1015f 100644
--- a/src/corelib/statemachine/qstatemachine_p.h
+++ b/src/corelib/statemachine/qstatemachine_p.h
@@ -126,6 +126,8 @@ public:
     QState *startState();
     void removeStartState();
 
+    void clearHistory();
+
     void microstep(QEvent *event, const QList<QAbstractTransition*> &transitionList);
     bool isPreempted(const QAbstractState *s, const QSet<QAbstractTransition*> &transitions) const;
     QSet<QAbstractTransition*> selectTransitions(QEvent *event) const;
diff --git a/tests/auto/qstatemachine/tst_qstatemachine.cpp b/tests/auto/qstatemachine/tst_qstatemachine.cpp
index 90b5a22..2bf76e7 100644
--- a/tests/auto/qstatemachine/tst_qstatemachine.cpp
+++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp
@@ -155,6 +155,7 @@ private slots:
     void clearError();
     void historyStateHasNowhereToGo();
     void historyStateAsInitialState();
+    void historyStateAfterRestart();
     void brokenStateIsNeverEntered();
     void customErrorStateNotInGraph();
     void transitionToStateNotInGraph();
@@ -906,6 +907,64 @@ void tst_QStateMachine::historyStateHasNowhereToGo()
     QCOMPARE(machine.errorString(), QString::fromLatin1("Missing default state in history state 'historyState'"));
 }
 
+void tst_QStateMachine::historyStateAfterRestart()
+{
+    // QTBUG-8842
+    QStateMachine machine;
+
+    QState *s1 = new QState(&machine);
+    machine.setInitialState(s1);
+    QState *s2 = new QState(&machine);
+    QState *s21 = new QState(s2);
+    QState *s22 = new QState(s2);
+    QHistoryState *s2h = new QHistoryState(s2);
+    s2h->setDefaultState(s21);
+    s1->addTransition(new EventTransition(QEvent::User, s2h));
+    s21->addTransition(new EventTransition(QEvent::User, s22));
+    s2->addTransition(new EventTransition(QEvent::User, s1));
+
+    for (int x = 0; x < 2; ++x) {
+        QSignalSpy startedSpy(&machine, SIGNAL(started()));
+        machine.start();
+        QTRY_COMPARE(startedSpy.count(), 1);
+        QCOMPARE(machine.configuration().count(), 1);
+        QVERIFY(machine.configuration().contains(s1));
+
+        // s1 -> s2h -> s21 (default state)
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 2);
+        QVERIFY(machine.configuration().contains(s2));
+        // This used to fail on the 2nd run because the
+        // history had not been cleared.
+        QVERIFY(machine.configuration().contains(s21));
+
+        // s21 -> s22
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 2);
+        QVERIFY(machine.configuration().contains(s2));
+        QVERIFY(machine.configuration().contains(s22));
+
+        // s2 -> s1 (s22 saved in s2h)
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 1);
+        QVERIFY(machine.configuration().contains(s1));
+
+        // s1 -> s2h -> s22 (saved state)
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 2);
+        QVERIFY(machine.configuration().contains(s2));
+        QVERIFY(machine.configuration().contains(s22));
+
+        QSignalSpy stoppedSpy(&machine, SIGNAL(stopped()));
+        machine.stop();
+        QTRY_COMPARE(stoppedSpy.count(), 1);
+    }
+}
+
 void tst_QStateMachine::brokenStateIsNeverEntered()
 {
     QStateMachine machine;
-- 
cgit v0.12


From 781e4d6190362818482864947a90d230fd700b06 Mon Sep 17 00:00:00 2001
From: Sami Merila <sami.merila@nokia.com>
Date: Mon, 22 Mar 2010 15:07:51 +0200
Subject: QS60Style: Housekeeping

Remove unnecessary #include, remove unnecessary integer, correct
spelling issues in comments and replace tabs with spaces.

Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp     | 12 +++++-------
 src/gui/styles/qs60style_p.h     |  2 +-
 src/gui/styles/qs60style_s60.cpp |  4 ++--
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index ed2074a..ec8b468 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -61,7 +61,6 @@
 #include "qscrollarea.h"
 #include "qscrollbar.h"
 #include "qtabbar.h"
-#include "qtablewidget.h"
 #include "qtableview.h"
 #include "qtextedit.h"
 #include "qtoolbar.h"
@@ -1009,7 +1008,6 @@ void QS60Style::drawComplexControl(ComplexControl control, const QStyleOptionCom
                     QS60StylePrivate::SE_SliderGrooveVertical;
                 QS60StylePrivate::drawSkinElement(grooveElement, painter, sliderGroove, flags);
             } else {
-                const QRect sliderGroove = subControlRect(control, optionSlider, SC_SliderGroove, widget);
                 const QPoint sliderGrooveCenter = sliderGroove.center();
                 const bool horizontal = optionSlider->orientation == Qt::Horizontal;
                 painter->save();
@@ -1136,7 +1134,7 @@ void QS60Style::drawComplexControl(ComplexControl control, const QStyleOptionCom
                 drawPrimitive(pe, &toolButton, painter, widget);
             }
 
-            if (toolBtn->text.length()>0 ||
+            if (toolBtn->text.length() > 0 ||
                 !toolBtn->icon.isNull()) {
                 const int frameWidth = pixelMetric(PM_DefaultFrameWidth, option, widget);
                 toolButton.rect = button.adjusted(frameWidth, frameWidth, -frameWidth, -frameWidth);
@@ -2316,7 +2314,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
                         (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper;
                 int minDimension = qMin(option->rect.width(), option->rect.height());
                 QRect iconRect(option->rect.topLeft(), QSize(minDimension, minDimension));
-				const int magicTweak = 3;
+                const int magicTweak = 3;
                 int resizeValue = minDimension >> 1;
                 if (!QS60StylePrivate::isTouchSupported()) {
                     minDimension += resizeValue; // Adjust the icon bigger because of empty space in svg icon.
@@ -2461,9 +2459,9 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt,
 #ifndef QT_NO_COMBOBOX
         case CT_ComboBox: {
                 // Fixing Ui design issues with too wide QComboBoxes and greedy SizeHints
-                // Make sure, that the combobox says within the screen.
+                // Make sure, that the combobox stays within the screen.
                 const QSize desktopContentSize = QApplication::desktop()->availableGeometry().size()
-                        -QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0);
+                        - QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0);
                 sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget).
                         boundedTo(desktopContentSize);
             }
@@ -3249,7 +3247,7 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event)
 
 /*!
     \internal
-    Handle the timer \a event. 
+    Handle the timer \a event.
 */
 void QS60Style::timerEvent(QTimerEvent *event)
 {
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index 84f50ea..df6f582 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -428,7 +428,7 @@ public:
         SE_ToolBarButton,
         SE_ToolBarButtonPressed,
         SE_PanelBackground,
-        SE_ScrollBarHandlePressedHorizontal, //only for 5.0+
+        SE_ScrollBarHandlePressedHorizontal,
         SE_ScrollBarHandlePressedVertical,
         SE_ButtonInactive,
         SE_Editor,
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index bb862a3..0f014c1 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -755,7 +755,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(
 
             if (drawn)
                 result = fromFbsBitmap(background, NULL, flags, targetSize);
-            // if drawing fails in skin server, just ignore the background (probably OOM occured)
+            // if drawing fails in skin server, just ignore the background (probably OOM case)
 
             CleanupStack::PopAndDestroy(4, background); //background, dev, gc, bgContext
     //        QS60WindowSurface::lockBitmapHeap();
@@ -787,7 +787,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(
 
             const int currentFrame = QS60StylePrivate::currentAnimationFrame(part);
             if (constructedFromTheme && aknAnimation && aknAnimation->BitmapAnimData()->FrameArray().Count() > 0) {
-                //Animation was created succesfully and contains frames, just fetch current frame
+                //Animation was created successfully and contains frames, just fetch current frame
                 if(currentFrame >= aknAnimation->BitmapAnimData()->FrameArray().Count())
                     User::Leave(KErrOverflow);
                 const CBitmapFrameData* frameData = aknAnimation->BitmapAnimData()->FrameArray().At(currentFrame);
-- 
cgit v0.12


From 97701a9e002593b0cc17afc6ce32925464f8b2fc Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Mon, 22 Mar 2010 16:17:18 +0200
Subject: Fixed table formatting in QSound documentation

Added the missing \row tag

Reviewed-by: TrustMe
---
 src/gui/kernel/qsound.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/gui/kernel/qsound.cpp b/src/gui/kernel/qsound.cpp
index 165e6ce..9d8ffa5 100644
--- a/src/gui/kernel/qsound.cpp
+++ b/src/gui/kernel/qsound.cpp
@@ -147,12 +147,13 @@ public:
     supports WAVE and AU files.
     \row
     \o Mac OS X
-    \o NSSound is used. All formats that NSSound supports, including QuickTime formats, 
+    \o NSSound is used. All formats that NSSound supports, including QuickTime formats,
     are supported by Qt for Mac OS X.
     \row
     \o Qt for Embedded Linux
     \o A built-in mixing sound server is used, accessing \c /dev/dsp
     directly. Only the WAVE format is supported.
+    \row
     \o Symbian
     \o CMdaAudioPlayerUtility is used. All formats that Symbian OS or devices support
     are supported also by Qt.
-- 
cgit v0.12


From fec5410f350e4d67b7991f15da94775f97bce0bb Mon Sep 17 00:00:00 2001
From: Jason Barron <jbarron@trolltech.com>
Date: Mon, 22 Mar 2010 16:41:42 +0100
Subject: Fix #ifdef logic for Symbian conversion functions in QVGPixmapData.

The previous #ifdef logic had the entire body of fromNativeType() and
toNativeType() #ifdef'ed out meaning that the OpenVG graphics system
could not convert CFbsBitmap instances to VGImage instances. This was
obviously incorrect because this code has no dependancy on RSgImage (or
EGL) and should therefore be outside of the #ifdef.

Reviewed-by: TrustMe
---
 src/openvg/qpixmapdata_vg.cpp | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp
index cb5255d..d602790 100644
--- a/src/openvg/qpixmapdata_vg.cpp
+++ b/src/openvg/qpixmapdata_vg.cpp
@@ -464,8 +464,8 @@ void QVGPixmapData::cleanup()
 
 void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
 {
-#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL)
     if (type == QPixmapData::SgImage && pixmap) {
+#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL)
         RSgImage *sgImage = reinterpret_cast<RSgImage*>(pixmap);
 
         destroyImages();
@@ -536,6 +536,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
         // release stuff
         eglDestroyImageKHR(QEglContext::display(), eglImage);
         driver.Close();
+#endif
     } else if (type == QPixmapData::FbsBitmap) {
         CFbsBitmap *bitmap = reinterpret_cast<CFbsBitmap*>(pixmap);
 
@@ -581,16 +582,12 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
         if(deleteSourceBitmap)
             delete bitmap;
     }
-#else
-    Q_UNUSED(pixmap);
-    Q_UNUSED(type);
-#endif
 }
 
 void* QVGPixmapData::toNativeType(NativeType type)
 {
-#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL)
     if (type == QPixmapData::SgImage) {
+#if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL)
         toVGImage();
 
         if (!isValid() || vgImage == VG_INVALID_HANDLE)
@@ -657,6 +654,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
         eglDestroyImageKHR(QEglContext::display(), eglImage);
         driver.Close();
         return reinterpret_cast<void*>(sgImage);
+#endif
     } else if (type == QPixmapData::FbsBitmap) {
         CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap);
 
@@ -678,10 +676,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
 
         return reinterpret_cast<void*>(bitmap);
     }
-#else
-    Q_UNUSED(type);
     return 0;
-#endif
 }
 #endif //Q_OS_SYMBIAN
 
-- 
cgit v0.12


From a260a77d9d6b7856278e2ee9b42623c469479d4e Mon Sep 17 00:00:00 2001
From: Alessandro Portale <alessandro.portale@nokia.com>
Date: Mon, 22 Mar 2010 21:14:39 +0100
Subject: Fixing keypad navigation focus frame

The QFocusFrame drawing code in QS60Style incorrectly assumed that
PM_LayoutSpacing is always equal to PM_FocusFrameMargin. When these
values diverged, the focus frame broke as described in task QTBUG-8036.

The fix makes the drawing more robust. The focus frame width is never
thicker than PM_LayoutSpacing and PM_FocusFrameMargin. And instead of
drawing a roundRect with calculated pen width, we are now filling a
roundRect. That makes the focusFrame more apparent.

Task-number: QTBUG-8036
Reviewed-by: Sami Merila
---
 src/gui/styles/qs60style.cpp | 37 +++++++++++++++++--------------------
 1 file changed, 17 insertions(+), 20 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 750e19f..86812a6 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -1964,11 +1964,6 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
     case CE_MenuScroller:
         break;
     case CE_FocusFrame: {
-            // The pen width should nearly fill the layoutspacings around the widget
-            const int penWidth =
-                qMin(pixelMetric(QS60Style::PM_LayoutVerticalSpacing), pixelMetric(QS60Style::PM_LayoutHorizontalSpacing))
-                - 2; // But keep 1 pixel distance to the focus widget and 1 pixel to the adjacent widgets
-
 #ifdef QT_KEYPAD_NAVIGATION
             bool editFocus = false;
             if (const QFocusFrame *focusFrame = qobject_cast<const QFocusFrame*>(widget)) {
@@ -1979,25 +1974,27 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
 #else
             const qreal opacity = 0.5;
 #endif
-            // Because of Qts coordinate system, we need to tweak the rect by .5 pixels, otherwise it gets blurred.
-            const qreal rectAdjustment = (penWidth % 2) ? -.5 : 0;
-
-            // Make sure that the pen stroke is inside the rect
-            const QRectF adjustedRect =
-                QRectF(option->rect).adjusted(
-                    rectAdjustment + penWidth,
-                    rectAdjustment + penWidth,
-                    -rectAdjustment - penWidth,
-                    -rectAdjustment - penWidth
-                );
-
-            const qreal roundRectRadius = penWidth * goldenRatio;
+            // We need to reduce the focus frame size if LayoutSpacing is smaller than FocusFrameMargin
+            // Otherwise, we would overlay adjacent widgets.
+            const int frameHeightReduction =
+                    qMin(0, pixelMetric(QStyle::PM_LayoutVerticalSpacing)
+                            - pixelMetric(QStyle::PM_FocusFrameVMargin));
+            const int frameWidthReduction =
+                    qMin(0, pixelMetric(QStyle::PM_LayoutHorizontalSpacing)
+                            - pixelMetric(QStyle::PM_FocusFrameHMargin));
+            const int rounding =
+                    qMin(pixelMetric(QStyle::PM_FocusFrameVMargin),
+                            pixelMetric(QStyle::PM_LayoutVerticalSpacing));
+            const QRect frameRect =
+                    option->rect.adjusted(-frameWidthReduction, -frameHeightReduction,
+                            frameWidthReduction, frameHeightReduction);
+            QPainterPath framePath;
+            framePath.addRoundedRect(frameRect, rounding, rounding);
 
             painter->save();
             painter->setRenderHint(QPainter::Antialiasing);
             painter->setOpacity(opacity);
-            painter->setPen(QPen(option->palette.color(QPalette::Text), penWidth));
-            painter->drawRoundedRect(adjustedRect, roundRectRadius, roundRectRadius);
+            painter->fillPath(framePath, option->palette.color(QPalette::Text));
             painter->restore();
         }
         break;
-- 
cgit v0.12


From 9b363e44f372fee183290e010ceecf9e75282ce2 Mon Sep 17 00:00:00 2001
From: Alessandro Portale <alessandro.portale@nokia.com>
Date: Mon, 22 Mar 2010 21:36:54 +0100
Subject: Increase KeypadNavigation focus visibility

The focus frame was drawn with a low opacity. That was intended meant
to increase aesthetics but in reality decreased usability. Now,
the opacity is higher. But still with a difference between navigation
mode and edit mode.

Task-number: QT-826
Reviewed-by: Sami Merila
---
 src/gui/styles/qs60style.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 86812a6..6448417 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -1970,9 +1970,9 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
                 if (focusFrame->widget() && focusFrame->widget()->hasEditFocus())
                     editFocus = true;
             }
-            const qreal opacity = editFocus ? 0.65 : 0.45; // Trial and error factors. Feel free to improve.
+            const qreal opacity = editFocus ? 1 : 0.75; // Trial and error factors. Feel free to improve.
 #else
-            const qreal opacity = 0.5;
+            const qreal opacity = 0.85;
 #endif
             // We need to reduce the focus frame size if LayoutSpacing is smaller than FocusFrameMargin
             // Otherwise, we would overlay adjacent widgets.
-- 
cgit v0.12


From 253d075996818ba6d42e0caf9e03271e386621d0 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Mon, 22 Mar 2010 09:48:37 +0200
Subject: Fixed left softkey regression caused by 7829fe15 in Symbian.

Dialogs are always responsible for setting all of their softkeys by
themselves, that's why this qmenubar hack can be removed.

When "Options" menu support was moved from QMainWindow to QMenuBar,
it appeared that some dialogs did had "Options" in LSK even it should
have had dialog specific softkey.

This commit removes the year old hack made to qdialogs softkey
implementation.

Reviewed-By: Sami Merila
---
 src/gui/dialogs/qdialog.cpp | 14 --------------
 1 file changed, 14 deletions(-)

diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp
index d8ac9a8..25ba016 100644
--- a/src/gui/dialogs/qdialog.cpp
+++ b/src/gui/dialogs/qdialog.cpp
@@ -69,7 +69,6 @@ extern bool qt_wince_is_smartphone(); //is defined in qguifunctions_wce.cpp
 #   include "qfontdialog.h"
 #   include "qcolordialog.h"
 #   include "qwizard.h"
-#   include "qmenubar.h"
 #endif
 
 #if defined(Q_WS_S60)
@@ -529,12 +528,6 @@ int QDialog::exec()
 #endif //Q_WS_WINCE_WM
 
 #ifdef Q_OS_SYMBIAN
-#ifndef QT_NO_MENUBAR
-    QMenuBar *menuBar = 0;
-    if (!findChild<QMenuBar *>())
-        menuBar = new QMenuBar(this);
-#endif
-
     if (qobject_cast<QFileDialog *>(this) || qobject_cast<QFontDialog *>(this) ||
         qobject_cast<QColorDialog *>(this) || qobject_cast<QWizard *>(this))
         showMaximized();
@@ -566,13 +559,6 @@ int QDialog::exec()
         delete menuBar;
 #endif //QT_NO_MENUBAR
 #endif //Q_WS_WINCE_WM
-#ifdef Q_OS_SYMBIAN
-#ifndef QT_NO_MENUBAR
-    else if (menuBar)
-        delete menuBar;
-#endif //QT_NO_MENUBAR
-#endif //Q_OS_SYMBIAN
-
     return res;
 }
 
-- 
cgit v0.12


From ae3d95f872c8bd2e192c58d7c7c830a3d2e4bc43 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Mon, 22 Mar 2010 10:17:17 +0200
Subject: Fixed 'fullsreen with softkeys' mode not to expand under softkey
 area.

availableGeometry returns incorrect area after cba is made invisible,
it seems that this happens because CAknToolbar is not made invisible.
Fixed the problem by reverting back to SetExtentToWholeScreen usage
when the widget is really fullscreen, i.e.
Qt::WindowSoftkeysVisibleHint is not set.

Task-number: QTBUG-9038
Reviewed-by: Miikka Heikkinen
---
 src/gui/kernel/qapplication_s60.cpp | 45 +++++++++++++++++++------------------
 src/gui/kernel/qt_s60_p.h           |  1 +
 src/gui/kernel/qwidget_s60.cpp      |  8 ++++---
 3 files changed, 29 insertions(+), 25 deletions(-)

diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index e7a7093..37d1b62 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1004,16 +1004,32 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
     // else { We don't touch the active window unless we were explicitly activated or deactivated }
 }
 
+void QSymbianControl::handleClientAreaChange()
+{
+    const bool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+    if (qwidget->isFullScreen() && !cbaVisibilityHint) {
+        SetExtentToWholeScreen();
+    } else if (qwidget->isMaximized() || (qwidget->isFullScreen() && cbaVisibilityHint)) {
+        TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+        SetExtent(r.iTl, r.Size());
+    } else if (!qwidget->isMinimized()) { // Normal geometry
+        if (!qwidget->testAttribute(Qt::WA_Resized)) {
+            qwidget->adjustSize();
+            qwidget->setAttribute(Qt::WA_Resized, false); //not a user resize
+        }
+        if (!qwidget->testAttribute(Qt::WA_Moved) && qwidget->windowType() != Qt::Dialog) {
+            TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+            SetPosition(r.iTl);
+            qwidget->setAttribute(Qt::WA_Moved, false); // not really an explicit position
+        }
+    }
+}
+
 void QSymbianControl::HandleResourceChange(int resourceType)
 {
     switch (resourceType) {
     case KInternalStatusPaneChange:
-        if (qwidget->isFullScreen()) {
-            SetExtentToWholeScreen();
-        } else if (qwidget->isMaximized()) {
-            TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
-            SetExtent(r.iTl, r.Size());
-        }
+        handleClientAreaChange();
         if (IsFocused() && IsVisible()) {
             qwidget->d_func()->setWindowIcon_sys(true);
             qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
@@ -1025,22 +1041,7 @@ void QSymbianControl::HandleResourceChange(int resourceType)
 #ifdef Q_WS_S60
     case KEikDynamicLayoutVariantSwitch:
     {
-        if (qwidget->isFullScreen()) {
-            SetExtentToWholeScreen();
-        } else if (qwidget->isMaximized()) {
-            TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
-            SetExtent(r.iTl, r.Size());
-        } else if (!qwidget->isMinimized()){ // Normal geometry
-            if (!qwidget->testAttribute(Qt::WA_Resized)) {
-                qwidget->adjustSize();
-                qwidget->setAttribute(Qt::WA_Resized, false); //not a user resize
-            }
-            if (!qwidget->testAttribute(Qt::WA_Moved) && qwidget->windowType() != Qt::Dialog) {
-                TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
-                SetPosition(r.iTl);
-                qwidget->setAttribute(Qt::WA_Moved, false); // not really an explicit position
-            }
-        }
+        handleClientAreaChange();
         break;
     }
 #endif
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index cedede1..7c6b754 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -212,6 +212,7 @@ private:
 #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
     void translateAdvancedPointerEvent(const TAdvancedPointerEvent *event);
 #endif
+    void handleClientAreaChange();
 
 private:
     static QSymbianControl *lastFocusedControl;
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 79702af..bfa7050 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -1109,9 +1109,11 @@ void QWidget::setWindowState(Qt::WindowStates newstate)
         QTLWExtra *top = d->topData();
         const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry;
 
-        if (newstate & Qt::WindowFullScreen)
-            setGeometry(qApp->desktop()->availableGeometry(this));
-        else if (newstate & Qt::WindowMaximized)
+
+        const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint;
+        if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint)
+            setGeometry(qApp->desktop()->screenGeometry(this));
+        else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint))
             setGeometry(qApp->desktop()->availableGeometry(this));
         else
             setGeometry(normalGeometry);
-- 
cgit v0.12


From 262e98f9a29385f99cd6f768632264e0b621dc01 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Tue, 23 Mar 2010 10:36:22 +0200
Subject: Fixed S60 softkey implementation to use popup/modal dialog softkeys.

Previously softkey implementation assumed that source for softkey
actions is focused widget or activewindow if there is no focused
widget. Since for example pop-up menu does not take focus immediately
in touch enabled devices, the underlying widget softkeys were visible
and usable when menu was open. This lead to problem that underlying
widget could be interacted via softkeys when popup menu was open.

For example as reported in QTBUG-8688, it was possible to close the
underlying filedialog from which the currently active context menu was
launched. It was also possible to open "Options" menu of underlying
widget when context menu was open, leading to situation where several
context menus could be launched via "Actions" item of "Options" menu.
This was reported as an issue: QTBUG-6167

In addition when user started navigating in context menu via keypad,
the menu got focus and softkeys changed to partially correct. Only
partially correct, since context menu "Select" action and "Options"
action had same priority and both associated to LSK. In addition the
context menu action "Cancel" associated to RSK was set to invisible,
meaning that it was also disabled and appeared in sofkeys as dimmed.

All of these issues were fixed by making making the popup and modal
dialogs highest priority softkey source. In case the focused widget
is inside popup or modal dialog it is being used as an initial softkey
source. In addition the softkeys created with
QSoftKeyManager::createAction or QSoftKeyManager::createKeyedAction are
now by default invisible i.e. not visible in context menu and have
special property set to make them still normally enabled in softkeys.

Task-number: QTBUG-6167
Task-number: QTBUG-8688
Task-number: QTBUG-9144

Reviewed-by: Sami Merila
---
 src/gui/kernel/qsoftkeymanager.cpp     | 60 ++++++++++++++++++++++++++++++----
 src/gui/kernel/qsoftkeymanager_p.h     |  5 ++-
 src/gui/kernel/qsoftkeymanager_s60.cpp |  7 ++--
 src/gui/widgets/qmenu.cpp              |  4 +--
 src/gui/widgets/qmenubar.cpp           |  1 -
 5 files changed, 61 insertions(+), 16 deletions(-)

diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index c9a94ee..d324c76 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -115,6 +115,8 @@ QAction *QSoftKeyManager::createAction(StandardSoftKey standardKey, QWidget *act
         break;
     }
     action->setSoftKeyRole(softKeyRole);
+    action->setVisible(false);
+    setForceEnabledInSoftkeys(action);
     return action;
 }
 
@@ -168,25 +170,55 @@ bool QSoftKeyManager::appendSoftkeys(const QWidget &source, int level)
 {
     Q_D(QSoftKeyManager);
     bool ret = false;
-    QList<QAction*> actions = source.actions();
-    for (int i = 0; i < actions.count(); ++i) {
-        if (actions.at(i)->softKeyRole() != QAction::NoSoftKey) {
-            d->requestedSoftKeyActions.insert(level, actions.at(i));
+    foreach(QAction *action, source.actions()) {
+        if (action->softKeyRole() != QAction::NoSoftKey
+            && (action->isVisible() || isForceEnabledInSofkeys(action))) {
+            d->requestedSoftKeyActions.insert(level, action);
             ret = true;
         }
     }
     return ret;
 }
 
+
+static bool isChildOf(const QWidget *c, const QWidget *p)
+{
+    while (c) {
+        if (c == p)
+            return true;
+        c = c->parentWidget();
+    }
+    return false;
+}
+
 QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursiveMerging)
 {
     Q_D(QSoftKeyManager);
     QWidget *source = NULL;
     if (!previousSource) {
         // Initial source is primarily focuswidget and secondarily activeWindow
-        source = QApplication::focusWidget();
-        if (!source)
-            source = QApplication::activeWindow();
+        const QWidget *focus = QApplication::focusWidget();
+        const QWidget *popup = QApplication::activePopupWidget();
+        if (popup) {
+            if (isChildOf(focus, popup))
+                source = focus;
+            else
+                source = popup;
+        }
+        if (!source) {
+            const QWidget *modal = QApplication::activeModalWidget();
+            if (modal) {
+                if (isChildOf(focus, modal))
+                    source = focus;
+                else
+                    source = modal;
+            }
+        }
+        if (!source) {
+            source = focus;
+            if (!source)
+                source = QApplication::activeWindow();
+        }
     } else {
         // Softkey merging is based on four criterias
         // 1. Implicit merging is used whenever focus widget does not specify any softkeys
@@ -220,6 +252,20 @@ bool QSoftKeyManager::handleUpdateSoftKeys()
     return true;
 }
 
+void QSoftKeyManager::setForceEnabledInSoftkeys(QAction *action)
+{
+    action->setProperty(FORCE_ENABLED_PROPERTY, QVariant(true));
+}
+
+bool QSoftKeyManager::isForceEnabledInSofkeys(QAction *action)
+{
+    bool ret = false;
+    QVariant property = action->property(FORCE_ENABLED_PROPERTY);
+    if (property.isValid() && property.toBool())
+        ret = true;
+    return ret;
+}
+
 bool QSoftKeyManager::event(QEvent *e)
 {
 #ifndef QT_NO_ACTION
diff --git a/src/gui/kernel/qsoftkeymanager_p.h b/src/gui/kernel/qsoftkeymanager_p.h
index a6fe17e..a5b258b 100644
--- a/src/gui/kernel/qsoftkeymanager_p.h
+++ b/src/gui/kernel/qsoftkeymanager_p.h
@@ -63,7 +63,8 @@ QT_BEGIN_NAMESPACE
 
 class QSoftKeyManagerPrivate;
 
-const char MENU_ACTION_PROPERTY[] = "_q_menuaction";
+const char MENU_ACTION_PROPERTY[] = "_q_menuAction";
+const char FORCE_ENABLED_PROPERTY[] = "_q_forceEnabledInSoftkeys";
 
 class Q_AUTOTEST_EXPORT QSoftKeyManager : public QObject
 {
@@ -88,6 +89,8 @@ public:
     static QAction *createAction(StandardSoftKey standardKey, QWidget *actionWidget);
     static QAction *createKeyedAction(StandardSoftKey standardKey, Qt::Key key, QWidget *actionWidget);
     static QString standardSoftKeyText(StandardSoftKey standardKey);
+    static void setForceEnabledInSoftkeys(QAction *action);
+    static bool isForceEnabledInSofkeys(QAction *action);
 
 protected:
     bool event(QEvent *e);
diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp
index 3a0304c..9812d72 100644
--- a/src/gui/kernel/qsoftkeymanager_s60.cpp
+++ b/src/gui/kernel/qsoftkeymanager_s60.cpp
@@ -288,11 +288,7 @@ bool QSoftKeyManagerPrivateS60::setSoftkey(CEikButtonGroupContainer &cba,
         TPtrC nativeText = qt_QString2TPtrC(text);
         int command = S60_COMMAND_START + position;
         setNativeSoftkey(cba, position, command, nativeText);
-        // QMainWindow "Options" action is set to invisible in order it does not appear in context menu
-        // and all invisible actions are by default disabled.
-        // However we never want to dim options softkey, even it is set to invisible
-        QVariant property = action->property(MENU_ACTION_PROPERTY);
-        const bool dimmed = (property.isValid() && property.toBool()) ? false : !action->isEnabled();
+        const bool dimmed = !action->isEnabled() && !QSoftKeyManager::isForceEnabledInSofkeys(action);
         cba.DimCommand(command, dimmed);
         realSoftKeyActions.insert(command, action);
         return true;
@@ -335,6 +331,7 @@ bool QSoftKeyManagerPrivateS60::setRightSoftkey(CEikButtonGroupContainer &cba)
                 cbaHasImage[RSK_POSITION] = false;
             }
             setNativeSoftkey(cba, RSK_POSITION, EAknSoftkeyExit, nativeText);
+            cba.DimCommand(EAknSoftkeyExit, false);
             return true;
         }
     }
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 42b7406..a9978f9 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -168,8 +168,8 @@ void QMenuPrivate::init()
 #ifdef QT_SOFTKEYS_ENABLED
     selectAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::SelectSoftKey, Qt::Key_Select, q);
     cancelAction = QSoftKeyManager::createKeyedAction(QSoftKeyManager::CancelSoftKey, Qt::Key_Back, q);
-    selectAction->setVisible(false); // Don't show these in the menu
-    cancelAction->setVisible(false);
+    selectAction->setPriority(QAction::HighPriority);
+    cancelAction->setPriority(QAction::HighPriority);
     q->addAction(selectAction);
     q->addAction(cancelAction);
 #endif
diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp
index 13aa02b..e368d3d 100644
--- a/src/gui/widgets/qmenubar.cpp
+++ b/src/gui/widgets/qmenubar.cpp
@@ -1404,7 +1404,6 @@ void QMenuBarPrivate::handleReparent()
     if (!menuBarAction) {
         if (newParent) {
             menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, newParent);
-            menuBarAction->setVisible(false);
             newParent->addAction(menuBarAction);
         }
     } else {
-- 
cgit v0.12


From 0409cdb406021d8609eb2a88a896f9fbc085805f Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Tue, 23 Mar 2010 11:21:38 +0200
Subject: Hotfix to const usage in 262e98f9a29385f99cd6f768632264e0b621dc01

Reviewed-By: TrustMe
---
 src/gui/kernel/qsoftkeymanager.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index d324c76..923144a 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -197,8 +197,8 @@ QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursive
     QWidget *source = NULL;
     if (!previousSource) {
         // Initial source is primarily focuswidget and secondarily activeWindow
-        const QWidget *focus = QApplication::focusWidget();
-        const QWidget *popup = QApplication::activePopupWidget();
+        QWidget *focus = QApplication::focusWidget();
+        QWidget *popup = QApplication::activePopupWidget();
         if (popup) {
             if (isChildOf(focus, popup))
                 source = focus;
@@ -206,7 +206,7 @@ QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursive
                 source = popup;
         }
         if (!source) {
-            const QWidget *modal = QApplication::activeModalWidget();
+            QWidget *modal = QApplication::activeModalWidget();
             if (modal) {
                 if (isChildOf(focus, modal))
                     source = focus;
-- 
cgit v0.12


From dd9c26cba63c54358f3309143b76ae0416f89c78 Mon Sep 17 00:00:00 2001
From: Sami Merila <sami.merila@nokia.com>
Date: Tue, 23 Mar 2010 11:39:56 +0200
Subject: Remove internal custom pixel metric enums

Use only public custom pixel metrics. Remove the internal enum
and switch usage of those to public enum values.

Task-number: QTBUG-9247
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp | 30 +++++++++++++++---------------
 src/gui/styles/qs60style_p.h |  8 --------
 2 files changed, 15 insertions(+), 23 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index ec8b468..c77d828 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -413,8 +413,8 @@ QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const
 {
     const bool cachedColorExists = m_colorCache.contains(frame);
     if (!cachedColorExists) {
-        const int frameCornerWidth = pixelMetric(PM_Custom_FrameCornerWidth);
-        const int frameCornerHeight = pixelMetric(PM_Custom_FrameCornerHeight);
+        const int frameCornerWidth = pixelMetric(PM_FrameCornerWidth);
+        const int frameCornerHeight = pixelMetric(PM_FrameCornerHeight);
         Q_ASSERT(2 * frameCornerWidth < 32);
         Q_ASSERT(2 * frameCornerHeight < 32);
 
@@ -874,7 +874,7 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag
 
         case QS60StyleEnums::SP_QgnGrafBarFrameSideL:
         case QS60StyleEnums::SP_QgnGrafBarFrameSideR:
-            result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+            result.setWidth(pixelMetric(PM_FrameCornerWidth));
             break;
 
         case QS60StyleEnums::SP_QsnCpScrollHandleTopPressed:
@@ -901,15 +901,15 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag
                     case 7: /* CornerTr */
                     case 6: /* CornerBl */
                     case 5: /* CornerBr */
-                        result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+                        result.setWidth(pixelMetric(PM_FrameCornerWidth));
                         // Falltrough intended...
                     case 4: /* SideT */
                     case 3: /* SideB */
-                        result.setHeight(pixelMetric(PM_Custom_FrameCornerHeight));
+                        result.setHeight(pixelMetric(PM_FrameCornerHeight));
                         break;
                     case 2: /* SideL */
                     case 1: /* SideR */
-                        result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+                        result.setWidth(pixelMetric(PM_FrameCornerWidth));
                         break;
                     case 0: /* center */
                     default:
@@ -1376,7 +1376,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
             }
             if (!comboBox->currentText.isEmpty() && !comboBox->editable) {
                 QCommonStyle::drawItemText(painter,
-                            editRect.adjusted(QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth), 0, -1, 0),
+                            editRect.adjusted(QS60StylePrivate::pixelMetric(PM_FrameCornerWidth), 0, -1, 0),
                             visualAlignment(comboBox->direction, Qt::AlignLeft | Qt::AlignVCenter),
                             comboBox->palette, comboBox->state & State_Enabled, comboBox->currentText);
             }
@@ -1841,8 +1841,8 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
             painter->save();
             QPen linePen = QPen(QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnLineColors, 1, header));
             const int penWidth = (header->orientation == Qt::Horizontal) ?
-                linePen.width() + QS60StylePrivate::pixelMetric(PM_Custom_BoldLineWidth)
-                : linePen.width() + QS60StylePrivate::pixelMetric(PM_Custom_ThinLineWidth);
+                linePen.width() + QS60StylePrivate::pixelMetric(PM_BoldLineWidth)
+                : linePen.width() + QS60StylePrivate::pixelMetric(PM_ThinLineWidth);
             linePen.setWidth(penWidth);
             painter->setPen(linePen);
             if (header->orientation == Qt::Horizontal){
@@ -1861,7 +1861,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
                 //Make cornerButton slightly smaller so that it is not on top of table border graphic.
                 QStyleOptionHeader subopt = *header;
                 const int borderTweak =
-                    QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1;
+                    QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1;
                 if (subopt.direction == Qt::LeftToRight)
                     subopt.rect.adjust(borderTweak, borderTweak, 0, -borderTweak);
                 else
@@ -2085,7 +2085,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
                 // ... or normal "tick" selection at the end.
                 } else if (option->state & State_Selected) {
                     QRect tickRect = option->rect;
-                    const int frameBorderWidth = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth);
+                    const int frameBorderWidth = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth);
                     // adjust tickmark rect to exclude frame border
                     tickRect.adjust(0, -frameBorderWidth, 0, -frameBorderWidth);
                     QS60StyleEnums::SkinParts skinPart = QS60StyleEnums::SP_QgnIndiMarkedAdd;
@@ -2166,7 +2166,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
                 const QS60StyleEnums::SkinParts part = (element == PE_IndicatorSpinUp) ?
                     QS60StyleEnums::SP_QgnGrafScrollArrowUp :
                     QS60StyleEnums::SP_QgnGrafScrollArrowDown;
-                const int iconMargin = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1;
+                const int iconMargin = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1;
                 optionSpinBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? iconMargin : -iconMargin );
                 QS60StylePrivate::drawSkinPart(part, painter, optionSpinBox.rect, flags);
             } else {
@@ -2180,7 +2180,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
                 // We want to draw down arrow here for comboboxes as well.
                 QStyleOptionFrame optionsComboBox = *cmb;
                 const QS60StyleEnums::SkinParts part = QS60StyleEnums::SP_QgnGrafScrollArrowDown;
-                const int iconMargin = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth) >> 1;
+                const int iconMargin = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth) >> 1;
                 optionsComboBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? iconMargin : -iconMargin );
                 QS60StylePrivate::drawSkinPart(part, painter, optionsComboBox.rect, flags);
             } else {
@@ -2934,9 +2934,9 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
             if (qstyleoption_cast<const QStyleOptionHeader *>(opt)) {
                 // Subtract area needed for line
                 if (opt->state & State_Horizontal)
-                    ret.setHeight(ret.height() - QS60StylePrivate::pixelMetric(PM_Custom_BoldLineWidth));
+                    ret.setHeight(ret.height() - QS60StylePrivate::pixelMetric(PM_BoldLineWidth));
                 else
-                    ret.setWidth(ret.width() - QS60StylePrivate::pixelMetric(PM_Custom_ThinLineWidth));
+                    ret.setWidth(ret.width() - QS60StylePrivate::pixelMetric(PM_ThinLineWidth));
                 }
             ret = visualRect(opt->direction, opt->rect, ret);
             break;
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index df6f582..8bb2f7b 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -62,14 +62,6 @@ QT_BEGIN_NAMESPACE
 const int MAX_NON_CUSTOM_PIXELMETRICS = 92;
 const int CUSTOMVALUESCOUNT = 4;
 
-//internal custom pixel metrics values, these map to entry in data[] table
-enum {
-    PM_Custom_FrameCornerWidth = MAX_NON_CUSTOM_PIXELMETRICS,
-    PM_Custom_FrameCornerHeight,
-    PM_Custom_BoldLineWidth,
-    PM_Custom_ThinLineWidth
-    };
-
 const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT;
 
 typedef struct {
-- 
cgit v0.12


From cd226eeb278108a5c1168b7cc01cadded6045f05 Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Tue, 23 Mar 2010 12:27:08 +0200
Subject: Changed Symbian pkg files to deploy from under epoc32

Since the build process copies everything that is deployed using
DEPLOYMENT variable under epoc32 somewhere, pkg files might as well
look for the files from there. This can be useful for binary
releases if the release needs to be repackaged.

Task-number: QT-3147
Reviewed-by: Janne Anttila
---
 qmake/generators/symbian/symmake.cpp | 21 ++++++++++++++++++---
 src/s60installs/s60installs.pro      |  5 ++++-
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 9aa122a..c6023b5 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -456,14 +456,29 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
     // deploy any additional DEPLOYMENT  files
     QString remoteTestPath;
     remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
+    QString zDir = epocRoot() + QLatin1String("epoc32/data/z");
 
     initProjectDeploySymbian(project, depList, remoteTestPath, true, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles);
     if (depList.size())
         t << "; DEPLOYMENT" << endl;
     for (int i = 0; i < depList.size(); ++i)  {
-        t << QString("\"%1\"    - \"%2\"")
-             .arg(QString(depList.at(i).from).replace('\\','/'))
-             .arg(depList.at(i).to) << endl;
+        QString from = depList.at(i).from;
+        QString to = depList.at(i).to;
+
+        // Deploy anything not already deployed from under epoc32 instead from under
+        // \epoc32\data\z\ to enable using pkg file without rebuilding
+        // the project, which can be useful for some binary only distributions.
+        if (!from.contains(QLatin1String("epoc32"), Qt::CaseInsensitive)) {
+            from = to;
+            if (from.size() > 1 && from.at(1) == QLatin1Char(':'))
+                from = from.mid(2);
+            from.prepend(zDir);
+        } else {
+            if (from.size() > 1 && from.at(1) == QLatin1Char(':'))
+                from = from.mid(2);
+        }
+
+        t << QString("\"%1\"    - \"%2\"").arg(from.replace('\\','/')).arg(to) << endl;
     }
     t << endl;
 
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index 1f6e72b..f37cd58 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -13,9 +13,12 @@ symbian: {
         TARGET.UID3 = 0x2001E61C
 
         # sqlite3 is expected to be already found on phone if infixed configuration is built.
+        BLD_INF_RULES.prj_exports += \
+            "sqlite3.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis" \
+            "sqlite3_selfsigned.sis $${EPOCROOT}epoc32/data/qt/sis/sqlite3_selfsigned.sis"
         sqlitedeployment = \
             "; Deploy sqlite onto phone that does not have it already" \
-            "@\"$$PWD/sqlite3.sis\", (0x2002af5f)"
+            "@\"$${EPOCROOT}epoc32/data/qt/sis/sqlite3.sis\", (0x2002af5f)"
         qtlibraries.pkg_postrules += sqlitedeployment
     } else {
         # Always use experimental UID for infixed configuration to avoid UID clash
-- 
cgit v0.12


From c1b524dd8b7a7207d10c33b454519d717349ac6c Mon Sep 17 00:00:00 2001
From: Markus Goetz <Markus.Goetz@nokia.com>
Date: Tue, 23 Mar 2010 09:37:27 +0100
Subject: QNAM HTTP: Do not use TCP_NODELAY

Reviewed-by: thiago
---
 src/network/access/qhttpnetworkconnectionchannel.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 1d8224c..82bc14f 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -865,7 +865,14 @@ void QHttpNetworkConnectionChannel::_q_disconnected()
 void QHttpNetworkConnectionChannel::_q_connected()
 {
     // improve performance since we get the request sent by the kernel ASAP
-    socket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
+    //socket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
+    // We have this commented out now. It did not have the effect we wanted. If we want to
+    // do this properly, Qt has to combine multiple HTTP requests into one buffer
+    // and send this to the kernel in one syscall and then the kernel immediately sends
+    // it as one TCP packet because of TCP_NODELAY.
+    // However, this code is currently not in Qt, so we rely on the kernel combining
+    // the requests into one TCP packet.
+
     // not sure yet if it helps, but it makes sense
     socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
 
-- 
cgit v0.12


From a50519ba225459a9d21209fe50a3a8fbd8081a19 Mon Sep 17 00:00:00 2001
From: Alessandro Portale <alessandro.portale@nokia.com>
Date: Tue, 23 Mar 2010 14:17:29 +0100
Subject: Compile fix

Commit 47902b7587d66c0941bacf08b31b8caae264f09a was missing one enum
rename in qs60style_s60.cpp

Reviewed-by: TrustMe
---
 src/gui/styles/qs60style_s60.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 0f014c1..75ed0c7 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -978,8 +978,8 @@ void QS60StyleModeSpecifics::frameIdAndCenterId(QS60StylePrivate::SkinFrameEleme
 
 TRect QS60StyleModeSpecifics::innerRectFromElement(QS60StylePrivate::SkinFrameElements frameElement, const TRect &outerRect)
 {
-    TInt widthShrink = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth);
-    TInt heightShrink = QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerHeight);
+    TInt widthShrink = QS60StylePrivate::pixelMetric(PM_FrameCornerWidth);
+    TInt heightShrink = QS60StylePrivate::pixelMetric(PM_FrameCornerHeight);
     switch(frameElement) {
         case QS60StylePrivate::SF_PanelBackground:
             // panel should have slightly slimmer border to enable thin line of background graphics between closest component
-- 
cgit v0.12


From 66813ad3dd429c4a8d58a2b4f8b79d14b8af4356 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Tue, 23 Mar 2010 13:37:23 +0000
Subject: Added Symbian UserEnvironment capability to audioinput example

Symbian applications which use QAudioInput must have this Platform
Security capability.  Without it, the Symbian audio subsystem will
not allow the application to record audio.

Reviewed-by: trustme
---
 examples/multimedia/audioinput/audioinput.pro | 1 +
 1 file changed, 1 insertion(+)

diff --git a/examples/multimedia/audioinput/audioinput.pro b/examples/multimedia/audioinput/audioinput.pro
index a54d452..6a1c79d 100644
--- a/examples/multimedia/audioinput/audioinput.pro
+++ b/examples/multimedia/audioinput/audioinput.pro
@@ -12,5 +12,6 @@ INSTALLS += target sources
 
 symbian {
     TARGET.UID3 = 0xA000D7BF
+    TARGET.CAPABILITY += UserEnvironment
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
 }
-- 
cgit v0.12


From 8f01952fcc062ad042601d75a994b43ee289ac0f Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Tue, 23 Mar 2010 17:56:47 -0700
Subject: Doc update for QSpinBox::textFromValue

We remove the group separator so the docs should reflect this.

Reviewed-by: Donald Carr <donald.carr@nokia.com>
---
 src/gui/widgets/qspinbox.cpp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/gui/widgets/qspinbox.cpp b/src/gui/widgets/qspinbox.cpp
index 726426d..2d871d0 100644
--- a/src/gui/widgets/qspinbox.cpp
+++ b/src/gui/widgets/qspinbox.cpp
@@ -448,11 +448,12 @@ void QSpinBox::setRange(int minimum, int maximum)
 }
 
 /*!
-    This virtual function is used by the spin box whenever it needs
-    to display the given \a value. The default implementation returns
-    a string containing \a value printed in the standard way using
-    QWidget::locale().toString(). Reimplementations may return anything. (See
-    the example in the detailed description.)
+    This virtual function is used by the spin box whenever it needs to
+    display the given \a value. The default implementation returns a
+    string containing \a value printed in the standard way using
+    QWidget::locale().toString(), but with the thousand separator
+    removed. Reimplementations may return anything. (See the example
+    in the detailed description.)
 
     Note: QSpinBox does not call this function for specialValueText()
     and that neither prefix() nor suffix() should be included in the
@@ -461,7 +462,7 @@ void QSpinBox::setRange(int minimum, int maximum)
     If you reimplement this, you may also need to reimplement
     valueFromText() and validate()
 
-    \sa valueFromText(), validate()
+    \sa valueFromText(), validate(), QLocale::groupSeparator()
 */
 
 QString QSpinBox::textFromValue(int value) const
@@ -869,7 +870,7 @@ void QDoubleSpinBox::setDecimals(int decimals)
     If you reimplement this, you may also need to reimplement
     valueFromText().
 
-    \sa valueFromText()
+    \sa valueFromText(), QLocale::groupSeparator()
 */
 
 
-- 
cgit v0.12


From e887e0c38b5497757dfc69190c5a86cdc8104097 Mon Sep 17 00:00:00 2001
From: Justin McPherson <justin.mcpherson@nokia.com>
Date: Wed, 24 Mar 2010 12:51:58 +1000
Subject: Calculate period size correctly.

Reviewed-by:Dmytro Poplavskiy
---
 src/multimedia/audio/qaudioinput_mac_p.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/audio/qaudioinput_mac_p.cpp
index 4b37b18..cb65f6e 100644
--- a/src/multimedia/audio/qaudioinput_mac_p.cpp
+++ b/src/multimedia/audio/qaudioinput_mac_p.cpp
@@ -670,8 +670,8 @@ bool QAudioInputPrivate::open()
     }
 
     // Allocate buffer
-    periodSizeBytes = (numberOfFrames * streamFormat.mSampleRate / deviceFormat.mSampleRate) *
-                        streamFormat.mBytesPerFrame;
+    periodSizeBytes = numberOfFrames * streamFormat.mBytesPerFrame;
+
     if (internalBufferSize < periodSizeBytes * 2)
         internalBufferSize = periodSizeBytes * 2;
     else
-- 
cgit v0.12


From b6b1dee9460d6fdde0b8ad005301c0a315ad30bf Mon Sep 17 00:00:00 2001
From: Alexis Menard <alexis.menard@nokia.com>
Date: Mon, 22 Mar 2010 08:04:46 +0100
Subject: Fix a crash when reparenting an item in QGraphicsView.

Before calling addItem we need to invalidate the depth otherwise if
someone call anything relating to sorting when itemChange is called
(because of the scene change for instance) then qt_closestItemFirst
for example can crash because of an invalid state.

Task-number:QTBUG-6932
Reviewed-by:janarve
---
 src/gui/graphicsview/qgraphicsitem.cpp         |  5 ++--
 tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 34 ++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index f3c90ca..9852323 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1130,6 +1130,9 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q
         }
     }
 
+    // Resolve depth.
+    invalidateDepthRecursively();
+
     if ((parent = newParent)) {
         if (parent->d_func()->scene && parent->d_func()->scene != scene) {
             // Move this item to its new parent's scene
@@ -1180,8 +1183,6 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent, const Q
         }
     }
 
-    // Resolve depth.
-    invalidateDepthRecursively();
     dirtySceneTransform = 1;
 
     // Restore the sub focus chain.
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 4d9f23f..75fb337 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -439,6 +439,7 @@ private slots:
     void QTBUG_7714_fullUpdateDiscardingOpacityUpdate2();
     void QT_2653_fullUpdateDiscardingOpacityUpdate();
     void QT_2649_focusScope();
+    void sortItemsWhileAdding();
 
 private:
     QList<QGraphicsItem *> paintedItems;
@@ -10070,5 +10071,38 @@ void tst_QGraphicsItem::QT_2649_focusScope()
     delete scene;
 }
 
+class MyGraphicsItemWithItemChange : public QGraphicsWidget
+{
+public:
+    MyGraphicsItemWithItemChange(QGraphicsItem *parent = 0) : QGraphicsWidget(parent)
+    {}
+
+    QVariant itemChange(GraphicsItemChange change, const QVariant &value)
+    {
+        if (change == QGraphicsItem::ItemSceneHasChanged) {
+            foreach (QGraphicsView *view, scene()->views()) {
+                //We trigger a sort of unindexed items in the BSP
+                view->sceneRect();
+            }
+        }
+        return QGraphicsWidget::itemChange(change, value);
+    }
+};
+
+void tst_QGraphicsItem::sortItemsWhileAdding()
+{
+    QGraphicsScene scene;
+    QGraphicsView view(&scene);
+    QGraphicsWidget grandGrandParent;
+    grandGrandParent.resize(200, 200);
+    scene.addItem(&grandGrandParent);
+    QGraphicsWidget grandParent;
+    grandParent.resize(200, 200);
+    QGraphicsWidget parent(&grandParent);
+    parent.resize(200, 200);
+    MyGraphicsItemWithItemChange item(&parent);
+    grandParent.setParentItem(&grandGrandParent);
+}
+
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"
-- 
cgit v0.12


From c8fa23a5edd790d9eed0620068a29e03e4202cac Mon Sep 17 00:00:00 2001
From: Alexis Menard <alexis.menard@nokia.com>
Date: Wed, 24 Mar 2010 02:12:47 +0100
Subject: Invalidate the cache of QGraphicsEffect if a child becomes visible.

The effect might rely on a child to draw itself. So we need to redraw if
a child become visible or invisible.

Task-number:QTBUG-7843
Reviewed-by:janarve
---
 src/gui/graphicsview/qgraphicsitem.cpp             |  6 ++-
 tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp | 43 ++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 9852323..e10c03a 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -2177,8 +2177,12 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
         QGraphicsItemCache *c = (QGraphicsItemCache *)qVariantValue<void *>(extra(ExtraCacheData));
         if (c)
             c->purge();
-        if (scene)
+        if (scene) {
+#ifndef QT_NO_GRAPHICSEFFECT
+            invalidateParentGraphicsEffectsRecursively();
+#endif //QT_NO_GRAPHICSEFFECT
             scene->d_func()->markDirty(q_ptr, QRectF(), /*invalidateChildren=*/false, /*force=*/true);
+        }
     }
 
     // Certain properties are dropped as an item becomes invisible.
diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
index 1007d61..02899ae 100644
--- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
+++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
@@ -46,6 +46,7 @@
 #include <QtGui/qgraphicsview.h>
 #include <QtGui/qgraphicsscene.h>
 #include <QtGui/qgraphicsitem.h>
+#include <QtGui/qgraphicswidget.h>
 #include <QtGui/qstyleoption.h>
 
 #include "../../shared/util.h"
@@ -73,6 +74,7 @@ private slots:
     void deviceCoordinateTranslateCaching();
     void inheritOpacity();
     void dropShadowClipping();
+    void childrenVisibilityShouldInvalidateCache();
 };
 
 void tst_QGraphicsEffect::initTestCase()
@@ -613,6 +615,47 @@ void tst_QGraphicsEffect::dropShadowClipping()
             QCOMPARE(img.pixel(x, y), img.pixel(x, y-1));
 }
 
+class MyGraphicsItem : public QGraphicsWidget
+{
+public:
+    MyGraphicsItem(QGraphicsItem *parent = 0) :
+            QGraphicsWidget(parent), nbPaint(0)
+    {}
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+    {
+        nbPaint++;
+        QGraphicsWidget::paint(painter, option, widget);
+    }
+    int nbPaint;
+};
+
+void tst_QGraphicsEffect::childrenVisibilityShouldInvalidateCache()
+{
+    QGraphicsScene scene;
+    MyGraphicsItem parent;
+    parent.resize(200, 200);
+    QGraphicsWidget child(&parent);
+    child.resize(200, 200);
+    child.setVisible(false);
+    scene.addItem(&parent);
+    QGraphicsView view(&scene);
+    view.show();
+    QApplication::setActiveWindow(&view);
+    QTest::qWaitForWindowShown(&view);
+    QCOMPARE(parent.nbPaint, 1);
+    //we set an effect on the parent
+    parent.setGraphicsEffect(new QGraphicsDropShadowEffect(&parent));
+    //flush the events
+    QApplication::processEvents();
+    //new effect applied->repaint
+    QCOMPARE(parent.nbPaint, 2);
+    child.setVisible(true);
+    //flush the events
+    QApplication::processEvents();
+    //a new child appears we need to redraw the effect.
+    QCOMPARE(parent.nbPaint, 3);
+}
+
 QTEST_MAIN(tst_QGraphicsEffect)
 #include "tst_qgraphicseffect.moc"
 
-- 
cgit v0.12


From 4be83fa7337c5a4eb7b0ce085aa5854af5d33252 Mon Sep 17 00:00:00 2001
From: Alexis Menard <alexis.menard@nokia.com>
Date: Wed, 24 Mar 2010 05:33:21 +0100
Subject: Add a children private property needed for QML to support
 QGraphicsObject

Commit adds a private property that QML can use to add children for a given
item. This is a custom list that calls a callback which actually reparent
the item instead of just appending in the list (otherwise it will mess up
the state of QGraphicsView). This is needed because childItems() is pretty
useless you get a list but if you append something on it then it adds
that into a copy. Also the children property is the default property
a concept used by QML.

Width and Height private properties has been added in order to support
better the integration with QGraphicsWidget in QML. The actual implementation
is in the private class of QGI and QGraphicsWidget reimplements it to return
the geometry. (In 4.7 QDeclarativeItem reimplements it too).

This change should be harmless everything is private.

Task-number:QT-2757
Reviewed-by:andreas
---
 src/gui/graphicsview/qgraphicsitem.cpp             | 103 +++++++++++++++++++++
 src/gui/graphicsview/qgraphicsitem.h               |   7 ++
 src/gui/graphicsview/qgraphicsitem_p.h             |  67 ++++++++++++++
 src/gui/graphicsview/qgraphicswidget.cpp           |  14 +++
 src/gui/graphicsview/qgraphicswidget_p.cpp         |  51 ++++++++++
 src/gui/graphicsview/qgraphicswidget_p.h           |   9 ++
 tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp |  28 ++++++
 7 files changed, 279 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index e10c03a..f110a5c 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -5224,6 +5224,8 @@ void QGraphicsItemPrivate::addChild(QGraphicsItem *child)
     needSortChildren = 1; // ### maybe 0
     child->d_ptr->siblingIndex = children.size();
     children.append(child);
+    if (isObject)
+        emit static_cast<QGraphicsObject *>(q_ptr)->childrenChanged();
 }
 
 /*!
@@ -5246,6 +5248,8 @@ void QGraphicsItemPrivate::removeChild(QGraphicsItem *child)
     // the child is not guaranteed to be at the index after the list is sorted.
     // (see ensureSortedChildren()).
     child->d_ptr->siblingIndex = -1;
+    if (isObject)
+        emit static_cast<QGraphicsObject *>(q_ptr)->childrenChanged();
 }
 
 /*!
@@ -7453,6 +7457,88 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture)
     }
 }
 
+void QGraphicsItemPrivate::append(QDeclarativeListProperty<QGraphicsObject> *list, QGraphicsObject *item)
+{
+    QGraphicsItemPrivate::get(item)->setParentItemHelper(static_cast<QGraphicsObject *>(list->object), /*newParentVariant=*/0, /*thisPointerVariant=*/0);
+}
+
+/*!
+    Returns a list of this item's children.
+
+    The items are sorted by stacking order. This takes into account both the
+    items' insertion order and their Z-values.
+
+*/
+QDeclarativeListProperty<QGraphicsObject> QGraphicsItemPrivate::childrenList()
+{
+    Q_Q(QGraphicsItem);
+    if (isObject) {
+        QGraphicsObject *that = static_cast<QGraphicsObject *>(q);
+        return QDeclarativeListProperty<QGraphicsObject>(that, &children, QGraphicsItemPrivate::append);
+    } else {
+        //QGraphicsItem is not supported for this property
+        return QDeclarativeListProperty<QGraphicsObject>();
+    }
+}
+
+/*!
+  \internal
+  Returns the width of the item
+  Reimplemented by QGraphicsWidget
+*/
+qreal QGraphicsItemPrivate::width() const
+{
+    return 0;
+}
+
+/*!
+  \internal
+  Set the width of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::setWidth(qreal w)
+{
+    Q_UNUSED(w);
+}
+
+/*!
+  \internal
+  Reset the width of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::resetWidth()
+{
+}
+
+/*!
+  \internal
+  Returns the height of the item
+  Reimplemented by QGraphicsWidget
+*/
+qreal QGraphicsItemPrivate::height() const
+{
+    return 0;
+}
+
+/*!
+  \internal
+  Set the height of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::setHeight(qreal h)
+{
+    Q_UNUSED(h);
+}
+
+/*!
+  \internal
+  Reset the height of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::resetHeight()
+{
+}
+
 /*!
   \property QGraphicsObject::parent
   \brief the parent of the item
@@ -7639,6 +7725,23 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture)
   \sa scale, rotation, QGraphicsItem::transformOriginPoint()
 */
 
+/*!
+    \fn void QGraphicsObject::widthChanged()
+    \internal
+*/
+
+/*!
+    \fn void QGraphicsObject::heightChanged()
+    \internal
+*/
+
+/*!
+
+  \fn QGraphicsObject::childrenChanged()
+
+  This signal gets emitted whenever the children list changes
+  \internal
+*/
 
 /*!
     \class QAbstractGraphicsShapeItem
diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h
index d72833b..5023f60 100644
--- a/src/gui/graphicsview/qgraphicsitem.h
+++ b/src/gui/graphicsview/qgraphicsitem.h
@@ -547,6 +547,10 @@ class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
     Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
     Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
     Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint)
+    Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), QDeclarativeListProperty<QGraphicsObject> children READ childrenList DESIGNABLE false NOTIFY childrenChanged)
+    Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL)
+    Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL)
+    Q_CLASSINFO("DefaultProperty", "children")
     Q_INTERFACES(QGraphicsItem)
 public:
     QGraphicsObject(QGraphicsItem *parent = 0);
@@ -571,6 +575,9 @@ Q_SIGNALS:
     void zChanged();
     void rotationChanged();
     void scaleChanged();
+    void childrenChanged();
+    void widthChanged();
+    void heightChanged();
 
 protected:
     QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent, QGraphicsScene *scene);
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index ea04e0b..669ae1b 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -71,6 +71,62 @@ QT_BEGIN_NAMESPACE
 
 class QGraphicsItemPrivate;
 
+#ifndef QDECLARATIVELISTPROPERTY
+#define QDECLARATIVELISTPROPERTY
+template<typename T>
+struct QDeclarativeListProperty {
+    typedef void (*AppendFunction)(QDeclarativeListProperty<T> *, T*);
+    typedef int (*CountFunction)(QDeclarativeListProperty<T> *);
+    typedef T *(*AtFunction)(QDeclarativeListProperty<T> *, int);
+    typedef void (*ClearFunction)(QDeclarativeListProperty<T> *);
+
+    QDeclarativeListProperty()
+        : object(0), data(0), append(0), count(0), at(0), clear(0), dummy1(0), dummy2(0) {}
+    QDeclarativeListProperty(QObject *o, QList<T *> &list)
+        : object(o), data(&list), append(qlist_append), count(qlist_count), at(qlist_at),
+          clear(qlist_clear), dummy1(0), dummy2(0) {}
+    QDeclarativeListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0,
+                    ClearFunction r = 0)
+        : object(o), data(d), append(a), count(c), at(t), clear(r), dummy1(0), dummy2(0) {}
+
+    bool operator==(const QDeclarativeListProperty &o) const {
+        return object == o.object &&
+               data == o.data &&
+               append == o.append &&
+               count == o.count &&
+               at == o.at &&
+               clear == o.clear;
+    }
+
+    QObject *object;
+    void *data;
+
+    AppendFunction append;
+
+    CountFunction count;
+    AtFunction at;
+
+    ClearFunction clear;
+
+    void *dummy1;
+    void *dummy2;
+
+private:
+    static void qlist_append(QDeclarativeListProperty *p, T *v) {
+        ((QList<T *> *)p->data)->append(v);
+    }
+    static int qlist_count(QDeclarativeListProperty *p) {
+        return ((QList<T *> *)p->data)->count();
+    }
+    static T *qlist_at(QDeclarativeListProperty *p, int idx) {
+        return ((QList<T *> *)p->data)->at(idx);
+    }
+    static void qlist_clear(QDeclarativeListProperty *p) {
+        return ((QList<T *> *)p->data)->clear();
+    }
+};
+#endif
+
 class QGraphicsItemCache
 {
 public:
@@ -237,6 +293,7 @@ public:
     void resolveDepth();
     void addChild(QGraphicsItem *child);
     void removeChild(QGraphicsItem *child);
+    QDeclarativeListProperty<QGraphicsObject> childrenList();
     void setParentItemHelper(QGraphicsItem *parent, const QVariant *newParentVariant,
                              const QVariant *thisPointerVariant);
     void childrenBoundingRectHelper(QTransform *x, QRectF *rect);
@@ -423,11 +480,21 @@ public:
 
     inline QTransform transformToParent() const;
     inline void ensureSortedChildren();
+    static void append(QDeclarativeListProperty<QGraphicsObject> *list, QGraphicsObject *item);
     static inline bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b);
     void ensureSequentialSiblingIndex();
     inline void sendScenePosChange();
     virtual void siblingOrderChange();
 
+    // Private Properties
+    virtual qreal width() const;
+    virtual void setWidth(qreal);
+    virtual void resetWidth();
+
+    virtual qreal height() const;
+    virtual void setHeight(qreal);
+    virtual void resetHeight();
+
     QRectF childrenBoundingRect;
     QRectF needsRepaint;
     QMap<QWidget *, QRect> paintedViewBoundingRects;
diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index f42fe4f..a091347 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -324,6 +324,14 @@ void QGraphicsWidget::resize(const QSizeF &size)
 */
 
 /*!
+
+  \fn QGraphicsWidget::geometryChanged()
+
+  This signal gets emitted whenever the geometry of the item changes
+  \internal
+*/
+
+/*!
     \property QGraphicsWidget::geometry
     \brief the geometry of the widget
 
@@ -391,6 +399,10 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
         QGraphicsSceneResizeEvent re;
         re.setOldSize(oldSize);
         re.setNewSize(newGeom.size());
+        if (oldSize.width() != newGeom.size().width())
+            emit widthChanged();
+        if (oldSize.height() != newGeom.size().height())
+            emit heightChanged();
         QApplication::sendEvent(this, &re);
     }
 }
@@ -2322,5 +2334,7 @@ void QGraphicsWidget::dumpFocusChain()
 #endif
 
 QT_END_NAMESPACE
+
+#include "moc_qgraphicswidget.cpp"
         
 #endif //QT_NO_GRAPHICSVIEW
diff --git a/src/gui/graphicsview/qgraphicswidget_p.cpp b/src/gui/graphicsview/qgraphicswidget_p.cpp
index 1835c74..6e397b6 100644
--- a/src/gui/graphicsview/qgraphicswidget_p.cpp
+++ b/src/gui/graphicsview/qgraphicswidget_p.cpp
@@ -44,6 +44,7 @@
 #ifndef QT_NO_GRAPHICSVIEW
 
 #include <QtCore/qdebug.h>
+#include <QtCore/qnumeric.h>
 #include "qgraphicswidget_p.h"
 #include "qgraphicslayout.h"
 #include "qgraphicsscene_p.h"
@@ -825,6 +826,56 @@ void QGraphicsWidgetPrivate::setLayout_helper(QGraphicsLayout *l)
     }
 }
 
+qreal QGraphicsWidgetPrivate::width() const
+{
+    Q_Q(const QGraphicsWidget);
+    return q->geometry().width();
+}
+
+void QGraphicsWidgetPrivate::setWidth(qreal w)
+{
+    if (qIsNaN(w))
+        return;
+    Q_Q(QGraphicsWidget);
+    if (q->geometry().width() == w)
+        return;
+
+    QRectF oldGeom = q->geometry();
+
+    q->setGeometry(QRectF(q->x(), q->y(), w, height()));
+}
+
+void QGraphicsWidgetPrivate::resetWidth()
+{
+    Q_Q(QGraphicsWidget);
+    q->setGeometry(QRectF(q->x(), q->y(), 0, height()));
+}
+
+qreal QGraphicsWidgetPrivate::height() const
+{
+    Q_Q(const QGraphicsWidget);
+    return q->geometry().height();
+}
+
+void QGraphicsWidgetPrivate::setHeight(qreal h)
+{
+    if (qIsNaN(h))
+        return;
+    Q_Q(QGraphicsWidget);
+    if (q->geometry().height() == h)
+        return;
+
+    QRectF oldGeom = q->geometry();
+
+    q->setGeometry(QRectF(q->x(), q->y(), width(), h));
+}
+
+void QGraphicsWidgetPrivate::resetHeight()
+{
+    Q_Q(QGraphicsWidget);
+    q->setGeometry(QRectF(q->x(), q->y(), width(), 0));
+}
+
 QT_END_NAMESPACE
 
 #endif //QT_NO_GRAPHICSVIEW
diff --git a/src/gui/graphicsview/qgraphicswidget_p.h b/src/gui/graphicsview/qgraphicswidget_p.h
index 2c5b3bf..f34a755 100644
--- a/src/gui/graphicsview/qgraphicswidget_p.h
+++ b/src/gui/graphicsview/qgraphicswidget_p.h
@@ -130,6 +130,15 @@ public:
     void windowFrameHoverLeaveEvent(QGraphicsSceneHoverEvent *event);
     bool hasDecoration() const;
 
+    // Private Properties
+    qreal width() const;
+    void setWidth(qreal);
+    void resetWidth();
+
+    qreal height() const;
+    void setHeight(qreal);
+    void resetHeight();
+
     // State
     inline int attributeToBitIndex(Qt::WidgetAttribute att) const
     {
diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
index 0d1ad9e..5a3a54c 100644
--- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
@@ -111,6 +111,8 @@ private slots:
     void fontPropagationSceneChange();
     void geometry_data();
     void geometry();
+    void width();
+    void height();
     void getContentsMargins_data();
     void getContentsMargins();
     void initStyleOption_data();
@@ -775,6 +777,32 @@ void tst_QGraphicsWidget::geometry()
     QCOMPARE(widget.geometry(), QRectF(pos, size));
 }
 
+void tst_QGraphicsWidget::width()
+{
+    QGraphicsWidget w;
+    QCOMPARE(w.property("width").toReal(), qreal(0));
+    QSignalSpy spy(&w, SIGNAL(widthChanged()));
+    w.setProperty("width", qreal(50));
+    QCOMPARE(w.property("width").toReal(), qreal(50));
+    QCOMPARE(spy.count(), 1);
+    //calling old school setGeometry should work too
+    w.setGeometry(0, 0, 200, 200);
+    QCOMPARE(spy.count(), 2);
+}
+
+void tst_QGraphicsWidget::height()
+{
+    QGraphicsWidget w;
+    QCOMPARE(w.property("height").toReal(), qreal(0));
+    QSignalSpy spy(&w, SIGNAL(heightChanged()));
+    w.setProperty("height", qreal(50));
+    QCOMPARE(w.property("height").toReal(), qreal(50));
+    QCOMPARE(spy.count(), 1);
+    //calling old school setGeometry should work too
+    w.setGeometry(0, 0, 200, 200);
+    QCOMPARE(spy.count(), 2);
+}
+
 void tst_QGraphicsWidget::getContentsMargins_data()
 {
     QTest::addColumn<qreal>("left");
-- 
cgit v0.12


From 6fc92ea90a078938ced596059981a120dc9ff57d Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Wed, 24 Mar 2010 09:11:30 +0000
Subject: Symbian QAudioOutput::suspend() was resetting processedUSecs() to
 zero

Because of the logic in the Symbian implementations of suspend()
and processedUSecs(), the behaviour prior to this patch was as follows:
- after calling suspend(), processedUSecs() reported zero
- when resume() is called, the amount of silent padding data inserted into
the output stream is equal to the amount of data played prior to suspend()

The patch corrects the above defect, but introduces a new one, which is
described in QTBUG-9322

Reviewed-by: trustme
---
 src/multimedia/audio/qaudiooutput_symbian_p.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/multimedia/audio/qaudiooutput_symbian_p.cpp b/src/multimedia/audio/qaudiooutput_symbian_p.cpp
index 945a08d..3f8e933 100644
--- a/src/multimedia/audio/qaudiooutput_symbian_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_symbian_p.cpp
@@ -185,10 +185,11 @@ void QAudioOutputPrivate::suspend()
 
         const qint64 samplesWritten = SymbianAudio::Utils::bytesToSamples(
                                           m_format, m_bytesWritten);
-        m_bytesWritten = 0;
 
         const qint64 samplesPlayed = getSamplesPlayed();
 
+        m_bytesWritten = 0;
+
         // CMMFDevSound::Pause() is not guaranteed to work correctly in all
         // implementations, for play-mode DevSound sessions.  We therefore
         // have to implement suspend() by calling CMMFDevSound::Stop().
-- 
cgit v0.12


From a2f2c87f320873d1968d931ad69a0f640c5545b1 Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Wed, 24 Mar 2010 12:15:34 +0200
Subject: Made it possible to define more than one language using pkg_prerules

The pkg statements were generated in invalid order if user used
pkg_prerules to redefine languages supported by the pkg file.

Also made it possible to override dependency statements autogenerated
for Qt and QtWebkit, as these statements need to be user defined in
case of multiple languages.

Defining the following in .pro removes all dependencies from pkg rules:

default_deployment.pkg_prerules -= \
    pkg_depends_webkit \
    pkg_depends_qt \
    pkg_platform_dependencies

Task-number: QTBUG-9279
Reviewed-by: Janne Anttila
---
 mkspecs/common/symbian/symbian.conf  |  8 ++++++-
 mkspecs/features/symbian/qt.prf      | 10 +++++---
 qmake/generators/symbian/symmake.cpp | 44 ++++++++++++++++++++++++++----------
 src/corelib/corelib.pro              |  1 -
 src/gui/gui.pro                      |  1 -
 5 files changed, 46 insertions(+), 18 deletions(-)

diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 1d00b03..c39b39d 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -135,8 +135,14 @@ INCLUDEPATH = \
 # RVCT seems to do this automatically, but WINSCW compiler does not, so add it here.
 MMP_RULES += "USERINCLUDE ."
 
+# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer
+# if multiple languages need to be supported by pkg file. In that case the developer should declare
+# multiple language compatible dependency statements him/herself.
+
+default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies
+
 # Supports S60 3.0, 3.1, 3.2 and 5.0 by default
-default_deployment.pkg_prerules = \
+pkg_platform_dependencies = \
     "; Default HW/platform dependencies" \
     "[0x101F7961],0,0,0,{\"S60ProductID\"}" \
     "[0x102032BE],0,0,0,{\"S60ProductID\"}" \
diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf
index 275b86a..b2156a9 100644
--- a/mkspecs/features/symbian/qt.prf
+++ b/mkspecs/features/symbian/qt.prf
@@ -22,19 +22,23 @@ load(qt)
 INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH
 
 # Add dependency to Qt package to all other projects besides Qt libs.
-# Note: Qt libs with full capabilities has UID3 of 0x2001E61C,
+# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C,
 #       while self-signed version typically has temporary UID3 of 0xE001E61C.
 contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) {
-    default_deployment.pkg_prerules += \
+    pkg_depends_qt += \
         "; Default dependency to Qt libraries" \
         "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"Qt\"}"
 
     # Projects linking to webkit need dependency to webkit
     contains(QT, webkit): {
-        default_deployment.pkg_prerules += \
+        pkg_depends_webkit += \
             "; Dependency to Qt Webkit" \
             "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"QtWebKit\"}"
+    } else {
+        default_deployment.pkg_prerules -= pkg_depends_webkit
     }
+} else {
+    default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt
 }
 
 isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index c6023b5..1470a12 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -322,17 +322,36 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
     tw << headerComment.arg(wrapperPkgFilename).arg(dateStr);
 
     // Construct QStringList from pkg_prerules since we need search it before printed to file
+    // Note: Though there can't be more than one language or header line, use stringlists
+    // in case user wants comments to go with the rules.
     QStringList rawPkgPreRules;
+    QStringList languageRules;
+    QStringList headerRules;
     foreach(QString deploymentItem, project->values("DEPLOYMENT")) {
         foreach(QString pkgrulesItem, project->values(deploymentItem + ".pkg_prerules")) {
             QStringList pkgrulesValue = project->values(pkgrulesItem);
             // If there is no stringlist defined for a rule, use rule name directly
             // This is convenience for defining single line mmp statements
             if (pkgrulesValue.isEmpty()) {
-                rawPkgPreRules << pkgrulesItem;
+                if (pkgrulesItem.startsWith("&"))
+                    languageRules << pkgrulesItem;
+                else if (pkgrulesItem.startsWith("#"))
+                    headerRules << pkgrulesItem;
+                else
+                    rawPkgPreRules << pkgrulesItem;
             } else {
-                foreach(QString pkgrule, pkgrulesValue) {
-                    rawPkgPreRules << pkgrule;
+                if (containsStartWithItem('&', pkgrulesValue)) {
+                    foreach(QString pkgrule, pkgrulesValue) {
+                        languageRules << pkgrule;
+                    }
+                } else if (containsStartWithItem('#', pkgrulesValue)) {
+                    foreach(QString pkgrule, pkgrulesValue) {
+                        headerRules << pkgrule;
+                    }
+                } else {
+                    foreach(QString pkgrule, pkgrulesValue) {
+                        rawPkgPreRules << pkgrule;
+                    }
                 }
             }
         }
@@ -340,17 +359,17 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
 
     // Apply some defaults if specific data does not exist in PKG pre-rules
 
-    if (!containsStartWithItem('&', rawPkgPreRules)) {
+    if (languageRules.isEmpty()) {
         // language, (*** hardcoded to english atm, should be parsed from TRANSLATIONS)
-        QString languageCode = "; Language\n&EN\n\n";
-        t << languageCode;
-        tw << languageCode;
-    } else {
+        languageRules << "; Language\n&EN\n\n";
+    } else if (headerRules.isEmpty()) {
         // In case user defines langs, he must take care also about SIS header
-        if (!containsStartWithItem('#', rawPkgPreRules))
-            fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n");
+        fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n");
     }
 
+    t << languageRules.join("\n") << endl;
+    tw << languageRules.join("\n") << endl;
+
     // name of application, UID and version
     QString applicationVersion = project->first("VERSION").isEmpty() ? "1,0,0" : project->first("VERSION").replace('.', ',');
     QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n";
@@ -364,9 +383,10 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, Deployme
         tw << installerSisHeader << endl;
     }
 
-    if (!containsStartWithItem('#', rawPkgPreRules)) {
+    if (headerRules.isEmpty())
         t << sisHeader.arg(visualTarget).arg(uid3).arg(applicationVersion);
-    }
+    else
+        t << headerRules.join("\n") << endl;
 
     // Localized vendor name
     QString vendorName;
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index efee610..717b95e 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -38,7 +38,6 @@ symbian: {
 
     # Partial upgrade SIS file
     vendorinfo = \
-        "&EN" \
         "; Localised Vendor name" \
         "%{\"Nokia, Qt\"}" \
         " " \
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index d46f3b4..d2401f4 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -60,7 +60,6 @@ symbian: {
 
     # Partial upgrade SIS file
     vendorinfo = \
-        "&EN" \
         "; Localised Vendor name" \
         "%{\"Nokia, Qt\"}" \
         " " \
-- 
cgit v0.12


From 903d7a43a5d936bb1e853e5add7c4c3c5503737e Mon Sep 17 00:00:00 2001
From: Simon Hausmann <simon.hausmann@nokia.com>
Date: Wed, 24 Mar 2010 12:17:14 +0100
Subject: Updated WebKit from /home/shausman/src/webkit/trunk to
 qtwebkit/qtwebkit-4.6 ( aa40cdb9595eb15a68e7be03322f973aa613a8f9 )

Changes in WebKit/qt since the last update:

++ b/WebKit/qt/ChangeLog
2010-03-21  axis

        Reviewed by Simon Hausmann.

        Fixed updating the VKB display when inputting into QGraphicsWebView.
        https://bugs.webkit.org/show_bug.cgi?id=36292

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_updateMicroFocus):
        (QGraphicsWebView::setPage):
        * Api/qgraphicswebview.h:

WebCore:
    [Qt] Support for QT_LIBINFIX in Symbian builds

    Patch by Miikka Heikkinen <miikka.heikkinen@digia.com> on 2010-03-19
    Reviewed by Simon Hausmann.

    Configuring Qt with -qtlibinfix parameter will enable installing
    an alternate version of Qt on devices that already have it on ROM.
    This patch provides support for infixed builds of Webkit.
---
 src/3rdparty/webkit/.gitattributes                   |  4 ++++
 src/3rdparty/webkit/ChangeLog                        |  8 ++++++++
 src/3rdparty/webkit/VERSION                          |  2 +-
 src/3rdparty/webkit/WebCore/ChangeLog                | 12 ++++++++++++
 src/3rdparty/webkit/WebCore/WebCore.pro              |  9 ++++++---
 src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h |  2 +-
 6 files changed, 32 insertions(+), 5 deletions(-)
 create mode 100644 src/3rdparty/webkit/.gitattributes

diff --git a/src/3rdparty/webkit/.gitattributes b/src/3rdparty/webkit/.gitattributes
new file mode 100644
index 0000000..5b43bd0
--- /dev/null
+++ b/src/3rdparty/webkit/.gitattributes
@@ -0,0 +1,4 @@
+# To enable automatic merging of ChangeLog files, use the following command:
+# git config merge.changelog.driver "resolve-ChangeLogs --merge-driver %O %A %B"
+ChangeLog* merge=changelog
+
diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog
index 1e89d1e..57cb0de 100644
--- a/src/3rdparty/webkit/ChangeLog
+++ b/src/3rdparty/webkit/ChangeLog
@@ -1,3 +1,11 @@
+2010-02-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
+
+        Reviewed by Eric Seidel.
+
+        Add .gitattributes file for custom ChangeLog merge-driver
+
+        * .gitattributes: Added.
+
 2009-11-30  Jan-Arve Sæther  <jan-arve.saether@nokia.com>
 
         Reviewed by Simon Hausmann.
diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION
index def66ef..9dac2f8 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
 
-        d95c54951e7af2aa7def4346a142b2162bd89bbd
+        aa40cdb9595eb15a68e7be03322f973aa613a8f9
diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog
index 869e225..0a444bc 100644
--- a/src/3rdparty/webkit/WebCore/ChangeLog
+++ b/src/3rdparty/webkit/WebCore/ChangeLog
@@ -1,3 +1,15 @@
+2010-03-19  Miikka Heikkinen  <miikka.heikkinen@digia.com>
+
+        Reviewed by Simon Hausmann.
+
+        [Qt] Support for QT_LIBINFIX in Symbian builds
+
+        Configuring Qt with -qtlibinfix parameter will enable installing
+        an alternate version of Qt on devices that already have it on ROM.
+        This patch provides support for infixed builds of Webkit.
+
+        * WebCore.pro:
+
 2010-01-31  Benjamin Poulain  <benjamin.poulain@nokia.com>
 
         Reviewed by Eric Seidel.
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 735c8ef..7e57394 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -6,9 +6,12 @@ symbian: {
     TARGET.EPOCALLOWDLLDATA=1
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 // Min 128kB, Max 32MB
     TARGET.CAPABILITY = All -Tcb
-    TARGET.UID3 = 0x200267C2
-
-    webkitlibs.sources = QtWebKit.dll
+    isEmpty(QT_LIBINFIX) {
+        TARGET.UID3 = 0x200267C2
+    } else {
+        TARGET.UID3 = 0xE00267C2
+    }
+    webkitlibs.sources = QtWebKit$${QT_LIBINFIX}.dll
     webkitlibs.path = /sys/bin
     vendorinfo = \
         "; Localised Vendor name" \
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h
index 68379a2..f983ae4 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h
@@ -134,10 +134,10 @@ protected:
 
 private:
     Q_PRIVATE_SLOT(d, void _q_doLoadFinished(bool success))
+    Q_PRIVATE_SLOT(d, void _q_updateMicroFocus())
 
     QGraphicsWebViewPrivate* const d;
     friend class QGraphicsWebViewPrivate;
 };
 
 #endif // QGraphicsWebView_h
-    Q_PRIVATE_SLOT(d, void _q_updateMicroFocus())
-- 
cgit v0.12


From b87edcb5fe59b590e20367b167e50abbb23484f4 Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Wed, 24 Mar 2010 13:42:38 +0200
Subject: Clarified pkg_prerules usage documentation.

The default_deployment item shouldn't be used to add own rules.

Task-number: QTBUG-9277
Reviewed-by: Janne Anttila
---
 doc/src/development/qmake-manual.qdoc           | 18 +++++++++++++-----
 doc/src/snippets/code/doc_src_deployment.qdoc   |  7 +++++--
 doc/src/snippets/code/doc_src_qmake-manual.qdoc |  4 +++-
 3 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc
index 7ab3cd2..eaf6cd0 100644
--- a/doc/src/development/qmake-manual.qdoc
+++ b/doc/src/development/qmake-manual.qdoc
@@ -1421,12 +1421,20 @@ is the application private directory on the drive it is installed to.
     attention that also other statements stay valid. For example if you
     override languages statement, you must override also package-header
     statement and all other statements which are language specific.
+
+    On the Symbian platform, the \c default_deployment item specifies
+    default platform and package dependencies. Those dependencies can be
+    selectively disabled if alternative dependencies need to be defined
+    - e.g. if a specific device is required to run the application or
+    more languages need to be supported by the package file. The supported
+    \c default_deployment rules that can be disabled are:
     
-    On the Symbian platform, the \c default_deployment item specifies 
-    default platform dependencies. It can be overwritten if a more 
-    restrictive set is needed - e.g. if a specific
-    device is required to run the application.
-    
+    \list
+    \o pkg_depends_qt
+    \o pkg_depends_webkit
+    \o pkg_platform_dependencies
+    \endlist
+
     For example:
     
     \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 141
diff --git a/doc/src/snippets/code/doc_src_deployment.qdoc b/doc/src/snippets/code/doc_src_deployment.qdoc
index 3b0cda1..48e9ac6 100644
--- a/doc/src/snippets/code/doc_src_deployment.qdoc
+++ b/doc/src/snippets/code/doc_src_deployment.qdoc
@@ -463,7 +463,8 @@ vendorinfo = \
     "%{\"Example Localized Vendor\"}" \
     ":\"Example Vendor\""
 
-default_deployment.pkg_prerules = vendorinfo
+my_deployment.pkg_prerules = vendorinfo
+DEPLOYMENT += my_deployment
 //! [56]
 
 //! [57]
@@ -471,7 +472,9 @@ supported_platforms = \
     "; This demo only supports S60 5.0" \
     "[0x1028315F],0,0,0,{\"S60ProductID\"}"
 
-default_deployment.pkg_prerules += supported_platforms
+default_deployment.pkg_prerules -= pkg_platform_dependencies
+my_deployment.pkg_prerules += supported_platforms
+DEPLOYMENT += my_deployment
 //! [57]
 
 //! [58]
diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
index 36676ae..d9e5d3c 100644
--- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc
+++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
@@ -933,7 +933,9 @@ DEPLOYMENT += somelib justdep
 //! [140]
 
 //! [141]
-default_deployment.pkg_prerules = "[0x11223344],0,0,0,{\"SomeSpecificDeviceID\"}"
+default_deployment.pkg_prerules -= pkg_platform_dependencies
+my_deployment.pkg_prerules = "[0x11223344],0,0,0,{\"SomeSpecificDeviceID\"}"
+DEPLOYMENT += my_deployment
 //! [141]
 
 //! [142]
-- 
cgit v0.12


From d0645d1792e1cbdf417a923ea071975e4390fccd Mon Sep 17 00:00:00 2001
From: mread <qt-info@nokia.com>
Date: Wed, 24 Mar 2010 12:25:58 +0000
Subject: QIODevice::read() and QFile::atEnd() performance improvements

atEnd improvements, since atEnd is used in published example Qt read
loops. The two main ideas are to push the buffer test forward, which
optimises the normal buffered case, and to cache the file size till you
get to the end, which otherwise has to get the file size every 16K of
data.

read buffer improvements: The ring buffer structure was causing
significant performance overheads. In practice QIODevice has much
simpler requirements on its read buffer, and a linear buffer can be
used instead. This now uses a buffer optimised to QIODevice's use of
it.

QIODevice read function improvements. There are a number of sub-themes
here, which all are aimed at getting the normal buffered path through
the code done as fast as possible. This gives greatest improvements for
small reads, but it is these small reads that have the biggest
problems.
- removing the isSequential test, by setting a pointer to the qint64
  to update and using a dummy qint64 target when isSequential, then
  writing through the pointer.
- doing the readability check on the first read only, out of the fast
  path
- doing the maxSize<0 test after the getchar fast path
- removing the buffer isEmpty test and giving a fast exit test
  instead
- moving arithmetic out of the fast path, so "data" and "maxSize"
  are now dynamically updating
- for RCVT builds, ARM mode is used for the read functions because
  the 64-bit operations are much slower with this compiler in Thumb
  mode

There are some other changes to read() which improve clarity:
- bytesToBuffer is now always set to QIODEVICE_BUFFERSIZE. This has
  always been the case, its just that the logic was not clear before.
- moreToRead is set to false now in the case where the request was
  met by a direct device read. Leaving it true in this case was
  pointless, and setting it true in the converse case seems dangerous
  because the function might iterate for a very long time, although
  it might meet the API semantics better and would be a change in
  behavior because the function used to not read more when it claimed
  it would.

Reviewed-by: Joao
Reviewed-by: Aleksandar Babic
---
 src/corelib/io/qfile.cpp     |  46 +++++++++---
 src/corelib/io/qfile_p.h     |   2 +
 src/corelib/io/qiodevice.cpp | 163 +++++++++++++++++++++++++------------------
 src/corelib/io/qiodevice_p.h | 127 ++++++++++++++++++++++++++++++++-
 4 files changed, 260 insertions(+), 78 deletions(-)

diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index aa1c7d9..50e9a8f 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -90,7 +90,8 @@ QFile::DecoderFn QFilePrivate::decoder = locale_decode;
 
 QFilePrivate::QFilePrivate()
     : fileEngine(0), lastWasWrite(false),
-      writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError)
+      writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError),
+      cachedSize(0)
 {
 }
 
@@ -1257,8 +1258,10 @@ QFile::resize(qint64 sz)
         seek(sz);
     if(d->fileEngine->setSize(sz)) {
         unsetError();
+        d->cachedSize = sz;
         return true;
     }
+    d->cachedSize = 0;
     d->setError(QFile::ResizeError, d->fileEngine->errorString());
     return false;
 }
@@ -1420,7 +1423,8 @@ qint64 QFile::size() const
     Q_D(const QFile);
     if (!d->ensureFlushed())
         return 0;
-    return fileEngine()->size();
+    d->cachedSize = fileEngine()->size();
+    return d->cachedSize;
 }
 
 /*!
@@ -1446,16 +1450,16 @@ bool QFile::atEnd() const
 {
     Q_D(const QFile);
 
+    // If there's buffered data left, we're not at the end.
+    if (!d->buffer.isEmpty())
+        return false;
+
     if (!isOpen())
         return true;
 
     if (!d->ensureFlushed())
         return false;
 
-    // If there's buffered data left, we're not at the end.
-    if (!d->buffer.isEmpty())
-        return false;
-
     // If the file engine knows best, say what it says.
     if (d->fileEngine->supportsExtension(QAbstractFileEngine::AtEndExtension)) {
         // Check if the file engine supports AtEndExtension, and if it does,
@@ -1463,6 +1467,11 @@ bool QFile::atEnd() const
         return d->fileEngine->atEnd();
     }
 
+    // if it looks like we are at the end, or if size is not cached,
+    // fall through to bytesAvailable() to make sure.
+    if (pos() < d->cachedSize)
+        return false;
+
     // Fall back to checking how much is available (will stat files).
     return bytesAvailable() == 0;
 }
@@ -1502,12 +1511,21 @@ qint64 QFile::readLineData(char *data, qint64 maxlen)
     if (!d->ensureFlushed())
         return -1;
 
-    if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension))
-        return d->fileEngine->readLine(data, maxlen);
+    qint64 read;
+    if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension)) {
+        read = d->fileEngine->readLine(data, maxlen);
+    } else {
+        // Fall back to QIODevice's readLine implementation if the engine
+        // cannot do it faster.
+        read = QIODevice::readLineData(data, maxlen);
+    }
+
+    if (read < maxlen) {
+        // failed to read all requested, may be at the end of file, stop caching size so that it's rechecked
+        d->cachedSize = 0;
+    }
 
-    // Fall back to QIODevice's readLine implementation if the engine
-    // cannot do it faster.
-    return QIODevice::readLineData(data, maxlen);
+    return read;
 }
 
 /*!
@@ -1528,6 +1546,12 @@ qint64 QFile::readData(char *data, qint64 len)
             err = QFile::ReadError;
         d->setError(err, d->fileEngine->errorString());
     }
+
+    if (read < len) {
+        // failed to read all requested, may be at the end of file, stop caching size so that it's rechecked
+        d->cachedSize = 0;
+    }
+
     return read;
 }
 
diff --git a/src/corelib/io/qfile_p.h b/src/corelib/io/qfile_p.h
index f8f5f5c..cf76c09 100644
--- a/src/corelib/io/qfile_p.h
+++ b/src/corelib/io/qfile_p.h
@@ -84,6 +84,8 @@ protected:
     void setError(QFile::FileError err, const QString &errorString);
     void setError(QFile::FileError err, int errNum);
 
+    mutable qint64 cachedSize;
+
 private:
     static QFile::EncoderFn encoder;
     static QFile::DecoderFn decoder;
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index c93f0c3..f83c142 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -84,10 +84,6 @@ void debugBinaryString(const char *data, qint64 maxlen)
 }
 #endif
 
-#ifndef QIODEVICE_BUFFERSIZE
-#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384)
-#endif
-
 #define Q_VOID
 
 #define CHECK_MAXLEN(function, returnType) \
@@ -123,7 +119,9 @@ void debugBinaryString(const char *data, qint64 maxlen)
 QIODevicePrivate::QIODevicePrivate()
     : openMode(QIODevice::NotOpen), buffer(QIODEVICE_BUFFERSIZE),
       pos(0), devicePos(0)
+       , pPos(&pos), pDevicePos(&devicePos)
        , baseReadLineDataCalled(false)
+       , firstRead(true)
        , accessMode(Unset)
 #ifdef QT_NO_QOBJECT
        , q_ptr(0)
@@ -449,11 +447,15 @@ QIODevice::OpenMode QIODevice::openMode() const
 */
 void QIODevice::setOpenMode(OpenMode openMode)
 {
+    Q_D(QIODevice);
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::setOpenMode(0x%x)\n", this, int(openMode));
 #endif
-    d_func()->openMode = openMode;
-    d_func()->accessMode = QIODevicePrivate::Unset;
+    d->openMode = openMode;
+    d->accessMode = QIODevicePrivate::Unset;
+    d->firstRead = true;
+    if (!isReadable())
+        d->buffer.clear();
 }
 
 /*!
@@ -537,6 +539,7 @@ bool QIODevice::open(OpenMode mode)
     d->pos = (mode & Append) ? size() : qint64(0);
     d->buffer.clear();
     d->accessMode = QIODevicePrivate::Unset;
+    d->firstRead = true;
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::open(0x%x)\n", this, quint32(mode));
 #endif
@@ -566,6 +569,7 @@ void QIODevice::close()
     d->errorString.clear();
     d->pos = 0;
     d->buffer.clear();
+    d->firstRead = true;
 }
 
 /*!
@@ -729,6 +733,12 @@ qint64 QIODevice::bytesToWrite() const
     return qint64(0);
 }
 
+#ifdef Q_CC_RVCT
+// arm mode makes the 64-bit integer operations much faster in RVCT 2.2
+#pragma push
+#pragma arm
+#endif
+
 /*!
     Reads at most \a maxSize bytes from the device into \a data, and
     returns the number of bytes read. If an error occurs, such as when
@@ -745,21 +755,17 @@ qint64 QIODevice::bytesToWrite() const
 qint64 QIODevice::read(char *data, qint64 maxSize)
 {
     Q_D(QIODevice);
-    CHECK_READABLE(read, qint64(-1));
-    CHECK_MAXLEN(read, qint64(-1));
 
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::read(%p, %d), d->pos = %d, d->buffer.size() = %d\n",
            this, data, int(maxSize), int(d->pos), int(d->buffer.size()));
 #endif
-    const bool sequential = d->isSequential();
 
     // Short circuit for getChar()
     if (maxSize == 1) {
         int chint;
         while ((chint = d->buffer.getChar()) != -1) {
-            if (!sequential)
-                ++d->pos;
+            ++(*d->pPos);
 
             char c = char(uchar(chint));
             if (c == '\r' && (d->openMode & Text))
@@ -773,61 +779,77 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
         }
     }
 
+    CHECK_MAXLEN(read, qint64(-1));
     qint64 readSoFar = 0;
     bool moreToRead = true;
     do {
-        int lastReadChunkSize = 0;
-
         // Try reading from the buffer.
-        if (!d->buffer.isEmpty()) {
-            lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar);
-            readSoFar += lastReadChunkSize;
-            if (!sequential)
-                d->pos += lastReadChunkSize;
+        int lastReadChunkSize = d->buffer.read(data, maxSize);
+        *d->pPos += lastReadChunkSize;
+        readSoFar += lastReadChunkSize;
+        // fast exit when satisfied by buffer
+        if (lastReadChunkSize == maxSize && !(d->openMode & Text))
+            return readSoFar;
+
+        if (lastReadChunkSize > 0) {
+            data += lastReadChunkSize;
+            maxSize -= lastReadChunkSize;
 #if defined QIODEVICE_DEBUG
             printf("%p \treading %d bytes from buffer into position %d\n", this, lastReadChunkSize,
                    int(readSoFar) - lastReadChunkSize);
 #endif
-        } else if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) {
-            // In buffered mode, we try to fill up the QIODevice buffer before
-            // we do anything else.
-            int bytesToBuffer = qMax(maxSize - readSoFar, QIODEVICE_BUFFERSIZE);
-            char *writePointer = d->buffer.reserve(bytesToBuffer);
-
-            // Make sure the device is positioned correctly.
-            if (d->pos != d->devicePos && !sequential && !seek(d->pos))
-                return qint64(-1);
-            qint64 readFromDevice = readData(writePointer, bytesToBuffer);
-            d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice)));
+        } else {
+            if (d->firstRead) {
+                // this is the first time the file has been read, check it's valid and set up pos pointers
+                // for fast pos updates.
+                CHECK_READABLE(read, qint64(-1));
+                d->firstRead = false;
+                if (d->isSequential()) {
+                    d->pPos = &d->seqDumpPos;
+                    d->pDevicePos = &d->seqDumpPos;
+                }
+            }
 
-            if (readFromDevice > 0) {
-                if (!sequential)
-                    d->devicePos += readFromDevice;
+            if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) {
+                // In buffered mode, we try to fill up the QIODevice buffer before
+                // we do anything else.
+                // buffer is empty at this point, try to fill it
+                int bytesToBuffer = QIODEVICE_BUFFERSIZE;
+                char *writePointer = d->buffer.reserve(bytesToBuffer);
+
+                // Make sure the device is positioned correctly.
+                if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos))
+                    return readSoFar ? readSoFar : qint64(-1);
+                qint64 readFromDevice = readData(writePointer, bytesToBuffer);
+                d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice)));
+
+                if (readFromDevice > 0) {
+                    *d->pDevicePos += readFromDevice;
 #if defined QIODEVICE_DEBUG
-                printf("%p \treading %d from device into buffer\n", this, int(readFromDevice));
+                    printf("%p \treading %d from device into buffer\n", this, int(readFromDevice));
 #endif
 
-                if (readFromDevice < bytesToBuffer)
-                    d->buffer.truncate(int(readFromDevice));
-                if (!d->buffer.isEmpty()) {
-                    lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar);
-                    readSoFar += lastReadChunkSize;
-                    if (!sequential)
-                        d->pos += lastReadChunkSize;
+                    if (!d->buffer.isEmpty()) {
+                        lastReadChunkSize = d->buffer.read(data, maxSize);
+                        readSoFar += lastReadChunkSize;
+                        data += lastReadChunkSize;
+                        maxSize -= lastReadChunkSize;
+                        *d->pPos += lastReadChunkSize;
 #if defined QIODEVICE_DEBUG
-                    printf("%p \treading %d bytes from buffer at position %d\n", this,
-                           lastReadChunkSize, int(readSoFar));
+                        printf("%p \treading %d bytes from buffer at position %d\n", this,
+                               lastReadChunkSize, int(readSoFar));
 #endif
+                    }
                 }
             }
         }
 
         // If we need more, try reading from the device.
-        if (readSoFar < maxSize) {
+        if (maxSize > 0) {
             // Make sure the device is positioned correctly.
-            if (d->pos != d->devicePos && !sequential && !seek(d->pos))
-                return qint64(-1);
-            qint64 readFromDevice = readData(data + readSoFar, maxSize - readSoFar);
+            if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos))
+                return readSoFar ? readSoFar : qint64(-1);
+            qint64 readFromDevice = readData(data, maxSize);
 #if defined QIODEVICE_DEBUG
             printf("%p \treading %d bytes from device (total %d)\n", this, int(readFromDevice), int(readSoFar));
 #endif
@@ -835,27 +857,21 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
                 // error and we haven't read anything: return immediately
                 return -1;
             }
-            if (readFromDevice <= 0) {
-                moreToRead = false;
-            } else {
-                // see if we read as much data as we asked for
-                if (readFromDevice < maxSize - readSoFar)
-                    moreToRead = false;
-
+            if (readFromDevice > 0) {
                 lastReadChunkSize += int(readFromDevice);
                 readSoFar += readFromDevice;
-                if (!sequential) {
-                    d->pos += readFromDevice;
-                    d->devicePos += readFromDevice;
-                }
+                data += readFromDevice;
+                maxSize -= readFromDevice;
+                *d->pPos += readFromDevice;
+                *d->pDevicePos += readFromDevice;
             }
-        } else {
-            moreToRead = false;
         }
+        // Best attempt has been made to read data, don't try again except for text mode adjustment below
+        moreToRead = false;
 
         if (readSoFar && d->openMode & Text) {
-            char *readPtr = data + readSoFar - lastReadChunkSize;
-            const char *endPtr = data + readSoFar;
+            char *readPtr = data - lastReadChunkSize;
+            const char *endPtr = data;
 
             if (readPtr < endPtr) {
                 // optimization to avoid initial self-assignment
@@ -870,8 +886,11 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
                     char ch = *readPtr++;
                     if (ch != '\r')
                         *writePtr++ = ch;
-                    else
+                    else {
                         --readSoFar;
+                        --data;
+                        ++maxSize;
+                    }
                 }
 
                 // Make sure we get more data if there is room for more. This
@@ -885,11 +904,15 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
 #if defined QIODEVICE_DEBUG
     printf("%p \treturning %d, d->pos == %d, d->buffer.size() == %d\n", this,
            int(readSoFar), int(d->pos), d->buffer.size());
-    debugBinaryString(data, readSoFar);
+    debugBinaryString(data - readSoFar, readSoFar);
 #endif
     return readSoFar;
 }
 
+#ifdef Q_CC_RVCT
+#pragma pop
+#endif
+
 /*!
     \overload
 
@@ -997,6 +1020,12 @@ QByteArray QIODevice::readAll()
     return result;
 }
 
+#ifdef Q_CC_RVCT
+// arm mode makes the 64-bit integer operations much faster in RVCT 2.2
+#pragma push
+#pragma arm
+#endif
+
 /*!
     This function reads a line of ASCII characters from the device, up
     to a maximum of \a maxSize - 1 bytes, stores the characters in \a
@@ -1229,6 +1258,10 @@ qint64 QIODevice::readLineData(char *data, qint64 maxSize)
     return readSoFar;
 }
 
+#ifdef Q_CC_RVCT
+#pragma pop
+#endif
+
 /*!
     Returns true if a complete line of data can be read from the device;
     otherwise returns false.
@@ -1416,9 +1449,7 @@ bool QIODevicePrivate::putCharHelper(char c)
 */
 bool QIODevice::getChar(char *c)
 {
-    Q_D(QIODevice);
-    CHECK_READABLE(getChar, false);
-
+    // readability checked in read()
     char ch;
     return (1 == read(c ? c : &ch, 1));
 }
diff --git a/src/corelib/io/qiodevice_p.h b/src/corelib/io/qiodevice_p.h
index cc4a237..94dadca 100644
--- a/src/corelib/io/qiodevice_p.h
+++ b/src/corelib/io/qiodevice_p.h
@@ -64,6 +64,126 @@
 
 QT_BEGIN_NAMESPACE
 
+#ifndef QIODEVICE_BUFFERSIZE
+#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384)
+#endif
+
+// This is QIODevice's read buffer, optimised for read(), isEmpty() and getChar()
+class QIODevicePrivateLinearBuffer
+{
+public:
+    QIODevicePrivateLinearBuffer(int) : len(0), first(0), buf(0), capacity(0) {
+    }
+    ~QIODevicePrivateLinearBuffer() {
+        delete [] buf;
+    }
+    void clear() {
+        first = buf;
+        len = 0;
+    }
+    int size() const {
+        return len;
+    }
+    bool isEmpty() const {
+        return len == 0;
+    }
+    void skip(int n) {
+        if (n >= len) {
+            clear();
+        } else {
+            len -= n;
+            first += n;
+        }
+    }
+    int getChar() {
+        if (len == 0)
+            return -1;
+        int ch = uchar(*first);
+        len--;
+        first++;
+        return ch;
+    }
+    int read(char* target, int size) {
+        int r = qMin(size, len);
+        memcpy(target, first, r);
+        len -= r;
+        first += r;
+        return r;
+    }
+    char* reserve(int size) {
+        makeSpace(size + len, freeSpaceAtEnd);
+        char* writePtr = first + len;
+        len += size;
+        return writePtr;
+    }
+    void chop(int size) {
+        if (size >= len) {
+            clear();
+        } else {
+            len -= size;
+        }
+    }
+    QByteArray readAll() {
+        char* f = first;
+        int l = len;
+        clear();
+        return QByteArray(f, l);
+    }
+    int readLine(char* target, int size) {
+        int r = qMin(size, len);
+        char* eol = static_cast<char*>(memchr(first, '\n', r));
+        if (eol)
+            r = 1+(eol-first);
+        memcpy(target, first, r);
+        len -= r;
+        first += r;
+        return int(r);
+        }
+    bool canReadLine() const {
+        return memchr(first, '\n', len);
+    }
+    void ungetChar(char c) {
+        if (first == buf) {
+            // underflow, the existing valid data needs to move to the end of the (potentially bigger) buffer
+            makeSpace(len+1, freeSpaceAtStart);
+        }
+        first--;
+        len++;
+        *first = c;
+    }
+
+private:
+    enum FreeSpacePos {freeSpaceAtStart, freeSpaceAtEnd};
+    void makeSpace(size_t required, FreeSpacePos where) {
+        size_t newCapacity = qMax(capacity, size_t(QIODEVICE_BUFFERSIZE));
+        while (newCapacity < required)
+            newCapacity *= 2;
+        int moveOffset = (where == freeSpaceAtEnd) ? 0 : newCapacity - len;
+        if (newCapacity > capacity) {
+            // allocate more space
+            char* newBuf = new char[newCapacity];
+            memmove(newBuf + moveOffset, first, len);
+            delete [] buf;
+            buf = newBuf;
+            capacity = newCapacity;
+        } else {
+            // shift any existing data to make space
+            memmove(buf + moveOffset, first, len);
+        }
+        first = buf + moveOffset;
+    }
+
+private:
+    // length of the unread data
+    int len;
+    // start of the unread data
+    char* first;
+    // the allocated buffer
+    char* buf;
+    // allocated buffer size
+    size_t capacity;
+};
+
 class Q_CORE_EXPORT QIODevicePrivate
 #ifndef QT_NO_QOBJECT
     : public QObjectPrivate
@@ -78,10 +198,15 @@ public:
     QIODevice::OpenMode openMode;
     QString errorString;
 
-    QRingBuffer buffer;
+    QIODevicePrivateLinearBuffer buffer;
     qint64 pos;
     qint64 devicePos;
+    // these three are for fast position updates during read, avoiding isSequential test
+    qint64 seqDumpPos;
+    qint64 *pPos;
+    qint64 *pDevicePos;
     bool baseReadLineDataCalled;
+    bool firstRead;
 
     virtual bool putCharHelper(char c);
 
-- 
cgit v0.12


From 96bd304a62f88dc097d5ac4f16d60fd8751227fd Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 24 Mar 2010 13:52:57 +0100
Subject: Stabilize QGraphicsEffect test on X11

---
 tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
index 02899ae..49b840f 100644
--- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
+++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
@@ -512,6 +512,7 @@ void tst_QGraphicsEffect::drawPixmapItem()
     QGraphicsView view(&scene);
     view.show();
     QTest::qWaitForWindowShown(&view);
+    QTRY_VERIFY(effect->repaints >= 1);
 
     item->rotate(180);
     QTest::qWait(50);
@@ -642,7 +643,7 @@ void tst_QGraphicsEffect::childrenVisibilityShouldInvalidateCache()
     view.show();
     QApplication::setActiveWindow(&view);
     QTest::qWaitForWindowShown(&view);
-    QCOMPARE(parent.nbPaint, 1);
+    QTRY_COMPARE(parent.nbPaint, 1);
     //we set an effect on the parent
     parent.setGraphicsEffect(new QGraphicsDropShadowEffect(&parent));
     //flush the events
-- 
cgit v0.12


From 4fa9387f6cbba798fcd262f970d87a01e66267f5 Mon Sep 17 00:00:00 2001
From: Shane Kearns <shane.kearns@accenture.com>
Date: Wed, 24 Mar 2010 14:00:39 +0000
Subject: Fix error reporting when symbian file copy fails.

When a file copy failed on symbian, the file engine error was not set.
Now translates the symbian os error code to set the file engine error.

Reviewed-by: Marius Storm-Olsen
---
 src/corelib/io/qfsfileengine_p.h      |  4 ++++
 src/corelib/io/qfsfileengine_unix.cpp | 40 +++++++++++++++++++++++++++++++++--
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index 0f63eb8..e50777b 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -151,6 +151,10 @@ public:
     static bool uncListSharesOnServer(const QString &server, QStringList *list);
 #endif
 
+#ifdef Q_OS_SYMBIAN
+    void setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString);
+#endif
+
 protected:
     QFSFileEnginePrivate();
 
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 1331f54..33e00f6 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -81,6 +81,40 @@ static bool isRelativePathSymbian(const QString& fileName)
              && ((fileName.at(0).isLetter() && fileName.at(1) == QLatin1Char(':'))
              || (fileName.at(0) == QLatin1Char('/') && fileName.at(1) == QLatin1Char('/')))));
 }
+
+/*!
+ \internal
+ convert symbian error code to the one suitable for setError.
+ example usage: setSymbianError(err, QFile::CopyError, QLatin1String("copy error"))
+*/
+void QFSFileEnginePrivate::setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString)
+{
+    Q_Q(QFSFileEngine);
+    switch (symbianError) {
+    case KErrNone:
+        q->setError(QFile::NoError, QLatin1String(""));
+        break;
+    case KErrAccessDenied:
+        q->setError(QFile::PermissionsError, QLatin1String("access denied"));
+        break;
+    case KErrPermissionDenied:
+        q->setError(QFile::PermissionsError, QLatin1String("permission denied"));
+        break;
+    case KErrAbort:
+        q->setError(QFile::AbortError, QLatin1String("aborted"));
+        break;
+    case KErrCancel:
+        q->setError(QFile::AbortError, QLatin1String("cancelled"));
+        break;
+    case KErrTimedOut:
+        q->setError(QFile::TimeOutError, QLatin1String("timed out"));
+        break;
+    default:
+        q->setError(defaultError, defaultString);
+        break;
+    }
+}
+
 #endif
 
 /*!
@@ -427,8 +461,10 @@ bool QFSFileEngine::copy(const QString &newName)
         }
     ) // End TRAP
     delete fm;
-    // ### Add error reporting on failure
-    return (err == KErrNone);
+    if (err == KErrNone)
+        return true;
+    d->setSymbianError(err, QFile::CopyError, QLatin1String("copy error"));
+    return false;
 #else
     Q_UNUSED(newName);
     // ### Add copy code for Unix here
-- 
cgit v0.12


From 9c4bfd1dbdda1a073be12cf6212492abc7e9472b Mon Sep 17 00:00:00 2001
From: Bill King <bill.king@nokia.com>
Date: Thu, 25 Mar 2010 16:36:32 +1000
Subject: Unicode fixes for ODBC SQL Driver.

Better unicode handling detection, plus turn off unicode if FreeTDS,
plus handling of returning strings under non-unicode scenarios.

Task-number: QTBUG-8846
Reviewed-by: Justin McPherson
---
 src/sql/drivers/odbc/qsql_odbc.cpp | 155 ++++++++++++++++++++++++++++---------
 1 file changed, 117 insertions(+), 38 deletions(-)

diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index e75c19d..1506c3c 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -131,11 +131,10 @@ class QODBCDriverPrivate
 public:
     enum DefaultCase{Lower, Mixed, Upper, Sensitive};
     QODBCDriverPrivate()
-    : hEnv(0), hDbc(0), useSchema(false), disconnectCount(0), isMySqlServer(false),
-           isMSSqlServer(false), hasSQLFetchScroll(true), hasMultiResultSets(false),
-           isQuoteInitialized(false), quote(QLatin1Char('"'))
+    : hEnv(0), hDbc(0), unicode(false), useSchema(false), disconnectCount(0), isMySqlServer(false),
+           isMSSqlServer(false), isFreeTDSDriver(false), hasSQLFetchScroll(true),
+           hasMultiResultSets(false), isQuoteInitialized(false), quote(QLatin1Char('"'))
     {
-        unicode = false;
     }
 
     SQLHANDLE hEnv;
@@ -146,6 +145,7 @@ public:
     int disconnectCount;
     bool isMySqlServer;
     bool isMSSqlServer;
+    bool isFreeTDSDriver;
     bool hasSQLFetchScroll;
     bool hasMultiResultSets;
 
@@ -172,7 +172,10 @@ public:
     QODBCPrivate(QODBCDriverPrivate *dpp)
     : hStmt(0), useSchema(false), hasSQLFetchScroll(true), driverPrivate(dpp), userForwardOnly(false)
     {
-        unicode = false;
+        unicode = dpp->unicode;
+        useSchema = dpp->useSchema;
+        disconnectCount = dpp->disconnectCount;
+        hasSQLFetchScroll = dpp->hasSQLFetchScroll;
     }
 
     inline void clearValues()
@@ -374,44 +377,88 @@ static QString qGetStringData(SQLHANDLE hStmt, int column, int colSize, bool uni
     } else {
         colSize++; // make sure there is room for more than the 0 termination
     }
-    r = SQLGetData(hStmt,
-                    column+1,
-                    SQL_C_TCHAR,
-                    NULL,
-                    0,
-                    &lengthIndicator);
-    if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0)
-        colSize = lengthIndicator/sizeof(SQLTCHAR) + 1;
-    QVarLengthArray<SQLTCHAR> buf(colSize);
-    while (true) {
+    if(unicode) {
         r = SQLGetData(hStmt,
                         column+1,
                         SQL_C_TCHAR,
-                        (SQLPOINTER)buf.data(),
-                        colSize*sizeof(SQLTCHAR),
+                        NULL,
+                        0,
                         &lengthIndicator);
-        if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
-            if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
+        if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0)
+            colSize = lengthIndicator/sizeof(SQLTCHAR) + 1;
+        QVarLengthArray<SQLTCHAR> buf(colSize);
+        memset(buf.data(), 0, colSize*sizeof(SQLTCHAR));
+        while (true) {
+            r = SQLGetData(hStmt,
+                            column+1,
+                            SQL_C_TCHAR,
+                            (SQLPOINTER)buf.data(),
+                            colSize*sizeof(SQLTCHAR),
+                            &lengthIndicator);
+            if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+                if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
+                    fieldVal.clear();
+                    break;
+                }
+                // if SQL_SUCCESS_WITH_INFO is returned, indicating that
+                // more data can be fetched, the length indicator does NOT
+                // contain the number of bytes returned - it contains the
+                // total number of bytes that CAN be fetched
+                // colSize-1: remove 0 termination when there is more data to fetch
+                int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator/sizeof(SQLTCHAR);
+                    fieldVal += fromSQLTCHAR(buf, rSize);
+                if (lengthIndicator < (unsigned int)colSize*sizeof(SQLTCHAR)) {
+                    // workaround for Drivermanagers that don't return SQL_NO_DATA
+                    break;
+                }
+            } else if (r == SQL_NO_DATA) {
+                break;
+            } else {
+                qWarning() << "qGetStringData: Error while fetching data (" << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ')';
                 fieldVal.clear();
                 break;
             }
-            // if SQL_SUCCESS_WITH_INFO is returned, indicating that
-            // more data can be fetched, the length indicator does NOT
-            // contain the number of bytes returned - it contains the
-            // total number of bytes that CAN be fetched
-            // colSize-1: remove 0 termination when there is more data to fetch
-            int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator/sizeof(SQLTCHAR);
-                fieldVal += fromSQLTCHAR(buf, rSize);
-            if (lengthIndicator < (unsigned int)colSize*sizeof(SQLTCHAR)) {
-                // workaround for Drivermanagers that don't return SQL_NO_DATA
+        }
+    } else {
+        r = SQLGetData(hStmt,
+                        column+1,
+                        SQL_C_CHAR,
+                        NULL,
+                        0,
+                        &lengthIndicator);
+        if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0)
+            colSize = lengthIndicator + 1;
+        QVarLengthArray<SQLCHAR> buf(colSize);
+        while (true) {
+            r = SQLGetData(hStmt,
+                            column+1,
+                            SQL_C_CHAR,
+                            (SQLPOINTER)buf.data(),
+                            colSize,
+                            &lengthIndicator);
+            if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+                if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) {
+                    fieldVal.clear();
+                    break;
+                }
+                // if SQL_SUCCESS_WITH_INFO is returned, indicating that
+                // more data can be fetched, the length indicator does NOT
+                // contain the number of bytes returned - it contains the
+                // total number of bytes that CAN be fetched
+                // colSize-1: remove 0 termination when there is more data to fetch
+                int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator;
+                    fieldVal += QString::fromUtf8((const char *)buf.constData(), rSize);
+                if (lengthIndicator < (unsigned int)colSize) {
+                    // workaround for Drivermanagers that don't return SQL_NO_DATA
+                    break;
+                }
+            } else if (r == SQL_NO_DATA) {
+                break;
+            } else {
+                qWarning() << "qGetStringData: Error while fetching data (" << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ')';
+                fieldVal.clear();
                 break;
             }
-        } else if (r == SQL_NO_DATA) {
-            break;
-        } else {
-            qWarning() << "qGetStringData: Error while fetching data (" << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ')';
-            fieldVal.clear();
-            break;
         }
     }
     return fieldVal;
@@ -866,10 +913,6 @@ QODBCResult::QODBCResult(const QODBCDriver * db, QODBCDriverPrivate* p)
 : QSqlResult(db)
 {
     d = new QODBCPrivate(p);
-    d->unicode = p->unicode;
-    d->useSchema = p->useSchema;
-    d->disconnectCount = p->disconnectCount;
-    d->hasSQLFetchScroll = p->hasSQLFetchScroll;
 }
 
 QODBCResult::~QODBCResult()
@@ -1846,6 +1889,7 @@ bool QODBCDriver::open(const QString & db,
 
     SQLSMALLINT cb;
     QVarLengthArray<SQLTCHAR> connOut(1024);
+    memset(connOut.data(), 0, connOut.size() * sizeof(SQLTCHAR));
     r = SQLDriverConnect(d->hDbc,
                           NULL,
 #ifdef UNICODE
@@ -1943,6 +1987,7 @@ void QODBCDriverPrivate::checkUnicode()
                     NULL);
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WCHAR)) {
         unicode = true;
+        return;
     }
 
     r = SQLGetInfo(hDbc,
@@ -1952,6 +1997,7 @@ void QODBCDriverPrivate::checkUnicode()
                     NULL);
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WVARCHAR)) {
         unicode = true;
+        return;
     }
 
     r = SQLGetInfo(hDbc,
@@ -1961,7 +2007,25 @@ void QODBCDriverPrivate::checkUnicode()
                     NULL);
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WLONGVARCHAR)) {
         unicode = true;
+        return;
+    }
+    SQLHANDLE hStmt;
+    r = SQLAllocHandle(SQL_HANDLE_STMT,
+                                  hDbc,
+                                  &hStmt);
+
+    r = SQLExecDirect(hStmt, toSQLTCHAR(QLatin1String("select 'test'")).data(), SQL_NTS);
+    if(r == SQL_SUCCESS) {
+        r = SQLFetch(hStmt);
+        if(r == SQL_SUCCESS) {
+            QVarLengthArray<SQLWCHAR> buffer(10);
+            r = SQLGetData(hStmt, 1, SQL_C_WCHAR, buffer.data(), buffer.size() * sizeof(SQLWCHAR), NULL);
+            if(r == SQL_SUCCESS && fromSQLTCHAR(buffer) == QLatin1String("test")) {
+                unicode = true;
+            }
+        }
     }
+    r = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
 }
 
 bool QODBCDriverPrivate::checkDriver() const
@@ -2053,6 +2117,21 @@ void QODBCDriverPrivate::checkSqlServer()
         isMySqlServer = serverType.contains(QLatin1String("mysql"), Qt::CaseInsensitive);
         isMSSqlServer = serverType.contains(QLatin1String("Microsoft SQL Server"), Qt::CaseInsensitive);
     }
+    r = SQLGetInfo(hDbc,
+                   SQL_DRIVER_NAME,
+                   serverString.data(),
+                   serverString.size() * sizeof(SQLTCHAR),
+                   &t);
+    if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+        QString serverType;
+#ifdef UNICODE
+        serverType = fromSQLTCHAR(serverString, t/sizeof(SQLTCHAR));
+#else
+        serverType = QString::fromUtf8((const char *)serverString.constData(), t);
+#endif
+        isFreeTDSDriver = serverType.contains(QLatin1String("tdsodbc"), Qt::CaseInsensitive);
+        unicode = isFreeTDSDriver == false;
+    }
 }
 
 void QODBCDriverPrivate::checkHasSQLFetchScroll()
-- 
cgit v0.12


From 194bbeed0152d541527059bb0f1dae60a8573912 Mon Sep 17 00:00:00 2001
From: Bill King <bill.king@nokia.com>
Date: Thu, 25 Mar 2010 16:44:32 +1000
Subject: Fix ODBC compilation for ODBC versions < 3.5

Task-number: QTBUG-8488
Reviewed-by: Justin McPherson
---
 src/sql/drivers/odbc/qsql_odbc.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index 1506c3c..f41a914 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -352,7 +352,9 @@ static QVariant::Type qDecodeODBCType(SQLSMALLINT sqltype, const T* p, bool isSi
 #endif
     case SQL_CHAR:
     case SQL_VARCHAR:
+#if (ODBCVER >= 0x0350)
     case SQL_GUID:
+#endif
     case SQL_LONGVARCHAR:
         type = QVariant::String;
         break;
-- 
cgit v0.12


From 92607e19c79fcdfb82e42fa45353004f85d1adf9 Mon Sep 17 00:00:00 2001
From: Bill King <bill.king@nokia.com>
Date: Thu, 25 Mar 2010 16:50:32 +1000
Subject: Sql Autotest cleanup and tweaking.

---
 tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp | 178 +++++++++++++++--------------
 tests/auto/qsqlquery/tst_qsqlquery.cpp     |   9 +-
 2 files changed, 95 insertions(+), 92 deletions(-)

diff --git a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp
index f837564..f3c2c09 100644
--- a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp
+++ b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp
@@ -44,7 +44,7 @@
 #include <q3sqlcursor.h>
 #include <qsqlfield.h>
 #include <qsqldriver.h>
-
+#include <QSet>
 
 #include "../qsqldatabase/tst_databases.h"
 
@@ -122,7 +122,7 @@ void tst_Q3SqlCursor::generic_data(const QString &engine)
 {
     if ( dbs.fillTestTable(engine) == 0 ) {
         if(engine.isEmpty())
-	   QSKIP( "No database drivers are available in this Qt configuration", SkipAll );
+           QSKIP( "No database drivers are available in this Qt configuration", SkipAll );
         else
            QSKIP( (QString("No database drivers of type %1 are available in this Qt configuration").arg(engine)).toLocal8Bit(), SkipAll );
     }
@@ -131,7 +131,7 @@ void tst_Q3SqlCursor::generic_data(const QString &engine)
 void tst_Q3SqlCursor::createTestTables( QSqlDatabase db )
 {
     if ( !db.isValid() )
-	return;
+        return;
     QSqlQuery q( db );
 
     if (tst_Databases::isSqlServer(db)) {
@@ -143,20 +143,20 @@ void tst_Q3SqlCursor::createTestTables( QSqlDatabase db )
 
     // please never ever change this table; otherwise fix all tests ;)
     if ( tst_Databases::isMSAccess( db ) ) {
-	QVERIFY_SQL(q, exec( "create table " + qtest + " ( id int not null, t_varchar varchar(40) not null,"
-			 "t_char char(40), t_numeric number, primary key (id, t_varchar) )" ));
+        QVERIFY_SQL(q, exec( "create table " + qtest + " ( id int not null, t_varchar varchar(40) not null,"
+                         "t_char char(40), t_numeric number, primary key (id, t_varchar) )" ));
     } else {
-	QVERIFY_SQL(q, exec( "create table " + qtest + " ( id int not null, t_varchar varchar(40) not null,"
-			 "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar) )" ));
+        QVERIFY_SQL(q, exec( "create table " + qtest + " ( id int not null, t_varchar varchar(40) not null,"
+                         "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar) )" ));
     }
 
     if ( tst_Databases::isSqlServer( db ) ) {
-	//workaround for SQL SERVER since he can store unicode only in nvarchar fields
-	QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode", __FILE__) + " (id int not null, "
-		       "t_varchar nvarchar(80) not null, t_char nchar(80) )" ));
+        //workaround for SQL SERVER since he can store unicode only in nvarchar fields
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode", __FILE__) + " (id int not null, "
+                       "t_varchar nvarchar(80) not null, t_char nchar(80) )" ));
     } else {
-	QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode", __FILE__) + " (id int not null, "
-		       "t_varchar varchar(100) not null," "t_char char(100))" ));
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode", __FILE__) + " (id int not null, "
+                       "t_varchar varchar(100) not null," "t_char char(100))" ));
     }
 
     if (tst_Databases::isMSAccess(db)) {
@@ -169,7 +169,7 @@ void tst_Q3SqlCursor::createTestTables( QSqlDatabase db )
 void tst_Q3SqlCursor::dropTestTables( QSqlDatabase db )
 {
     if ( !db.isValid() )
-	return;
+        return;
     QStringList tableNames;
     tableNames << qtest
             << qTableName( "qtest_unicode", __FILE__ )
@@ -183,7 +183,7 @@ void tst_Q3SqlCursor::dropTestTables( QSqlDatabase db )
 void tst_Q3SqlCursor::populateTestTables( QSqlDatabase db )
 {
     if (!db.isValid())
-	return;
+        return;
     QSqlQuery q( db );
 
     q.exec( "delete from " + qtest ); //not fatal
@@ -200,21 +200,21 @@ void tst_Q3SqlCursor::initTestCase()
     dbs.open();
 
     for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
-	QSqlDatabase db = QSqlDatabase::database( (*it) );
-	CHECK_DATABASE( db );
+        QSqlDatabase db = QSqlDatabase::database( (*it) );
+        CHECK_DATABASE( db );
 
-	dropTestTables( db ); //in case of leftovers
-	createTestTables( db );
-	populateTestTables( db );
+        dropTestTables( db ); //in case of leftovers
+        createTestTables( db );
+        populateTestTables( db );
     }
 }
 
 void tst_Q3SqlCursor::cleanupTestCase()
 {
     for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
-	QSqlDatabase db = QSqlDatabase::database( (*it) );
-	CHECK_DATABASE( db );
-	dropTestTables( db );
+        QSqlDatabase db = QSqlDatabase::database( (*it) );
+        CHECK_DATABASE( db );
+        dropTestTables( db );
     }
 
     dbs.close();
@@ -230,9 +230,9 @@ void tst_Q3SqlCursor::cleanup()
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
     if ( QTest::currentTestFailed() ) {
-	//since Oracle ODBC totally craps out on error, we init again
-	db.close();
-	db.open();
+        //since Oracle ODBC totally craps out on error, we init again
+        db.close();
+        db.open();
     }
 }
 
@@ -244,10 +244,10 @@ void tst_Q3SqlCursor::copyConstructor()
 
     Q3SqlCursor cur2;
     {
-	Q3SqlCursor cur( qtest, true, db );
-	QVERIFY_SQL(cur, select( cur.index( QString("id") ) ));
-	cur2 = Q3SqlCursor( cur );
-	// let "cur" run out of scope...
+        Q3SqlCursor cur( qtest, true, db );
+        QVERIFY_SQL(cur, select( cur.index( QString("id") ) ));
+        cur2 = Q3SqlCursor( cur );
+        // let "cur" run out of scope...
     }
 
     QSqlRecord* rec = cur2.primeUpdate();
@@ -256,8 +256,8 @@ void tst_Q3SqlCursor::copyConstructor()
 
     int i = 0;
     while ( cur2.next() ) {
-	QVERIFY( cur2.value("id").toInt() == i );
-	i++;
+        QVERIFY( cur2.value("id").toInt() == i );
+        i++;
     }
 }
 
@@ -271,8 +271,8 @@ void tst_Q3SqlCursor::value()
     QVERIFY_SQL(cur, select( cur.index( QString("id") ) ));
     int i = 0;
     while ( cur.next() ) {
-	QCOMPARE(cur.value("id").toInt(), i);
-	i++;
+        QCOMPARE(cur.value("id").toInt(), i);
+        i++;
     }
 }
 
@@ -285,11 +285,11 @@ void tst_Q3SqlCursor::primaryIndex()
     Q3SqlCursor cur( qtest, true, db );
     QSqlIndex index = cur.primaryIndex();
     if ( tst_Databases::isMSAccess( db ) ) {
-	QCOMPARE( index.fieldName(1).upper(), QString( "ID" ) );
-	QCOMPARE( index.fieldName(0).upper(), QString( "T_VARCHAR" ) );
+        QCOMPARE( index.fieldName(1).upper(), QString( "ID" ) );
+        QCOMPARE( index.fieldName(0).upper(), QString( "T_VARCHAR" ) );
     } else {
-	QCOMPARE( index.fieldName(0).upper(), QString( "ID" ) );
-	QCOMPARE( index.fieldName(1).upper(), QString( "T_VARCHAR" ) );
+        QCOMPARE( index.fieldName(0).upper(), QString( "ID" ) );
+        QCOMPARE( index.fieldName(1).upper(), QString( "T_VARCHAR" ) );
     }
     QVERIFY(!index.isDescending(0));
     QVERIFY(!index.isDescending(1));
@@ -308,10 +308,10 @@ void tst_Q3SqlCursor::insert()
     // check that primeInsert returns a valid QSqlRecord
     QCOMPARE( (int)irec->count(), 4 );
     if ( ( irec->field( 0 ).type() != QVariant::Int ) &&
-	 ( irec->field( 0 ).type() != QVariant::String ) &&
+         ( irec->field( 0 ).type() != QVariant::String ) &&
          ( irec->field( 0 ).type() != QVariant::Double ) ) {
-	QFAIL( QString( "Wrong datatype %1 for field 'ID'"
-	    " (expected Int or String)" ).arg( QVariant::typeToName( irec->field( 0 ).type() ) ) );
+        QFAIL( QString( "Wrong datatype %1 for field 'ID'"
+            " (expected Int or String)" ).arg( QVariant::typeToName( irec->field( 0 ).type() ) ) );
     }
     QCOMPARE( QVariant::typeToName( irec->field( 1 ).type() ), QVariant::typeToName( QVariant::String ) );
     QCOMPARE( QVariant::typeToName( irec->field( 2 ).type() ), QVariant::typeToName( QVariant::String ) );
@@ -327,7 +327,9 @@ void tst_Q3SqlCursor::insert()
     irec->setValue( "t_char", "SomeChar" );
     irec->setValue( "t_numeric", 400.400 );
 
-    QCOMPARE( cur.insert(), 1 );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
+
+    QVERIFY( validReturns.contains(cur.insert()) );
 
     // restore old test-tables
     populateTestTables( db );
@@ -338,6 +340,7 @@ void tst_Q3SqlCursor::insertSpecial()
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
 
     Q3SqlCursor cur( qtest, true, db );
     QSqlRecord* irec = cur.primeInsert();
@@ -355,25 +358,25 @@ void tst_Q3SqlCursor::insertSpecial()
     // INSERT the strings
     QStringList::Iterator it;
     for ( it = strings.begin(); it != strings.end(); ++it ) {
-	QSqlRecord* irec = cur.primeInsert();
-	QVERIFY( irec != 0 );
-	irec->setValue( "id", i );
-	irec->setValue( "t_varchar", (*it) );
-	irec->setValue( "t_char", (*it) );
-	irec->setValue( "t_numeric", (double)i );
-	++i;
-	QCOMPARE( cur.insert(), 1 );
+        QSqlRecord* irec = cur.primeInsert();
+        QVERIFY( irec != 0 );
+        irec->setValue( "id", i );
+        irec->setValue( "t_varchar", (*it) );
+        irec->setValue( "t_char", (*it) );
+        irec->setValue( "t_numeric", (double)i );
+        ++i;
+        QVERIFY( validReturns.contains(cur.insert()) );
     }
 
     QVERIFY( cur.select( "id >= 800 and id < 900" ) );
 
     int i2 = 800;
     while( cur.next() ) {
-	QCOMPARE( cur.value( "id" ).toInt(), i2 );
-	QCOMPARE( cur.value( "t_varchar" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
-	QCOMPARE( cur.value( "t_char" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
-	QCOMPARE( cur.value( "t_numeric" ).toDouble(), (double)i2 );
-	++i2;
+        QCOMPARE( cur.value( "id" ).toInt(), i2 );
+        QCOMPARE( cur.value( "t_varchar" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
+        QCOMPARE( cur.value( "t_char" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
+        QCOMPARE( cur.value( "t_numeric" ).toDouble(), (double)i2 );
+        ++i2;
     }
     QCOMPARE( i, i2 );
 
@@ -385,6 +388,7 @@ void tst_Q3SqlCursor::batchInsert()
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
 
     QSqlQuery q( db );
     q.exec( "delete from " + qtest );
@@ -393,16 +397,16 @@ void tst_Q3SqlCursor::batchInsert()
 
     int i = 0;
     for ( ; i < 100; ++i ) {
-	QSqlRecord* irec = cur.primeInsert();
-	Q_ASSERT( irec );
-	irec->setValue( "id", i );
-	irec->setValue( "t_varchar", "blah" );
-	irec->setValue( "t_char", "blah" );
-	irec->setValue( "t_numeric", 1.1 );
-	if ( db.driverName().startsWith( "QSQLITE" ) ) {
-	    QVERIFY( cur.insert( true ) );
-	} else {
-	    QCOMPARE( cur.insert( true ), 1 );
+        QSqlRecord* irec = cur.primeInsert();
+        Q_ASSERT( irec );
+        irec->setValue( "id", i );
+        irec->setValue( "t_varchar", "blah" );
+        irec->setValue( "t_char", "blah" );
+        irec->setValue( "t_numeric", 1.1 );
+        if ( db.driverName().startsWith( "QSQLITE" ) ) {
+            QVERIFY( cur.insert( true ) );
+        } else {
+            QVERIFY( validReturns.contains(cur.insert( true )) );
         }
     }
 
@@ -413,18 +417,18 @@ void tst_Q3SqlCursor::batchInsert()
         irec->setValue( "t_varchar", "blah" );
         irec->setValue( "t_char", "blah" );
         irec->setValue( "t_numeric", 1.1 );
-	if ( db.driverName().startsWith( "QSQLITE" ) ) {
-	    QVERIFY( cur.insert( false ) );
-	} else {
-	    QCOMPARE( cur.insert( false ), 1 );
+        if ( db.driverName().startsWith( "QSQLITE" ) ) {
+            QVERIFY( cur.insert( false ) );
+        } else {
+            QVERIFY( validReturns.contains(cur.insert( false )) );
         }
     }
 
     i = 0;
     QVERIFY_SQL(q, exec( "select * from " + qtest + " order by id" ));
     while ( q.next() ) {
-	QCOMPARE( q.value( 0 ).toInt(), i );
-	i++;
+        QCOMPARE( q.value( 0 ).toInt(), i );
+        i++;
     }
 
     QCOMPARE( i, 200 );
@@ -436,7 +440,7 @@ static QString dumpUtf8( const QString& str )
 {
     QString res;
     for ( int i = 0; i < (int)str.length(); ++i ) {
-	res += "0x" + QString::number( str[ i ].unicode(), 16 ) + ' ';
+        res += "0x" + QString::number( str[ i ].unicode(), 16 ) + ' ';
     }
     return res;
 }
@@ -448,7 +452,7 @@ void tst_Q3SqlCursor::insertORA()
     CHECK_DATABASE( db );
 
     if (tst_Databases::getOraVersion(db) < 9)
-	QSKIP("Need Oracle >= 9", SkipSingle);
+        QSKIP("Need Oracle >= 9", SkipSingle);
 
     /****** CHARSET TEST ******/
 
@@ -466,8 +470,8 @@ void tst_Q3SqlCursor::insertORA()
     QVERIFY_SQL(cur, select());
     QVERIFY( cur.next() );
     if ( cur.value( "t_char" ).toString() != val1 )
-	qDebug( QString( "Wrong value for t_char: expected '%1', got '%2'" ).arg( val1 ).arg(
-		cur.value( "t_char" ).toString() ) );
+        qDebug( QString( "Wrong value for t_char: expected '%1', got '%2'" ).arg( val1 ).arg(
+                cur.value( "t_char" ).toString() ) );
 
     static const unsigned short utf8arr[] = { 0xd792,0xd79c,0xd792,0xd79c,0xd799,0x00 };
     static const QString utf8str = QString::fromUcs2( utf8arr );
@@ -524,7 +528,7 @@ void tst_Q3SqlCursor::unicode()
 
     static const QString utf8str = QString::fromUtf8( "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει." );
     if ( !db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
-	 QSKIP( "DBMS not Unicode capable", SkipSingle );
+         QSKIP( "DBMS not Unicode capable", SkipSingle );
     }
     // ascii in the data storage, can't transliterate properly. invalid test.
     if(db.driverName().startsWith("QIBASE") && (db.databaseName() == "silence.nokia.troll.no:c:\\ibase\\testdb_ascii" || db.databaseName() == "/opt/interbase/qttest.gdb"))
@@ -640,11 +644,11 @@ void tst_Q3SqlCursor::select()
     QSqlIndex idx = cur4.primaryIndex( false );
     QCOMPARE( (int)idx.count(), 2 );
     if ( tst_Databases::isMSAccess( db ) ) {
-	QCOMPARE( idx.field( 1 ).name().upper(), QString("ID") );
-	QCOMPARE( idx.field( 0 ).name().upper(), QString("T_VARCHAR") );
+        QCOMPARE( idx.field( 1 ).name().upper(), QString("ID") );
+        QCOMPARE( idx.field( 0 ).name().upper(), QString("T_VARCHAR") );
     } else {
-	QCOMPARE( idx.field( 0 ).name().upper(), QString("ID") );
-	QCOMPARE( idx.field( 1 ).name().upper(), QString("T_VARCHAR") );
+        QCOMPARE( idx.field( 0 ).name().upper(), QString("ID") );
+        QCOMPARE( idx.field( 1 ).name().upper(), QString("T_VARCHAR") );
     }
 
 #ifdef QT_DEBUG
@@ -688,17 +692,18 @@ void tst_Q3SqlCursor::updateNoPK()
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
-    
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
+
     QSqlQuery q(db);
     QVERIFY_SQL(q, exec("create table " + qTableName( "qtestPK", __FILE__ ) + " (id int, name varchar(20), num numeric)"));
-    
+
     Q3SqlCursor cur(qTableName("qtestPK", __FILE__), true, db);
     QSqlRecord* rec = cur.primeInsert();
     Q_ASSERT(rec);
     rec->setNull(0);
     rec->setNull(1);
     rec->setNull(2);
-    QVERIFY_SQL(cur, insert() == 1);
+    QVERIFY(validReturns.contains(cur.insert()));
     if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries)) {
 
         // Only QPSQL, QMYSQL, QODBC and QOCI drivers currently use escape identifiers for column names
@@ -713,8 +718,8 @@ void tst_Q3SqlCursor::updateNoPK()
                                                 + " values (NULL,NULL,NULL)");
             QCOMPARE(cur.lastQuery(), query);
         } else {
-	    QCOMPARE(cur.lastQuery(), QString::fromLatin1("insert into " + qTableName("qtestPK", __FILE__) +
-						         " (\"id\",\"name\",\"num\") values (NULL,NULL,NULL)"));
+            QCOMPARE(cur.lastQuery(), QString::fromLatin1("insert into " + qTableName("qtestPK", __FILE__) +
+                                                         " (\"id\",\"name\",\"num\") values (NULL,NULL,NULL)"));
         }
     }
 
@@ -733,7 +738,7 @@ void tst_Q3SqlCursor::updateNoPK()
             qTableName("qtestPK", __FILE__) + ".num IS NULL";
     if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries)) {
         if (!db.driverName().startsWith("QSQLITE")) {
-	    QCOMPARE(cur.lastQuery(), expect);
+            QCOMPARE(cur.lastQuery(), expect);
         }
     }
     QVERIFY(cur.select(cur.index(QString("id"))));
@@ -750,6 +755,7 @@ void tst_Q3SqlCursor::insertFieldNameContainsWS() {
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
 
     // The bugfix (and this test) depends on QSqlDriver::escapeIdentifier(...) 
     // to be implemented, which is currently only the case for the 
@@ -778,7 +784,7 @@ void tst_Q3SqlCursor::insertFieldNameContainsWS() {
     r->setValue("firsT NaMe", "Kong");
     r->setValue("lastNaMe", "Harald");
 
-    QVERIFY(cur.insert() == 1);
+    QVERIFY(validReturns.contains(cur.insert()));
 
     cur.select();
     cur.next();
diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp
index b9ab73f..db3a929 100644
--- a/tests/auto/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp
@@ -1137,17 +1137,14 @@ void tst_QSqlQuery::last()
 
     QVERIFY( q.last() );
 
-    if ( !tst_Databases::isMSAccess( db ) )
-        // Access doesn't return the correct position
-        QCOMPARE( q.at(), ( i-1 ) );
+    QSet<int> validReturns(QSet<int>() << -1 << i-1);
+    QVERIFY( validReturns.contains(q.at()) );
 
     QSqlQuery q2( "select * from " + qtest, db );
 
     QVERIFY( q2.last() );
 
-    if ( !tst_Databases::isMSAccess( db ) )
-        // Access doesn't return the correct position
-        QCOMPARE( q.at(), ( i-1 ) );
+    QVERIFY( validReturns.contains(q.at()) );
 }
 
 void tst_QSqlQuery::seek()
-- 
cgit v0.12


From e38aef4eee8c6a32bd30632576aee17a3d333c2e Mon Sep 17 00:00:00 2001
From: Volker Hilsheimer <volker.hilsheimer@nokia.com>
Date: Thu, 11 Mar 2010 13:27:17 +0100
Subject: Doc: Fix links in the ActiveQt framework, and also link to the tools.

---
 doc/src/frameworks-technologies/activeqt.qdoc | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/doc/src/frameworks-technologies/activeqt.qdoc b/doc/src/frameworks-technologies/activeqt.qdoc
index 67b9bb3..5e8473f 100644
--- a/doc/src/frameworks-technologies/activeqt.qdoc
+++ b/doc/src/frameworks-technologies/activeqt.qdoc
@@ -57,6 +57,7 @@
     \brief An overview of Qt's ActiveX and COM integration on Windows.
 
     \ingroup platform-specific
+    \ingroup frameworks-technologies
     \keyword ActiveQt
 
     Qt's ActiveX and COM support allows Qt for Windows developers to:
@@ -69,19 +70,23 @@
     controls.
     \endlist
 
-    The ActiveQt framework consists of two modules:
+    The ActiveQt framework consists of two frameworks:
 
     \list
-    \o The \l QAxContainer module is a static
-       library implementing QObject and QWidget subclasses, QAxObject and
-       QAxWidget, that act as containers for COM objects and ActiveX
-       controls.
-    \o The \l QAxServer module is a static library that implements
+    \o The \l{Using ActiveX controls and COM objects in Qt}{QAxContainer}
+       module is a static library implementing QObject and QWidget subclasses,
+       QAxObject and QAxWidget, that act as containers for COM objects and
+       ActiveX controls.
+    \o The \l{Building ActiveX servers and controls with Qt}{QAxServer}
+       module is a static library that implements
        functionality for in-process and executable COM servers. This
        module provides the QAxAggregated, QAxBindable and QAxFactory
        classes.
     \endlist
 
+    A set of \l{Tools for ActiveQt}{tools} is provided to simplify the
+    developing and building of Qt projects that use ActiveX.
+
     To build the static libraries, change into the \c activeqt directory 
     (usually \c QTDIR/src/activeqt), and run \c qmake and your make
     tool in both the \c container and the \c control subdirectory.
-- 
cgit v0.12


From 80cf88a395d61c2dee83d484c91f24437be0c0e0 Mon Sep 17 00:00:00 2001
From: Sami Merila <sami.merila@nokia.com>
Date: Thu, 25 Mar 2010 12:50:48 +0200
Subject: QMessageBox is smaller than native MessageBox

Messageboxes are smaller than native ones.

This is due to that native ones have a lot of empty space.

To fix this, we define a new custom pixel metrics that is the minimum
height of one text line messagebox (aka AknPopUp) on the native side.
Then we ensure that the QMessageBox is at least of this height.

Additionally we do some minor styling for QMessageBox:
- the corners graphics are now as rounded as on native side
- the font is set to match the native side
- the top margin space is doubled for dialogs, which is rather good
approximation of native side

Task-number: QTBUG-4875
Reviewed-by: Janne Anttila
---
 src/gui/dialogs/qmessagebox.cpp        | 14 ++++++++++++++
 src/gui/styles/qs60style.cpp           | 35 +++++++++++++++++++++-------------
 src/gui/styles/qs60style.h             |  3 ++-
 src/gui/styles/qs60style_p.h           |  6 +++---
 src/gui/styles/qs60style_s60.cpp       | 16 ++++++++++------
 util/s60pixelmetrics/pixel_metrics.cpp | 11 +++++++++--
 util/s60pixelmetrics/pixel_metrics.h   |  4 +++-
 util/s60pixelmetrics/pm_mapperapp.cpp  |  9 ++++++---
 8 files changed, 69 insertions(+), 29 deletions(-)

diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp
index bd2df9c..ccc925c 100644
--- a/src/gui/dialogs/qmessagebox.cpp
+++ b/src/gui/dialogs/qmessagebox.cpp
@@ -65,6 +65,10 @@
 #include <QtGui/qfontmetrics.h>
 #include <QtGui/qclipboard.h>
 
+#ifndef QT_NO_STYLE_S60
+#include <qs60style.h>
+#endif
+
 #ifdef Q_WS_WINCE
 extern bool qt_wince_is_mobile();    //defined in qguifunctions_wince.cpp
 extern bool qt_wince_is_smartphone();//defined in qguifunctions_wince.cpp
@@ -353,6 +357,16 @@ void QMessageBoxPrivate::updateSize()
     int height = (layout->hasHeightForWidth())
                      ? layout->totalHeightForWidth(width)
                      : layout->totalMinimumSize().height();
+
+#ifndef QT_NO_STYLE_S60
+        QS60Style *s60Style = 0;
+        s60Style = qobject_cast<QS60Style *>(QApplication::style());
+
+        //use custom pixel metric to deduce the minimum height of the messagebox
+        if (s60Style)
+            height = qMax(height, s60Style->pixelMetric((QStyle::PixelMetric)PM_MessageBoxHeight));
+#endif
+
     q->setFixedSize(width, height);
     QCoreApplication::removePostedEvents(q, QEvent::LayoutRequest);
 }
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index af37e6e..2c665fb 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -50,6 +50,7 @@
 #include "qcalendarwidget.h"
 #include "qdial.h"
 #include "qdialog.h"
+#include "qmessagebox.h"
 #include "qgroupbox.h"
 #include "qheaderview.h"
 #include "qlist.h"
@@ -91,10 +92,10 @@ static const qreal goldenRatio = 1.618;
 
 const layoutHeader QS60StylePrivate::m_layoutHeaders[] = {
 // *** generated layout data ***
-{240,320,1,16,"QVGA Landscape"},
-{320,240,1,16,"QVGA Portrait"},
-{360,640,1,16,"NHD Landscape"},
-{640,360,1,16,"NHD Portrait"},
+{240,320,1,17,"QVGA Landscape"},
+{320,240,1,17,"QVGA Portrait"},
+{360,640,1,17,"NHD Landscape"},
+{640,360,1,17,"NHD Portrait"},
 {352,800,1,12,"E90 Landscape"}
 // *** End of generated data ***
 };
@@ -103,11 +104,11 @@ const int QS60StylePrivate::m_numberOfLayouts =
 
 const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = {
 // *** generated pixel metrics ***
-{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,0,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1},
-{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,0,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1},
-{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,0,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1},
-{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,0,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1},
-{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,0,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1}
+{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,0,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1, 106},
+{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,0,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1, 106},
+{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,0,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135},
+{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,0,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135},
+{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,0,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1, 106}
 // *** End of generated data ***
 };
 
@@ -126,7 +127,7 @@ const struct QS60StylePrivate::frameElementCenter QS60StylePrivate::m_frameEleme
     {SE_ButtonPressed,          QS60StyleEnums::SP_QsnFrButtonTbCenterPressed},
     {SE_FrameLineEdit,          QS60StyleEnums::SP_QsnFrInputCenter},
     {SE_ListHighlight,          QS60StyleEnums::SP_QsnFrListCenter},
-    {SE_OptionsMenu,            QS60StyleEnums::SP_QsnFrPopupCenter},
+    {SE_PopupBackground,        QS60StyleEnums::SP_QsnFrPopupCenter},
     {SE_SettingsList,           QS60StyleEnums::SP_QsnFrSetOptCenter},
     {SE_TableItem,              QS60StyleEnums::SP_QsnFrCaleCenter},
     {SE_TableHeaderItem,        QS60StyleEnums::SP_QsnFrCaleHeadingCenter},
@@ -249,8 +250,8 @@ void QS60StylePrivate::drawSkinElement(SkinElements element, QPainter *painter,
     case SE_ListHighlight:
         drawFrame(SF_ListHighlight, painter, rect, flags | SF_PointNorth);
         break;
-    case SE_OptionsMenu:
-        drawFrame(SF_OptionsMenu, painter, rect, flags | SF_PointNorth);
+    case SE_PopupBackground:
+        drawFrame(SF_PopupBackground, painter, rect, flags | SF_PointNorth);
         break;
     case SE_SettingsList:
         drawFrame(SF_SettingsList, painter, rect, flags | SF_PointNorth);
@@ -636,6 +637,8 @@ void QS60StylePrivate::setFont(QWidget *widget) const
         fontCategory = QS60StyleEnums::FC_Secondary;
     } else if (qobject_cast<QGroupBox *>(widget)){
         fontCategory = QS60StyleEnums::FC_Title;
+    } else if (qobject_cast<QMessageBox *>(widget)){
+        fontCategory = QS60StyleEnums::FC_Primary;
     }
     if (fontCategory != QS60StyleEnums::FC_Undefined) {
         const bool resolveFontSize = widget->testAttribute(Qt::WA_SetFont)
@@ -2215,7 +2218,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
             if (QS60StylePrivate::canDrawThemeBackground(option->palette.base(), widget) &&
                 option->palette.window().texture().cacheKey() ==
                     QS60StylePrivate::m_themePalette->window().texture().cacheKey())
-                QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_OptionsMenu, painter, option->rect, flags);
+                QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_PopupBackground, painter, option->rect, flags);
             else
                 commonStyleDraws = true;
         }
@@ -2400,6 +2403,12 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const
         else if (metric == PM_LayoutRightMargin)
             metricValue = QS60StylePrivate::pixelMetric(PM_LayoutLeftMargin);
     }
+
+    if (widget && (metric == PM_LayoutTopMargin))
+        if (widget->windowType() == Qt::Dialog)
+            //double the top layout margin for dialogs, it is very close to real value
+            //without having to define custom pixel metric
+            metricValue *= 2;
     return metricValue;
 }
 
diff --git a/src/gui/styles/qs60style.h b/src/gui/styles/qs60style.h
index af17843..c878538 100644
--- a/src/gui/styles/qs60style.h
+++ b/src/gui/styles/qs60style.h
@@ -58,7 +58,8 @@ enum {
     PM_FrameCornerWidth = QStyle::PM_CustomBase + 1,
     PM_FrameCornerHeight,
     PM_BoldLineWidth,
-    PM_ThinLineWidth
+    PM_ThinLineWidth,
+    PM_MessageBoxHeight
     };
 
 class QS60StylePrivate;
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index 8bb2f7b..6ce4960 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -60,7 +60,7 @@
 QT_BEGIN_NAMESPACE
 
 const int MAX_NON_CUSTOM_PIXELMETRICS = 92;
-const int CUSTOMVALUESCOUNT = 4;
+const int CUSTOMVALUESCOUNT = 5;
 
 const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT;
 
@@ -411,7 +411,7 @@ public:
         SE_TabBarTabWestActive,
         SE_TabBarTabWestInactive,
         SE_ListHighlight,
-        SE_OptionsMenu,
+        SE_PopupBackground,
         SE_SettingsList,
         SE_TableItem,
         SE_TableHeaderItem,
@@ -432,7 +432,7 @@ public:
         SF_ButtonPressed,
         SF_FrameLineEdit,
         SF_ListHighlight,
-        SF_OptionsMenu,
+        SF_PopupBackground,
         SF_SettingsList,
         SF_TableItem,
         SF_TableHeaderItem,
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 75ed0c7..1138d20 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -983,16 +983,20 @@ TRect QS60StyleModeSpecifics::innerRectFromElement(QS60StylePrivate::SkinFrameEl
     switch(frameElement) {
         case QS60StylePrivate::SF_PanelBackground:
             // panel should have slightly slimmer border to enable thin line of background graphics between closest component
-            widthShrink = widthShrink-2;
-            heightShrink = heightShrink-2;
+            widthShrink = widthShrink - 2;
+            heightShrink = heightShrink - 2;
             break;
         case QS60StylePrivate::SF_ToolTip:
-            widthShrink = widthShrink>>1;
-            heightShrink = heightShrink>>1;
+            widthShrink = widthShrink >> 1;
+            heightShrink = heightShrink >> 1;
             break;
         case QS60StylePrivate::SF_ListHighlight:
-            widthShrink = widthShrink-2;
-            heightShrink = heightShrink-2;
+            widthShrink = widthShrink - 2;
+            heightShrink = heightShrink - 2;
+            break;
+        case QS60StylePrivate::SF_PopupBackground:
+            widthShrink = widthShrink + 5;
+            heightShrink = heightShrink + 5;
             break;
         default:
             break;
diff --git a/util/s60pixelmetrics/pixel_metrics.cpp b/util/s60pixelmetrics/pixel_metrics.cpp
index beb785e..814e185 100644
--- a/util/s60pixelmetrics/pixel_metrics.cpp
+++ b/util/s60pixelmetrics/pixel_metrics.cpp
@@ -50,7 +50,7 @@
 // so that we can keep dynamic and static values inline.
 // Please adjust version data if correcting dynamic PM calculations.
 const TInt KPMMajorVersion = 1;
-const TInt KPMMinorVersion = 16;
+const TInt KPMMinorVersion = 17;
 
 TPixelMetricsVersion PixelMetrics::Version()
     {
@@ -869,7 +869,7 @@ TInt PixelMetrics::PixelMetricValue(QStyle::PixelMetric metric)
             // The difference of center piece from border tell the frame width.
             if ( value == QStyle::PM_FocusFrameHMargin)
                 {
-				//use topleft for horizontal as S60 uses different values for right and left borders
+                 //use topleft for horizontal as S60 uses different values for right and left borders
                  value = listSinglePaneText.TextRect().iTl.iX - highlightRect.Rect().iTl.iX;
                 }
             else
@@ -1003,6 +1003,13 @@ TInt PixelMetrics::PixelMetricValue(QStyle::PixelMetric metric)
         case QStyle::PM_Custom_ThinLineWidth:
             value = 1;
             break;
+        case QStyle::PM_Custom_MessageBoxHeight:
+            {
+            TAknLayoutRect popupRect;
+            popupRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::popup_window_general(0));
+            value = popupRect.Rect().Height();
+            }
+            break;
         case QStyle::PM_ButtonShiftHorizontal:
         case QStyle::PM_ButtonShiftVertical:
             value = 0;
diff --git a/util/s60pixelmetrics/pixel_metrics.h b/util/s60pixelmetrics/pixel_metrics.h
index 3536c0e..4b0f57e 100644
--- a/util/s60pixelmetrics/pixel_metrics.h
+++ b/util/s60pixelmetrics/pixel_metrics.h
@@ -185,7 +185,9 @@ NONSHARABLE_CLASS( QStyle )
             // Bold line width
             PM_Custom_BoldLineWidth,
             // Thin line width
-            PM_Custom_ThinLineWidth
+            PM_Custom_ThinLineWidth,
+            // Height of a popup info messagebox
+            PM_Custom_MessageBoxHeight
         };
 
     };
diff --git a/util/s60pixelmetrics/pm_mapperapp.cpp b/util/s60pixelmetrics/pm_mapperapp.cpp
index acc6137..a88499d 100644
--- a/util/s60pixelmetrics/pm_mapperapp.cpp
+++ b/util/s60pixelmetrics/pm_mapperapp.cpp
@@ -155,7 +155,7 @@ void CPixelMetricsMapperAppUi::HandleCommandL( TInt aCommand )
             Exit();
             break;
         case ECmdSwitchOutput:
-		    {
+            {
             HBufC* buffer = HBufC::NewLC( 100 );
             TPtr bufferPtr = buffer->Des();
             TBool last = ETrue;
@@ -166,7 +166,7 @@ void CPixelMetricsMapperAppUi::HandleCommandL( TInt aCommand )
             else
                 bufferPtr.Append(_L("screen."));
             ShowL( *buffer, last );
-			}
+            }
             break;
         case ECmdStatus:
             {
@@ -323,7 +323,7 @@ void CPixelMetricsMapperAppUi::HandleCommandL( TInt aCommand )
             TInt myValue = KErrNotFound;
             for (;;)
                 {
-                if (index==QStyle::PM_Custom_ThinLineWidth)
+                if (index==QStyle::PM_Custom_MessageBoxHeight)
                     {
                     last = ETrue;
                     }
@@ -656,6 +656,9 @@ void CPixelMetricsMapperAppUi::ShowSingleValueL(TInt& aPixelMetric, TInt& aValue
         case QStyle::PM_Custom_BoldLineWidth:
             bufferPtr.Append(_L("C_BoldLineWidth: "));
             break;
+        case QStyle::PM_Custom_MessageBoxHeight:
+            bufferPtr.Append(_L("C_MsgBoxHeight: "));
+            break;
         default:
             bufferPtr.Append(_L("Default: "));
             break;
-- 
cgit v0.12


From d7fe2d90fe5a1ac5a29a5bc65eb5657d4d539563 Mon Sep 17 00:00:00 2001
From: mread <qt-info@nokia.com>
Date: Thu, 25 Mar 2010 10:58:57 +0000
Subject: Symbian event loop priority drop not used in Symbian^4

The priority drop hack used in the Symbian version of Qt's event
dispatcher is not needed from Symbian^4, as the viewsrv panics, which
it was designed to prevent, are disabled. This change disables the
priority drop code when Qt is compiled in a Symbian^4 environment,
using the SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS define as a key.

This will improve system and performance predictability, as app
priorities will be more stable. It also gives a slight performance
boost to app startup in the order of 10ms.

Reviewed-by: Jason Barron
---
 src/corelib/kernel/qeventdispatcher_symbian.cpp | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index 191be6c..ca44264 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -50,6 +50,13 @@
 
 QT_BEGIN_NAMESPACE
 
+#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
+// when the system UI is Qt based, priority drop is not needed as CPU starved processes will not be killed.
+#undef QT_SYMBIAN_PRIORITY_DROP
+#else
+#define QT_SYMBIAN_PRIORITY_DROP
+#endif
+
 #define WAKE_UP_PRIORITY CActive::EPriorityStandard
 #define TIMER_PRIORITY CActive::EPriorityHigh
 #define NULLTIMER_PRIORITY CActive::EPriorityLow
@@ -697,6 +704,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
         bool handledSymbianEvent = false;
         m_interrupt = false;
 
+#ifdef QT_SYMBIAN_PRIORITY_DROP
         /*
          * This QTime variable is used to measure the time it takes to finish
          * the event loop. If we take too long in the loop, other processes
@@ -714,6 +722,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
         } timeState = FirstRun;
 
         TProcessPriority priority;
+#endif
 
         while (1) {
             if (block) {
@@ -727,10 +736,12 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
                 CActiveScheduler::Current()->WaitForAnyRequest();
             }
 
+#ifdef QT_SYMBIAN_PRIORITY_DROP
             if (timeState == SubsequentRun) {
                 time.start();
                 timeState = TimeStarted;
             }
+#endif
 
             TInt error;
             handledSymbianEvent = CActiveScheduler::RunIfReady(error, KMinTInt);
@@ -747,6 +758,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
                 break;
             }
             block = false;
+#ifdef QT_SYMBIAN_PRIORITY_DROP
             if (timeState == TimeStarted && time.elapsed() > 100) {
                 priority = m_processHandle.Priority();
                 m_processHandle.SetPriority(EPriorityBackground);
@@ -759,6 +771,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
             }
             if (timeState == FirstRun)
                 timeState = SubsequentRun;
+#endif
         };
 
         emit awake();
-- 
cgit v0.12


From 32c6e01bf00bc45363685eb10c51e8b68b4fde89 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Thu, 25 Mar 2010 14:01:34 +0200
Subject: Fix for submenu placement for QMenus in Symbian.

Task-number: QTBUG-5992
Reviewed-By: Sami Merila
---
 src/gui/styles/qs60style.cpp | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 2c665fb..65191a4 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -2389,13 +2389,6 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const
     if (metricValue == KNotFound)
         metricValue = QCommonStyle::pixelMetric(metric, option, widget);
 
-    if (metric == PM_SubMenuOverlap && widget) {
-        const QMenu *menu = qobject_cast<const QMenu *>(widget);
-        if (menu && menu->activeAction() && menu->activeAction()->menu()) {
-            const int menuWidth = menu->activeAction()->menu()->sizeHint().width();
-            metricValue = -menuWidth;
-        }
-    }
     //if layout direction is mirrored, switch left and right border margins
     if (option && option->direction == Qt::RightToLeft) {
         if (metric == PM_LayoutLeftMargin)
-- 
cgit v0.12


From 96ac1964b827ef01ef2edb6411ecb7540ed76ce2 Mon Sep 17 00:00:00 2001
From: Yoann Lopes <yoann.lopes@nokia.com>
Date: Thu, 25 Mar 2010 14:27:56 +0100
Subject: Prevents a useless repaint with QGraphicsItem cache mode.

No repaint is triggered anymore when setting the cache mode to
DeviceCoordinateMode when already using that mode.
Also added an autotest for checking repaints when setting cache modes.

Task-number: QTBUG-9391
Reviewed-by: ahanssen
---
 src/gui/graphicsview/qgraphicsitem.cpp         |  3 +-
 tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 73 ++++++++++++++++++++++++++
 2 files changed, 75 insertions(+), 1 deletion(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index f110a5c..1b707b0 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1883,7 +1883,8 @@ void QGraphicsItem::setCacheMode(CacheMode mode, const QSize &logicalCacheSize)
     d_ptr->cacheMode = mode;
     bool noVisualChange = (mode == NoCache && lastMode == NoCache)
                           || (mode == NoCache && lastMode == DeviceCoordinateCache)
-                          || (mode == DeviceCoordinateCache && lastMode == NoCache);
+                          || (mode == DeviceCoordinateCache && lastMode == NoCache)
+                          || (mode == DeviceCoordinateCache && lastMode == DeviceCoordinateCache);
     if (mode == NoCache) {
         d_ptr->removeExtraItemCache();
     } else {
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 75fb337..2b507cb 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -384,6 +384,7 @@ private slots:
     void tabChangesFocus();
     void tabChangesFocus_data();
     void cacheMode();
+    void cacheMode2();
     void updateCachedItemAfterMove();
     void deviceTransform_data();
     void deviceTransform();
@@ -6926,6 +6927,78 @@ void tst_QGraphicsItem::cacheMode()
     QCOMPARE(testerChild2->repaints, 6);
 }
 
+void tst_QGraphicsItem::cacheMode2()
+{
+    QGraphicsScene scene(0, 0, 100, 100);
+    QGraphicsView view(&scene);
+    view.resize(150, 150);
+    view.show();
+    QApplication::setActiveWindow(&view);
+    QTest::qWaitForWindowShown(&view);
+
+    // Increase the probability of window activation
+    // not causing another repaint of test items.
+    QTest::qWait(50);
+
+    EventTester *tester = new EventTester;
+    scene.addItem(tester);
+    QTest::qWait(10);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from NoCache to NoCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::NoCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from NoCache to DeviceCoordinateCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from DeviceCoordinateCache to DeviceCoordinateCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from DeviceCoordinateCache to NoCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::NoCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from NoCache to ItemCoordinateCache (repaint)
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 2);
+
+    // Switching from ItemCoordinateCache to ItemCoordinateCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 2);
+
+    // Switching from ItemCoordinateCache to ItemCoordinateCache with different size (repaint)
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache, QSize(100, 100));
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 3);
+
+    // Switching from ItemCoordinateCache to NoCache (repaint)
+    tester->setCacheMode(QGraphicsItem::NoCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 4);
+
+    // Switching from DeviceCoordinateCache to ItemCoordinateCache (repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 4);
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 5);
+
+    // Switching from ItemCoordinateCache to DeviceCoordinateCache (repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 6);
+}
+
 void tst_QGraphicsItem::updateCachedItemAfterMove()
 {
     // A simple item that uses ItemCoordinateCache
-- 
cgit v0.12


From 9a11225c71748ccd6ff7e5a3c1f8d8670e699ca8 Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Thu, 25 Mar 2010 14:32:10 +0100
Subject: Correct documentation for ObjectReplacementCharacter and
 ReplacementCh.

Reviewed-by: Marius Storm-Olsen
---
 src/corelib/tools/qchar.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp
index 08cb863..3635e7b 100644
--- a/src/corelib/tools/qchar.cpp
+++ b/src/corelib/tools/qchar.cpp
@@ -381,8 +381,12 @@ QT_BEGIN_NAMESPACE
 
     \value Null A QChar with this value isNull().
     \value Nbsp Non-breaking space.
-    \value ReplacementCharacter
-    \value ObjectReplacementCharacter The character shown when a font has no glyph for a certain codepoint. The square character is normally used.
+    \value ReplacementCharacter The character shown when a font has no glyph
+           for a certain codepoint. A special question mark character is often
+           used. Codecs use this codepoint when input data cannot be
+           represented in Unicode.
+    \value ObjectReplacementCharacter Used to represent an object such as an
+           image when such objects cannot be presented.
     \value ByteOrderMark
     \value ByteOrderSwapped
     \value ParagraphSeparator
-- 
cgit v0.12


From 656c02f128c56177c48b3de47f7b1e17dbbfa4d3 Mon Sep 17 00:00:00 2001
From: Markus Goetz <Markus.Goetz@nokia.com>
Date: Thu, 25 Mar 2010 14:52:53 +0100
Subject: QNAM HTTP: Fix crazy crash when exiting application

This fixes a crash in tst_qnetworkreply and in some QtWebKit
based browsers.
It was related to adding a QPointer on an already
deleted QHttpNetworkConnection object. By converting
an existing normal pointer to a QPointer we set
it a 0-pointer and are safe.
https://bugs.webkit.org/show_bug.cgi?id=36290

Reviewed-by: joao
Reviewed-by: gabi
---
 src/network/access/qhttpnetworkconnectionchannel.cpp | 2 +-
 src/network/access/qhttpnetworkconnectionchannel_p.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 82bc14f..0804498 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -939,7 +939,7 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
         errorCode = QNetworkReply::UnknownNetworkError;
         break;
     }
-    QPointer<QObject> that = connection;
+    QPointer<QHttpNetworkConnection> that = connection;
     QString errorString = connection->d_func()->errorDetail(errorCode, socket, socket->errorString());
     if (send2Reply) {
         if (reply) {
diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index 5032d2b..6ec47c1 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -138,7 +138,7 @@ public:
     {}
 
     void setConnection(QHttpNetworkConnection *c) {connection = c;}
-    QHttpNetworkConnection *connection;
+    QPointer<QHttpNetworkConnection> connection;
 
     void init();
     void close();
-- 
cgit v0.12


From cc22a14f3d2159a8f760b44e3fe1636a3721ce95 Mon Sep 17 00:00:00 2001
From: Markus Goetz <Markus.Goetz@nokia.com>
Date: Thu, 25 Mar 2010 16:18:52 +0100
Subject: tst_qnetworkreply: Fix side effect, add another test

Fix a test that had a side effect.
But actually do the side effect in the last test: Have a
QNetworkReply that is parented to the application so it gets
destructed after the QNetworkAccessManager.

Reviewed-by: gabi
---
 tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index 261e613..71ee2d0 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -275,6 +275,9 @@ private Q_SLOTS:
     void ignoreSslErrorsListWithSlot_data();
     void ignoreSslErrorsListWithSlot();
 #endif
+
+    // NOTE: This test must be last!
+    void parentingRepliesToTheApp();
 };
 
 QT_BEGIN_NAMESPACE
@@ -3831,7 +3834,7 @@ void tst_QNetworkReply::httpConnectionCount()
     for (int i = 0; i < 10; i++) {
         QNetworkRequest request (QUrl("http://127.0.0.1:" + QString::number(server.serverPort()) + "/" +  QString::number(i)));
         QNetworkReply* reply = manager.get(request);
-        reply->setParent(this);
+        reply->setParent(&server);
     }
 
     int pendingConnectionCount = 0;
@@ -4105,5 +4108,13 @@ void tst_QNetworkReply::ignoreSslErrorsListWithSlot()
 
 #endif // QT_NO_OPENSSL
 
+// NOTE: This test must be last testcase in tst_qnetworkreply!
+void tst_QNetworkReply::parentingRepliesToTheApp()
+{
+    QNetworkRequest request (QUrl("http://" + QtNetworkSettings::serverName()));
+    manager.get(request)->setParent(this); // parent to this object
+    manager.get(request)->setParent(qApp); // parent to the app
+}
+
 QTEST_MAIN(tst_QNetworkReply)
 #include "tst_qnetworkreply.moc"
-- 
cgit v0.12


From 43e1cffb16c2eea54392f5c56210b10abb2f044e Mon Sep 17 00:00:00 2001
From: Markus Goetz <Markus.Goetz@nokia.com>
Date: Thu, 25 Mar 2010 17:01:45 +0100
Subject: QNAM HTTP: Symbian compile fix

---
 src/network/access/qhttpnetworkconnectionchannel_p.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index 6ec47c1..4a2f8ad 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -65,6 +65,7 @@
 #include <private/qhttpnetworkrequest_p.h>
 #include <private/qhttpnetworkreply_p.h>
 
+#include "qhttpnetworkconnection_p.h"
 
 #ifndef QT_NO_HTTP
 
-- 
cgit v0.12


From 7c36400a998b6d4cff34d7cb783f8e228a3e3621 Mon Sep 17 00:00:00 2001
From: Rhys Weatherley <rhys.weatherley@nokia.com>
Date: Fri, 26 Mar 2010 08:14:45 +1000
Subject: Fix OpenVG build on non-Symbian platforms.

Reviewed-by: trustme
---
 src/openvg/qpixmapdata_vg.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp
index d602790..7efec2b 100644
--- a/src/openvg/qpixmapdata_vg.cpp
+++ b/src/openvg/qpixmapdata_vg.cpp
@@ -45,8 +45,10 @@
 #include "qvg_p.h"
 #include "qvgimagepool_p.h"
 
+#if defined(Q_OS_SYMBIAN)
 #include <private/qt_s60_p.h>
 #include <fbs.h>
+#endif
 #ifdef QT_SYMBIAN_SUPPORTS_SGIMAGE
 #include <sgresource/sgimage.h>
 typedef EGLImageKHR (*pfnEglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, EGLint*);
-- 
cgit v0.12


From 1e8eb507a7624a1847f3da067f45d1637d47150a Mon Sep 17 00:00:00 2001
From: Rhys Weatherley <rhys.weatherley@nokia.com>
Date: Fri, 26 Mar 2010 08:27:02 +1000
Subject: Fix another off-by-1 error in OpenVG image painting.

Off in the vertical direction this time; previously was horizontal.

Task-number: QT-2999
Reviewed-by: Jason Barron
---
 src/openvg/qpaintengine_vg.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 4a97a6f..ce6e21b 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -538,7 +538,7 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev)
     // adds 0.5 to each co-ordinate.
     QTransform viewport2(1.0f, 0.0f, 0.0f,
                          0.0f, -1.0f, 0.0f,
-                         0.0f, devh, 1.0f);
+                         0.0f, devh + 1, 1.0f);
     imageTransform = transform * viewport2;
 
     // Calculate the scaling factor to use for turning cosmetic pens
-- 
cgit v0.12


From c3a7d812d3cf30d23049cfd355c6290a7985f81d Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Thu, 25 Mar 2010 12:12:01 +0200
Subject: Enable armcc version specific compler options for Symbian

VERSION_FLAGS.ARMCC variable is used in symbian.conf to define
supported armcc compiler version flags. Values given to this
variable must be directly usable as ifdef flags in mmp.

QMAKE_CXXFLAGS.<version flag> variables can now be used to add
compiler options to specific compiler versions.

Note that options added via QMAKE_CXXFLAGS.ARMCC flag
will apply to all versions of armcc compiler.

Task-number: QTBUG-8685
Reviewed-by: Iain
---
 mkspecs/common/symbian/symbian.conf  |  5 ++++-
 qmake/generators/symbian/symmake.cpp | 10 ++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index c39b39d..d66d227 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -26,10 +26,13 @@ QMAKE_CFLAGS_RELEASE	=
 QMAKE_CFLAGS_DEBUG	=
 QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
 
+
+VERSION_FLAGS.ARMCC = ARMCC_4_0
 QMAKE_CXX		= g++
 QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS
 QMAKE_CXXFLAGS.CW	= 
-QMAKE_CXXFLAGS.ARMCC	= --visibility_inlines_hidden
+QMAKE_CXXFLAGS.ARMCC      = --visibility_inlines_hidden
+QMAKE_CXXFLAGS.ARMCC_4_0  = --import_all_vtbl
 QMAKE_CXXFLAGS.GCCE	= -fvisibility-inlines-hidden
 QMAKE_CXXFLAGS_DEPS	= $$QMAKE_CFLAGS_DEPS
 QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 1470a12..e1256d8 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -1246,6 +1246,16 @@ void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
         t << MMP_OPTION_CW " " << cw <<  endl;
     if (!armcc.isEmpty())
         t << MMP_OPTION_ARMCC " " << armcc <<  endl;
+
+    foreach(QString armccVersion, project->values("VERSION_FLAGS.ARMCC")) {
+        QStringList currentValues = project->values("QMAKE_CXXFLAGS." + armccVersion);
+        if (currentValues.size()) {
+            t << "#if defined(" << armccVersion << ")" << endl;
+            t << MMP_OPTION_ARMCC " " << currentValues.join(" ") <<  endl;
+            t << "#endif" << endl;
+        }
+    }
+
     if (!gcce.isEmpty())
         t << MMP_OPTION_GCCE " " << gcce <<  endl;
 
-- 
cgit v0.12


From aaf0f47930a44f5f36bb825e10a5067eeced6718 Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Fri, 26 Mar 2010 10:41:35 +0200
Subject: Changed pkg_prerules to not use default_deployment for vendor ID

Demos and examples used default_deployment to define vendor ID
pkg rule, which is not what default_deployment should be used for.
As these are supposed to serve as examples for developers, changed
these declarations to use another deployment item.

Reviewed-by: TrustMe
---
 demos/symbianpkgrules.pri    | 3 ++-
 examples/symbianpkgrules.pri | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/demos/symbianpkgrules.pri b/demos/symbianpkgrules.pri
index c511836..68a82cd 100644
--- a/demos/symbianpkgrules.pri
+++ b/demos/symbianpkgrules.pri
@@ -10,6 +10,7 @@ vendorinfo = \
     ":\"Nokia, Qt\"" \
     " "
 
-default_deployment.pkg_prerules += vendorinfo
+demos_deployment.pkg_prerules += vendorinfo
+DEPLOYMENT += demos_deployment
 
 isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
diff --git a/examples/symbianpkgrules.pri b/examples/symbianpkgrules.pri
index 35edbfb..a1b6634 100644
--- a/examples/symbianpkgrules.pri
+++ b/examples/symbianpkgrules.pri
@@ -10,6 +10,7 @@ vendorinfo = \
     ":\"Nokia, Qt\"" \
     " "
 
-default_deployment.pkg_prerules += vendorinfo
+examples_deployment.pkg_prerules += vendorinfo
+DEPLOYMENT += examples_deployment
 
 isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
-- 
cgit v0.12


From ea0f3f7db1d62b2ee94addbeb991061bc2811745 Mon Sep 17 00:00:00 2001
From: Sami Merila <sami.merila@nokia.com>
Date: Fri, 26 Mar 2010 14:09:47 +0200
Subject: QS60Style cannot draw transparency to UI element border areas

Due to incorrect initialization of CFbsBitmap, graphic frames (9-part,
or 3-part ones) are drawn with white non-transparent rect below them.

Initialization corrected.

Task-number: QT-3185
Reviewed-by: Janne Anttila
---
 src/gui/styles/qs60style_s60.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 1138d20..97cf919 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -859,11 +859,9 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(QS60StylePrivate::SkinFr
     User::LeaveIfError(bitmapDev->CreateContext(bitmapGc));
     CleanupStack::PushL(bitmapGc);
 
-#ifndef Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE
     frame->LockHeap();
     memset(frame->DataAddress(), 0, frame->SizeInPixels().iWidth * frame->SizeInPixels().iHeight * 4);  // 4: argb bytes
     frame->UnlockHeap();
-#endif
 
     const TRect outerRect(TPoint(0, 0), targetSize);
     const TRect innerRect = innerRectFromElement(frameElement, outerRect);
-- 
cgit v0.12


From 0d5c68c7e4f31300ac6736203cea4f67e8b825b5 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Fri, 26 Mar 2010 14:53:30 +0200
Subject: QInputContextFactory::languages implementation for Symbian.

Task-number: QTBUG-6851
Reviewed-by: Sami Merila
---
 src/gui/inputmethod/inputmethod.pri          |  2 +-
 src/gui/inputmethod/qinputcontextfactory.cpp | 47 +++++++++++++++++++++++++++-
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/src/gui/inputmethod/inputmethod.pri b/src/gui/inputmethod/inputmethod.pri
index 6d9f748..02e3e57 100644
--- a/src/gui/inputmethod/inputmethod.pri
+++ b/src/gui/inputmethod/inputmethod.pri
@@ -26,6 +26,6 @@ mac:!embedded {
 symbian:contains(QT_CONFIG, s60) {
     HEADERS += inputmethod/qcoefepinputcontext_p.h
     SOURCES += inputmethod/qcoefepinputcontext_s60.cpp
-    LIBS += -lfepbase
+    LIBS += -lfepbase -lakninputlanguage
 }
 
diff --git a/src/gui/inputmethod/qinputcontextfactory.cpp b/src/gui/inputmethod/qinputcontextfactory.cpp
index 501a36e..d47e343 100644
--- a/src/gui/inputmethod/qinputcontextfactory.cpp
+++ b/src/gui/inputmethod/qinputcontextfactory.cpp
@@ -73,6 +73,7 @@
 #endif
 #ifdef Q_WS_S60
 #include "qcoefepinputcontext_p.h"
+#include "akninputlanguageinfo.h"
 #endif
 
 #include "private/qfactoryloader_p.h"
@@ -198,6 +199,42 @@ QStringList QInputContextFactory::keys()
     return result;
 }
 
+#if defined(Q_WS_S60)
+/*!
+    \internal
+
+    This function contains pure Symbian exception handling code for
+    getting S60 language list.
+    Returned object ownership is transfered to caller.
+*/
+static CAknInputLanguageList* s60LangListL()
+{
+    CAknInputLanguageInfo *langInfo = AknInputLanguageInfoFactory::CreateInputLanguageInfoL();
+    CleanupStack::PushL(langInfo);
+    // In rare phone there is more than 7 languages installed -> use 7 as an array granularity
+    CAknInputLanguageList *langList = new (ELeave) CAknInputLanguageList(7);
+    CleanupStack::PushL(langList);
+    langInfo->AppendAvailableLanguagesL(langList);
+    CleanupStack::Pop(langList);
+    CleanupStack::PopAndDestroy(langInfo);
+    return langList;
+}
+
+/*!
+    \internal
+
+    This function utility function return S60 language list.
+    Returned object ownership is transfered to caller.
+*/
+static CAknInputLanguageList* s60LangList()
+{
+    CAknInputLanguageList *langList = NULL;
+    TRAP_IGNORE(langList = s60LangListL());
+    q_check_ptr(langList);
+    return langList;
+}
+#endif
+
 /*!
     Returns the languages supported by the QInputContext object
     specified by \a key.
@@ -229,7 +266,15 @@ QStringList QInputContextFactory::languages( const QString &key )
 #endif
 #if defined(Q_WS_S60)
     if (key == QLatin1String("coefep"))
-        return QStringList(QString());
+        {
+        CAknInputLanguageList *langList = s60LangList();
+        int count = langList->Count();
+        for (int i = 0; i < count; ++i)
+            {
+            result.append(QString(qt_symbianLocaleName(langList->At(i)->LanguageCode())));
+            }
+        delete langList;
+        }
 #endif
 #if defined(QT_NO_LIBRARY) || defined(QT_NO_SETTINGS)
     Q_UNUSED(key);
-- 
cgit v0.12


From fc6cbc103be7eb77d692fb2975397c656b6a939b Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Fri, 26 Mar 2010 14:39:23 +0100
Subject: Fix compile error on Symbian 9.1, caused in network/access.

RVCT has trouble when QPointer is instantiated on classes with inlined
constructors/functions.

Compile fix for 43e1cffb16c2eea54392f5c56210b10abb2f044e,
cc22a14f3d2159a8f760b44e3fe1636a3721ce95 and 656c02f128c56177c48b3de47f7b1e17dbbfa4d3

Reviewed-by: Peter Hartmann
Reviewed-by: Prasanth
---
 .../access/qhttpnetworkconnectionchannel.cpp       | 30 ++++++++++++++++++++++
 .../access/qhttpnetworkconnectionchannel_p.h       | 17 +++---------
 2 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 0804498..bc7684a 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -58,6 +58,28 @@ QT_BEGIN_NAMESPACE
 
 // TODO: Put channel specific stuff here so it does not polute qhttpnetworkconnection.cpp
 
+QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel()
+    : socket(0)
+    , state(IdleState)
+    , reply(0)
+    , written(0)
+    , bytesTotal(0)
+    , resendCurrent(false)
+    , lastStatus(0)
+    , pendingEncrypt(false)
+    , reconnectAttempts(2)
+    , authMehtod(QAuthenticatorPrivate::None)
+    , proxyAuthMehtod(QAuthenticatorPrivate::None)
+#ifndef QT_NO_OPENSSL
+    , ignoreAllSslErrors(false)
+#endif
+    , pipeliningSupported(PipeliningSupportUnknown)
+    , connection(0)
+{
+    // Inlining this function in the header leads to compiler error on
+    // release-armv5, on at least timebox 9.2 and 10.1.
+}
+
 void QHttpNetworkConnectionChannel::init()
 {
 #ifndef QT_NO_OPENSSL
@@ -994,8 +1016,16 @@ void QHttpNetworkConnectionChannel::_q_encryptedBytesWritten(qint64 bytes)
         sendRequest();
     // otherwise we do nothing
 }
+
 #endif
 
+void QHttpNetworkConnectionChannel::setConnection(QHttpNetworkConnection *c)
+{
+    // Inlining this function in the header leads to compiler error on
+    // release-armv5, on at least timebox 9.2 and 10.1.
+    connection = c;
+}
+
 QT_END_NAMESPACE
 
 #include "moc_qhttpnetworkconnectionchannel_p.cpp"
diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index 4a2f8ad..51cb5e8 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -81,7 +81,6 @@ QT_BEGIN_NAMESPACE
 class QHttpNetworkRequest;
 class QHttpNetworkReply;
 class QByteArray;
-class QHttpNetworkConnection;
 
 #ifndef HttpMessagePair
 typedef QPair<QHttpNetworkRequest, QHttpNetworkReply*> HttpMessagePair;
@@ -128,17 +127,9 @@ public:
     QList<HttpMessagePair> alreadyPipelinedRequests;
 
 
-    QHttpNetworkConnectionChannel() : socket(0), state(IdleState), reply(0), written(0), bytesTotal(0), resendCurrent(false),
-    lastStatus(0), pendingEncrypt(false), reconnectAttempts(2),
-    authMehtod(QAuthenticatorPrivate::None), proxyAuthMehtod(QAuthenticatorPrivate::None)
-#ifndef QT_NO_OPENSSL
-    , ignoreAllSslErrors(false)
-#endif
-    , pipeliningSupported(PipeliningSupportUnknown)
-    , connection(0)
-    {}
-
-    void setConnection(QHttpNetworkConnection *c) {connection = c;}
+    QHttpNetworkConnectionChannel();
+    
+    void setConnection(QHttpNetworkConnection *c);
     QPointer<QHttpNetworkConnection> connection;
 
     void init();
@@ -188,8 +179,6 @@ public:
 #endif
 };
 
-
-
 QT_END_NAMESPACE
 
 #endif // QT_NO_HTTP
-- 
cgit v0.12


From a8af0e05b30cc4ec26f58378cd5a4e11b20cf9bd Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Fri, 26 Mar 2010 08:23:58 -0700
Subject: Fix linking error

The #include "moc_qgraphicswidget.cpp" is superfluous and caused these
link errors:

.obj/debug-shared-emb-x86_64/moc_qgraphicswidget.o:(.data.rel.ro+0x0): multiple definition of `QGraphicsWidget::staticMetaObject'
.obj/debug-shared-emb-x86_64/qgraphicswidget.o:(.data.rel.ro+0x0): first defined here
.obj/debug-shared-emb-x86_64/moc_qgraphicswidget.o: In function `QGraphicsWidget::metaObject() const':

Presumably this only happens when you have a stale moc file sitting
around but it's a bug none-the-less.

Reviewed-by: TrustMe
---
 src/gui/graphicsview/qgraphicswidget.cpp | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index a091347..131ee87 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -342,7 +342,7 @@ void QGraphicsWidget::resize(const QSizeF &size)
     A side effect of calling this function is that the widget will receive
     a move event and a resize event. Also, if the widget has a layout
     assigned, the layout will activate.
-    
+
     \sa geometry(), resize()
 */
 void QGraphicsWidget::setGeometry(const QRectF &rect)
@@ -574,7 +574,7 @@ void QGraphicsWidget::getWindowFrameMargins(qreal *left, qreal *top, qreal *righ
 void QGraphicsWidget::unsetWindowFrameMargins()
 {
     Q_D(QGraphicsWidget);
-    if ((d->windowFlags & Qt::Window) && (d->windowFlags & Qt::WindowType_Mask) != Qt::Popup && 
+    if ((d->windowFlags & Qt::Window) && (d->windowFlags & Qt::WindowType_Mask) != Qt::Popup &&
          (d->windowFlags & Qt::WindowType_Mask) != Qt::ToolTip && !(d->windowFlags & Qt::FramelessWindowHint)) {
         QStyleOptionTitleBar bar;
         d->initStyleOptionTitleBar(&bar);
@@ -1151,7 +1151,7 @@ bool QGraphicsWidget::sceneEvent(QEvent *event)
 
     Returns true if \a event has been recognized and processed; otherwise,
     returns false.
-    
+
     \sa event()
 */
 bool QGraphicsWidget::windowFrameEvent(QEvent *event)
@@ -1208,7 +1208,7 @@ Qt::WindowFrameSection QGraphicsWidget::windowFrameSectionAt(const QPointF &pos)
     const QRectF r = windowFrameRect();
     if (!r.contains(pos))
         return Qt::NoSection;
-    
+
     const qreal left = r.left();
     const qreal top = r.top();
     const qreal right = r.right();
@@ -2335,6 +2335,4 @@ void QGraphicsWidget::dumpFocusChain()
 
 QT_END_NAMESPACE
 
-#include "moc_qgraphicswidget.cpp"
-        
 #endif //QT_NO_GRAPHICSVIEW
-- 
cgit v0.12


From e9538ced914739129681362dea03ebc323602126 Mon Sep 17 00:00:00 2001
From: Yoann Lopes <yoann.lopes@nokia.com>
Date: Fri, 26 Mar 2010 16:27:04 +0100
Subject: Reverts using composition mode when using DeviceCoordinateMode cache.

Going back to always blitting the newly painted areas to the cache (and
not blending it like before). To avoid painting artifacts when the item
is rotated and when it uses DeviceCoordinateMode cache mode, the entire
cache is always repainted in that case.

Task-number: QTBUG-7863
Reviewed-by: trustme
---
 src/gui/graphicsview/qgraphicsscene.cpp        | 13 ++++++-------
 tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 18 +++++++++++-------
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 6934abc..6581727 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4285,12 +4285,7 @@ static void _q_paintIntoCache(QPixmap *pix, QGraphicsItem *item, const QRegion &
     if (!subPix.isNull()) {
         // Blit the subpixmap into the main pixmap.
         pixmapPainter.begin(pix);
-        if (item->cacheMode() == QGraphicsItem::DeviceCoordinateCache
-            && itemToPixmap.type() > QTransform::TxTranslate) {
-            pixmapPainter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
-        } else {
-            pixmapPainter.setCompositionMode(QPainter::CompositionMode_Source);
-        }
+        pixmapPainter.setCompositionMode(QPainter::CompositionMode_Source);
         pixmapPainter.setClipRegion(pixmapExposed);
         pixmapPainter.drawPixmap(br.topLeft(), subPix);
         pixmapPainter.end();
@@ -4456,6 +4451,8 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
         }
 
         // Create or reuse offscreen pixmap, possibly scroll/blit from the old one.
+        // If the world transform is rotated we always recreate the cache to avoid
+        // wrong blending.
         bool pixModified = false;
         QGraphicsItemCache::DeviceData *deviceData = &itemCache->deviceData[widget];
         bool invertable = true;
@@ -4463,7 +4460,9 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
         if (invertable)
             diff *= painter->worldTransform();
         deviceData->lastTransform = painter->worldTransform();
-        if (!invertable || diff.type() > QTransform::TxTranslate) {
+        if (!invertable
+            || diff.type() > QTransform::TxTranslate
+            || painter->worldTransform().type() > QTransform::TxScale) {
             pixModified = true;
             itemCache->allExposed = true;
             itemCache->exposed.clear();
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 2b507cb..6725159 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -6825,6 +6825,9 @@ void tst_QGraphicsItem::cacheMode()
     QTRY_COMPARE(tester->repaints, 4);
     QCOMPARE(testerChild->repaints, 4);
     QCOMPARE(testerChild2->repaints, 3);
+    tester->resetTransform();
+    testerChild->resetTransform();
+    testerChild2->resetTransform();
 
     // Explicit update causes a repaint.
     tester->update(0, 0, 5, 5);
@@ -6898,23 +6901,24 @@ void tst_QGraphicsItem::cacheMode()
     // because the parent is rotated with a perspective.
     testerChild->setPos(1, 1);
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 10);
+    QTRY_COMPARE(tester->repaints, 11);
     QCOMPARE(testerChild->repaints, 10);
     QCOMPARE(testerChild2->repaints, 5);
+    tester->resetTransform();
 
     // Make a huge item
     tester->setGeometry(QRectF(-4000, -4000, 8000, 8000));
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 11);
-    QCOMPARE(testerChild->repaints, 10);
+    QTRY_COMPARE(tester->repaints, 12);
+    QCOMPARE(testerChild->repaints, 11);
     QCOMPARE(testerChild2->repaints, 5);
 
     // Move the large item - will cause a repaint as the
     // cache is clipped.
     tester->setPos(5, 0);
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 12);
-    QCOMPARE(testerChild->repaints, 10);
+    QTRY_COMPARE(tester->repaints, 13);
+    QCOMPARE(testerChild->repaints, 11);
     QCOMPARE(testerChild2->repaints, 5);
 
     // Hiding and showing should invalidate the cache
@@ -6922,8 +6926,8 @@ void tst_QGraphicsItem::cacheMode()
     QTest::qWait(25);
     tester->show();
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 13);
-    QCOMPARE(testerChild->repaints, 11);
+    QTRY_COMPARE(tester->repaints, 14);
+    QCOMPARE(testerChild->repaints, 12);
     QCOMPARE(testerChild2->repaints, 6);
 }
 
-- 
cgit v0.12


From 96d6bff54942be11458801edc5c59e2cf646253c Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Fri, 26 Mar 2010 11:08:12 -0700
Subject: QDirectFBPixmap can handle NoOpaqueDetection.

We don't need to do the conversion using QImage when NoOpaqueDetection
is specified.

Reviewed-by: muthu <qt-info@nokia.com>
---
 src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index 4219f6f..f2fd699 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -307,7 +307,7 @@ void QDirectFBPixmapData::fromImage(const QImage &img,
         imageFormat = screen->pixelFormat();
     }
     QImage image;
-    if (flags != Qt::AutoColor) {
+    if ((flags & ~Qt::NoOpaqueDetection) != Qt::AutoColor) {
         image = img.convertToFormat(imageFormat, flags);
         flags = Qt::AutoColor;
     } else if (img.format() == QImage::Format_RGB32) {
-- 
cgit v0.12


From ec401f7a4c682b3ccdbc64edb4aa9881830b45cf Mon Sep 17 00:00:00 2001
From: Anders Bakken <anders.bakken@nokia.com>
Date: Fri, 26 Mar 2010 11:17:39 -0700
Subject: Refactor QDirectFBPixmap::fromImage slightly

Clean up the function a little and make sure I don't call
QImage::hasAlphaChannel twice for opaque images.

Reviewed-by: muthu <qt-info@nokia.com>
---
 .../gfxdrivers/directfb/qdirectfbpixmap.cpp        | 23 +++++++++-------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index f2fd699..80366d1 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -290,27 +290,22 @@ bool QDirectFBPixmapData::fromDataBufferDescription(const DFBDataBufferDescripti
 void QDirectFBPixmapData::fromImage(const QImage &img,
                                     Qt::ImageConversionFlags flags)
 {
-    if (img.depth() == 1 || img.format() == QImage::Format_RGB32) {
-        fromImage(img.convertToFormat(screen->alphaPixmapFormat()), flags);
-        return;
-    }
-
-    if (img.hasAlphaChannel()
+    if (img.depth() == 1) {
+        alpha = true;
 #ifndef QT_NO_DIRECTFB_OPAQUE_DETECTION
-        && (flags & Qt::NoOpaqueDetection || QDirectFBPixmapData::hasAlphaChannel(img))
-#endif
-        ) {
+    } else if (flags & Qt::NoOpaqueDetection || QDirectFBPixmapData::hasAlphaChannel(img)) {
         alpha = true;
-        imageFormat = screen->alphaPixmapFormat();
-    } else {
-        alpha = false;
-        imageFormat = screen->pixelFormat();
+#else
+    } else if (img.hasAlphaChannel()) {
+        alpha = true;
+#endif
     }
+    imageFormat = alpha ? screen->alphaPixmapFormat() : screen->pixelFormat();
     QImage image;
     if ((flags & ~Qt::NoOpaqueDetection) != Qt::AutoColor) {
         image = img.convertToFormat(imageFormat, flags);
         flags = Qt::AutoColor;
-    } else if (img.format() == QImage::Format_RGB32) {
+    } else if (img.format() == QImage::Format_RGB32 || img.depth() == 1) {
         image = img.convertToFormat(imageFormat, flags);
     } else {
         image = img;
-- 
cgit v0.12