From 9a5b72eb64d698aff507d5c2b2ea6d19bda0b65e Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 9 Nov 2010 14:39:27 +0000 Subject: Send WinIdChange event when winId is set to zero This allows an observer to get a notification just before the window handle owned by a native widget is destroyed. Note that, at the point when the event is sent, the widget's internalWinId() will return the new value, but the old native window handle will not be destroyed until after the event handler is run. Task-number: QTMOBILITY-645 Reviewed-by: sroedal --- dist/changes-4.7.2 | 8 ++++++-- src/gui/kernel/qwidget.cpp | 9 ++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dist/changes-4.7.2 b/dist/changes-4.7.2 index 49bdd8e..a18a237 100644 --- a/dist/changes-4.7.2 +++ b/dist/changes-4.7.2 @@ -45,8 +45,12 @@ QtCore QtGui ----- - - foo - * bar + - QWidget + * [QTMOBILITY-645] Send WinIdChange event when winId is set to zero. + The window handle of a native widget may be set to zero in two + situations: (i) temporarily, during reparenting and (ii) during + widget destruction. Previously, no WinIdChange event was sent in + either of these cases; now, it is sent in both cases. QtDBus ------ diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index e22ec55..cbf4886 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1673,13 +1673,8 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier } if(oldWinId != id) { - // Do not emit an event when the old winId is destroyed. This only - // happens (a) during widget destruction, and (b) immediately prior - // to creation of a new winId, for example as a result of re-parenting. - if(id != 0) { - QEvent e(QEvent::WinIdChange); - QCoreApplication::sendEvent(q, &e); - } + QEvent e(QEvent::WinIdChange); + QCoreApplication::sendEvent(q, &e); } } -- cgit v0.12 From d16fcbc6d6b00770a5106027c24ed7cf7e92c1d5 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 11 Nov 2010 17:27:01 +0000 Subject: SSL: Fix for systemCaCertificates being called first on symbian On symbian, thread names must be unique (actually kernel object names) When a thread exits, there may still be open handles, for example a debugger or RUndertaker so the thread name cannot be reused immediately. S60 has an RUndertaker instance in a background thread, which is used to display the "application closed" messages when a crash happens. Until that thread has run and checked the thread exit to see if it was a crash or not, the thread remains open. When systemCaCertificates is called as the first API call, it calls itself via ensureinitialised() to set the default CA certs. This double call should be addressed by QTBUG-15218. In any case, QSslSocket::systemCaCertificates() is intended to refresh from the system - if application code calls it too quickly in succession it could also trigger this bug. Task-number: QTBUG-15126 Reviewed-by: Markus Goetz --- src/network/ssl/qsslsocket_openssl.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 426b07a..f4bd423 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -659,8 +659,16 @@ TInt CSymbianCertificateRetriever::ThreadEntryPoint(TAny* aParams) void CSymbianCertificateRetriever::ConstructL() { - User::LeaveIfError(iThread.Create(_L("CertWorkerThread"), - CSymbianCertificateRetriever::ThreadEntryPoint, 16384, NULL, this)); + TInt err; + int i=0; + QString name(QLatin1String("CertWorkerThread-%1")); + //recently closed thread names remain in use for a while until all handles have been closed + //including users of RUndertaker + do { + err = iThread.Create(qt_QString2TPtrC(name.arg(i++)), + CSymbianCertificateRetriever::ThreadEntryPoint, 16384, NULL, this); + } while (err == KErrAlreadyExists); + User::LeaveIfError(err); } void CSymbianCertificateRetriever::DoCancel() -- cgit v0.12 From 924be25253471ababfcf560a6ca098543838c0aa Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Fri, 12 Nov 2010 13:23:41 +1000 Subject: Bump Qt version to 4.7.2. Reviewed-by: Trust Me --- src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri | 4 ++-- src/corelib/global/qglobal.h | 4 ++-- src/plugins/qpluginbase.pri | 2 +- src/qbase.pri | 2 +- tests/auto/selftests/expected_cmptest.txt | 2 +- tests/auto/selftests/expected_crashes_3.txt | 2 +- tests/auto/selftests/expected_longstring.txt | 2 +- tests/auto/selftests/expected_maxwarnings.txt | 2 +- tests/auto/selftests/expected_skip.txt | 2 +- tools/assistant/tools/assistant/doc/assistant.qdocconf | 2 +- tools/qdoc3/doc/files/qt.qdocconf | 8 ++++---- tools/qdoc3/test/assistant.qdocconf | 4 ++-- tools/qdoc3/test/designer.qdocconf | 4 ++-- tools/qdoc3/test/linguist.qdocconf | 4 ++-- tools/qdoc3/test/qdeclarative.qdocconf | 8 ++++---- tools/qdoc3/test/qmake.qdocconf | 4 ++-- tools/qdoc3/test/qt-build-docs.qdocconf | 8 ++++---- tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf | 8 ++++---- tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf | 8 ++++---- tools/qdoc3/test/qt.qdocconf | 8 ++++---- tools/qdoc3/test/qt_ja_JP.qdocconf | 8 ++++---- tools/qdoc3/test/qt_zh_CN.qdocconf | 8 ++++---- 22 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri index f2282f8..b98617f 100644 --- a/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri +++ b/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri @@ -1,5 +1,5 @@ -QT_WEBKIT_VERSION = 4.7.1 +QT_WEBKIT_VERSION = 4.7.2 QT_WEBKIT_MAJOR_VERSION = 4 QT_WEBKIT_MINOR_VERSION = 7 -QT_WEBKIT_PATCH_VERSION = 1 +QT_WEBKIT_PATCH_VERSION = 2 QT_CONFIG += webkit diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 35607d5..b148a1d 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -44,11 +44,11 @@ #include -#define QT_VERSION_STR "4.7.1" +#define QT_VERSION_STR "4.7.2" /* QT_VERSION is (major << 16) + (minor << 8) + patch. */ -#define QT_VERSION 0x040701 +#define QT_VERSION 0x040702 /* can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) */ diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri index 84009d8..7cbffe0 100644 --- a/src/plugins/qpluginbase.pri +++ b/src/plugins/qpluginbase.pri @@ -1,6 +1,6 @@ TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.1 + VERSION=4.7.2 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/src/qbase.pri b/src/qbase.pri index 4217618..af18af8 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -4,7 +4,7 @@ INCLUDEPATH *= $$QMAKE_INCDIR_QT/$$TARGET #just for today to have some compat isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700 TEMPLATE = lib isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.1 + VERSION=4.7.2 } else { VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} } diff --git a/tests/auto/selftests/expected_cmptest.txt b/tests/auto/selftests/expected_cmptest.txt index 7f3aa9a..fccaca3 100644 --- a/tests/auto/selftests/expected_cmptest.txt +++ b/tests/auto/selftests/expected_cmptest.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Cmptest ********* -Config: Using QTest library 4.7.1, Qt 4.7.1 +Config: Using QTest library 4.7.2, Qt 4.7.2 PASS : tst_Cmptest::initTestCase() PASS : tst_Cmptest::compare_boolfuncs() PASS : tst_Cmptest::compare_pointerfuncs() diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt index 7ded525..2558f68 100644 --- a/tests/auto/selftests/expected_crashes_3.txt +++ b/tests/auto/selftests/expected_crashes_3.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Crashes ********* -Config: Using QTest library 4.7.1, Qt 4.7.1 +Config: Using QTest library 4.7.2, Qt 4.7.2 PASS : tst_Crashes::initTestCase() QFATAL : tst_Crashes::crash() Received signal 11 FAIL! : tst_Crashes::crash() Received a fatal error. diff --git a/tests/auto/selftests/expected_longstring.txt b/tests/auto/selftests/expected_longstring.txt index 9ad6f56..c56244b 100644 --- a/tests/auto/selftests/expected_longstring.txt +++ b/tests/auto/selftests/expected_longstring.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_LongString ********* -Config: Using QTest library 4.7.1, Qt 4.7.1 +Config: Using QTest library 4.7.2, Qt 4.7.2 PASS : tst_LongString::initTestCase() FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. diff --git a/tests/auto/selftests/expected_maxwarnings.txt b/tests/auto/selftests/expected_maxwarnings.txt index 949da13..7846435 100644 --- a/tests/auto/selftests/expected_maxwarnings.txt +++ b/tests/auto/selftests/expected_maxwarnings.txt @@ -1,5 +1,5 @@ ********* Start testing of MaxWarnings ********* -Config: Using QTest library 4.7.1, Qt 4.7.1 +Config: Using QTest library 4.7.2, Qt 4.7.2 PASS : MaxWarnings::initTestCase() QWARN : MaxWarnings::warn() 0 QWARN : MaxWarnings::warn() 1 diff --git a/tests/auto/selftests/expected_skip.txt b/tests/auto/selftests/expected_skip.txt index 1f5bf7b..5c9e497 100644 --- a/tests/auto/selftests/expected_skip.txt +++ b/tests/auto/selftests/expected_skip.txt @@ -1,5 +1,5 @@ ********* Start testing of tst_Skip ********* -Config: Using QTest library 4.7.1, Qt 4.7.1 +Config: Using QTest library 4.7.2, Qt 4.7.2 PASS : tst_Skip::initTestCase() SKIP : tst_Skip::test() skipping all Loc: [/home/user/depot/qt-git/mainline/tests/auto/selftests/skip/tst_skip.cpp(68)] diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf index 26cdafb..57abeae 100644 --- a/tools/assistant/tools/assistant/doc/assistant.qdocconf +++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf @@ -12,5 +12,5 @@ HTML.footer = "


\n" \ "\n" \ "\n" \ "\n" \ - "\n" \ + "\n" \ "
Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies)Trademarks
Qt 4.7.1
Qt 4.7.2
" diff --git a/tools/qdoc3/doc/files/qt.qdocconf b/tools/qdoc3/doc/files/qt.qdocconf index 4546c7a..44cfbc1 100644 --- a/tools/qdoc3/doc/files/qt.qdocconf +++ b/tools/qdoc3/doc/files/qt.qdocconf @@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = @@ -36,9 +36,9 @@ qhp.Qt.extraFiles = classic.css \ images/dynamiclayouts-example.png \ images/stylesheet-coffee-plastique.png -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index 74b68df..0e9a2a8 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Assistant qhp.Assistant.file = assistant.qhp -qhp.Assistant.namespace = com.trolltech.assistant.471 +qhp.Assistant.namespace = com.trolltech.assistant.472 qhp.Assistant.virtualFolder = qdoc qhp.Assistant.indexTitle = Qt Assistant Manual qhp.Assistant.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Assistant.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Assistant.filterAttributes = qt 4.7.1 tools assistant +qhp.Assistant.filterAttributes = qt 4.7.2 tools assistant qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant qhp.Assistant.subprojects = manual examples diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index ab66792..637399b 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Designer qhp.Designer.file = designer.qhp -qhp.Designer.namespace = com.trolltech.designer.471 +qhp.Designer.namespace = com.trolltech.designer.472 qhp.Designer.virtualFolder = qdoc qhp.Designer.indexTitle = Qt Designer Manual qhp.Designer.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Designer.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Designer.filterAttributes = qt 4.7.1 tools designer +qhp.Designer.filterAttributes = qt 4.7.2 tools designer qhp.Designer.customFilters.Designer.name = Qt Designer Manual qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer qhp.Designer.subprojects = manual examples diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index 0d920e2..8ee298e 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Linguist qhp.Linguist.file = linguist.qhp -qhp.Linguist.namespace = com.trolltech.linguist.471 +qhp.Linguist.namespace = com.trolltech.linguist.472 qhp.Linguist.virtualFolder = qdoc qhp.Linguist.indexTitle = Qt Linguist Manual qhp.Linguist.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.Linguist.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Linguist.filterAttributes = qt 4.7.1 tools linguist +qhp.Linguist.filterAttributes = qt 4.7.2 tools linguist qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist qhp.Linguist.subprojects = manual examples diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf index 9aaebcb..e68a935 100644 --- a/tools/qdoc3/test/qdeclarative.qdocconf +++ b/tools/qdoc3/test/qdeclarative.qdocconf @@ -21,7 +21,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qml qhp.Qml.file = qml.qhp -qhp.Qml.namespace = com.trolltech.qml.471 +qhp.Qml.namespace = com.trolltech.qml.472 qhp.Qml.virtualFolder = qdoc qhp.Qml.indexTitle = Qml Reference @@ -61,9 +61,9 @@ qhp.Qml.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.Qml.filterAttributes = qt 4.7.1 qtrefdoc -qhp.Qml.customFilters.Qt.name = Qt 4.7.1 -qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qml.filterAttributes = qt 4.7.2 qtrefdoc +qhp.Qml.customFilters.Qt.name = Qt 4.7.2 +qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.2 qhp.Qml.subprojects = classes qhp.Qml.subprojects.classes.title = Elements qhp.Qml.subprojects.classes.indexTitle = Qml Elements diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index be2e9d3..b5bc96c 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = qmake qhp.qmake.file = qmake.qhp -qhp.qmake.namespace = com.trolltech.qmake.471 +qhp.qmake.namespace = com.trolltech.qmake.472 qhp.qmake.virtualFolder = qdoc qhp.qmake.indexTitle = QMake Manual qhp.qmake.extraFiles = images/bg_l.png \ @@ -50,7 +50,7 @@ qhp.qmake.extraFiles = images/bg_l.png \ style/style_ie8.css \ style/style.css -qhp.qmake.filterAttributes = qt 4.7.1 tools qmake +qhp.qmake.filterAttributes = qt 4.7.2 tools qmake qhp.qmake.customFilters.qmake.name = qmake Manual qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake qhp.qmake.subprojects = manual diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index dcabeb4..5fae2f6 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -15,7 +15,7 @@ naturallanguage = en_US qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = @@ -59,9 +59,9 @@ qhp.Qt.extraFiles = index.html \ -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes diff --git a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf index 7e28fa2..24696d5 100644 --- a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf @@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = Qt qhp.Qt.indexTitle = Qt qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc ja_JP -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc ja_JP +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf index cfcc76d..7789bf7 100644 --- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf @@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = 教程 qhp.Qt.indexTitle = 教程 qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc zh_CN -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc zh_CN +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index ea97205..8998751 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -17,7 +17,7 @@ naturallanguage = en_US qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = @@ -59,9 +59,9 @@ qhp.Qt.extraFiles = index.html \ style/style_ie8.css \ style/style.css -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 qhp.Qt.subprojects = classes overviews examples qhp.Qt.subprojects.classes.title = Classes qhp.Qt.subprojects.classes.indexTitle = Qt's Classes diff --git a/tools/qdoc3/test/qt_ja_JP.qdocconf b/tools/qdoc3/test/qt_ja_JP.qdocconf index 32bba06..a5c348c 100644 --- a/tools/qdoc3/test/qt_ja_JP.qdocconf +++ b/tools/qdoc3/test/qt_ja_JP.qdocconf @@ -19,15 +19,15 @@ indexes = $QTDIR/doc/html/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = Qt qhp.Qt.indexTitle = Qt qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc ja_JP -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc ja_JP +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf index 40d3d5a..25f96b8 100644 --- a/tools/qdoc3/test/qt_zh_CN.qdocconf +++ b/tools/qdoc3/test/qt_zh_CN.qdocconf @@ -19,15 +19,15 @@ indexes = $QTDIR/doc/html/qt.index qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.471 +qhp.Qt.namespace = com.trolltech.qt.472 qhp.Qt.virtualFolder = qdoc qhp.Qt.title = 教程 qhp.Qt.indexTitle = 教程 qhp.Qt.selectors = fake:example -qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc zh_CN -qhp.Qt.customFilters.Qt.name = Qt 4.7.1 -qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1 +qhp.Qt.filterAttributes = qt 4.7.2 qtrefdoc zh_CN +qhp.Qt.customFilters.Qt.name = Qt 4.7.2 +qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.2 # Files not referenced in any qdoc file (last four are needed by qtdemo) # See also extraimages.HTML -- cgit v0.12 From 16575f7aef840b6aae0dc767468ab713fbcfd7a6 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 9 Nov 2010 16:39:20 +0200 Subject: Localize .loc and .pkg content based on TRANSLATIONS If developer specifies "CONFIG += localize_deployment" in .pro file, the generated .loc and .pkg will now use translatable strings from .ts files defined in TRANSLATIONS. The .ts files must have an underscore and Qt language code at the end of the filename body to be compatible with deployment localization. E.g. myapp_en.ts. Running lupdate will generate these entries into .ts files: - Application short caption - Application long caption - Package name - Smart installer package name Task-number: QTBUG-13917 Reviewed-by: Oswald Buddenhagen Reviewed-by: Janne Anttila Reviewed-by: axis --- demos/symbianpkgrules.pri | 5 +- doc/src/development/qmake-manual.qdoc | 8 + examples/symbianpkgrules.pri | 5 +- .../common/symbian/appCaptionForTranslation.cpp | 46 ++ .../common/symbian/packageNameForTranslation.cpp | 47 +++ mkspecs/common/symbian/symbian.conf | 63 ++- mkspecs/features/default_post.prf | 10 + mkspecs/features/symbian/default_post.prf | 12 + mkspecs/features/symbian/localize_deployment.prf | 82 ++++ mkspecs/features/symbian/qt.prf | 6 +- mkspecs/features/symbian/sis_targets.prf | 26 +- qmake/generators/symbian/symbian_makefile.h | 10 +- qmake/generators/symbian/symbiancommon.cpp | 467 ++++++++++++--------- qmake/generators/symbian/symbiancommon.h | 35 +- qmake/generators/symbian/symmake.cpp | 37 +- qmake/generators/symbian/symmake.h | 5 +- qmake/generators/symbian/symmake_abld.cpp | 10 +- qmake/generators/symbian/symmake_sbsv2.cpp | 13 +- src/s60installs/s60installs.pro | 8 +- tools/linguist/lupdate/main.cpp | 4 + 20 files changed, 638 insertions(+), 261 deletions(-) create mode 100644 mkspecs/common/symbian/appCaptionForTranslation.cpp create mode 100644 mkspecs/common/symbian/packageNameForTranslation.cpp create mode 100644 mkspecs/features/symbian/localize_deployment.prf diff --git a/demos/symbianpkgrules.pri b/demos/symbianpkgrules.pri index c9cc492..ef6dfd8 100644 --- a/demos/symbianpkgrules.pri +++ b/demos/symbianpkgrules.pri @@ -2,12 +2,13 @@ RSS_RULES ="group_name=\"QtDemos\";" +nokiaVendor = "Nokia, Qt" vendorinfo = \ "; Localised Vendor name" \ - "%{\"Nokia, Qt\"}" \ + "%{$$addLanguageDependentPkgItem(nokiaVendor)}" \ " " \ "; Unique Vendor name" \ - ":\"Nokia, Qt\"" \ + ":\"$$nokiaVendor\"" \ " " demos_deployment.pkg_prerules += vendorinfo diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc index 6531d25..c0ed940 100644 --- a/doc/src/development/qmake-manual.qdoc +++ b/doc/src/development/qmake-manual.qdoc @@ -1294,6 +1294,14 @@ test sections in generated bld.inf instead of their regular sections. Note that this only affects automatically generated bld.inf content; the content added via \c BLD_INF_RULES variable is not affected. + \row \o localize_deployment \o Makes \c lupdate tool add fields for + application captions and package file names into generated \c{.ts} + files. Qmake generates properly localized \c{.loc} and \c{.pkg} files + based on available translations. Translation file name bodies must + end with underscore and the language code for deployment localization + to work. E.g. \c{myapp_en.ts}. + \bold{Note:} All languages supported by Qt are not supported by Symbian, + so some \c{.ts} files may be ignored by qmake. \endtable These options have an effect on Linux/Unix platforms: diff --git a/examples/symbianpkgrules.pri b/examples/symbianpkgrules.pri index 0f615c7..fe9b487 100644 --- a/examples/symbianpkgrules.pri +++ b/examples/symbianpkgrules.pri @@ -2,12 +2,13 @@ RSS_RULES ="group_name=\"QtExamples\";" +nokiaVendor = "Nokia, Qt" vendorinfo = \ "; Localised Vendor name" \ - "%{\"Nokia, Qt\"}" \ + "%{$$addLanguageDependentPkgItem(nokiaVendor)}" \ " " \ "; Unique Vendor name" \ - ":\"Nokia, Qt\"" \ + ":\"$$nokiaVendor\"" \ " " examples_deployment.pkg_prerules += vendorinfo diff --git a/mkspecs/common/symbian/appCaptionForTranslation.cpp b/mkspecs/common/symbian/appCaptionForTranslation.cpp new file mode 100644 index 0000000..c295147 --- /dev/null +++ b/mkspecs/common/symbian/appCaptionForTranslation.cpp @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//: Application short caption, currently only relevant for application projects in Symbian. +QT_TRANSLATE_NOOP("QtApplicationCaptions", "Application short caption") + +//: Application long caption, currently only relevant for application projects in Symbian. +QT_TRANSLATE_NOOP("QtApplicationCaptions", "Application long caption") diff --git a/mkspecs/common/symbian/packageNameForTranslation.cpp b/mkspecs/common/symbian/packageNameForTranslation.cpp new file mode 100644 index 0000000..bc4a7f4 --- /dev/null +++ b/mkspecs/common/symbian/packageNameForTranslation.cpp @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//: Installation package name, currently only relevant for Symbian projects that deploy something. +QT_TRANSLATE_NOOP("QtPackageNames", "Package name") + +//: Smart installer installation package name, currently only relevant for Symbian projects that +//: deploy something. +QT_TRANSLATE_NOOP("QtPackageNames", "Smart installer package name") diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 69188a8..f8586b0 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -130,6 +130,17 @@ QMAKE_LIBS_QT_ENTRY = -lqtmain$${QT_LIBINFIX}.lib QMAKE_LIBS_NO_QT_ENTRY = -llibcrt0.lib QMAKE_LIBS_NO_QT_ENTRY_GCCE = -llibcrt0_gcce.lib +# List of languages that have a Symbian language code mapping provided in localize_deployment.prf +SYMBIAN_SUPPORTED_LANGUAGES = \ + af sq am ar hy bn bg my be ca \ + hr cs da nl en et fi fr gd ka \ + de el gu he hi hu is id ga it \ + ja kn kk ko lo lv lt mk ms ml \ + mr mo mn nb pl pt pa ro ru sr \ + si sk sl so es sw sv tl ta te \ + th bo ti tr tk uk ur vi cy zu \ + nn + # These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins QT_IMPORTS_BASE_DIR = /resource/qt/imports @@ -194,17 +205,6 @@ isEmpty(S60_VERSION) { # multiple language compatible dependency statements him/herself. default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies - -# Supports S60 3.1, 3.2, 5.0, Symbian^3, and Symbian^4 by default -pkg_platform_dependencies = \ - "; Default HW/platform dependencies" \ - "[0x102032BE],0,0,0,{\"S60ProductID\"}" \ - "[0x102752AE],0,0,0,{\"S60ProductID\"}" \ - "[0x1028315F],0,0,0,{\"S60ProductID\"}" \ - "[0x20022E6D],0,0,0,{\"S60ProductID\"}" \ - "[0x20032DE7],0,0,0,{\"S60ProductID\"}" \ - " " - DEPLOYMENT += default_deployment default_bin_deployment default_resource_deployment default_reg_deployment defineReplace(symbianRemoveSpecialCharacters) { @@ -225,3 +225,44 @@ defineReplace(symbianRemoveSpecialCharacters) { return ($$fixedStr) } +# Determines translations that are Symbian supported +defineTest(matchSymbianLanguages) { + SYMBIAN_MATCHED_LANGUAGES = + SYMBIAN_MATCHED_TRANSLATIONS = + + # Cannot parse .ts file for language here, so detect it from filename. + # Allow two and three character language and country codes. + for(translation, TRANSLATIONS) { + language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2) + contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) { + SYMBIAN_MATCHED_LANGUAGES += $$language + SYMBIAN_MATCHED_TRANSLATIONS += $$translation + } + } + + isEmpty(SYMBIAN_MATCHED_LANGUAGES): SYMBIAN_MATCHED_LANGUAGES = en + + export(SYMBIAN_MATCHED_LANGUAGES) + export(SYMBIAN_MATCHED_TRANSLATIONS) +} + +# Symbian pkg files that define multiple languages require a language specific string to be +# defined for various items, even though the string often needs to be same for all languages. +# This replacement method will generate correct string for such cases based on TRANSLATIONS +# variable. +defineReplace(addLanguageDependentPkgItem) { + localize_deployment:!isEmpty(TRANSLATIONS):isEmpty(SYMBIAN_MATCHED_LANGUAGES) { + matchSymbianLanguages() + } + + pkgItem = $$eval($$1) + pkgLanguageList = + + for(dummyItem, SYMBIAN_MATCHED_LANGUAGES) { + pkgLanguageList += "\"$$pkgItem\"" + } + + isEmpty(pkgLanguageList): pkgLanguageList = "\"$$pkgItem\"" + + return($$join(pkgLanguageList,",",,)) +} diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 09c6587..9fb9f10 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -110,3 +110,13 @@ QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST } QMAKE_EXTRA_TARGETS += check } + +# Add special translation sources for projects that require them. +# Note 1: Since lupdate will not parse regular config scopes right, contains checks are used instead. +# Note 2: Checking for last value of TEMPLATE is used instead of simple contains check because +# lupdate doesn't respect "-=" variable assignments and therefore always finds "app" +# as the first value of TEMPLATE variable. +contains(CONFIG, lupdate_run):contains(CONFIG, localize_deployment) { + equals($$list($$last(TEMPLATE)), app): SOURCES += $$[QT_INSTALL_DATA]/mkspecs/common/symbian/appCaptionForTranslation.cpp + SOURCES += $$[QT_INSTALL_DATA]/mkspecs/common/symbian/packageNameForTranslation.cpp +} diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index d9ff03d..ec6ecd0 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -52,3 +52,15 @@ isEmpty(TARGET.UID2) { } } } + +# Supports S60 3.1, 3.2, 5.0, Symbian^3, and Symbian^4 by default +platform_product_id = S60ProductID +platform_product_id = $$addLanguageDependentPkgItem(platform_product_id) +pkg_platform_dependencies = \ + "; Default HW/platform dependencies" \ + "[0x102032BE],0,0,0,{$$platform_product_id}" \ + "[0x102752AE],0,0,0,{$$platform_product_id}" \ + "[0x1028315F],0,0,0,{$$platform_product_id}" \ + "[0x20022E6D],0,0,0,{$$platform_product_id}" \ + "[0x20032DE7],0,0,0,{$$platform_product_id}" \ + " " diff --git a/mkspecs/features/symbian/localize_deployment.prf b/mkspecs/features/symbian/localize_deployment.prf new file mode 100644 index 0000000..5f52dbc --- /dev/null +++ b/mkspecs/features/symbian/localize_deployment.prf @@ -0,0 +1,82 @@ +SYMBIAN_LANG.af = 34 #Afrikaans +SYMBIAN_LANG.sq = 35 #Albanian +SYMBIAN_LANG.am = 36 #Amharic +SYMBIAN_LANG.ar = 37 #Arabic +SYMBIAN_LANG.hy = 38 #Armenian +SYMBIAN_LANG.bn = 41 #Bengali +SYMBIAN_LANG.bg = 42 #Bulgarian +SYMBIAN_LANG.my = 43 #Burmese +SYMBIAN_LANG.be = 40 #Byelorussian +SYMBIAN_LANG.ca = 44 #Catalan +SYMBIAN_LANG.hr = 45 #Croatian +SYMBIAN_LANG.cs = 25 #Czech +SYMBIAN_LANG.da = 07 #Danish +SYMBIAN_LANG.nl = 18 #Dutch +SYMBIAN_LANG.en = 01 #English(UK) +SYMBIAN_LANG.et = 49 #Estonian +SYMBIAN_LANG.fi = 09 #Finnish +SYMBIAN_LANG.fr = 02 #French +SYMBIAN_LANG.gd = 52 #Gaelic +SYMBIAN_LANG.ka = 53 #Georgian +SYMBIAN_LANG.de = 03 #German +SYMBIAN_LANG.el = 54 #Greek +SYMBIAN_LANG.gu = 56 #Gujarati +SYMBIAN_LANG.he = 57 #Hebrew +SYMBIAN_LANG.hi = 58 #Hindi +SYMBIAN_LANG.hu = 17 #Hungarian +SYMBIAN_LANG.is = 15 #Icelandic +SYMBIAN_LANG.id = 59 #Indonesian +SYMBIAN_LANG.ga = 60 #Irish +SYMBIAN_LANG.it = 05 #Italian +SYMBIAN_LANG.ja = 32 #Japanese +SYMBIAN_LANG.kn = 62 #Kannada +SYMBIAN_LANG.kk = 63 #Kazakh +SYMBIAN_LANG.ko = 65 #Korean +SYMBIAN_LANG.lo = 66 #Laothian +SYMBIAN_LANG.lv = 67 #Latvian +SYMBIAN_LANG.lt = 68 #Lithuanian +SYMBIAN_LANG.mk = 69 #Macedonian +SYMBIAN_LANG.ms = 70 #Malay +SYMBIAN_LANG.ml = 71 #Malayalam +SYMBIAN_LANG.mr = 72 #Marathi +SYMBIAN_LANG.mo = 73 #Moldavian +SYMBIAN_LANG.mn = 74 #Mongolian +SYMBIAN_LANG.nb = 08 #Norwegian +SYMBIAN_LANG.pl = 27 #Polish +SYMBIAN_LANG.pt = 13 #Portuguese +SYMBIAN_LANG.pa = 77 #Punjabi +SYMBIAN_LANG.ro = 78 #Romanian +SYMBIAN_LANG.ru = 16 #Russian +SYMBIAN_LANG.sr = 79 #Serbian +SYMBIAN_LANG.si = 80 #Singhalese +SYMBIAN_LANG.sk = 26 #Slovak +SYMBIAN_LANG.sl = 28 #Slovenian +SYMBIAN_LANG.so = 81 #Somali +SYMBIAN_LANG.es = 04 #Spanish +SYMBIAN_LANG.sw = 84 #Swahili +SYMBIAN_LANG.sv = 06 #Swedish +SYMBIAN_LANG.tl = 39 #Tagalog +SYMBIAN_LANG.ta = 87 #Tamil +SYMBIAN_LANG.te = 88 #Telugu +SYMBIAN_LANG.th = 33 #Thai +SYMBIAN_LANG.bo = 89 #Tibetan +SYMBIAN_LANG.ti = 90 #Tigrinya +SYMBIAN_LANG.tr = 14 #Turkish +SYMBIAN_LANG.tk = 92 #Turkmen +SYMBIAN_LANG.uk = 93 #Ukrainian +SYMBIAN_LANG.ur = 94 #Urdu +SYMBIAN_LANG.vi = 96 #Vietnamese +SYMBIAN_LANG.cy = 97 #Welsh +SYMBIAN_LANG.zu = 98 #Zulu +SYMBIAN_LANG.nn = 75 #Nynorsk + +isEmpty(SYMBIAN_MATCHED_LANGUAGES) { + matchSymbianLanguages() +} + +!isEmpty(SYMBIAN_MATCHED_TRANSLATIONS) { + # Generate dependencies to .ts files for pkg files + template_pkg_target.depends += $$SYMBIAN_MATCHED_TRANSLATIONS + installer_pkg_target.depends += $$SYMBIAN_MATCHED_TRANSLATIONS + stub_pkg_target.depends += $$SYMBIAN_MATCHED_TRANSLATIONS +} diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf index b5d3d98..c8f97aa 100644 --- a/mkspecs/features/symbian/qt.prf +++ b/mkspecs/features/symbian/qt.prf @@ -25,9 +25,10 @@ INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH # 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) { + qt_pkg_name = Qt pkg_depends_qt += \ "; Default dependency to Qt libraries" \ - "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {\"Qt\"}" + "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" # Projects linking to webkit need dependency to webkit contains(QT, webkit): { @@ -38,9 +39,10 @@ contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0 QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} } + webkit_pkg_name = QtWebKit pkg_depends_webkit += \ "; Dependency to Qt Webkit" \ - "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {\"QtWebKit\"}" + "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" } else { default_deployment.pkg_prerules -= pkg_depends_webkit } diff --git a/mkspecs/features/symbian/sis_targets.prf b/mkspecs/features/symbian/sis_targets.prf index e838e10..ad81803 100644 --- a/mkspecs/features/symbian/sis_targets.prf +++ b/mkspecs/features/symbian/sis_targets.prf @@ -12,6 +12,17 @@ else:!equals(DEPLOYMENT, default_deployment) { equals(GENERATE_SIS_TARGETS, true) { baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET)) + template_pkg_target.target = $${baseTarget}_template.pkg + template_pkg_target.depends += $$_PRO_FILE_ + template_pkg_target.commands = $(MAKE) -f $(MAKEFILE) qmake + installer_pkg_target.target = $${baseTarget}_installer.pkg + installer_pkg_target.depends += $$_PRO_FILE_ + installer_pkg_target.commands = $(MAKE) -f $(MAKEFILE) qmake + stub_pkg_target.target = $${baseTarget}_stub.pkg + stub_pkg_target.depends += $$_PRO_FILE_ + stub_pkg_target.commands = $(MAKE) -f $(MAKEFILE) qmake + QMAKE_EXTRA_TARGETS += template_pkg_target installer_pkg_target stub_pkg_target + symbian-abld|symbian-sbsv2 { symbian-sbsv2 { @@ -35,6 +46,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) + sis_target.depends += $${baseTarget}_template.pkg ok_sis_target.target = ok_sis ok_sis_target.commands = createpackage $$CONVERT_GCCE_PARAM $(QT_SIS_OPTIONS) $${baseTarget}_template.pkg \ @@ -54,6 +66,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) + unsigned_sis_target.depends += $${baseTarget}_template.pkg ok_unsigned_sis_target.target = ok_unsigned_sis ok_unsigned_sis_target.commands = createpackage $$CONVERT_GCCE_PARAM $(QT_SIS_OPTIONS) -o $${baseTarget}_template.pkg $(QT_SIS_TARGET) @@ -67,7 +80,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) - installer_sis_target.depends = sis + installer_sis_target.depends = $${baseTarget}_installer.pkg sis ok_installer_sis_target.target = ok_installer_sis ok_installer_sis_target.commands = createpackage $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \ @@ -79,7 +92,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) - unsigned_installer_sis_target.depends = unsigned_sis + unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_sis ok_unsigned_installer_sis_target.target = ok_unsigned_installer_sis ok_unsigned_installer_sis_target.commands = createpackage $(QT_SIS_OPTIONS) -o $${baseTarget}_installer.pkg @@ -104,6 +117,7 @@ equals(GENERATE_SIS_TARGETS, true) { , \ $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) + stub_sis_target.depends += $${baseTarget}_stub.pkg ok_stub_sis_target.target = ok_stub_sis ok_stub_sis_target.commands = createpackage -s $(QT_SIS_OPTIONS) $${baseTarget}_stub.pkg \ @@ -154,11 +168,11 @@ equals(GENERATE_SIS_TARGETS, true) { sis_target.target = sis sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) $${baseTarget}_template.pkg \ - $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) - sis_target.depends = first + sis_target.depends = first $${baseTarget}_template.pkg unsigned_sis_target.target = unsigned_sis unsigned_sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) -o $${baseTarget}_template.pkg - unsigned_sis_target.depends = first + unsigned_sis_target.depends = first $${baseTarget}_template.pkg target_sis_target.target = $${sis_destdir}/$${baseTarget}.sis target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis @@ -166,11 +180,11 @@ equals(GENERATE_SIS_TARGETS, true) { installer_sis_target.target = installer_sis installer_sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \ $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) - installer_sis_target.depends = sis + installer_sis_target.depends = $${baseTarget}_installer.pkg sis unsigned_installer_sis_target.target = unsigned_installer_sis unsigned_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) -o $${baseTarget}_installer.pkg - unsigned_installer_sis_target.depends = unsigned_sis + unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_sis !isEmpty(sis_destdir):!equals(sis_destdir, "."):!equals(sis_destdir, "./") { sis_target.commands += && $$QMAKE_MOVE $${baseTarget}.sis $$sis_destdir diff --git a/qmake/generators/symbian/symbian_makefile.h b/qmake/generators/symbian/symbian_makefile.h index 94f0145..28a6206 100644 --- a/qmake/generators/symbian/symbian_makefile.h +++ b/qmake/generators/symbian/symbian_makefile.h @@ -79,18 +79,18 @@ public: } } + SymbianLocalizationList symbianLocalizationList; + parseTsFiles(&symbianLocalizationList); + if (generatePkg) { - generatePkgFile(iconFile, false); + generatePkgFile(iconFile, false, symbianLocalizationList); } - // Get the application translations and convert to symbian OS lang code, i.e. decical number - QStringList symbianLangCodes = symbianLangCodesFromTsFiles(); - if (targetType == TypeExe) { if (!this->project->values("CONFIG").contains("no_icon", Qt::CaseInsensitive)) { writeRegRssFile(userRssRules); writeRssFile(numberOfIcons, iconFile); - writeLocFile(symbianLangCodes); + writeLocFile(symbianLocalizationList); } } diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index 9d4f27e..2244a98 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -41,6 +41,7 @@ #include "symbiancommon.h" #include +#include // Included from tools/shared #include @@ -151,7 +152,9 @@ QString romPath(const QString& path) return QLatin1String("z:") + path; } -void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocBuild) +void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, + bool epocBuild, + const SymbianLocalizationList &symbianLocalizationList) { QMakeProject *project = generator->project; QString pkgFilename = Option::output_dir + QLatin1Char('/') + @@ -270,8 +273,17 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB // Apply some defaults if specific data does not exist in PKG pre-rules if (languageRules.isEmpty()) { - // language, (*** hardcoded to english atm, should be parsed from TRANSLATIONS) - languageRules << "; Language\n&EN\n\n"; + if (symbianLocalizationList.isEmpty()) { + languageRules << "; Language\n&EN\n\n"; + } else { + QStringList langCodes; + SymbianLocalizationListIterator iter(symbianLocalizationList); + while (iter.hasNext()) { + const SymbianLocalization &loc = iter.next(); + langCodes << loc.symbianLanguageCode; + } + languageRules << QString("; Languages\n&%1\n\n").arg(langCodes.join(",")); + } } else if (headerRules.isEmpty()) { // In case user defines langs, he must take care also about SIS header fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n"); @@ -320,12 +332,14 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB // Package header QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n"; - QString visualTarget = project->values("DEPLOYMENT.display_name").join(" "); - if (visualTarget.isEmpty()) - visualTarget = generator->escapeFilePath(project->first("TARGET")); - visualTarget = removePathSeparators(visualTarget); - QString wrapperTarget = visualTarget + " installer"; + QString defaultVisualTarget = project->values("DEPLOYMENT.display_name").join(" "); + if (defaultVisualTarget.isEmpty()) + defaultVisualTarget = generator->escapeFilePath(project->first("TARGET")); + defaultVisualTarget = removePathSeparators(defaultVisualTarget); + + QString visualTarget = generatePkgNameForHeader(symbianLocalizationList, defaultVisualTarget, false); + QString wrapperTarget = generatePkgNameForHeader(symbianLocalizationList, defaultVisualTarget, true); if (installerSisHeader.startsWith("0x", Qt::CaseInsensitive)) { tw << sisHeader.arg(wrapperTarget).arg(installerSisHeader).arg(applicationVersion); @@ -344,7 +358,13 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB // Vendor name if (!containsStartWithItem('%', vendorRules)) { - vendorRules << "; Default localized vendor name\n%{\"Vendor\"}\n\n"; + QString vendorStr = QLatin1String("\"Vendor\","); + QString locVendors = vendorStr; + for (int i = 1; i < symbianLocalizationList.size(); i++) { + locVendors.append(vendorStr); + } + locVendors.chop(1); + vendorRules << QString("; Default localized vendor name\n%{%1}\n\n").arg(locVendors); } if (!containsStartWithItem(':', vendorRules)) { vendorRules << "; Default unique vendor name\n:\"Vendor\"\n\n"; @@ -385,6 +405,13 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB t << manufacturerStr << endl; } + // ### FIXME: remove epocBuild check once makefile based mkspecs support localized resource generation + if (epocBuild && symbianLocalizationList.size()) { + // Add localized resources to DEPLOYMENT if default resource deployment is done + addLocalizedResourcesToDeployment("default_resource_deployment.sources", symbianLocalizationList); + addLocalizedResourcesToDeployment("default_reg_deployment.sources", symbianLocalizationList); + } + // deploy files specified by DEPLOYMENT variable QString remoteTestPath; QString zDir; @@ -633,12 +660,9 @@ void SymbianCommonGenerator::writeRssFile(QString &numberOfIcons, QString &iconF } } -void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes) +void SymbianCommonGenerator::writeLocFile(const SymbianLocalizationList &symbianLocalizationList) { - QString filename(fixedTarget); - if (!Option::output_dir.isEmpty()) - filename = Option::output_dir + '/' + filename; - filename.append(".loc"); + QString filename = generateLocFileName(); QFile ft(filename); if (ft.open(QIODevice::WriteOnly)) { generatedFiles << ft.fileName(); @@ -658,11 +682,22 @@ void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes) t << "#ifdef LANGUAGE_SC" << endl; t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl; t << "#define STRING_r_caption \"" << displayName << "\"" << endl; - foreach(QString lang, symbianLangCodes) { - t << "#elif defined LANGUAGE_" << lang << endl; - t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl; - t << "#define STRING_r_caption \"" << displayName << "\"" << endl; + + SymbianLocalizationListIterator iter(symbianLocalizationList); + while (iter.hasNext()) { + const SymbianLocalization &loc = iter.next(); + QString shortCaption = loc.shortCaption; + QString longCaption = loc.longCaption; + if (shortCaption.isEmpty()) + shortCaption = displayName; + if (longCaption.isEmpty()) + longCaption = displayName; + + t << "#elif defined LANGUAGE_" << loc.symbianLanguageCode << endl; + t << "#define STRING_r_short_caption \"" << shortCaption << "\"" << endl; + t << "#define STRING_r_caption \"" << longCaption << "\"" << endl; } + t << "#else" << endl; t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl; t << "#define STRING_r_caption \"" << displayName << "\"" << endl; @@ -803,195 +838,49 @@ void SymbianCommonGenerator::writeCustomDefFile() } } -QStringList SymbianCommonGenerator::symbianLangCodesFromTsFiles() +void SymbianCommonGenerator::parseTsFiles(SymbianLocalizationList *symbianLocalizationList) { - QStringList tsfiles; - QStringList symbianLangCodes; - tsfiles << generator->project->values("TRANSLATIONS"); + if (!generator->project->isActiveConfig("localize_deployment")) { + return; + } - fillQt2S60LangMapTable(); + QStringList symbianTsFiles; - foreach(QString file, tsfiles) { - int extIndex = file.lastIndexOf("."); - int langIndex = file.lastIndexOf("_", (extIndex - file.length())); - langIndex += 1; - QString qtlang = file.mid(langIndex, extIndex - langIndex); - QString s60lang = qt2S60LangMapTable.value(qtlang, QString("SC")); + symbianTsFiles << generator->project->values("SYMBIAN_MATCHED_TRANSLATIONS"); - if (!symbianLangCodes.contains(s60lang) && s60lang != "SC") - symbianLangCodes += s60lang; - } + if (!symbianTsFiles.isEmpty()) { + fillQt2SymbianLocalizationList(symbianLocalizationList); - return symbianLangCodes; + QMutableListIterator iter(*symbianLocalizationList); + while (iter.hasNext()) { + SymbianLocalization &loc = iter.next(); + static QString matchStrTemplate = QLatin1String(".*_%1\\.ts"); + QString matchStr = matchStrTemplate.arg(loc.qtLanguageCode); + + foreach (QString file, symbianTsFiles) { + QRegExp matcher(matchStr); + if (matcher.exactMatch(file) && parseTsContent(file, &loc)) + break; + } + } + } } -void SymbianCommonGenerator::fillQt2S60LangMapTable() +void SymbianCommonGenerator::fillQt2SymbianLocalizationList(SymbianLocalizationList *symbianLocalizationList) { - qt2S60LangMapTable.reserve(170); // 165 items at time of writing. - qt2S60LangMapTable.insert("ab", "SC"); //Abkhazian // - qt2S60LangMapTable.insert("om", "SC"); //Afan // - qt2S60LangMapTable.insert("aa", "SC"); //Afar // - qt2S60LangMapTable.insert("af", "34"); //Afrikaans //Afrikaans - qt2S60LangMapTable.insert("sq", "35"); //Albanian //Albanian - qt2S60LangMapTable.insert("am", "36"); //Amharic //Amharic - qt2S60LangMapTable.insert("ar", "37"); //Arabic //Arabic - qt2S60LangMapTable.insert("hy", "38"); //Armenian //Armenian - qt2S60LangMapTable.insert("as", "SC"); //Assamese // - qt2S60LangMapTable.insert("ay", "SC"); //Aymara // - qt2S60LangMapTable.insert("az", "SC"); //Azerbaijani // - qt2S60LangMapTable.insert("ba", "SC"); //Bashkir // - qt2S60LangMapTable.insert("eu", "SC"); //Basque // - qt2S60LangMapTable.insert("bn", "41"); //Bengali //Bengali - qt2S60LangMapTable.insert("dz", "SC"); //Bhutani // - qt2S60LangMapTable.insert("bh", "SC"); //Bihari // - qt2S60LangMapTable.insert("bi", "SC"); //Bislama // - qt2S60LangMapTable.insert("br", "SC"); //Breton // - qt2S60LangMapTable.insert("bg", "42"); //Bulgarian //Bulgarian - qt2S60LangMapTable.insert("my", "43"); //Burmese //Burmese - qt2S60LangMapTable.insert("be", "40"); //Byelorussian //Belarussian - qt2S60LangMapTable.insert("km", "SC"); //Cambodian // - qt2S60LangMapTable.insert("ca", "44"); //Catalan //Catalan - qt2S60LangMapTable.insert("zh", "SC"); //Chinese // - qt2S60LangMapTable.insert("co", "SC"); //Corsican // - qt2S60LangMapTable.insert("hr", "45"); //Croatian //Croatian - qt2S60LangMapTable.insert("cs", "25"); //Czech //Czech - qt2S60LangMapTable.insert("da", "07"); //Danish //Danish - qt2S60LangMapTable.insert("nl", "18"); //Dutch //Dutch - qt2S60LangMapTable.insert("en", "01"); //English //English(UK) - qt2S60LangMapTable.insert("eo", "SC"); //Esperanto // - qt2S60LangMapTable.insert("et", "49"); //Estonian //Estonian - qt2S60LangMapTable.insert("fo", "SC"); //Faroese // - qt2S60LangMapTable.insert("fj", "SC"); //Fiji // - qt2S60LangMapTable.insert("fi", "09"); //Finnish //Finnish - qt2S60LangMapTable.insert("fr", "02"); //French //French - qt2S60LangMapTable.insert("fy", "SC"); //Frisian // - qt2S60LangMapTable.insert("gd", "52"); //Gaelic //Gaelic - qt2S60LangMapTable.insert("gl", "SC"); //Galician // - qt2S60LangMapTable.insert("ka", "53"); //Georgian //Georgian - qt2S60LangMapTable.insert("de", "03"); //German //German - qt2S60LangMapTable.insert("el", "54"); //Greek //Greek - qt2S60LangMapTable.insert("kl", "SC"); //Greenlandic // - qt2S60LangMapTable.insert("gn", "SC"); //Guarani // - qt2S60LangMapTable.insert("gu", "56"); //Gujarati //Gujarati - qt2S60LangMapTable.insert("ha", "SC"); //Hausa // - qt2S60LangMapTable.insert("he", "57"); //Hebrew //Hebrew - qt2S60LangMapTable.insert("hi", "58"); //Hindi //Hindi - qt2S60LangMapTable.insert("hu", "17"); //Hungarian //Hungarian - qt2S60LangMapTable.insert("is", "15"); //Icelandic //Icelandic - qt2S60LangMapTable.insert("id", "59"); //Indonesian //Indonesian - qt2S60LangMapTable.insert("ia", "SC"); //Interlingua // - qt2S60LangMapTable.insert("ie", "SC"); //Interlingue // - qt2S60LangMapTable.insert("iu", "SC"); //Inuktitut // - qt2S60LangMapTable.insert("ik", "SC"); //Inupiak // - qt2S60LangMapTable.insert("ga", "60"); //Irish //Irish - qt2S60LangMapTable.insert("it", "05"); //Italian //Italian - qt2S60LangMapTable.insert("ja", "32"); //Japanese //Japanese - qt2S60LangMapTable.insert("jv", "SC"); //Javanese // - qt2S60LangMapTable.insert("kn", "62"); //Kannada //Kannada - qt2S60LangMapTable.insert("ks", "SC"); //Kashmiri // - qt2S60LangMapTable.insert("kk", "63"); //Kazakh //Kazakh - qt2S60LangMapTable.insert("rw", "SC"); //Kinyarwanda // - qt2S60LangMapTable.insert("ky", "SC"); //Kirghiz // - qt2S60LangMapTable.insert("ko", "65"); //Korean //Korean - qt2S60LangMapTable.insert("ku", "SC"); //Kurdish // - qt2S60LangMapTable.insert("rn", "SC"); //Kurundi // - qt2S60LangMapTable.insert("lo", "66"); //Laothian //Laothian - qt2S60LangMapTable.insert("la", "SC"); //Latin // - qt2S60LangMapTable.insert("lv", "67"); //Latvian //Latvian - qt2S60LangMapTable.insert("ln", "SC"); //Lingala // - qt2S60LangMapTable.insert("lt", "68"); //Lithuanian //Lithuanian - qt2S60LangMapTable.insert("mk", "69"); //Macedonian //Macedonian - qt2S60LangMapTable.insert("mg", "SC"); //Malagasy // - qt2S60LangMapTable.insert("ms", "70"); //Malay //Malay - qt2S60LangMapTable.insert("ml", "71"); //Malayalam //Malayalam - qt2S60LangMapTable.insert("mt", "SC"); //Maltese // - qt2S60LangMapTable.insert("mi", "SC"); //Maori // - qt2S60LangMapTable.insert("mr", "72"); //Marathi //Marathi - qt2S60LangMapTable.insert("mo", "73"); //Moldavian //Moldovian - qt2S60LangMapTable.insert("mn", "74"); //Mongolian //Mongolian - qt2S60LangMapTable.insert("na", "SC"); //Nauru // - qt2S60LangMapTable.insert("ne", "SC"); //Nepali // - qt2S60LangMapTable.insert("nb", "08"); //Norwegian //Norwegian - qt2S60LangMapTable.insert("oc", "SC"); //Occitan // - qt2S60LangMapTable.insert("or", "SC"); //Oriya // - qt2S60LangMapTable.insert("ps", "SC"); //Pashto // - qt2S60LangMapTable.insert("fa", "SC"); //Persian // - qt2S60LangMapTable.insert("pl", "27"); //Polish //Polish - qt2S60LangMapTable.insert("pt", "13"); //Portuguese //Portuguese - qt2S60LangMapTable.insert("pa", "77"); //Punjabi //Punjabi - qt2S60LangMapTable.insert("qu", "SC"); //Quechua // - qt2S60LangMapTable.insert("rm", "SC"); //RhaetoRomance // - qt2S60LangMapTable.insert("ro", "78"); //Romanian //Romanian - qt2S60LangMapTable.insert("ru", "16"); //Russian //Russian - qt2S60LangMapTable.insert("sm", "SC"); //Samoan // - qt2S60LangMapTable.insert("sg", "SC"); //Sangho // - qt2S60LangMapTable.insert("sa", "SC"); //Sanskrit // - qt2S60LangMapTable.insert("sr", "79"); //Serbian //Serbian - qt2S60LangMapTable.insert("sh", "SC"); //SerboCroatian // - qt2S60LangMapTable.insert("st", "SC"); //Sesotho // - qt2S60LangMapTable.insert("tn", "SC"); //Setswana // - qt2S60LangMapTable.insert("sn", "SC"); //Shona // - qt2S60LangMapTable.insert("sd", "SC"); //Sindhi // - qt2S60LangMapTable.insert("si", "80"); //Singhalese //Sinhalese - qt2S60LangMapTable.insert("ss", "SC"); //Siswati // - qt2S60LangMapTable.insert("sk", "26"); //Slovak //Slovak - qt2S60LangMapTable.insert("sl", "28"); //Slovenian //Slovenian - qt2S60LangMapTable.insert("so", "81"); //Somali //Somali - qt2S60LangMapTable.insert("es", "04"); //Spanish //Spanish - qt2S60LangMapTable.insert("su", "SC"); //Sundanese // - qt2S60LangMapTable.insert("sw", "84"); //Swahili //Swahili - qt2S60LangMapTable.insert("sv", "06"); //Swedish //Swedish - qt2S60LangMapTable.insert("tl", "39"); //Tagalog //Tagalog - qt2S60LangMapTable.insert("tg", "SC"); //Tajik // - qt2S60LangMapTable.insert("ta", "87"); //Tamil //Tamil - qt2S60LangMapTable.insert("tt", "SC"); //Tatar // - qt2S60LangMapTable.insert("te", "88"); //Telugu //Telugu - qt2S60LangMapTable.insert("th", "33"); //Thai //Thai - qt2S60LangMapTable.insert("bo", "89"); //Tibetan //Tibetan - qt2S60LangMapTable.insert("ti", "90"); //Tigrinya //Tigrinya - qt2S60LangMapTable.insert("to", "SC"); //Tonga // - qt2S60LangMapTable.insert("ts", "SC"); //Tsonga // - qt2S60LangMapTable.insert("tr", "14"); //Turkish //Turkish - qt2S60LangMapTable.insert("tk", "92"); //Turkmen //Turkmen - qt2S60LangMapTable.insert("tw", "SC"); //Twi // - qt2S60LangMapTable.insert("ug", "SC"); //Uigur // - qt2S60LangMapTable.insert("uk", "93"); //Ukrainian //Ukrainian - qt2S60LangMapTable.insert("ur", "94"); //Urdu //Urdu - qt2S60LangMapTable.insert("uz", "SC"); //Uzbek // - qt2S60LangMapTable.insert("vi", "96"); //Vietnamese //Vietnamese - qt2S60LangMapTable.insert("vo", "SC"); //Volapuk // - qt2S60LangMapTable.insert("cy", "97"); //Welsh //Welsh - qt2S60LangMapTable.insert("wo", "SC"); //Wolof // - qt2S60LangMapTable.insert("xh", "SC"); //Xhosa // - qt2S60LangMapTable.insert("yi", "SC"); //Yiddish // - qt2S60LangMapTable.insert("yo", "SC"); //Yoruba // - qt2S60LangMapTable.insert("za", "SC"); //Zhuang // - qt2S60LangMapTable.insert("zu", "98"); //Zulu //Zulu - qt2S60LangMapTable.insert("nn", "75"); //Nynorsk //NorwegianNynorsk - qt2S60LangMapTable.insert("bs", "SC"); //Bosnian // - qt2S60LangMapTable.insert("dv", "SC"); //Divehi // - qt2S60LangMapTable.insert("gv", "SC"); //Manx // - qt2S60LangMapTable.insert("kw", "SC"); //Cornish // - qt2S60LangMapTable.insert("ak", "SC"); //Akan // - qt2S60LangMapTable.insert("kok", "SC"); //Konkani // - qt2S60LangMapTable.insert("gaa", "SC"); //Ga // - qt2S60LangMapTable.insert("ig", "SC"); //Igbo // - qt2S60LangMapTable.insert("kam", "SC"); //Kamba // - qt2S60LangMapTable.insert("syr", "SC"); //Syriac // - qt2S60LangMapTable.insert("byn", "SC"); //Blin // - qt2S60LangMapTable.insert("gez", "SC"); //Geez // - qt2S60LangMapTable.insert("kfo", "SC"); //Koro // - qt2S60LangMapTable.insert("sid", "SC"); //Sidamo // - qt2S60LangMapTable.insert("cch", "SC"); //Atsam // - qt2S60LangMapTable.insert("tig", "SC"); //Tigre // - qt2S60LangMapTable.insert("kaj", "SC"); //Jju // - qt2S60LangMapTable.insert("fur", "SC"); //Friulian // - qt2S60LangMapTable.insert("ve", "SC"); //Venda // - qt2S60LangMapTable.insert("ee", "SC"); //Ewe // - qt2S60LangMapTable.insert("wa", "SC"); //Walamo // - qt2S60LangMapTable.insert("haw", "SC"); //Hawaiian // - qt2S60LangMapTable.insert("kcg", "SC"); //Tyap // - qt2S60LangMapTable.insert("ny", "SC"); //Chewa // + static QString symbianCodePrefix = QLatin1String("SYMBIAN_LANG."); + + QStringList symbianLanguages = generator->project->values("SYMBIAN_MATCHED_LANGUAGES"); + + foreach (QString qtCode, symbianLanguages) { + SymbianLocalization newLoc; + QString symbianCodeVariable = symbianCodePrefix + qtCode; + newLoc.symbianLanguageCode = generator->project->first(symbianCodeVariable); + if (!newLoc.symbianLanguageCode.isEmpty()) { + newLoc.qtLanguageCode = qtCode; + symbianLocalizationList->append(newLoc); + } + } } void SymbianCommonGenerator::parsePreRules(const QString &deploymentVariable, @@ -1057,3 +946,183 @@ void SymbianCommonGenerator::parsePostRules(const QString &deploymentVariable, } } +bool SymbianCommonGenerator::parseTsContent(const QString &tsFilename, SymbianLocalization *loc) +{ + bool retval = true; + QMakeProject *project = generator->project; + QFile tsFile(tsFilename); + + if (tsFile.exists()) { + if (tsFile.open(QIODevice::ReadOnly)) { + static QString applicationCaptionsContext = QLatin1String("QtApplicationCaptions"); + static QString pkgNameContext = QLatin1String("QtPackageNames"); + static QString tsElement = QLatin1String("TS"); + static QString contextElement = QLatin1String("context"); + static QString nameElement = QLatin1String("name"); + static QString messageElement = QLatin1String("message"); + static QString sourceElement = QLatin1String("source"); + static QString translationElement = QLatin1String("translation"); + static QString shortCaptionId = QLatin1String("Application short caption"); + static QString longCaptionId = QLatin1String("Application long caption"); + static QString pkgDisplayNameId = QLatin1String("Package name"); + static QString installerPkgDisplayNameId = QLatin1String("Smart installer package name"); + static QString languageAttribute = QLatin1String("language"); + static QChar underscoreChar = QLatin1Char('_'); + + enum CurrentContext { + ContextUnknown, + ContextUninteresting, + ContextInteresting + }; + + QXmlStreamReader xml(&tsFile); + + while (xml.name() != tsElement) + xml.readNextStartElement(); + + while (xml.readNextStartElement()) { + if (xml.name() == contextElement) { + CurrentContext currentContext = ContextUnknown; + while (xml.readNextStartElement()) { + if (currentContext == ContextUnknown) { + // Expect name element before message elements + if (xml.name() == nameElement) { + QString nameText = xml.readElementText(); + if (nameText == applicationCaptionsContext || nameText == pkgNameContext) { + currentContext = ContextInteresting; + } else { + currentContext = ContextUninteresting; + } + } else { + xml.skipCurrentElement(); + } + } else if (currentContext == ContextInteresting) { + if (xml.name() == messageElement) { + QString source; + QString translation; + while (xml.readNextStartElement()) { + if (xml.name() == sourceElement) { + source = xml.readElementText(); + } else if (xml.name() == translationElement) { + translation = xml.readElementText(); + } else { + xml.skipCurrentElement(); + } + } + + if (source == shortCaptionId) { + if (loc->shortCaption.isEmpty()) { + loc->shortCaption = translation; + } else { + fprintf(stderr, "Warning: Duplicate application short caption defined in (%s).\n", + qPrintable(tsFilename)); + } + } else if (source == longCaptionId) { + if (loc->longCaption.isEmpty()) { + loc->longCaption = translation; + } else { + fprintf(stderr, "Warning: Duplicate application long caption defined in (%s).\n", + qPrintable(tsFilename)); + } + } else if (source == pkgDisplayNameId) { + if (loc->pkgDisplayName.isEmpty()) { + loc->pkgDisplayName = translation; + } else { + fprintf(stderr, "Warning: Duplicate package display name defined in (%s).\n", + qPrintable(tsFilename)); + } + } else if (source == installerPkgDisplayNameId) { + if (loc->installerPkgDisplayName.isEmpty()) { + loc->installerPkgDisplayName = translation; + } else { + fprintf(stderr, "Warning: Duplicate smart installer package display name defined in (%s).\n", + qPrintable(tsFilename)); + } + } + } else { + xml.skipCurrentElement(); + } + } else { + xml.skipCurrentElement(); + } + } + } else { + xml.skipCurrentElement(); + } + } + if (xml.hasError()) { + retval = false; + fprintf(stderr, "ERROR: Encountered error \"%s\" when parsing ts file (%s).\n", + qPrintable(xml.errorString()), qPrintable(tsFilename)); + } + } else { + retval = false; + fprintf(stderr, "Warning: Could not open ts file (%s).\n", qPrintable(tsFilename)); + } + } else { + retval = false; + fprintf(stderr, "Warning: ts file does not exist: (%s), unable to parse it.\n", + qPrintable(tsFilename)); + } + + return retval; +} + +QString SymbianCommonGenerator::generatePkgNameForHeader(const SymbianLocalizationList &symbianLocalizationList, + const QString &defaultName, + bool isForSmartInstaller) +{ + QStringList allNames; + QString noTranslation = defaultName; + + if (isForSmartInstaller) + noTranslation += QLatin1String(" installer"); + + SymbianLocalizationListIterator iter(symbianLocalizationList); + while (iter.hasNext()) { + const SymbianLocalization &loc = iter.next(); + QString currentName; + if (isForSmartInstaller) { + currentName = loc.installerPkgDisplayName; + } else { + currentName = loc.pkgDisplayName; + } + + if (currentName.isEmpty()) + currentName = noTranslation; + + allNames << currentName; + } + + if (!allNames.size()) + allNames << noTranslation; + + return allNames.join("\",\""); + +} + +void SymbianCommonGenerator::addLocalizedResourcesToDeployment(const QString &deploymentFilesVar, + const SymbianLocalizationList &symbianLocalizationList) +{ + QStringList locResources; + foreach (QString defaultResource, generator->project->values(deploymentFilesVar)) { + if (defaultResource.endsWith(".rsc")) { + defaultResource.chop(2); + SymbianLocalizationListIterator iter(symbianLocalizationList); + while (iter.hasNext()) { + const SymbianLocalization &loc = iter.next(); + locResources << QString(defaultResource + loc.symbianLanguageCode); + } + } + } + generator->project->values(deploymentFilesVar) << locResources; +} + +QString SymbianCommonGenerator::generateLocFileName() +{ + QString fileName(fixedTarget); + if (!Option::output_dir.isEmpty()) + fileName = Option::output_dir + QLatin1Char('/') + fileName; + fileName.append(".loc"); + return fileName; +} diff --git a/qmake/generators/symbian/symbiancommon.h b/qmake/generators/symbian/symbiancommon.h index 80f2079..1db5890 100644 --- a/qmake/generators/symbian/symbiancommon.h +++ b/qmake/generators/symbian/symbiancommon.h @@ -48,6 +48,20 @@ #define PRINT_FILE_CREATE_ERROR(filename) fprintf(stderr, "Error: Could not create '%s'\n", qPrintable(filename)); +class SymbianLocalization +{ +public: + QString qtLanguageCode; + QString symbianLanguageCode; + QString shortCaption; + QString longCaption; + QString pkgDisplayName; + QString installerPkgDisplayName; +}; + +typedef QList SymbianLocalizationList; +typedef QListIterator SymbianLocalizationListIterator; + class SymbianCommonGenerator { public: @@ -59,6 +73,7 @@ public: TypeSubdirs }; + SymbianCommonGenerator(MakefileGenerator *generator); virtual void init(); @@ -68,7 +83,9 @@ protected: QString removePathSeparators(QString &file); void removeSpecialCharacters(QString& str); void removeEpocSpecialCharacters(QString& str); - void generatePkgFile(const QString &iconFile, bool epocBuild); + void generatePkgFile(const QString &iconFile, + bool epocBuild, + const SymbianLocalizationList &symbianLocalizationList); bool containsStartWithItem(const QChar &c, const QStringList& src); void writeRegRssFile(QMap &useritems); @@ -76,15 +93,15 @@ protected: const QString &listTag, const QString &listItem); void writeRssFile(QString &numberOfIcons, QString &iconfile); - void writeLocFile(QStringList &symbianLangCodes); + void writeLocFile(const SymbianLocalizationList &symbianLocalizationList); void readRssRules(QString &numberOfIcons, QString &iconFile, QMap &userRssRules); void writeCustomDefFile(); - QStringList symbianLangCodesFromTsFiles(); - void fillQt2S60LangMapTable(); + void parseTsFiles(SymbianLocalizationList *symbianLocalizationList); + void fillQt2SymbianLocalizationList(SymbianLocalizationList *symbianLocalizationList); void parsePreRules(const QString &deploymentVariable, const QString &variableSuffix, @@ -95,7 +112,13 @@ protected: void parsePostRules(const QString &deploymentVariable, const QString &variableSuffix, QStringList *rawRuleList); - + bool parseTsContent(const QString &tsFilename, SymbianLocalization *loc); + QString generatePkgNameForHeader(const SymbianLocalizationList &symbianLocalizationList, + const QString &defaultName, + bool isForSmartInstaller); + void addLocalizedResourcesToDeployment(const QString &deploymentFilesVar, + const SymbianLocalizationList &symbianLocalizationList); + QString generateLocFileName(); protected: MakefileGenerator *generator; @@ -106,8 +129,6 @@ protected: QString privateDirUid; QString uid3; TargetType targetType; - - QHash qt2S60LangMapTable; }; #endif // SYMBIANCOMMON_H diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index 0b0033a..e1426ab 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -187,8 +187,8 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t) QMap userRssRules; readRssRules(numberOfIcons, iconFile, userRssRules); - // Get the application translations and convert to symbian OS lang code, i.e. decical number - QStringList symbianLangCodes = symbianLangCodesFromTsFiles(); + SymbianLocalizationList symbianLocalizationList; + parseTsFiles(&symbianLocalizationList); // Generate pkg files if there are any actual files to deploy bool generatePkg = false; @@ -205,7 +205,7 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t) } if (generatePkg) { - generatePkgFile(iconFile, true); + generatePkgFile(iconFile, true, symbianLocalizationList); } writeBldInfContent(t, generatePkg, iconFile); @@ -242,13 +242,13 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t) writeMkFile(wrapperFileName, false); QString absoluteMmpFileName = Option::output_dir + QLatin1Char('/') + mmpFileName; - writeMmpFile(absoluteMmpFileName, symbianLangCodes); + writeMmpFile(absoluteMmpFileName, symbianLocalizationList); if (targetType == TypeExe) { if (!project->isActiveConfig("no_icon")) { writeRegRssFile(userRssRules); writeRssFile(numberOfIcons, iconFile); - writeLocFile(symbianLangCodes); + writeLocFile(symbianLocalizationList); } } @@ -489,7 +489,7 @@ void SymbianMakefileGenerator::writeMmpFileHeader(QTextStream &t) t << "// ==============================================================================" << endl << endl; } -void SymbianMakefileGenerator::writeMmpFile(QString &filename, QStringList &symbianLangCodes) +void SymbianMakefileGenerator::writeMmpFile(QString &filename, const SymbianLocalizationList &symbianLocalizationList) { QFile ft(filename); if (ft.open(QIODevice::WriteOnly)) { @@ -501,7 +501,7 @@ void SymbianMakefileGenerator::writeMmpFile(QString &filename, QStringList &symb writeMmpFileTargetPart(t); - writeMmpFileResourcePart(t, symbianLangCodes); + writeMmpFileResourcePart(t, symbianLocalizationList); writeMmpFileMacrosPart(t); @@ -643,7 +643,7 @@ void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t) Application registration resource files should be installed to the \private\10003a3f\import\apps directory. */ -void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, QStringList &symbianLangCodes) +void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, const SymbianLocalizationList &symbianLocalizationList) { if ((targetType == TypeExe) && !project->isActiveConfig("no_icon")) { @@ -653,8 +653,10 @@ void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, QStringL t << "SOURCEPATH\t\t\t. " << endl; t << "LANG SC "; // no endl - foreach(QString lang, symbianLangCodes) { - t << lang << " "; // no endl + SymbianLocalizationListIterator iter(symbianLocalizationList); + while (iter.hasNext()) { + const SymbianLocalization &loc = iter.next(); + t << loc.symbianLanguageCode << " "; // no endl } t << endl; t << MMP_START_RESOURCE "\t\t" << locTarget << endl; @@ -1108,3 +1110,18 @@ void SymbianMakefileGenerator::generateDistcleanTargets(QTextStream& t) t << "distclean: clean dodistclean" << endl; t << endl; } + +// Returns a string that can be used as a dependency to loc file on other targets +QString SymbianMakefileGenerator::generateLocFileTarget(QTextStream& t, const QString& locCmd) +{ + QString locFile; + if (targetType == TypeExe && !project->isActiveConfig("no_icon")) { + locFile = Option::fixPathToLocalOS(generateLocFileName()); + t << locFile << QLatin1String(": ") << project->values("SYMBIAN_MATCHED_TRANSLATIONS").join(" ") << endl; + t << locCmd << endl; + t << endl; + locFile += QLatin1Char(' '); + } + + return locFile; +} \ No newline at end of file diff --git a/qmake/generators/symbian/symmake.h b/qmake/generators/symbian/symmake.h index a1a8e88..aba11de 100644 --- a/qmake/generators/symbian/symmake.h +++ b/qmake/generators/symbian/symmake.h @@ -97,11 +97,11 @@ protected: static bool removeDuplicatedStrings(QStringList& stringList); void writeMmpFileHeader(QTextStream &t); - void writeMmpFile(QString &filename, QStringList &symbianLangCodes); + void writeMmpFile(QString &filename, const SymbianLocalizationList &symbianLocalizationList); void writeMmpFileMacrosPart(QTextStream& t); void addMacro(QTextStream& t, const QString& value); void writeMmpFileTargetPart(QTextStream& t); - void writeMmpFileResourcePart(QTextStream& t, QStringList &symbianLangCodes); + void writeMmpFileResourcePart(QTextStream& t, const SymbianLocalizationList &symbianLocalizationList); void writeMmpFileSystemIncludePart(QTextStream& t); void writeMmpFileIncludePart(QTextStream& t); void writeMmpFileLibraryPart(QTextStream& t); @@ -131,6 +131,7 @@ protected: const QString& itemSuffix); void generateDistcleanTargets(QTextStream& t); + QString generateLocFileTarget(QTextStream& t, const QString& locCmd); // Subclass implements virtual void writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile) = 0; diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index f895109..7059a52 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -267,12 +267,14 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool t << "\tbldmake bldfiles" << endl; t << endl; - t << "debug: $(ABLD)" << endl; + QString locFileDep = generateLocFileTarget(t, qmakeCmd); + + t << "debug: " << locFileDep << "$(ABLD)" << endl; foreach(QString item, debugPlatforms) { t << "\t$(ABLD)" << testClause << " build " << item << " udeb" << endl; } t << endl; - t << "release: $(ABLD)" << endl; + t << "release: " << locFileDep << "$(ABLD)" << endl; foreach(QString item, releasePlatforms) { t << "\t$(ABLD)" << testClause << " build " << item << " urel" << endl; } @@ -280,12 +282,12 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool // For more specific builds, targets are in this form: build-platform, e.g. release-armv5 foreach(QString item, debugPlatforms) { - t << "debug-" << item << ": $(ABLD)" << endl; + t << "debug-" << item << ": " << locFileDep << "$(ABLD)" << endl; t << "\t$(ABLD)" << testClause << " build " << item << " udeb" << endl; } foreach(QString item, releasePlatforms) { - t << "release-" << item << ": $(ABLD)" << endl; + t << "release-" << item << ": " << locFileDep << "$(ABLD)" << endl; t << "\t$(ABLD)" << testClause << " build " << item << " urel" << endl; } diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index d650e08..b3f8ba2 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -386,8 +386,9 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << endl; QString currentClause; + QString locFileDep = generateLocFileTarget(t, qmakeCmd); - t << "debug: " << BLD_INF_FILENAME << endl; + t << "debug: " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)"; foreach(QString clause, debugClauses) { t << clause; @@ -399,7 +400,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << clause; } t << endl; - t << "release: " << BLD_INF_FILENAME << endl; + t << "release: " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)"; foreach(QString clause, releaseClauses) { t << clause; @@ -431,7 +432,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo else // use generic arm clause clause = configClause(item, debugBuild, defaultRvctCompilerVersion, genericArmClause); - t << "debug-" << item << ": " << BLD_INF_FILENAME << endl; + t << "debug-" << item << ": " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)" << clause << endl; t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << clause << endl; @@ -444,7 +445,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo else // use generic arm clause clause = configClause(item, releaseBuild, defaultRvctCompilerVersion, genericArmClause); - t << "release-" << item << ": " << BLD_INF_FILENAME << endl; + t << "release-" << item << ": " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)" << clause << endl; t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << clause << endl; @@ -454,11 +455,11 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo foreach(QString compilerVersion, allArmCompilerVersions) { QString debugClause = configClause(item, debugBuild, compilerVersion, armClause); QString releaseClause = configClause(item, releaseBuild, compilerVersion, armClause); - t << "debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; + t << "debug-" << item << "-" << compilerVersion << ": " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)" << debugClause << endl; t << "clean-debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << debugClause << endl; - t << "release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; + t << "release-" << item << "-" << compilerVersion << ": " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)" << releaseClause << endl; t << "clean-release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << releaseClause << endl; diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 65b8781..a236028 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -191,11 +191,9 @@ symbian: { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtOpenVG$${QT_LIBINFIX}.dll graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll # OpenVG requires Symbian^3 or later - pkg_platform_dependencies -= \ - "[0x101F7961],0,0,0,{\"S60ProductID\"}" \ - "[0x102032BE],0,0,0,{\"S60ProductID\"}" \ - "[0x102752AE],0,0,0,{\"S60ProductID\"}" \ - "[0x1028315F],0,0,0,{\"S60ProductID\"}" + pkg_platform_dependencies = \ + "[0x20022E6D],0,0,0,{\"S60ProductID\"}" \ + "[0x20032DE7],0,0,0,{\"S60ProductID\"}" } contains(QT_CONFIG, opengl) { diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp index 49906e0..76a8756 100644 --- a/tools/linguist/lupdate/main.cpp +++ b/tools/linguist/lupdate/main.cpp @@ -350,6 +350,10 @@ static void processProjects( ProFileEvaluator visitor; visitor.setVerbose(options & Verbose); + QHash lupdateConfig; + lupdateConfig.insert(QLatin1String("CONFIG"), QStringList(QLatin1String("lupdate_run"))); + visitor.addVariables(lupdateConfig); + QFileInfo pfi(proFile); ProFile pro(pfi.absoluteFilePath()); if (!visitor.queryProFile(&pro) || !visitor.accept(&pro)) { -- cgit v0.12 From ad8e7b27427825bee730c55735cd2554407205e4 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 12 Nov 2010 11:28:09 +0200 Subject: Add Location as self signable capability in patch_capabilities.pl Location was not originally included in self-signable set, since in S60 3.1 devices it is not so. However, it is a lesser of two evils to make applications with Location capability not install on 3.1 devices than make them not work correctly on any devices, so Location is now included in the self-signable set in patch_capabilities.pl. Task-number: QTBUG-13891 Reviewed-by: Janne Koskinen --- bin/patch_capabilities.pl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index 5230480..994d493 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -78,7 +78,7 @@ sub trim($) { my $nullDevice = "/dev/null"; $nullDevice = "NUL" if ($^O =~ /MSWin/); -my @capabilitiesToAllow = ("LocalServices", "NetworkServices", "ReadUserData", "UserEnvironment", "WriteUserData"); +my @capabilitiesToAllow = ("LocalServices", "NetworkServices", "ReadUserData", "UserEnvironment", "WriteUserData", "Location"); my @capabilitiesSpecified = (); # If arguments were given to the script, @@ -301,6 +301,9 @@ if (@ARGV) $_ = trim($_); if ($capabilitiesToAllow =~ /$_/) { push(@capabilitiesToSet, $_); + if (Location =~ /$_/i) { + print ("Patching: Warning - \"Location\" capability detected for binary: \"$binaryBaseName\". This capability is not self-signable for S60 3rd edition feature pack 1 devices, so installing this package on those devices will most likely not work.\n"); + } } else { push(@capabilitiesToDrop, $_); } @@ -319,6 +322,7 @@ if (@ARGV) # While libraries often have capabilities they do not themselves need just to enable them to be loaded by wider variety of processes, # executables are more likely to need every capability they have been assigned or they won't function correctly. print ("Patching: Executable with capabilities incompatible with self-signing detected: \"$binaryBaseName\". (Incompatible capabilities: \"$capsToDropStr\".) Reducing capabilities is only supported for libraries.\n"); + print ("Patching: Please use a proper developer certificate for signing this package.\n"); exit(1); } else { print ("Patching: The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package and will be removed: \"$capsToDropStr\".\n"); -- cgit v0.12 From 1f7ddb0525f7de24e195b2dd1a9f0374d19b2a05 Mon Sep 17 00:00:00 2001 From: Titta Heikkala Date: Mon, 15 Nov 2010 12:19:59 +0200 Subject: Native file dialog on Symbian^3 The static functions in QFileDialog use native file dialog and not QFileDialog on Symbian^3. Task-number: QT-3917 Reviewed-by: Sami Merila Merge-request: 918 Reviewed-by: Sami Merila --- src/gui/dialogs/dialogs.pri | 13 ++ src/gui/dialogs/qfiledialog.cpp | 72 ++++++++++-- src/gui/dialogs/qfiledialog_symbian.cpp | 202 ++++++++++++++++++++++++++++++++ 3 files changed, 278 insertions(+), 9 deletions(-) create mode 100644 src/gui/dialogs/qfiledialog_symbian.cpp diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index 4e1b9a7..483e9aa 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -108,6 +108,19 @@ SOURCES += \ dialogs/qwizard.cpp \ dialogs/qprintpreviewdialog.cpp +contains(QT_CONFIG, s60) { + LIBS += -lcommondialogs \ + -lavkon \ + -lplatformenv \ + -lefsrv \ + -lgdi + SOURCES += dialogs/qfiledialog_symbian.cpp \ + dialogs/qcolordialog_symbian.cpp +} + FORMS += dialogs/qpagesetupwidget.ui RESOURCES += dialogs/qprintdialog.qrc RESOURCES += dialogs/qmessagebox.qrc + +# Compensate for lack of platform defines in Symbian3 +symbian: DEFINES += SYMBIAN_VERSION_$$upper($$replace(SYMBIAN_VERSION,\\.,_)) diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index fc3c186..a5bff02 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -1616,6 +1616,25 @@ extern QStringList qt_win_get_open_file_names(const QFileDialogArgs &args, extern QString qt_win_get_existing_directory(const QFileDialogArgs &args); #endif +/* + For Symbian file dialogs +*/ +#if defined(Q_WS_S60) && defined(SYMBIAN_VERSION_SYMBIAN3) +extern QString qtSymbianGetOpenFileName(const QString &caption, + const QString &dir, + const QString &filter); + +extern QStringList qtSymbianGetOpenFileNames(const QString &caption, + const QString &dir, + const QString &filter); + +extern QString qtSymbianGetSaveFileName(const QString &caption, + const QString &dir); + +extern QString qtSymbianGetExistingDirectory(const QString &caption, + const QString &dir); +#endif + /*! This is a convenience static function that returns an existing file selected by the user. If the user presses Cancel, it returns a null string. @@ -1644,8 +1663,8 @@ extern QString qt_win_get_existing_directory(const QFileDialogArgs &args); The dialog's caption is set to \a caption. If \a caption is not specified then a default caption will be used. - On Windows and Mac OS X, this static function will use the native file - dialog and not a QFileDialog. + On Windows, Mac OS X and Symbian^3, this static function will use the + native file dialog and not a QFileDialog. On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if \a parent is not 0 then it will position the @@ -1657,6 +1676,10 @@ extern QString qt_win_get_existing_directory(const QFileDialogArgs &args); \a options includes DontResolveSymlinks, the file dialog will treat symlinks as regular directories. + On Symbian^3 the parameter \a selectedFilter has no meaning and the + \a options parameter is only used to define if the native file dialog is + used. + \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the QFileDialog constructors. @@ -1672,6 +1695,11 @@ QString QFileDialog::getOpenFileName(QWidget *parent, { if (qt_filedialog_open_filename_hook && !(options & DontUseNativeDialog)) return qt_filedialog_open_filename_hook(parent, caption, dir, filter, selectedFilter, options); +#if defined(Q_WS_S60) + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + return qtSymbianGetOpenFileName(caption, dir, filter); + } +#endif QFileDialogArgs args; args.parent = parent; args.caption = caption; @@ -1722,8 +1750,8 @@ QString QFileDialog::getOpenFileName(QWidget *parent, The dialog's caption is set to \a caption. If \a caption is not specified then a default caption will be used. - On Windows and Mac OS X, this static function will use the native file - dialog and not a QFileDialog. + On Windows, Mac OS X and Symbian^3, this static function will use the + native file dialog and not a QFileDialog. On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if \a parent is not 0 then it will position the @@ -1741,6 +1769,10 @@ QString QFileDialog::getOpenFileName(QWidget *parent, \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 10 + On Symbian^3 the parameter \a selectedFilter has no meaning and the + \a options parameter is only used to define if the native file dialog is + used. + \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the QFileDialog constructors. @@ -1756,6 +1788,11 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, { if (qt_filedialog_open_filenames_hook && !(options & DontUseNativeDialog)) return qt_filedialog_open_filenames_hook(parent, caption, dir, filter, selectedFilter, options); +#if defined(Q_WS_S60) + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + return qtSymbianGetOpenFileNames(caption, dir, filter); + } +#endif QFileDialogArgs args; args.parent = parent; args.caption = caption; @@ -1813,8 +1850,8 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, The dialog's caption is set to \a caption. If \a caption is not specified, a default caption will be used. - On Windows and Mac OS X, this static function will use the native file - dialog and not a QFileDialog. + On Windows, Mac OS X and Symbian^3, this static function will use the + native file dialog and not a QFileDialog. On Windows the dialog will spin a blocking modal event loop that will not dispatch any QTimers, and if \a parent is not 0 then it will position the @@ -1827,6 +1864,10 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, \a options includes DontResolveSymlinks the file dialog will treat symlinks as regular directories. + On Symbian^3 the parameters \a filter and \a selectedFilter have no + meaning. The \a options parameter is only used to define if the native file + dialog is used. + \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the QFileDialog constructors. @@ -1842,6 +1883,11 @@ QString QFileDialog::getSaveFileName(QWidget *parent, { if (qt_filedialog_save_filename_hook && !(options & DontUseNativeDialog)) return qt_filedialog_save_filename_hook(parent, caption, dir, filter, selectedFilter, options); +#if defined(Q_WS_S60) + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + return qtSymbianGetSaveFileName(caption, dir); + } +#endif QFileDialogArgs args; args.parent = parent; args.caption = caption; @@ -1890,9 +1936,9 @@ QString QFileDialog::getSaveFileName(QWidget *parent, pass. To ensure a native file dialog, \l{QFileDialog::}{ShowDirsOnly} must be set. - On Windows and Mac OS X, this static function will use the native file - dialog and not a QFileDialog. On Windows CE, if the device has no native - file dialog, a QFileDialog will be used. + On Windows, Mac OS X and Symbian^3, this static function will use the + native file dialog and not a QFileDialog. On Windows CE, if the device has + no native file dialog, a QFileDialog will be used. On Unix/X11, the normal behavior of the file dialog is to resolve and follow symlinks. For example, if \c{/usr/tmp} is a symlink to \c{/var/tmp}, @@ -1904,6 +1950,9 @@ QString QFileDialog::getSaveFileName(QWidget *parent, dispatch any QTimers, and if \a parent is not 0 then it will position the dialog just below the parent's title bar. + On Symbian^3 the \a options parameter is only used to define if the native + file dialog is used. + \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the QFileDialog constructors. @@ -1917,6 +1966,11 @@ QString QFileDialog::getExistingDirectory(QWidget *parent, { if (qt_filedialog_existing_directory_hook && !(options & DontUseNativeDialog)) return qt_filedialog_existing_directory_hook(parent, caption, dir, options); +#if defined(Q_WS_S60) + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + return qtSymbianGetExistingDirectory(caption, dir); + } +#endif QFileDialogArgs args; args.parent = parent; args.caption = caption; diff --git a/src/gui/dialogs/qfiledialog_symbian.cpp b/src/gui/dialogs/qfiledialog_symbian.cpp new file mode 100644 index 0000000..bd937a1 --- /dev/null +++ b/src/gui/dialogs/qfiledialog_symbian.cpp @@ -0,0 +1,202 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qfiledialog.h" + +#ifndef QT_NO_FILEDIALOG + +#include +#if defined(Q_WS_S60) && defined(SYMBIAN_VERSION_SYMBIAN3) +#include +#include +#include +#include +#endif +#include "private/qcore_symbian_p.h" + +QT_BEGIN_NAMESPACE + +enum DialogMode { DialogOpen, DialogSave, DialogFolder }; +#if defined(Q_WS_S60) && defined(SYMBIAN_VERSION_SYMBIAN3) +class CExtensionFilter : public MAknFileFilter +{ +public: + void setFilter(const QString filter) + { + filterList.clear(); + if (filter.left(2) == "*.") { + //Filter has only extensions + filterList << filter.split(" "); + return; + } + else { + //Extensions are in parenthesis and there may be several filters + QStringList separatedFilters(filter.split(";;")); + for (int i = 0; i < separatedFilters.size(); i++) { + if (separatedFilters.at(i) == QFileDialog::tr("All Files (*)")){ + filterList << QFileDialog::tr("All Files (*)"); + return; + } + } + QRegExp rx("\\(([^\\)]*)\\)"); + int pos = 0; + while ((pos = rx.indexIn(filter, pos)) != -1) { + filterList << rx.cap(1).split(" "); + pos += rx.matchedLength(); + } + } + } + + TBool Accept(const TDesC &/*aDriveAndPath*/, const TEntry &aEntry) const + { + if (aEntry.IsDir()) { + return ETrue; + } + if (filterList.isEmpty()) { + //No filter for files, all can be accepted + return ETrue; + } + if (filterList == QStringList(QFileDialog::tr("All Files (*)"))) { + return ETrue; + } + for (int i = 0; i < filterList.size(); ++i) { + QString extension = filterList.at(i); + //remove '*' from the beginning of the extension + if (extension.left(1) == "*"){ + extension = extension.right(extension.size() - 1); + } + QString fileName = qt_TDesC2QString(aEntry.iName); + if (fileName.right(extension.size()) == extension) { + return ETrue; + } + } + return EFalse; + } + +private: + QStringList filterList; +}; +#endif + +static QString launchSymbianDialog(const QString dialogCaption, const QString startDirectory, + const QString filter, DialogMode dialogMode) +{ + QString selection; +#if defined(Q_WS_S60) && defined(SYMBIAN_VERSION_SYMBIAN3) + QT_TRAP_THROWING( + TFileName startFolder; + if (!startDirectory.isEmpty()) { + QString dir = QDir::toNativeSeparators(startDirectory); + startFolder = qt_QString2TPtrC(dir); + } + TInt types = AknCommonDialogsDynMem::EMemoryTypeMMCExternal| + AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage| + AknCommonDialogsDynMem::EMemoryTypePhone; + + TPtrC titlePtr(qt_QString2TPtrC(dialogCaption)); + TFileName target; + bool select = false; + if (dialogMode == DialogOpen) { + CExtensionFilter* extensionFilter = new (ELeave) CExtensionFilter; + CleanupStack::PushL(extensionFilter); + extensionFilter->setFilter(filter); + select = AknCommonDialogsDynMem::RunSelectDlgLD(types, target, + startFolder, NULL, NULL, titlePtr, extensionFilter); + CleanupStack::Pop(extensionFilter); + } + else if (dialogMode == DialogSave){ + select = AknCommonDialogsDynMem::RunSaveDlgLD(types, target, + startFolder, NULL, NULL, titlePtr); + } + else if (dialogMode == DialogFolder){ + select = AknCommonDialogsDynMem::RunFolderSelectDlgLD(types, target, startFolder, + 0, 0, titlePtr, NULL, NULL); + } + if (select) { + selection.append(qt_TDesC2QString(target)); + } + ); +#endif + return selection; +} + +QString qtSymbianGetOpenFileName(const QString &caption, + const QString &dir, + const QString &filter) +{ + return launchSymbianDialog(caption, dir, filter, DialogOpen); +} + +QStringList qtSymbianGetOpenFileNames(const QString &caption, + const QString &dir, + const QString &filter) +{ + QString fileName; + fileName.append(launchSymbianDialog(caption, dir, filter, DialogOpen)); + QStringList fileList; + fileList << fileName; + + return fileList; +} + +QString qtSymbianGetSaveFileName(const QString &caption, + const QString &dir) +{ + return launchSymbianDialog(caption, dir, QString(), DialogSave); +} + +QString qtSymbianGetExistingDirectory(const QString &caption, + const QString &dir) +{ + QString folderCaption; + if (!caption.isEmpty()) { + folderCaption.append(caption); + } + else { + // Title for folder selection dialog is mandatory + folderCaption.append(QFileDialog::tr("Find Directory")); + } + return launchSymbianDialog(folderCaption, dir, QString(), DialogFolder); +} + +QT_END_NAMESPACE + +#endif -- cgit v0.12 From 4715182e9c600811c045fe5ed7989d4d52d1f4e9 Mon Sep 17 00:00:00 2001 From: Titta Heikkala Date: Mon, 15 Nov 2010 12:27:01 +0200 Subject: Documented usage of dialogs on Symbian Added quidance to documentation about using print dialogs on Symbian. Task-number: QT-4247 Reviewed-by: Sami Merila Merge-request: 920 Reviewed-by: Sami Merila --- src/gui/dialogs/qabstractprintdialog.cpp | 3 +++ src/gui/dialogs/qpagesetupdialog.cpp | 3 +++ src/gui/dialogs/qprintpreviewdialog.cpp | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/gui/dialogs/qabstractprintdialog.cpp b/src/gui/dialogs/qabstractprintdialog.cpp index 25d9ebb..641419f 100644 --- a/src/gui/dialogs/qabstractprintdialog.cpp +++ b/src/gui/dialogs/qabstractprintdialog.cpp @@ -65,6 +65,9 @@ class QPrintDialogPrivate : public QAbstractPrintDialogPrivate customize settings shown in print dialogs, but it is not used directly. Use QPrintDialog to display a print dialog in your application. + In Symbian, there is no support for printing. Hence, this dialog should not + be used in Symbian. + \sa QPrintDialog, QPrinter, {Printing with Qt} */ diff --git a/src/gui/dialogs/qpagesetupdialog.cpp b/src/gui/dialogs/qpagesetupdialog.cpp index 5d77de1..b5be942 100644 --- a/src/gui/dialogs/qpagesetupdialog.cpp +++ b/src/gui/dialogs/qpagesetupdialog.cpp @@ -62,6 +62,9 @@ QT_BEGIN_NAMESPACE page margins set on a QPrinter won't show in the native Mac OS X page setup dialog. + In Symbian, there is no support for printing. Hence, this dialog should not + be used in Symbian. + \sa QPrinter, QPrintDialog */ diff --git a/src/gui/dialogs/qprintpreviewdialog.cpp b/src/gui/dialogs/qprintpreviewdialog.cpp index f21343e..d74742a 100644 --- a/src/gui/dialogs/qprintpreviewdialog.cpp +++ b/src/gui/dialogs/qprintpreviewdialog.cpp @@ -676,6 +676,8 @@ void QPrintPreviewDialogPrivate::_q_zoomFactorChanged() Call QPrintPreviewDialog::exec() to show the preview dialog. \endlist + In Symbian, there is no support for printing. Hence, this dialog should not + be used in Symbian. \sa QPrinter, QPrintDialog, QPageSetupDialog, QPrintPreviewWidget */ -- cgit v0.12 From 012c865ab30ed45fc57ee5b49b625697cc065e82 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Fri, 12 Nov 2010 11:16:29 +0200 Subject: Removed unnecessary Q_OS_SYMBIAN flags from qdesktopservices_s60.cpp. This flags used to be Q_WS_S60 flags but as part of fabf804b they were changed to Q_OS_SYMBIAN. However since the whole while is only included to build when Q_OS_SYMBIAN is defined, the flags can be removed. Reviewed-by: mread --- src/gui/util/qdesktopservices_s60.cpp | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp index cd023cb..d1eeeae 100644 --- a/src/gui/util/qdesktopservices_s60.cpp +++ b/src/gui/util/qdesktopservices_s60.cpp @@ -62,15 +62,10 @@ // copied from miutset.h, so we don't get a dependency into the app layer const TUid KUidMsgTypeSMTP = {0x10001028}; // 268439592 -#ifdef Q_OS_SYMBIAN -# include // PathInfo -# ifdef USE_DOCUMENTHANDLER -# include // CDocumentHandler -# include -# endif -#else -# warning CDocumentHandler requires support for S60 -# undef USE_DOCUMENTHANDLER // Fallback to RApaLsSession based implementation +#include // PathInfo +#ifdef USE_DOCUMENTHANDLER +# include // CDocumentHandler +# include #endif QT_BEGIN_NAMESPACE @@ -268,7 +263,6 @@ static TDriveUnit writableExeDrive() static TPtrC writableDataRoot() { TDriveUnit drive = exeDrive(); -#ifdef Q_OS_SYMBIAN switch(drive.operator TInt()){ case EDriveC: return PathInfo::PhoneMemoryRootPath(); @@ -285,10 +279,6 @@ static TPtrC writableDataRoot() return PathInfo::PhoneMemoryRootPath(); break; } -#else -#warning No fallback implementation of writableDataRoot() - return 0; -#endif } static void openDocumentL(const TDesC& aUrl) @@ -395,21 +385,15 @@ QString QDesktopServices::storageLocation(StandardLocation type) break; case MusicLocation: path.Append(writableDataRoot()); -#ifdef Q_OS_SYMBIAN path.Append(PathInfo::SoundsPath()); -#endif break; case MoviesLocation: path.Append(writableDataRoot()); -#ifdef Q_OS_SYMBIAN path.Append(PathInfo::VideosPath()); -#endif break; case PicturesLocation: path.Append(writableDataRoot()); -#ifdef Q_OS_SYMBIAN path.Append(PathInfo::ImagesPath()); -#endif break; case TempLocation: return QDir::tempPath(); -- cgit v0.12 From d92cbfc5d04d750dea1e49a377e62be564cac788 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Mon, 15 Nov 2010 13:22:27 +0200 Subject: Switched qdesktopservices to use SchemeHandler for Symbian^3 and later. SchemeHandler is plugin extensible component to handle several different URI schemes. By default schemes such as http, https, rtsp, mailto, file, wtai, tel and cti are supported. In some devices/platforms also other schemes might be supported. This commit only defines the USE_SCHEMEHANDLER macro and re-orders the qdesktopservices_s60 source code to make it more readable and to make it compile both with and without the flag. The actual implementation was provided at the same time when qdesktopservices for symbian was initially implemented. Why support is enabled only for Symbian^3 and later? SchemeHandler component does not exist in S60 3.1 - 5.0 public SDKs, actually it does not exist also in Forum Nokia provided Symbian^3 SDK, but is available in Symbian^3 PDK. Since building Qt for Symbian^3 anyway require PDK and because the release builds for Symbian^3 are done separately from older Symbian versions, PDK dependency should be Ok. It might be that SchemeHandler headers will be relicensed as part of Qt, then SchemeHandler support also for older S60/Symbian releases can be enabled. If this happens it will be separate commit. Task-number: QTBUG-15282 Reviewed-by: Miikka Heikkinen --- src/gui/util/qdesktopservices_s60.cpp | 162 ++++++++++++++++++---------------- src/gui/util/util.pri | 19 ++-- 2 files changed, 97 insertions(+), 84 deletions(-) diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp index d1eeeae..47b0cbe 100644 --- a/src/gui/util/qdesktopservices_s60.cpp +++ b/src/gui/util/qdesktopservices_s60.cpp @@ -45,27 +45,29 @@ #include #include -#include // CRichText #include // TDriveUnit etc -#include // CEikonEnv -#include // RApaLsSession -#include // TApaTaskList, TApaTask -#include // RSendAs -#include // RSendAsMessage +#include // PathInfo +#ifndef USE_SCHEMEHANDLER #ifdef Q_WS_S60 // This flag changes the implementation to use S60 CDcoumentHandler -// instead of apparch when opening the files +// instead of apparc when opening the files #define USE_DOCUMENTHANDLER #endif -// copied from miutset.h, so we don't get a dependency into the app layer -const TUid KUidMsgTypeSMTP = {0x10001028}; // 268439592 +#include // CRichText +#include // CEikonEnv +#include // RApaLsSession +#include // TApaTaskList, TApaTask +#include // RSendAs +#include // RSendAsMessage -#include // PathInfo #ifdef USE_DOCUMENTHANDLER -# include // CDocumentHandler -# include +#include // CDocumentHandler +#include +#endif +#else // USE_SCHEMEHANDLER +#include #endif QT_BEGIN_NAMESPACE @@ -74,6 +76,10 @@ _LIT(KCacheSubDir, "Cache\\"); _LIT(KSysBin, "\\Sys\\Bin\\"); _LIT(KBrowserPrefix, "4 " ); _LIT(KFontsDir, "z:\\resource\\Fonts\\"); + +#ifndef USE_SCHEMEHANDLER +// copied from miutset.h, so we don't get a dependency into the app layer +const TUid KUidMsgTypeSMTP = {0x10001028}; // 268439592 const TUid KUidBrowser = { 0x10008D39 }; template @@ -132,7 +138,6 @@ private: Q_GLOBAL_STATIC(QS60DocumentHandler, qt_s60_documenthandler); #endif - static void handleMailtoSchemeLX(const QUrl &url) { // this function has many intermingled leaves and throws. Qt and Symbian objects do not have @@ -150,12 +155,10 @@ static void handleMailtoSchemeLX(const QUrl &url) QStringList ccs = cc.split(QLatin1String(","), QString::SkipEmptyParts); QStringList bccs = bcc.split(QLatin1String(","), QString::SkipEmptyParts); - RSendAs sendAs; User::LeaveIfError(sendAs.Connect()); QAutoClose sendAsCleanup(sendAs); - CSendAsAccounts* accounts = CSendAsAccounts::NewL(); CleanupStack::PushL(accounts); sendAs.AvailableAccountsL(KUidMsgTypeSMTP, *accounts); @@ -244,42 +247,6 @@ static bool handleOtherSchemes(const QUrl &url) return err ? false : true; } -static TDriveUnit exeDrive() -{ - RProcess me; - TFileName processFileName = me.FileName(); - TDriveUnit drive(processFileName); - return drive; -} - -static TDriveUnit writableExeDrive() -{ - TDriveUnit drive = exeDrive(); - if(drive.operator TInt() == EDriveZ) - return TDriveUnit(EDriveC); - return drive; -} - -static TPtrC writableDataRoot() -{ - TDriveUnit drive = exeDrive(); - switch(drive.operator TInt()){ - case EDriveC: - return PathInfo::PhoneMemoryRootPath(); - break; - case EDriveE: - return PathInfo::MemoryCardRootPath(); - break; - case EDriveZ: - // It is not possible to write on ROM drive -> - // return phone mem root path instead - return PathInfo::PhoneMemoryRootPath(); - break; - default: - return PathInfo::PhoneMemoryRootPath(); - break; - } -} static void openDocumentL(const TDesC& aUrl) { @@ -304,13 +271,44 @@ static void openDocumentL(const TDesC& aUrl) #endif } -#ifdef USE_SCHEMEHANDLER +static bool launchWebBrowser(const QUrl &url) +{ + if (!url.isValid()) + return false; + + if (url.scheme() == QLatin1String("mailto")) { + return handleMailtoScheme(url); + } + return handleOtherSchemes( url ); +} + +static bool openDocument(const QUrl &file) +{ + if (!file.isValid()) + return false; + + QString filePath = file.toLocalFile(); + filePath = QDir::toNativeSeparators(filePath); + TPtrC filePathPtr(qt_QString2TPtrC(filePath)); + TRAPD(err, openDocumentL(filePathPtr)); + return err ? false : true; +} + +#else //USE_SCHEMEHANDLER // The schemehandler component only exist in private SDK. This implementation // exist here just for convenience in case that we need to use it later on // The schemehandle based implementation is not yet tested. // The biggest advantage of schemehandler is that it can handle // wide range of schemes and is extensible by plugins +static void handleUrlL(const TDesC& aUrl) +{ + CSchemeHandler* schemeHandler = CSchemeHandler::NewL(aUrl); + CleanupStack::PushL(schemeHandler); + schemeHandler->HandleUrlStandaloneL(); // Process the Url in standalone mode + CleanupStack::PopAndDestroy(); +} + static bool handleUrl(const QUrl &url) { if (!url.isValid()) @@ -322,13 +320,6 @@ static bool handleUrl(const QUrl &url) return err ? false : true; } -static void handleUrlL(const TDesC& aUrl) -{ - CSchemeHandler* schemeHandler = CSchemeHandler::NewL(aUrl); - CleanupStack::PushL(schemeHandler); - schemeHandler->HandleUrlStandaloneL(); // Process the Url in standalone mode - CleanupStack::PopAndDestroy(); -} static bool launchWebBrowser(const QUrl &url) { return handleUrl(url); @@ -336,31 +327,48 @@ static bool launchWebBrowser(const QUrl &url) static bool openDocument(const QUrl &file) { - return handleUrl(url); + return handleUrl(file); } -#endif -static bool launchWebBrowser(const QUrl &url) -{ - if (!url.isValid()) - return false; +#endif //USE_SCHEMEHANDLER - if (url.scheme() == QLatin1String("mailto")) { - return handleMailtoScheme(url); - } - return handleOtherSchemes( url ); +// Common functions to all implementations + +static TDriveUnit exeDrive() +{ + RProcess me; + TFileName processFileName = me.FileName(); + TDriveUnit drive(processFileName); + return drive; } -static bool openDocument(const QUrl &file) +static TDriveUnit writableExeDrive() { - if (!file.isValid()) - return false; + TDriveUnit drive = exeDrive(); + if(drive.operator TInt() == EDriveZ) + return TDriveUnit(EDriveC); + return drive; +} - QString filePath = file.toLocalFile(); - filePath = QDir::toNativeSeparators(filePath); - TPtrC filePathPtr(qt_QString2TPtrC(filePath)); - TRAPD(err, openDocumentL(filePathPtr)); - return err ? false : true; +static TPtrC writableDataRoot() +{ + TDriveUnit drive = exeDrive(); + switch(drive.operator TInt()){ + case EDriveC: + return PathInfo::PhoneMemoryRootPath(); + break; + case EDriveE: + return PathInfo::MemoryCardRootPath(); + break; + case EDriveZ: + // It is not possible to write on ROM drive -> + // return phone mem root path instead + return PathInfo::PhoneMemoryRootPath(); + break; + default: + return PathInfo::PhoneMemoryRootPath(); + break; + } } QString QDesktopServices::storageLocation(StandardLocation type) diff --git a/src/gui/util/util.pri b/src/gui/util/util.pri index bea520e..d1c4ff8 100644 --- a/src/gui/util/util.pri +++ b/src/gui/util/util.pri @@ -43,12 +43,17 @@ embedded { } symbian { - LIBS += -lsendas2 -letext -lapmime -lplatformenv - contains(QT_CONFIG, s60) { - contains(CONFIG, is_using_gnupoc) { - LIBS += -lcommonui - } else { - LIBS += -lCommonUI + LIBS += -letext -lplatformenv + contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) { + LIBS += -lsendas2 -lapmime + contains(QT_CONFIG, s60) { + contains(CONFIG, is_using_gnupoc) { + LIBS += -lcommonui + } else { + LIBS += -lCommonUI + } } + } else { + DEFINES += USE_SCHEMEHANDLER } -} +} \ No newline at end of file -- cgit v0.12 From 03c60ccac1ab416ebee7a262f1c910774fdc2ff2 Mon Sep 17 00:00:00 2001 From: Janne Anttila Date: Mon, 15 Nov 2010 14:28:25 +0200 Subject: Fixed code style of d92cbfc5, reported by git push. 82: TAB character in non-leading whitespace 348: Flow control keywords must be followed by single space 356: Flow control keywords must be followed by single space Rev-By: TrustMe --- src/gui/util/qdesktopservices_s60.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp index 47b0cbe..56c2b98 100644 --- a/src/gui/util/qdesktopservices_s60.cpp +++ b/src/gui/util/qdesktopservices_s60.cpp @@ -79,7 +79,7 @@ _LIT(KFontsDir, "z:\\resource\\Fonts\\"); #ifndef USE_SCHEMEHANDLER // copied from miutset.h, so we don't get a dependency into the app layer -const TUid KUidMsgTypeSMTP = {0x10001028}; // 268439592 +const TUid KUidMsgTypeSMTP = {0x10001028}; // 268439592 const TUid KUidBrowser = { 0x10008D39 }; template @@ -345,7 +345,7 @@ static TDriveUnit exeDrive() static TDriveUnit writableExeDrive() { TDriveUnit drive = exeDrive(); - if(drive.operator TInt() == EDriveZ) + if (drive.operator TInt() == EDriveZ) return TDriveUnit(EDriveC); return drive; } @@ -353,7 +353,7 @@ static TDriveUnit writableExeDrive() static TPtrC writableDataRoot() { TDriveUnit drive = exeDrive(); - switch(drive.operator TInt()){ + switch (drive.operator TInt()){ case EDriveC: return PathInfo::PhoneMemoryRootPath(); break; -- cgit v0.12 From 515fd562d87290c3fc0eb45817434dd0744d346e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 15 Nov 2010 14:15:25 +0200 Subject: Use include(original mkspec) instead of copying of mkspec to default Having QMAKESPEC_ORIGINAL at the end of the default qmake.conf sets the mkspec too late for scope checks in symbian-mmp.conf and related files. Fixed by changing how default mkspec is handled: it is no longer simply copied over to mkspecs/default by configure but rather included with include statement in the generated mkspecs/default/qmake.conf after setting of QMAKESPEC_ORIGINAL value. This should also fix any issues with relative includes in mkspecs used as default that are not on same level as mkspecs/default folder. Task-number: QTBUG-15159 Reviewed-by: Oswald Buddenhagen Reviewed-by: Joerg Bornemann --- tools/configure/configureapp.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 3808c4e..3c12eb9 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3227,7 +3227,8 @@ void Configure::generateConfigfiles() } // Copy configured mkspec to default directory, but remove the old one first, if there is any - QString defSpec = buildPath + "/mkspecs/default"; + QString mkspecsPath = buildPath + "/mkspecs"; + QString defSpec = mkspecsPath + "/default"; QFileInfo defSpecInfo(defSpec); if (defSpecInfo.exists()) { if (!Environment::rmdir(defSpec)) { @@ -3237,21 +3238,22 @@ void Configure::generateConfigfiles() } } - QString spec = dictionary.contains("XQMAKESPEC") ? dictionary["XQMAKESPEC"] : dictionary["QMAKESPEC"]; - QString pltSpec = sourcePath + "/mkspecs/" + spec; - if (!Environment::cpdir(pltSpec, defSpec)) { - cout << "Couldn't update default mkspec! Does " << qPrintable(pltSpec) << " exist?" << endl; + QDir mkspecsDir(mkspecsPath); + if (!mkspecsDir.mkdir("default")) { + cout << "Couldn't create default mkspec dir!" << endl; dictionary["DONE"] = "error"; return; } + QString spec = dictionary.contains("XQMAKESPEC") ? dictionary["XQMAKESPEC"] : dictionary["QMAKESPEC"]; + QString pltSpec = sourcePath + "/mkspecs/" + spec; outName = defSpec + "/qmake.conf"; - ::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL); QFile qmakeConfFile(outName); - if (qmakeConfFile.open(QFile::Append | QFile::WriteOnly | QFile::Text)) { + if (qmakeConfFile.open(QFile::WriteOnly | QFile::Text)) { QTextStream qmakeConfStream; qmakeConfStream.setDevice(&qmakeConfFile); - qmakeConfStream << endl << "QMAKESPEC_ORIGINAL=" << pltSpec << endl; + qmakeConfStream << "QMAKESPEC_ORIGINAL=" << pltSpec << endl << endl; + qmakeConfStream << "include(" << pltSpec << "/qmake.conf)" << endl; qmakeConfStream.flush(); qmakeConfFile.close(); } -- cgit v0.12 From 14ddf44ce2fdd7195741b9683226a3cd774e17e4 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Wed, 17 Nov 2010 14:59:15 +0200 Subject: Fix for WServ 64 crash on Symbian. Crash happens if application first sets WA_OpaquePaintEvent flag and then sets WA_TranslucentBackground flag. In that case WA_TranslucentBackground flag is ineffective leading to situation where Qt Symbian adaptation tries to reset native window transparency but because native window is already opaque due to WA_OpaquePaintEvent, WServ 64 crash occurs. Task-number: QTBUG-15369 Reviewed-by: Jason Barron --- src/gui/kernel/qwidget_p.h | 1 + src/gui/kernel/qwidget_s60.cpp | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index ca1e3fc..6a27469 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -226,6 +226,7 @@ struct QTLWExtra { #endif #elif defined(Q_OS_SYMBIAN) uint inExpose : 1; // Prevents drawing recursion + uint nativeWindowTransparencyEnabled : 1; // Tracks native window transparency #endif }; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index cf4bdf1..6ce46d3 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -767,17 +767,24 @@ void QWidgetPrivate::s60UpdateIsOpaque() if (!q->testAttribute(Qt::WA_WState_Created) || !q->testAttribute(Qt::WA_TranslucentBackground)) return; + createTLExtra(); + RWindow *const window = static_cast(q->effectiveWinId()->DrawableWindow()); #ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE window->SetSurfaceTransparency(!isOpaque); + extra->topextra->nativeWindowTransparencyEnabled = !isOpaque; #else if (!isOpaque) { const TDisplayMode displayMode = static_cast(window->SetRequiredDisplayMode(EColor16MA)); - if (window->SetTransparencyAlphaChannel() == KErrNone) + if (window->SetTransparencyAlphaChannel() == KErrNone) { window->SetBackgroundColor(TRgb(255, 255, 255, 0)); - } else + extra->topextra->nativeWindowTransparencyEnabled = 1; + } + } else if (extra->topextra->nativeWindowTransparencyEnabled) { window->SetTransparentRegion(TRegionFix<1>()); + extra->topextra->nativeWindowTransparencyEnabled = 0; + } #endif } @@ -936,6 +943,7 @@ void QWidgetPrivate::registerDropSite(bool /* on */) void QWidgetPrivate::createTLSysExtra() { extra->topextra->inExpose = 0; + extra->topextra->nativeWindowTransparencyEnabled = 0; } void QWidgetPrivate::deleteTLSysExtra() -- cgit v0.12 From fd7c4c07c20eaff247be33826ae0af099c178494 Mon Sep 17 00:00:00 2001 From: Titta Heikkala Date: Wed, 17 Nov 2010 10:15:15 +0200 Subject: Correct flags for Symbian file dialogs Corrected the flags for extern functions Task-number: QT-3917 Reviewed-by: Janne Koskinen Merge-request: 918 Reviewed-by: Janne Koskinen --- src/gui/dialogs/qfiledialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index a5bff02..0b789cc 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -1619,7 +1619,7 @@ extern QString qt_win_get_existing_directory(const QFileDialogArgs &args); /* For Symbian file dialogs */ -#if defined(Q_WS_S60) && defined(SYMBIAN_VERSION_SYMBIAN3) +#if defined(Q_WS_S60) extern QString qtSymbianGetOpenFileName(const QString &caption, const QString &dir, const QString &filter); -- cgit v0.12 From 518b284673d66ed4a2961a88646ec012cedc96bd Mon Sep 17 00:00:00 2001 From: Titta Heikkala Date: Thu, 18 Nov 2010 11:34:13 +0200 Subject: Removed extra cpp and done changes based on comments qcolordialog_symbian.cpp is removed from dialogs.pri and string comparison corrected based on comments. Task-number: QT-3917 Reviewed-by: Janne Koskinen Merge-request: 918 Reviewed-by: Janne Koskinen --- src/gui/dialogs/dialogs.pri | 3 +-- src/gui/dialogs/qfiledialog.cpp | 9 +++------ src/gui/dialogs/qfiledialog_symbian.cpp | 22 ++++++++++------------ 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index 483e9aa..c7cb794 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -114,8 +114,7 @@ contains(QT_CONFIG, s60) { -lplatformenv \ -lefsrv \ -lgdi - SOURCES += dialogs/qfiledialog_symbian.cpp \ - dialogs/qcolordialog_symbian.cpp + SOURCES += dialogs/qfiledialog_symbian.cpp } FORMS += dialogs/qpagesetupwidget.ui diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 0b789cc..1db9789 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -1696,9 +1696,8 @@ QString QFileDialog::getOpenFileName(QWidget *parent, if (qt_filedialog_open_filename_hook && !(options & DontUseNativeDialog)) return qt_filedialog_open_filename_hook(parent, caption, dir, filter, selectedFilter, options); #if defined(Q_WS_S60) - if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) return qtSymbianGetOpenFileName(caption, dir, filter); - } #endif QFileDialogArgs args; args.parent = parent; @@ -1789,9 +1788,8 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, if (qt_filedialog_open_filenames_hook && !(options & DontUseNativeDialog)) return qt_filedialog_open_filenames_hook(parent, caption, dir, filter, selectedFilter, options); #if defined(Q_WS_S60) - if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) return qtSymbianGetOpenFileNames(caption, dir, filter); - } #endif QFileDialogArgs args; args.parent = parent; @@ -1884,9 +1882,8 @@ QString QFileDialog::getSaveFileName(QWidget *parent, if (qt_filedialog_save_filename_hook && !(options & DontUseNativeDialog)) return qt_filedialog_save_filename_hook(parent, caption, dir, filter, selectedFilter, options); #if defined(Q_WS_S60) - if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) return qtSymbianGetSaveFileName(caption, dir); - } #endif QFileDialogArgs args; args.parent = parent; diff --git a/src/gui/dialogs/qfiledialog_symbian.cpp b/src/gui/dialogs/qfiledialog_symbian.cpp index bd937a1..0277e1c 100644 --- a/src/gui/dialogs/qfiledialog_symbian.cpp +++ b/src/gui/dialogs/qfiledialog_symbian.cpp @@ -62,24 +62,23 @@ public: void setFilter(const QString filter) { filterList.clear(); - if (filter.left(2) == "*.") { + if (filter.left(2) == QLatin1String("*.")) { //Filter has only extensions filterList << filter.split(" "); return; - } - else { + } else { //Extensions are in parenthesis and there may be several filters - QStringList separatedFilters(filter.split(";;")); + QStringList separatedFilters(filter.split(QLatin1String(";;"))); for (int i = 0; i < separatedFilters.size(); i++) { - if (separatedFilters.at(i) == QFileDialog::tr("All Files (*)")){ - filterList << QFileDialog::tr("All Files (*)"); + if (separatedFilters.at(i).contains(QLatin1String("(*)"))) { + filterList << QLatin1String("(*)"); return; } } QRegExp rx("\\(([^\\)]*)\\)"); int pos = 0; while ((pos = rx.indexIn(filter, pos)) != -1) { - filterList << rx.cap(1).split(" "); + filterList << rx.cap(1).split(QLatin1String(" ")); pos += rx.matchedLength(); } } @@ -94,7 +93,7 @@ public: //No filter for files, all can be accepted return ETrue; } - if (filterList == QStringList(QFileDialog::tr("All Files (*)"))) { + if (filterList == QStringList(QLatin1String("(*)"))) { return ETrue; } for (int i = 0; i < filterList.size(); ++i) { @@ -142,11 +141,11 @@ static QString launchSymbianDialog(const QString dialogCaption, const QString st startFolder, NULL, NULL, titlePtr, extensionFilter); CleanupStack::Pop(extensionFilter); } - else if (dialogMode == DialogSave){ + else if (dialogMode == DialogSave) { select = AknCommonDialogsDynMem::RunSaveDlgLD(types, target, startFolder, NULL, NULL, titlePtr); } - else if (dialogMode == DialogFolder){ + else if (dialogMode == DialogFolder) { select = AknCommonDialogsDynMem::RunFolderSelectDlgLD(types, target, startFolder, 0, 0, titlePtr, NULL, NULL); } @@ -189,8 +188,7 @@ QString qtSymbianGetExistingDirectory(const QString &caption, QString folderCaption; if (!caption.isEmpty()) { folderCaption.append(caption); - } - else { + } else { // Title for folder selection dialog is mandatory folderCaption.append(QFileDialog::tr("Find Directory")); } -- cgit v0.12 From 4e73e8b530f77bf1f43042fb07038eb51cb0238f Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Thu, 18 Nov 2010 12:01:04 +0200 Subject: Fix for QtOpenGL RVCT4 compilation error RVCT4 has strict lookup rules. Calls from function ,that depends on a template parameter, to internal static functions must be qualified. Task-number: QTBUG-15424 Reviewed-by: Jason Barron --- src/opengl/gl2paintengineex/qtriangulator.cpp | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/opengl/gl2paintengineex/qtriangulator.cpp b/src/opengl/gl2paintengineex/qtriangulator.cpp index 85f604a..4c3deb6 100644 --- a/src/opengl/gl2paintengineex/qtriangulator.cpp +++ b/src/opengl/gl2paintengineex/qtriangulator.cpp @@ -339,7 +339,7 @@ static inline qint64 qPointDistanceFromLine(const QPodPoint &p, const QPodPoint static inline bool qPointIsLeftOfLine(const QPodPoint &p, const QPodPoint &v1, const QPodPoint &v2) { - return qPointDistanceFromLine(p, v1, v2) < 0; + return ::qPointDistanceFromLine(p, v1, v2) < 0; } // Return: @@ -1741,7 +1741,7 @@ bool QTriangulator::ComplexToSimple::calculateIntersection(int left, int righ Intersection intersection; intersection.leftEdge = left; intersection.rightEdge = right; - intersection.intersectionPoint = qIntersectionPoint(u1, u2, v1, v2); + intersection.intersectionPoint = ::qIntersectionPoint(u1, u2, v1, v2); if (!intersection.intersectionPoint.isValid()) return false; @@ -1767,10 +1767,10 @@ bool QTriangulator::ComplexToSimple::edgeIsLeftOfEdge(int leftEdgeIndex, int return true; if (upper.x > qMax(l.x, u.x)) return false; - qint64 d = qPointDistanceFromLine(upper, l, u); + qint64 d = ::qPointDistanceFromLine(upper, l, u); // d < 0: left, d > 0: right, d == 0: on top if (d == 0) - d = qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.lower()), l, u); + d = ::qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.lower()), l, u); return d < 0; } @@ -1814,7 +1814,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(point, v1, v2); + qint64 d = ::qPointDistanceFromLine(point, v1, v2); if (d == 0) { result.first = result.second = current; break; @@ -1828,7 +1828,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(point, v1, v2); + qint64 d = ::qPointDistanceFromLine(point, v1, v2); Q_ASSERT(d >= 0); if (d == 0) { result.first = current; @@ -1842,7 +1842,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(point, v1, v2); + qint64 d = ::qPointDistanceFromLine(point, v1, v2); Q_ASSERT(d <= 0); if (d == 0) { result.second = current; @@ -1864,7 +1864,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(point, v1, v2); + qint64 d = ::qPointDistanceFromLine(point, v1, v2); if (d == 0) break; if (d < 0) { @@ -1885,7 +1885,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(point, v1, v2); + qint64 d = ::qPointDistanceFromLine(point, v1, v2); Q_ASSERT(d >= 0); if (d == 0) { current = current->left; @@ -1899,7 +1899,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(point, v1, v2); + qint64 d = ::qPointDistanceFromLine(point, v1, v2); Q_ASSERT(d <= 0); if (d == 0) { current = current->right; @@ -1962,7 +1962,7 @@ void QTriangulator::ComplexToSimple::reorderEdgeListRange(QRBTree::Node template void QTriangulator::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint) { - QIntersectionPoint eventPoint2 = qIntersectionPoint(eventPoint); + QIntersectionPoint eventPoint2 = ::qIntersectionPoint(eventPoint); while (!m_topIntersection.isEmpty() && m_topIntersection.top().intersectionPoint < eventPoint2) { Intersection intersection = m_topIntersection.pop(); @@ -2056,7 +2056,7 @@ void QTriangulator::ComplexToSimple::calculateIntersections() QPair::Node *, QRBTree::Node *> range = bounds(event.point); QRBTree::Node *leftNode = range.first ? m_edgeList.previous(range.first) : 0; int vertex = (event.type == Event::Upper ? m_edges.at(event.edge).upper() : m_edges.at(event.edge).lower()); - QIntersectionPoint eventPoint = qIntersectionPoint(event.point); + QIntersectionPoint eventPoint = ::qIntersectionPoint(event.point); if (range.first != 0) { splitEdgeListRange(range.first, range.second, vertex, eventPoint); @@ -2213,7 +2213,7 @@ void QTriangulator::ComplexToSimple::removeUnwantedEdgesAndConnect() while (current != b.second) { Q_ASSERT(current); Q_ASSERT(m_edges.at(current->data).node == current); - Q_ASSERT(qIntersectionPoint(event.point).isOnLine(m_parent->m_vertices.at(m_edges.at(current->data).from), m_parent->m_vertices.at(m_edges.at(current->data).to))); + Q_ASSERT(::qIntersectionPoint(event.point).isOnLine(m_parent->m_vertices.at(m_edges.at(current->data).from), m_parent->m_vertices.at(m_edges.at(current->data).to))); Q_ASSERT(m_parent->m_vertices.at(m_edges.at(current->data).from) == event.point || m_parent->m_vertices.at(m_edges.at(current->data).to) == event.point); insertEdgeIntoVectorIfWanted(orderedEdges, current->data); current = m_edgeList.next(current); @@ -2612,10 +2612,10 @@ bool QTriangulator::SimpleToMonotone::edgeIsLeftOfEdge(int leftEdgeIndex, int const Edge &rightEdge = m_edges.at(rightEdgeIndex); const QPodPoint &u = m_parent->m_vertices.at(rightEdge.upper()); const QPodPoint &l = m_parent->m_vertices.at(rightEdge.lower()); - qint64 d = qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.upper()), l, u); + qint64 d = ::qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.upper()), l, u); // d < 0: left, d > 0: right, d == 0: on top if (d == 0) - d = qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.lower()), l, u); + d = ::qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.lower()), l, u); return d < 0; } @@ -2645,7 +2645,7 @@ QRBTree::Node *QTriangulator::SimpleToMonotone::searchEdgeLeftOfPoint(in while (current) { const QPodPoint &p1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &p2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = qPointDistanceFromLine(m_parent->m_vertices.at(pointIndex), p1, p2); + qint64 d = ::qPointDistanceFromLine(m_parent->m_vertices.at(pointIndex), p1, p2); if (d <= 0) { current = current->left; } else { @@ -2668,7 +2668,7 @@ void QTriangulator::SimpleToMonotone::classifyVertex(int i) const QPodPoint &p1 = m_parent->m_vertices.at(e1.from); const QPodPoint &p2 = m_parent->m_vertices.at(e2.from); const QPodPoint &p3 = m_parent->m_vertices.at(e2.to); - qint64 d = qPointDistanceFromLine(p1, p2, p3); + qint64 d = ::qPointDistanceFromLine(p1, p2, p3); Q_ASSERT(d != 0 || (!startOrSplit && !endOrMerge)); e2.type = RegularVertex; -- cgit v0.12 From dfd5ee41532b55ef6aaa5fb7ed3b586fbac80fce Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 18 Nov 2010 12:39:09 +0200 Subject: Make epocroot resolving compatible with more build environments This commit prepares epocroot.cpp and registry.cpp to be compilable by lrelease and corelib. Task-number: QTBUG-15393 Reviewed-by: axis --- tools/shared/symbian/epocroot.cpp | 100 ++++++++++++++++++-------------------- tools/shared/windows/registry.cpp | 8 +-- 2 files changed, 51 insertions(+), 57 deletions(-) diff --git a/tools/shared/symbian/epocroot.cpp b/tools/shared/symbian/epocroot.cpp index ae1dcb1..9d7d465 100644 --- a/tools/shared/symbian/epocroot.cpp +++ b/tools/shared/symbian/epocroot.cpp @@ -64,23 +64,13 @@ // Stored as a static value in order to avoid unnecessary re-evaluation. static QString epocRootValue; -#ifdef QT_BUILD_QMAKE -std::ostream &operator<<(std::ostream &s, const QString &val) { - s << val.toLocal8Bit().data(); - return s; -} -#else -// Operator implemented in configureapp.cpp -std::ostream &operator<<(std::ostream &s, const QString &val); -#endif - QString getDevicesXmlPath() { // Note that the following call will return a null string on platforms other // than Windows. If support is required on other platforms for devices.xml, // an alternative mechanism for retrieving the location of this file will // be required. - return readRegistryKey(SYMBIAN_SDKS_REG_HANDLE, SYMBIAN_SDKS_REG_SUBKEY); + return readRegistryKey(SYMBIAN_SDKS_REG_HANDLE, QLatin1String(SYMBIAN_SDKS_REG_SUBKEY)); } /** @@ -92,7 +82,8 @@ void checkEpocRootExists(const QString &source) if (!epocRootValue.isEmpty()) { QDir dir(epocRootValue); if (!dir.exists()) { - std::cerr << "Warning: " << source << " is set to an invalid path: " << epocRootValue << std::endl; + qWarning("Warning: %s is set to an invalid path: '%s'", qPrintable(source), + qPrintable(epocRootValue)); epocRootValue = QString(); } } @@ -103,10 +94,10 @@ void checkEpocRootExists(const QString &source) */ static void fixEpocRoot(QString &path) { - path.replace("\\", "/"); + path.replace(QLatin1Char('\\'), QLatin1Char('/')); - if (!path.size() || path[path.size()-1] != QChar('/')) { - path += QChar('/'); + if (!path.size() || path[path.size()-1] != QLatin1Char('/')) { + path += QLatin1Char('/'); } } @@ -118,17 +109,15 @@ QString epocRoot() if (epocRootValue.isEmpty()) { // 1. If environment variable EPOCROOT is set and points to an existent // directory, this is returned. - epocRootValue = qgetenv("EPOCROOT"); - checkEpocRootExists("EPOCROOT"); + epocRootValue = QString::fromLocal8Bit(qgetenv("EPOCROOT").constData()); + checkEpocRootExists(QLatin1String("EPOCROOT environment variable")); if (epocRootValue.isEmpty()) { // 2. The location of devices.xml is specified by a registry key. If this // file exists, it is parsed. QString devicesXmlPath = getDevicesXmlPath(); - if (devicesXmlPath.isEmpty()) { - std::cerr << "Error: Symbian SDK registry key not found" << std::endl; - } else { - devicesXmlPath += "/devices.xml"; + if (!devicesXmlPath.isEmpty()) { + devicesXmlPath += QLatin1String("/devices.xml"); QFile devicesFile(devicesXmlPath); if (devicesFile.open(QIODevice::ReadOnly)) { @@ -138,87 +127,90 @@ QString epocRoot() // 4. If a device element marked as default is found in devices.xml and its // epocroot value points to an existent directory, this is returned. - const QString epocDeviceValue = qgetenv("EPOCDEVICE"); + const QString epocDeviceValue = QString::fromLocal8Bit(qgetenv("EPOCDEVICE").constData()); bool epocDeviceFound = false; QXmlStreamReader xml(&devicesFile); while (!xml.atEnd()) { xml.readNext(); - if (xml.isStartElement() && xml.name() == "devices") { - if (xml.attributes().value("version") == "1.0") { - while (!(xml.isEndElement() && xml.name() == "devices") && !xml.atEnd()) { + if (xml.isStartElement() && xml.name() == QLatin1String("devices")) { + if (xml.attributes().value(QLatin1String("version")) == QLatin1String("1.0")) { + while (!(xml.isEndElement() && xml.name() == QLatin1String("devices")) && !xml.atEnd()) { xml.readNext(); - if (xml.isStartElement() && xml.name() == "device") { - const bool isDefault = xml.attributes().value("default") == "yes"; - const QString id = xml.attributes().value("id").toString(); - const QString name = xml.attributes().value("name").toString(); - const QString alias = xml.attributes().value("alias").toString(); - bool epocDeviceMatch = (id + ":" + name) == epocDeviceValue; + if (xml.isStartElement() && xml.name() == QLatin1String("device")) { + const bool isDefault = xml.attributes().value(QLatin1String("default")) == QLatin1String("yes"); + const QString id = xml.attributes().value(QLatin1String("id")).toString(); + const QString name = xml.attributes().value(QLatin1String("name")).toString(); + const QString alias = xml.attributes().value(QLatin1String("alias")).toString(); + bool epocDeviceMatch = QString(id + QLatin1String(":") + name) == epocDeviceValue; if (!alias.isEmpty()) epocDeviceMatch |= alias == epocDeviceValue; epocDeviceFound |= epocDeviceMatch; if((epocDeviceValue.isEmpty() && isDefault) || epocDeviceMatch) { // Found a matching device - while (!(xml.isEndElement() && xml.name() == "device") && !xml.atEnd()) { + while (!(xml.isEndElement() && xml.name() == QLatin1String("device")) && !xml.atEnd()) { xml.readNext(); - if (xml.isStartElement() && xml.name() == "epocroot") { + if (xml.isStartElement() && xml.name() == QLatin1String("epocroot")) { epocRootValue = xml.readElementText(); const QString deviceSource = epocDeviceValue.isEmpty() - ? "default device" - : "EPOCDEVICE (" + epocDeviceValue + ")"; + ? QLatin1String("default device") + : QString(QLatin1String("EPOCDEVICE (") + epocDeviceValue + QLatin1String(")")); checkEpocRootExists(deviceSource); } } if (epocRootValue.isEmpty()) - xml.raiseError("No epocroot element found"); + xml.raiseError(QLatin1String("No epocroot element found")); } } } } else { - xml.raiseError("Invalid 'devices' element version"); + xml.raiseError(QLatin1String("Invalid 'devices' element version")); } } } if (xml.hasError()) { - std::cerr << "Error: \"" << xml.errorString() << "\" when parsing devices.xml" << std::endl; + qWarning("Warning: Error \"%s\" when parsing devices.xml", + qPrintable(xml.errorString())); } else { if (epocRootValue.isEmpty()) { if (!epocDeviceValue.isEmpty()) { if (epocDeviceFound) { - std::cerr << "Error: missing or invalid epocroot attribute " - << "in device '" << epocDeviceValue << "'"; + qWarning("Warning: Missing or invalid epocroot attribute in device '%s' in devices.xml.", + qPrintable(epocDeviceValue)); } else { - std::cerr << "Error: no device matching EPOCDEVICE (" - << epocDeviceValue << ")"; + qWarning("Warning: No device matching EPOCDEVICE (%s) in devices.xml.", + qPrintable(epocDeviceValue)); } } else { if (epocDeviceFound) { - std::cerr << "Error: missing or invalid epocroot attribute " - << "in default device"; + qWarning("Warning: Missing or invalid epocroot attribute in default device in devices.xml."); } else { - std::cerr << "Error: no default device"; + qWarning("Warning: No default device set in devices.xml."); } } - std::cerr << " found in devices.xml file." << std::endl; } } } else { - std::cerr << "Error: could not open file " << devicesXmlPath << std::endl; + qWarning("Warning: Could not open file: '%s'.", qPrintable(devicesXmlPath)); } } } if (epocRootValue.isEmpty()) { // 5. An empty string is returned. - std::cerr << "Error: failed to find epoc root" << std::endl - << "Either" << std::endl - << " 1. Set EPOCROOT environment variable to a valid value" << std::endl - << " or 2. Ensure that the HKEY_LOCAL_MACHINE\\" SYMBIAN_SDKS_REG_SUBKEY - " registry key is set, and then" << std::endl - << " a. Set EPOCDEVICE environment variable to a valid device" << std::endl - << " or b. Specify a default device in the devices.xml file." << std::endl; + qWarning("Warning: failed to resolve epocroot." +#ifdef Q_OS_WIN32 + "\nEither\n" + " 1. Set EPOCROOT environment variable to a valid value.\n" + " or 2. Ensure that the HKEY_LOCAL_MACHINE\\" SYMBIAN_SDKS_REG_SUBKEY + " registry key is set, and then\n" + " a. Set EPOCDEVICE environment variable to a valid device\n" + " or b. Specify a default device in the devices.xml file."); +#else + " Set EPOCROOT environment variable to a valid value."); +#endif } else { fixEpocRoot(epocRootValue); } diff --git a/tools/shared/windows/registry.cpp b/tools/shared/windows/registry.cpp index 67d9b56..2373839 100644 --- a/tools/shared/windows/registry.cpp +++ b/tools/shared/windows/registry.cpp @@ -42,6 +42,7 @@ #include #include "registry.h" +#ifdef Q_OS_WIN32 /*! Returns the path part of a registry key. e.g. @@ -73,10 +74,11 @@ static QString keyName(const QString &rKey) return rKey; QString res(rKey.mid(idx + 1)); - if (res == "Default" || res == ".") - res = ""; + if (res == QLatin1String("Default") || res == QLatin1String(".")) + res = QString(); return res; } +#endif QString readRegistryKey(HKEY parentHandle, const QString &rSubkey) { @@ -128,7 +130,7 @@ QString readRegistryKey(HKEY parentHandle, const QString &rSubkey) break; l.append(s); } - result = l.join(", "); + result = l.join(QLatin1String(", ")); break; } -- cgit v0.12 From bc09d5b11cd45e975ec745b508c703b75b019a4e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 18 Nov 2010 15:23:03 +0200 Subject: Resolve EPOCROOT in qt.conf using same logic as in .pro Previously it was only possible to use EPOCROOT in qt.conf via env variable, while qmake & configure could resolve it also via devices.xml. Changed qt.conf parsing to support $${EPOCROOT} tag and use same resolving logic as qmake & configure. Task-number: QTBUG-15393 Reviewed-by: axis --- qmake/Makefile.unix | 2 +- qmake/Makefile.win32 | 3 ++- qmake/Makefile.win32-g++ | 2 +- qmake/Makefile.win32-g++-sh | 2 +- qmake/qmake.pri | 2 +- src/corelib/global/global.pri | 2 ++ src/corelib/global/qlibraryinfo.cpp | 12 ++++++++++++ tools/linguist/lrelease/lrelease.pro | 1 + tools/shared/symbian/epocroot.pri | 11 +++++++++++ 9 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 tools/shared/symbian/epocroot.pri diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix index 8d56fc8..d941dc4 100644 --- a/qmake/Makefile.unix +++ b/qmake/Makefile.unix @@ -68,7 +68,7 @@ CPPFLAGS = -I. -Igenerators -Igenerators/unix -Igenerators/win32 -Igenerators/ma -I$(BUILD_PATH)/src/corelib/global -I$(BUILD_PATH)/src/corelib/xml \ -I$(SOURCE_PATH)/tools/shared \ -DQT_NO_PCRE \ - -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED \ + -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT \ -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_STL \ -DQT_NO_COMPRESS -I$(QMAKESPEC) -DHAVE_QCONFIG_CPP -DQT_NO_THREAD -DQT_NO_QOBJECT \ -DQT_NO_GEOM_VARIANT $(OPENSOURCE_CXXFLAGS) diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32 index 4d0121c..c04bcb2 100644 --- a/qmake/Makefile.win32 +++ b/qmake/Makefile.win32 @@ -40,7 +40,8 @@ CFLAGS_BARE = -c -Fo./ \ -I$(SOURCE_PATH)\tools\shared \ -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NODLL -DQT_NO_STL \ -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP -DQT_BUILD_QMAKE -DQT_NO_THREAD \ - -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM -DQT_NO_PCRE -DQT_BOOTSTRAPPED + -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM -DQT_NO_PCRE -DQT_BOOTSTRAPPED \ + -DQLIBRARYINFO_EPOCROOT CFLAGS = -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch $(CFLAGS_BARE) $(CFLAGS) CXXFLAGS_BARE = $(CFLAGS_BARE) diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++ index f313f9e..29fbd0a 100644 --- a/qmake/Makefile.win32-g++ +++ b/qmake/Makefile.win32-g++ @@ -25,7 +25,7 @@ CFLAGS = -c -o$@ -O \ -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NO_PCRE \ -DQT_NODLL -DQT_NO_STL -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP \ -DQT_BUILD_QMAKE -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \ - -DQT_BOOTSTRAPPED + -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT CXXFLAGS = $(CFLAGS) LFLAGS = -static-libgcc -static-libstdc++ -s LIBS = -lole32 -luuid diff --git a/qmake/Makefile.win32-g++-sh b/qmake/Makefile.win32-g++-sh index af54288..9c7942c 100644 --- a/qmake/Makefile.win32-g++-sh +++ b/qmake/Makefile.win32-g++-sh @@ -25,7 +25,7 @@ CFLAGS = -c -o$@ -O \ -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NO_PCRE \ -DQT_NODLL -DQT_NO_STL -DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP \ -DQT_BUILD_QMAKE -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \ - -DQT_BOOTSTRAPPED + -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT CXXFLAGS = $(CFLAGS) LFLAGS = -static-libgcc -static-libstdc++ -s LIBS = -lole32 -luuid diff --git a/qmake/qmake.pri b/qmake/qmake.pri index 36c5d36..7cf94cb 100644 --- a/qmake/qmake.pri +++ b/qmake/qmake.pri @@ -3,7 +3,7 @@ CONFIG += depend_includepath QMAKE_INCREMENTAL = SKIP_DEPENDS += qconfig.h qmodules.h DEFINES += QT_NO_TEXTCODEC QT_NO_LIBRARY QT_NO_STL QT_NO_COMPRESS QT_NO_UNICODETABLES \ - QT_NO_GEOM_VARIANT QT_NO_DATASTREAM + QT_NO_GEOM_VARIANT QT_NO_DATASTREAM QLIBRARYINFO_EPOCROOT #qmake code SOURCES += project.cpp property.cpp main.cpp generators/makefile.cpp \ diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 4800716..86800ef 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -27,3 +27,5 @@ linux*:!static:!linux-armcc:!linux-gcce { # Compensate for lack of platform defines in Symbian3 and Symbian4 symbian: DEFINES += SYMBIAN_VERSION_$$upper($$replace(SYMBIAN_VERSION,\\.,_)) + +include(../../../tools/shared/symbian/epocroot.pri) diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 957abbf..acacf7c 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -62,6 +62,10 @@ QT_END_NAMESPACE # include "private/qcore_mac_p.h" #endif +#ifdef QLIBRARYINFO_EPOCROOT +# include "symbian/epocroot.h" +#endif + #include "qconfig.cpp" QT_BEGIN_NAMESPACE @@ -433,6 +437,14 @@ QLibraryInfo::location(LibraryLocation loc) QString::fromLocal8Bit(qgetenv(ret.mid(rep + 2, reg_var.matchedLength() - 3).toLatin1().constData()).constData())); } + +#ifdef QLIBRARYINFO_EPOCROOT + // $${EPOCROOT} is a special case, resolve it similarly to qmake. + QRegExp epocrootMatcher(QLatin1String("\\$\\$\\{EPOCROOT\\}")); + if ((rep = epocrootMatcher.indexIn(ret)) != -1) + ret.replace(rep, epocrootMatcher.matchedLength(), epocRoot()); +#endif + config->endGroup(); } } diff --git a/tools/linguist/lrelease/lrelease.pro b/tools/linguist/lrelease/lrelease.pro index 6beafa3..89694be 100644 --- a/tools/linguist/lrelease/lrelease.pro +++ b/tools/linguist/lrelease/lrelease.pro @@ -15,6 +15,7 @@ macx:SOURCES += $$QT_SOURCE_TREE/src/corelib/io/qsettings_mac.cpp include(../../../src/tools/bootstrap/bootstrap.pri) include(../shared/formats.pri) include(../shared/proparser.pri) +include(../../shared/symbian/epocroot.pri) win32:LIBS += -ladvapi32 # for qsettings_win.cpp diff --git a/tools/shared/symbian/epocroot.pri b/tools/shared/symbian/epocroot.pri new file mode 100644 index 0000000..117836e --- /dev/null +++ b/tools/shared/symbian/epocroot.pri @@ -0,0 +1,11 @@ +# Epocroot resolving is only required for tools, so omit it from all mobile/embedded builds +!symbian:!wince*:!embedded { +HEADERS += \ + $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.h \ + $$QT_SOURCE_TREE/tools/shared/windows/registry.h +SOURCES += \ + $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.cpp \ + $$QT_SOURCE_TREE/tools/shared/windows/registry.cpp +INCLUDEPATH += $$QT_SOURCE_TREE/tools/shared +DEFINES += QLIBRARYINFO_EPOCROOT +} -- cgit v0.12 From 8a298f78a8050bffff1d3c0135aa432a85747c2e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 18 Nov 2010 16:59:42 +0200 Subject: Add symbian scope for qfiledialog_symbian.cpp Missing symbian scope caused build break on non-symbian platforms. Reviewed-by: Janne Koskinen --- src/gui/dialogs/dialogs.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index c7cb794..443c5e9 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -108,7 +108,7 @@ SOURCES += \ dialogs/qwizard.cpp \ dialogs/qprintpreviewdialog.cpp -contains(QT_CONFIG, s60) { +symbian:contains(QT_CONFIG, s60) { LIBS += -lcommondialogs \ -lavkon \ -lplatformenv \ -- cgit v0.12 From 00e99440596d8bf648aefdfbb00e80004e328033 Mon Sep 17 00:00:00 2001 From: Titta Heikkala Date: Fri, 19 Nov 2010 09:47:55 +0200 Subject: Corrected ASCII comparison and removed extra braces Corrected ASCII comparison and removed extra braces based on comments Task-number: QT-3917 Reviewed-by: Janne Koskinen Merge-request: 918 Reviewed-by: Janne Koskinen --- src/gui/dialogs/qfiledialog.cpp | 3 +-- src/gui/dialogs/qfiledialog_symbian.cpp | 32 ++++++++++++++------------------ 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 1db9789..f3f7469 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -1964,9 +1964,8 @@ QString QFileDialog::getExistingDirectory(QWidget *parent, if (qt_filedialog_existing_directory_hook && !(options & DontUseNativeDialog)) return qt_filedialog_existing_directory_hook(parent, caption, dir, options); #if defined(Q_WS_S60) - if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) { + if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0 && !(options & DontUseNativeDialog)) return qtSymbianGetExistingDirectory(caption, dir); - } #endif QFileDialogArgs args; args.parent = parent; diff --git a/src/gui/dialogs/qfiledialog_symbian.cpp b/src/gui/dialogs/qfiledialog_symbian.cpp index 0277e1c..1f70305 100644 --- a/src/gui/dialogs/qfiledialog_symbian.cpp +++ b/src/gui/dialogs/qfiledialog_symbian.cpp @@ -86,26 +86,25 @@ public: TBool Accept(const TDesC &/*aDriveAndPath*/, const TEntry &aEntry) const { - if (aEntry.IsDir()) { + if (aEntry.IsDir()) return ETrue; - } - if (filterList.isEmpty()) { - //No filter for files, all can be accepted + + //If no filter for files, all can be accepted + if (filterList.isEmpty()) return ETrue; - } - if (filterList == QStringList(QLatin1String("(*)"))) { + + if (filterList == QStringList(QLatin1String("(*)"))) return ETrue; - } + for (int i = 0; i < filterList.size(); ++i) { QString extension = filterList.at(i); //remove '*' from the beginning of the extension - if (extension.left(1) == "*"){ - extension = extension.right(extension.size() - 1); - } + if (extension.at(0) == QLatin1Char('*')) + extension = extension.mid(1); + QString fileName = qt_TDesC2QString(aEntry.iName); - if (fileName.right(extension.size()) == extension) { + if (fileName.endsWith(extension)) return ETrue; - } } return EFalse; } @@ -140,18 +139,15 @@ static QString launchSymbianDialog(const QString dialogCaption, const QString st select = AknCommonDialogsDynMem::RunSelectDlgLD(types, target, startFolder, NULL, NULL, titlePtr, extensionFilter); CleanupStack::Pop(extensionFilter); - } - else if (dialogMode == DialogSave) { + } else if (dialogMode == DialogSave) { select = AknCommonDialogsDynMem::RunSaveDlgLD(types, target, startFolder, NULL, NULL, titlePtr); - } - else if (dialogMode == DialogFolder) { + } else if (dialogMode == DialogFolder) { select = AknCommonDialogsDynMem::RunFolderSelectDlgLD(types, target, startFolder, 0, 0, titlePtr, NULL, NULL); } - if (select) { + if (select) selection.append(qt_TDesC2QString(target)); - } ); #endif return selection; -- cgit v0.12 From 4b380543cc973d575a3ed0c77918adbe5b6133f0 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 19 Nov 2010 14:53:29 +0200 Subject: Fixed namespace issues related to epocroot.cpp Task-number: QTBUG-15393 Reviewed-by: axis --- .../symbian/initprojectdeploy_symbian.cpp | 12 ++-- qmake/generators/symbian/symbiancommon.cpp | 4 +- qmake/generators/symbian/symmake.cpp | 10 +-- qmake/generators/symbian/symmake_abld.cpp | 4 +- qmake/generators/symbian/symmake_sbsv2.cpp | 8 +-- qmake/generators/win32/msvc_vcproj.cpp | 6 +- qmake/project.cpp | 4 +- qmake/qmake.pri | 4 +- src/corelib/global/qlibraryinfo.cpp | 4 +- tools/configure/configure.pro | 4 +- tools/configure/environment.cpp | 10 +-- tools/shared/symbian/epocroot.cpp | 17 ++--- tools/shared/symbian/epocroot.h | 67 ----------------- tools/shared/symbian/epocroot.pri | 4 +- tools/shared/symbian/epocroot_p.h | 83 ++++++++++++++++++++++ tools/shared/windows/registry.cpp | 7 +- tools/shared/windows/registry.h | 64 ----------------- tools/shared/windows/registry_p.h | 80 +++++++++++++++++++++ 18 files changed, 214 insertions(+), 178 deletions(-) delete mode 100644 tools/shared/symbian/epocroot.h create mode 100644 tools/shared/symbian/epocroot_p.h delete mode 100644 tools/shared/windows/registry.h create mode 100644 tools/shared/windows/registry_p.h diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp index 22a4a82..81236d4 100644 --- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp +++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp @@ -47,7 +47,7 @@ #include // Included from tools/shared -#include +#include #define SYSBIN_DIR "/sys/bin" #define HW_Z_DIR "epoc32/data/z" @@ -75,7 +75,7 @@ static bool isPlugin(const QFileInfo& info, const QString& devicePath) && (devicePath.size() < 8 || (0 != devicePath.compare(QLatin1String(SYSBIN_DIR), Qt::CaseInsensitive) && 0 != devicePath.mid(1).compare(QLatin1String(":" SYSBIN_DIR), Qt::CaseInsensitive) - && 0 != devicePath.compare(epocRoot() + QLatin1String(HW_Z_DIR SYSBIN_DIR))))) { + && 0 != devicePath.compare(qt_epocRoot() + QLatin1String(HW_Z_DIR SYSBIN_DIR))))) { return true; } else { return false; @@ -182,7 +182,7 @@ void initProjectDeploySymbian(QMakeProject* project, QString deploymentDrive; if (0 == platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) { - deploymentDrive = epocRoot() + HW_Z_DIR; + deploymentDrive = qt_epocRoot() + HW_Z_DIR; } else { deploymentDrive = targetPathHasDriveLetter ? targetPath.left(2) : QLatin1String("c:"); } @@ -225,9 +225,9 @@ void initProjectDeploySymbian(QMakeProject* project, } else { if (0 == platform.compare(QLatin1String(EMULATOR_DEPLOYMENT_PLATFORM))) { if (devicePathHasDriveLetter) { - devicePath = epocRoot() + "epoc32/winscw/" + devicePath.remove(1, 1); + devicePath = qt_epocRoot() + "epoc32/winscw/" + devicePath.remove(1, 1); } else { - devicePath = epocRoot() + "epoc32/winscw/c" + devicePath; + devicePath = qt_epocRoot() + "epoc32/winscw/c" + devicePath; } } else { if (devicePathHasDriveLetter @@ -278,7 +278,7 @@ void initProjectDeploySymbian(QMakeProject* project, // Executables and libraries are deployed to \sys\bin QFileInfo targetPath; if (epocBuild) - targetPath.setFile(epocRoot() + "epoc32/release/" + platform + "/" + build + "/"); + targetPath.setFile(qt_epocRoot() + "epoc32/release/" + platform + "/" + build + "/"); else targetPath.setFile(info.path() + QDir::separator()); if(devicePathHasDriveLetter) { diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index 2244a98..602bcc2 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -44,7 +44,7 @@ #include // Included from tools/shared -#include +#include #define RESOURCE_DIRECTORY_RESOURCE "\\\\resource\\\\apps\\\\" @@ -417,7 +417,7 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, QString zDir; remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid); if (epocBuild) - zDir = epocRoot() + QLatin1String("epoc32/data/z"); + zDir = qt_epocRoot() + QLatin1String("epoc32/data/z"); DeploymentList depList; initProjectDeploySymbian(project, depList, remoteTestPath, true, epocBuild, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles); diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index e1426ab..7bebd56 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -50,7 +50,7 @@ #include // Included from tools/shared -#include +#include #define RESOURCE_DIRECTORY_MMP "/resource/apps" #define REGISTRATION_RESOURCE_DIRECTORY_HW "/private/10003a3f/import/apps" @@ -87,10 +87,10 @@ QString SymbianMakefileGenerator::fixPathForMmp(const QString& origPath, const Q { static QString epocRootStr; if (epocRootStr.isEmpty()) { - epocRootStr = epocRoot(); + epocRootStr = qt_epocRoot(); QFileInfo efi(epocRootStr); if (!efi.exists() || epocRootStr.isEmpty()) { - fprintf(stderr, "Unable to resolve epocRoot '%s' to real dir on current drive, defaulting to '/' for mmp paths\n", qPrintable(epocRoot())); + fprintf(stderr, "Unable to resolve epocRoot '%s' to real dir on current drive, defaulting to '/' for mmp paths\n", qPrintable(qt_epocRoot())); epocRootStr = "/"; } else { epocRootStr = efi.absoluteFilePath(); @@ -122,7 +122,7 @@ QString SymbianMakefileGenerator::absolutizePath(const QString& origPath) // Prepend epocroot to any paths beginning with "/epoc32/" QString resultPath = QDir::fromNativeSeparators(origPath); if (resultPath.startsWith("/epoc32/", Qt::CaseInsensitive)) - resultPath = QDir::fromNativeSeparators(epocRoot()) + resultPath.mid(1); + resultPath = QDir::fromNativeSeparators(qt_epocRoot()) + resultPath.mid(1); QFileInfo fi(fileInfo(resultPath)); @@ -719,7 +719,7 @@ void SymbianMakefileGenerator::writeMmpFileLibraryPart(QTextStream& t) // Hacky way to find out what kind of library it is. Check the // ARMV5 build directory for library type. We default to shared // library, since that is more common. - QString udebStaticLibLocation(epocRoot()); + QString udebStaticLibLocation(qt_epocRoot()); QString urelStaticLibLocation(udebStaticLibLocation); udebStaticLibLocation += QString("epoc32/release/armv5/udeb/%1.lib").arg(lib); urelStaticLibLocation += QString("epoc32/release/armv5/urel/%1.lib").arg(lib); diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index 7059a52..cd64325 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -49,7 +49,7 @@ #include // Included from tools/shared -#include +#include #define DO_NOTHING_TARGET "do_nothing" #define CREATE_TEMPS_TARGET "create_temps" @@ -431,7 +431,7 @@ bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool i else t << WINSCW_DEPLOYMENT_TARGET ":" << endl; - QString remoteTestPath = epocRoot() + QString remoteTestPath = qt_epocRoot() + QDir::toNativeSeparators(QLatin1String(isRom ? "epoc32/data/z/private/" : "epoc32/winscw/c/private/")) + privateDirUid; diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index b3f8ba2..f4a6132 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -49,7 +49,7 @@ #include // Included from tools/shared -#include +#include SymbianSbsv2MakefileGenerator::SymbianSbsv2MakefileGenerator() : SymbianMakefileGenerator() { } SymbianSbsv2MakefileGenerator::~SymbianSbsv2MakefileGenerator() { } @@ -82,7 +82,7 @@ void SymbianSbsv2MakefileGenerator::exportFlm() QDir sourceDir = QDir(QLibraryInfo::location(QLibraryInfo::PrefixPath) + FLM_SOURCE_DIR); QFileInfoList sourceInfos = sourceDir.entryInfoList(QDir::Files); - QDir destDir(epocRoot() + FLM_DEST_DIR); + QDir destDir(qt_epocRoot() + FLM_DEST_DIR); if (!destDir.exists()) { if (destDir.mkpath(destDir.absolutePath())) generatedDirs << destDir.absolutePath(); @@ -630,7 +630,7 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t t << endl; // Write deployment rules - QString remoteTestPath = epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid; + QString remoteTestPath = qt_epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid; DeploymentList depList; //write emulator deployment @@ -641,7 +641,7 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t t << "#endif" << endl; //write ROM deployment - remoteTestPath = epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid; + remoteTestPath = qt_epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid; depList.clear(); initProjectDeploySymbian(project, depList, remoteTestPath, false, true, QLatin1String(ROM_DEPLOYMENT_PLATFORM), QString(), generatedDirs, generatedFiles); diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index a8ff306..6f27515 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -67,7 +67,7 @@ QT_END_NAMESPACE #ifdef Q_OS_WIN32 #include -#include +#include QT_BEGIN_NAMESPACE @@ -119,7 +119,7 @@ DotNET which_dotnet_version() int installed = 0; int i = 0; for(; dotNetCombo[i].version; ++i) { - QString path = readRegistryKey(HKEY_LOCAL_MACHINE, dotNetCombo[i].regKey); + QString path = qt_readRegistryKey(HKEY_LOCAL_MACHINE, dotNetCombo[i].regKey); if(!path.isEmpty()) { ++installed; current_version = dotNetCombo[i].version; @@ -136,7 +136,7 @@ DotNET which_dotnet_version() i = installed = 0; for(; dotNetCombo[i].version; ++i) { - QString productPath = readRegistryKey(HKEY_LOCAL_MACHINE, dotNetCombo[i].regKey).toLower(); + QString productPath = qt_readRegistryKey(HKEY_LOCAL_MACHINE, dotNetCombo[i].regKey).toLower(); if (productPath.isEmpty()) continue; QStringList::iterator it; diff --git a/qmake/project.cpp b/qmake/project.cpp index fe08b7b..2586c57 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -64,7 +64,7 @@ #include // Included from tools/shared -#include +#include #ifdef Q_OS_WIN32 #define QT_POPEN _popen @@ -3118,7 +3118,7 @@ QStringList &QMakeProject::values(const QString &_var, QMapendGroup(); diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro index 810f006..0a49fbe 100644 --- a/tools/configure/configure.pro +++ b/tools/configure/configure.pro @@ -63,8 +63,8 @@ HEADERS = configureapp.h environment.h tools.h\ $$QT_SOURCE_TREE/src/corelib/tools/qunicodetables_p.h \ $$QT_SOURCE_TREE/src/corelib/xml/qxmlstream.h \ $$QT_SOURCE_TREE/src/corelib/xml/qxmlutils_p.h \ - $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.h \ - $$QT_SOURCE_TREE/tools/shared/windows/registry.h + $$QT_SOURCE_TREE/tools/shared/symbian/epocroot_p.h \ + $$QT_SOURCE_TREE/tools/shared/windows/registry_p.h SOURCES = main.cpp configureapp.cpp environment.cpp tools.cpp \ diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp index 03fd0cc..1866ef4 100644 --- a/tools/configure/environment.cpp +++ b/tools/configure/environment.cpp @@ -60,8 +60,8 @@ using namespace std; #include #endif -#include // from tools/shared -#include // from tools/shared +#include // from tools/shared +#include // from tools/shared QT_BEGIN_NAMESPACE @@ -163,7 +163,7 @@ Compiler Environment::detectCompiler() QString paths = qgetenv("PATH"); QStringList pathlist = paths.toLower().split(";"); for(int i = 0; compiler_info[i].compiler; ++i) { - QString productPath = readRegistryKey(HKEY_LOCAL_MACHINE, compiler_info[i].regKey).toLower(); + QString productPath = qt_readRegistryKey(HKEY_LOCAL_MACHINE, compiler_info[i].regKey).toLower(); if (productPath.length()) { QStringList::iterator it; for(it = pathlist.begin(); it != pathlist.end(); ++it) { @@ -466,8 +466,8 @@ bool Environment::rmdir(const QString &name) QString Environment::symbianEpocRoot() { - // Call function defined in tools/shared/symbian/epocroot.h - return ::epocRoot(); + // Call function defined in tools/shared/symbian/epocroot_p.h + return ::qt_epocRoot(); } QT_END_NAMESPACE diff --git a/tools/shared/symbian/epocroot.cpp b/tools/shared/symbian/epocroot.cpp index 9d7d465..eabae98 100644 --- a/tools/shared/symbian/epocroot.cpp +++ b/tools/shared/symbian/epocroot.cpp @@ -39,13 +39,13 @@ ** ****************************************************************************/ -#include - #include #include -#include "epocroot.h" -#include "../windows/registry.h" +#include "epocroot_p.h" +#include "../windows/registry_p.h" + +QT_BEGIN_NAMESPACE // Registry key under which the location of the Symbian devices.xml file is // stored. @@ -64,20 +64,20 @@ // Stored as a static value in order to avoid unnecessary re-evaluation. static QString epocRootValue; -QString getDevicesXmlPath() +static QString getDevicesXmlPath() { // Note that the following call will return a null string on platforms other // than Windows. If support is required on other platforms for devices.xml, // an alternative mechanism for retrieving the location of this file will // be required. - return readRegistryKey(SYMBIAN_SDKS_REG_HANDLE, QLatin1String(SYMBIAN_SDKS_REG_SUBKEY)); + return qt_readRegistryKey(SYMBIAN_SDKS_REG_HANDLE, QLatin1String(SYMBIAN_SDKS_REG_SUBKEY)); } /** * Checks whether epocRootValue points to an existent directory. * If not, epocRootValue is set to an empty string and an error message is printed. */ -void checkEpocRootExists(const QString &source) +static void checkEpocRootExists(const QString &source) { if (!epocRootValue.isEmpty()) { QDir dir(epocRootValue); @@ -104,7 +104,7 @@ static void fixEpocRoot(QString &path) /** * Determine the epoc root for the currently active SDK. */ -QString epocRoot() +QString qt_epocRoot() { if (epocRootValue.isEmpty()) { // 1. If environment variable EPOCROOT is set and points to an existent @@ -219,3 +219,4 @@ QString epocRoot() return epocRootValue; } +QT_END_NAMESPACE diff --git a/tools/shared/symbian/epocroot.h b/tools/shared/symbian/epocroot.h deleted file mode 100644 index 9846485..0000000 --- a/tools/shared/symbian/epocroot.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the qmake application of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef SYMBIAN_EPOCROOT_H -#define SYMBIAN_EPOCROOT_H - -#include - -/** - * Determine the epoc root for the currently active SDK. - * - * The algorithm used is as follows: - * 1. If environment variable EPOCROOT is set and points to an existent - * directory, this is returned. - * 2. The location of devices.xml is specified by a registry key. If this - * file exists, it is parsed. - * 3. If the EPOCDEVICE environment variable is set and a corresponding - * entry is found in devices.xml, and its epocroot value points to an - * existent directory, it is returned. - * 4. If a device element marked as default is found in devices.xml and its - * epocroot value points to an existent directory, this is returned. - * 5. An empty string is returned. - * - * Any return value other than the empty string therefore is guaranteed to - * point to an existent directory. - */ -QString epocRoot(); - -#endif // EPOCROOT_H diff --git a/tools/shared/symbian/epocroot.pri b/tools/shared/symbian/epocroot.pri index 117836e..f0f0dab 100644 --- a/tools/shared/symbian/epocroot.pri +++ b/tools/shared/symbian/epocroot.pri @@ -1,8 +1,8 @@ # Epocroot resolving is only required for tools, so omit it from all mobile/embedded builds !symbian:!wince*:!embedded { HEADERS += \ - $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.h \ - $$QT_SOURCE_TREE/tools/shared/windows/registry.h + $$QT_SOURCE_TREE/tools/shared/symbian/epocroot_p.h \ + $$QT_SOURCE_TREE/tools/shared/windows/registry_p.h SOURCES += \ $$QT_SOURCE_TREE/tools/shared/symbian/epocroot.cpp \ $$QT_SOURCE_TREE/tools/shared/windows/registry.cpp diff --git a/tools/shared/symbian/epocroot_p.h b/tools/shared/symbian/epocroot_p.h new file mode 100644 index 0000000..c97b593 --- /dev/null +++ b/tools/shared/symbian/epocroot_p.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake application of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT_SYMBIAN_EPOCROOT_H +#define QT_SYMBIAN_EPOCROOT_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +/** + * Determine the epoc root for the currently active SDK. + * + * The algorithm used is as follows: + * 1. If environment variable EPOCROOT is set and points to an existent + * directory, this is returned. + * 2. The location of devices.xml is specified by a registry key. If this + * file exists, it is parsed. + * 3. If the EPOCDEVICE environment variable is set and a corresponding + * entry is found in devices.xml, and its epocroot value points to an + * existent directory, it is returned. + * 4. If a device element marked as default is found in devices.xml and its + * epocroot value points to an existent directory, this is returned. + * 5. An empty string is returned. + * + * Any return value other than the empty string therefore is guaranteed to + * point to an existent directory. + */ +QString qt_epocRoot(); + +QT_END_NAMESPACE + +#endif // QT_SYMBIAN_EPOCROOT_H + diff --git a/tools/shared/windows/registry.cpp b/tools/shared/windows/registry.cpp index 2373839..48e9ae6 100644 --- a/tools/shared/windows/registry.cpp +++ b/tools/shared/windows/registry.cpp @@ -40,7 +40,9 @@ ****************************************************************************/ #include -#include "registry.h" +#include "registry_p.h" + +QT_BEGIN_NAMESPACE #ifdef Q_OS_WIN32 /*! @@ -80,7 +82,7 @@ static QString keyName(const QString &rKey) } #endif -QString readRegistryKey(HKEY parentHandle, const QString &rSubkey) +QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey) { QString result; @@ -160,4 +162,5 @@ QString readRegistryKey(HKEY parentHandle, const QString &rSubkey) return result; } +QT_END_NAMESPACE diff --git a/tools/shared/windows/registry.h b/tools/shared/windows/registry.h deleted file mode 100644 index 3896527..0000000 --- a/tools/shared/windows/registry.h +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the qmake application of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef WINDOWS_REGISTRY_H -#define WINDOWS_REGISTRY_H - -#include - -#ifdef Q_OS_WIN32 - #include -#else - typedef void* HKEY; -#endif - -#include - -/** - * Read a value from the Windows registry. - * - * If the key is not found, or the registry cannot be accessed (for example - * if this code is compiled for a platform other than Windows), a null - * string is returned. - */ -QString readRegistryKey(HKEY parentHandle, const QString &rSubkey); - -#endif // WINDOWS_REGISTRY_H diff --git a/tools/shared/windows/registry_p.h b/tools/shared/windows/registry_p.h new file mode 100644 index 0000000..4aae5f9 --- /dev/null +++ b/tools/shared/windows/registry_p.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake application of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT_WINDOWS_REGISTRY_H +#define QT_WINDOWS_REGISTRY_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +#include + +#ifdef Q_OS_WIN32 + #include +#else + typedef void* HKEY; +#endif + +#include + +/** + * Read a value from the Windows registry. + * + * If the key is not found, or the registry cannot be accessed (for example + * if this code is compiled for a platform other than Windows), a null + * string is returned. + */ +QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey); + +QT_END_NAMESPACE + +#endif // QT_WINDOWS_REGISTRY_H + -- cgit v0.12 From 348fef0a406006ac813732ad5b8a143d8a63e879 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 22 Nov 2010 12:55:43 +0200 Subject: Fix a build break when namespace is defined Reviewed-by: Jani Hautakangas --- src/opengl/gl2paintengineex/qtriangulator.cpp | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/opengl/gl2paintengineex/qtriangulator.cpp b/src/opengl/gl2paintengineex/qtriangulator.cpp index 4c3deb6..75d5ce2 100644 --- a/src/opengl/gl2paintengineex/qtriangulator.cpp +++ b/src/opengl/gl2paintengineex/qtriangulator.cpp @@ -339,7 +339,7 @@ static inline qint64 qPointDistanceFromLine(const QPodPoint &p, const QPodPoint static inline bool qPointIsLeftOfLine(const QPodPoint &p, const QPodPoint &v1, const QPodPoint &v2) { - return ::qPointDistanceFromLine(p, v1, v2) < 0; + return QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(p, v1, v2) < 0; } // Return: @@ -1741,7 +1741,7 @@ bool QTriangulator::ComplexToSimple::calculateIntersection(int left, int righ Intersection intersection; intersection.leftEdge = left; intersection.rightEdge = right; - intersection.intersectionPoint = ::qIntersectionPoint(u1, u2, v1, v2); + intersection.intersectionPoint = QT_PREPEND_NAMESPACE(qIntersectionPoint)(u1, u2, v1, v2); if (!intersection.intersectionPoint.isValid()) return false; @@ -1767,10 +1767,10 @@ bool QTriangulator::ComplexToSimple::edgeIsLeftOfEdge(int leftEdgeIndex, int return true; if (upper.x > qMax(l.x, u.x)) return false; - qint64 d = ::qPointDistanceFromLine(upper, l, u); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(upper, l, u); // d < 0: left, d > 0: right, d == 0: on top if (d == 0) - d = ::qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.lower()), l, u); + d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(m_parent->m_vertices.at(leftEdge.lower()), l, u); return d < 0; } @@ -1814,7 +1814,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(point, v1, v2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(point, v1, v2); if (d == 0) { result.first = result.second = current; break; @@ -1828,7 +1828,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(point, v1, v2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(point, v1, v2); Q_ASSERT(d >= 0); if (d == 0) { result.first = current; @@ -1842,7 +1842,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(point, v1, v2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(point, v1, v2); Q_ASSERT(d <= 0); if (d == 0) { result.second = current; @@ -1864,7 +1864,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(point, v1, v2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(point, v1, v2); if (d == 0) break; if (d < 0) { @@ -1885,7 +1885,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(point, v1, v2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(point, v1, v2); Q_ASSERT(d >= 0); if (d == 0) { current = current->left; @@ -1899,7 +1899,7 @@ QPair::Node *, QRBTree::Node *> QTriangulator::ComplexToSim while (current) { const QPodPoint &v1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &v2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(point, v1, v2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(point, v1, v2); Q_ASSERT(d <= 0); if (d == 0) { current = current->right; @@ -1962,7 +1962,7 @@ void QTriangulator::ComplexToSimple::reorderEdgeListRange(QRBTree::Node template void QTriangulator::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint) { - QIntersectionPoint eventPoint2 = ::qIntersectionPoint(eventPoint); + QIntersectionPoint eventPoint2 = QT_PREPEND_NAMESPACE(qIntersectionPoint)(eventPoint); while (!m_topIntersection.isEmpty() && m_topIntersection.top().intersectionPoint < eventPoint2) { Intersection intersection = m_topIntersection.pop(); @@ -2056,7 +2056,7 @@ void QTriangulator::ComplexToSimple::calculateIntersections() QPair::Node *, QRBTree::Node *> range = bounds(event.point); QRBTree::Node *leftNode = range.first ? m_edgeList.previous(range.first) : 0; int vertex = (event.type == Event::Upper ? m_edges.at(event.edge).upper() : m_edges.at(event.edge).lower()); - QIntersectionPoint eventPoint = ::qIntersectionPoint(event.point); + QIntersectionPoint eventPoint = QT_PREPEND_NAMESPACE(qIntersectionPoint)(event.point); if (range.first != 0) { splitEdgeListRange(range.first, range.second, vertex, eventPoint); @@ -2213,7 +2213,7 @@ void QTriangulator::ComplexToSimple::removeUnwantedEdgesAndConnect() while (current != b.second) { Q_ASSERT(current); Q_ASSERT(m_edges.at(current->data).node == current); - Q_ASSERT(::qIntersectionPoint(event.point).isOnLine(m_parent->m_vertices.at(m_edges.at(current->data).from), m_parent->m_vertices.at(m_edges.at(current->data).to))); + Q_ASSERT(QT_PREPEND_NAMESPACE(qIntersectionPoint)(event.point).isOnLine(m_parent->m_vertices.at(m_edges.at(current->data).from), m_parent->m_vertices.at(m_edges.at(current->data).to))); Q_ASSERT(m_parent->m_vertices.at(m_edges.at(current->data).from) == event.point || m_parent->m_vertices.at(m_edges.at(current->data).to) == event.point); insertEdgeIntoVectorIfWanted(orderedEdges, current->data); current = m_edgeList.next(current); @@ -2612,10 +2612,10 @@ bool QTriangulator::SimpleToMonotone::edgeIsLeftOfEdge(int leftEdgeIndex, int const Edge &rightEdge = m_edges.at(rightEdgeIndex); const QPodPoint &u = m_parent->m_vertices.at(rightEdge.upper()); const QPodPoint &l = m_parent->m_vertices.at(rightEdge.lower()); - qint64 d = ::qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.upper()), l, u); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(m_parent->m_vertices.at(leftEdge.upper()), l, u); // d < 0: left, d > 0: right, d == 0: on top if (d == 0) - d = ::qPointDistanceFromLine(m_parent->m_vertices.at(leftEdge.lower()), l, u); + d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(m_parent->m_vertices.at(leftEdge.lower()), l, u); return d < 0; } @@ -2645,7 +2645,7 @@ QRBTree::Node *QTriangulator::SimpleToMonotone::searchEdgeLeftOfPoint(in while (current) { const QPodPoint &p1 = m_parent->m_vertices.at(m_edges.at(current->data).lower()); const QPodPoint &p2 = m_parent->m_vertices.at(m_edges.at(current->data).upper()); - qint64 d = ::qPointDistanceFromLine(m_parent->m_vertices.at(pointIndex), p1, p2); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(m_parent->m_vertices.at(pointIndex), p1, p2); if (d <= 0) { current = current->left; } else { @@ -2668,7 +2668,7 @@ void QTriangulator::SimpleToMonotone::classifyVertex(int i) const QPodPoint &p1 = m_parent->m_vertices.at(e1.from); const QPodPoint &p2 = m_parent->m_vertices.at(e2.from); const QPodPoint &p3 = m_parent->m_vertices.at(e2.to); - qint64 d = ::qPointDistanceFromLine(p1, p2, p3); + qint64 d = QT_PREPEND_NAMESPACE(qPointDistanceFromLine)(p1, p2, p3); Q_ASSERT(d != 0 || (!startOrSplit && !endOrMerge)); e2.type = RegularVertex; -- cgit v0.12 From d7d0b1528fd200fc3110093244b8265fdf457238 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 22 Nov 2010 15:14:25 +0200 Subject: Fix symbian-mmp.conf include path Use $$[QT_INSTALL_DATA] instead of $$[QT_INSTALL_PREFIX] when adding include path that points under mkspecs. Task-number: QTBUG-15501 Reviewed-by: axis --- mkspecs/common/symbian/symbian-mmp.conf | 4 ++-- mkspecs/features/symbian/stl.prf | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf index 1fbd302..4d554bd 100644 --- a/mkspecs/common/symbian/symbian-mmp.conf +++ b/mkspecs/common/symbian/symbian-mmp.conf @@ -18,8 +18,8 @@ MMP_RULES += $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA SYMBIAN_PLATFORMS = WINSCW GCCE ARMV5 ARMV6 INCLUDEPATH = \ - $$[QT_INSTALL_PREFIX]/mkspecs/common/symbian/stl-off \ - $$[QT_INSTALL_PREFIX]/mkspecs/common/symbian \ + $$[QT_INSTALL_DATA]/mkspecs/common/symbian/stl-off \ + $$[QT_INSTALL_DATA]/mkspecs/common/symbian \ $${EPOCROOT}epoc32/include \ $$OS_LAYER_LIBC_SYSTEMINCLUDE \ $$INCLUDEPATH diff --git a/mkspecs/features/symbian/stl.prf b/mkspecs/features/symbian/stl.prf index 65d4b93..1fd5e16 100644 --- a/mkspecs/features/symbian/stl.prf +++ b/mkspecs/features/symbian/stl.prf @@ -12,7 +12,7 @@ INCLUDEPATH += $$OS_LAYER_STDCPP_SYSTEMINCLUDE # Remove mkspecs/common/symbian/stl-off from beginning of includepath # in order to use new and delete operators from STL -INCLUDEPATH -= $$[QT_INSTALL_PREFIX]/mkspecs/common/symbian/stl-off +INCLUDEPATH -= $$[QT_INSTALL_DATA]/mkspecs/common/symbian/stl-off # libstdcppv5 is preferred over libstdcpp as it has/uses the throwing version of operator new # STDCPP turns on standard C++ new behaviour (ie. throwing new) -- cgit v0.12 From 0df002ad600800a6c4ccadb969e1b1de7f8353e7 Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Mon, 22 Nov 2010 14:56:14 +0100 Subject: Fix non-stroked filled paths in OpenVG paint engine. The QPainter::fillRect() functions are optimizations to avoid state changes in the paint engines. Since these functions should be completely independant of state, ideally they should only call functions that are also stateless. QVGPaintEngine::fillRect() has two different code paths for this. The vgClearRect() path of this function is stateless however in the case of non-opaque or complex fills, this code path cannot be used and instead we use the normal path fill function which is not entirely stateless because ensureTransform() will apply the aliased coordinate transform if the current state includes a stroked pen. To avoid this happening for a pure fill (no stroke) we temporary set the pen state to be Qt::NoPen such that the state used by ensureTransform() is correct. Task-number: QTBUG-14717 Reviewed-by: Jani Hautakangas --- src/openvg/qpaintengine_vg.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index aea203f..03d756d 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -1502,7 +1502,10 @@ void QVGPaintEnginePrivate::fill(VGPath path, const QBrush& brush, VGint rule) return; ensureBrush(brush); setFillRule(rule); + QPen savedPen = currentPen; + currentPen = Qt::NoPen; ensurePathTransform(); + currentPen = savedPen; vgDrawPath(path, VG_FILL_PATH); } -- cgit v0.12 From a9467c8542ff745471e077ac8be554d3a0087e4a Mon Sep 17 00:00:00 2001 From: Milla Pohjanheimo Date: Fri, 19 Nov 2010 13:10:57 +0200 Subject: Native color dialog on symbian Native color dialog implementation for Symbian. During merge extra libraries removed. Task-number: QT-3917 Reviewed-by: Sami Merila Merge-Request: 932 Reviewed-by: Janne Koskinen --- src/gui/dialogs/dialogs.pri | 9 +-- src/gui/dialogs/qcolordialog.cpp | 21 ++++++ src/gui/dialogs/qcolordialog_symbian.cpp | 107 +++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 src/gui/dialogs/qcolordialog_symbian.cpp diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index 443c5e9..c25b6d5 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -109,12 +109,9 @@ SOURCES += \ dialogs/qprintpreviewdialog.cpp symbian:contains(QT_CONFIG, s60) { - LIBS += -lcommondialogs \ - -lavkon \ - -lplatformenv \ - -lefsrv \ - -lgdi - SOURCES += dialogs/qfiledialog_symbian.cpp + LIBS += -lcommondialogs + SOURCES += dialogs/qfiledialog_symbian.cpp \ + dialogs/qcolordialog_symbian.cpp } FORMS += dialogs/qpagesetupwidget.ui diff --git a/src/gui/dialogs/qcolordialog.cpp b/src/gui/dialogs/qcolordialog.cpp index e9b5720..4ef2100 100644 --- a/src/gui/dialogs/qcolordialog.cpp +++ b/src/gui/dialogs/qcolordialog.cpp @@ -1952,6 +1952,12 @@ void QColorDialog::open(QObject *receiver, const char *member) \sa QDialog::open() */ +/* + For Symbian color dialogs +*/ +#ifdef Q_WS_S60 +extern QColor qtSymbianGetColor(const QColor &initial); +#endif /*! \since 4.5 @@ -1961,10 +1967,19 @@ void QColorDialog::open(QObject *receiver, const char *member) QColor::isValid()) color if the user cancels the dialog. The \a options argument allows you to customize the dialog. + + On Symbian, this static function will use the native color dialog and not a QColorDialog. + On Symbian the parameters \a title and \a parent has no relevance and the + \a options parameter is only used to define if the native color dialog is + used or not. */ QColor QColorDialog::getColor(const QColor &initial, QWidget *parent, const QString &title, ColorDialogOptions options) { +#ifdef Q_WS_S60 + if (!(options & DontUseNativeDialog)) + return qtSymbianGetColor(initial); +#endif QColorDialog dlg(parent); if (!title.isEmpty()) dlg.setWindowTitle(title); @@ -1979,10 +1994,16 @@ QColor QColorDialog::getColor(const QColor &initial, QWidget *parent, const QStr returns that color. The color is initially set to \a initial. The dialog is a child of \a parent. It returns an invalid (see QColor::isValid()) color if the user cancels the dialog. + + On Symbian, this static function will use the native + color dialog and not a QColorDialog. */ QColor QColorDialog::getColor(const QColor &initial, QWidget *parent) { +#ifdef Q_WS_S60 + return qtSymbianGetColor(initial); +#endif return getColor(initial, parent, QString(), ColorDialogOptions(0)); } diff --git a/src/gui/dialogs/qcolordialog_symbian.cpp b/src/gui/dialogs/qcolordialog_symbian.cpp new file mode 100644 index 0000000..3f8036c --- /dev/null +++ b/src/gui/dialogs/qcolordialog_symbian.cpp @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcolordialog_p.h" + +#ifndef QT_NO_COLORDIALOG + + +#include "qcolor.h" +#include "private/qguiplatformplugin_p.h" + +#ifdef Q_WS_S60 +#include +#endif + +#include "private/qt_s60_p.h" + +QT_BEGIN_NAMESPACE + +QColor launchSymbianColorDialog(QColor initial) +{ + QColor currentColor = QColor::Invalid; +#ifdef Q_WS_S60 + QT_TRAP_THROWING( + CArrayFixFlat* array = new( ELeave ) CArrayFixFlat(17); + CleanupStack::PushL(array); + array->AppendL(KRgbBlack); + array->AppendL(KRgbDarkGray); + array->AppendL(KRgbDarkRed); + array->AppendL(KRgbDarkGreen); + array->AppendL(KRgbDarkYellow); + array->AppendL(KRgbDarkBlue); + array->AppendL(KRgbDarkMagenta); + array->AppendL(KRgbDarkCyan); + array->AppendL(KRgbRed); + array->AppendL(KRgbGreen); + array->AppendL(KRgbYellow); + array->AppendL(KRgbBlue); + array->AppendL(KRgbMagenta); + array->AppendL(KRgbCyan); + array->AppendL(KRgbGray); + array->AppendL(KRgbWhite); + + TRgb initialColour(initial.red(), initial.green(), initial.blue(), initial.alpha()); + + TBool noneChosen = EFalse; // If true shows the default colour button + CAknColourSelectionGrid* colourSelectionGrid = + CAknColourSelectionGrid::NewL(array, EFalse, noneChosen, initialColour); + CleanupStack::PushL(colourSelectionGrid); + + if (colourSelectionGrid->ExecuteLD()) { + currentColor.setRgb(initialColour.Red(), initialColour.Green(), + initialColour.Blue(), initialColour.Alpha()); + } + CleanupStack::Pop(colourSelectionGrid); + CleanupStack::PopAndDestroy(array); + ); +#endif + return currentColor; +} + +QColor qtSymbianGetColor(const QColor &initial) +{ + return launchSymbianColorDialog(initial); +} + +QT_END_NAMESPACE + +#endif // QT_NO_COLORDIALOG -- cgit v0.12 From f9c97d3a4ab7bbd0ca2f4cf33a53025af23fc47c Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Tue, 23 Nov 2010 11:13:41 +0100 Subject: Fix QPixmap::fromImage() in the OpenVG pixmap backend. If QPixmap::fromImage() was called with a QImage that has an alpha channel and with the 'Qt::NoOpaqueDetection' image conversion flag set, then we would always create an opaque (RGB32) pixmap. This is incorrect. The fix is to check if the source QImage has an alpha channel and if so, use sourceFormat(), otherwise use RGB32. Task-number: QT-4278 Reviewed-by: Jani Hautakangas --- src/openvg/qpixmapdata_vg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp index 509882b..c3c7def 100644 --- a/src/openvg/qpixmapdata_vg.cpp +++ b/src/openvg/qpixmapdata_vg.cpp @@ -214,7 +214,7 @@ void QVGPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags else if (!(flags & Qt::NoOpaqueDetection) && const_cast(image).data_ptr()->checkForAlphaPixels()) format = sourceFormat(); else - format = QImage::Format_RGB32; + format = image.hasAlphaChannel() ? sourceFormat() : QImage::Format_RGB32; if (inPlace && image.data_ptr()->convertInPlace(format, flags)) source = image; -- cgit v0.12 From b5e5d6b39c01c4a3962d07d79c025c16aa1c24a5 Mon Sep 17 00:00:00 2001 From: Janne Koskinen Date: Tue, 23 Nov 2010 12:30:02 +0200 Subject: Fix spaces Remove extra spaces Reviewed-by: Miikka Heikkinen --- src/gui/dialogs/qcolordialog.cpp | 2 +- src/gui/dialogs/qcolordialog_symbian.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/dialogs/qcolordialog.cpp b/src/gui/dialogs/qcolordialog.cpp index 4ef2100..a66a979 100644 --- a/src/gui/dialogs/qcolordialog.cpp +++ b/src/gui/dialogs/qcolordialog.cpp @@ -1968,7 +1968,7 @@ extern QColor qtSymbianGetColor(const QColor &initial); The \a options argument allows you to customize the dialog. - On Symbian, this static function will use the native color dialog and not a QColorDialog. + On Symbian, this static function will use the native color dialog and not a QColorDialog. On Symbian the parameters \a title and \a parent has no relevance and the \a options parameter is only used to define if the native color dialog is used or not. diff --git a/src/gui/dialogs/qcolordialog_symbian.cpp b/src/gui/dialogs/qcolordialog_symbian.cpp index 3f8036c..8f73f7c 100644 --- a/src/gui/dialogs/qcolordialog_symbian.cpp +++ b/src/gui/dialogs/qcolordialog_symbian.cpp @@ -79,7 +79,7 @@ QColor launchSymbianColorDialog(QColor initial) array->AppendL(KRgbGray); array->AppendL(KRgbWhite); - TRgb initialColour(initial.red(), initial.green(), initial.blue(), initial.alpha()); + TRgb initialColour(initial.red(), initial.green(), initial.blue(), initial.alpha()); TBool noneChosen = EFalse; // If true shows the default colour button CAknColourSelectionGrid* colourSelectionGrid = -- cgit v0.12 From 1689f5c557f686b7ad0ab68385402e928e590a13 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 23 Nov 2010 14:29:10 +0200 Subject: Use parent class function to generate Makefile headers in Symbian Qt Creator depends on some of the information generated into the makefile header by MakefileGenerator::writeHeader() function, so changed symmake*.cpp to use it instead of each having separate code for header generation. Task-number: QTBUG-15539 Reviewed-by: Janne Koskinen --- qmake/generators/symbian/symmake_abld.cpp | 11 +---------- qmake/generators/symbian/symmake_sbsv2.cpp | 12 ++---------- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index cd64325..eb39d36 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -184,16 +184,7 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool QTextStream t(&wrapperFile); - t << "# ==============================================================================" << endl; - t << "# Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: "; - t << QDateTime::currentDateTime().toString() << endl; - t << "# This file is generated by qmake and should not be modified by the" << endl; - t << "# user." << endl; - t << "# Name : " << wrapperFile.fileName() << endl; - t << "# Description : Wrapper Makefile for calling Symbian build tools" << endl; - t << "#" << endl; - t << "# ==============================================================================" << "\n" << endl; - t << endl; + MakefileGenerator::writeHeader(t); t << "MAKEFILE = " << fileInfo(wrapperFile.fileName()).fileName() << endl; t << "QMAKE = " << var("QMAKE_QMAKE") << endl; diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index f4a6132..c4b51f2 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -324,16 +324,8 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo QTextStream t(&wrapperFile); - t << "# ==============================================================================" << endl; - t << "# Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: "; - t << QDateTime::currentDateTime().toString() << endl; - t << "# This file is generated by qmake and should not be modified by the" << endl; - t << "# user." << endl; - t << "# Name : " << wrapperFile.fileName() << endl; - t << "# Description : Wrapper Makefile for calling Symbian build tools" << endl; - t << "#" << endl; - t << "# ==============================================================================" << "\n" << endl; - t << endl; + MakefileGenerator::writeHeader(t); + t << "MAKEFILE = " << fileInfo(wrapperFile.fileName()).fileName() << endl; t << "QMAKE = " << var("QMAKE_QMAKE") << endl; t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; -- cgit v0.12 From ad1e82323225e996720136e8b2d669166b8d8441 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Wed, 17 Nov 2010 18:33:22 +0100 Subject: QNetworkAccessManager: enable synchronous HTTP calls To enable synchronous calls, an attribute in the QNetworkRequest has to be set. If set, when QNetworkAccessManager::get() (and post(), put()) returns, the reply is finished and all data has been read in case of success. This feature is semi-public for now (usable, but not documented). To enable this, an attribute in the QNetworkRequest must be set. If this attribute is set, we open a new connection to the server with only one channel and call the channels' sockets' waitFor* methods. Reviewed-by: Markus Goetz --- src/network/access/qhttpnetworkconnection.cpp | 9 +- src/network/access/qhttpnetworkconnection_p.h | 4 +- .../access/qhttpnetworkconnectionchannel.cpp | 2 +- .../access/qhttpnetworkconnectionchannel_p.h | 2 + src/network/access/qhttpnetworkreply.cpp | 6 + src/network/access/qhttpnetworkreply_p.h | 1 + src/network/access/qnetworkaccessbackend.cpp | 1 + src/network/access/qnetworkaccessbackend_p.h | 6 + src/network/access/qnetworkaccessdatabackend.cpp | 6 + src/network/access/qnetworkaccessdatabackend_p.h | 2 + src/network/access/qnetworkaccesshttpbackend.cpp | 140 +++++- src/network/access/qnetworkaccesshttpbackend_p.h | 4 +- src/network/access/qnetworkaccessmanager.cpp | 16 +- src/network/access/qnetworkreplyimpl.cpp | 47 +- src/network/access/qnetworkrequest.h | 3 + .../tst_qabstractnetworkcache.cpp | 111 ++++- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 506 ++++++++++++++++++++- 17 files changed, 799 insertions(+), 67 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 4d27531..0531595 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -327,8 +327,6 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket Q_ASSERT(socket); Q_ASSERT(reply); - Q_Q(QHttpNetworkConnection); - resend = false; //create the response header to be used with QAuthenticatorPrivate. QList > fields = reply->header(); @@ -854,12 +852,17 @@ QHttpNetworkReply* QHttpNetworkConnection::sendRequest(const QHttpNetworkRequest return d->queueRequest(request); } -bool QHttpNetworkConnection::isEncrypted() const +bool QHttpNetworkConnection::isSsl() const { Q_D(const QHttpNetworkConnection); return d->encrypt; } +QHttpNetworkConnectionChannel *QHttpNetworkConnection::channels() const +{ + return d_func()->channels; +} + #ifndef QT_NO_NETWORKPROXY void QHttpNetworkConnection::setCacheProxy(const QNetworkProxy &networkProxy) { diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 8461426c..9f23cbf 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -108,7 +108,9 @@ public: QNetworkProxy transparentProxy() const; #endif - bool isEncrypted() const; + bool isSsl() const; + + QHttpNetworkConnectionChannel *channels() const; #ifndef QT_NO_OPENSSL void setSslConfiguration(const QSslConfiguration &config); diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 02daa50..c8caad4 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -180,7 +180,6 @@ bool QHttpNetworkConnectionChannel::sendRequest() reply->d_func()->autoDecompress = request.d->autoDecompress; reply->d_func()->pipeliningUsed = false; - pendingEncrypt = false; // if the url contains authentication parameters, use the new ones // both channels will use the new authentication parameters if (!request.url().userInfo().isEmpty() && request.withCredentials()) { @@ -1019,6 +1018,7 @@ void QHttpNetworkConnectionChannel::_q_encrypted() if (!socket) return; // ### error state = QHttpNetworkConnectionChannel::IdleState; + pendingEncrypt = false; sendRequest(); } diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index 442086a..fd18042 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -158,6 +158,8 @@ public: bool isSocketWaiting() const; bool isSocketReading() const; + friend class QNetworkAccessHttpBackend; + protected slots: void _q_receiveReply(); void _q_bytesWritten(qint64 bytes); // proceed sending diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index e4eb7c4..21bc427 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -188,6 +188,12 @@ QByteArray QHttpNetworkReply::readAny() return d->responseData.read(); } +QByteArray QHttpNetworkReply::readAll() +{ + Q_D(QHttpNetworkReply); + return d->responseData.readAll(); +} + void QHttpNetworkReply::setDownstreamLimited(bool dsl) { Q_D(QHttpNetworkReply); diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 3f79d81..9cf805c 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -126,6 +126,7 @@ public: qint64 bytesAvailable() const; qint64 bytesAvailableNextBlock() const; QByteArray readAny(); + QByteArray readAll(); void setDownstreamLimited(bool t); bool isFinished() const; diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 05eb6cb..12b6400 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -142,6 +142,7 @@ void QNetworkAccessBackend::emitReplyUploadProgress(qint64 bytesSent, qint64 byt QNetworkAccessBackend::QNetworkAccessBackend() : manager(0) , reply(0) + , synchronous(false) { } diff --git a/src/network/access/qnetworkaccessbackend_p.h b/src/network/access/qnetworkaccessbackend_p.h index 7faa5cb..c9ec37e 100644 --- a/src/network/access/qnetworkaccessbackend_p.h +++ b/src/network/access/qnetworkaccessbackend_p.h @@ -157,6 +157,9 @@ public: QVariant attribute(QNetworkRequest::Attribute code) const; void setAttribute(QNetworkRequest::Attribute code, const QVariant &value); + bool isSynchronous() { return synchronous; } + void setSynchronous(bool sync) { synchronous = sync; } + // return true if the QNonContiguousByteDevice of the upload // data needs to support reset(). Currently needed for HTTP. // This will possibly enable buffering of the upload data. @@ -166,6 +169,8 @@ public: virtual bool canResume() const { return false; } virtual void setResumeOffset(quint64 offset) { Q_UNUSED(offset); } + virtual bool processRequestSynchronously() { return false; } + protected: // Create the device used for reading the upload data QNonContiguousByteDevice* createUploadByteDevice(); @@ -200,6 +205,7 @@ private: friend class QNetworkReplyImplPrivate; QNetworkAccessManagerPrivate *manager; QNetworkReplyImplPrivate *reply; + bool synchronous; }; class QNetworkAccessBackendFactory diff --git a/src/network/access/qnetworkaccessdatabackend.cpp b/src/network/access/qnetworkaccessdatabackend.cpp index efb6e3e..74aebdb 100644 --- a/src/network/access/qnetworkaccessdatabackend.cpp +++ b/src/network/access/qnetworkaccessdatabackend.cpp @@ -122,4 +122,10 @@ bool QNetworkAccessDataBackend::waitForUpstreamBytesWritten(int) return false; } +bool QNetworkAccessDataBackend::processRequestSynchronously() +{ + start(); + return true; +} + QT_END_NAMESPACE diff --git a/src/network/access/qnetworkaccessdatabackend_p.h b/src/network/access/qnetworkaccessdatabackend_p.h index a7c63d5..0e5a494 100644 --- a/src/network/access/qnetworkaccessdatabackend_p.h +++ b/src/network/access/qnetworkaccessdatabackend_p.h @@ -68,6 +68,8 @@ public: virtual void closeUpstreamChannel(); virtual bool waitForDownstreamReadyRead(int msecs); virtual bool waitForUpstreamBytesWritten(int msecs); + + virtual bool processRequestSynchronously(); }; class QNetworkAccessDataBackendFactory: public QNetworkAccessBackendFactory diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 80b05a4..070111d 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -50,6 +50,7 @@ #include "qnetworkrequest_p.h" #include "qnetworkcookie_p.h" #include "QtCore/qdatetime.h" +#include "QtCore/qelapsedtimer.h" #include "QtNetwork/qsslconfiguration.h" #ifndef QT_NO_HTTP @@ -318,7 +319,10 @@ void QNetworkAccessHttpBackend::disconnectFromHttp() // Get the object cache that stores our QHttpNetworkConnection objects QNetworkAccessCache *cache = QNetworkAccessManagerPrivate::getObjectCache(this); - cache->releaseEntry(cacheKey); + + // synchronous calls are not put into the cache, so for them the key is empty + if (!cacheKey.isEmpty()) + cache->releaseEntry(cacheKey); } // This is abut disconnecting signals, not about disconnecting TCP connections @@ -639,34 +643,49 @@ void QNetworkAccessHttpBackend::open() if (transparentProxy.type() == QNetworkProxy::DefaultProxy && cacheProxy.type() == QNetworkProxy::DefaultProxy) { // unsuitable proxies - QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, - Q_ARG(QNetworkReply::NetworkError, QNetworkReply::ProxyNotFoundError), - Q_ARG(QString, tr("No suitable proxy found"))); - QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection); - return; + if (isSynchronous()) { + error(QNetworkReply::ProxyNotFoundError, tr("No suitable proxy found")); + finished(); + } else { + QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, + Q_ARG(QNetworkReply::NetworkError, QNetworkReply::ProxyNotFoundError), + Q_ARG(QString, tr("No suitable proxy found"))); + QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection); + } + return; } #endif - // check if we have an open connection to this host - cacheKey = makeCacheKey(this, theProxy); - QNetworkAccessCache *cache = QNetworkAccessManagerPrivate::getObjectCache(this); - // the http object is actually a QHttpNetworkConnection - http = static_cast(cache->requestEntryNow(cacheKey)); - if (http == 0) { - // no entry in cache; create an object - // the http object is actually a QHttpNetworkConnection - http = new QNetworkAccessCachedHttpConnection(url.host(), url.port(), encrypt); - + if (isSynchronous()) { + // for synchronous requests, we just create a new connection + http = new QHttpNetworkConnection(1, url.host(), url.port(), encrypt, this); #ifndef QT_NO_NETWORKPROXY http->setTransparentProxy(transparentProxy); http->setCacheProxy(cacheProxy); #endif + postRequest(); + processRequestSynchronously(); + } else { + // check if we have an open connection to this host + cacheKey = makeCacheKey(this, theProxy); + QNetworkAccessCache *cache = QNetworkAccessManagerPrivate::getObjectCache(this); + // the http object is actually a QHttpNetworkConnection + http = static_cast(cache->requestEntryNow(cacheKey)); + if (http == 0) { + // no entry in cache; create an object + // the http object is actually a QHttpNetworkConnection + http = new QNetworkAccessCachedHttpConnection(url.host(), url.port(), encrypt); - // cache the QHttpNetworkConnection corresponding to this cache key - cache->addEntry(cacheKey, http); - } +#ifndef QT_NO_NETWORKPROXY + http->setTransparentProxy(transparentProxy); + http->setCacheProxy(cacheProxy); +#endif - postRequest(); + // cache the QHttpNetworkConnection corresponding to this cache key + cache->addEntry(cacheKey, static_cast(http.data())); + } + postRequest(); + } } void QNetworkAccessHttpBackend::closeDownstreamChannel() @@ -1125,6 +1144,87 @@ void QNetworkAccessHttpBackend::setResumeOffset(quint64 offset) resumeOffset = offset; } +bool QNetworkAccessHttpBackend::processRequestSynchronously() +{ + QHttpNetworkConnectionChannel *channel = &http->channels()[0]; + + // Disconnect all socket signals. They will only confuse us when using waitFor* + QObject::disconnect(channel->socket, 0, 0, 0); + + qint64 timeout = 20*1000; // 20 sec + QElapsedTimer timeoutTimer; + + bool waitResult = channel->socket->waitForConnected(timeout); + timeoutTimer.start(); + + if (!waitResult || channel->socket->state() != QAbstractSocket::Connected) { + error(QNetworkReply::UnknownNetworkError, QLatin1String("could not connect")); + return false; + } + channel->_q_connected(); // this will send the request (via sendRequest()) + +#ifndef QT_NO_OPENSSL + if (http->isSsl()) { + qint64 remainingTimeEncrypted = timeout - timeoutTimer.elapsed(); + if (!static_cast(channel->socket)->waitForEncrypted(remainingTimeEncrypted)) { + error(QNetworkReply::SslHandshakeFailedError, + QLatin1String("could not encrypt or timeout while encrypting")); + return false; + } + channel->_q_encrypted(); + } +#endif + + // if we get a 401 or 407, we might need to send the request twice, see below + bool authenticating = false; + + do { + channel->sendRequest(); + + qint64 remainingTimeBytesWritten; + while(channel->socket->bytesToWrite() > 0 || + channel->state == QHttpNetworkConnectionChannel::WritingState) { + remainingTimeBytesWritten = timeout - timeoutTimer.elapsed(); + channel->sendRequest(); // triggers channel->socket->write() + if (!channel->socket->waitForBytesWritten(remainingTimeBytesWritten)) { + error(QNetworkReply::TimeoutError, + QLatin1String("could not write bytes to socket or timeout while writing")); + return false; + } + } + + qint64 remainingTimeBytesRead = timeout - timeoutTimer.elapsed(); + // Loop for at most remainingTime until either the socket disconnects + // or the reply is finished + do { + waitResult = channel->socket->waitForReadyRead(remainingTimeBytesRead); + remainingTimeBytesRead = timeout - timeoutTimer.elapsed(); + if (!waitResult || remainingTimeBytesRead <= 0 + || channel->socket->state() != QAbstractSocket::ConnectedState) { + error(QNetworkReply::TimeoutError, + QLatin1String("could not read from socket or timeout while reading")); + return false; + } + + if (channel->socket->bytesAvailable()) + channel->_q_readyRead(); + + if (!httpReply) + return false; // we got a 401 or 407 and cannot handle it (it might happen that + // disconnectFromHttp() was called, in that case the reply is zero) + // ### I am quite sure this does not work for NTLM + // ### how about uploading to an auth / proxyAuth site? + + authenticating = (httpReply->statusCode() == 401 || httpReply->statusCode() == 407); + + if (httpReply->isFinished()) + break; + } while (remainingTimeBytesRead > 0); + } while (authenticating); + + return true; +} + QT_END_NAMESPACE #endif // QT_NO_HTTP diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h index 5de3429..cc2f9ac 100644 --- a/src/network/access/qnetworkaccesshttpbackend_p.h +++ b/src/network/access/qnetworkaccesshttpbackend_p.h @@ -99,6 +99,8 @@ public: bool canResume() const; void setResumeOffset(quint64 offset); + virtual bool processRequestSynchronously(); + private slots: void replyReadyRead(); void replyFinished(); @@ -111,7 +113,7 @@ private slots: private: QHttpNetworkReply *httpReply; - QPointer http; + QPointer http; QByteArray cacheKey; QNetworkAccessBackendUploadIODevice *uploadDevice; diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index effd79e..4bc036e 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1060,12 +1060,14 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera priv->backend->setParent(reply); priv->backend->reply = priv; } - // fourth step: setup the reply - priv->setup(op, request, outgoingData); #ifndef QT_NO_OPENSSL reply->setSslConfiguration(request.sslConfiguration()); #endif + + // fourth step: setup the reply + priv->setup(op, request, outgoingData); + return reply; } @@ -1141,6 +1143,11 @@ void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend } } + // if we emit a signal here in synchronous mode, the user might spin + // an event loop, which might recurse and lead to problems + if (backend->isSynchronous()) + return; + backend->reply->urlForLastAuthentication = url; emit q->authenticationRequired(backend->reply->q_func(), authenticator); cacheCredentials(url, authenticator); @@ -1168,6 +1175,11 @@ void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBac } } + // if we emit a signal here in synchronous mode, the user might spin + // an event loop, which might recurse and lead to problems + if (backend->isSynchronous()) + return; + backend->reply->lastProxyAuthentication = proxy; emit q->proxyAuthenticationRequired(proxy, authenticator); cacheProxyCredentials(proxy, authenticator); diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 5850494..cf6e674 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -85,7 +85,7 @@ void QNetworkReplyImplPrivate::_q_startOperation() } #ifndef QT_NO_BEARERMANAGEMENT - if (!backend->start()) { + if (!backend->start()) { // ### we should call that method even if bearer is not used // backend failed to start because the session state is not Connected. // QNetworkAccessManager will call reply->backend->start() again for us when the session // state changes. @@ -109,11 +109,15 @@ void QNetworkReplyImplPrivate::_q_startOperation() } #endif - if (state != Finished) { - if (operation == QNetworkAccessManager::GetOperation) - pendingNotifications.append(NotifyDownstreamReadyWrite); + if (backend->isSynchronous()) { + state = Finished; + } else { + if (state != Finished) { + if (operation == QNetworkAccessManager::GetOperation) + pendingNotifications.append(NotifyDownstreamReadyWrite); - handleNotifications(); + handleNotifications(); + } } } @@ -287,7 +291,25 @@ void QNetworkReplyImplPrivate::setup(QNetworkAccessManager::Operation op, const url = request.url(); operation = op; - if (outgoingData && backend) { + q->QIODevice::open(QIODevice::ReadOnly); + // Internal code that does a HTTP reply for the synchronous Ajax + // in QtWebKit. + QVariant synchronousHttpAttribute = req.attribute( + static_cast(QNetworkRequest::DownloadBufferAttribute + 1)); + if (synchronousHttpAttribute.toBool()) { + backend->setSynchronous(true); + if (outgoingData && outgoingData->isSequential()) { + outgoingDataBuffer = new QRingBuffer(); + QByteArray data; + do { + data = outgoingData->readAll(); + if (data.isEmpty()) + break; + outgoingDataBuffer->append(data); + } while (1); + } + } + if (outgoingData && backend && !backend->isSynchronous()) { // there is data to be uploaded, e.g. HTTP POST. if (!backend->needsResetableUploadData() || !outgoingData->isSequential()) { @@ -298,7 +320,7 @@ void QNetworkReplyImplPrivate::setup(QNetworkAccessManager::Operation op, const } else { bool bufferingDisallowed = req.attribute(QNetworkRequest::DoNotBufferUploadDataAttribute, - false).toBool(); + false).toBool(); if (bufferingDisallowed) { // if a valid content-length header for the request was supplied, we can disable buffering @@ -323,17 +345,18 @@ void QNetworkReplyImplPrivate::setup(QNetworkAccessManager::Operation op, const // for HTTP, we want to send out the request as fast as possible to the network, without // invoking methods in a QueuedConnection #ifndef QT_NO_HTTP - if (qobject_cast(backend)) { + if (qobject_cast(backend) || (backend && backend->isSynchronous())) { _q_startOperation(); } else { QMetaObject::invokeMethod(q, "_q_startOperation", Qt::QueuedConnection); } #else - QMetaObject::invokeMethod(q, "_q_startOperation", Qt::QueuedConnection); + if (backend->isSynchronous()) + _q_startOperation(); + else + QMetaObject::invokeMethod(q, "_q_startOperation", Qt::QueuedConnection); #endif // QT_NO_HTTP - } - - q->QIODevice::open(QIODevice::ReadOnly); + } } void QNetworkReplyImplPrivate::backendNotify(InternalNotifications notification) diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h index cdadf0f..9bcc900 100644 --- a/src/network/access/qnetworkrequest.h +++ b/src/network/access/qnetworkrequest.h @@ -85,6 +85,9 @@ public: MaximumDownloadBufferSizeAttribute, // internal DownloadBufferAttribute, // internal + // (DownloadBufferAttribute + 1) is reserved internal for QSynchronousHttpNetworkReply + // add the enum in 4.8 + User = 1000, UserMax = 32767 }; diff --git a/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp index 04bd432..fc8a126 100644 --- a/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp +++ b/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp @@ -58,20 +58,29 @@ public: private slots: void expires_data(); void expires(); + void expiresSynchronous_data(); + void expiresSynchronous(); void lastModified_data(); void lastModified(); + void lastModifiedSynchronous_data(); + void lastModifiedSynchronous(); void etag_data(); void etag(); + void etagSynchronous_data(); + void etagSynchronous(); void cacheControl_data(); void cacheControl(); + void cacheControlSynchronous_data(); + void cacheControlSynchronous(); void deleteCache(); private: void check(); + void checkSynchronous(); }; class NetworkDiskCache : public QNetworkDiskCache @@ -142,6 +151,16 @@ void tst_QAbstractNetworkCache::expires() check(); } +void tst_QAbstractNetworkCache::expiresSynchronous_data() +{ + expires_data(); +} + +void tst_QAbstractNetworkCache::expiresSynchronous() +{ + checkSynchronous(); +} + void tst_QAbstractNetworkCache::lastModified_data() { QTest::addColumn("cacheLoadControl"); @@ -164,6 +183,16 @@ void tst_QAbstractNetworkCache::lastModified() check(); } +void tst_QAbstractNetworkCache::lastModifiedSynchronous_data() +{ + tst_QAbstractNetworkCache::lastModified_data(); +} + +void tst_QAbstractNetworkCache::lastModifiedSynchronous() +{ + checkSynchronous(); +} + void tst_QAbstractNetworkCache::etag_data() { QTest::addColumn("cacheLoadControl"); @@ -186,6 +215,16 @@ void tst_QAbstractNetworkCache::etag() check(); } +void tst_QAbstractNetworkCache::etagSynchronous_data() +{ + tst_QAbstractNetworkCache::etag_data(); +} + +void tst_QAbstractNetworkCache::etagSynchronous() +{ + checkSynchronous(); +} + void tst_QAbstractNetworkCache::cacheControl_data() { QTest::addColumn("cacheLoadControl"); @@ -217,6 +256,16 @@ void tst_QAbstractNetworkCache::cacheControl() check(); } +void tst_QAbstractNetworkCache::cacheControlSynchronous_data() +{ + tst_QAbstractNetworkCache::cacheControl_data(); +} + +void tst_QAbstractNetworkCache::cacheControlSynchronous() +{ + checkSynchronous(); +} + void tst_QAbstractNetworkCache::check() { QFETCH(QNetworkRequest::CacheLoadControl, cacheLoadControl); @@ -250,8 +299,6 @@ void tst_QAbstractNetworkCache::check() QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError); QCOMPARE(secondData, QByteArray()); } else { - if (reply2->error() != QNetworkReply::NoError) - qDebug() << reply2->errorString(); QCOMPARE(reply2->error(), QNetworkReply::NoError); QCOMPARE(QString(secondData), QString(goodData)); QCOMPARE(secondData, goodData); @@ -263,16 +310,60 @@ void tst_QAbstractNetworkCache::check() QList rawHeaderList2 = reply2->rawHeaderList(); qSort(rawHeaderList); qSort(rawHeaderList2); + } + QCOMPARE(diskCache->gotData, fetchFromCache); +} - // headers can change - for (int i = 0; i < rawHeaderList.count(); ++i) { - //qDebug() << i << rawHeaderList.value(i) << reply->rawHeader(rawHeaderList.value(i)); - //qDebug() << i << rawHeaderList2.value(i) << reply2->rawHeader(rawHeaderList2.value(i)); - //QCOMPARE(QString(rawHeaderList.value(i)), QString(rawHeaderList2.value(i))); - //QCOMPARE(QString(reply->rawHeader(rawHeaderList.value(i))), QString(reply2->rawHeader(rawHeaderList2.value(i)))); - } - //QCOMPARE(rawHeaderList.count(), rawHeaderList2.count()); +void tst_QAbstractNetworkCache::checkSynchronous() +{ + QSKIP("not working yet, see QTBUG-15221", SkipAll); + QFETCH(QNetworkRequest::CacheLoadControl, cacheLoadControl); + QFETCH(QString, url); + QFETCH(bool, fetchFromCache); + + QNetworkAccessManager manager; + NetworkDiskCache *diskCache = new NetworkDiskCache(&manager); + manager.setCache(diskCache); + QCOMPARE(diskCache->gotData, false); + + QUrl realUrl = url.contains("://") ? url : TESTFILE + url; + QNetworkRequest request(realUrl); + + request.setAttribute( + static_cast(QNetworkRequest::DownloadBufferAttribute + 1), + true); + + // prime the cache + QNetworkReply *reply = manager.get(request); + QVERIFY(reply->isFinished()); // synchronous + QCOMPARE(diskCache->gotData, false); + QByteArray goodData = reply->readAll(); + + request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, cacheLoadControl); + + // should be in the cache now + QNetworkReply *reply2 = manager.get(request); + QVERIFY(reply2->isFinished()); // synchronous + + QByteArray secondData = reply2->readAll(); + if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) { + QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError); + QCOMPARE(secondData, QByteArray()); + } else { + if (reply2->error() != QNetworkReply::NoError) + qDebug() << reply2->errorString(); + QCOMPARE(reply2->error(), QNetworkReply::NoError); + QCOMPARE(QString(secondData), QString(goodData)); + QCOMPARE(secondData, goodData); + QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + } + + if (fetchFromCache) { + QList rawHeaderList = reply->rawHeaderList(); + QList rawHeaderList2 = reply2->rawHeaderList(); + qSort(rawHeaderList); + qSort(rawHeaderList2); } QCOMPARE(diskCache->gotData, fetchFromCache); } diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index ddb7687..90416f2 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -75,7 +75,6 @@ #include "../network-settings.h" - Q_DECLARE_METATYPE(QNetworkReply*) Q_DECLARE_METATYPE(QAuthenticator*) Q_DECLARE_METATYPE(QNetworkProxy) @@ -84,6 +83,8 @@ Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QNetworkReply::NetworkError) Q_DECLARE_METATYPE(QBuffer*) +const int SynchronousRequestAttribute = QNetworkRequest::DownloadBufferAttribute + 1; + class QNetworkReplyPtr: public QSharedPointer { public: @@ -108,6 +109,16 @@ class tst_QNetworkReply: public QObject bool requiresAuthentication; }; + static bool seedCreated; + static QString createUniqueExtension() { + if (!seedCreated) { + qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()) + QCoreApplication::applicationPid()); + seedCreated = true; // not thread-safe, but who cares + } + QString s = QString("%1-%2-%3").arg(QTime(0,0,0).msecsTo(QTime::currentTime())).arg(QCoreApplication::applicationPid()).arg(qrand()); + return s; + }; + QEventLoop *loop; enum RunSimpleRequestReturn { Timeout = 0, Success, Failure }; int returnCode; @@ -173,8 +184,12 @@ private Q_SLOTS: void putToFtp(); void putToHttp_data(); void putToHttp(); + void putToHttpSynchronous_data(); + void putToHttpSynchronous(); void postToHttp_data(); void postToHttp(); + void postToHttpSynchronous_data(); + void postToHttpSynchronous(); void deleteFromHttp_data(); void deleteFromHttp(); void putGetDeleteGetFromHttp_data(); @@ -198,7 +213,9 @@ private Q_SLOTS: void ioGetFromHttpWithReuseParallel(); void ioGetFromHttpWithReuseSequential(); void ioGetFromHttpWithAuth(); + void ioGetFromHttpWithAuthSynchronous(); void ioGetFromHttpWithProxyAuth(); + void ioGetFromHttpWithProxyAuthSynchronous(); void ioGetFromHttpWithSocksProxy(); #ifndef QT_NO_OPENSSL void ioGetFromHttpsWithSslErrors(); @@ -233,6 +250,8 @@ private Q_SLOTS: void ioPostToHttpFromFile(); void ioPostToHttpFromSocket_data(); void ioPostToHttpFromSocket(); + void ioPostToHttpFromSocketSynchronous(); + void ioPostToHttpFromSocketSynchronous_data(); void ioPostToHttpFromMiddleOfFileToEnd(); void ioPostToHttpFromMiddleOfFileFiveBytes(); void ioPostToHttpFromMiddleOfQBufferFiveBytes(); @@ -258,13 +277,19 @@ private Q_SLOTS: void receiveCookiesFromHttp_data(); void receiveCookiesFromHttp(); + void receiveCookiesFromHttpSynchronous_data(); + void receiveCookiesFromHttpSynchronous(); void sendCookies_data(); void sendCookies(); + void sendCookiesSynchronous_data(); + void sendCookiesSynchronous(); void nestedEventLoops(); void httpProxyCommands_data(); void httpProxyCommands(); + void httpProxyCommandsSynchronous_data(); + void httpProxyCommandsSynchronous(); void proxyChange(); void authorizationError_data(); void authorizationError(); @@ -303,12 +328,18 @@ private Q_SLOTS: void qtbug15311doubleContentLength(); + void synchronousRequest_data(); + void synchronousRequest(); + void synchronousRequestSslFailure(); + // NOTE: This test must be last! void parentingRepliesToTheApp(); }; QT_BEGIN_NAMESPACE +bool tst_QNetworkReply::seedCreated = false; + namespace QTest { template<> char *toString(const QNetworkReply::NetworkError& code) @@ -915,14 +946,15 @@ protected: tst_QNetworkReply::tst_QNetworkReply() { + qRegisterMetaType(); // for QSignalSpy + qRegisterMetaType(); + qRegisterMetaType(); + qRegisterMetaType >(); + Q_SET_DEFAULT_IAP testFileName = QDir::currentPath() + "/testfile"; -#ifndef Q_OS_WINCE - uniqueExtension = QString("%1%2%3").arg((qulonglong)this).arg(rand()).arg((qulonglong)time(0)); -#else - uniqueExtension = QString("%1%2").arg((qulonglong)this).arg(rand()); -#endif + uniqueExtension = createUniqueExtension(); cookieJar = new MyCookieJar; manager.setCookieJar(cookieJar); @@ -1009,15 +1041,25 @@ QString tst_QNetworkReply::runSimpleRequest(QNetworkAccessManager::Operation op, Q_ASSERT_X(false, "tst_QNetworkReply", "Invalid/unknown operation requested"); } reply->setParent(this); - connect(reply, SIGNAL(finished()), SLOT(finished())); - connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(gotError())); returnCode = Timeout; - loop = new QEventLoop; - QTimer::singleShot(20000, loop, SLOT(quit())); - int code = returnCode == Timeout ? loop->exec() : returnCode; - delete loop; - loop = 0; + int code = Success; + + if (request.attribute(static_cast(SynchronousRequestAttribute)).toBool()) { + if (reply->isFinished()) + code = reply->error() != QNetworkReply::NoError ? Failure : Success; + else + code = Failure; + } else { + connect(reply, SIGNAL(finished()), SLOT(finished())); + connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(gotError())); + + loop = new QEventLoop; + QTimer::singleShot(20000, loop, SLOT(quit())); + code = returnCode == Timeout ? loop->exec() : returnCode; + delete loop; + loop = 0; + } switch (code) { case Failure: @@ -1492,6 +1534,9 @@ void tst_QNetworkReply::putToFile_data() data = QByteArray(128*1024+1, '\177'); QTest::newRow("128k+1") << data << md5sum(data); + + data = QByteArray(2*1024*1024+1, '\177'); + QTest::newRow("2MB+1") << data << md5sum(data); } void tst_QNetworkReply::putToFile() @@ -1598,6 +1643,47 @@ void tst_QNetworkReply::putToHttp() QCOMPARE(uploadedData, data); } +void tst_QNetworkReply::putToHttpSynchronous_data() +{ + uniqueExtension = createUniqueExtension(); + putToFile_data(); +} + +void tst_QNetworkReply::putToHttpSynchronous() +{ + QUrl url("http://" + QtNetworkSettings::serverName()); + url.setPath(QString("/dav/qnetworkaccess-putToHttp-%1-%2") + .arg(QTest::currentDataTag()) + .arg(uniqueExtension)); + + QNetworkRequest request(url); + QNetworkReplyPtr reply; + + QFETCH(QByteArray, data); + + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data)); + + QCOMPARE(reply->url(), url); + QCOMPARE(reply->error(), QNetworkReply::NoError); + + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created + + // download the file again from HTTP to make sure it was uploaded + // correctly. HTTP/0.9 is enough + QTcpSocket socket; + socket.connectToHost(QtNetworkSettings::serverName(), 80); + socket.write("GET " + url.toEncoded(QUrl::RemoveScheme | QUrl::RemoveAuthority) + "\r\n"); + if (!socket.waitForDisconnected(10000)) + QFAIL("Network timeout"); + + QByteArray uploadedData = socket.readAll(); + QCOMPARE(uploadedData, data); +} + void tst_QNetworkReply::postToHttp_data() { putToFile_data(); @@ -1624,6 +1710,37 @@ void tst_QNetworkReply::postToHttp() QCOMPARE(uploadedData, md5sum.toHex()); } +void tst_QNetworkReply::postToHttpSynchronous_data() +{ + putToFile_data(); +} + +void tst_QNetworkReply::postToHttpSynchronous() +{ + QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi"); + + QNetworkRequest request(url); + + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QNetworkReplyPtr reply; + + QFETCH(QByteArray, data); + + RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); + + QCOMPARE(reply->url(), url); + QCOMPARE(reply->error(), QNetworkReply::NoError); + + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok + + QFETCH(QByteArray, md5sum); + QByteArray uploadedData = reply->readAll().trimmed(); + QCOMPARE(uploadedData, md5sum.toHex()); +} + void tst_QNetworkReply::deleteFromHttp_data() { QTest::addColumn("url"); @@ -2048,9 +2165,6 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential() void tst_QNetworkReply::ioGetFromHttpWithAuth() { - qRegisterMetaType(); // for QSignalSpy - qRegisterMetaType(); - // This test sends three requests // The first two in parallel // The third after the first two finished @@ -2109,6 +2223,44 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth() QCOMPARE(authspy.count(), 0); } + + // now check with synchronous calls: + reference.seek(0); + { + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QSignalSpy authspy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*))); + QNetworkReplyPtr replySync = manager.get(request); + QVERIFY(replySync->isFinished()); // synchronous + QCOMPARE(authspy.count(), 0); + + // we cannot use a data reader here, since that connects to the readyRead signal, + // just use readAll() + + // the only thing we check here is that the auth cache was used when using synchronous requests + QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + QCOMPARE(replySync->readAll(), reference.readAll()); + } +} + +void tst_QNetworkReply::ioGetFromHttpWithAuthSynchronous() +{ + // verify that we do not enter an endless loop with synchronous calls and wrong credentials + // the case when we succed with the login is tested in ioGetFromHttpWithAuth() + + QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfcs-auth/rfc3252.txt")); + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QSignalSpy authspy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*))); + QNetworkReplyPtr replySync = manager.get(request); + QVERIFY(replySync->isFinished()); // synchronous + QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError); + QCOMPARE(authspy.count(), 0); + QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 401); } void tst_QNetworkReply::ioGetFromHttpWithProxyAuth() @@ -2180,6 +2332,47 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuth() QCOMPARE(authspy.count(), 0); } + + // now check with synchronous calls: + reference.seek(0); + { + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QSignalSpy authspy(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); + QNetworkReplyPtr replySync = manager.get(request); + QVERIFY(replySync->isFinished()); // synchronous + QCOMPARE(authspy.count(), 0); + + // we cannot use a data reader here, since that connects to the readyRead signal, + // just use readAll() + + // the only thing we check here is that the proxy auth cache was used when using synchronous requests + QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + QCOMPARE(replySync->readAll(), reference.readAll()); + } +} + +void tst_QNetworkReply::ioGetFromHttpWithProxyAuthSynchronous() +{ + // verify that we do not enter an endless loop with synchronous calls and wrong credentials + // the case when we succed with the login is tested in ioGetFromHttpWithAuth() + + QNetworkProxy proxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::serverName(), 3129); + QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt")); + manager.setProxy(proxy); + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QSignalSpy authspy(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); + QNetworkReplyPtr replySync = manager.get(request); + manager.setProxy(QNetworkProxy()); // reset + QVERIFY(replySync->isFinished()); // synchronous + QCOMPARE(replySync->error(), QNetworkReply::ProxyAuthenticationRequiredError); + QCOMPARE(authspy.count(), 0); + QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 407); } void tst_QNetworkReply::ioGetFromHttpWithSocksProxy() @@ -3238,7 +3431,67 @@ void tst_QNetworkReply::ioPostToHttpFromSocket() QTEST(authenticationRequiredSpy.count(), "authenticationRequiredCount"); QTEST(proxyAuthenticationRequiredSpy.count(), "proxyAuthenticationRequiredCount"); - } +} + +void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous_data() +{ + QTest::addColumn("data"); + QTest::addColumn("md5sum"); + + QByteArray data; + data = ""; + QTest::newRow("empty") << data << md5sum(data); + + data = "This is a normal message."; + QTest::newRow("generic") << data << md5sum(data); + + data = "This is a message to show that Qt rocks!\r\n\n"; + QTest::newRow("small") << data << md5sum(data); + + data = QByteArray("abcd\0\1\2\abcd",12); + QTest::newRow("with-nul") << data << md5sum(data); + + data = QByteArray(4097, '\4'); + QTest::newRow("4k+1") << data << md5sum(data); + + data = QByteArray(128*1024+1, '\177'); + QTest::newRow("128k+1") << data << md5sum(data); + + data = QByteArray(2*1024*1024+1, '\177'); + QTest::newRow("2MB+1") << data << md5sum(data); +} + +void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous() +{ + QFETCH(QByteArray, data); + + SocketPair socketpair; + QVERIFY(socketpair.create()); + QVERIFY(socketpair.endPoints[0] && socketpair.endPoints[1]); + socketpair.endPoints[0]->write(data); + socketpair.endPoints[0]->waitForBytesWritten(5000); + // ### for 4.8: make the socket pair unbuffered, to not read everything in one go in QNetworkReplyImplPrivate::setup() + QTestEventLoop::instance().enterLoop(3); + + QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi"); + QNetworkRequest request(url); + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QNetworkReplyPtr reply = manager.post(request, socketpair.endPoints[1]); + QVERIFY(reply->isFinished()); + socketpair.endPoints[0]->close(); + + QCOMPARE(reply->error(), QNetworkReply::NoError); + + QCOMPARE(reply->url(), url); + QCOMPARE(reply->error(), QNetworkReply::NoError); + // verify that the HTTP status code is 200 Ok + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + + QCOMPARE(reply->readAll().trimmed(), md5sum(data).toHex()); +} // this tests checks if rewinding the POST-data to some place in the middle // worked. @@ -3981,6 +4234,38 @@ void tst_QNetworkReply::receiveCookiesFromHttp() QTEST(cookieJar->allCookies(), "expectedCookiesInJar"); } +void tst_QNetworkReply::receiveCookiesFromHttpSynchronous_data() +{ + tst_QNetworkReply::receiveCookiesFromHttp_data(); +} + +void tst_QNetworkReply::receiveCookiesFromHttpSynchronous() +{ + QFETCH(QString, cookieString); + + QByteArray data = cookieString.toLatin1() + '\n'; + QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/set-cookie.cgi"); + + QNetworkRequest request(url); + + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QNetworkReplyPtr reply; + RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data)); + + QCOMPARE(reply->url(), url); + QCOMPARE(reply->error(), QNetworkReply::NoError); + + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok + + QList setCookies = + qvariant_cast >(reply->header(QNetworkRequest::SetCookieHeader)); + QTEST(setCookies, "expectedCookiesFromHttp"); + QTEST(cookieJar->allCookies(), "expectedCookiesInJar"); +} + void tst_QNetworkReply::sendCookies_data() { QTest::addColumn >("cookiesToSet"); @@ -4041,6 +4326,35 @@ void tst_QNetworkReply::sendCookies() QCOMPARE(QString::fromLatin1(reply->readAll()).trimmed(), expectedCookieString); } +void tst_QNetworkReply::sendCookiesSynchronous_data() +{ + tst_QNetworkReply::sendCookies_data(); +} + +void tst_QNetworkReply::sendCookiesSynchronous() +{ + QFETCH(QString, expectedCookieString); + QFETCH(QList, cookiesToSet); + cookieJar->setAllCookies(cookiesToSet); + + QUrl url("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/get-cookie.cgi"); + QNetworkRequest request(url); + + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QNetworkReplyPtr reply; + RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply)); + + QCOMPARE(reply->url(), url); + QCOMPARE(reply->error(), QNetworkReply::NoError); + + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok + + QCOMPARE(QString::fromLatin1(reply->readAll()).trimmed(), expectedCookieString); +} + void tst_QNetworkReply::nestedEventLoops_slot() { QEventLoop subloop; @@ -4144,6 +4458,49 @@ private: int signalCount; }; +void tst_QNetworkReply::httpProxyCommandsSynchronous_data() +{ + httpProxyCommands_data(); +} + +void tst_QNetworkReply::httpProxyCommandsSynchronous() +{ + QFETCH(QUrl, url); + QFETCH(QByteArray, responseToSend); + QFETCH(QString, expectedCommand); + + // when using synchronous commands, we need a different event loop for + // the server thread, because the client is never returning to the + // event loop + MiniHttpServer proxyServer(responseToSend); + QThread serverThread; + proxyServer.moveToThread(&serverThread); + serverThread.start(); + QNetworkProxy proxy(QNetworkProxy::HttpProxy, "127.0.0.1", proxyServer.serverPort()); + + manager.setProxy(proxy); + QNetworkRequest request(url); + + // send synchronous request + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QNetworkReplyPtr reply = manager.get(request); + QVERIFY(reply->isFinished()); // synchronous + manager.setProxy(QNetworkProxy()); + serverThread.quit(); + + //qDebug() << reply->error() << reply->errorString(); + + // we don't really care if the request succeeded + // especially since it won't succeed in the HTTPS case + // so just check that the command was correct + + QString receivedHeader = proxyServer.receivedData.left(expectedCommand.length()); + QCOMPARE(receivedHeader, expectedCommand); +} + void tst_QNetworkReply::proxyChange() { ProxyChangeHelper helper; @@ -4746,7 +5103,122 @@ void tst_QNetworkReply::qtbug15311doubleContentLength() QCOMPARE(reply->readAll(), QByteArray("ABC")); } +void tst_QNetworkReply::synchronousRequest_data() +{ + QTest::addColumn("url"); + QTest::addColumn("expected"); + QTest::addColumn("checkContentLength"); + QTest::addColumn("mimeType"); + + // ### cache, auth, proxies + + QTest::newRow("http") + << QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt") + << QString("file:" SRCDIR "/rfc3252.txt") + << true + << QString("text/plain"); + + QTest::newRow("http-gzip") + << QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/deflate/rfc3252.txt") + << QString("file:" SRCDIR "/rfc3252.txt") + << false // don't check content length, because it's gzip encoded + // ### we would need to enflate (un-deflate) the file content and compare the sizes + << QString("text/plain"); + +#ifndef QT_NO_OPENSSL + QTest::newRow("https") + << QUrl("https://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt") + << QString("file:" SRCDIR "/rfc3252.txt") + << true + << QString("text/plain"); +#endif + + QTest::newRow("data") + << QUrl(QString::fromLatin1("data:text/plain,hello world")) + << QString("data:hello world") + << true // check content length + << QString("text/plain"); + + QTest::newRow("simple-file") + << QUrl(QString::fromLatin1("file:///" SRCDIR "/rfc3252.txt")) + << QString("file:" SRCDIR "/rfc3252.txt") + << true + << QString(); +} + +// FIXME add testcase for failing network etc +void tst_QNetworkReply::synchronousRequest() +{ + QFETCH(QUrl, url); + QFETCH(QString, expected); + QFETCH(bool, checkContentLength); + QFETCH(QString, mimeType); + + QNetworkRequest request(url); + +#ifndef QT_NO_OPENSSL + // workaround for HTTPS requests: add self-signed server cert to list of CA certs, + // since we cannot react to the sslErrors() signal + // to fix this properly we would need to have an ignoreSslErrors() method in the + // QNetworkRequest, see http://bugreports.qt.nokia.com/browse/QTBUG-14774 + if (url.scheme() == "https") { + QSslConfiguration sslConf; + QList certs = QSslCertificate::fromPath(SRCDIR "/certs/qt-test-server-cacert.pem"); + sslConf.setCaCertificates(certs); + request.setSslConfiguration(sslConf); + } +#endif + + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + + QNetworkReplyPtr reply; + QSignalSpy finishedSpy(&manager, SIGNAL(finished(QNetworkReply*))); + QSignalSpy sslErrorsSpy(&manager, SIGNAL(sslErrors(QNetworkReply*,QList))); + RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply, 0)); + QVERIFY(reply->isFinished()); + QCOMPARE(finishedSpy.count(), 0); + QCOMPARE(sslErrorsSpy.count(), 0); + + QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), mimeType); + + QByteArray expectedContent; + + if (expected.startsWith("file:")) { + QString path = expected.mid(5); + QFile file(path); + file.open(QIODevice::ReadOnly); + expectedContent = file.readAll(); + } else if (expected.startsWith("data:")) { + expectedContent = expected.mid(5).toUtf8(); + } + + if (checkContentLength) + QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(expectedContent.size())); + QCOMPARE(reply->readAll(), expectedContent); + + reply->deleteLater(); +} + +void tst_QNetworkReply::synchronousRequestSslFailure() +{ + // test that SSL won't be accepted with self-signed certificate, + // and that we do not emit the sslError signal (in the manager that is, + // in the reply we don't care) + QUrl url("https://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt"); + QNetworkRequest request(url); + request.setAttribute( + static_cast(SynchronousRequestAttribute), + true); + QNetworkReplyPtr reply; + QSignalSpy sslErrorsSpy(&manager, SIGNAL(sslErrors(QNetworkReply *, const QList &))); + runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply, 0); + QVERIFY(reply->isFinished()); + QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError); + QCOMPARE(sslErrorsSpy.count(), 0); +} // NOTE: This test must be last testcase in tst_qnetworkreply! void tst_QNetworkReply::parentingRepliesToTheApp() -- cgit v0.12 From b91221ebe4acc5f59793b1070dd134ed56eb91fb Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 23 Nov 2010 17:53:25 +0100 Subject: HTTP backend: fix build without Qt3 support Reviewed-by: Markus Goetz --- src/network/access/qnetworkaccesshttpbackend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 070111d..9df5d7b 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -1157,7 +1157,7 @@ bool QNetworkAccessHttpBackend::processRequestSynchronously() bool waitResult = channel->socket->waitForConnected(timeout); timeoutTimer.start(); - if (!waitResult || channel->socket->state() != QAbstractSocket::Connected) { + if (!waitResult || channel->socket->state() != QAbstractSocket::ConnectedState) { error(QNetworkReply::UnknownNetworkError, QLatin1String("could not connect")); return false; } -- cgit v0.12 From fb9604741c40790cef72d06afe6ca53165f57b16 Mon Sep 17 00:00:00 2001 From: Justin McPherson Date: Wed, 24 Nov 2010 10:45:53 +1000 Subject: Fix compliation of ALSA audio backend when checking for surround support. Surround support requires ALSA lib >= 1.0.14 Task-number: QTBUG-15205 Reviewed-by: Andrew den Exter --- src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp | 6 ++++++ src/multimedia/audio/qaudiodeviceinfo_alsa_p.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index 25622a4..3617d24 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -63,7 +63,9 @@ QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode device = QLatin1String(dev); this->mode = mode; +#if (SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) checkSurround(); +#endif } QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal() @@ -394,9 +396,11 @@ void QAudioDeviceInfoInternal::updateLists() } channelz.append(1); channelz.append(2); +#if (SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) if (surround40) channelz.append(4); if (surround51) channelz.append(6); if (surround71) channelz.append(8); +#endif sizez.append(8); sizez.append(16); sizez.append(32); @@ -494,6 +498,7 @@ QByteArray QAudioDeviceInfoInternal::defaultOutputDevice() return devices.first(); } +#if (SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) void QAudioDeviceInfoInternal::checkSurround() { QList devices; @@ -534,5 +539,6 @@ void QAudioDeviceInfoInternal::checkSurround() } snd_device_name_free_hint(hints); } +#endif QT_END_NAMESPACE diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h index 8525980..5f7e5e8 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.h @@ -98,10 +98,12 @@ private: bool open(); void close(); +#if (SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) void checkSurround(); bool surround40; bool surround51; bool surround71; +#endif QString device; QAudio::Mode mode; -- cgit v0.12 From d13d0246352a5d6c26d28d2b8ff8313eb30f6299 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 24 Nov 2010 08:36:15 +0000 Subject: Fixed tst_qwidget::winIdChangeEvent During reparenting of a native widget, the winId is now first set to zero before being set to the new value. Reviewed-by: Jason Barron --- tests/auto/qwidget/tst_qwidget.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 09af941..5521873 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -4389,7 +4389,6 @@ class WinIdChangeWidget : public QWidget { public: WinIdChangeWidget(QWidget *p = 0) : QWidget(p) - , m_winIdChangeEventCount(0) { } @@ -4397,13 +4396,14 @@ protected: bool event(QEvent *e) { if (e->type() == QEvent::WinIdChange) { - ++m_winIdChangeEventCount; + m_winIdList.append(internalWinId()); return true; } return QWidget::event(e); } public: - int m_winIdChangeEventCount; + QList m_winIdList; + int winIdChangeEventCount() const { return m_winIdList.count(); } }; void tst_QWidget::winIdChangeEvent() @@ -4414,7 +4414,7 @@ void tst_QWidget::winIdChangeEvent() const WId winIdBefore = widget.internalWinId(); const WId winIdAfter = widget.winId(); QVERIFY(winIdBefore != winIdAfter); - QCOMPARE(widget.m_winIdChangeEventCount, 1); + QCOMPARE(widget.winIdChangeEventCount(), 1); } { @@ -4423,11 +4423,13 @@ void tst_QWidget::winIdChangeEvent() QWidget parent1, parent2; WinIdChangeWidget child(&parent1); const WId winIdBefore = child.winId(); - QCOMPARE(child.m_winIdChangeEventCount, 1); + QCOMPARE(child.winIdChangeEventCount(), 1); child.setParent(&parent2); const WId winIdAfter = child.internalWinId(); QVERIFY(winIdBefore != winIdAfter); - QCOMPARE(child.m_winIdChangeEventCount, 2); + QCOMPARE(child.winIdChangeEventCount(), 3); + // winId is set to zero during reparenting + QVERIFY(0 == child.m_winIdList[1]); } { @@ -4437,15 +4439,16 @@ void tst_QWidget::winIdChangeEvent() QWidget parent(&grandparent1); WinIdChangeWidget child(&parent); const WId winIdBefore = child.winId(); - QCOMPARE(child.m_winIdChangeEventCount, 1); + QCOMPARE(child.winIdChangeEventCount(), 1); parent.setParent(&grandparent2); const WId winIdAfter = child.internalWinId(); #ifdef Q_OS_SYMBIAN QVERIFY(winIdBefore != winIdAfter); - QCOMPARE(child.m_winIdChangeEventCount, 2); + QVERIFY(winIdAfter != 0); + QCOMPARE(child.winIdChangeEventCount(), 2); #else QCOMPARE(winIdBefore, winIdAfter); - QCOMPARE(child.m_winIdChangeEventCount, 1); + QCOMPARE(child.winIdChangeEventCount(), 1); #endif } @@ -4457,7 +4460,7 @@ void tst_QWidget::winIdChangeEvent() child.setParent(&parent2); const WId winIdAfter = child.internalWinId(); QCOMPARE(winIdBefore, winIdAfter); - QCOMPARE(child.m_winIdChangeEventCount, 0); + QCOMPARE(child.winIdChangeEventCount(), 0); } { @@ -4466,12 +4469,14 @@ void tst_QWidget::winIdChangeEvent() WinIdChangeWidget child(&parent); child.winId(); const WId winIdBefore = child.internalWinId(); - QCOMPARE(child.m_winIdChangeEventCount, 1); + QCOMPARE(child.winIdChangeEventCount(), 1); const Qt::WindowFlags flags = child.windowFlags(); child.setWindowFlags(flags | Qt::Window); const WId winIdAfter = child.internalWinId(); QVERIFY(winIdBefore != winIdAfter); - QCOMPARE(child.m_winIdChangeEventCount, 2); + QCOMPARE(child.winIdChangeEventCount(), 3); + // winId is set to zero during reparenting + QVERIFY(0 == child.m_winIdList[1]); } } -- cgit v0.12 From ba9816d1160998abe75b8b45f4b1c14985119553 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 24 Nov 2010 11:57:49 +0100 Subject: Ensure that if this is does not have a valid filter when on XP or less The renderer is only supported on Windows Vista or later so if we are on an earlier version of Windows then this should not be used. In addition this patch also ensures that it resets the filter if any of the needed functions fail. Task-number: QTBUG-13062 Reviewed-by: Thierry Bastian --- src/3rdparty/phonon/ds9/videorenderer_evr.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/3rdparty/phonon/ds9/videorenderer_evr.cpp b/src/3rdparty/phonon/ds9/videorenderer_evr.cpp index de3f46f..ff39eccc4 100644 --- a/src/3rdparty/phonon/ds9/videorenderer_evr.cpp +++ b/src/3rdparty/phonon/ds9/videorenderer_evr.cpp @@ -62,19 +62,21 @@ namespace Phonon VideoRendererEVR::VideoRendererEVR(QWidget *target) : m_target(target) { + if (QSysInfo::WindowsVersion < QSysInfo::WV_VISTA) + return; m_filter = Filter(CLSID_EnhancedVideoRenderer, IID_IBaseFilter); if (!m_filter) { return; } ComPointer filterControl = getService(m_filter, MR_VIDEO_RENDER_SERVICE, IID_IMFVideoDisplayControl); - if (!filterControl) { + if (!filterControl || + FAILED(filterControl->SetVideoWindow(reinterpret_cast(target->winId()))) || + FAILED(filterControl->SetAspectRatioMode(MFVideoARMode_None)) || // We're in control of the size + !getService(m_filter, MR_VIDEO_MIXER_SERVICE, IID_IMFVideoMixerControl) || + !getService(m_filter, MR_VIDEO_MIXER_SERVICE, IID_IMFVideoProcessor)) { m_filter = Filter(); //will release the interface - return; } - - filterControl->SetVideoWindow(reinterpret_cast(target->winId())); - filterControl->SetAspectRatioMode(MFVideoARMode_None); // We're in control of the size } QImage VideoRendererEVR::snapshot() const -- cgit v0.12 From cbf7a7782f465846455a5fd5df339ebde31a5521 Mon Sep 17 00:00:00 2001 From: Ville Pernu Date: Wed, 24 Nov 2010 12:59:36 +0200 Subject: Fix a missing error-signal when a server is shut down while downloading QT-3494: During download, if a QAbstractSocket::RemoteHostClosedError occurs, the error handling is deferred to _q_disconnected() slot. However, the error message is not saved for the function, and thus the _q_disconnected only emits a finished-signal. Solution: Store an unhandled error into a private member. It is handled and reset by the _q_disconnected (or more specifically, allDone-function). --- src/network/access/qhttpnetworkconnectionchannel.cpp | 18 +++++++++++++++++- src/network/access/qhttpnetworkconnectionchannel_p.h | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 02daa50..39f4811 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -66,6 +66,7 @@ QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel() , bytesTotal(0) , resendCurrent(false) , lastStatus(0) + , unhandledError(QNetworkReply::NoError) , pendingEncrypt(false) , reconnectAttempts(2) , authMethod(QAuthenticatorPrivate::None) @@ -643,7 +644,21 @@ void QHttpNetworkConnectionChannel::allDone() // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (emitFinished) - QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); + { + // Check whether _q_error was invoked previously and if it left a socket + // error unhandled. + if(unhandledError != QNetworkReply::NoError) { + QString errorString = connection->d_func()->errorDetail(unhandledError, socket, socket->errorString()); + qRegisterMetaType("QNetworkReply::NetworkError"); + QMetaObject::invokeMethod(reply, "finishedWithError", + Qt::QueuedConnection, + Q_ARG(QNetworkReply::NetworkError, unhandledError), + Q_ARG(QString, errorString)); + unhandledError = QNetworkReply::NoError; // Reset the value + } else { + QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); + } + } // reset the reconnection attempts after we receive a complete reply. // in case of failures, each channel will attempt two reconnects before emitting error. reconnectAttempts = 2; @@ -965,6 +980,7 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket errorCode = QNetworkReply::RemoteHostClosedError; } } else { + unhandledError = QNetworkReply::RemoteHostClosedError; return; } break; diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index 442086a..33cef5a 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -105,6 +105,7 @@ public: qint64 bytesTotal; bool resendCurrent; int lastStatus; // last status received on this channel + QNetworkReply::NetworkError unhandledError; // Stored code of an unhandled error. bool pendingEncrypt; // for https (send after encrypted) int reconnectAttempts; // maximum 2 reconnection attempts QAuthenticatorPrivate::Method authMethod; -- cgit v0.12 From e1cde7c26b4923299b78e6165416788fbf8cd30e Mon Sep 17 00:00:00 2001 From: hawcroft Date: Thu, 25 Nov 2010 10:10:27 +1000 Subject: fix inf loop bug Task-number: QTBUG-15409 Reviewed-by: Andrew Den-Exter --- src/gui/kernel/qsound_s60.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qsound_s60.cpp b/src/gui/kernel/qsound_s60.cpp index df2830b..accfce2 100644 --- a/src/gui/kernel/qsound_s60.cpp +++ b/src/gui/kernel/qsound_s60.cpp @@ -150,7 +150,7 @@ void QAuServerS60::playCompleted(QAuBucketS60 *bucket, int error) } else { // We don't have a way to inform about errors -> just decrement loops // in order that QSound::isFinished will return true; - while (decLoop(sound)) {} + while (decLoop(sound) > 0) {} if (staticPlayingSounds.removeAll(sound)) delete sound; } -- cgit v0.12 From b04df748d8c170a969eb6a3097cbda7a08fb3ea1 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 25 Nov 2010 10:11:01 +1000 Subject: Document KeyEvent::modifiers Task-number: QTBUG-15569 --- .../graphicsitems/qdeclarativeevents.cpp | 30 +++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeevents.cpp b/src/declarative/graphicsitems/qdeclarativeevents.cpp index 61fd562..4b5e777 100644 --- a/src/declarative/graphicsitems/qdeclarativeevents.cpp +++ b/src/declarative/graphicsitems/qdeclarativeevents.cpp @@ -108,6 +108,34 @@ Item { so that ancestor items do not also respond to the same event. */ +/*! + \qmlproperty int KeyEvent::modifiers + + This property holds the keyboard modifier flags that existed immediately + before the event occurred. + + It contains a bitwise combination of: + \list + \o Qt.NoModifier - No modifier key is pressed. + \o Qt.ShiftModifier - A Shift key on the keyboard is pressed. + \o Qt.ControlModifier - A Ctrl key on the keyboard is pressed. + \o Qt.AltModifier - An Alt key on the keyboard is pressed. + \o Qt.MetaModifier - A Meta key on the keyboard is pressed. + \o Qt.KeypadModifier - A keypad button is pressed. + \endlist + + For example, to react to a Shift key + Enter key combination: + \qml + Item { + focus: true + Keys.onPressed: { + if ((event.key == Qt.Key_Enter) && (event.modifiers & Qt.ShiftModifier)) + doSomething(); + } + } + \endqml +*/ + /*! \qmlclass MouseEvent QDeclarativeMouseEvent @@ -199,7 +227,7 @@ Item { \qml MouseArea { onClicked: { - if (mouse.button == Qt.LeftButton && mouse.modifiers & Qt.ShiftModifier) + if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ShiftModifier)) doSomething(); } } -- cgit v0.12 From 9e353ea7a1fedd020d39e83322286931f536dc16 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Thu, 25 Nov 2010 13:36:24 +1000 Subject: End painting of Rectangle pixmap before inserting it to pixmap cache to avoid an unnecessary copy Task-number: QTBUG-15534 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativerectangle.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index 7686dde..dedb3f7 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -420,6 +420,10 @@ void QDeclarativeRectangle::generateRoundedRect() p.drawRoundedRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, d->rectImage.width()-(pw+1), d->rectImage.height()-(pw+1)), d->radius, d->radius); else p.drawRoundedRect(QRectF(qreal(pw)/2, qreal(pw)/2, d->rectImage.width()-pw, d->rectImage.height()-pw), d->radius, d->radius); + + // end painting before inserting pixmap + // to pixmap cache to avoid a deep copy + p.end(); QPixmapCache::insert(key, d->rectImage); } } @@ -454,6 +458,10 @@ void QDeclarativeRectangle::generateBorderedRect() p.drawRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, d->rectImage.width()-(pw+1), d->rectImage.height()-(pw+1))); else p.drawRect(QRectF(qreal(pw)/2, qreal(pw)/2, d->rectImage.width()-pw, d->rectImage.height()-pw)); + + // end painting before inserting pixmap + // to pixmap cache to avoid a deep copy + p.end(); QPixmapCache::insert(key, d->rectImage); } } -- cgit v0.12 From bb575d308350036eff913a6b61c680712613c540 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 25 Nov 2010 14:21:11 +1000 Subject: Update visual tests Just a frame here or there, probably warranted. --- .../qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml | 2 +- .../qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml index 5cb4f78..a94aca8 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml @@ -994,7 +994,7 @@ VisualTest { } Frame { msec: 3264 - hash: "10a89da9887cb4bbd812c090a8a56797" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Mouse { type: 5 diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml index 8c746bf..920a48f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml @@ -1922,7 +1922,7 @@ VisualTest { } Frame { msec: 4480 - hash: "155a834ddaa7128b6f5a2a406b340315" + hash: "16b99c9cf5297a5251869a3935084cf7" } Mouse { type: 5 @@ -2106,7 +2106,7 @@ VisualTest { } Frame { msec: 4768 - hash: "155a834ddaa7128b6f5a2a406b340315" + hash: "d315f82e175361fed83193ce550cb6e9" } Mouse { type: 5 -- cgit v0.12 From 852f4811453cb0b082748f2fcefac5898e603ab0 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 25 Nov 2010 15:33:13 +1000 Subject: Fixup visual tests on Mac Disable sub-pixel antialiasing and skip text on 10.5 --- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 8 +++++++- tools/qml/qdeclarativetester.cpp | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 2a15102..18fbfca 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -105,10 +105,16 @@ void tst_qmlvisual::visual_data() files << findQmlFiles(QDir(QT_TEST_SOURCE_DIR)); if (qgetenv("QMLVISUAL_ALL") != "1") { #if defined(Q_WS_X11) - //Text on X11 varies per distro - and the CI system is currently using something outdated. + //Text on X11 varies per version - and the CI system is currently using something outdated. foreach(const QString &str, files.filter(QRegExp(".*text.*"))) files.removeAll(str); #endif +#if defined(Q_WS_MAC) + //Text on Mac also varies per version. Only check the text on 10.6 + if(QSysInfo::MacintoshVersion != QSysInfo::MV_10_6) + foreach(const QString &str, files.filter(QRegExp(".*text.*"))) + files.removeAll(str); +#endif #if defined(Q_WS_QWS) //We don't want QWS test results to mire down the CI system files.clear(); diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp index a516fd7..e3a1f59 100644 --- a/tools/qml/qdeclarativetester.cpp +++ b/tools/qml/qdeclarativetester.cpp @@ -274,7 +274,16 @@ void QDeclarativeTester::updateCurrentTime(int msec) if (options & QDeclarativeViewer::TestImages) { img.fill(qRgb(255,255,255)); + +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QPainter p(&img); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif + m_view->render(&p); } -- cgit v0.12 From d11f5011f84099a6558840118588c293605b05d4 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Thu, 25 Nov 2010 17:36:11 +1000 Subject: Update qml visual tests for mac. --- .../data-MAC/flickable-horizontal.0.png | Bin 0 -> 1439 bytes .../data-MAC/flickable-horizontal.1.png | Bin 0 -> 1424 bytes .../data-MAC/flickable-horizontal.2.png | Bin 0 -> 1428 bytes .../data-MAC/flickable-horizontal.3.png | Bin 0 -> 1396 bytes .../data-MAC/flickable-horizontal.4.png | Bin 0 -> 1454 bytes .../data-MAC/flickable-horizontal.qml | 1575 +++++++++++++++++ .../data-MAC/follow.0.png | Bin 0 -> 941 bytes .../data-MAC/follow.1.png | Bin 0 -> 975 bytes .../data-MAC/follow.2.png | Bin 0 -> 1235 bytes .../data-MAC/follow.3.png | Bin 0 -> 1225 bytes .../data-MAC/follow.4.png | Bin 0 -> 1247 bytes .../data-MAC/follow.5.png | Bin 0 -> 1243 bytes .../data-MAC/follow.6.png | Bin 0 -> 1234 bytes .../data-MAC/follow.7.png | Bin 0 -> 1242 bytes .../data-MAC/follow.qml | 1763 ++++++++++++++++++++ .../align/data-MAC/multilineAlign.0.png | Bin 2569 -> 801 bytes .../align/data-MAC/multilineAlign.qml | 118 +- .../baseline/data-MAC/parentanchor.0.png | Bin 5648 -> 1392 bytes .../baseline/data-MAC/parentanchor.qml | 60 +- .../bugs/data-MAC/QTBUG-14469.0.png | Bin 0 -> 210 bytes .../bugs/data-MAC/QTBUG-14469.1.png | Bin 0 -> 270 bytes .../qdeclarativetext/bugs/data-MAC/QTBUG-14469.qml | 475 ++++++ .../qdeclarativetext/data-MAC/qtbug_14865.0.png | Bin 1083 -> 322 bytes .../qdeclarativetext/data-MAC/qtbug_14865.1.png | Bin 1083 -> 322 bytes .../qdeclarativetext/data-MAC/qtbug_14865.qml | 122 +- .../qdeclarativetext/elide/data-MAC/elide.0.png | Bin 1353 -> 491 bytes .../qdeclarativetext/elide/data-MAC/elide.1.png | Bin 1353 -> 491 bytes .../qdeclarativetext/elide/data-MAC/elide.qml | 130 +- .../qdeclarativetext/elide/data-MAC/elide2.0.png | Bin 3572 -> 1240 bytes .../qdeclarativetext/elide/data-MAC/elide2.1.png | Bin 3320 -> 1106 bytes .../qdeclarativetext/elide/data-MAC/elide2.2.png | Bin 2953 -> 999 bytes .../qdeclarativetext/elide/data-MAC/elide2.3.png | Bin 2386 -> 864 bytes .../qdeclarativetext/elide/data-MAC/elide2.4.png | Bin 1650 -> 703 bytes .../qdeclarativetext/elide/data-MAC/elide2.qml | 480 +++--- .../elide/data-MAC/multilength.0.png | Bin 2748 -> 791 bytes .../elide/data-MAC/multilength.1.png | Bin 3064 -> 854 bytes .../elide/data-MAC/multilength.qml | 144 +- .../qdeclarativetext/font/data-MAC/plaintext.0.png | Bin 60155 -> 14238 bytes .../font/data-MAC/plaintext2.0.png | Bin 3805 -> 1563 bytes .../font/data-MAC/plaintext3.0.png | Bin 21056 -> 6348 bytes .../qdeclarativetext/font/data-MAC/richtext.0.png | Bin 62489 -> 9321 bytes .../qdeclarativetext/font/data-MAC/richtext2.0.png | Bin 29962 -> 10663 bytes .../qdeclarativetextinput/data-MAC/echoMode.1.png | Bin 715 -> 343 bytes .../qdeclarativetextinput/data-MAC/echoMode.2.png | Bin 1295 -> 461 bytes .../qdeclarativetextinput/data-MAC/echoMode.3.png | Bin 1922 -> 539 bytes .../qdeclarativetextinput/data-MAC/echoMode.qml | 332 ++-- .../data-MAC/usingLineEdit.qml | 12 +- 47 files changed, 4512 insertions(+), 699 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.0.png new file mode 100644 index 0000000..9a81b29 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.1.png new file mode 100644 index 0000000..2d9c4fd Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.2.png new file mode 100644 index 0000000..2bb0cb0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.3.png new file mode 100644 index 0000000..8260a65 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.4.png new file mode 100644 index 0000000..0abcbc2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.qml new file mode 100644 index 0000000..f1bb428 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data-MAC/flickable-horizontal.qml @@ -0,0 +1,1575 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "flickable-horizontal.0.png" + } + Frame { + msec: 32 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 48 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 64 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 80 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 96 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 112 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 128 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 144 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 160 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 176 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 192 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 208 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 224 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 240 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 256 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 272 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 288 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 304 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 320 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 336 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 352 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 368 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 384 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 400 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 416 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 432 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 448 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 464 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 480 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 496 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 512 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 528 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 544 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 560 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 576 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 592 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 608 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 624 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 640 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 656 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 672 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 688 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 704 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 720 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 447; y: 145 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 736 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 752 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 768 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 446; y: 145 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 784 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 440; y: 146 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 800 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 425; y: 151 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 407; y: 157 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 816 + hash: "c92e345e4ffdb30c28d9d5aa5400bd30" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 359; y: 169 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 832 + hash: "90f94986ab44ab59618e9a5da17b8cc9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 309; y: 181 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 848 + hash: "0154a65f8693b98576101ac1c2fc8761" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 282; y: 187 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 282; y: 187 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 864 + hash: "792c1b5267f14c891dae2348a8188a92" + } + Frame { + msec: 880 + hash: "15ce9e88d4ad2e698bf167d1432c0b8a" + } + Frame { + msec: 896 + hash: "8f4109ef4c24d286d73f689565a0d056" + } + Frame { + msec: 912 + hash: "f5728190bf5c94742686f063b4a4b09b" + } + Frame { + msec: 928 + hash: "a38c7527a9a818b7bc25466b0e4939f9" + } + Frame { + msec: 944 + hash: "ed3902455fc31a4e3232308b815a4daa" + } + Frame { + msec: 960 + hash: "a2093589363ac2d50491412e99e0193a" + } + Frame { + msec: 976 + image: "flickable-horizontal.1.png" + } + Frame { + msec: 992 + hash: "c32349580e3a9586cc1133c935607cf0" + } + Frame { + msec: 1008 + hash: "cd2068492e346eb20d50aee69e3a3559" + } + Frame { + msec: 1024 + hash: "f43a1a38894b8ffad009ba995d84b0ee" + } + Frame { + msec: 1040 + hash: "2d5c4a73df2a054801571f1ce119e31f" + } + Frame { + msec: 1056 + hash: "b8825cc6bdca8102a655d797ea41b5b1" + } + Frame { + msec: 1072 + hash: "3f0be15b85220743d004f2d54b6e137c" + } + Frame { + msec: 1088 + hash: "4b0952d33149b44ffa0a06723a4116c7" + } + Frame { + msec: 1104 + hash: "9056bda43259e92cfe56fdf394e2ca54" + } + Frame { + msec: 1120 + hash: "82ec9f09d2303e5b0b9c05b9a10a84db" + } + Frame { + msec: 1136 + hash: "751a9b3054c09d900364d7c9cac8bc2b" + } + Frame { + msec: 1152 + hash: "17dfdfef20f9da7e8b6f16df974baea9" + } + Frame { + msec: 1168 + hash: "108e6d9a5a81df32823bfd7a90a000a7" + } + Frame { + msec: 1184 + hash: "71dd0d55a3e837d3a8e4b4e318579ade" + } + Frame { + msec: 1200 + hash: "8013cdb2615bca89134ea040409af509" + } + Frame { + msec: 1216 + hash: "4b2826ad4c755690bd837994133f5fac" + } + Frame { + msec: 1232 + hash: "52d0da7f138bd37ac587a448d6402aca" + } + Frame { + msec: 1248 + hash: "e634724c5bb294d338210845bf64d2cf" + } + Frame { + msec: 1264 + hash: "59bc5f0d057ee431f289806377f19213" + } + Frame { + msec: 1280 + hash: "6ef2c5f7766c2cc77b30d636bfaa4422" + } + Frame { + msec: 1296 + hash: "578d056c3db094420dbaa51bd08ced20" + } + Frame { + msec: 1312 + hash: "14c6f7a04a52caffefa07af556ccb262" + } + Frame { + msec: 1328 + hash: "7cb63d56fec144d0509ce219fc6fe459" + } + Frame { + msec: 1344 + hash: "462dafa7f6427aecf6c28a5dcf5a10cc" + } + Frame { + msec: 1360 + hash: "45360814f985ed780a443568a91fc170" + } + Frame { + msec: 1376 + hash: "0d18ceb2436e4f7eb56a3443fab706e6" + } + Frame { + msec: 1392 + hash: "1d83f367ba9f7f1d4496208271e925ed" + } + Frame { + msec: 1408 + hash: "fdbd00ee4c122aef779df42ea53f403a" + } + Frame { + msec: 1424 + hash: "bedd1cb304efd4851813b39a746198a4" + } + Frame { + msec: 1440 + hash: "9aa7bed86efa9634466736f20ee0ab5b" + } + Frame { + msec: 1456 + hash: "00fc8186a7ae44e10195a7b13defa0d2" + } + Frame { + msec: 1472 + hash: "42d6e8e0bbed879ed63644c83e61e7bd" + } + Frame { + msec: 1488 + hash: "df074f8c210249e5ef652349479b6325" + } + Frame { + msec: 1504 + hash: "4f94020437e35cf44dd3576997990ab7" + } + Frame { + msec: 1520 + hash: "8ca6c3b4fa3be73ac35073356b680a35" + } + Frame { + msec: 1536 + hash: "c25eee1c5791383ebc59974e7754eacb" + } + Frame { + msec: 1552 + hash: "f4917ada78942428cc6b9aa5e56c013d" + } + Frame { + msec: 1568 + hash: "23e1e607101fc7260a4ac841344f5fe0" + } + Frame { + msec: 1584 + hash: "2dcc7d187d8e0493e5766efbf09ef37c" + } + Frame { + msec: 1600 + hash: "c1e5602753e80cf44d7b330140c6912e" + } + Frame { + msec: 1616 + hash: "febaf72d01a3763461b4b7d2ddd7a23e" + } + Frame { + msec: 1632 + hash: "071262b911b61576f451be25691a57cf" + } + Frame { + msec: 1648 + hash: "44705db9289fd8753b9d63e8bc963b38" + } + Frame { + msec: 1664 + hash: "0c41d7b7d36bd083abfc0b83b862cad9" + } + Frame { + msec: 1680 + hash: "0c41d7b7d36bd083abfc0b83b862cad9" + } + Frame { + msec: 1696 + hash: "071262b911b61576f451be25691a57cf" + } + Frame { + msec: 1712 + hash: "a00aa90e894b48203b0446ca287ee712" + } + Frame { + msec: 1728 + hash: "26c9ca53ee4b084c6595ad65bf4880df" + } + Frame { + msec: 1744 + hash: "f4917ada78942428cc6b9aa5e56c013d" + } + Frame { + msec: 1760 + hash: "ffedee7bf2d8099e361b8b1706b03f88" + } + Frame { + msec: 1776 + hash: "1778ef1629ce977015b641448b46634f" + } + Frame { + msec: 1792 + hash: "42d6e8e0bbed879ed63644c83e61e7bd" + } + Frame { + msec: 1808 + hash: "99e843ec69b79b79b0792e0a2f28cd1b" + } + Frame { + msec: 1824 + hash: "8b3ebca70b50a6a93823e015ea80f0f9" + } + Frame { + msec: 1840 + hash: "8eaa7f076064ce55051237b04861e408" + } + Frame { + msec: 1856 + hash: "6acc0ca5e5808d911287edfa78c8ac02" + } + Frame { + msec: 1872 + hash: "e9f05899e0b53c21f6efe834095a3ea4" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 91; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 93; y: 209 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1888 + hash: "e9f05899e0b53c21f6efe834095a3ea4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 99; y: 210 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 108; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1904 + hash: "d2dece405f5f6ed1de2acb6615a931de" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 142; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1920 + hash: "21e0f21edc77424e8327c9a3350ecc1d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1936 + image: "flickable-horizontal.2.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 229; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 266; y: 220 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1952 + hash: "c10c8b0c94f899414d8b3ef0b7c97646" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 322; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 322; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1968 + hash: "807aff4e6c96a9d0de7fa55e233446b1" + } + Frame { + msec: 1984 + hash: "dbd02848cefacbb26f4bcb7d8f073d6c" + } + Frame { + msec: 2000 + hash: "9a60608d8ea1b39fa2d3851873f2f08e" + } + Frame { + msec: 2016 + hash: "e7b3e3a40281f63889808211d6746374" + } + Frame { + msec: 2032 + hash: "188c225c46ec00105df230bfeea09974" + } + Frame { + msec: 2048 + hash: "e2e977b42e91d8c5dee57fd8245692eb" + } + Frame { + msec: 2064 + hash: "ca2f12fb173c405f95e608858ab982ad" + } + Frame { + msec: 2080 + hash: "fa86ee5f25fa425cf2569c8ef570b9d8" + } + Frame { + msec: 2096 + hash: "9b74656866fb8c7394bbbecec6414aca" + } + Frame { + msec: 2112 + hash: "87147326d1baab174c0f9a5ccdc2cb84" + } + Frame { + msec: 2128 + hash: "c0d00f98c71bf3f8e5954b45fbab95a8" + } + Frame { + msec: 2144 + hash: "c087d1d62e56e573b55c1d8599bba8a6" + } + Frame { + msec: 2160 + hash: "dd5a94c6febdee58e8f115cb75131aaa" + } + Frame { + msec: 2176 + hash: "a7465d6137f865f512ce65ceb29533b4" + } + Frame { + msec: 2192 + hash: "409086f6bb661aab8b548fea56d7e6b1" + } + Frame { + msec: 2208 + hash: "6a22911e0fb58df31271baa463ff599d" + } + Frame { + msec: 2224 + hash: "c4f6dd30d5fdfcf91a8b29cf5c622423" + } + Frame { + msec: 2240 + hash: "5a95b83f237c7243a198a43e9a587179" + } + Frame { + msec: 2256 + hash: "d79ed290efc6dbd976d574bf0b14a6a3" + } + Frame { + msec: 2272 + hash: "a7bcb436e96d7c981852239462573495" + } + Frame { + msec: 2288 + hash: "f63cc82e351daab503e316f8b516990f" + } + Frame { + msec: 2304 + hash: "4ea63cd25a1424042ffc60549a78563c" + } + Frame { + msec: 2320 + hash: "ef0fb776012575b3b0dbf6e5f4dee571" + } + Frame { + msec: 2336 + hash: "e2508faec7737be2666d87ad715b5f74" + } + Frame { + msec: 2352 + hash: "9fe4e897c6b853f774d11817a0eb53bf" + } + Frame { + msec: 2368 + hash: "c122ce2e73cbfedcc99d649c21d91f9d" + } + Frame { + msec: 2384 + hash: "883b8b180853f1f432ae98ddfe1b6ce3" + } + Frame { + msec: 2400 + hash: "d0808284e431da60f61d571c257a3011" + } + Frame { + msec: 2416 + hash: "df90f19450bf4d9496aab987a89e3a02" + } + Frame { + msec: 2432 + hash: "5640c1e64556b90e7fbd4448fa9db462" + } + Frame { + msec: 2448 + hash: "6d9b5c2f7d0dedbbc444e69bb39fed08" + } + Frame { + msec: 2464 + hash: "485c4a8049068cf73bf22db5fd3618be" + } + Frame { + msec: 2480 + hash: "9e25da59c9e7e4cf7796902e8e2ff92a" + } + Frame { + msec: 2496 + hash: "bd45e8f2442d7c1a1b16a762bc29e7cf" + } + Frame { + msec: 2512 + hash: "ec1013d23e581dbb39b1549d2e1b3b32" + } + Frame { + msec: 2528 + hash: "1ea3c2fde8ee3a14406e027f2124d793" + } + Frame { + msec: 2544 + hash: "3c3f31a05fb2f32538872c9fa158aaab" + } + Frame { + msec: 2560 + hash: "05a84d9c55e634ec01edd2a63e13613b" + } + Frame { + msec: 2576 + hash: "0f7ccd2da58e2e73b0ab18bb681dafd5" + } + Frame { + msec: 2592 + hash: "e481ff78029f8bc4bf7c697db6824f6a" + } + Frame { + msec: 2608 + hash: "efb92b8b7a90acabeb4a8d5cae52fe3c" + } + Frame { + msec: 2624 + hash: "4728dd0fac4edf40cfd5ef5a422b4ed9" + } + Frame { + msec: 2640 + hash: "27641dcd772c979ae22d12bfbadbb67f" + } + Frame { + msec: 2656 + hash: "26268714105bc4832d336a38a859fc50" + } + Frame { + msec: 2672 + hash: "caf0d351d3b6914ca52853a30643ea48" + } + Frame { + msec: 2688 + hash: "319824b1143925162f04aaddcfaa65d9" + } + Frame { + msec: 2704 + hash: "73aa36815f34bf5e005000e7da38555e" + } + Frame { + msec: 2720 + hash: "73aa36815f34bf5e005000e7da38555e" + } + Frame { + msec: 2736 + hash: "319824b1143925162f04aaddcfaa65d9" + } + Frame { + msec: 2752 + hash: "caf0d351d3b6914ca52853a30643ea48" + } + Frame { + msec: 2768 + hash: "6608412ee80d14e13a1a05fb4716e719" + } + Frame { + msec: 2784 + hash: "f4f6f002fb76407a5120329972285dc4" + } + Frame { + msec: 2800 + hash: "474d8b566b9e4ef7dc125a8df30ccbb1" + } + Frame { + msec: 2816 + hash: "0133138f30be4ffc7f3af3d9f477c4b4" + } + Frame { + msec: 2832 + hash: "e9ee9d7d0ab9dcea3f28ae71ee19270f" + } + Frame { + msec: 2848 + hash: "9fd9eb665a42b48583bc28c6c0118799" + } + Frame { + msec: 2864 + hash: "94231107bc4a7e900fe5f4eb823bd9bf" + } + Frame { + msec: 2880 + hash: "6011b10728fb1c83f10d3c27366ea3a5" + } + Frame { + msec: 2896 + image: "flickable-horizontal.3.png" + } + Frame { + msec: 2912 + hash: "e456c5fddb5fbcb02662716f19755622" + } + Frame { + msec: 2928 + hash: "88cef15940302e2b8b43e73234fd7b9c" + } + Frame { + msec: 2944 + hash: "041aecec2b0b0d59a56e1dd26b45cab1" + } + Frame { + msec: 2960 + hash: "0d519463c713f3da46ecacd155e1a0f3" + } + Frame { + msec: 2976 + hash: "5dd0c855b97d298244fb599c9f781651" + } + Frame { + msec: 2992 + hash: "8677cec5e559e51095d89abfeda8e542" + } + Frame { + msec: 3008 + hash: "b05fb6e798ab3fed940b5ac4d88ca378" + } + Frame { + msec: 3024 + hash: "6bc9cc0d3b11ea91856296b0ec934a8b" + } + Frame { + msec: 3040 + hash: "f4e63f3af69dacbf2d1d719d4d03a266" + } + Frame { + msec: 3056 + hash: "31ab08997eb86fab062a3128aecbccb5" + } + Frame { + msec: 3072 + hash: "90736b240ba1e634bd0ea86423908e16" + } + Frame { + msec: 3088 + hash: "90736b240ba1e634bd0ea86423908e16" + } + Frame { + msec: 3104 + hash: "e74982557dc06aac572078840c7e889a" + } + Frame { + msec: 3120 + hash: "e74982557dc06aac572078840c7e889a" + } + Frame { + msec: 3136 + hash: "ca30c14c7344d1711a35c707f8804f6e" + } + Frame { + msec: 3152 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 3168 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 3184 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 3200 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 412; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3216 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 3232 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 3248 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 408; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 407; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3264 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 403; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3280 + hash: "1991cbb0fb053937f922731d5716032c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 398; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3296 + hash: "df447575a4734bb5bd9badc6e27d98e4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 391; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3312 + hash: "0fbfe1e0d7fb54450188398aa40690cd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 383; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3328 + hash: "cb62e60296046c73d301d7186e14faed" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 369; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3344 + hash: "909cbd1292476584554e22232cb43639" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3360 + hash: "e63b7e502dfb2834c06a969b683b9bd3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 331; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "4ea63cd25a1424042ffc60549a78563c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 314; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3392 + hash: "77e39d2d4bfcacecdae4f014e4506d71" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 300; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3408 + hash: "db576eca8bad67cb8b994f12fc448969" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 288; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "efeb3f616da9d78505c3c82fc34ee31c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 278; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3440 + hash: "e4f8bb02f8ac6bc40e1801cc8f360078" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 266; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3456 + hash: "82118ef71809e3867717232c4d9c5518" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 252; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3472 + hash: "5363451c696f6c6eb792b23d086243d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 238; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3488 + hash: "fe6afe8ae8a7c216a1cffc5515f273d5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 227; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3504 + hash: "9b165741d86c70380c15e15cff3fabb6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3520 + hash: "f5e176355468f4fa224d4dfcdd7525a3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 222; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3536 + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Frame { + msec: 3552 + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Frame { + msec: 3568 + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Frame { + msec: 3584 + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Frame { + msec: 3600 + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Frame { + msec: 3616 + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3632 + hash: "f5e176355468f4fa224d4dfcdd7525a3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 232; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3648 + hash: "acf538fce5f1b90b83474d9898b7cdd7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 246; y: 203 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3664 + hash: "5a0ee016b8732fbc36064e8a35d91215" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 265; y: 203 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3680 + hash: "8fd06a14c1de175813845ce8f07db6ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 292; y: 201 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3696 + hash: "26b0ff6ffda0725e0800f7ea3af510ef" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 310; y: 201 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3712 + hash: "80443f134511be0356a687c9b542b3e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 321; y: 199 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3728 + hash: "3eeb98a829d29b3dc52f3d145ac49d58" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 323; y: 199 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3744 + hash: "f4d43069b16f41a30e5549aae911d4cd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 324; y: 199 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 324; y: 199 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3776 + hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + } + Frame { + msec: 3792 + hash: "1520f54b6c8606b9e8372c5c06180453" + } + Frame { + msec: 3808 + hash: "0fcf5e2ce47348cbb5bb485f101fe5ac" + } + Frame { + msec: 3824 + hash: "2eb070e69de07c89830543e0475fc110" + } + Frame { + msec: 3840 + hash: "d73c1059219c0655968af268d22e2c18" + } + Frame { + msec: 3856 + image: "flickable-horizontal.4.png" + } + Frame { + msec: 3872 + hash: "cc969b2c64839ca6d3b5069c0ed938d0" + } + Frame { + msec: 3888 + hash: "1f819e18d1297a1c7eeebb7b040bdef8" + } + Frame { + msec: 3904 + hash: "3643b99afbd8af0953cb39b2c8c04b9f" + } + Frame { + msec: 3920 + hash: "713fd2e2fa38ab27604cb9cae59f1777" + } + Frame { + msec: 3936 + hash: "e2508faec7737be2666d87ad715b5f74" + } + Frame { + msec: 3952 + hash: "fc33b1c7479caeff676ffd885a18d618" + } + Frame { + msec: 3968 + hash: "aca01143db4f870a56bb7546e84cbc5e" + } + Frame { + msec: 3984 + hash: "442b58c39fd3745c61a1eb5043fcbb53" + } + Frame { + msec: 4000 + hash: "7983d7183cc11d6819fa0a006c2d67b4" + } + Frame { + msec: 4016 + hash: "9fe4e897c6b853f774d11817a0eb53bf" + } + Frame { + msec: 4032 + hash: "43f528c81ccfa5b9921dfa3564a24c68" + } + Frame { + msec: 4048 + hash: "dfe04ff0b3ccf205bb38beeab58a4411" + } + Frame { + msec: 4064 + hash: "32ff30b50b500e9feb51e8eef205783c" + } + Frame { + msec: 4080 + hash: "7d83ab4c336b05bcf2cde4e7d8031f6c" + } + Frame { + msec: 4096 + hash: "c92e345e4ffdb30c28d9d5aa5400bd30" + } + Frame { + msec: 4112 + hash: "02eec604d0c00965aae4ac61b91bdc22" + } + Frame { + msec: 4128 + hash: "df447575a4734bb5bd9badc6e27d98e4" + } + Frame { + msec: 4144 + hash: "bac10d8f94a39573313b3b8b2f871c49" + } + Frame { + msec: 4160 + hash: "e5944c5dc6dec8f0c28b7ec3cd58723d" + } + Frame { + msec: 4176 + hash: "1991cbb0fb053937f922731d5716032c" + } + Frame { + msec: 4192 + hash: "50d6538bcaffc343f6626635a3e5899c" + } + Frame { + msec: 4208 + hash: "f3613f57cdb9ed38d8e3fa636962aa99" + } + Frame { + msec: 4224 + hash: "10a89da9887cb4bbd812c090a8a56797" + } + Frame { + msec: 4240 + hash: "89ba74d46970ad2edff701475c059ec8" + } + Frame { + msec: 4256 + hash: "6e8b84c70e81578a2216e9e975b35434" + } + Frame { + msec: 4272 + hash: "6e8b84c70e81578a2216e9e975b35434" + } + Frame { + msec: 4288 + hash: "883b8b180853f1f432ae98ddfe1b6ce3" + } + Frame { + msec: 4304 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4320 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4336 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4352 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4368 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4384 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4400 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4416 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4432 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4448 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4464 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4480 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4496 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4512 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4528 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4544 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4560 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4576 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4592 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4608 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4624 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4640 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4656 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4672 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4688 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4704 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.0.png new file mode 100644 index 0000000..8714f58 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.1.png new file mode 100644 index 0000000..05e4a98 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.2.png new file mode 100644 index 0000000..29df073 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.3.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.3.png new file mode 100644 index 0000000..b38486e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.4.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.4.png new file mode 100644 index 0000000..4de915b Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.5.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.5.png new file mode 100644 index 0000000..61a4684 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.6.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.6.png new file mode 100644 index 0000000..4ce5e30 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.7.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.7.png new file mode 100644 index 0000000..2376b13 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.qml new file mode 100644 index 0000000..893355b --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-MAC/follow.qml @@ -0,0 +1,1763 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "follow.0.png" + } + Frame { + msec: 32 + hash: "e94ba580322887dbbbf9cb6309e39c23" + } + Frame { + msec: 48 + hash: "787a59cda2c0b27d8959026e6d1b9427" + } + Frame { + msec: 64 + hash: "9ca724d4b31aa16015b5cbb50eea0c3a" + } + Frame { + msec: 80 + hash: "8a2c62a0190da1b7c1bade243baea6b8" + } + Frame { + msec: 96 + hash: "e129bebca7ad348c3134569d8eee4efc" + } + Frame { + msec: 112 + hash: "fd6387415e1c02fe6d17d9c3aa1d1ed8" + } + Frame { + msec: 128 + hash: "a82a4042fdca7c30facd2c4740c455f7" + } + Frame { + msec: 144 + hash: "62195722eb3acbfbad137ec71fd50bfe" + } + Frame { + msec: 160 + hash: "449819cdc880d59650732b5447ec6237" + } + Frame { + msec: 176 + hash: "552a838ebcacc0e08fa93b64a2433831" + } + Frame { + msec: 192 + hash: "3984992606d54f05eb31dd0974af2183" + } + Frame { + msec: 208 + hash: "3fd7225bbb0215ca8b6397580f2352a5" + } + Frame { + msec: 224 + hash: "0fd8f26f40a9049de1cf2a9493d579d1" + } + Frame { + msec: 240 + hash: "d08f0c57f071dc42e79fc5e0e3c32eeb" + } + Frame { + msec: 256 + hash: "084c2db330ee82cd032df248ecc9629d" + } + Frame { + msec: 272 + hash: "98da0d7f280d7fc4579c970c9a173b51" + } + Frame { + msec: 288 + hash: "4c819c54ced1b6ef0574417a7e11f2e7" + } + Frame { + msec: 304 + hash: "3dc5f7b412cb176c3b23d37cda3ef87c" + } + Frame { + msec: 320 + hash: "c368a01b43d94205c03f9c750c37f330" + } + Frame { + msec: 336 + hash: "8842bd0c8b17cac4fc9df84835999174" + } + Frame { + msec: 352 + hash: "26829e9c7ca44dfcb0c03852f4158a18" + } + Frame { + msec: 368 + hash: "ecffdb0888f1721e27b163e1f29a1950" + } + Frame { + msec: 384 + hash: "eaead96f2683c464a12df8aadba20691" + } + Frame { + msec: 400 + hash: "1e931963925bd208dce1ec9011372a3b" + } + Frame { + msec: 416 + hash: "1c3fd049001c1e883f21d0d1e0e32cba" + } + Frame { + msec: 432 + hash: "e8c3422ca637750ac52565594737d092" + } + Frame { + msec: 448 + hash: "b1c36322cf89e15a80af7c43f2aebca1" + } + Frame { + msec: 464 + hash: "f676c3171495f7bb2cb1812cfebaa17a" + } + Frame { + msec: 480 + hash: "255119e2efa99c8e31fee611aaaa5137" + } + Frame { + msec: 496 + hash: "e0bd32e3d44cfc2351db105f4595f18a" + } + Frame { + msec: 512 + hash: "b7f23b8f3769f929b42491efda7ebe19" + } + Frame { + msec: 528 + hash: "718cee11d869a8a8c5191cc0c09f2d30" + } + Frame { + msec: 544 + hash: "fbdbf92f8c5f507605ff50abc594682b" + } + Frame { + msec: 560 + hash: "c07fdc69c72b40d3c8dd1cc499008888" + } + Frame { + msec: 576 + hash: "38e17ecd537dc0f51211ad672a2ebb21" + } + Frame { + msec: 592 + hash: "2cbdc8728ef779c62f9938672986658a" + } + Frame { + msec: 608 + hash: "7fb66509d5d1df34861e9c70f9a579f0" + } + Frame { + msec: 624 + hash: "410b89392e859058718a08b79ec3d8fa" + } + Frame { + msec: 640 + hash: "9bd90f80700217d08dafed93b81ee9cf" + } + Frame { + msec: 656 + hash: "6d83671504a4274887b4e0d9bd2b24e7" + } + Frame { + msec: 672 + hash: "51ff7bd3fd4a776af33fce7b935b145c" + } + Frame { + msec: 688 + hash: "20f27392368b63b248bcd455cf3c9106" + } + Frame { + msec: 704 + hash: "1a5ab296bd55aa215c9b04a7ff6c73a1" + } + Frame { + msec: 720 + hash: "020fd7b14e8662fc006b0c39adca7c6a" + } + Frame { + msec: 736 + hash: "2619120bdb25a153963bdf05c4a16d44" + } + Frame { + msec: 752 + hash: "fd321314031efeb9ce71146764289d9f" + } + Frame { + msec: 768 + hash: "378a71f09445dfff284db919787cbf87" + } + Frame { + msec: 784 + hash: "d59eefe82ab8a00c903141dd9ea767ef" + } + Frame { + msec: 800 + hash: "0a65004d69a4567f2a5c7e84dab3a905" + } + Frame { + msec: 816 + hash: "92a4631716a51ff484ca14d9cfe05b2e" + } + Frame { + msec: 832 + hash: "87203f627cf410cad56d6ba38a140efa" + } + Frame { + msec: 848 + hash: "054cc085998cc059a6b7b4a7300dd36b" + } + Frame { + msec: 864 + hash: "af3fefeb908a0485c723d36f61eff0a4" + } + Frame { + msec: 880 + hash: "3f905d1e1ea79858b5a9bbfeab4eb255" + } + Frame { + msec: 896 + hash: "f935f1fc5f26a201098d894fca9a4d1f" + } + Frame { + msec: 912 + hash: "42b003dbb531da514716b9c32bdd3614" + } + Frame { + msec: 928 + hash: "a82fed83ee4efee7896b639c7691b13a" + } + Frame { + msec: 944 + hash: "31ad8cbf875233ea495330b0d3d4d2dd" + } + Frame { + msec: 960 + hash: "00586f2f1d49fa81f90f7b06614311b4" + } + Frame { + msec: 976 + image: "follow.1.png" + } + Frame { + msec: 992 + hash: "5d71ff48b865ad4266eb8292f981b04e" + } + Frame { + msec: 1008 + hash: "df599d934d131c92b209284277009efb" + } + Frame { + msec: 1024 + hash: "5aaf33d11eb70ffdfe89246c637caed7" + } + Frame { + msec: 1040 + hash: "9648cf623a66ded145c4fd23a42917b3" + } + Frame { + msec: 1056 + hash: "9d33c2cc44ceac5a527ddcf809a51df6" + } + Frame { + msec: 1072 + hash: "6d0ad2e0d012e53a03e246e6d5e49e13" + } + Frame { + msec: 1088 + hash: "d33fa68796e38b19f44571d11c1bcd33" + } + Frame { + msec: 1104 + hash: "636680f49bbf30b0fac31a6c581f18dd" + } + Frame { + msec: 1120 + hash: "66801dbc39301e6b46b244fe502e0340" + } + Frame { + msec: 1136 + hash: "f8fa6a033483279e78636f26493b10ac" + } + Frame { + msec: 1152 + hash: "11b46611550173df42986dee4339d907" + } + Frame { + msec: 1168 + hash: "5c9afdb519006079ee8d28b2b60d0b76" + } + Frame { + msec: 1184 + hash: "9a55c38b2cd8abf25fbe448c7ef80971" + } + Frame { + msec: 1200 + hash: "27ebdf1424e892b35c93ec009d942407" + } + Frame { + msec: 1216 + hash: "2d9e3f0ae56f7337012b51c4dd173108" + } + Frame { + msec: 1232 + hash: "e6f89ca892131d68ff1f4ca95c95d807" + } + Frame { + msec: 1248 + hash: "f75791f1b12a217d37acb09bdb114cc5" + } + Frame { + msec: 1264 + hash: "94c5ab1460fb1b0f957a9718b45bca36" + } + Frame { + msec: 1280 + hash: "e246c8a0ec3d01ea20258b24a5673fe1" + } + Frame { + msec: 1296 + hash: "529de7735e73409dff266d8c1275215c" + } + Frame { + msec: 1312 + hash: "330400763a670580570cb62241ebec62" + } + Frame { + msec: 1328 + hash: "ae444d1de9c509fc6f74136ca90f927a" + } + Frame { + msec: 1344 + hash: "c43631ca8ee90ea5dc7664be5bc45429" + } + Frame { + msec: 1360 + hash: "b366ac4a5b66c331a7667e9df0fc4eda" + } + Frame { + msec: 1376 + hash: "1c7f4c47a9c57a34787cc9703e99bff1" + } + Frame { + msec: 1392 + hash: "5555535609d512e8d34549b6624f74b8" + } + Frame { + msec: 1408 + hash: "be59df714541923494b59f31f57e310e" + } + Frame { + msec: 1424 + hash: "63e434f053032e54298f6e61c8d4da7d" + } + Frame { + msec: 1440 + hash: "b0bb838637eceb6f8993ebc5b887afed" + } + Frame { + msec: 1456 + hash: "fc39f33add4ebcaf578558ecd4aea281" + } + Frame { + msec: 1472 + hash: "3f36faa7cc1e5898d4d5890c47633ff3" + } + Frame { + msec: 1488 + hash: "4b328002b4461869b1f7de48e7291902" + } + Frame { + msec: 1504 + hash: "26252c63924d2abcaebea2c7caf1d7aa" + } + Frame { + msec: 1520 + hash: "a9a6023484ae439be86b2c2ff59dc40b" + } + Frame { + msec: 1536 + hash: "620dab11bd4aab84cc0d949c48dd9a5d" + } + Frame { + msec: 1552 + hash: "3b45ef80ee3e6fbbd3533bfa0d666e2f" + } + Frame { + msec: 1568 + hash: "b33306abcb6a8402e491b7216495c778" + } + Frame { + msec: 1584 + hash: "3cc52e8649a02e87785f1dc63f5c1efd" + } + Frame { + msec: 1600 + hash: "fe21141f48da685213ed9d7641b2e7a0" + } + Frame { + msec: 1616 + hash: "205aac4e822e20bd32f637256250f3c8" + } + Frame { + msec: 1632 + hash: "124df0948f36aaf6151556d301f4b930" + } + Frame { + msec: 1648 + hash: "c1701edd5eaf143fd1dbdc4a5324b48a" + } + Frame { + msec: 1664 + hash: "117402df55367c918a3835958f4ab1d6" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 195; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "73e3b86a1da28490cae4b03fdceefe19" + } + Frame { + msec: 1696 + hash: "172e329fb47d6db0180242990a84fe3b" + } + Frame { + msec: 1712 + hash: "82cf704cdfd406bab22689bc888ddc8d" + } + Frame { + msec: 1728 + hash: "4c288f198a06d1b2815d34c3c8f97051" + } + Frame { + msec: 1744 + hash: "6404d81456bb95a6b1c1ae55a181e40e" + } + Frame { + msec: 1760 + hash: "6c11b9f079936ea08d11aa1172bfd954" + } + Frame { + msec: 1776 + hash: "95388037c1f79a9dab951031f1d7c307" + } + Frame { + msec: 1792 + hash: "c4ee57d9bffbb5f0ff173db48eadf2e3" + } + Frame { + msec: 1808 + hash: "703ac9672a9c55cf08e6381ef76ac13c" + } + Frame { + msec: 1824 + hash: "ea7726d2a2923290398262c8f70d511e" + } + Frame { + msec: 1840 + hash: "9897c12603326a30c62381015c9adae3" + } + Frame { + msec: 1856 + hash: "a52aa37b10a05382f1b136896b7e00e8" + } + Frame { + msec: 1872 + hash: "a5acc1a45c95a67725e5e15084b7be18" + } + Frame { + msec: 1888 + hash: "c9fac8b5a4110493958d49b073ea96ed" + } + Frame { + msec: 1904 + hash: "6fca3a5c6d1cfbf1b905aca25b7785c5" + } + Frame { + msec: 1920 + hash: "a40e5e2744d1d84c8b9a45525801a745" + } + Frame { + msec: 1936 + image: "follow.2.png" + } + Frame { + msec: 1952 + hash: "b2f980ab19d44ee98ab3e82a19adfe2d" + } + Frame { + msec: 1968 + hash: "e01732623930aebefd76ab62c81dc722" + } + Frame { + msec: 1984 + hash: "3a59c6851bc89eb31100092b1ceddbd9" + } + Frame { + msec: 2000 + hash: "2949de19eacb9f35816aa7ba69614f2c" + } + Frame { + msec: 2016 + hash: "f2c4c1f4429cbb6bd10f2318b2cb6904" + } + Frame { + msec: 2032 + hash: "2c48af64162e7e028cd536dba03eab71" + } + Frame { + msec: 2048 + hash: "7fe13b8f9253f720b6591b396cfba2d1" + } + Frame { + msec: 2064 + hash: "559947a03e650575a764801366cc504b" + } + Frame { + msec: 2080 + hash: "a8d09f6c862fd5ec2dcf34f06d1ef744" + } + Frame { + msec: 2096 + hash: "e3bb4b62209631ff84134f2243bfdb42" + } + Frame { + msec: 2112 + hash: "a1956a9d1939bc154ea0c88d596948cc" + } + Frame { + msec: 2128 + hash: "c98a375727860da1e827d4dd74af8f63" + } + Frame { + msec: 2144 + hash: "df4edcbb2ef5348341ff55c808609b6c" + } + Frame { + msec: 2160 + hash: "6287564be85b7cbadc6bb6f0232bc837" + } + Frame { + msec: 2176 + hash: "9826fdb48f7ea770fa5f198ec49d7cb7" + } + Frame { + msec: 2192 + hash: "56f82641a5591df9bb929cc0d32eb95d" + } + Frame { + msec: 2208 + hash: "526c55e555fb2e58796561efa3568c50" + } + Frame { + msec: 2224 + hash: "6b4b74613421c1841a17c369cb316754" + } + Frame { + msec: 2240 + hash: "37f785c30947d5eec113dcf6af649abf" + } + Frame { + msec: 2256 + hash: "5ff2c975dd9e261c764537c836627c4d" + } + Frame { + msec: 2272 + hash: "efe554981583749c3d09988bce7fed02" + } + Frame { + msec: 2288 + hash: "0f7204b4afb0ea5d58e49650e8027c0c" + } + Frame { + msec: 2304 + hash: "817291f91f4b309710ad3aed53a7d47a" + } + Frame { + msec: 2320 + hash: "c15c9cd03089090cf8a777c1f0d88de7" + } + Frame { + msec: 2336 + hash: "05f45cb8d0856dcc81091351615e35d6" + } + Frame { + msec: 2352 + hash: "99785a16fed6d6409b4b47ec55afb56b" + } + Frame { + msec: 2368 + hash: "39032cb4432ee9536af500673fccf526" + } + Frame { + msec: 2384 + hash: "9057653e3cd6042831037d3590e7595b" + } + Frame { + msec: 2400 + hash: "76c772eb2ab8f117c260c9c96bc99e1d" + } + Frame { + msec: 2416 + hash: "b6474665b8f8bcdd76d1a38efecad889" + } + Frame { + msec: 2432 + hash: "106c2d2efafad0181e3ded3a6805f2c6" + } + Frame { + msec: 2448 + hash: "5275fa4ffef6c1909f9d03bb1e7b9cae" + } + Frame { + msec: 2464 + hash: "0c1043c0087d60000dc7259d4ac03618" + } + Frame { + msec: 2480 + hash: "645748569b4f5cb9b206b0808bb7d23d" + } + Frame { + msec: 2496 + hash: "dd95dfa80e1b3ff511e7c75efd0d87ce" + } + Frame { + msec: 2512 + hash: "86b3dd03b04d7610837cdc67cad07e0a" + } + Frame { + msec: 2528 + hash: "8264f67ac92e4ebcfe4cc8e954f8c5d2" + } + Frame { + msec: 2544 + hash: "6bf52377d822b09eb28a1ec36d3a36a9" + } + Frame { + msec: 2560 + hash: "7ae1d65cdaf7fa71eb4ec318b37bb0aa" + } + Frame { + msec: 2576 + hash: "860f5ce9844c90cf9e6a6d383ff0972f" + } + Frame { + msec: 2592 + hash: "5502229c038dfc59d966f69ae6ed8957" + } + Frame { + msec: 2608 + hash: "21843c027bc1434ae60b3bb0fced2c54" + } + Frame { + msec: 2624 + hash: "962df45680949c3eb6c968f98cd76b20" + } + Frame { + msec: 2640 + hash: "f313c26fa76a0edce61244bdf92528e4" + } + Frame { + msec: 2656 + hash: "b7bbde239e98cbd66b1e51b54b747f51" + } + Frame { + msec: 2672 + hash: "62340707fbc832fcb805c8f80ab353d1" + } + Frame { + msec: 2688 + hash: "d008a3f7af1810ff70b68b38a4cd0f0d" + } + Frame { + msec: 2704 + hash: "e651dd628af24faf34d716beb392b052" + } + Frame { + msec: 2720 + hash: "a97733963c7a7616b25741545b07ffba" + } + Frame { + msec: 2736 + hash: "3e017cc1db720cf16521bd17308e4f44" + } + Frame { + msec: 2752 + hash: "13652ebaa610cca71486517e2eed21a5" + } + Frame { + msec: 2768 + hash: "09f0f500c6f7d11be39c31f9e589b38a" + } + Frame { + msec: 2784 + hash: "b87968cbc60ddc6a5f5699e830410eab" + } + Frame { + msec: 2800 + hash: "50e65b043d1f07a321a08ee4c25204f6" + } + Frame { + msec: 2816 + hash: "122d1ffa1510468e8c4067e0f511588f" + } + Frame { + msec: 2832 + hash: "585f6c25caaafb99a22a23d8a998d202" + } + Frame { + msec: 2848 + hash: "9b245a00ad576666c10f509d8a80a61e" + } + Frame { + msec: 2864 + hash: "9b245a00ad576666c10f509d8a80a61e" + } + Frame { + msec: 2880 + hash: "3c5d3d10bacc093afc6a9c0b5aa4cddc" + } + Frame { + msec: 2896 + image: "follow.3.png" + } + Frame { + msec: 2912 + hash: "31926d69c2309fdf13fbd7f0e9868c3d" + } + Frame { + msec: 2928 + hash: "eb3acacce5dd31b0e94b59b9e546ccae" + } + Frame { + msec: 2944 + hash: "9a51cff3276d75803a0a6e480f7ecb70" + } + Frame { + msec: 2960 + hash: "fbbd8b9d519993a699815d935bcd2b9f" + } + Frame { + msec: 2976 + hash: "0314190c6de73f9f374a4eaed0709645" + } + Frame { + msec: 2992 + hash: "8ca1a203bdb5446094eb948aeb0a333e" + } + Frame { + msec: 3008 + hash: "301e1b86ce38e11ad9d0d7aba0909985" + } + Frame { + msec: 3024 + hash: "922095867d0a91b73ab7a63df2041279" + } + Frame { + msec: 3040 + hash: "ba8275f3ba4633bf64a1f81f630c90f1" + } + Frame { + msec: 3056 + hash: "efe39545279a7bd015d2de75d2b9d8b1" + } + Frame { + msec: 3072 + hash: "78926c3c0c6fcf89b9291f9902710964" + } + Frame { + msec: 3088 + hash: "ea63dcb7f00d3ddede0d8be59ad9d6bc" + } + Frame { + msec: 3104 + hash: "286ad493301b713a49e378f123482a53" + } + Frame { + msec: 3120 + hash: "a4bbbb8bb88188d3e99996502e3eebd1" + } + Frame { + msec: 3136 + hash: "a6100e79f3dc5af594e86ab6cd8dfb76" + } + Frame { + msec: 3152 + hash: "d9e3f777dc89bcf1b7f712206db768e2" + } + Frame { + msec: 3168 + hash: "768045c600c0aa0b1e9e6f012733c600" + } + Frame { + msec: 3184 + hash: "d8b4caa641ddee786f7898359efe9d07" + } + Frame { + msec: 3200 + hash: "f7c3b76d5bb7c263ac9447eaad685158" + } + Frame { + msec: 3216 + hash: "f7f97db815d653ec29fa31b87f72af2a" + } + Frame { + msec: 3232 + hash: "18524623762487b60943312cd8bd4388" + } + Frame { + msec: 3248 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3264 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3280 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3296 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3312 + hash: "18524623762487b60943312cd8bd4388" + } + Frame { + msec: 3328 + hash: "430995770b655054aaeda383df8e27f7" + } + Frame { + msec: 3344 + hash: "16a3a00f2b89aed676f80d63c4933ec3" + } + Frame { + msec: 3360 + hash: "6c55aa62079ec546522edbf69c37b270" + } + Frame { + msec: 3376 + hash: "0d68ca3ccecdd831013950cc7405e46e" + } + Frame { + msec: 3392 + hash: "9da2511bc8b434218695fa74ed543439" + } + Frame { + msec: 3408 + hash: "05afdd0b99dab81a500cdc2b2f0786fe" + } + Frame { + msec: 3424 + hash: "e6f8882d146ae60bcc6ea47ff41a637b" + } + Frame { + msec: 3440 + hash: "154542ed0e88321294f382501819aefc" + } + Frame { + msec: 3456 + hash: "8f47b6980c387c5020145bf04645fd2d" + } + Frame { + msec: 3472 + hash: "b34b055c7602f1f4e1cde875b258120c" + } + Frame { + msec: 3488 + hash: "5a697f675575f05e297d4877604b9a47" + } + Frame { + msec: 3504 + hash: "729dff1d1b357d19fc81804ec8940d0e" + } + Frame { + msec: 3520 + hash: "c6f3fee46baa94a6139d2ee40254b160" + } + Frame { + msec: 3536 + hash: "af0e700bb8ae34834510830f8b44afdb" + } + Frame { + msec: 3552 + hash: "9c87bb54c2dfe58c2da9194dae6f7502" + } + Frame { + msec: 3568 + hash: "2132356a92c75d725f9feafb8201b142" + } + Frame { + msec: 3584 + hash: "50d855d2595eeae2bfd6aaa8c2fa0454" + } + Frame { + msec: 3600 + hash: "5fde3c62d6e53a9056e3586f9dcda59e" + } + Frame { + msec: 3616 + hash: "8f04460254a1e9fb949d5165894cd92a" + } + Frame { + msec: 3632 + hash: "2b514c5e3b20d30f9c7e71092c69f081" + } + Frame { + msec: 3648 + hash: "2c1ba6224037790e15f5c0f2864ace4d" + } + Frame { + msec: 3664 + hash: "0d5b8e7bd5f560888aacaf2b3c6827a8" + } + Frame { + msec: 3680 + hash: "ae25004530e7df134414018e4a34780e" + } + Frame { + msec: 3696 + hash: "1a8fd9eaf9a91f1b42924f8986fbed9a" + } + Frame { + msec: 3712 + hash: "2ea6de2025d40ed5beeff12a5b70ccc9" + } + Frame { + msec: 3728 + hash: "624e417718d3cac1e4b7e4ce258ce6ea" + } + Frame { + msec: 3744 + hash: "8b56d29391257c7be8966af6be26ea9f" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 195; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "5c0d977d8b446d9191bde57335cf1062" + } + Frame { + msec: 3776 + hash: "100be2b21d069e3a5dbb694a90da4d4f" + } + Frame { + msec: 3792 + hash: "caab03f6c81080dd8fdbedb4e94ae4a5" + } + Frame { + msec: 3808 + hash: "3328a4d06f2f80a7e9ccf2ff21522fca" + } + Frame { + msec: 3824 + hash: "a534e6cc28daf3eff6a9cf8379bd6375" + } + Frame { + msec: 3840 + hash: "6686f9c1a814c6a6b785b70f94937b68" + } + Frame { + msec: 3856 + image: "follow.4.png" + } + Frame { + msec: 3872 + hash: "d3f1c3593375ca5c022a1361a7ec70bd" + } + Frame { + msec: 3888 + hash: "67843e6192e2ecaa3820c37dc2f93106" + } + Frame { + msec: 3904 + hash: "19a022f678e5b8f4ebdff936162323dc" + } + Frame { + msec: 3920 + hash: "34e55ae70c9e156db339ae15642359c3" + } + Frame { + msec: 3936 + hash: "3784778c817f9d9bb73d990cfe12685a" + } + Frame { + msec: 3952 + hash: "0403fdf79e3ba339c7e3786db0c9c0f0" + } + Frame { + msec: 3968 + hash: "93e4a0d5645d1cfc916f1e8422655555" + } + Frame { + msec: 3984 + hash: "29080bfabb87160b7c51385fb36b474b" + } + Frame { + msec: 4000 + hash: "9da2d83edc9d35f00fb8a159e79de4d9" + } + Frame { + msec: 4016 + hash: "5505a42d4788f00cfc7499fbfda851ce" + } + Frame { + msec: 4032 + hash: "bdd3040ab16fa9ffdd2fbc66b06699f8" + } + Frame { + msec: 4048 + hash: "2a347e30a20c693a9440caa60ade0a0f" + } + Frame { + msec: 4064 + hash: "0307f1857c091a639d47f112ce1a2f5a" + } + Frame { + msec: 4080 + hash: "778d18e539bbd562ebe39283a6315df1" + } + Frame { + msec: 4096 + hash: "0369cf6c3d1f5db2e92ee1f7c5d3b8ed" + } + Frame { + msec: 4112 + hash: "9f7413587ab50f1abf776bf180ec2d6f" + } + Frame { + msec: 4128 + hash: "7d04a27236485808e571e8a39f23ea17" + } + Frame { + msec: 4144 + hash: "a1dff63b723473d5a4c9c59975a2fb81" + } + Frame { + msec: 4160 + hash: "9795ea70a3b9d3b7805221a58c19e5da" + } + Frame { + msec: 4176 + hash: "f1392c489e21107136eb8e0d1e8b427e" + } + Frame { + msec: 4192 + hash: "95c225ef07171a96335e99078195b06a" + } + Frame { + msec: 4208 + hash: "d46ef3e7f9cec06e8c18afc0d07be4f3" + } + Frame { + msec: 4224 + hash: "b017f5b51d423bb0fca0d6df3aaded8b" + } + Frame { + msec: 4240 + hash: "60584d085b0cd6fbc436773be678597e" + } + Frame { + msec: 4256 + hash: "117951465dfd5c386826b295560d2dec" + } + Frame { + msec: 4272 + hash: "1b70137da5f4e024593999e93121fe8b" + } + Frame { + msec: 4288 + hash: "bd50dffd41941fef127f39b55c4748e0" + } + Frame { + msec: 4304 + hash: "8eec34d8e1d2e22d11b85a671cd4d3aa" + } + Frame { + msec: 4320 + hash: "9e3c97cfad5002ef5f3fcc365aeb7bd0" + } + Frame { + msec: 4336 + hash: "28e1cf1ee033915ea2ee39c9ab00a73d" + } + Frame { + msec: 4352 + hash: "99101a156a553f441f00221f6facbf1f" + } + Frame { + msec: 4368 + hash: "419023e5d59d16c26b35bee7d3cea559" + } + Frame { + msec: 4384 + hash: "485d23519293975b04031fe4baa5c276" + } + Frame { + msec: 4400 + hash: "c8bc60735e0ede26dbaf228294853f9a" + } + Frame { + msec: 4416 + hash: "ada3680b807d59843e3adf6640704066" + } + Frame { + msec: 4432 + hash: "3e28f3adf9241512cd0d6918d81ffffb" + } + Frame { + msec: 4448 + hash: "8f339acc33cbc89ae1c62391ce021bb3" + } + Frame { + msec: 4464 + hash: "d303960c0853a90557d64a04b8283c94" + } + Frame { + msec: 4480 + hash: "f907dbdacf2cfa9fdf8f9c8dead5b4c4" + } + Frame { + msec: 4496 + hash: "30c6e6f283f4a3f538cdda9c2e92de8c" + } + Frame { + msec: 4512 + hash: "04d2ac55774b43107a43a7d33764199b" + } + Frame { + msec: 4528 + hash: "cddf3e111cbc59e721725daa1d8a0c31" + } + Frame { + msec: 4544 + hash: "15b1b63cd1695207ebf9f04387be0739" + } + Frame { + msec: 4560 + hash: "690769b9bbe86a3c5b1fbdee39615fbd" + } + Frame { + msec: 4576 + hash: "2bd640d8ddbf878d808f22656fef1ed9" + } + Frame { + msec: 4592 + hash: "a654f1e4519bf883d554276ebbe96323" + } + Frame { + msec: 4608 + hash: "68f0313cfc3f51a0bb9b47c5407c19b6" + } + Frame { + msec: 4624 + hash: "77f29806b084de4cabf7ab9bf1a93d5e" + } + Frame { + msec: 4640 + hash: "f9991189e3282d107b98fb0ae5f5ef00" + } + Frame { + msec: 4656 + hash: "0cd1f2f6e347d48feea1b26a4968dec7" + } + Frame { + msec: 4672 + hash: "e75a6f6a088e2289042572a161ffb0e9" + } + Frame { + msec: 4688 + hash: "5a541081444c0a71128223a4c4c3144c" + } + Frame { + msec: 4704 + hash: "6813d442cc610f346a5441ed0cd723e5" + } + Frame { + msec: 4720 + hash: "24ec539bc57899819915f833f26deacd" + } + Frame { + msec: 4736 + hash: "3a7ed1b4b533b817674aa141c420cd61" + } + Frame { + msec: 4752 + hash: "d0a643fae97bb152e97ca60e96299003" + } + Frame { + msec: 4768 + hash: "c84093931520f4661eff6645091a294b" + } + Frame { + msec: 4784 + hash: "81e7ceaece82505a4a16ead195a66162" + } + Frame { + msec: 4800 + hash: "315764d20b647f6ab1ba30239a69bf72" + } + Frame { + msec: 4816 + image: "follow.5.png" + } + Frame { + msec: 4832 + hash: "d1824ced8af34ad9edb36a58ae9aa7f5" + } + Frame { + msec: 4848 + hash: "167b9a49fbb94908e09e7e9c9147cd8b" + } + Frame { + msec: 4864 + hash: "442d5f0906840de526d59a80ada322c0" + } + Frame { + msec: 4880 + hash: "78206c4d4d23c7c1ba888b9062b09432" + } + Frame { + msec: 4896 + hash: "e898202cfebbff1952efc6e01254d855" + } + Frame { + msec: 4912 + hash: "ab31dc7bbad2b0552359866bb8d92f0c" + } + Frame { + msec: 4928 + hash: "f093304e88964376baf9721d53d4fb49" + } + Frame { + msec: 4944 + hash: "3ef76f3e1c44d13c3a469bd192ff7b5d" + } + Frame { + msec: 4960 + hash: "5d3b6d0d91f8cc5b89e39407bc3b5a15" + } + Frame { + msec: 4976 + hash: "3c73573f12f49b34e1d990a55ad913fa" + } + Frame { + msec: 4992 + hash: "d1bac071b01a1c6fddab90cdc435fad4" + } + Frame { + msec: 5008 + hash: "36a219aadec910f1dbef616c641e1d2b" + } + Frame { + msec: 5024 + hash: "5871fc67d361cc988551592ee21dfb23" + } + Frame { + msec: 5040 + hash: "6e65ee6c814b9a9da205c36925e663bf" + } + Frame { + msec: 5056 + hash: "290b20fa8e91d34000d7c2d81745f6d2" + } + Frame { + msec: 5072 + hash: "19e7405a9083a8143f7bb040f8837b29" + } + Frame { + msec: 5088 + hash: "c0a0fa2b4c1ceb6c70594994a1ac8713" + } + Frame { + msec: 5104 + hash: "c236224c16743fb606deb78bcb8afc8d" + } + Frame { + msec: 5120 + hash: "7d44db15eb300b4338ffc26e9bcfce20" + } + Frame { + msec: 5136 + hash: "067a79148a194c45c6f32d85316a1e11" + } + Frame { + msec: 5152 + hash: "9075c379044476994a87f0fdcce8e332" + } + Frame { + msec: 5168 + hash: "b2316988fbd51096a4f512e71fe7d0a2" + } + Frame { + msec: 5184 + hash: "280f70877d93af5f84e178aad6a102d8" + } + Frame { + msec: 5200 + hash: "3eef4ae7e43a8cf1cd9dd562237296f8" + } + Frame { + msec: 5216 + hash: "e3184f77ce3a47ca4dca6386f42d7fec" + } + Frame { + msec: 5232 + hash: "a2a5df66fe4808ea8d466cac84ba910c" + } + Frame { + msec: 5248 + hash: "9f8a0e54788112d6c30482e840504f35" + } + Frame { + msec: 5264 + hash: "ae69cf84798844f9f360c86790feaecd" + } + Frame { + msec: 5280 + hash: "0244526572acb6266db5b7eb9d29c6fc" + } + Frame { + msec: 5296 + hash: "8fb53d60b95ddb5aef27442934ea9983" + } + Frame { + msec: 5312 + hash: "930fcfde491b4f5681e3861764003895" + } + Frame { + msec: 5328 + hash: "bcdcd0a637112d113ebe11dc18823237" + } + Frame { + msec: 5344 + hash: "65a564d5a5afbc14c0cdad4d52753507" + } + Frame { + msec: 5360 + hash: "0c5056d438d2d54938f31ef5f996673a" + } + Frame { + msec: 5376 + hash: "11c157ad2236fc390ffbdf339366cbc1" + } + Frame { + msec: 5392 + hash: "6cb341b1f281a97a35c2e41bfd4c4d9d" + } + Frame { + msec: 5408 + hash: "553a945f7f19f70ddae4ebe88e52a79b" + } + Frame { + msec: 5424 + hash: "d10b42b4095a2474e66a5a322f72e936" + } + Frame { + msec: 5440 + hash: "0f943d61e8072d70eddee8aa1ba0de5a" + } + Frame { + msec: 5456 + hash: "3df18e237b666e78d57857739b759e6d" + } + Frame { + msec: 5472 + hash: "1ddc0bfdb2ca7b6dee63f1024e62f26e" + } + Frame { + msec: 5488 + hash: "aaa397714528f41238059e3a88833abc" + } + Frame { + msec: 5504 + hash: "c94bd69f925c782656afc5f9618180a6" + } + Frame { + msec: 5520 + hash: "824ff8c0e1ab43e3c0eaa79b7cc19b9c" + } + Frame { + msec: 5536 + hash: "6c440a0b2293811335bdbf2c4f25f47d" + } + Frame { + msec: 5552 + hash: "bfc7936cdf833d5b720ec9baca740112" + } + Frame { + msec: 5568 + hash: "375fa305dbae2872dc9b20e59381cc0c" + } + Frame { + msec: 5584 + hash: "fffd6173aa49e74164dc17a238bcd830" + } + Frame { + msec: 5600 + hash: "44d9007e00fab161fd393b653255d7f4" + } + Frame { + msec: 5616 + hash: "f669ee25c58b4fa20a01705d334f0065" + } + Frame { + msec: 5632 + hash: "2dbb7d57711b67d5d9e1b81f70e22d34" + } + Frame { + msec: 5648 + hash: "19351b91448265cb95c1670ee283c611" + } + Frame { + msec: 5664 + hash: "19351b91448265cb95c1670ee283c611" + } + Frame { + msec: 5680 + hash: "3a24b99d048348a21f4e4bd69393de89" + } + Frame { + msec: 5696 + hash: "35a6fe955a52950bbfa954a453e4008e" + } + Frame { + msec: 5712 + hash: "896f4ec28c976237b34fb2725a44460e" + } + Frame { + msec: 5728 + hash: "ed3008ea950ec84c57518e573ea36d15" + } + Frame { + msec: 5744 + hash: "3447c7be992759f772c1db2033eead99" + } + Frame { + msec: 5760 + hash: "b7133225daa03563d3f5b1dac5f56a23" + } + Frame { + msec: 5776 + image: "follow.6.png" + } + Frame { + msec: 5792 + hash: "adc55f2fcf312a90b025a75fa80aa079" + } + Frame { + msec: 5808 + hash: "3ac85cad400d2b8e4f33798f4f6b7b42" + } + Frame { + msec: 5824 + hash: "1c115efd84ccbe489d24c3c521c4a61c" + } + Frame { + msec: 5840 + hash: "39518f1bbc0c4aba6ff517bc3dc7c279" + } + Frame { + msec: 5856 + hash: "7bd28d32996f4de61c415d3217da16d0" + } + Frame { + msec: 5872 + hash: "f5d06e25d775bf8db07e95625a712733" + } + Frame { + msec: 5888 + hash: "4820ea6ea3be88af2f86111c547a19d7" + } + Frame { + msec: 5904 + hash: "fa6e681c368118b7f135a47ae8fc12ff" + } + Frame { + msec: 5920 + hash: "f6b30e618aeeb837d2b3eca270b0a060" + } + Frame { + msec: 5936 + hash: "ac8504bde8d3063a8bf02b9d4b69d755" + } + Frame { + msec: 5952 + hash: "9670537bb77caa8e23fda7bbfa96ca60" + } + Frame { + msec: 5968 + hash: "8cd292865ce5c1d240e9ddc93881a0ed" + } + Frame { + msec: 5984 + hash: "de112013e526203d151c46e6cfba9f92" + } + Frame { + msec: 6000 + hash: "cd61066e697de8c055aaa168791c2d8c" + } + Frame { + msec: 6016 + hash: "cd61066e697de8c055aaa168791c2d8c" + } + Frame { + msec: 6032 + hash: "e68b27ff14aac03c827fd43ac488d23e" + } + Frame { + msec: 6048 + hash: "e68b27ff14aac03c827fd43ac488d23e" + } + Frame { + msec: 6064 + hash: "1f61d857a8c26587fbda5895c603441a" + } + Frame { + msec: 6080 + hash: "1e0dffdd02e05ade1ae444427d4aa345" + } + Frame { + msec: 6096 + hash: "9a416ee7a1de9ac45ab2d609233c9520" + } + Frame { + msec: 6112 + hash: "dfa35bf1cd908011c3214a506bcbdcb8" + } + Frame { + msec: 6128 + hash: "bd502dc72dce4af3036f7af9ed7cf9e9" + } + Frame { + msec: 6144 + hash: "c77280527612408daa3037aab45da59d" + } + Frame { + msec: 6160 + hash: "a38ed1532a40210ad7da4c0d4d1a7195" + } + Frame { + msec: 6176 + hash: "8ac8a8df937da526bbffb9a3590d89ac" + } + Frame { + msec: 6192 + hash: "07527cb9a4494e11f4c9f99eb72598b9" + } + Frame { + msec: 6208 + hash: "655b0327ef0f8711810714ba50f2f8cc" + } + Frame { + msec: 6224 + hash: "549fd25292012a2be1f78118998ca892" + } + Frame { + msec: 6240 + hash: "7a382ae4e6a48826eaa2c83ee7a73fb2" + } + Frame { + msec: 6256 + hash: "5acd5f250c5b32d9006ed68dfecbfa1c" + } + Frame { + msec: 6272 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6288 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6304 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6320 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6336 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6352 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6368 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6384 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6400 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6416 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6432 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6448 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6464 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6480 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6496 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6512 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6528 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6544 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6560 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6576 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6592 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6608 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6624 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6640 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6656 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6672 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6688 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6704 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6720 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6736 + image: "follow.7.png" + } + Frame { + msec: 6752 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6768 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6784 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6800 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6816 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6832 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 6848 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6864 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6880 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6896 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6912 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6928 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png index 87bc640..1b808ef 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml index f56f498..5485174 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml @@ -10,238 +10,238 @@ VisualTest { } Frame { msec: 32 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 48 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 64 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 80 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 96 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 112 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 128 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 144 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 160 - hash: "7fb2062f5786da9323db4286688682a0" + hash: "3fc7ab44f913d350f7aef342b958e56d" } Frame { msec: 176 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 192 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 208 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 224 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 240 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 256 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 272 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 288 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 304 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 320 - hash: "c67a5ae840827487ab618ff2d4e9a056" + hash: "a495a8a95c8aa82ac437c2f2970bd42d" } Frame { msec: 336 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 352 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 368 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 384 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 400 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 416 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 432 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 448 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 464 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 480 - hash: "c7986aca05835e238ee95be063bdd032" + hash: "e2d2a6e60537b9a434d0029ef5ff26dc" } Frame { msec: 496 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 512 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 528 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 544 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 560 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 576 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 592 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 608 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 624 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 640 - hash: "dd8ee9c060450beef6cc2494fa463e0a" + hash: "00cba961e67c2124ace75dddb657cd6c" } Frame { msec: 656 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 672 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 688 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 704 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 720 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 736 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 752 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 768 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 784 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 800 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 816 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 832 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 848 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 864 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 880 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 896 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 912 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 928 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 944 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } Frame { msec: 960 - hash: "f55ebe08f1b538d085cda157f566859e" + hash: "31d518de83e195def2d957b7d86b98e5" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.0.png index 4b78165..1fd0213 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml index 7c557e0..c5a5a76 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml @@ -10,122 +10,122 @@ VisualTest { } Frame { msec: 32 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 48 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 64 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 80 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 96 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 112 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 128 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 144 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 160 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 176 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 192 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 208 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 224 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 240 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 256 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 272 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 288 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 304 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 320 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 336 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 352 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 368 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 384 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 400 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 416 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 432 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 448 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 464 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 480 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } Frame { msec: 496 - hash: "455caf06270992e3367c2a5a4371b6ac" + hash: "f45eda9414f7db5ed1f97a8275459abd" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.0.png new file mode 100644 index 0000000..4d6bf55 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.1.png new file mode 100644 index 0000000..a75da16 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.qml new file mode 100644 index 0000000..002e1c8 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-MAC/QTBUG-14469.qml @@ -0,0 +1,475 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "QTBUG-14469.0.png" + } + Frame { + msec: 32 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 48 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 64 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 80 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 96 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 112 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 128 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 144 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 160 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 176 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 192 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 208 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 224 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 240 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 256 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 272 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 288 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 304 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 320 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 336 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 352 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 368 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 384 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 400 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 416 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 432 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 448 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 464 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 480 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 496 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 512 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 528 + hash: "067dfe70eca44e2157b723858897c90e" + } + Frame { + msec: 544 + hash: "067dfe70eca44e2157b723858897c90e" + } + Frame { + msec: 560 + hash: "067dfe70eca44e2157b723858897c90e" + } + Frame { + msec: 576 + hash: "067dfe70eca44e2157b723858897c90e" + } + Frame { + msec: 592 + hash: "067dfe70eca44e2157b723858897c90e" + } + Frame { + msec: 608 + hash: "067dfe70eca44e2157b723858897c90e" + } + Frame { + msec: 624 + hash: "b1ac0015f173bf5789daa5d45d04dadd" + } + Frame { + msec: 640 + hash: "b1ac0015f173bf5789daa5d45d04dadd" + } + Frame { + msec: 656 + hash: "b1ac0015f173bf5789daa5d45d04dadd" + } + Frame { + msec: 672 + hash: "b1ac0015f173bf5789daa5d45d04dadd" + } + Frame { + msec: 688 + hash: "b1ac0015f173bf5789daa5d45d04dadd" + } + Frame { + msec: 704 + hash: "b1ac0015f173bf5789daa5d45d04dadd" + } + Frame { + msec: 720 + hash: "431cb09ccdcfab7c3ff7d498aa1f0816" + } + Frame { + msec: 736 + hash: "431cb09ccdcfab7c3ff7d498aa1f0816" + } + Frame { + msec: 752 + hash: "431cb09ccdcfab7c3ff7d498aa1f0816" + } + Frame { + msec: 768 + hash: "431cb09ccdcfab7c3ff7d498aa1f0816" + } + Frame { + msec: 784 + hash: "431cb09ccdcfab7c3ff7d498aa1f0816" + } + Frame { + msec: 800 + hash: "431cb09ccdcfab7c3ff7d498aa1f0816" + } + Frame { + msec: 816 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 832 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 848 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 864 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 880 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 896 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 912 + hash: "533b23f29fe5f9dc85a6ca390c6dd023" + } + Frame { + msec: 928 + hash: "cd397908009ddf16ec3101efb0d7468e" + } + Frame { + msec: 944 + hash: "cd397908009ddf16ec3101efb0d7468e" + } + Frame { + msec: 960 + hash: "cd397908009ddf16ec3101efb0d7468e" + } + Frame { + msec: 976 + image: "QTBUG-14469.1.png" + } + Frame { + msec: 992 + hash: "cd397908009ddf16ec3101efb0d7468e" + } + Frame { + msec: 1008 + hash: "cd397908009ddf16ec3101efb0d7468e" + } + Frame { + msec: 1024 + hash: "a1eebf1a97314851b5154802f05abe8d" + } + Frame { + msec: 1040 + hash: "a1eebf1a97314851b5154802f05abe8d" + } + Frame { + msec: 1056 + hash: "a1eebf1a97314851b5154802f05abe8d" + } + Frame { + msec: 1072 + hash: "a1eebf1a97314851b5154802f05abe8d" + } + Frame { + msec: 1088 + hash: "a1eebf1a97314851b5154802f05abe8d" + } + Frame { + msec: 1104 + hash: "a1eebf1a97314851b5154802f05abe8d" + } + Frame { + msec: 1120 + hash: "71d91d85b9c555eb9b39dac79b35dd46" + } + Frame { + msec: 1136 + hash: "71d91d85b9c555eb9b39dac79b35dd46" + } + Frame { + msec: 1152 + hash: "71d91d85b9c555eb9b39dac79b35dd46" + } + Frame { + msec: 1168 + hash: "71d91d85b9c555eb9b39dac79b35dd46" + } + Frame { + msec: 1184 + hash: "71d91d85b9c555eb9b39dac79b35dd46" + } + Frame { + msec: 1200 + hash: "71d91d85b9c555eb9b39dac79b35dd46" + } + Frame { + msec: 1216 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1232 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1248 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1264 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1280 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1296 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1312 + hash: "b1da2d1f4aad2a197a80788607bd867d" + } + Frame { + msec: 1328 + hash: "df14e9cfeba3850bae7cad111fdbc8df" + } + Frame { + msec: 1344 + hash: "df14e9cfeba3850bae7cad111fdbc8df" + } + Frame { + msec: 1360 + hash: "df14e9cfeba3850bae7cad111fdbc8df" + } + Frame { + msec: 1376 + hash: "df14e9cfeba3850bae7cad111fdbc8df" + } + Frame { + msec: 1392 + hash: "df14e9cfeba3850bae7cad111fdbc8df" + } + Frame { + msec: 1408 + hash: "df14e9cfeba3850bae7cad111fdbc8df" + } + Frame { + msec: 1424 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1440 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1456 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1472 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1488 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1504 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1520 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 1536 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 1552 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 1568 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 1584 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 1600 + hash: "cf74324c2a0c8f45c728d42390aac1e0" + } + Frame { + msec: 1616 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1632 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1648 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1664 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1680 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1696 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1712 + hash: "07c938ac9ff9f591e84fc553291c7c49" + } + Frame { + msec: 1728 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 1744 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 1760 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 1776 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 1792 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 1808 + hash: "7b585eb6226e6ce2de355f9730dba377" + } + Frame { + msec: 1824 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 1840 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 1856 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } + Frame { + msec: 1872 + hash: "a7817a7d902ab2fe2875183feb6513dd" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.0.png index 804a443..7e84164 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.1.png index 804a443..7e84164 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.qml index efdb916..d6d8c2a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 48 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 64 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 80 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 96 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 112 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 128 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 144 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 160 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 176 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 192 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 208 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 224 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 240 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 256 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 272 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 288 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 304 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 320 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 336 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 352 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 368 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 384 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 400 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 416 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 432 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 448 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 464 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 480 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 496 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 512 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 528 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 544 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 560 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 576 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 592 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 608 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 624 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 640 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 656 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 672 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 688 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 704 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 720 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 736 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 752 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 768 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 784 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 800 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 816 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 832 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 848 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 864 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 880 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 896 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 912 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 928 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 944 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 960 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 976 @@ -250,11 +250,11 @@ VisualTest { } Frame { msec: 992 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 1008 - hash: "9886d2b883d236bd0a346c6763c1f245" + hash: "212d34fa7425fe24398c9de6d4f10422" } Frame { msec: 1024 diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png index 99f0eb7..749a9c5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.1.png index 99f0eb7..749a9c5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml index 6dc7f4f..fbb542e 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 48 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 64 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 80 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 96 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 112 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 128 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 144 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 160 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 176 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 192 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 208 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 224 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 240 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 256 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 272 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 288 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 304 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 320 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 336 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 352 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 368 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 384 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 400 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 416 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 432 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 448 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 464 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 480 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 496 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 512 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 528 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 544 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 560 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 576 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 592 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 608 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 624 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 640 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 656 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 672 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 688 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 704 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 720 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 736 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 752 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 768 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 784 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 800 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 816 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 832 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 848 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 864 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 880 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 896 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 912 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 928 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 944 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 960 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 976 @@ -251,29 +251,29 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 } Frame { msec: 992 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 1008 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 1024 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 1040 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } Frame { msec: 1056 - hash: "8401ef19b1e07ca917b8b061888d4e70" + hash: "4d49ec1a14a321ea9c0d506663df55c2" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png index 0b08fba..b84b8a9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png index dbf8cd3..dbae0ce 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png index 09646f8..bf56c80 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png index b6734b4..c4f6e18 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.4.png index 861f6b0..ea86925 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml index 026f880..e780ea6 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "d482dd54c0f3876a11d80979ada91fa9" + hash: "1c45bbf4494aeb017d7ad53c5e29cbc0" } Frame { msec: 48 - hash: "d482dd54c0f3876a11d80979ada91fa9" + hash: "1c45bbf4494aeb017d7ad53c5e29cbc0" } Frame { msec: 64 - hash: "d482dd54c0f3876a11d80979ada91fa9" + hash: "1c45bbf4494aeb017d7ad53c5e29cbc0" } Frame { msec: 80 - hash: "d482dd54c0f3876a11d80979ada91fa9" + hash: "1c45bbf4494aeb017d7ad53c5e29cbc0" } Frame { msec: 96 - hash: "d482dd54c0f3876a11d80979ada91fa9" + hash: "1c45bbf4494aeb017d7ad53c5e29cbc0" } Frame { msec: 112 - hash: "3eb1cc8fa11ae88a3bf5004263805264" + hash: "452d8e4da326413e4961f20a0d24d0f0" } Frame { msec: 128 - hash: "3eb1cc8fa11ae88a3bf5004263805264" + hash: "452d8e4da326413e4961f20a0d24d0f0" } Frame { msec: 144 - hash: "3eb1cc8fa11ae88a3bf5004263805264" + hash: "452d8e4da326413e4961f20a0d24d0f0" } Frame { msec: 160 - hash: "3eb1cc8fa11ae88a3bf5004263805264" + hash: "452d8e4da326413e4961f20a0d24d0f0" } Frame { msec: 176 - hash: "3eb1cc8fa11ae88a3bf5004263805264" + hash: "452d8e4da326413e4961f20a0d24d0f0" } Frame { msec: 192 - hash: "b169f3828fafa79245bd5886d94a33b2" + hash: "8dc43f316fd36a877c773c10c23b5703" } Frame { msec: 208 - hash: "b169f3828fafa79245bd5886d94a33b2" + hash: "8dc43f316fd36a877c773c10c23b5703" } Frame { msec: 224 - hash: "b169f3828fafa79245bd5886d94a33b2" + hash: "8dc43f316fd36a877c773c10c23b5703" } Frame { msec: 240 - hash: "b169f3828fafa79245bd5886d94a33b2" + hash: "8dc43f316fd36a877c773c10c23b5703" } Frame { msec: 256 - hash: "c9a22f77cce333ea041730bc76d9bb96" + hash: "b7e055ce8d510c5ec66e71fa5a78fddf" } Frame { msec: 272 - hash: "c9a22f77cce333ea041730bc76d9bb96" + hash: "b7e055ce8d510c5ec66e71fa5a78fddf" } Frame { msec: 288 - hash: "c9a22f77cce333ea041730bc76d9bb96" + hash: "b7e055ce8d510c5ec66e71fa5a78fddf" } Frame { msec: 304 - hash: "c9a22f77cce333ea041730bc76d9bb96" + hash: "b7e055ce8d510c5ec66e71fa5a78fddf" } Frame { msec: 320 - hash: "958e5805b2bc2ffeaf8a6c8c24721dd5" + hash: "e9b0abe5719027348cd267eb4823fc5f" } Frame { msec: 336 - hash: "958e5805b2bc2ffeaf8a6c8c24721dd5" + hash: "e9b0abe5719027348cd267eb4823fc5f" } Frame { msec: 352 - hash: "958e5805b2bc2ffeaf8a6c8c24721dd5" + hash: "e9b0abe5719027348cd267eb4823fc5f" } Frame { msec: 368 - hash: "958e5805b2bc2ffeaf8a6c8c24721dd5" + hash: "e9b0abe5719027348cd267eb4823fc5f" } Frame { msec: 384 - hash: "958e5805b2bc2ffeaf8a6c8c24721dd5" + hash: "e9b0abe5719027348cd267eb4823fc5f" } Frame { msec: 400 - hash: "ed14c796dc2980f7a1bdedb15698ae01" + hash: "441102f2f69e9f4e10335c1746d47bd3" } Frame { msec: 416 - hash: "ed14c796dc2980f7a1bdedb15698ae01" + hash: "441102f2f69e9f4e10335c1746d47bd3" } Frame { msec: 432 - hash: "ed14c796dc2980f7a1bdedb15698ae01" + hash: "441102f2f69e9f4e10335c1746d47bd3" } Frame { msec: 448 - hash: "ed14c796dc2980f7a1bdedb15698ae01" + hash: "441102f2f69e9f4e10335c1746d47bd3" } Frame { msec: 464 - hash: "ed14c796dc2980f7a1bdedb15698ae01" + hash: "441102f2f69e9f4e10335c1746d47bd3" } Frame { msec: 480 - hash: "24d811c9b98b0cb140e7e82090e793ab" + hash: "95668288170720989adde2a0b41d5ee8" } Frame { msec: 496 - hash: "24d811c9b98b0cb140e7e82090e793ab" + hash: "95668288170720989adde2a0b41d5ee8" } Frame { msec: 512 - hash: "24d811c9b98b0cb140e7e82090e793ab" + hash: "95668288170720989adde2a0b41d5ee8" } Frame { msec: 528 - hash: "24d811c9b98b0cb140e7e82090e793ab" + hash: "95668288170720989adde2a0b41d5ee8" } Frame { msec: 544 - hash: "afa28a6a682128b1b44df31c78b63b04" + hash: "16bba6b72993e474b4c302af3f682834" } Frame { msec: 560 - hash: "afa28a6a682128b1b44df31c78b63b04" + hash: "16bba6b72993e474b4c302af3f682834" } Frame { msec: 576 - hash: "afa28a6a682128b1b44df31c78b63b04" + hash: "16bba6b72993e474b4c302af3f682834" } Frame { msec: 592 - hash: "afa28a6a682128b1b44df31c78b63b04" + hash: "16bba6b72993e474b4c302af3f682834" } Frame { msec: 608 - hash: "c43bba2d3406fabdafac344102d7d72c" + hash: "86c4d8bd1b19116411b6a6e450547425" } Frame { msec: 624 - hash: "c43bba2d3406fabdafac344102d7d72c" + hash: "86c4d8bd1b19116411b6a6e450547425" } Frame { msec: 640 - hash: "c43bba2d3406fabdafac344102d7d72c" + hash: "86c4d8bd1b19116411b6a6e450547425" } Frame { msec: 656 - hash: "c43bba2d3406fabdafac344102d7d72c" + hash: "86c4d8bd1b19116411b6a6e450547425" } Frame { msec: 672 - hash: "c43bba2d3406fabdafac344102d7d72c" + hash: "86c4d8bd1b19116411b6a6e450547425" } Frame { msec: 688 - hash: "0e1fb18acb72ca1da6fd619e31dd2c86" + hash: "d0d3cfa922ebca20c590ab7e59985268" } Frame { msec: 704 - hash: "0e1fb18acb72ca1da6fd619e31dd2c86" + hash: "d0d3cfa922ebca20c590ab7e59985268" } Frame { msec: 720 - hash: "0e1fb18acb72ca1da6fd619e31dd2c86" + hash: "d0d3cfa922ebca20c590ab7e59985268" } Frame { msec: 736 - hash: "0e1fb18acb72ca1da6fd619e31dd2c86" + hash: "d0d3cfa922ebca20c590ab7e59985268" } Frame { msec: 752 - hash: "0e1fb18acb72ca1da6fd619e31dd2c86" + hash: "d0d3cfa922ebca20c590ab7e59985268" } Frame { msec: 768 - hash: "d5780e5b30828f33d18c1f4e32ba8c3f" + hash: "397d72a090171090f897283729b19bc8" } Frame { msec: 784 - hash: "d5780e5b30828f33d18c1f4e32ba8c3f" + hash: "397d72a090171090f897283729b19bc8" } Frame { msec: 800 - hash: "d5780e5b30828f33d18c1f4e32ba8c3f" + hash: "397d72a090171090f897283729b19bc8" } Frame { msec: 816 - hash: "d5780e5b30828f33d18c1f4e32ba8c3f" + hash: "397d72a090171090f897283729b19bc8" } Frame { msec: 832 - hash: "28bdd1ab1c1af1b39a2f9d11be456682" + hash: "2b038e59289d2e3cef02245d2d128271" } Frame { msec: 848 - hash: "28bdd1ab1c1af1b39a2f9d11be456682" + hash: "2b038e59289d2e3cef02245d2d128271" } Frame { msec: 864 - hash: "28bdd1ab1c1af1b39a2f9d11be456682" + hash: "2b038e59289d2e3cef02245d2d128271" } Frame { msec: 880 - hash: "28bdd1ab1c1af1b39a2f9d11be456682" + hash: "2b038e59289d2e3cef02245d2d128271" } Frame { msec: 896 - hash: "28bdd1ab1c1af1b39a2f9d11be456682" + hash: "2b038e59289d2e3cef02245d2d128271" } Frame { msec: 912 - hash: "e34a9080716cebc0260e682960cc7c6e" + hash: "5f64aa763acdd8f5d6cc249be36e226a" } Frame { msec: 928 - hash: "e34a9080716cebc0260e682960cc7c6e" + hash: "5f64aa763acdd8f5d6cc249be36e226a" } Frame { msec: 944 - hash: "e34a9080716cebc0260e682960cc7c6e" + hash: "5f64aa763acdd8f5d6cc249be36e226a" } Frame { msec: 960 - hash: "e34a9080716cebc0260e682960cc7c6e" + hash: "5f64aa763acdd8f5d6cc249be36e226a" } Frame { msec: 976 @@ -250,247 +250,247 @@ VisualTest { } Frame { msec: 992 - hash: "61959fc3d6f84a9fe88ec1a2979da9af" + hash: "4f8c81adc72fce17c7e54f4d45ec08e4" } Frame { msec: 1008 - hash: "61959fc3d6f84a9fe88ec1a2979da9af" + hash: "4f8c81adc72fce17c7e54f4d45ec08e4" } Frame { msec: 1024 - hash: "61959fc3d6f84a9fe88ec1a2979da9af" + hash: "4f8c81adc72fce17c7e54f4d45ec08e4" } Frame { msec: 1040 - hash: "47794b18771d6d558ebbca881de92377" + hash: "91a7a0c0f686975d0087ee0e066911eb" } Frame { msec: 1056 - hash: "47794b18771d6d558ebbca881de92377" + hash: "91a7a0c0f686975d0087ee0e066911eb" } Frame { msec: 1072 - hash: "47794b18771d6d558ebbca881de92377" + hash: "91a7a0c0f686975d0087ee0e066911eb" } Frame { msec: 1088 - hash: "47794b18771d6d558ebbca881de92377" + hash: "91a7a0c0f686975d0087ee0e066911eb" } Frame { msec: 1104 - hash: "47794b18771d6d558ebbca881de92377" + hash: "91a7a0c0f686975d0087ee0e066911eb" } Frame { msec: 1120 - hash: "ba34b024ddb4e701d1d7f0c19e24d6cf" + hash: "b19f6b8b4dc9d2a2d9aba82983e41889" } Frame { msec: 1136 - hash: "ba34b024ddb4e701d1d7f0c19e24d6cf" + hash: "b19f6b8b4dc9d2a2d9aba82983e41889" } Frame { msec: 1152 - hash: "ba34b024ddb4e701d1d7f0c19e24d6cf" + hash: "b19f6b8b4dc9d2a2d9aba82983e41889" } Frame { msec: 1168 - hash: "ba34b024ddb4e701d1d7f0c19e24d6cf" + hash: "b19f6b8b4dc9d2a2d9aba82983e41889" } Frame { msec: 1184 - hash: "ba34b024ddb4e701d1d7f0c19e24d6cf" + hash: "b19f6b8b4dc9d2a2d9aba82983e41889" } Frame { msec: 1200 - hash: "e94344268d2a118053ecc3aef278d91d" + hash: "456542b672303ddae500b96e9b66a558" } Frame { msec: 1216 - hash: "e94344268d2a118053ecc3aef278d91d" + hash: "456542b672303ddae500b96e9b66a558" } Frame { msec: 1232 - hash: "e94344268d2a118053ecc3aef278d91d" + hash: "456542b672303ddae500b96e9b66a558" } Frame { msec: 1248 - hash: "e94344268d2a118053ecc3aef278d91d" + hash: "456542b672303ddae500b96e9b66a558" } Frame { msec: 1264 - hash: "df1959605d3bd74e84e51cbd4d322235" + hash: "8ec69f05d929c3b397dc721198ccacd4" } Frame { msec: 1280 - hash: "df1959605d3bd74e84e51cbd4d322235" + hash: "8ec69f05d929c3b397dc721198ccacd4" } Frame { msec: 1296 - hash: "df1959605d3bd74e84e51cbd4d322235" + hash: "8ec69f05d929c3b397dc721198ccacd4" } Frame { msec: 1312 - hash: "df1959605d3bd74e84e51cbd4d322235" + hash: "8ec69f05d929c3b397dc721198ccacd4" } Frame { msec: 1328 - hash: "26e1c8d13f0dd3713dce24211a8d26c1" + hash: "2d63fd91f4b01f6b178c795838e78990" } Frame { msec: 1344 - hash: "26e1c8d13f0dd3713dce24211a8d26c1" + hash: "2d63fd91f4b01f6b178c795838e78990" } Frame { msec: 1360 - hash: "26e1c8d13f0dd3713dce24211a8d26c1" + hash: "2d63fd91f4b01f6b178c795838e78990" } Frame { msec: 1376 - hash: "26e1c8d13f0dd3713dce24211a8d26c1" + hash: "2d63fd91f4b01f6b178c795838e78990" } Frame { msec: 1392 - hash: "26e1c8d13f0dd3713dce24211a8d26c1" + hash: "2d63fd91f4b01f6b178c795838e78990" } Frame { msec: 1408 - hash: "fd1344db48093182eb2c2872ceb887df" + hash: "c7c1d2c288653b414fe534ff6fab3381" } Frame { msec: 1424 - hash: "fd1344db48093182eb2c2872ceb887df" + hash: "c7c1d2c288653b414fe534ff6fab3381" } Frame { msec: 1440 - hash: "fd1344db48093182eb2c2872ceb887df" + hash: "c7c1d2c288653b414fe534ff6fab3381" } Frame { msec: 1456 - hash: "fd1344db48093182eb2c2872ceb887df" + hash: "c7c1d2c288653b414fe534ff6fab3381" } Frame { msec: 1472 - hash: "fd1344db48093182eb2c2872ceb887df" + hash: "c7c1d2c288653b414fe534ff6fab3381" } Frame { msec: 1488 - hash: "a4bf54bbb5bcbf54de6a7a2be9b73b81" + hash: "23188e926a855a7a06211783ee51d22a" } Frame { msec: 1504 - hash: "a4bf54bbb5bcbf54de6a7a2be9b73b81" + hash: "23188e926a855a7a06211783ee51d22a" } Frame { msec: 1520 - hash: "a4bf54bbb5bcbf54de6a7a2be9b73b81" + hash: "23188e926a855a7a06211783ee51d22a" } Frame { msec: 1536 - hash: "a4bf54bbb5bcbf54de6a7a2be9b73b81" + hash: "23188e926a855a7a06211783ee51d22a" } Frame { msec: 1552 - hash: "072a6c0e64853f57487845f2ff376c12" + hash: "cfc64d8876d59e0d75f079c2e08cea5f" } Frame { msec: 1568 - hash: "072a6c0e64853f57487845f2ff376c12" + hash: "cfc64d8876d59e0d75f079c2e08cea5f" } Frame { msec: 1584 - hash: "072a6c0e64853f57487845f2ff376c12" + hash: "cfc64d8876d59e0d75f079c2e08cea5f" } Frame { msec: 1600 - hash: "072a6c0e64853f57487845f2ff376c12" + hash: "cfc64d8876d59e0d75f079c2e08cea5f" } Frame { msec: 1616 - hash: "072a6c0e64853f57487845f2ff376c12" + hash: "cfc64d8876d59e0d75f079c2e08cea5f" } Frame { msec: 1632 - hash: "d4183aba9cd5607ea1ff1572c78d33cc" + hash: "766c679eaec4bd28dc92cb3642d5be83" } Frame { msec: 1648 - hash: "d4183aba9cd5607ea1ff1572c78d33cc" + hash: "766c679eaec4bd28dc92cb3642d5be83" } Frame { msec: 1664 - hash: "d4183aba9cd5607ea1ff1572c78d33cc" + hash: "766c679eaec4bd28dc92cb3642d5be83" } Frame { msec: 1680 - hash: "d4183aba9cd5607ea1ff1572c78d33cc" + hash: "766c679eaec4bd28dc92cb3642d5be83" } Frame { msec: 1696 - hash: "31cb8e151b34187f712b269b38a317a7" + hash: "a86ba05a854fde208e6cf7849327d5d0" } Frame { msec: 1712 - hash: "31cb8e151b34187f712b269b38a317a7" + hash: "a86ba05a854fde208e6cf7849327d5d0" } Frame { msec: 1728 - hash: "31cb8e151b34187f712b269b38a317a7" + hash: "a86ba05a854fde208e6cf7849327d5d0" } Frame { msec: 1744 - hash: "31cb8e151b34187f712b269b38a317a7" + hash: "a86ba05a854fde208e6cf7849327d5d0" } Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 } Frame { msec: 1760 - hash: "31cb8e151b34187f712b269b38a317a7" + hash: "a86ba05a854fde208e6cf7849327d5d0" } Frame { msec: 1776 - hash: "e24ad0aed6a071d6da9f51af00c69300" + hash: "23b60817be2a741cada2af663b0d7f54" } Frame { msec: 1792 - hash: "e24ad0aed6a071d6da9f51af00c69300" + hash: "23b60817be2a741cada2af663b0d7f54" } Frame { msec: 1808 - hash: "e24ad0aed6a071d6da9f51af00c69300" + hash: "23b60817be2a741cada2af663b0d7f54" } Frame { msec: 1824 - hash: "e24ad0aed6a071d6da9f51af00c69300" + hash: "23b60817be2a741cada2af663b0d7f54" } Frame { msec: 1840 - hash: "760eea420a5eb52ccd1f6a29d6701338" + hash: "c098c1c0d5239c59735a5c9450e9d531" } Frame { msec: 1856 - hash: "760eea420a5eb52ccd1f6a29d6701338" + hash: "c098c1c0d5239c59735a5c9450e9d531" } Frame { msec: 1872 - hash: "760eea420a5eb52ccd1f6a29d6701338" + hash: "c098c1c0d5239c59735a5c9450e9d531" } Frame { msec: 1888 - hash: "760eea420a5eb52ccd1f6a29d6701338" + hash: "c098c1c0d5239c59735a5c9450e9d531" } Frame { msec: 1904 - hash: "760eea420a5eb52ccd1f6a29d6701338" + hash: "c098c1c0d5239c59735a5c9450e9d531" } Frame { msec: 1920 - hash: "07cdcdb9b551750c4a742ee6dff9f3f9" + hash: "09f6ee218d314d3a405ae43e32588c07" } Frame { msec: 1936 @@ -498,239 +498,239 @@ VisualTest { } Frame { msec: 1952 - hash: "07cdcdb9b551750c4a742ee6dff9f3f9" + hash: "09f6ee218d314d3a405ae43e32588c07" } Frame { msec: 1968 - hash: "07cdcdb9b551750c4a742ee6dff9f3f9" + hash: "09f6ee218d314d3a405ae43e32588c07" } Frame { msec: 1984 - hash: "ec4dada16fb19fb4cf24367c9f25f161" + hash: "6ee480e7d8b0abe295ae12a660119102" } Frame { msec: 2000 - hash: "ec4dada16fb19fb4cf24367c9f25f161" + hash: "6ee480e7d8b0abe295ae12a660119102" } Frame { msec: 2016 - hash: "ec4dada16fb19fb4cf24367c9f25f161" + hash: "6ee480e7d8b0abe295ae12a660119102" } Frame { msec: 2032 - hash: "ec4dada16fb19fb4cf24367c9f25f161" + hash: "6ee480e7d8b0abe295ae12a660119102" } Frame { msec: 2048 - hash: "ec4dada16fb19fb4cf24367c9f25f161" + hash: "6ee480e7d8b0abe295ae12a660119102" } Frame { msec: 2064 - hash: "f5ef19dc69f8b6060056f7005f613ca3" + hash: "b43ca0ea75f4c17c09248f78170d3839" } Frame { msec: 2080 - hash: "f5ef19dc69f8b6060056f7005f613ca3" + hash: "b43ca0ea75f4c17c09248f78170d3839" } Frame { msec: 2096 - hash: "f5ef19dc69f8b6060056f7005f613ca3" + hash: "b43ca0ea75f4c17c09248f78170d3839" } Frame { msec: 2112 - hash: "f5ef19dc69f8b6060056f7005f613ca3" + hash: "b43ca0ea75f4c17c09248f78170d3839" } Frame { msec: 2128 - hash: "6bd00519ea14f0dd34d45de4deaaa65e" + hash: "92e0ee1174ffcb710403bb831aeec353" } Frame { msec: 2144 - hash: "6bd00519ea14f0dd34d45de4deaaa65e" + hash: "92e0ee1174ffcb710403bb831aeec353" } Frame { msec: 2160 - hash: "6bd00519ea14f0dd34d45de4deaaa65e" + hash: "92e0ee1174ffcb710403bb831aeec353" } Frame { msec: 2176 - hash: "6bd00519ea14f0dd34d45de4deaaa65e" + hash: "92e0ee1174ffcb710403bb831aeec353" } Frame { msec: 2192 - hash: "6bd00519ea14f0dd34d45de4deaaa65e" + hash: "92e0ee1174ffcb710403bb831aeec353" } Frame { msec: 2208 - hash: "1c3e491e889e408f705477f060103243" + hash: "bba79ad6f3630b7aa382541cc2d3a2cd" } Frame { msec: 2224 - hash: "1c3e491e889e408f705477f060103243" + hash: "bba79ad6f3630b7aa382541cc2d3a2cd" } Frame { msec: 2240 - hash: "1c3e491e889e408f705477f060103243" + hash: "bba79ad6f3630b7aa382541cc2d3a2cd" } Frame { msec: 2256 - hash: "1c3e491e889e408f705477f060103243" + hash: "bba79ad6f3630b7aa382541cc2d3a2cd" } Frame { msec: 2272 - hash: "80bc59211ffab64820e306e6eb13d2fc" + hash: "7efeb1565125f25252ce3f03dadc3bea" } Frame { msec: 2288 - hash: "80bc59211ffab64820e306e6eb13d2fc" + hash: "7efeb1565125f25252ce3f03dadc3bea" } Frame { msec: 2304 - hash: "80bc59211ffab64820e306e6eb13d2fc" + hash: "7efeb1565125f25252ce3f03dadc3bea" } Frame { msec: 2320 - hash: "80bc59211ffab64820e306e6eb13d2fc" + hash: "7efeb1565125f25252ce3f03dadc3bea" } Frame { msec: 2336 - hash: "80bc59211ffab64820e306e6eb13d2fc" + hash: "7efeb1565125f25252ce3f03dadc3bea" } Frame { msec: 2352 - hash: "7765c76dd2ef99e4d7286fcb3a172a07" + hash: "9086d24dff90f8c9e4543c6b14c99bf6" } Frame { msec: 2368 - hash: "7765c76dd2ef99e4d7286fcb3a172a07" + hash: "9086d24dff90f8c9e4543c6b14c99bf6" } Frame { msec: 2384 - hash: "7765c76dd2ef99e4d7286fcb3a172a07" + hash: "9086d24dff90f8c9e4543c6b14c99bf6" } Frame { msec: 2400 - hash: "7765c76dd2ef99e4d7286fcb3a172a07" + hash: "9086d24dff90f8c9e4543c6b14c99bf6" } Frame { msec: 2416 - hash: "7765c76dd2ef99e4d7286fcb3a172a07" + hash: "9086d24dff90f8c9e4543c6b14c99bf6" } Frame { msec: 2432 - hash: "8fedc4d5d4161922c1d9d50adcf67e4a" + hash: "15d8e99a0676e0a1588dfddc00ab0d16" } Frame { msec: 2448 - hash: "8fedc4d5d4161922c1d9d50adcf67e4a" + hash: "15d8e99a0676e0a1588dfddc00ab0d16" } Frame { msec: 2464 - hash: "8fedc4d5d4161922c1d9d50adcf67e4a" + hash: "15d8e99a0676e0a1588dfddc00ab0d16" } Frame { msec: 2480 - hash: "8fedc4d5d4161922c1d9d50adcf67e4a" + hash: "15d8e99a0676e0a1588dfddc00ab0d16" } Frame { msec: 2496 - hash: "4f26d7ab05e6d39a869be1259e33c739" + hash: "ecc25b88c29dc9d6c70df6e36a91f95c" } Frame { msec: 2512 - hash: "4f26d7ab05e6d39a869be1259e33c739" + hash: "ecc25b88c29dc9d6c70df6e36a91f95c" } Frame { msec: 2528 - hash: "4f26d7ab05e6d39a869be1259e33c739" + hash: "ecc25b88c29dc9d6c70df6e36a91f95c" } Frame { msec: 2544 - hash: "4f26d7ab05e6d39a869be1259e33c739" + hash: "ecc25b88c29dc9d6c70df6e36a91f95c" } Frame { msec: 2560 - hash: "d4ead42bcc2e283e513f1ab4f8a89f27" + hash: "905c81686d8d2ecdde513622c35c0ea6" } Frame { msec: 2576 - hash: "d4ead42bcc2e283e513f1ab4f8a89f27" + hash: "905c81686d8d2ecdde513622c35c0ea6" } Frame { msec: 2592 - hash: "d4ead42bcc2e283e513f1ab4f8a89f27" + hash: "905c81686d8d2ecdde513622c35c0ea6" } Frame { msec: 2608 - hash: "d4ead42bcc2e283e513f1ab4f8a89f27" + hash: "905c81686d8d2ecdde513622c35c0ea6" } Frame { msec: 2624 - hash: "d4ead42bcc2e283e513f1ab4f8a89f27" + hash: "905c81686d8d2ecdde513622c35c0ea6" } Frame { msec: 2640 - hash: "6d91b100f369381b24052e5a4466e24d" + hash: "537a2cf41a5e15220d2ca2218ac49a5a" } Frame { msec: 2656 - hash: "6d91b100f369381b24052e5a4466e24d" + hash: "537a2cf41a5e15220d2ca2218ac49a5a" } Frame { msec: 2672 - hash: "6d91b100f369381b24052e5a4466e24d" + hash: "537a2cf41a5e15220d2ca2218ac49a5a" } Frame { msec: 2688 - hash: "6d91b100f369381b24052e5a4466e24d" + hash: "537a2cf41a5e15220d2ca2218ac49a5a" } Frame { msec: 2704 - hash: "2d6082b41e3cfdc3be9c130311ac854a" + hash: "53325ce7d011eeb72369463721f15e87" } Frame { msec: 2720 - hash: "2d6082b41e3cfdc3be9c130311ac854a" + hash: "53325ce7d011eeb72369463721f15e87" } Frame { msec: 2736 - hash: "2d6082b41e3cfdc3be9c130311ac854a" + hash: "53325ce7d011eeb72369463721f15e87" } Frame { msec: 2752 - hash: "2d6082b41e3cfdc3be9c130311ac854a" + hash: "53325ce7d011eeb72369463721f15e87" } Frame { msec: 2768 - hash: "2d6082b41e3cfdc3be9c130311ac854a" + hash: "53325ce7d011eeb72369463721f15e87" } Frame { msec: 2784 - hash: "78732b58812f202768fa224aefce187d" + hash: "9ad2565cc95647a83d3ce3acc106485a" } Frame { msec: 2800 - hash: "78732b58812f202768fa224aefce187d" + hash: "9ad2565cc95647a83d3ce3acc106485a" } Frame { msec: 2816 - hash: "78732b58812f202768fa224aefce187d" + hash: "9ad2565cc95647a83d3ce3acc106485a" } Frame { msec: 2832 - hash: "78732b58812f202768fa224aefce187d" + hash: "9ad2565cc95647a83d3ce3acc106485a" } Frame { msec: 2848 - hash: "54d728d677cf3a07c4da7727a75e6c59" + hash: "de7b66581e0743385a984f76c993b01b" } Frame { msec: 2864 - hash: "54d728d677cf3a07c4da7727a75e6c59" + hash: "de7b66581e0743385a984f76c993b01b" } Frame { msec: 2880 - hash: "54d728d677cf3a07c4da7727a75e6c59" + hash: "de7b66581e0743385a984f76c993b01b" } Frame { msec: 2896 @@ -738,239 +738,239 @@ VisualTest { } Frame { msec: 2912 - hash: "54d728d677cf3a07c4da7727a75e6c59" + hash: "de7b66581e0743385a984f76c993b01b" } Frame { msec: 2928 - hash: "45ec3534077f6fa66d7710010cceb332" + hash: "f66852df1738e4fe29ac1f6938d814c2" } Frame { msec: 2944 - hash: "45ec3534077f6fa66d7710010cceb332" + hash: "f66852df1738e4fe29ac1f6938d814c2" } Frame { msec: 2960 - hash: "45ec3534077f6fa66d7710010cceb332" + hash: "f66852df1738e4fe29ac1f6938d814c2" } Frame { msec: 2976 - hash: "45ec3534077f6fa66d7710010cceb332" + hash: "f66852df1738e4fe29ac1f6938d814c2" } Frame { msec: 2992 - hash: "ef909728fa59292ffed1d047835439d6" + hash: "cf6dde6c590879a9e905a0f559f089ca" } Frame { msec: 3008 - hash: "ef909728fa59292ffed1d047835439d6" + hash: "cf6dde6c590879a9e905a0f559f089ca" } Frame { msec: 3024 - hash: "ef909728fa59292ffed1d047835439d6" + hash: "cf6dde6c590879a9e905a0f559f089ca" } Frame { msec: 3040 - hash: "ef909728fa59292ffed1d047835439d6" + hash: "cf6dde6c590879a9e905a0f559f089ca" } Frame { msec: 3056 - hash: "ef909728fa59292ffed1d047835439d6" + hash: "cf6dde6c590879a9e905a0f559f089ca" } Frame { msec: 3072 - hash: "454741313d087e5d13ddeaf02663746f" + hash: "bd63e4df280010ed9f67fc7976b86cb5" } Frame { msec: 3088 - hash: "454741313d087e5d13ddeaf02663746f" + hash: "bd63e4df280010ed9f67fc7976b86cb5" } Frame { msec: 3104 - hash: "454741313d087e5d13ddeaf02663746f" + hash: "bd63e4df280010ed9f67fc7976b86cb5" } Frame { msec: 3120 - hash: "454741313d087e5d13ddeaf02663746f" + hash: "bd63e4df280010ed9f67fc7976b86cb5" } Frame { msec: 3136 - hash: "454741313d087e5d13ddeaf02663746f" + hash: "bd63e4df280010ed9f67fc7976b86cb5" } Frame { msec: 3152 - hash: "02928f0a8f8f1011028114487b8dccf8" + hash: "065d3d370faa58aed9899cae0f86f032" } Frame { msec: 3168 - hash: "02928f0a8f8f1011028114487b8dccf8" + hash: "065d3d370faa58aed9899cae0f86f032" } Frame { msec: 3184 - hash: "02928f0a8f8f1011028114487b8dccf8" + hash: "065d3d370faa58aed9899cae0f86f032" } Frame { msec: 3200 - hash: "02928f0a8f8f1011028114487b8dccf8" + hash: "065d3d370faa58aed9899cae0f86f032" } Frame { msec: 3216 - hash: "e0fca67bb095c9891831cd9355b4880d" + hash: "b5623d05c578a6f09bcfacd4d3163b09" } Frame { msec: 3232 - hash: "e0fca67bb095c9891831cd9355b4880d" + hash: "b5623d05c578a6f09bcfacd4d3163b09" } Frame { msec: 3248 - hash: "e0fca67bb095c9891831cd9355b4880d" + hash: "b5623d05c578a6f09bcfacd4d3163b09" } Frame { msec: 3264 - hash: "e0fca67bb095c9891831cd9355b4880d" + hash: "b5623d05c578a6f09bcfacd4d3163b09" } Frame { msec: 3280 - hash: "f5ae54931d953fc95cfbdbde1993bebe" + hash: "83c70529d05911ea26a5cbbab5aa20f2" } Frame { msec: 3296 - hash: "f5ae54931d953fc95cfbdbde1993bebe" + hash: "83c70529d05911ea26a5cbbab5aa20f2" } Frame { msec: 3312 - hash: "f5ae54931d953fc95cfbdbde1993bebe" + hash: "83c70529d05911ea26a5cbbab5aa20f2" } Frame { msec: 3328 - hash: "f5ae54931d953fc95cfbdbde1993bebe" + hash: "83c70529d05911ea26a5cbbab5aa20f2" } Frame { msec: 3344 - hash: "f5ae54931d953fc95cfbdbde1993bebe" + hash: "83c70529d05911ea26a5cbbab5aa20f2" } Frame { msec: 3360 - hash: "9afb0b2a185e2f825e9fad1c3644f6cb" + hash: "17927c706da1bc222ba5462af66a9d2f" } Frame { msec: 3376 - hash: "9afb0b2a185e2f825e9fad1c3644f6cb" + hash: "17927c706da1bc222ba5462af66a9d2f" } Frame { msec: 3392 - hash: "9afb0b2a185e2f825e9fad1c3644f6cb" + hash: "17927c706da1bc222ba5462af66a9d2f" } Frame { msec: 3408 - hash: "9afb0b2a185e2f825e9fad1c3644f6cb" + hash: "17927c706da1bc222ba5462af66a9d2f" } Frame { msec: 3424 - hash: "9afb0b2a185e2f825e9fad1c3644f6cb" + hash: "17927c706da1bc222ba5462af66a9d2f" } Frame { msec: 3440 - hash: "f3f5a81d3b5f644a00cea6203f38994c" + hash: "f49627ba8d3e257e0e94404da24d12dc" } Frame { msec: 3456 - hash: "f3f5a81d3b5f644a00cea6203f38994c" + hash: "f49627ba8d3e257e0e94404da24d12dc" } Frame { msec: 3472 - hash: "f3f5a81d3b5f644a00cea6203f38994c" + hash: "f49627ba8d3e257e0e94404da24d12dc" } Frame { msec: 3488 - hash: "f3f5a81d3b5f644a00cea6203f38994c" + hash: "f49627ba8d3e257e0e94404da24d12dc" } Frame { msec: 3504 - hash: "bd9884712fd5afe67a3622c809bf4e76" + hash: "37a0c9dc20431c8398409d4522a0fdd3" } Frame { msec: 3520 - hash: "bd9884712fd5afe67a3622c809bf4e76" + hash: "37a0c9dc20431c8398409d4522a0fdd3" } Frame { msec: 3536 - hash: "bd9884712fd5afe67a3622c809bf4e76" + hash: "37a0c9dc20431c8398409d4522a0fdd3" } Frame { msec: 3552 - hash: "bd9884712fd5afe67a3622c809bf4e76" + hash: "37a0c9dc20431c8398409d4522a0fdd3" } Frame { msec: 3568 - hash: "c9324386954380a72ef4084d13e623b5" + hash: "67bebfe9fb5ac745f40040ff8083e999" } Frame { msec: 3584 - hash: "c9324386954380a72ef4084d13e623b5" + hash: "67bebfe9fb5ac745f40040ff8083e999" } Frame { msec: 3600 - hash: "c9324386954380a72ef4084d13e623b5" + hash: "67bebfe9fb5ac745f40040ff8083e999" } Frame { msec: 3616 - hash: "c9324386954380a72ef4084d13e623b5" + hash: "67bebfe9fb5ac745f40040ff8083e999" } Frame { msec: 3632 - hash: "c9324386954380a72ef4084d13e623b5" + hash: "67bebfe9fb5ac745f40040ff8083e999" } Frame { msec: 3648 - hash: "6d05fd8e8690e44293af1809f359aa72" + hash: "84f8b27b83b566c99e65ea39b29772c1" } Frame { msec: 3664 - hash: "6d05fd8e8690e44293af1809f359aa72" + hash: "84f8b27b83b566c99e65ea39b29772c1" } Frame { msec: 3680 - hash: "6d05fd8e8690e44293af1809f359aa72" + hash: "84f8b27b83b566c99e65ea39b29772c1" } Frame { msec: 3696 - hash: "6d05fd8e8690e44293af1809f359aa72" + hash: "84f8b27b83b566c99e65ea39b29772c1" } Frame { msec: 3712 - hash: "6d05fd8e8690e44293af1809f359aa72" + hash: "84f8b27b83b566c99e65ea39b29772c1" } Frame { msec: 3728 - hash: "2d7350a79f5a68d3e3dfc994c6e002ed" + hash: "c6ba663536f19b9f291ef35b7a70e490" } Frame { msec: 3744 - hash: "2d7350a79f5a68d3e3dfc994c6e002ed" + hash: "c6ba663536f19b9f291ef35b7a70e490" } Frame { msec: 3760 - hash: "2d7350a79f5a68d3e3dfc994c6e002ed" + hash: "c6ba663536f19b9f291ef35b7a70e490" } Frame { msec: 3776 - hash: "2d7350a79f5a68d3e3dfc994c6e002ed" + hash: "c6ba663536f19b9f291ef35b7a70e490" } Frame { msec: 3792 - hash: "edb5d50f23a293a7791122fc159aaaa0" + hash: "65f22784730aa27b2628d015a1cc4abe" } Frame { msec: 3808 - hash: "edb5d50f23a293a7791122fc159aaaa0" + hash: "65f22784730aa27b2628d015a1cc4abe" } Frame { msec: 3824 - hash: "edb5d50f23a293a7791122fc159aaaa0" + hash: "65f22784730aa27b2628d015a1cc4abe" } Frame { msec: 3840 - hash: "edb5d50f23a293a7791122fc159aaaa0" + hash: "65f22784730aa27b2628d015a1cc4abe" } Frame { msec: 3856 @@ -978,14 +978,14 @@ VisualTest { } Frame { msec: 3872 - hash: "a863480fec9abf817752c5eb62a2ddf4" + hash: "b11a511d80de87329501b9c11aebbc58" } Frame { msec: 3888 - hash: "a863480fec9abf817752c5eb62a2ddf4" + hash: "b11a511d80de87329501b9c11aebbc58" } Frame { msec: 3904 - hash: "a863480fec9abf817752c5eb62a2ddf4" + hash: "b11a511d80de87329501b9c11aebbc58" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png index e1d3b75..3861b4f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.1.png index 8013dc9..ce166f1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml index 77a7b2f..84778ac 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "ef2b4cc93e5bf5e64d3338921fe36336" + hash: "58d757783e6d57c5ac2596219dfd37be" } Frame { msec: 48 - hash: "3ddbd1a53a36b0f8b36d87e742f3b1bd" + hash: "e76b3b98f447b706c59ba0c175e1829d" } Frame { msec: 64 - hash: "f7acfdaf29a3d7bd179b30db784ca01b" + hash: "f0dbb0b55d1d27bf7c0260db5b5782a2" } Frame { msec: 80 - hash: "b5277d02ed63180e845c60e1dd4da7d0" + hash: "00845517336befd7ead0141312ea38ce" } Frame { msec: 96 - hash: "a7964577d77943d5a62c02ea1e689eb7" + hash: "99723ae092407e5291ed3a13f5a7be61" } Frame { msec: 112 - hash: "fc597a07209bfea49227ec491b033af1" + hash: "2d531f1dd1545a4e2f8ca4c65338e0c3" } Frame { msec: 128 - hash: "429a7dd5a23a5012f1985bcddd27ba0c" + hash: "9f273323f48a70be279302b194203a36" } Frame { msec: 144 - hash: "fbf845e137e0b389babdcd71a95c3060" + hash: "7de4bd5f82369953c2a4a990ddaf4339" } Frame { msec: 160 - hash: "1d1272df3a53cb9860d23be3343a143e" + hash: "96c5f74c01723a15a57db161604bc245" } Frame { msec: 176 - hash: "cef05f6564b21fd2cbd02f6def604c0b" + hash: "df2eac6300919044cfe2a2f591c3bd99" } Frame { msec: 192 - hash: "be0ca54bc7aa23c2b9c56e3a0444197a" + hash: "a153904cdfa0be697a25bebc4ce1fbca" } Frame { msec: 208 - hash: "5372a7052d10b8c6c2204efdc88c2f48" + hash: "de243731b92ac1cac05e194aed0acd1e" } Frame { msec: 224 - hash: "43b775c558843c1334e86ca4fcf07ae2" + hash: "f6ccc0f127bfc6212885c3c6470639ed" } Frame { msec: 240 - hash: "10daf71511454ef4db3692a19ecbcbaa" + hash: "a2d56227aebedb9590a1124e44fe8e84" } Frame { msec: 256 - hash: "5c545ecb0ddfaa5d6cde266be6fae35c" + hash: "5f8c0a42a231580dcfff6a534e77bef8" } Frame { msec: 272 - hash: "1a3c05b189c3adf87710eeb03296aec2" + hash: "e631663ac692ab097cb28095b45e8563" } Frame { msec: 288 - hash: "de2c6f4d3bf4d245e45e47a743808f5d" + hash: "2a03f6ba3c67a9e9732cc1f5cdc42c23" } Frame { msec: 304 - hash: "7c71dcbd8e2be19ac2d090ab3e012a62" + hash: "26b85080d624b232e5209aa082fc11b1" } Frame { msec: 320 - hash: "3bd42257fe4a5d941a8755e66db94870" + hash: "1c027f4a0114bb9050a3a8d9de2b8a56" } Frame { msec: 336 - hash: "d52f57a1f289d2c697fd1db2086a4df3" + hash: "788e6ad3cb5f6e120e40fd3dc6ac8483" } Frame { msec: 352 - hash: "5d9e22ca6b6f8e4805a49fcf9c6a4dd6" + hash: "7e1b0fb71528dfa17a87950c0ff86111" } Frame { msec: 368 - hash: "cbafada44b434ac7fe64fdebef7a816e" + hash: "e1878e6e8ba14d8945e1f71ac8d42c1e" } Frame { msec: 384 - hash: "4ac900c005cfedb9e3367a4612334cc1" + hash: "556f42297eb1e57d6a8af0946651a75e" } Frame { msec: 400 - hash: "3dbe30edac497ca316bf39e55ff9580a" + hash: "73df08e7e3391b339cea9f5f082fd83a" } Frame { msec: 416 - hash: "e892891c063172d513f4f8c0a0b2644f" + hash: "de3bd8a12c2a448738ce77036b97bda7" } Frame { msec: 432 - hash: "7c214a442c8f37d22f74343fdb7f7faa" + hash: "0ab187aa7a478dbf005f35416a93c456" } Frame { msec: 448 - hash: "c4461c6c26eb9689e640149b7755bf14" + hash: "e5baf64ccafa6a4d2bf74aacf52019c6" } Frame { msec: 464 - hash: "e7be611f007716a80698558d0600f5b6" + hash: "0ed2ee4a773ade712ef207549006aa7b" } Frame { msec: 480 - hash: "5a3abaa7b36fcd7e2279318671597386" + hash: "b23dd49bdfe8fb155e2055262e6a1478" } Frame { msec: 496 - hash: "2dba1fcba5bdce948fa56ffc02a7f80c" + hash: "871f82636a03d6fa8cbfb580038bd0b7" } Frame { msec: 512 - hash: "55043bcce83e4f8899b1a692fe30fa67" + hash: "463cdc2cbde034d7d7a5061338b319c7" } Frame { msec: 528 - hash: "f92df1fb28a7da39ed907dd2bc177ab8" + hash: "22ff8e25136877fd6f5dce1b01e65c08" } Frame { msec: 544 - hash: "7dcf90cd5f81999359ed389c7050d934" + hash: "97d4e49622d877e9e1e0102786e1ee55" } Frame { msec: 560 - hash: "021014366809103b76bd5d472c43b062" + hash: "ebf5304185abe4bc33be44c3df09a93a" } Frame { msec: 576 - hash: "fff5b2c8d63083d132c0f106fad84fa1" + hash: "307887d9973e807c52b2143cdfe438ad" } Frame { msec: 592 - hash: "ab3a6a6c646d31be97884484a6647330" + hash: "d89547539741f387fdd6aa80ef239fbd" } Frame { msec: 608 - hash: "d46a168f89d94a32496b75ee5d3794e4" + hash: "b818215b4cdd6e811057f1a0f5eb1a5a" } Frame { msec: 624 - hash: "f7b62e86595a4d2c7f5a2cd52e0938b9" + hash: "84f7e523c0f21236ff8aad1333470d11" } Frame { msec: 640 - hash: "df95a29a101889c50537cfb1b027f9a6" + hash: "7f974663c7add6d10ebdd401794e087a" } Frame { msec: 656 - hash: "4c6691ef37222260dce72868ae809d68" + hash: "4c824dc01e8fead2706608ca68293d11" } Frame { msec: 672 - hash: "ad816534dcf446a1456894ff2b1afa33" + hash: "86b0f617eb3bfff944c3b670b3b51c71" } Frame { msec: 688 - hash: "bfa9f9f833f38aedf766e061f3a18c48" + hash: "86c5660c22003099cc4121381c11de85" } Frame { msec: 704 - hash: "f4a6786e9db58cf3fd3f3b896d3cf84f" + hash: "3c2bd08ea17aaa920949239f06b255cf" } Frame { msec: 720 - hash: "e51e8b766e5d4a0f061dc6885fcf8eb3" + hash: "2380278cc065a3ac5355127d9873796c" } Frame { msec: 736 - hash: "eab6d261429c36c4e37005f37b7823d5" + hash: "e5d8624e841476926b3e2a5ebca8c65f" } Frame { msec: 752 - hash: "3cc5db209a98daef06127bae53b1929d" + hash: "eab70f5005a6b39e3ead6e4452df1a54" } Frame { msec: 768 - hash: "230cd6e6ca18a921a21379dd85e24822" + hash: "46acef023d154bad3f91e0267996421b" } Frame { msec: 784 - hash: "e3a877e8f01bf17fe6ea8b9fbb780f14" + hash: "26ba9f30a4bfd72c9b6dae2a25660ea9" } Frame { msec: 800 - hash: "a19f504a81409dea775481f21f992ba6" + hash: "9fabdd5cf1190fb34bdc7834eba01cd3" } Frame { msec: 816 - hash: "e77cc3ab14551638e704a1493189d5d1" + hash: "b1e7af47d4ee706374365fdd4b4d52be" } Frame { msec: 832 - hash: "613bdf9d32358ab0db310ae1e2246d52" + hash: "86fa2e142e75d9d2a074a5376992f139" } Frame { msec: 848 - hash: "d4fab0193f567cce4ad1e1cf6b156ce5" + hash: "a3dea2bf8f84743d35070e82ec585c9a" } Frame { msec: 864 - hash: "03ce3083411d10b14ac0bb85b22bfbd1" + hash: "ab649fbbe0ca508812de9839d14b3f8c" } Frame { msec: 880 - hash: "4be10fb14abf82705d8071cf75956ece" + hash: "08f8a334e121d4edb0ca1617353bfebc" } Frame { msec: 896 - hash: "4c1f150fb5ba1194ad198eb32f705af6" + hash: "bb7997c1e18b90cfaad4c3e4ec44356e" } Frame { msec: 912 - hash: "5ddfd98c8a49eefe08ae33d0c0ea52ff" + hash: "31a7e5d71c28eebfcd29e9ea4950ad17" } Frame { msec: 928 - hash: "f2018d16f38e113c9477c19431e3d1e4" + hash: "2b759276e03c2884bff7ed863c032dfc" } Frame { msec: 944 - hash: "9fe6406d65978dba74716f1ba02bdf76" + hash: "aa0868f006097a435c46368ea9e3ba36" } Frame { msec: 960 - hash: "265d92edca113f465e624079c266b213" + hash: "6454753699c21589d2523a83da0aaa34" } Frame { msec: 976 @@ -250,54 +250,54 @@ VisualTest { } Frame { msec: 992 - hash: "6beb60f7645be5f1d07449610b5e13b0" + hash: "ac26abff68fbc1cf89dc5efc4a714a04" } Frame { msec: 1008 - hash: "55c34cb290732a1fa94b5037477fd882" + hash: "d3f9dc8cb653d996fb57652f85abcbc1" } Frame { msec: 1024 - hash: "4d6ed8044e3ac5da61cf61f4d08c5a19" + hash: "002a94f067eef532f63b6ef916977c2c" } Frame { msec: 1040 - hash: "83657cfa447060a01d5fbdb890ad3fb9" + hash: "f7935d01ee9b497034cc1d8f007a0fdf" } Frame { msec: 1056 - hash: "b04b6cb7e5e464ecee15a2c9803a857f" + hash: "4a1bfdcc85e5444c1bd836399e86ee05" } Frame { msec: 1072 - hash: "ea4f1707e49527f6cae0a3df1b75137b" + hash: "1b86514f3c85a8438ef183cc4772e997" } Frame { msec: 1088 - hash: "ae4893aca919be2d89f1107185b5fe9a" + hash: "7bf4c1ca946288e9d1a7ad055d8cacaa" } Frame { msec: 1104 - hash: "d991c469947a94ffcfb63716226fa912" + hash: "b3a00861967157786a80c80030d5495b" } Frame { msec: 1120 - hash: "df63c1dba0399d1fe5e7b9c9c794b598" + hash: "b9c6195d3336d7519cc72b16e75d00f6" } Frame { msec: 1136 - hash: "305d263f68b4ccd78bffccd887870f97" + hash: "6dba6d030a5ff6a92a57f0bdcf0fe781" } Frame { msec: 1152 - hash: "f4d1f7245b519d623defdc12e76285d2" + hash: "cc97a2721f4339094819c8b7aec6d74c" } Frame { msec: 1168 - hash: "5a47e6498ddf8a02cb1df7a3510bac37" + hash: "190f67abce51f58fdd1591651633d67e" } Frame { msec: 1184 - hash: "358b9b6be7f8379815d8ee828eed3e43" + hash: "b255f75cfc4918663b8bd47c887cfb3c" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png index 591c1ef..cfa61a9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.0.png index dc90e0d..be676c0 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext3.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext3.0.png index c787029..df2fe2f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext3.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext3.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png index fdd64ac..76e5b9f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext2.0.png index 1286e54..bb65ade 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png index 05dd690..060be22 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png index eb74cc5..d373aef 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.3.png index 3aed06c..5dad108 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml index 2de4a10..6081aaf 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml @@ -110,23 +110,23 @@ VisualTest { } Frame { msec: 368 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 384 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 400 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 416 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 432 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Key { type: 7 @@ -138,27 +138,27 @@ VisualTest { } Frame { msec: 448 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 464 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 480 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 496 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 512 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 528 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Key { type: 7 @@ -170,43 +170,43 @@ VisualTest { } Frame { msec: 544 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 560 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 576 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 592 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 608 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 624 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 640 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 656 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 672 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Frame { msec: 688 - hash: "bc06530170cf26690a09ed9f6c4014fd" + hash: "593867b082681c362d7dffda12615284" } Key { type: 6 @@ -218,23 +218,23 @@ VisualTest { } Frame { msec: 704 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 720 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 736 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 752 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 768 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Key { type: 7 @@ -246,23 +246,23 @@ VisualTest { } Frame { msec: 784 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 800 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 816 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 832 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Frame { msec: 848 - hash: "8c64a986ce7bd19dcc88785309456f4e" + hash: "8d4a4baca932c318fba437b05962a635" } Key { type: 6 @@ -274,15 +274,15 @@ VisualTest { } Frame { msec: 864 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Frame { msec: 880 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Frame { msec: 896 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Key { type: 7 @@ -294,19 +294,19 @@ VisualTest { } Frame { msec: 912 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Frame { msec: 928 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Frame { msec: 944 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Frame { msec: 960 - hash: "4cfca8edcb96b1d9986db4ee491bf857" + hash: "b2698dba3a5ebe80e26f273b32857506" } Frame { msec: 976 @@ -322,19 +322,19 @@ VisualTest { } Frame { msec: 992 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1008 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1024 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1040 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Key { type: 7 @@ -346,51 +346,51 @@ VisualTest { } Frame { msec: 1056 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1072 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1088 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1104 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1120 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1136 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1152 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1168 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1184 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1200 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1216 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Frame { msec: 1232 - hash: "3d25316ea23ace5a88dbe8765b743eb3" + hash: "3ea06a90d633d5e9fe5a11cc4ed67764" } Key { type: 6 @@ -402,15 +402,15 @@ VisualTest { } Frame { msec: 1248 - hash: "fea82a32ec46a88027cc9b0c00aa0aba" + hash: "a190bbf59ec807391077b9d1183f72b5" } Frame { msec: 1264 - hash: "fea82a32ec46a88027cc9b0c00aa0aba" + hash: "a190bbf59ec807391077b9d1183f72b5" } Frame { msec: 1280 - hash: "fea82a32ec46a88027cc9b0c00aa0aba" + hash: "a190bbf59ec807391077b9d1183f72b5" } Key { type: 7 @@ -422,15 +422,15 @@ VisualTest { } Frame { msec: 1296 - hash: "fea82a32ec46a88027cc9b0c00aa0aba" + hash: "a190bbf59ec807391077b9d1183f72b5" } Frame { msec: 1312 - hash: "fea82a32ec46a88027cc9b0c00aa0aba" + hash: "a190bbf59ec807391077b9d1183f72b5" } Frame { msec: 1328 - hash: "fea82a32ec46a88027cc9b0c00aa0aba" + hash: "a190bbf59ec807391077b9d1183f72b5" } Key { type: 6 @@ -442,39 +442,39 @@ VisualTest { } Frame { msec: 1344 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1360 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1376 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1392 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1408 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1424 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1440 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1456 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Frame { msec: 1472 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Key { type: 7 @@ -486,7 +486,7 @@ VisualTest { } Frame { msec: 1488 - hash: "fffa6f462ea15fe3bdbf2c199881fce4" + hash: "f171a98a3a726b517ad4b401a0720ba2" } Key { type: 6 @@ -498,19 +498,19 @@ VisualTest { } Frame { msec: 1504 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1520 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1536 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1552 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Key { type: 7 @@ -522,27 +522,27 @@ VisualTest { } Frame { msec: 1568 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1584 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1600 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1616 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1632 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Frame { msec: 1648 - hash: "d874584748e4aa14fd71730aa36d676c" + hash: "e7199e4284be9dea34caff7bde0f6303" } Key { type: 6 @@ -554,23 +554,23 @@ VisualTest { } Frame { msec: 1664 - hash: "5eac6452c3c01de25633be412b2c9fd6" + hash: "1d9d3c6435f2fa06bda16ef4a2ff238f" } Frame { msec: 1680 - hash: "5eac6452c3c01de25633be412b2c9fd6" + hash: "1d9d3c6435f2fa06bda16ef4a2ff238f" } Frame { msec: 1696 - hash: "5eac6452c3c01de25633be412b2c9fd6" + hash: "1d9d3c6435f2fa06bda16ef4a2ff238f" } Frame { msec: 1712 - hash: "5eac6452c3c01de25633be412b2c9fd6" + hash: "1d9d3c6435f2fa06bda16ef4a2ff238f" } Frame { msec: 1728 - hash: "5eac6452c3c01de25633be412b2c9fd6" + hash: "1d9d3c6435f2fa06bda16ef4a2ff238f" } Key { type: 6 @@ -582,7 +582,7 @@ VisualTest { } Frame { msec: 1744 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Key { type: 7 @@ -594,15 +594,15 @@ VisualTest { } Frame { msec: 1760 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Frame { msec: 1776 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Frame { msec: 1792 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Key { type: 7 @@ -614,19 +614,19 @@ VisualTest { } Frame { msec: 1808 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Frame { msec: 1824 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Frame { msec: 1840 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Frame { msec: 1856 - hash: "8bf395bd43cf0483aea0ddf3e8ab8c56" + hash: "9d8cb02bbc4f39d38ccdf8e9bda0ed5c" } Key { type: 6 @@ -638,19 +638,19 @@ VisualTest { } Frame { msec: 1872 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 1888 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 1904 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 1920 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Key { type: 7 @@ -666,23 +666,23 @@ VisualTest { } Frame { msec: 1952 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 1968 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 1984 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 2000 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Frame { msec: 2016 - hash: "4a31bba56f9adaccf47e6335ed4e284f" + hash: "2af75935ad1d3be02c6481c094737575" } Key { type: 6 @@ -694,11 +694,11 @@ VisualTest { } Frame { msec: 2032 - hash: "8bbabbbe84de490438d1111aa728c15f" + hash: "c3512d6a7ead481aa6fec8ef8ee2f1d1" } Frame { msec: 2048 - hash: "8bbabbbe84de490438d1111aa728c15f" + hash: "c3512d6a7ead481aa6fec8ef8ee2f1d1" } Key { type: 7 @@ -710,11 +710,11 @@ VisualTest { } Frame { msec: 2064 - hash: "8bbabbbe84de490438d1111aa728c15f" + hash: "c3512d6a7ead481aa6fec8ef8ee2f1d1" } Frame { msec: 2080 - hash: "8bbabbbe84de490438d1111aa728c15f" + hash: "c3512d6a7ead481aa6fec8ef8ee2f1d1" } Key { type: 6 @@ -726,19 +726,19 @@ VisualTest { } Frame { msec: 2096 - hash: "5877f1d527fecaf1077ff5bd2fe1934f" + hash: "064e1fc885ab7f07dad1770361087bef" } Frame { msec: 2112 - hash: "5877f1d527fecaf1077ff5bd2fe1934f" + hash: "064e1fc885ab7f07dad1770361087bef" } Frame { msec: 2128 - hash: "5877f1d527fecaf1077ff5bd2fe1934f" + hash: "064e1fc885ab7f07dad1770361087bef" } Frame { msec: 2144 - hash: "5877f1d527fecaf1077ff5bd2fe1934f" + hash: "064e1fc885ab7f07dad1770361087bef" } Key { type: 6 @@ -758,19 +758,19 @@ VisualTest { } Frame { msec: 2160 - hash: "1593ef669fdff28c33f54c12c7e7424e" + hash: "9b764f6e9cc3d30446e1b32f7ab94f66" } Frame { msec: 2176 - hash: "1593ef669fdff28c33f54c12c7e7424e" + hash: "9b764f6e9cc3d30446e1b32f7ab94f66" } Frame { msec: 2192 - hash: "1593ef669fdff28c33f54c12c7e7424e" + hash: "9b764f6e9cc3d30446e1b32f7ab94f66" } Frame { msec: 2208 - hash: "1593ef669fdff28c33f54c12c7e7424e" + hash: "9b764f6e9cc3d30446e1b32f7ab94f66" } Key { type: 6 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2224 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Key { type: 7 @@ -794,23 +794,23 @@ VisualTest { } Frame { msec: 2240 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Frame { msec: 2256 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Frame { msec: 2272 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Frame { msec: 2288 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Frame { msec: 2304 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Key { type: 7 @@ -822,11 +822,11 @@ VisualTest { } Frame { msec: 2320 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Frame { msec: 2336 - hash: "da746581451954d7d941fbac825a1009" + hash: "18eff632e106f632aad481ab40f985d7" } Key { type: 6 @@ -838,27 +838,27 @@ VisualTest { } Frame { msec: 2352 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2368 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2384 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2400 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2416 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2432 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Key { type: 7 @@ -870,19 +870,19 @@ VisualTest { } Frame { msec: 2448 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2464 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2480 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Frame { msec: 2496 - hash: "3e008b7ead8459c1667f4f385d4c5372" + hash: "eaabd4617081e3bc68a5b9099c63272a" } Key { type: 6 @@ -894,15 +894,15 @@ VisualTest { } Frame { msec: 2512 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2528 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2544 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Key { type: 7 @@ -914,87 +914,87 @@ VisualTest { } Frame { msec: 2560 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2576 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2592 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2608 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2624 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2640 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2656 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2672 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2688 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2704 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2720 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2736 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2752 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2768 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2784 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2800 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2816 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2832 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2848 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2864 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2880 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2896 @@ -1002,42 +1002,42 @@ VisualTest { } Frame { msec: 2912 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2928 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2944 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2960 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2976 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 2992 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 3008 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 3024 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 3040 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } Frame { msec: 3056 - hash: "1dbc7e1ab58dcec8691ff4195b0d581c" + hash: "fec019ea87914d30b5bf4754ce8ba916" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/usingLineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/usingLineEdit.qml index a1a0821..fc8a115 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/usingLineEdit.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/usingLineEdit.qml @@ -379,7 +379,7 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 @@ -583,7 +583,7 @@ VisualTest { Key { type: 7 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 @@ -783,7 +783,7 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 @@ -1175,7 +1175,7 @@ VisualTest { Key { type: 7 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 @@ -1823,7 +1823,7 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 @@ -2327,7 +2327,7 @@ VisualTest { Key { type: 7 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 -- cgit v0.12 From ea814440efc8a4b956ba3a4cddd1f269f1734c96 Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Thu, 25 Nov 2010 12:57:13 +0100 Subject: Fix QTBUG-13928 non flat mode for project files in VS2010. Reviewed-by: Joerg Task-number: QTBUG-13928 --- qmake/generators/win32/msbuild_objectmodel.cpp | 31 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp index c3436b4..3381d53 100644 --- a/qmake/generators/win32/msbuild_objectmodel.cpp +++ b/qmake/generators/win32/msbuild_objectmodel.cpp @@ -2908,26 +2908,43 @@ void XTreeNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString if (children.size()) { // Filter + QString tempFilterName; ChildrenMap::ConstIterator it, end = children.constEnd(); if (!tagName.isEmpty()) { + tempFilterName.append(filter); + tempFilterName.append("\\"); + tempFilterName.append(tagName); + xmlFilter << tag(_ItemGroup); xmlFilter << tag("Filter") - << attrTag("Include", tagName) - << attrTagS("Extensions", ""); + << attrTag("Include", tempFilterName) + << closetag(); + xmlFilter << closetag(); } // First round, do nested filters for (it = children.constBegin(); it != end; ++it) if ((*it)->children.size()) - (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter); + { + if ( !tempFilterName.isEmpty() ) + (*it)->generateXML(xml, xmlFilter, it.key(), tool, tempFilterName); + else + (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter); + } // Second round, do leafs for (it = children.constBegin(); it != end; ++it) if (!(*it)->children.size()) - (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter); - - if (!tagName.isEmpty()) - xml << closetag("Filter"); + { + if ( !tempFilterName.isEmpty() ) + (*it)->generateXML(xml, xmlFilter, it.key(), tool, tempFilterName); + else + (*it)->generateXML(xml, xmlFilter, it.key(), tool, filter); + } } else { // Leaf + xml << tag(_ItemGroup); + xmlFilter << tag(_ItemGroup); tool.outputFileConfigs(xml, xmlFilter, info, filter); + xmlFilter << closetag(); + xml << closetag(); } } -- cgit v0.12 From 1eca3f0ac1ac04fde7f99cfeae2301b8a25af718 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 25 Nov 2010 10:36:33 +0200 Subject: Only patch package content that is necessary for self-signing Automatic patching was modifying all package files in ways that only made sense for very limited set of projects. Some things were also no longer necessary due other developments, so dropped the dependency, embedded sis, and manufacturer check modifications. Also provided an option to do a self-signed compatibility check for the package instead of patching it automatically by specifying "-d" parameter in QT_SIS_OPTIONS env variable or createpackage command line, depending on how package is made. Task-number: QTBUG-15561 Reviewed-by: axis --- bin/createpackage.pl | 14 +- bin/patch_capabilities.pl | 215 +++++++++++++++------------- doc/src/platforms/symbian-introduction.qdoc | 1 + 3 files changed, 125 insertions(+), 105 deletions(-) diff --git a/bin/createpackage.pl b/bin/createpackage.pl index 522d1fb..6b83585 100755 --- a/bin/createpackage.pl +++ b/bin/createpackage.pl @@ -82,6 +82,8 @@ Where supported options are as follows: [-s|stub] = Generates stub sis for ROM. [-n|sisname ] = Specifies the final sis name. [-g|gcce-is-armv5] = Convert gcce platform to armv5. + [-d|dont-patch] = Skip automatic patching of capabilities and pkg file if default certificate + is used. Instead non-self-signable capabilities just cause warnings. Where parameters are as follows: templatepkg = Name of .pkg file template target = Either debug or release @@ -127,6 +129,7 @@ my $stub = ""; my $signed_sis_name = ""; my $onlyUnsigned = ""; my $convertGcce = ""; +my $dontPatchCaps = ""; unless (GetOptions('i|install' => \$install, 'p|preprocess' => \$preprocessonly, @@ -135,7 +138,8 @@ unless (GetOptions('i|install' => \$install, 'o|only-unsigned' => \$onlyUnsigned, 's|stub' => \$stub, 'n|sisname=s' => \$signed_sis_name, - 'g|gcce-is-armv5' => \$convertGcce,)) { + 'g|gcce-is-armv5' => \$convertGcce, + 'd|dont-patch' => \$dontPatchCaps,)) { Usage(); } @@ -343,9 +347,13 @@ if($stub) { && !@certificates && $templatepkg !~ m/_installer\.pkg$/i && !$onlyUnsigned) { - print("Auto-patching capabilities for self signed package.\n"); my $patch_capabilities = File::Spec->catfile(dirname($0), "patch_capabilities"); - system ("$patch_capabilities $pkgoutput") and die ("ERROR: Automatic patching failed"); + if ($dontPatchCaps) { + system ("$patch_capabilities -c $pkgoutput") and print ("Warning: Package check for self-signing viability failed. Installing the package on a device will most likely fail!\n\n"); + } else { + print("Auto-patching self-signed package.\n"); + system ("$patch_capabilities $pkgoutput") and die ("ERROR: Automatic patching failed"); + } } # Create SIS. diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index 994d493..df71339 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -63,8 +63,11 @@ sub Usage() { print(" symbian-sbsv2 platform, 'target-platform' is REQUIRED. ***\n\n"); print(" *** NOTE2: When patching gcce binaries built with symbian-sbsv2 toolchain,\n"); print(" armv5 must be specified as platform.\n"); - print("\nUsage: patch_capabilities.pl pkg_filename [target-platform [capability list]]\n"); + print("\nUsage: patch_capabilities.pl [-c] pkg_filename [target-platform [capability list]]\n"); print("\nE.g. patch_capabilities.pl myapp_template.pkg release-armv5 \"All -TCB\"\n"); + print("\nThe parameter -c can be used to just check if package is compatible with self-signing\n"); + print("without actually doing any patching.\n"); + print("Explicit capability list cannot be used with -c parameter.\n"); exit(); } @@ -86,6 +89,14 @@ if (@ARGV) { # Parse the first given script argument as a ".pkg" file name. my $pkgFileName = shift(@ARGV); + my $justCheck = ""; + my $msgPrefix = "Patching:"; + + if ($pkgFileName eq "-c") { + $pkgFileName = shift(@ARGV); + $justCheck = true; + $msgPrefix = "Warning:"; + } # These variables will only be set for template .pkg files. my $target; @@ -123,15 +134,22 @@ if (@ARGV) if (($pkgFileName =~ m|\.pkg$|i) && -r($pkgFileName)) { print ("\n"); - print ("Patching package file and relevant binaries...\n"); + if ($justCheck) { + print ("Checking"); + } else { + print ("Patching"); + } + print (" package file and relevant binaries...\n"); - # If there are more arguments given, parse them as capabilities. - if (@ARGV) - { - @capabilitiesSpecified = (); - while (@ARGV) + if (!$justCheck) { + # If there are more arguments given, parse them as capabilities. + if (@ARGV) { - push (@capabilitiesSpecified, pop(@ARGV)); + @capabilitiesSpecified = (); + while (@ARGV) + { + push (@capabilitiesSpecified, pop(@ARGV)); + } } } @@ -139,11 +157,15 @@ if (@ARGV) my @binaries = (); my $tempPkgFileName = $pkgFileName."_@@TEMP@@"; - unlink($tempPkgFileName); - open (NEW_PKG, ">>".$tempPkgFileName); + + if (!$justCheck) { + unlink($tempPkgFileName); + open (NEW_PKG, ">>".$tempPkgFileName); + } open (PKG, "<".$pkgFileName); - my $manufacturerElseBlock = 0; + my $checkFailed = ""; + my $somethingPatched = ""; # Parse each line. while () @@ -155,66 +177,19 @@ if (@ARGV) if ($line =~ m/^\#.*\((0x[0-7][0-9a-fA-F]*)\).*$/) { my $oldUID = $1; - my $newUID = $oldUID; - $newUID =~ s/0x./0xE/i; - $newLine =~ s/$oldUID/$newUID/; - print ("Patching: UID $oldUID is not compatible with self-signing! Changed to: $newUID.\n"); - } - - # Patch embedded sis name and UID if UID is in protected range - if ($line =~ m/^@\"*(.*\.sis).*\((0x[0-7][0-9a-fA-F]*)\).*$/) - { - my $oldSisName = $1; - my $oldUID = $2; - my $newUID = $oldUID; - $newUID =~ s/0x./0xE/i; - $newLine =~ s/$oldUID/$newUID/; - print ("Patching: Embedded sis $oldSisName UID $oldUID changed to: $newUID.\n"); - - if ($oldSisName !~ m/^.*_selfsigned.sis$/i) - { - my $newSisName = $oldSisName; - $newSisName =~ s/\.sis$/_selfsigned\.sis/i; - $newLine =~ s/$oldSisName/$newSisName/i; - print ("Patching: Embedded sis $oldSisName name changed to: $newSisName.\n"); + print ("$msgPrefix UID $oldUID is not compatible with self-signing!\n"); + + if ($justCheck) { + $checkFailed = true; + } else { + my $newUID = $oldUID; + $newUID =~ s/0x./0xE/i; + $newLine =~ s/$oldUID/$newUID/; + print ("$msgPrefix Package UID changed to: $newUID.\n"); + $somethingPatched = true; } } - # Remove dependencies to known problem packages (i.e. packages that are likely to be patched, too) - # to reduce unnecessary error messages. - if ($line =~ m/^\((0x2002af5f)\).*\{.*\}$/) - { - $newLine = "\n"; - print ("Patching: Removed dependency to sqlite3.sis ($1) to avoid installation issues in case sqlite3.sis is also patched.\n"); - } - if ($line =~ m/^\((0x2001E61C)\).*\{.*\}$/) - { - $newLine = "\n"; - print ("Patching: Removed dependency to qt.sis ($1) to avoid installation issues in case qt.sis is also patched.\n"); - } - - # Remove manufacturer ifdef - if ($line =~ m/^.*\(MANUFACTURER\)\=\(.*\).*$/) - { - $newLine = "\n"; - print ("Patching: Removed manufacturer check as it is usually not desirable in self-signed packages.\n"); - } - - if ($line =~ m/^ELSEIF.*MANUFACTURER$/) - { - $manufacturerElseBlock = 1; - } - - if ($manufacturerElseBlock eq 1) - { - $newLine = "\n"; - } - - if ($line =~ m/^ENDIF.*MANUFACTURER$/) - { - $manufacturerElseBlock = 0; - } - # If the line specifies a file, parse the source and destination locations. if ($line =~ m|^ *\"([^\"]+)\"\s*\-\s*\"([^\"]+)\"|) { @@ -231,16 +206,20 @@ if (@ARGV) $sourcePath =~ s/\$\(TARGET\)/$target/gm; } - # Change the source file name (but only if not already patched) - my $patchedSourcePath = $sourcePath; - if ($patchedSourcePath !~ m/_patched_caps/) - { - $newLine =~ s/(^.*)(\.dll|\.exe)(.*)(\.dll|\.exe)/$1_patched_caps$2$3$4/i; - $patchedSourcePath =~ s/(^.*)(\.dll|\.exe)/$1_patched_caps$2/i; - - copy($sourcePath, $patchedSourcePath) or die "$sourcePath cannot be copied for patching."; + if ($justCheck) { + push (@binaries, $sourcePath); + } else { + # Change the source file name (but only if not already patched) + my $patchedSourcePath = $sourcePath; + if ($patchedSourcePath !~ m/_patched_caps/) + { + $newLine =~ s/(^.*)(\.dll|\.exe)(.*)(\.dll|\.exe)/$1_patched_caps$2$3$4/i; + $patchedSourcePath =~ s/(^.*)(\.dll|\.exe)/$1_patched_caps$2/i; + + copy($sourcePath, $patchedSourcePath) or die "$sourcePath cannot be copied for patching."; + } + push (@binaries, $patchedSourcePath); } - push (@binaries, $patchedSourcePath); } } @@ -250,11 +229,12 @@ if (@ARGV) } close (PKG); - close (NEW_PKG); - - unlink($pkgFileName); - rename($tempPkgFileName, $pkgFileName); + if (!$justCheck) { + close (NEW_PKG); + unlink($pkgFileName); + rename($tempPkgFileName, $pkgFileName); + } print ("\n"); my $baseCommandToExecute = "elftran -vid 0x0 -capability \"%s\" "; @@ -265,18 +245,18 @@ if (@ARGV) # Create the command line for setting the capabilities. my ($binaryVolume, $binaryDirs, $binaryBaseName) = File::Spec->splitpath($binaryPath); my $commandToExecute = $baseCommandToExecute; - my $executeNeeded = 0; + my $executeNeeded = ""; if (@capabilitiesSpecified) { $commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesSpecified)); - $executeNeeded = 1; + $executeNeeded = true; my $capString = join(" ", @capabilitiesSpecified); - print ("Patching: Patching the the Vendor ID to 0 and the capabilities used to: \"$capString\" in \"$binaryBaseName\".\n"); + print ("$msgPrefix Patching the the Vendor ID to 0 and the capabilities used to: \"$capString\" in \"$binaryBaseName\".\n"); } else { # Test which capabilities are present and then restrict them to the allowed set. # This avoid raising the capabilities of apps that already have none. my $dllCaps; - open($dllCaps, "elftran -dump s $binaryPath |") or die ("Could not execute elftran"); + open($dllCaps, "elftran -dump s $binaryPath |") or die ("ERROR: Could not execute elftran"); my $capsFound = 0; my $originalVid; my @capabilitiesToSet; @@ -288,8 +268,8 @@ if (@ARGV) if ($binaryBaseName =~ /\.exe$/) { # Installer refuses to install protected executables in a self signed package, so abort if one is detected. # We can't simply just patch the executable SID, as any registration resources executable uses will be linked to it via SID. - print ("Patching: Executable with SID in the protected range (0x$exeSid) detected: \"$binaryBaseName\". A self-signed sis with protected executables is not supported.\n"); - exit(1); + print ("$msgPrefix Executable with SID in the protected range (0x$exeSid) detected: \"$binaryBaseName\". A self-signed sis with protected executables is not supported.\n\n"); + $checkFailed = true; } } if (/^Vendor ID: ([0-9a-fA-F]*)$/) { @@ -302,7 +282,7 @@ if (@ARGV) if ($capabilitiesToAllow =~ /$_/) { push(@capabilitiesToSet, $_); if (Location =~ /$_/i) { - print ("Patching: Warning - \"Location\" capability detected for binary: \"$binaryBaseName\". This capability is not self-signable for S60 3rd edition feature pack 1 devices, so installing this package on those devices will most likely not work.\n"); + print ("$msgPrefix \"Location\" capability detected for binary: \"$binaryBaseName\". This capability is not self-signable for S60 3rd edition feature pack 1 devices, so installing this package on those devices will most likely not work.\n\n"); } } else { push(@capabilitiesToDrop, $_); @@ -311,22 +291,32 @@ if (@ARGV) } close($dllCaps); if ($originalVid !~ "00000000") { - print ("Patching: Vendor ID (0x$originalVid) incompatible with self-signed packages, setting it to zero for \"$binaryBaseName\".\n"); - $executeNeeded = 1; + print ("$msgPrefix Non-zero vendor ID (0x$originalVid) is incompatible with self-signed packages in \"$binaryBaseName\""); + if ($justCheck) { + print (".\n\n"); + $checkFailed = true; + } else { + print (", setting it to zero.\n\n"); + $executeNeeded = true; + } } if ($#capabilitiesToDrop) { my $capsToDropStr = join("\", \"", @capabilitiesToDrop); $capsToDropStr =~ s/\", \"$//; - if ($binaryBaseName =~ /\.exe$/) { - # While libraries often have capabilities they do not themselves need just to enable them to be loaded by wider variety of processes, - # executables are more likely to need every capability they have been assigned or they won't function correctly. - print ("Patching: Executable with capabilities incompatible with self-signing detected: \"$binaryBaseName\". (Incompatible capabilities: \"$capsToDropStr\".) Reducing capabilities is only supported for libraries.\n"); - print ("Patching: Please use a proper developer certificate for signing this package.\n"); - exit(1); + if ($justCheck) { + print ("$msgPrefix The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package: \"$capsToDropStr\".\n\n"); + $checkFailed = true; } else { - print ("Patching: The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package and will be removed: \"$capsToDropStr\".\n"); - $executeNeeded = 1; + if ($binaryBaseName =~ /\.exe$/) { + # While libraries often have capabilities they do not themselves need just to enable them to be loaded by wider variety of processes, + # executables are more likely to need every capability they have been assigned or they won't function correctly. + print ("$msgPrefix Executable with capabilities incompatible with self-signing detected: \"$binaryBaseName\". (Incompatible capabilities: \"$capsToDropStr\".) Reducing capabilities is only supported for libraries.\n"); + $checkFailed = true; + } else { + print ("$msgPrefix The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package and will be removed: \"$capsToDropStr\".\n"); + $executeNeeded = true; + } } } $commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesToSet)); @@ -337,16 +327,37 @@ if (@ARGV) # Actually execute the elftran command to set the capabilities. print ("\n"); system ("$commandToExecute > $nullDevice"); + $somethingPatched = true; } ## Create another command line to check that the set capabilities are correct. #$commandToExecute = "elftran -dump s ".$binaryPath; } + if ($checkFailed) { + print ("\n"); + if ($justCheck) { + print ("$msgPrefix The package is not compatible with self-signing.\n"); + } else { + print ("$msgPrefix Unable to patch the package for self-singing.\n"); + } + print ("Use a proper developer certificate for signing this package.\n\n"); + exit(1); + } + + if ($justCheck) { + print ("Package is compatible with self-signing.\n"); + } else { + if ($somethingPatched) { + print ("NOTE: A patched package may not work as expected due to reduced capabilities and other modifications,\n"); + print (" so it should not be used for any kind of Symbian signing or distribution!\n"); + print (" Use a proper certificate to avoid the need to patch the package.\n"); + } else { + print ("No patching was required!\n"); + } + } print ("\n"); - print ("NOTE: A patched package may not work as expected due to reduced capabilities and other modifications,\n"); - print (" so it should not be used for any kind of Symbian signing or distribution!\n"); - print (" Use a proper certificate to avoid the need to patch the package.\n"); - print ("\n"); + } else { + Usage(); } } else diff --git a/doc/src/platforms/symbian-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc index 7bc5303..9da94c4 100644 --- a/doc/src/platforms/symbian-introduction.qdoc +++ b/doc/src/platforms/symbian-introduction.qdoc @@ -222,6 +222,7 @@ \row \o -s \o Generates stub sis for ROM. \row \o -n \o Specifies the final sis name. \row \o -g \o Treat gcce platform as armv5. + \row \o -d \o Skip automatic patching of the package when default certificate is used. \endtable Execute the \c{createpackage.pl} script without any -- cgit v0.12 From a51a29e9f7b63fcefcdf9e9069e219726db1250e Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 25 Nov 2010 15:46:43 +0100 Subject: Fix possible artifacts under glyphs in texture glyph cache We would disregard the first glyph in each line when calculating the required height of the line in the glyph cache. If the first glyph was taller than any of the other glyphs in the same line, the glyph drawn underneath it in the cache could potentially overlap it, and you would see it as dots or lines underneath the glyph in the output. Task-number: QTBUG-14806 Reviewed-by: Jiang Jiang --- src/gui/painting/qtextureglyphcache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp index 2daa1f0..eab9cf6 100644 --- a/src/gui/painting/qtextureglyphcache.cpp +++ b/src/gui/painting/qtextureglyphcache.cpp @@ -143,7 +143,7 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const // no room on the current line, start new glyph strip m_cx = 0; m_cy += m_currentRowHeight + paddingDoubled; - m_currentRowHeight = 0; // New row + m_currentRowHeight = c.h + margin * 2; // New row } } if (m_cy + c.h > m_h) { -- cgit v0.12 From 6dc29b3a2f93936aa5a3eecb336631485c5195b8 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 26 Nov 2010 11:21:23 +1000 Subject: More detail when the process crashes in tst_qmlvisual. --- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 18fbfca..7fee24f 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -146,10 +146,11 @@ void tst_qmlvisual::visual() #endif QProcess p; + p.setProcessChannelMode(QProcess::MergedChannels); p.start(qmlruntime, arguments); - QVERIFY(p.waitForFinished()); + QVERIFY2(p.waitForFinished(), p.readAllStandardOutput().data()); if (p.exitCode() != 0) - qDebug() << p.readAllStandardError(); + qDebug() << p.readAllStandardOutput(); QCOMPARE(p.exitStatus(), QProcess::NormalExit); QCOMPARE(p.exitCode(), 0); } -- cgit v0.12 From 9ccaecf7825a782bfd29ff6c4118d933cc614726 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 26 Nov 2010 11:41:53 +1000 Subject: Slightly improved tst_qmlvisual output --- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 7fee24f..ef0d4dc 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -146,11 +146,12 @@ void tst_qmlvisual::visual() #endif QProcess p; - p.setProcessChannelMode(QProcess::MergedChannels); p.start(qmlruntime, arguments); - QVERIFY2(p.waitForFinished(), p.readAllStandardOutput().data()); + bool finished = p.waitForFinished(); + QByteArray output = p.readAllStandardOutput() + p.readAllStandardError(); + QVERIFY2(finished, output.data()); if (p.exitCode() != 0) - qDebug() << p.readAllStandardOutput(); + qDebug() << output; QCOMPARE(p.exitStatus(), QProcess::NormalExit); QCOMPARE(p.exitCode(), 0); } -- cgit v0.12 From 6ebdd5eab816f357dfc3addcf2f1e8ef0ad4a9e4 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Fri, 26 Nov 2010 12:45:44 +1000 Subject: Fix type punning warnings from gcc Also clean up some code uglyness in the process --- src/declarative/qml/qdeclarativedata_p.h | 13 +++----- src/declarative/qml/qdeclarativeengine.cpp | 53 +++++++++++++++++------------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/declarative/qml/qdeclarativedata_p.h b/src/declarative/qml/qdeclarativedata_p.h index def4188..4767169 100644 --- a/src/declarative/qml/qdeclarativedata_p.h +++ b/src/declarative/qml/qdeclarativedata_p.h @@ -65,6 +65,7 @@ class QDeclarativeContext; class QDeclarativePropertyCache; class QDeclarativeContextData; class QDeclarativeNotifier; +class QDeclarativeDataExtended; // This class is structured in such a way, that simply zero'ing it is the // default state for elemental object allocations. This is crucial in the // workings of the QDeclarativeInstruction::CreateSimpleObject instruction. @@ -150,17 +151,13 @@ public: } } + bool hasExtendedData() const { return extendedData != 0; } QDeclarativeNotifier *objectNameNotifier() const; QHash *attachedProperties() const; - struct ExtendedData { - ExtendedData(); - ~ExtendedData(); - - QHash attachedProperties; - void *objectNameNotifier; - }; - mutable ExtendedData *extendedData; +private: + // For objectNameNotifier and attachedProperties + mutable QDeclarativeDataExtended *extendedData; }; template diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 808ba68..1160ed8 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -957,7 +957,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre if (!data) return 0; // Attached properties are only on objects created by QML - QObject *rv = data->extendedData?data->attachedProperties()->value(id):0; + QObject *rv = data->hasExtendedData()?data->attachedProperties()->value(id):0; if (rv || !create) return rv; @@ -985,6 +985,35 @@ QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object, return qmlAttachedPropertiesObjectById(*idCache, object, create); } +class QDeclarativeDataExtended { +public: + QDeclarativeDataExtended(); + ~QDeclarativeDataExtended(); + + QHash attachedProperties; + QDeclarativeNotifier objectNameNotifier; +}; + +QDeclarativeDataExtended::QDeclarativeDataExtended() +{ +} + +QDeclarativeDataExtended::~QDeclarativeDataExtended() +{ +} + +QDeclarativeNotifier *QDeclarativeData::objectNameNotifier() const +{ + if (!extendedData) extendedData = new QDeclarativeDataExtended; + return &extendedData->objectNameNotifier; +} + +QHash *QDeclarativeData::attachedProperties() const +{ + if (!extendedData) extendedData = new QDeclarativeDataExtended; + return &extendedData->attachedProperties; +} + void QDeclarativeData::destroyed(QObject *object) { if (deferredComponent) @@ -1075,28 +1104,6 @@ void QDeclarativeData::setBindingBit(QObject *obj, int bit) bindingBits[bit / 32] |= (1 << (bit % 32)); } -QDeclarativeData::ExtendedData::ExtendedData() -: objectNameNotifier(0) -{ -} - -QDeclarativeData::ExtendedData::~ExtendedData() -{ - ((QDeclarativeNotifier *)&objectNameNotifier)->~QDeclarativeNotifier(); -} - -QDeclarativeNotifier *QDeclarativeData::objectNameNotifier() const -{ - if (!extendedData) extendedData = new ExtendedData; - return (QDeclarativeNotifier *)&extendedData->objectNameNotifier; -} - -QHash *QDeclarativeData::attachedProperties() const -{ - if (!extendedData) extendedData = new ExtendedData; - return &extendedData->attachedProperties; -} - /*! Creates a QScriptValue allowing you to use \a object in QML script. \a engine is the QDeclarativeEngine it is to be created in. -- cgit v0.12 From fa8d0838dfc40ed269b30b9872cfdc2d2b16b64a Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 26 Nov 2010 13:39:44 +1000 Subject: Repaint when text color changes Task-number: QTBUG-15623 Reviewed-by: Yann Bodson --- src/declarative/graphicsitems/qdeclarativetext.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 82c444e..303b21c 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -436,12 +436,13 @@ void QDeclarativeTextPrivate::invalidateImageCache() { Q_Q(QDeclarativeText); - if (imageCacheDirty) - return; - - imageCacheDirty = true; - imageCache = QPixmap(); + if(cacheAllTextAsImage || style != QDeclarativeText::Normal){//If actually using the image cache + if (imageCacheDirty) + return; + imageCacheDirty = true; + imageCache = QPixmap(); + } if (q->isComponentComplete()) q->update(); } -- cgit v0.12 From 6578492dd0badc03d2f1dcf094e426559f67308b Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Fri, 26 Nov 2010 15:40:02 +1000 Subject: Add missing newline to configure.exe output. Reviewed-by: Trust Me --- tools/configure/configureapp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 9443fee..f4fd7c6 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3417,7 +3417,7 @@ void Configure::displayConfig() QString webkit = dictionary[ "WEBKIT" ]; if (webkit == "debug") webkit = "yes (debug)"; - cout << "WebKit support.............." << webkit; + cout << "WebKit support.............." << webkit << endl; } cout << "Declarative support........." << dictionary[ "DECLARATIVE" ] << endl; cout << "Declarative debugging......." << dictionary[ "DECLARATIVE_DEBUG" ] << endl; -- cgit v0.12 From 3fe96820ea6830cb76793602f9f51fb961e70976 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Fri, 26 Nov 2010 08:41:37 +0100 Subject: Doc: Removed two warnings from QDirIterator docs Task-number: QTBUG-15492 --- src/corelib/io/qdiriterator.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp index fd4b9c1..dbb333f 100644 --- a/src/corelib/io/qdiriterator.cpp +++ b/src/corelib/io/qdiriterator.cpp @@ -389,9 +389,6 @@ QDirIterator::QDirIterator(const QDir &dir, IteratorFlags flags) \note To list symlinks that point to non existing files, QDir::System must be passed to the flags. - \warning This constructor expects \a flags to be left at its default value. Use - the constructors that do not take the \a filters argument instead. - \sa hasNext(), next(), IteratorFlags */ QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorFlags flags) @@ -429,9 +426,6 @@ QDirIterator::QDirIterator(const QString &path, IteratorFlags flags) \note To list symlinks that point to non existing files, QDir::System must be passed to the flags. - \warning This constructor expects \c flags to be left at its default value. Use the - constructors that do not take the \a filters argument instead. - \sa hasNext(), next(), IteratorFlags */ QDirIterator::QDirIterator(const QString &path, const QStringList &nameFilters, -- cgit v0.12 From 5f70c3d9004765f8f86e3472cf59cfa7677f9163 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Fri, 26 Nov 2010 09:29:26 +0100 Subject: Doc:Fix paths in styleplugin/echoplugin .pro files Task-number: QTBUG-14169 --- examples/tools/echoplugin/echowindow/echowindow.pro | 4 ++-- examples/tools/styleplugin/plugin/plugin.pro | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/tools/echoplugin/echowindow/echowindow.pro b/examples/tools/echoplugin/echowindow/echowindow.pro index bdf8c41..d56961c 100644 --- a/examples/tools/echoplugin/echowindow/echowindow.pro +++ b/examples/tools/echoplugin/echowindow/echowindow.pro @@ -5,8 +5,8 @@ SOURCES = echowindow.cpp \ TARGET = echoplugin win32 { - debug:DESTDIR = ../debug/ - release:DESTDIR = ../release/ + CONFIG(debug, release|debug):DESTDIR = ../debug/ + CONFIG(release, release|debug):DESTDIR = ../release/ } else { DESTDIR = ../ } diff --git a/examples/tools/styleplugin/plugin/plugin.pro b/examples/tools/styleplugin/plugin/plugin.pro index 7cb0c97..54e266c 100644 --- a/examples/tools/styleplugin/plugin/plugin.pro +++ b/examples/tools/styleplugin/plugin/plugin.pro @@ -8,8 +8,8 @@ SOURCES = simplestyle.cpp \ TARGET = simplestyleplugin #! [0] win32 { - debug:DESTDIR = ../debug/styles/ - release:DESTDIR = ../release/styles/ + CONFIG(debug, release|debug):DESTDIR = ../debug/styles/ + CONFIG(release, release|debug):DESTDIR = ../release/styles/ } else { DESTDIR = ../styles/ } -- cgit v0.12 From 320c682c3a76c3a59ebe102ba5aad3cd1eb4a13e Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Fri, 26 Nov 2010 10:19:37 +0100 Subject: Revert "Fix a missing error-signal when a server is shut down while downloading" This reverts commit cbf7a7782f465846455a5fd5df339ebde31a5521. This commit caused autotest regressions in tst_qdeclarativeloader and tst_qdeclarativetext; reverting it for now until this has been resolved. --- src/network/access/qhttpnetworkconnectionchannel.cpp | 18 +----------------- src/network/access/qhttpnetworkconnectionchannel_p.h | 1 - 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index a47e619..c8caad4 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -66,7 +66,6 @@ QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel() , bytesTotal(0) , resendCurrent(false) , lastStatus(0) - , unhandledError(QNetworkReply::NoError) , pendingEncrypt(false) , reconnectAttempts(2) , authMethod(QAuthenticatorPrivate::None) @@ -643,21 +642,7 @@ void QHttpNetworkConnectionChannel::allDone() // slot connected to it. The socket will not fire readyRead signal, if we are already // in the slot connected to readyRead if (emitFinished) - { - // Check whether _q_error was invoked previously and if it left a socket - // error unhandled. - if(unhandledError != QNetworkReply::NoError) { - QString errorString = connection->d_func()->errorDetail(unhandledError, socket, socket->errorString()); - qRegisterMetaType("QNetworkReply::NetworkError"); - QMetaObject::invokeMethod(reply, "finishedWithError", - Qt::QueuedConnection, - Q_ARG(QNetworkReply::NetworkError, unhandledError), - Q_ARG(QString, errorString)); - unhandledError = QNetworkReply::NoError; // Reset the value - } else { - QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); - } - } + QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); // reset the reconnection attempts after we receive a complete reply. // in case of failures, each channel will attempt two reconnects before emitting error. reconnectAttempts = 2; @@ -979,7 +964,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket errorCode = QNetworkReply::RemoteHostClosedError; } } else { - unhandledError = QNetworkReply::RemoteHostClosedError; return; } break; diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index e1d42fb..fd18042 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -105,7 +105,6 @@ public: qint64 bytesTotal; bool resendCurrent; int lastStatus; // last status received on this channel - QNetworkReply::NetworkError unhandledError; // Stored code of an unhandled error. bool pendingEncrypt; // for https (send after encrypted) int reconnectAttempts; // maximum 2 reconnection attempts QAuthenticatorPrivate::Method authMethod; -- cgit v0.12 From 1e7b4e396ec3bacc1a769208b990c5e0450f0d3a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 26 Nov 2010 10:41:38 +0100 Subject: Declarative: Fix compiler warnings (Linux/g++) Reviewed-by: Kai Koehne --- src/declarative/debugger/qdeclarativedebugservice.cpp | 8 +++++--- src/declarative/qml/qdeclarativeengine.cpp | 3 ++- src/declarative/qml/qdeclarativepropertycache.cpp | 1 + src/declarative/util/qdeclarativepixmapcache.cpp | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp index 8c86ae8..41a6962 100644 --- a/src/declarative/debugger/qdeclarativedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativedebugservice.cpp @@ -226,9 +226,11 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance() server->waitForConnection(); } } else { - qWarning(QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". " - "Format is -qmljsdebugger=port:[,block]").arg( - appD->qmljsDebugArgumentsString()).toAscii().constData()); + const QString message = + QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". " + "Format is -qmljsdebugger=port:[,block]"). + arg(appD->qmljsDebugArgumentsString()); + qWarning("%s", qPrintable(message)); } } #endif diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 808ba68..19dfcea 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -2225,8 +2225,9 @@ bool QDeclarative_isFileCaseCorrect(const QString &fileName) if (a != c) return false; } +#else + Q_UNUSED(fileName) #endif - return true; } diff --git a/src/declarative/qml/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp index 0adcdbd..af3d53f 100644 --- a/src/declarative/qml/qdeclarativepropertycache.cpp +++ b/src/declarative/qml/qdeclarativepropertycache.cpp @@ -321,6 +321,7 @@ void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaOb Q_ASSERT(engine); Q_ASSERT(metaObject); QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine); + Q_UNUSED(enginePriv) clear(); diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index a07b1bb..380d9bc 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -684,7 +684,7 @@ void QDeclarativePixmapStore::timerEvent(QTimerEvent *) } QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativePixmapData *d) -: data(d), reader(0), loading(false), redirectCount(0), requestSize(d->requestSize) +: data(d), reader(0), requestSize(d->requestSize), loading(false), redirectCount(0) { if (finishedIndex == -1) { finishedIndex = QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()"); -- cgit v0.12 From 2d7464febd762203a9bbfc6e202913eb93253f98 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 26 Nov 2010 10:45:17 +0100 Subject: Fix whitespace in previous 1e7b4e396ec3bacc1a769208b990c5e0450f0d3a --- src/declarative/debugger/qdeclarativedebugservice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp index 41a6962..849df73 100644 --- a/src/declarative/debugger/qdeclarativedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativedebugservice.cpp @@ -226,7 +226,7 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance() server->waitForConnection(); } } else { - const QString message = + const QString message = QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". " "Format is -qmljsdebugger=port:[,block]"). arg(appD->qmljsDebugArgumentsString()); -- cgit v0.12 From 85f42777111060037476895ed08ded513d44a048 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 22 Oct 2010 14:13:56 +0200 Subject: Doc: fix typo Reviewed-by: mauricek --- src/gui/itemviews/qabstractitemview.cpp | 4 ++-- src/gui/itemviews/qstandarditemmodel.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index b464330..9127898 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -823,7 +823,7 @@ QVariant QAbstractItemView::inputMethodQuery(Qt::InputMethodQuery query) const deleted. QAbstractItemView does not take ownership of \a delegate. \note If a delegate has been assigned to both a row and a column, the row - delegate (i.e., this delegate) will take presedence and manage the + delegate (i.e., this delegate) will take precedence and manage the intersecting cell index. \warning You should not share the same instance of a delegate between views. @@ -881,7 +881,7 @@ QAbstractItemDelegate *QAbstractItemView::itemDelegateForRow(int row) const deleted. QAbstractItemView does not take ownership of \a delegate. \note If a delegate has been assigned to both a row and a column, the row - delegate will take presedence and manage the intersecting cell index. + delegate will take precedence and manage the intersecting cell index. \warning You should not share the same instance of a delegate between views. Doing so can cause incorrect or unintuitive editing behavior since each diff --git a/src/gui/itemviews/qstandarditemmodel.cpp b/src/gui/itemviews/qstandarditemmodel.cpp index 9d52c78..4f1d77b 100644 --- a/src/gui/itemviews/qstandarditemmodel.cpp +++ b/src/gui/itemviews/qstandarditemmodel.cpp @@ -1130,7 +1130,7 @@ Qt::ItemFlags QStandardItem::flags() const meaning that the user can interact with the item; if \a enabled is false, the user cannot interact with the item. - This flag takes presedence over the other item flags; e.g. if an item is not + This flag takes precedence over the other item flags; e.g. if an item is not enabled, it cannot be selected by the user, even if the Qt::ItemIsSelectable flag has been set. -- cgit v0.12 From 0bf8f70f85a24ab2864775bdd38f5ced43a7d4de Mon Sep 17 00:00:00 2001 From: Jonathan Liu Date: Fri, 26 Nov 2010 10:20:56 +0100 Subject: QLocalSocket/Win: do not emit error() when no error actually occurred This fixes a regression in 4d0c4b9f09b35d707d437611519d0024f6f87a8c. Previously the error string was set if the error is not ERROR_PIPE_NOT_CONNECTED but the commit changed this behaviour to set the error string if it is ERROR_PIPE_NOT_CONNECTED. Task-number: QTBUG-13646 Merge-request: 941 Reviewed-by: Joerg Bornemann --- src/network/socket/qlocalsocket_win.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index 4907f2c..6c3b769 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -322,9 +322,9 @@ bool QLocalSocketPrivate::completeAsyncRead() // buffer. We will read the remaining data in the next call. break; case ERROR_PIPE_NOT_CONNECTED: - setErrorString(QLatin1String("QLocalSocketPrivate::completeAsyncRead")); - // fall through + return false; default: + setErrorString(QLatin1String("QLocalSocketPrivate::completeAsyncRead")); return false; } } -- cgit v0.12 From 34d365bceae861c2322d09149f78476723dcb0c1 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 26 Nov 2010 12:59:57 +0200 Subject: Remove unused variable Variable currentClause is no longer used for anything, so removed its declaration. Reviewed-by: TrustMe --- qmake/generators/symbian/symmake_sbsv2.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index c4b51f2..c219f1d 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -377,7 +377,6 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << qmakeCmd << endl; t << endl; - QString currentClause; QString locFileDep = generateLocFileTarget(t, qmakeCmd); t << "debug: " << locFileDep << BLD_INF_FILENAME << endl; -- cgit v0.12 From a061f032bc36f03d31ba39d2565857d1a14d9112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 26 Nov 2010 12:45:08 +0100 Subject: Fixed OpenGL state getting out of sync. Forward begin / endNativePainting from the emulation paint engine. Task-number: QTBUG-15498 Reviewed-by: Gunnar Sletta --- src/gui/painting/qemulationpaintengine.cpp | 9 +++++++++ src/gui/painting/qemulationpaintengine_p.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/gui/painting/qemulationpaintengine.cpp b/src/gui/painting/qemulationpaintengine.cpp index 0510b10..714d5de 100644 --- a/src/gui/painting/qemulationpaintengine.cpp +++ b/src/gui/painting/qemulationpaintengine.cpp @@ -268,6 +268,15 @@ void QEmulationPaintEngine::setState(QPainterState *s) real_engine->setState(s); } +void QEmulationPaintEngine::beginNativePainting() +{ + real_engine->beginNativePainting(); +} + +void QEmulationPaintEngine::endNativePainting() +{ + real_engine->endNativePainting(); +} void QEmulationPaintEngine::fillBGRect(const QRectF &r) { diff --git a/src/gui/painting/qemulationpaintengine_p.h b/src/gui/painting/qemulationpaintengine_p.h index 5835f10..e283645 100644 --- a/src/gui/painting/qemulationpaintengine_p.h +++ b/src/gui/painting/qemulationpaintengine_p.h @@ -93,6 +93,9 @@ public: virtual void setState(QPainterState *s); + virtual void beginNativePainting(); + virtual void endNativePainting(); + virtual uint flags() const {return QPaintEngineEx::IsEmulationEngine | QPaintEngineEx::DoNotEmulate;} inline QPainterState *state() { return (QPainterState *)QPaintEngine::state; } -- cgit v0.12 From fe17f36823d0b2374e3ec7badb4c2ed2c938dba8 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 26 Nov 2010 15:05:09 +0200 Subject: Fix minor memory leak QProcessPrivate::startDetached() in qprocess_symbian.cpp was leaking RProcess object. Reviewed-by: Janne Koskinen --- src/corelib/io/qprocess_symbian.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/corelib/io/qprocess_symbian.cpp b/src/corelib/io/qprocess_symbian.cpp index 003e781..5b283a5 100644 --- a/src/corelib/io/qprocess_symbian.cpp +++ b/src/corelib/io/qprocess_symbian.cpp @@ -1050,6 +1050,7 @@ bool QProcessPrivate::startDetached(const QString &program, const QStringList &a newProc->Resume(); newProc->Close(); + delete newProc; return true; } -- cgit v0.12 From 3d442b86ae59b07bd0064e3a3ca9fc613545d3f3 Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:06 +0100 Subject: QKqueueFileSystemWatcherEngine: Use EV_CLEAR instead of EV_ONESHOT. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Using EV_ONESHOT and re-enabling the kevent after emitting the signal allows for a window in which file system changes can go undetected. By using EV_CLEAR instead the kevent can stay enabled. Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 378ad20..45aea73 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -157,7 +157,7 @@ QStringList QKqueueFileSystemWatcherEngine::addPaths(const QStringList &paths, EV_SET(&kev, fd, EVFILT_VNODE, - EV_ADD | EV_ENABLE | EV_ONESHOT, + EV_ADD | EV_ENABLE | EV_CLEAR, NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE, 0, 0); @@ -315,24 +315,12 @@ void QKqueueFileSystemWatcherEngine::run() else emit fileChanged(path, true); } else { - DEBUG() << path << "changed, re-enabling watch"; + DEBUG() << path << "changed"; if (id < 0) emit directoryChanged(path, false); else emit fileChanged(path, false); - - // renable the watch - EV_SET(&kev, - fd, - EVFILT_VNODE, - EV_ADD | EV_ENABLE | EV_ONESHOT, - NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE, - 0, - 0); - if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) { - perror("QKqueueFileSystemWatcherEngine::processKqueueEvents: kevent EV_ADD"); - } } } -- cgit v0.12 From 42e861407a9977d3fa8daae5abe54e98ba6b05da Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:07 +0100 Subject: QKqueueFileSystemWatcherEngine: Deleting kevent is handled by close(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 45aea73..f66231a 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -203,19 +203,7 @@ QStringList QKqueueFileSystemWatcherEngine::removePaths(const QStringList &paths if (x.isEmpty() || x != path) continue; - int fd = id < 0 ? -id : id; - struct kevent kev; - EV_SET(&kev, - fd, - EVFILT_VNODE, - EV_DELETE, - NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE, - 0, - 0); - if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) { - perror("QKqueueFileSystemWatcherEngine::removeWatch: kevent"); - } - ::close(fd); + ::close(id < 0 ? -id : id); it.remove(); if (id < 0) -- cgit v0.12 From 4ff80e53a306b1727b78b49e2de6fdafd1fb5ada Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:08 +0100 Subject: QKqueueFileSystemWatcherEngine: Handle kevent(2) returning EINTR. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The worker thread exits whenever the kevent call returns an error, but in the case of EINTR (interrupted by signal) it should just call kevent again. Otherwise for instance, attaching a debugger to the process causes the worker thread to exit because of the SIGSTOP it receives. Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index f66231a..4d15519 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -234,9 +234,10 @@ void QKqueueFileSystemWatcherEngine::run() static const struct timespec ZeroTimeout = { 0, 0 }; forever { + int r; struct kevent kev; DEBUG() << "QKqueueFileSystemWatcherEngine: waiting for kevents..."; - int r = kevent(kqfd, 0, 0, &kev, 1, 0); + EINTR_LOOP(r, kevent(kqfd, 0, 0, &kev, 1, 0)); if (r < 0) { perror("QKqueueFileSystemWatcherEngine: error during kevent wait"); return; -- cgit v0.12 From 03c82dc0d4b4bbbe17e9d91bef6a112d512ca002 Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:09 +0100 Subject: QKqueueFileSystemWatcherEngine: Unlock mutex before calling write(2). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calls to write(2) potentially block, so make sure the application thread unlocks the mutex before it writes to the pipe between itself and the worker thread, so the latter can continue to process events and eventually unblock the write call (if needed) by emptying the pipe. Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 134 ++++++++++++++------------- 1 file changed, 69 insertions(+), 65 deletions(-) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 4d15519..8fba091 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -117,67 +117,69 @@ QStringList QKqueueFileSystemWatcherEngine::addPaths(const QStringList &paths, QStringList *files, QStringList *directories) { - QMutexLocker locker(&mutex); - QStringList p = paths; - QMutableListIterator it(p); - while (it.hasNext()) { - QString path = it.next(); - int fd; + { + QMutexLocker locker(&mutex); + + QMutableListIterator it(p); + while (it.hasNext()) { + QString path = it.next(); + int fd; #if defined(O_EVTONLY) - fd = qt_safe_open(QFile::encodeName(path), O_EVTONLY); + fd = qt_safe_open(QFile::encodeName(path), O_EVTONLY); #else - fd = qt_safe_open(QFile::encodeName(path), O_RDONLY); + fd = qt_safe_open(QFile::encodeName(path), O_RDONLY); #endif - if (fd == -1) { - perror("QKqueueFileSystemWatcherEngine::addPaths: open"); - continue; - } + if (fd == -1) { + perror("QKqueueFileSystemWatcherEngine::addPaths: open"); + continue; + } - QT_STATBUF st; - if (QT_FSTAT(fd, &st) == -1) { - perror("QKqueueFileSystemWatcherEngine::addPaths: fstat"); - ::close(fd); - continue; - } - int id = (S_ISDIR(st.st_mode)) ? -fd : fd; - if (id < 0) { - if (directories->contains(path)) { + QT_STATBUF st; + if (QT_FSTAT(fd, &st) == -1) { + perror("QKqueueFileSystemWatcherEngine::addPaths: fstat"); ::close(fd); continue; } - } else { - if (files->contains(path)) { + int id = (S_ISDIR(st.st_mode)) ? -fd : fd; + if (id < 0) { + if (directories->contains(path)) { + ::close(fd); + continue; + } + } else { + if (files->contains(path)) { + ::close(fd); + continue; + } + } + + struct kevent kev; + EV_SET(&kev, + fd, + EVFILT_VNODE, + EV_ADD | EV_ENABLE | EV_CLEAR, + NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE, + 0, + 0); + if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) { + perror("QKqueueFileSystemWatcherEngine::addPaths: kevent"); ::close(fd); continue; } - } - struct kevent kev; - EV_SET(&kev, - fd, - EVFILT_VNODE, - EV_ADD | EV_ENABLE | EV_CLEAR, - NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE, - 0, - 0); - if (kevent(kqfd, &kev, 1, 0, 0, 0) == -1) { - perror("QKqueueFileSystemWatcherEngine::addPaths: kevent"); - ::close(fd); - continue; - } + it.remove(); + if (id < 0) { + DEBUG() << "QKqueueFileSystemWatcherEngine: added directory path" << path; + directories->append(path); + } else { + DEBUG() << "QKqueueFileSystemWatcherEngine: added file path" << path; + files->append(path); + } - it.remove(); - if (id < 0) { - DEBUG() << "QKqueueFileSystemWatcherEngine: added directory path" << path; - directories->append(path); - } else { - DEBUG() << "QKqueueFileSystemWatcherEngine: added file path" << path; - files->append(path); + pathToID.insert(path, id); + idToPath.insert(id, path); } - - pathToID.insert(path, id); - idToPath.insert(id, path); } if (!isRunning()) @@ -192,31 +194,33 @@ QStringList QKqueueFileSystemWatcherEngine::removePaths(const QStringList &paths QStringList *files, QStringList *directories) { - QMutexLocker locker(&mutex); - + bool isEmpty; QStringList p = paths; - QMutableListIterator it(p); - while (it.hasNext()) { - QString path = it.next(); - int id = pathToID.take(path); - QString x = idToPath.take(id); - if (x.isEmpty() || x != path) - continue; + { + QMutexLocker locker(&mutex); - ::close(id < 0 ? -id : id); + QMutableListIterator it(p); + while (it.hasNext()) { + QString path = it.next(); + int id = pathToID.take(path); + QString x = idToPath.take(id); + if (x.isEmpty() || x != path) + continue; + + ::close(id < 0 ? -id : id); - it.remove(); - if (id < 0) - directories->removeAll(path); - else - files->removeAll(path); + it.remove(); + if (id < 0) + directories->removeAll(path); + else + files->removeAll(path); + } + isEmpty = pathToID.isEmpty(); } - if (pathToID.isEmpty()) { + if (isEmpty) { stop(); - locker.unlock(); wait(); - locker.relock(); } else { write(kqpipe[1], "@", 1); } -- cgit v0.12 From e0e9d4ea2cec37243d964a5309be49101d112233 Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:10 +0100 Subject: QKqueueFileSystemWatcherEngine: Unlock mutex between two events. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the worker thread unlock the mutex between processing two events. Otherwise it's possible for the worker thread to block the application thread when many events occur. Also, there's no need to lock the mutex when processing a pipe event. Generally the worker thread should hamper the application thread as little as possible, so only lock the mutex where needed. Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 8fba091..637a961 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -235,8 +235,6 @@ void QKqueueFileSystemWatcherEngine::stop() void QKqueueFileSystemWatcherEngine::run() { - static const struct timespec ZeroTimeout = { 0, 0 }; - forever { int r; struct kevent kev; @@ -245,10 +243,7 @@ void QKqueueFileSystemWatcherEngine::run() if (r < 0) { perror("QKqueueFileSystemWatcherEngine: error during kevent wait"); return; - } - - QMutexLocker locker(&mutex); - do { + } else { int fd = kev.ident; DEBUG() << "QKqueueFileSystemWatcherEngine: processing kevent" << kev.ident << kev.filter; @@ -280,6 +275,8 @@ void QKqueueFileSystemWatcherEngine::run() break; } } else { + QMutexLocker locker(&mutex); + int id = fd; QString path = idToPath.value(id); if (path.isEmpty()) { @@ -288,12 +285,12 @@ void QKqueueFileSystemWatcherEngine::run() path = idToPath.value(id); if (path.isEmpty()) { DEBUG() << "QKqueueFileSystemWatcherEngine: received a kevent for a file we're not watching"; - goto process_next_event; + continue; } } if (kev.filter != EVFILT_VNODE) { DEBUG() << "QKqueueFileSystemWatcherEngine: received a kevent with the wrong filter"; - goto process_next_event; + continue; } if ((kev.fflags & (NOTE_DELETE | NOTE_REVOKE | NOTE_RENAME)) != 0) { @@ -316,11 +313,7 @@ void QKqueueFileSystemWatcherEngine::run() emit fileChanged(path, false); } } - - // are there any more? -process_next_event: - r = kevent(kqfd, 0, 0, &kev, 1, &ZeroTimeout); - } while (r > 0); + } } } -- cgit v0.12 From f7feeee1733b6cb8bfcc157fff1e444068dc290c Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:11 +0100 Subject: QKqueueFileSystemWatcherEngine: Use higher file descriptors. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A file descriptor is used for every path to be monitored, but descriptors below FD_SETSIZE (typically 1024) are precious, for use with select(2). To allow the application (and other parts of Qt) to use select(2), try to duplicate the descriptor returned by open(2) above FD_SETSIZE and close(2) the original. However, only do so when the descriptor table is already fairly large (FD_SETSIZE / 2). This keeps the descriptor table small for applications that use only a few descriptors. While here, also set the close-on-exec flag on the (new) descriptor. Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 637a961..0103abd 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -134,6 +134,14 @@ QStringList QKqueueFileSystemWatcherEngine::addPaths(const QStringList &paths, perror("QKqueueFileSystemWatcherEngine::addPaths: open"); continue; } + if (fd >= (int)FD_SETSIZE / 2 && fd < (int)FD_SETSIZE) { + int fddup = fcntl(fd, F_DUPFD, FD_SETSIZE); + if (fddup != -1) { + ::close(fd); + fd = fddup; + } + } + fcntl(fd, F_SETFD, FD_CLOEXEC); QT_STATBUF st; if (QT_FSTAT(fd, &st) == -1) { -- cgit v0.12 From 0af0682ebbb70635f40dbed64d4cc678ade6bed2 Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:12 +0100 Subject: QPollingFileSystemWatcherEngine: Fix double report of directory change. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The polling engine first retrieves a QFileInfo for a given path, then tests whether it's different from before and if so, stores the new file info and emits a signal. In case path is a directory the test also checks if the list of directory entries has changed. This creates a window between retrieving the file info and the test in which a file can be added/removed from the directory or the directory itself can be removed. In that case the test returns true, because the list of entries has changed, but outdated file info is stored which means that on the next timeout the same change will be reported a second time. Therefore, refresh the file info after the test for changes. Merge-request: 2425 Reviewed-by: João Abecasis --- src/corelib/io/qfilesystemwatcher.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp index 18c3c9f..1e6dcee 100644 --- a/src/corelib/io/qfilesystemwatcher.cpp +++ b/src/corelib/io/qfilesystemwatcher.cpp @@ -228,8 +228,14 @@ void QPollingFileSystemWatcherEngine::timeout() dit.remove(); emit directoryChanged(path, true); } else if (x.value() != fi) { - x.value() = fi; - emit directoryChanged(path, false); + fi.refresh(); + if (!fi.exists()) { + dit.remove(); + emit directoryChanged(path, true); + } else { + x.value() = fi; + emit directoryChanged(path, false); + } } } -- cgit v0.12 From b758e011a6d88448bf4c3db7f27cb4df773fd5e3 Mon Sep 17 00:00:00 2001 From: Tijl Coosemans Date: Fri, 26 Nov 2010 10:11:13 +0100 Subject: tst_QFileSystemWatcher: Don't exit the event loop on first signal. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sometimes tests can produce more than one signal and other times more than one signal would be an error. In order to test this the event loop should run long enough and not quit on the first signal. This is especially important on multicore systems where the application and worker threads run on different CPUs. Signals emitted by the worker thread are then almost immediately processed by the application thread. Merge-request: 2425 Reviewed-by: João Abecasis --- tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index a26e34d..3ed93fa 100644 --- a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -139,10 +139,6 @@ void tst_QFileSystemWatcher::basicTest() QSignalSpy changedSpy(&watcher, SIGNAL(fileChanged(const QString &))); QEventLoop eventLoop; - connect(&watcher, - SIGNAL(fileChanged(const QString &)), - &eventLoop, - SLOT(quit())); QTimer timer; connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); @@ -278,10 +274,6 @@ void tst_QFileSystemWatcher::watchDirectory() QSignalSpy changedSpy(&watcher, SIGNAL(directoryChanged(const QString &))); QEventLoop eventLoop; - connect(&watcher, - SIGNAL(directoryChanged(const QString &)), - &eventLoop, - SLOT(quit())); QTimer timer; connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); -- cgit v0.12 From 5784daa662e1ace86e6046bf369e9029d57c32d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Fri, 26 Nov 2010 10:11:14 +0100 Subject: Fix QSettings auto test to use QTRY_VERIFY ... instead of relying on qApp->processEvents. Reviewed-by: Olivier Goffart --- tests/auto/qsettings/tst_qsettings.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tests/auto/qsettings/tst_qsettings.cpp b/tests/auto/qsettings/tst_qsettings.cpp index 0395eff..0813e28 100644 --- a/tests/auto/qsettings/tst_qsettings.cpp +++ b/tests/auto/qsettings/tst_qsettings.cpp @@ -51,6 +51,7 @@ #include #include #include +#include "../../shared/util.h" #if !defined(Q_OS_SYMBIAN) # include @@ -1726,26 +1727,22 @@ void tst_QSettings::testUpdateRequestEvent() settings1.setValue("key1", 1); QVERIFY(QFileInfo("foo").size() == 0); - qApp->processEvents(); - QVERIFY(QFileInfo("foo").size() > 0); + QTRY_VERIFY(QFileInfo("foo").size() > 0); settings1.remove("key1"); QVERIFY(QFileInfo("foo").size() > 0); - qApp->processEvents(); - QVERIFY(QFileInfo("foo").size() == 0); + QTRY_VERIFY(QFileInfo("foo").size() == 0); settings1.setValue("key2", 2); QVERIFY(QFileInfo("foo").size() == 0); - qApp->processEvents(); - QVERIFY(QFileInfo("foo").size() > 0); + QTRY_VERIFY(QFileInfo("foo").size() > 0); settings1.clear(); QVERIFY(QFileInfo("foo").size() > 0); - qApp->processEvents(); - QVERIFY(QFileInfo("foo").size() == 0); + QTRY_VERIFY(QFileInfo("foo").size() == 0); } const int NumIterations = 5; -- cgit v0.12 From 4e6cc34b75fd42d663ced0f3da1c9a9a6950fb6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Fri, 26 Nov 2010 10:11:15 +0100 Subject: QKqueueFileSystemWatcher: don't stop thread that isn't running When removing paths from the watch list, if we end up with an empty watch list, we would send a request to the processing thread to quit. In the case where the watch list was empty to begin with (the paths being removed weren't actually being watched) the request to quit would still be queued. If the processing thread wasn't running (and it shouldn't if there weren't any paths being watched) the request to quit would still be posted but not processed. The next time paths were added and the thread started, the request would be processed and the thread would quit at once. When removing paths from the list, we now check whether the watch list is empty to begin with and exit early without asking the processing thread to quit itself. Task-Number: QTBUG-14435 Reviewed-by: Bradley T. Hughes --- src/corelib/io/qfilesystemwatcher_kqueue.cpp | 2 ++ tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 0103abd..3664396 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -206,6 +206,8 @@ QStringList QKqueueFileSystemWatcherEngine::removePaths(const QStringList &paths QStringList p = paths; { QMutexLocker locker(&mutex); + if (pathToID.isEmpty()) + return p; QMutableListIterator it(p); while (it.hasNext()) { diff --git a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 3ed93fa..1feaced 100644 --- a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -135,6 +135,7 @@ void tst_QFileSystemWatcher::basicTest() // create watcher, forcing it to use a specific backend QFileSystemWatcher watcher; watcher.setObjectName(QLatin1String("_qt_autotest_force_engine_") + backend); + watcher.removePath(testFile.fileName()); watcher.addPath(testFile.fileName()); QSignalSpy changedSpy(&watcher, SIGNAL(fileChanged(const QString &))); -- cgit v0.12 From 86ddcd84dc13618cf27ae899f136d8fd138e4b26 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Fri, 26 Nov 2010 18:07:56 +0100 Subject: QNetworkReply autotest: fix possible crash ... by waiting for the thread to finish. Reviewed-by: Markus Goetz --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 90416f2..9cf61f9 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -4490,6 +4490,7 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous() QVERIFY(reply->isFinished()); // synchronous manager.setProxy(QNetworkProxy()); serverThread.quit(); + serverThread.wait(3000); //qDebug() << reply->error() << reply->errorString(); -- cgit v0.12 From 5e257bd44fa4a76f4c2c573a6c5623802022ff18 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 26 Nov 2010 18:38:55 +0100 Subject: Fix a race condition related to service acquisition. The explanation is in the testcase and in the task. The reentrancy caused some deadlocks, that's why handleMessage() stops processing if the refcount has dropped down to zero. Should also save some CPU cycles at the application shutdown time. Task-number: QTBUG-15651 Reviewed-by: Trust Me --- src/dbus/qdbusconnection_p.h | 13 +++- src/dbus/qdbusintegrator.cpp | 35 +++++++++-- tests/auto/qdbusconnection/tst_qdbusconnection.cpp | 69 ++++++++++++++++++++++ 3 files changed, 108 insertions(+), 9 deletions(-) diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index 1bd00da..67145b8 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -203,6 +203,8 @@ public: void disconnectRelay(const QString &service, const QString &path, const QString &interface, QDBusAbstractInterface *receiver, const char *signal); + void registerService(const QString &serviceName); + void unregisterService(const QString &serviceName); bool handleMessage(const QDBusMessage &msg); void waitForFinished(QDBusPendingCallPrivate *pcall); @@ -247,9 +249,11 @@ public slots: void socketWrite(int); void objectDestroyed(QObject *o); void relaySignal(QObject *obj, const QMetaObject *, int signalId, const QVariantList &args); - void _q_serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); - void registerService(const QString &serviceName); - void unregisterService(const QString &serviceName); + +private slots: + void serviceOwnerChangedNoLock(const QString &name, const QString &oldOwner, const QString &newOwner); + void registerServiceNoLock(const QString &serviceName); + void unregisterServiceNoLock(const QString &serviceName); signals: void serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); @@ -303,6 +307,9 @@ public: QObject *receiver, const char *signal, int minMIdx, bool buildSignature); static DBusHandlerResult messageFilter(DBusConnection *, DBusMessage *, void *); + static bool checkReplyForDelivery(QDBusConnectionPrivate *target, QObject *object, + int idx, const QList &metaTypes, + const QDBusMessage &msg); static QDBusCallDeliveryEvent *prepareReply(QDBusConnectionPrivate *target, QObject *object, int idx, const QList &metaTypes, const QDBusMessage &msg); diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index a5d8ada..1842e5a 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -552,6 +552,9 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) (*(*list)[i])(amsg); } + if (!ref) + return false; + switch (amsg.type()) { case QDBusMessage::SignalMessage: handleSignal(amsg); @@ -713,6 +716,8 @@ static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags, return -1; } +static QDBusCallDeliveryEvent * const DIRECT_DELIVERY = (QDBusCallDeliveryEvent *)1; + QDBusCallDeliveryEvent* QDBusConnectionPrivate::prepareReply(QDBusConnectionPrivate *target, QObject *object, int idx, const QList &metaTypes, @@ -736,6 +741,8 @@ QDBusCallDeliveryEvent* QDBusConnectionPrivate::prepareReply(QDBusConnectionPriv // we can deliver // prepare for the call + if (target == object) + return DIRECT_DELIVERY; return new QDBusCallDeliveryEvent(QDBusConnection(target), idx, target, msg, metaTypes); } @@ -750,6 +757,12 @@ void QDBusConnectionPrivate::activateSignal(const QDBusConnectionPrivate::Signal // Slots can optionally have one final parameter that is a QDBusMessage // Slots receive read-only copies of the message (i.e., pass by value or by const-ref) QDBusCallDeliveryEvent *call = prepareReply(this, hook.obj, hook.midx, hook.params, msg); + if (call == DIRECT_DELIVERY) { + // short-circuit delivery + Q_ASSERT(this == hook.obj); + deliverCall(this, 0, msg, hook.params, hook.midx); + return; + } if (call) postEventToThread(ActivateSignalAction, hook.obj, call); } @@ -1207,11 +1220,11 @@ void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, in q_dbus_message_unref(msg); } -void QDBusConnectionPrivate::_q_serviceOwnerChanged(const QString &name, - const QString &oldOwner, const QString &newOwner) +void QDBusConnectionPrivate::serviceOwnerChangedNoLock(const QString &name, + const QString &oldOwner, const QString &newOwner) { Q_UNUSED(oldOwner); - QDBusWriteLocker locker(UpdateSignalHookOwnerAction, this); +// QDBusWriteLocker locker(UpdateSignalHookOwnerAction, this); WatchedServicesHash::Iterator it = watchedServices.find(name); if (it == watchedServices.end()) return; @@ -1686,11 +1699,11 @@ void QDBusConnectionPrivate::setConnection(DBusConnection *dbc, const QDBusError hook.obj = this; hook.params << QMetaType::Void << QVariant::String; // both functions take a QString as parameter and return void - hook.midx = staticMetaObject.indexOfSlot("registerService(QString)"); + hook.midx = staticMetaObject.indexOfSlot("registerServiceNoLock(QString)"); Q_ASSERT(hook.midx != -1); signalHooks.insert(QLatin1String("NameAcquired:" DBUS_INTERFACE_DBUS), hook); - hook.midx = staticMetaObject.indexOfSlot("unregisterService(QString)"); + hook.midx = staticMetaObject.indexOfSlot("unregisterServiceNoLock(QString)"); Q_ASSERT(hook.midx != -1); signalHooks.insert(QLatin1String("NameLost:" DBUS_INTERFACE_DBUS), hook); @@ -2081,7 +2094,7 @@ void QDBusConnectionPrivate::connectSignal(const QString &key, const SignalHook // we need to watch for this service changing connectSignal(dbusServiceString(), QString(), dbusInterfaceString(), QLatin1String("NameOwnerChanged"), QStringList() << hook.service, QString(), - this, SLOT(_q_serviceOwnerChanged(QString,QString,QString))); + this, SLOT(serviceOwnerChangedNoLock(QString,QString,QString))); data.owner = getNameOwnerNoCache(hook.service); qDBusDebug() << this << "Watching service" << hook.service << "for owner changes (current owner:" << data.owner << ")"; @@ -2342,12 +2355,22 @@ QDBusConnectionPrivate::findMetaObject(const QString &service, const QString &pa void QDBusConnectionPrivate::registerService(const QString &serviceName) { QDBusWriteLocker locker(RegisterServiceAction, this); + registerServiceNoLock(serviceName); +} + +void QDBusConnectionPrivate::registerServiceNoLock(const QString &serviceName) +{ serviceNames.append(serviceName); } void QDBusConnectionPrivate::unregisterService(const QString &serviceName) { QDBusWriteLocker locker(UnregisterServiceAction, this); + unregisterServiceNoLock(serviceName); +} + +void QDBusConnectionPrivate::unregisterServiceNoLock(const QString &serviceName) +{ serviceNames.removeAll(serviceName); } diff --git a/tests/auto/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/qdbusconnection/tst_qdbusconnection.cpp index 599abbd..4494d6f 100644 --- a/tests/auto/qdbusconnection/tst_qdbusconnection.cpp +++ b/tests/auto/qdbusconnection/tst_qdbusconnection.cpp @@ -106,6 +106,8 @@ private slots: void slotsWithLessParameters(); void nestedCallWithCallback(); + void serviceRegistrationRaceCondition(); + public: QString serviceName() const { return "com.trolltech.Qt.Autotests.QDBusConnection"; } bool callMethod(const QDBusConnection &conn, const QString &path); @@ -647,6 +649,73 @@ void tst_QDBusConnection::nestedCallWithCallback() QCOMPARE(signalsReceived, 1); } +class RaceConditionSignalWaiter : public QObject +{ + Q_OBJECT +public: + int count; + RaceConditionSignalWaiter() : count (0) {} + virtual ~RaceConditionSignalWaiter() {} + +public slots: + void countUp() { ++count; emit done(); } +signals: + void done(); +}; + +void tst_QDBusConnection::serviceRegistrationRaceCondition() +{ + // There was a race condition in the updating of list of name owners in + // QtDBus. When the user connects to a signal coming from a given + // service, we must listen for NameOwnerChanged signals relevant to that + // name and update when the owner changes. However, it's possible that we + // receive in one chunk from the server both the NameOwnerChanged signal + // about the service and the signal we're interested in. Since QtDBus + // posts events in order to handle the incoming signals, the update + // happens too late. + + const QString connectionName = "testConnectionName"; + const QString serviceName = "org.example.SecondaryName"; + + QDBusConnection session = QDBusConnection::sessionBus(); + QVERIFY(!session.interface()->isServiceRegistered(serviceName)); + + // connect to the signal: + RaceConditionSignalWaiter recv; + session.connect(serviceName, "/", "com.trolltech.TestCase", "oneSignal", &recv, SLOT(countUp())); + + // create a secondary connection and register a name + QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SessionBus, connectionName); + QDBusConnection::disconnectFromBus(connectionName); // disconnection happens when "connection" goes out of scope + QVERIFY(connection.isConnected()); + QVERIFY(connection.registerService(serviceName)); + + // send a signal + QDBusMessage msg = QDBusMessage::createSignal("/", "com.trolltech.TestCase", "oneSignal"); + connection.send(msg); + + // make a blocking call just to be sure that the buffer was flushed + msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", + "NameHasOwner"); + msg << connectionName; + connection.call(msg); // ignore result + + // Now here's the race condition (more info on task QTBUG-15651): + // the bus has most likely queued three signals for us to work on: + // 1) NameOwnerChanged for the connection we created above + // 2) NameOwnerChanged for the service we registered above + // 3) The "oneSignal" signal we sent + // + // We'll most likely receive all three in one go from the server. We must + // update the owner of serviceName before we start processing the + // "oneSignal" signal. + + QTestEventLoop::instance().connect(&recv, SIGNAL(done()), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + QCOMPARE(recv.count, 1); +} + QString MyObject::path; QTEST_MAIN(tst_QDBusConnection) -- cgit v0.12 From 86ed592bba2a7ef23f5065397144c3915bdbdbd5 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 19:20:25 +0100 Subject: Fix warnings with GCC 4.5: some cases are not part of the enum --- src/gui/painting/qpdf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index ba5d164..bd68d2a 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1390,7 +1390,7 @@ int QPdfBaseEngine::metric(QPaintDevice::PaintDeviceMetric metricType) const void QPdfBaseEngine::setProperty(PrintEnginePropertyKey key, const QVariant &value) { Q_D(QPdfBaseEngine); - switch (key) { + switch (int(key)) { case PPK_CollateCopies: d->collate = value.toBool(); break; @@ -1480,7 +1480,7 @@ QVariant QPdfBaseEngine::property(PrintEnginePropertyKey key) const Q_D(const QPdfBaseEngine); QVariant ret; - switch (key) { + switch (int(key)) { case PPK_CollateCopies: ret = d->collate; break; -- cgit v0.12 From c89ca078ba39780ebe556aff8fff6b92118a0a1d Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 20:52:45 +0100 Subject: Fix "value not in enum" warning with GCC 4.5. QMetaType::Float is not a member of QVariant::Type. --- src/xmlpatterns/data/qatomicvalue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xmlpatterns/data/qatomicvalue.cpp b/src/xmlpatterns/data/qatomicvalue.cpp index ecc78bf..fc4cf2e 100644 --- a/src/xmlpatterns/data/qatomicvalue.cpp +++ b/src/xmlpatterns/data/qatomicvalue.cpp @@ -202,7 +202,7 @@ ItemType::Ptr AtomicValue::qtToXDMType(const QXmlItem &item) Q_ASSERT(item.isAtomicValue()); const QVariant v(item.toAtomicValue()); - switch(v.type()) + switch(int(v.type())) { case QVariant::Char: /* Fallthrough. */ -- cgit v0.12 From 0f49bba82a62546bb53d0a29a05a560fe8f1e293 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 21:11:42 +0100 Subject: Phonon: Fix "value not in enum" warning with GCC 4.5. QMetaType::Float is not a member of QVariant::Type. --- src/3rdparty/phonon/phonon/effectwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty/phonon/phonon/effectwidget.cpp b/src/3rdparty/phonon/phonon/effectwidget.cpp index a2fe50f..edcbe1f 100644 --- a/src/3rdparty/phonon/phonon/effectwidget.cpp +++ b/src/3rdparty/phonon/phonon/effectwidget.cpp @@ -112,7 +112,7 @@ void EffectWidgetPrivate::autogenerateUi() #endif QWidget *control = 0; - switch (para.type()) { + switch (int(para.type())) { case QVariant::String: { QComboBox *cb = new QComboBox(q); -- cgit v0.12 From 2dea30e2b044f3f02727e28ca4ff73036406870b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 21:12:05 +0100 Subject: Phonon: Fix warning on casting from "false" to QFlags. Instead, return Features(); --- src/3rdparty/phonon/phonon/mediacontroller.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/3rdparty/phonon/phonon/mediacontroller.cpp b/src/3rdparty/phonon/phonon/mediacontroller.cpp index 59fd5c7..37af3f7 100644 --- a/src/3rdparty/phonon/phonon/mediacontroller.cpp +++ b/src/3rdparty/phonon/phonon/mediacontroller.cpp @@ -76,9 +76,9 @@ MediaController::~MediaController() MediaController::Features MediaController::supportedFeatures() const { if (!d || !d->media) { - return false; + return Features(); } - IFACE false; + IFACE Features(); Features ret; if (iface->hasInterface(AddonInterface::AngleInterface)) { ret |= Angles; -- cgit v0.12 From 7f63938ab866ec517e46bf1e6bc706e8b7f22d0a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 21:13:02 +0100 Subject: Phonon: Fix unused parameter warning --- src/3rdparty/phonon/phonon/globalconfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty/phonon/phonon/globalconfig.cpp b/src/3rdparty/phonon/phonon/globalconfig.cpp index be751ce..f83ebc4 100644 --- a/src/3rdparty/phonon/phonon/globalconfig.cpp +++ b/src/3rdparty/phonon/phonon/globalconfig.cpp @@ -97,7 +97,7 @@ static void filter(ObjectDescriptionType type, BackendInterface *backendIface, Q static QList sortDevicesByCategoryPriority(const GlobalConfig *config, const QSettingsGroup *backendConfig, ObjectDescriptionType type, Phonon::Category category, QList &defaultList) { - Q_ASSERT(config); + Q_ASSERT(config); Q_UNUSED(config); Q_ASSERT(backendConfig); Q_ASSERT(type == AudioOutputDeviceType || type == AudioCaptureDeviceType); -- cgit v0.12 From 0b26c68a749ab74fe8e72fcbc49d314b9235b16d Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 21:13:05 +0100 Subject: Phonon: Fix use of ASCII casting in the PulseAudio support. --- src/3rdparty/phonon/phonon/pulsesupport.cpp | 146 ++++++++++++++-------------- 1 file changed, 72 insertions(+), 74 deletions(-) diff --git a/src/3rdparty/phonon/phonon/pulsesupport.cpp b/src/3rdparty/phonon/phonon/pulsesupport.cpp index 642843f..b1ba196 100644 --- a/src/3rdparty/phonon/phonon/pulsesupport.cpp +++ b/src/3rdparty/phonon/phonon/pulsesupport.cpp @@ -56,7 +56,7 @@ static int debugLevel() { static int level = -1; if (level < 1) { level = 0; - QString pulseenv = qgetenv("PHONON_PULSEAUDIO_DEBUG"); + QByteArray pulseenv = qgetenv("PHONON_PULSEAUDIO_DEBUG"); int l = pulseenv.toInt(); if (l > 0) level = (l > 2 ? 2 : l); @@ -71,18 +71,18 @@ static void logMessage(const QString &message, int priority, QObject *obj) QString output; if (obj) { // Strip away namespace from className - QString className(obj->metaObject()->className()); + QByteArray className(obj->metaObject()->className()); int nameLength = className.length() - className.lastIndexOf(':') - 1; className = className.right(nameLength); output.sprintf("%s %s (%s %p)", message.toLatin1().constData(), obj->objectName().toLatin1().constData(), - className.toLatin1().constData(), obj); + className.constData(), obj); } else { output = message; } if (priority <= debugLevel()) { - qDebug() << QString("PulseSupport(%1): %2").arg(priority).arg(output); + qDebug() << QString::fromLatin1("PulseSupport(%1): %2").arg(priority).arg(output); } } } @@ -96,7 +96,7 @@ class AudioDevice : pulseName(name), pulseIndex(index) { properties["name"] = desc; - properties["description"] = ""; // We don't have descriptions (well we do, but we use them as the name!) + properties["description"] = QLatin1String(""); // We don't have descriptions (well we do, but we use them as the name!) properties["icon"] = icon; properties["available"] = (index != PA_INVALID_INDEX); properties["isAdvanced"] = false; // Nothing is advanced! @@ -158,8 +158,8 @@ static void createGenericDevices() s_outputDevices.clear(); s_outputDevicePriorities.clear(); index = s_deviceIndexCounter++; - s_outputDeviceIndexes.insert("sink:default", index); - s_outputDevices.insert(index, AudioDevice("sink:default", QObject::tr("PulseAudio Sound Server").toUtf8(), "audio-backend-pulseaudio", 0)); + s_outputDeviceIndexes.insert(QLatin1String("sink:default"), index); + s_outputDevices.insert(index, AudioDevice(QLatin1String("sink:default"), QObject::tr("PulseAudio Sound Server"), QLatin1String("audio-backend-pulseaudio"), 0)); for (int i = Phonon::NoCategory; i <= Phonon::LastCategory; ++i) { Phonon::Category cat = static_cast(i); s_outputDevicePriorities[cat].insert(0, index); @@ -169,8 +169,8 @@ static void createGenericDevices() s_captureDevices.clear(); s_captureDevicePriorities.clear(); index = s_deviceIndexCounter++; - s_captureDeviceIndexes.insert("source:default", index); - s_captureDevices.insert(index, AudioDevice("source:default", QObject::tr("PulseAudio Sound Server").toUtf8(), "audio-backend-pulseaudio", 0)); + s_captureDeviceIndexes.insert(QLatin1String("source:default"), index); + s_captureDevices.insert(index, AudioDevice(QLatin1String("source:default"), QObject::tr("PulseAudio Sound Server"), QLatin1String("audio-backend-pulseaudio"), 0)); for (int i = Phonon::NoCategory; i <= Phonon::LastCategory; ++i) { Phonon::Category cat = static_cast(i); s_captureDevicePriorities[cat].insert(0, index); @@ -397,7 +397,7 @@ void sink_input_cb(pa_context *c, const pa_sink_input_info *i, int eol, void *us if (pa_context_errno(c) == PA_ERR_NOENTITY) return; - logMessage(QString("Sink input callback failure")); + logMessage(QLatin1String("Sink input callback failure")); return; } @@ -409,8 +409,8 @@ void sink_input_cb(pa_context *c, const pa_sink_input_info *i, int eol, void *us // loop through (*i) and extract phonon->streamindex... const char *t; if ((t = pa_proplist_gets(i->proplist, "phonon.streamid"))) { - logMessage(QString("Found PulseAudio stream index %1 for Phonon Output Stream %2").arg(i->index).arg(t)); - s_outputStreamIndexMap[QString(t)] = i->index; + logMessage(QString::fromLatin1("Found PulseAudio stream index %1 for Phonon Output Stream %2").arg(i->index).arg(QLatin1String(t))); + s_outputStreamIndexMap[QLatin1String(t)] = i->index; // Find the sink's phonon index and notify whoever cares... if (PA_INVALID_INDEX != i->sink) { @@ -426,8 +426,8 @@ void sink_input_cb(pa_context *c, const pa_sink_input_info *i, int eol, void *us } if (found) { // OK so we just emit our signal - logMessage(QString("Letting the rest of phonon know about this")); - s_instance->emitUsingDevice(QString(t), device); + logMessage(QLatin1String("Letting the rest of phonon know about this")); + s_instance->emitUsingDevice(QLatin1String(t), device); } } } @@ -441,7 +441,7 @@ void source_output_cb(pa_context *c, const pa_source_output_info *i, int eol, vo if (pa_context_errno(c) == PA_ERR_NOENTITY) return; - logMessage(QString("Source output callback failure")); + logMessage(QLatin1String("Source output callback failure")); return; } @@ -453,8 +453,8 @@ void source_output_cb(pa_context *c, const pa_source_output_info *i, int eol, vo // loop through (*i) and extract phonon->streamindex... const char *t; if ((t = pa_proplist_gets(i->proplist, "phonon.streamid"))) { - logMessage(QString("Found PulseAudio stream index %1 for Phonon Capture Stream %2").arg(i->index).arg(t)); - s_captureStreamIndexMap[QString(t)] = i->index; + logMessage(QString::fromLatin1("Found PulseAudio stream index %1 for Phonon Capture Stream %2").arg(i->index).arg(QLatin1String(t))); + s_captureStreamIndexMap[QLatin1String(t)] = i->index; // Find the source's phonon index and notify whoever cares... if (PA_INVALID_INDEX != i->source) { @@ -470,8 +470,8 @@ void source_output_cb(pa_context *c, const pa_source_output_info *i, int eol, vo } if (found) { // OK so we just emit our signal - logMessage(QString("Letting the rest of phonon know about this")); - s_instance->emitUsingDevice(QString(t), device); + logMessage(QLatin1String("Letting the rest of phonon know about this")); + s_instance->emitUsingDevice(QLatin1String(t), device); } } } @@ -486,17 +486,17 @@ static void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t QString phononid = s_outputStreamIndexMap.key(index); if (!phononid.isEmpty()) { if (s_outputStreamIndexMap.contains(phononid)) { - logMessage(QString("Phonon Output Stream %1 is gone at the PA end. Marking it as invalid in our cache as we may reuse it.").arg(phononid)); + logMessage(QString::fromLatin1("Phonon Output Stream %1 is gone at the PA end. Marking it as invalid in our cache as we may reuse it.").arg(phononid)); s_outputStreamIndexMap[phononid] = PA_INVALID_INDEX; } else { - logMessage(QString("Removing Phonon Output Stream %1 (it's gone!)").arg(phononid)); + logMessage(QString::fromLatin1("Removing Phonon Output Stream %1 (it's gone!)").arg(phononid)); s_outputStreamIndexMap.remove(phononid); } } } else { pa_operation *o; if (!(o = pa_context_get_sink_input_info(c, index, sink_input_cb, NULL))) { - logMessage(QString("pa_context_get_sink_input_info() failed")); + logMessage(QLatin1String("pa_context_get_sink_input_info() failed")); return; } pa_operation_unref(o); @@ -508,17 +508,17 @@ static void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t QString phononid = s_captureStreamIndexMap.key(index); if (!phononid.isEmpty()) { if (s_captureStreamIndexMap.contains(phononid)) { - logMessage(QString("Phonon Capture Stream %1 is gone at the PA end. Marking it as invalid in our cache as we may reuse it.").arg(phononid)); + logMessage(QString::fromLatin1("Phonon Capture Stream %1 is gone at the PA end. Marking it as invalid in our cache as we may reuse it.").arg(phononid)); s_captureStreamIndexMap[phononid] = PA_INVALID_INDEX; } else { - logMessage(QString("Removing Phonon Capture Stream %1 (it's gone!)").arg(phononid)); + logMessage(QString::fromLatin1("Removing Phonon Capture Stream %1 (it's gone!)").arg(phononid)); s_captureStreamIndexMap.remove(phononid); } } } else { pa_operation *o; if (!(o = pa_context_get_source_output_info(c, index, source_output_cb, NULL))) { - logMessage(QString("pa_context_get_sink_input_info() failed")); + logMessage(QLatin1String("pa_context_get_sink_input_info() failed")); return; } pa_operation_unref(o); @@ -528,29 +528,27 @@ static void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t } -static const char* statename(pa_context_state_t state) +static QString statename(pa_context_state_t state) { switch (state) { - case PA_CONTEXT_UNCONNECTED: return "Unconnected"; - case PA_CONTEXT_CONNECTING: return "Connecting"; - case PA_CONTEXT_AUTHORIZING: return "Authorizing"; - case PA_CONTEXT_SETTING_NAME: return "Setting Name"; - case PA_CONTEXT_READY: return "Ready"; - case PA_CONTEXT_FAILED: return "Failed"; - case PA_CONTEXT_TERMINATED: return "Terminated"; + case PA_CONTEXT_UNCONNECTED: return QLatin1String("Unconnected"); + case PA_CONTEXT_CONNECTING: return QLatin1String("Connecting"); + case PA_CONTEXT_AUTHORIZING: return QLatin1String("Authorizing"); + case PA_CONTEXT_SETTING_NAME: return QLatin1String("Setting Name"); + case PA_CONTEXT_READY: return QLatin1String("Ready"); + case PA_CONTEXT_FAILED: return QLatin1String("Failed"); + case PA_CONTEXT_TERMINATED: return QLatin1String("Terminated"); } - static QString unknown; - unknown = QString("Unknown state: %0").arg(state); - return unknown.toAscii().constData(); + return QString::fromLatin1("Unknown state: %0").arg(state); } static void context_state_callback(pa_context *c, void *) { Q_ASSERT(c); - logMessage(QString("context_state_callback %1").arg(statename(pa_context_get_state(c)))); + logMessage(QString::fromLatin1("context_state_callback %1").arg(statename(pa_context_get_state(c)))); pa_context_state_t state = pa_context_get_state(c); if (state == PA_CONTEXT_READY) { // We've connected to PA, so it is active @@ -566,7 +564,7 @@ static void context_state_callback(pa_context *c, void *) if (!(o = pa_context_subscribe(c, (pa_subscription_mask_t) (PA_SUBSCRIPTION_MASK_SINK_INPUT| PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT), NULL, NULL))) { - logMessage(QString("pa_context_subscribe() failed")); + logMessage(QLatin1String("pa_context_subscribe() failed")); return; } pa_operation_unref(o); @@ -639,27 +637,27 @@ PulseSupport::PulseSupport() { #ifdef HAVE_PULSEAUDIO // Initialise our map (is there a better way to do this?) - s_roleCategoryMap["none"] = Phonon::NoCategory; - s_roleCategoryMap["video"] = Phonon::VideoCategory; - s_roleCategoryMap["music"] = Phonon::MusicCategory; - s_roleCategoryMap["game"] = Phonon::GameCategory; - s_roleCategoryMap["event"] = Phonon::NotificationCategory; - s_roleCategoryMap["phone"] = Phonon::CommunicationCategory; - //s_roleCategoryMap["animation"]; // No Mapping - //s_roleCategoryMap["production"]; // No Mapping - s_roleCategoryMap["a11y"] = Phonon::AccessibilityCategory; + s_roleCategoryMap[QLatin1String("none")] = Phonon::NoCategory; + s_roleCategoryMap[QLatin1String("video")] = Phonon::VideoCategory; + s_roleCategoryMap[QLatin1String("music")] = Phonon::MusicCategory; + s_roleCategoryMap[QLatin1String("game")] = Phonon::GameCategory; + s_roleCategoryMap[QLatin1String("event")] = Phonon::NotificationCategory; + s_roleCategoryMap[QLatin1String("phone")] = Phonon::CommunicationCategory; + //s_roleCategoryMap[QLatin1String("animation")]; // No Mapping + //s_roleCategoryMap[QLatin1String("production")]; // No Mapping + s_roleCategoryMap[QLatin1String("a11y")] = Phonon::AccessibilityCategory; // To allow for easy debugging, give an easy way to disable this pulseaudio check - QString pulseenv = qgetenv("PHONON_PULSEAUDIO_DISABLE"); + QByteArray pulseenv = qgetenv("PHONON_PULSEAUDIO_DISABLE"); if (pulseenv.toInt()) { - logMessage("PulseAudio support disabled: PHONON_PULSEAUDIO_DISABLE is set"); + logMessage(QLatin1String("PulseAudio support disabled: PHONON_PULSEAUDIO_DISABLE is set")); return; } // We require a glib event loop - if (QLatin1String(QAbstractEventDispatcher::instance()->metaObject()->className()) - != "QGuiEventDispatcherGlib") { - logMessage("Disabling PulseAudio integration for lack of GLib event loop."); + if (strcmp(QAbstractEventDispatcher::instance()->metaObject()->className(), + "QGuiEventDispatcherGlib") != 0) { + logMessage(QLatin1String("Disabling PulseAudio integration for lack of GLib event loop.")); return; } @@ -667,21 +665,21 @@ PulseSupport::PulseSupport() // use a fully async integrated mainloop method to connect and get proper support. pa_mainloop *p_test_mainloop; if (!(p_test_mainloop = pa_mainloop_new())) { - logMessage("PulseAudio support disabled: Unable to create mainloop"); + logMessage(QLatin1String("PulseAudio support disabled: Unable to create mainloop")); return; } pa_context *p_test_context; if (!(p_test_context = pa_context_new(pa_mainloop_get_api(p_test_mainloop), "libphonon-probe"))) { - logMessage("PulseAudio support disabled: Unable to create context"); + logMessage(QLatin1String("PulseAudio support disabled: Unable to create context")); pa_mainloop_free(p_test_mainloop); return; } - logMessage("Probing for PulseAudio..."); + logMessage(QLatin1String("Probing for PulseAudio...")); // (cg) Convert to PA_CONTEXT_NOFLAGS when PulseAudio 0.9.19 is required if (pa_context_connect(p_test_context, NULL, static_cast(0), NULL) < 0) { - logMessage(QString("PulseAudio support disabled: %1").arg(pa_strerror(pa_context_errno(p_test_context)))); + logMessage(QString::fromLatin1("PulseAudio support disabled: %1").arg(QString::fromLocal8Bit(pa_strerror(pa_context_errno(p_test_context))))); pa_context_disconnect(p_test_context); pa_context_unref(p_test_context); pa_mainloop_free(p_test_mainloop); @@ -693,7 +691,7 @@ PulseSupport::PulseSupport() pa_mainloop_iterate(p_test_mainloop, 1, NULL); if (!PA_CONTEXT_IS_GOOD(pa_context_get_state(p_test_context))) { - logMessage("PulseAudio probe complete."); + logMessage(QLatin1String("PulseAudio probe complete.")); break; } } @@ -702,12 +700,12 @@ PulseSupport::PulseSupport() pa_mainloop_free(p_test_mainloop); if (!s_pulseActive) { - logMessage("PulseAudio support is not available."); + logMessage(QLatin1String("PulseAudio support is not available.")); return; } // If we're still here, PA is available. - logMessage("PulseAudio support enabled"); + logMessage(QLatin1String("PulseAudio support enabled")); // Now we connect for real using a proper main loop that we can forget // all about processing. @@ -856,7 +854,7 @@ static void setDevicePriority(Category category, QStringList list) if (role.isEmpty()) return; - logMessage(QString("Reindexing %1: %2").arg(role).arg(list.join(", "))); + logMessage(QString::fromLatin1("Reindexing %1: %2").arg(role).arg(list.join(QLatin1String(", ")))); char **devices; devices = pa_xnew(char *, list.size()+1); @@ -926,7 +924,7 @@ void PulseSupport::setStreamPropList(Category category, QString streamUuid) if (role.isEmpty()) return; - logMessage(QString("Setting role to %1 for streamindex %2").arg(role).arg(streamUuid)); + logMessage(QString::fromLatin1("Setting role to %1 for streamindex %2").arg(role).arg(streamUuid)); setenv("PULSE_PROP_media.role", role.toLatin1().constData(), 1); setenv("PULSE_PROP_phonon.streamid", streamUuid.toLatin1().constData(), 1); #endif @@ -952,30 +950,30 @@ bool PulseSupport::setOutputDevice(QString streamUuid, int device) { return true; if (!s_outputDevices.contains(device)) { - logMessage(QString("Attempting to set Output Device for invalid device id %1.").arg(device)); + logMessage(QString::fromLatin1("Attempting to set Output Device for invalid device id %1.").arg(device)); return false; } const QVariant var = s_outputDevices[device].properties["name"]; - logMessage(QString("Attempting to set Output Device to '%1' for Output Stream %2").arg(var.toString()).arg(streamUuid)); + logMessage(QString::fromLatin1("Attempting to set Output Device to '%1' for Output Stream %2").arg(var.toString()).arg(streamUuid)); // Attempt to look up the pulse stream index. if (s_outputStreamIndexMap.contains(streamUuid) && s_outputStreamIndexMap[streamUuid] != PA_INVALID_INDEX) { - logMessage(QString("... Found in map. Moving now")); + logMessage(QLatin1String("... Found in map. Moving now")); uint32_t pulse_device_index = s_outputDevices[device].pulseIndex; uint32_t pulse_stream_index = s_outputStreamIndexMap[streamUuid]; - logMessage(QString("Moving Pulse Sink Input %1 to '%2' (Pulse Sink %3)").arg(pulse_stream_index).arg(var.toString()).arg(pulse_device_index)); + logMessage(QString::fromLatin1("Moving Pulse Sink Input %1 to '%2' (Pulse Sink %3)").arg(pulse_stream_index).arg(var.toString()).arg(pulse_device_index)); /// @todo Find a way to move the stream without saving it... We don't want to pollute the stream restore db. pa_operation* o; if (!(o = pa_context_move_sink_input_by_index(s_context, pulse_stream_index, pulse_device_index, NULL, NULL))) { - logMessage(QString("pa_context_move_sink_input_by_index() failed")); + logMessage(QLatin1String("pa_context_move_sink_input_by_index() failed")); return false; } pa_operation_unref(o); } else { - logMessage(QString("... Not found in map. We will be notified of the device when the stream appears and we can process any moves needed then")); + logMessage(QLatin1String("... Not found in map. We will be notified of the device when the stream appears and we can process any moves needed then")); } return true; #endif @@ -991,30 +989,30 @@ bool PulseSupport::setCaptureDevice(QString streamUuid, int device) { return true; if (!s_captureDevices.contains(device)) { - logMessage(QString("Attempting to set Capture Device for invalid device id %1.").arg(device)); + logMessage(QString::fromLatin1("Attempting to set Capture Device for invalid device id %1.").arg(device)); return false; } const QVariant var = s_captureDevices[device].properties["name"]; - logMessage(QString("Attempting to set Capture Device to '%1' for Capture Stream %2").arg(var.toString()).arg(streamUuid)); + logMessage(QString::fromLatin1("Attempting to set Capture Device to '%1' for Capture Stream %2").arg(var.toString()).arg(streamUuid)); // Attempt to look up the pulse stream index. if (s_captureStreamIndexMap.contains(streamUuid) && s_captureStreamIndexMap[streamUuid] == PA_INVALID_INDEX) { - logMessage(QString("... Found in map. Moving now")); + logMessage(QString::fromLatin1("... Found in map. Moving now")); uint32_t pulse_device_index = s_captureDevices[device].pulseIndex; uint32_t pulse_stream_index = s_captureStreamIndexMap[streamUuid]; - logMessage(QString("Moving Pulse Source Output %1 to '%2' (Pulse Sink %3)").arg(pulse_stream_index).arg(var.toString()).arg(pulse_device_index)); + logMessage(QString::fromLatin1("Moving Pulse Source Output %1 to '%2' (Pulse Sink %3)").arg(pulse_stream_index).arg(var.toString()).arg(pulse_device_index)); /// @todo Find a way to move the stream without saving it... We don't want to pollute the stream restore db. pa_operation* o; if (!(o = pa_context_move_source_output_by_index(s_context, pulse_stream_index, pulse_device_index, NULL, NULL))) { - logMessage(QString("pa_context_move_source_output_by_index() failed")); + logMessage(QString::fromLatin1("pa_context_move_source_output_by_index() failed")); return false; } pa_operation_unref(o); } else { - logMessage(QString("... Not found in map. We will be notified of the device when the stream appears and we can process any moves needed then")); + logMessage(QString::fromLatin1("... Not found in map. We will be notified of the device when the stream appears and we can process any moves needed then")); } return true; #endif @@ -1025,7 +1023,7 @@ void PulseSupport::clearStreamCache(QString streamUuid) { Q_UNUSED(streamUuid); return; #else - logMessage(QString("Clearing stream cache for stream %1").arg(streamUuid)); + logMessage(QString::fromLatin1("Clearing stream cache for stream %1").arg(streamUuid)); s_outputStreamIndexMap.remove(streamUuid); s_captureStreamIndexMap.remove(streamUuid); #endif -- cgit v0.12 From 2534805c3fa3dafe4fad7c35687b105c6b01fd97 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 26 Nov 2010 21:17:02 +0100 Subject: Fix warning about use of uninitialised variable --- src/network/ssl/qsslcertificate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index a3ea555..275c7be 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -716,7 +716,7 @@ QSslCertificate QSslCertificatePrivate::QSslCertificate_from_X509(X509 *x509) static bool matchLineFeed(const QByteArray &pem, int *offset) { - char ch; + char ch = 0; // ignore extra whitespace at the end of the line while (*offset < pem.size() && (ch = pem.at(*offset)) == ' ') -- cgit v0.12 From d54fe278bcbba0018bbed9a09abc35b628b0024b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 21:20:31 +0100 Subject: Fix warning about mixing integral with non-integral type in ?: --- src/gui/dialogs/qdialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index b7a0026..fbdc522 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -282,8 +282,8 @@ QDialog::QDialog(QWidget *parent, Qt::WindowFlags f) QDialog::QDialog(QWidget *parent, const char *name, bool modal, Qt::WindowFlags f) : QWidget(*new QDialogPrivate, parent, f - | QFlag(modal ? Qt::WShowModal : 0) - | QFlag((f & Qt::WindowType_Mask) == 0 ? Qt::Dialog : 0) + | QFlag(modal ? Qt::WShowModal : Qt::WindowType(0)) + | QFlag((f & Qt::WindowType_Mask) == 0 ? Qt::Dialog : Qt::WindowType(0)) ) { setObjectName(QString::fromAscii(name)); -- cgit v0.12 From b284975435f80eba7bf6d1edd21987dcee134e86 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 21:23:33 +0100 Subject: Fix silly "will be initialised after" warning. --- src/declarative/util/qdeclarativepixmapcache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp index a07b1bb..380d9bc 100644 --- a/src/declarative/util/qdeclarativepixmapcache.cpp +++ b/src/declarative/util/qdeclarativepixmapcache.cpp @@ -684,7 +684,7 @@ void QDeclarativePixmapStore::timerEvent(QTimerEvent *) } QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativePixmapData *d) -: data(d), reader(0), loading(false), redirectCount(0), requestSize(d->requestSize) +: data(d), reader(0), requestSize(d->requestSize), loading(false), redirectCount(0) { if (finishedIndex == -1) { finishedIndex = QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()"); -- cgit v0.12 From dc23fd546163edb7ff4395f44217b5cb2600004a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 26 Nov 2010 18:41:07 +0100 Subject: Fix warnings related to unused variables. Just add some Q_UNUSED for parameters or remove the variable we don't need for the others. Reviewed-by: Trust Me --- src/declarative/qml/qdeclarativeengine.cpp | 2 ++ src/declarative/qml/qdeclarativepropertycache.cpp | 1 - src/gui/styles/qstyle.cpp | 2 ++ src/gui/styles/qstyleoption.cpp | 4 ++++ src/opengl/qgl_x11egl.cpp | 1 - src/opengl/qglpixelbuffer_egl.cpp | 1 - src/plugins/bearer/connman/qconnmanservice_linux.cpp | 2 -- tools/shared/windows/registry.cpp | 3 +++ 8 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 1160ed8..c646302 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -2232,6 +2232,8 @@ bool QDeclarative_isFileCaseCorrect(const QString &fileName) if (a != c) return false; } +#else + Q_UNUSED(fileName); #endif return true; diff --git a/src/declarative/qml/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp index 0adcdbd..dd9a224 100644 --- a/src/declarative/qml/qdeclarativepropertycache.cpp +++ b/src/declarative/qml/qdeclarativepropertycache.cpp @@ -320,7 +320,6 @@ void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaOb { Q_ASSERT(engine); Q_ASSERT(metaObject); - QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine); clear(); diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 3ebfab2..be8f794 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -2456,6 +2456,8 @@ QDebug operator<<(QDebug debug, QStyle::State state) qSort(states); debug << states.join(QLatin1String(" | ")); debug << ')'; +#else + Q_UNUSED(state); #endif return debug; } diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index 4780edf..05ca793 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -5483,6 +5483,8 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) case QStyleOption::SO_GraphicsItem: debug << "SO_GraphicsItem"; break; } +#else + Q_UNUSED(optionType); #endif return debug; } @@ -5496,6 +5498,8 @@ QDebug operator<<(QDebug debug, const QStyleOption &option) debug << ',' << option.state; debug << ',' << option.rect; debug << ')'; +#else + Q_UNUSED(option); #endif return debug; } diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index d33ea56..144d140 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -97,7 +97,6 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) XVisualInfo visualInfo; XVisualInfo *vi; int numVisuals; - EGLint id = 0; visualInfo.visualid = QEgl::getCompatibleVisualId(config); vi = XGetVisualInfo(X11->display, VisualIDMask, &visualInfo, &numVisuals); diff --git a/src/opengl/qglpixelbuffer_egl.cpp b/src/opengl/qglpixelbuffer_egl.cpp index 0b94f5a..2d9f6f1 100644 --- a/src/opengl/qglpixelbuffer_egl.cpp +++ b/src/opengl/qglpixelbuffer_egl.cpp @@ -74,7 +74,6 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge // Use the same configuration as the widget we are sharing with. ctx->setConfig(shareContext->config()); #if QGL_RENDER_TEXTURE - EGLint value = EGL_FALSE; if (ctx->configAttrib(EGL_BIND_TO_TEXTURE_RGBA) == EGL_TRUE) textureFormat = EGL_TEXTURE_RGBA; else if (ctx->configAttrib(EGL_BIND_TO_TEXTURE_RGB) == EGL_TRUE) diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 952a444..0545422 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -216,7 +216,6 @@ void QConnmanManagerInterface::registerCounter(const QString &path, quint32 inte { QDBusReply > reply = this->call(QLatin1String("RegisterCounter"), QVariant::fromValue(path), QVariant::fromValue(interval)); - bool ok = true; if(reply.error().type() == QDBusError::InvalidArgs) { qWarning() << reply.error().message(); } @@ -225,7 +224,6 @@ void QConnmanManagerInterface::registerCounter(const QString &path, quint32 inte void QConnmanManagerInterface::unregisterCounter(const QString &path) { QDBusReply > reply = this->call(QLatin1String("UnregisterCounter"), QVariant::fromValue(path)); - bool ok = true; if(reply.error().type() == QDBusError::InvalidArgs) { qWarning() << reply.error().message(); } diff --git a/tools/shared/windows/registry.cpp b/tools/shared/windows/registry.cpp index 48e9ae6..f520910 100644 --- a/tools/shared/windows/registry.cpp +++ b/tools/shared/windows/registry.cpp @@ -157,6 +157,9 @@ QString qt_readRegistryKey(HKEY parentHandle, const QString &rSubkey) } RegCloseKey(handle); +#else + Q_UNUSED(parentHandle); + Q_UNUSED(rSubkey) #endif return result; -- cgit v0.12 From 20da7afb4c575001b7373554ebf7e7fb434a2942 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 26 Nov 2010 20:26:58 +0100 Subject: Fix warning about address of a function being constant. In OpenGL ES 2, these functions are always expected to be present, so the address can never be zero. So only test for the function being found if we tried to find it dynamicaly. --- src/opengl/qgl.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index ed9753e..18f1203 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -2095,7 +2095,9 @@ void QGLContextPrivate::cleanup() void QGLContextPrivate::setVertexAttribArrayEnabled(int arrayIndex, bool enabled) { Q_ASSERT(arrayIndex < QT_GL_VERTEX_ARRAY_TRACKED_COUNT); +#ifdef glEnableVertexAttribArray Q_ASSERT(glEnableVertexAttribArray); +#endif if (vertexAttributeArraysEnabledState[arrayIndex] && !enabled) glDisableVertexAttribArray(arrayIndex); @@ -2108,7 +2110,9 @@ void QGLContextPrivate::setVertexAttribArrayEnabled(int arrayIndex, bool enabled void QGLContextPrivate::syncGlState() { +#ifdef glEnableVertexAttribArray Q_ASSERT(glEnableVertexAttribArray); +#endif for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i) { if (vertexAttributeArraysEnabledState[i]) glEnableVertexAttribArray(i); -- cgit v0.12 From 3251c5023c184466e8199c8999aa6e332eb98534 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 26 Nov 2010 20:28:23 +0100 Subject: Fix warning about %x parameter type mismatch in EGL --- src/opengl/qgl_x11egl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index 144d140..75dd1b6 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -345,7 +345,7 @@ void QGLWidgetPrivate::recreateEglSurface() // old surface before re-creating a new one. Note: This should not be the case as the // surface should be deleted before the old window id. if (glcx->d_func()->eglSurface != EGL_NO_SURFACE && (currentId != eglSurfaceWindowId)) { - qWarning("EGL surface for deleted window %x was not destroyed", eglSurfaceWindowId); + qWarning("EGL surface for deleted window %x was not destroyed", uint(eglSurfaceWindowId)); glcx->d_func()->destroyEglSurfaceForDevice(); } -- cgit v0.12 From d89985ce546f63f4e563ccc54951957d2f33c5ec Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 25 Nov 2010 19:21:17 +0100 Subject: Fix strict-aliasing violation warning. Strict aliasing is violated here, so just silence the compiler (GCC) by using an extension. --- src/gui/text/qtextformat.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 46db253..fdbb680 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -265,10 +265,18 @@ private: friend QDataStream &operator>>(QDataStream &, QTextFormat &); }; -// this is only safe if sizeof(int) == sizeof(float) +// this is only safe because sizeof(int) == sizeof(float) static inline uint hash(float d) { +#ifdef Q_CC_GNU + // this is a GCC extension and isn't guaranteed to work in other compilers + // the reinterpret_cast below generates a strict-aliasing warning with GCC + union { float f; uint u; } cvt; + cvt.f = d; + return cvt.u; +#else return reinterpret_cast(d); +#endif } static inline uint hash(const QColor &color) -- cgit v0.12 From d910fa67be7981714bfc854a7b6cc10e0ecfb858 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 26 Nov 2010 20:55:49 +0100 Subject: Fix warning about uninitialised varibale. This variable cannot be dereferenced when it's zero, but let's silence the compiler warning (GCC 4.4 on ARM). --- src/plugins/bearer/connman/qconnmanengine.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index 184ceb4..7ac86b3 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -726,6 +726,7 @@ void QConnmanEngine::addNetworkConfiguration(const QString &networkPath) if(servicePath.isEmpty()) { id = QString::number(qHash(networkPath)); + serv = 0; // ### FIXME } else { id = QString::number(qHash(servicePath)); serv = new QConnmanServiceInterface(servicePath,this); -- cgit v0.12 From a22ecab92bacc57d0a788eb9713f442e95468fd3 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 28 Nov 2010 12:46:00 +0100 Subject: Remove the FIXME, it's fixed --- src/plugins/bearer/connman/qconnmanengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index 7ac86b3..7f3501e 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -726,7 +726,7 @@ void QConnmanEngine::addNetworkConfiguration(const QString &networkPath) if(servicePath.isEmpty()) { id = QString::number(qHash(networkPath)); - serv = 0; // ### FIXME + serv = 0; } else { id = QString::number(qHash(servicePath)); serv = new QConnmanServiceInterface(servicePath,this); -- cgit v0.12 From 7dafb5ca875a714ed9a1ced1a44ca536b31a44de Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 22 Oct 2010 15:29:41 +0200 Subject: Autotest: fix mistake in verifying pointers Don't assume that pointers on the heap appear always on the positive half of the addressing space. --- tests/auto/qsharedpointer/tst_qsharedpointer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp index 6b4904f..a05aa97 100644 --- a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp +++ b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp @@ -283,8 +283,8 @@ void tst_QSharedPointer::operators() QSharedPointer p1; QSharedPointer p2(new char); qptrdiff diff = p2.data() - p1.data(); - Q_ASSERT(p1.data() < p2.data()); - Q_ASSERT(diff > 0); + Q_ASSERT(p1.data() != p2.data()); + Q_ASSERT(diff != 0); // operator- QCOMPARE(p2 - p1.data(), diff); -- cgit v0.12 From b604dc0b77a3a4b9001d682925006a3438e00cb7 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 25 Nov 2010 10:56:20 +1000 Subject: Move KeyNavigation example to snippets, plus some doc rewording --- doc/src/snippets/declarative/keynavigation.qml | 45 ++++++++++++++ src/declarative/graphicsitems/qdeclarativeitem.cpp | 72 +++++++--------------- 2 files changed, 66 insertions(+), 51 deletions(-) create mode 100644 doc/src/snippets/declarative/keynavigation.qml diff --git a/doc/src/snippets/declarative/keynavigation.qml b/doc/src/snippets/declarative/keynavigation.qml new file mode 100644 index 0000000..d72bb3a --- /dev/null +++ b/doc/src/snippets/declarative/keynavigation.qml @@ -0,0 +1,45 @@ +//![0] +import QtQuick 1.0 + +Grid { + width: 100; height: 100 + columns: 2 + + Rectangle { + id: topLeft + width: 50; height: 50 + color: focus ? "red" : "lightgray" + focus: true + + KeyNavigation.right: topRight + KeyNavigation.down: bottomLeft + } + + Rectangle { + id: topRight + width: 50; height: 50 + color: focus ? "red" : "lightgray" + + KeyNavigation.left: topLeft + KeyNavigation.down: bottomRight + } + + Rectangle { + id: bottomLeft + width: 50; height: 50 + color: focus ? "red" : "lightgray" + + KeyNavigation.right: bottomRight + KeyNavigation.up: topLeft + } + + Rectangle { + id: bottomRight + width: 50; height: 50 + color: focus ? "red" : "lightgray" + + KeyNavigation.left: bottomLeft + KeyNavigation.up: topRight + } +} +//![0] diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index e0df751..9d6fe12 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -421,58 +421,28 @@ void QDeclarativeItemKeyFilter::componentComplete() \since 4.7 \brief The KeyNavigation attached property supports key navigation by arrow keys. - It is common in key-based UIs to use arrow keys to navigate - between focused items. The KeyNavigation property provides a - convenient way of specifying which item will gain focus - when an arrow key is pressed. The following example provides - key navigation for a 2x2 grid of items. - - \code - Grid { - columns: 2 - width: 100; height: 100 - Rectangle { - id: item1 - focus: true - width: 50; height: 50 - color: focus ? "red" : "lightgray" - KeyNavigation.right: item2 - KeyNavigation.down: item3 - } - Rectangle { - id: item2 - width: 50; height: 50 - color: focus ? "red" : "lightgray" - KeyNavigation.left: item1 - KeyNavigation.down: item4 - } - Rectangle { - id: item3 - width: 50; height: 50 - color: focus ? "red" : "lightgray" - KeyNavigation.right: item4 - KeyNavigation.up: item1 - } - Rectangle { - id: item4 - width: 50; height: 50 - color: focus ? "red" : "lightgray" - KeyNavigation.left: item3 - KeyNavigation.up: item2 - } - } - \endcode + Key-based user interfaces commonly allow the use of arrow keys to navigate between + focusable items. The KeyNavigation attached property enables this behavior by providing a + convenient way to specify the item that should gain focus when an arrow or tab key is pressed. + + The following example provides key navigation for a 2x2 grid of items: - By default KeyNavigation receives key events after the item it is attached to. - If the item accepts an arrow key event, the KeyNavigation - attached property will not receive an event for that key. Setting the - \l priority property to KeyNavigation.BeforeItem allows handling - of the key events before normal item processing. + \snippet doc/src/snippets/declarative/keynavigation.qml 0 - If an item has been set for a direction and the KeyNavigation - attached property receives the corresponding - key press and release events, the events will be accepted by - KeyNavigation and will not propagate any further. + The top-left item initially receives focus by setting \l {Item::}{focus} to + \c true. When an arrow key is pressed, the focus will move to the + appropriate item, as defined by the value that has been set for + the KeyNavigation \l left, \l right, \l up or \l down properties. + + Note that if a KeyNavigation attached property receives the key press and release + events for a requested arrow or tab key, the event is accepted and does not + propagate any further. + + By default, KeyNavigation receives key events after the item to which it is attached. + If the item accepts the key event, the KeyNavigation attached property will not + receive an event for that key. Setting the \l priority property to + \c KeyNavigation.BeforeItem allows the event to be used for key navigation + before the item, rather than after. \sa {Keys}{Keys attached property} */ @@ -599,7 +569,7 @@ void QDeclarativeKeyNavigationAttached::setBacktab(QDeclarativeItem *i) \list \o KeyNavigation.BeforeItem - process the key events before normal - item key processing. If the event is accepted it will not + item key processing. If the event is used for key navigation, it will be accepted and will not be passed on to the item. \o KeyNavigation.AfterItem (default) - process the key events after normal item key handling. If the item accepts the key event it will not be -- cgit v0.12 From 312604c85b1e6a6fc6de505bac86848936f81edd Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Mon, 29 Nov 2010 18:41:24 +1000 Subject: Improve consistency in handling of aliases, bindings and value types Task-number: QTBUG-13719 --- src/declarative/qml/qdeclarativebinding.cpp | 337 +++++++++++---------- src/declarative/qml/qdeclarativebinding_p.h | 12 +- .../qml/qdeclarativecompiledbindings.cpp | 14 - src/declarative/qml/qdeclarativecompiler.cpp | 119 ++++++-- src/declarative/qml/qdeclarativecompiler_p.h | 1 + src/declarative/qml/qdeclarativecomponent.cpp | 5 +- src/declarative/qml/qdeclarativeinstruction.cpp | 7 +- src/declarative/qml/qdeclarativeinstruction_p.h | 2 + src/declarative/qml/qdeclarativeparser.cpp | 4 +- src/declarative/qml/qdeclarativeparser_p.h | 3 + src/declarative/qml/qdeclarativeproperty.cpp | 209 +++++++++++-- src/declarative/qml/qdeclarativeproperty_p.h | 8 +- src/declarative/qml/qdeclarativepropertycache_p.h | 1 + src/declarative/qml/qdeclarativevaluetype.cpp | 46 ++- src/declarative/qml/qdeclarativevme.cpp | 38 ++- src/declarative/qml/qdeclarativevmemetaobject.cpp | 47 ++- src/declarative/qml/qdeclarativevmemetaobject_p.h | 2 + .../data/AliasBindingsAssignCorrectlyType.qml | 9 + .../data/AliasBindingsOverrideTargetType.qml | 14 + .../data/AliasBindingsOverrideTargetType3.qml | 9 + .../data/aliasBindingsAssignCorrectly.qml | 59 ++++ .../data/aliasBindingsOverrideTarget.2.qml | 29 ++ .../data/aliasBindingsOverrideTarget.3.qml | 24 ++ .../data/aliasBindingsOverrideTarget.qml | 28 ++ .../data/aliasWritesOverrideBindings.2.qml | 29 ++ .../data/aliasWritesOverrideBindings.3.qml | 23 ++ .../data/aliasWritesOverrideBindings.qml | 23 ++ .../data/writeRemovesBinding.qml | 46 +++ .../tst_qdeclarativeecmascript.cpp | 95 ++++++ .../tst_qdeclarativeinstruction.cpp | 5 +- .../data/aliasPropertyBindings.qml | 19 ++ .../tst_qdeclarativeproperty.cpp | 69 +++++ .../data/BindingsSpliceCorrectlyType.qml | 7 + .../data/BindingsSpliceCorrectlyType4.qml | 7 + .../data/BindingsSpliceCorrectlyType5.qml | 7 + .../data/bindingsSpliceCorrectly.1.qml | 29 ++ .../data/bindingsSpliceCorrectly.2.qml | 31 ++ .../data/bindingsSpliceCorrectly.3.qml | 36 +++ .../data/bindingsSpliceCorrectly.4.qml | 27 ++ .../data/bindingsSpliceCorrectly.5.qml | 27 ++ .../tst_qdeclarativevaluetypes.cpp | 56 ++++ 41 files changed, 1305 insertions(+), 258 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsAssignCorrectlyType.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType3.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsAssignCorrectly.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.2.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.3.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.2.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.3.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.qml create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/writeRemovesBinding.qml create mode 100644 tests/auto/declarative/qdeclarativeproperty/data/aliasPropertyBindings.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType4.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType5.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.1.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.2.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.3.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.4.qml create mode 100644 tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.5.qml diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp index cb6ad8c..a7fbf44 100644 --- a/src/declarative/qml/qdeclarativebinding.cpp +++ b/src/declarative/qml/qdeclarativebinding.cpp @@ -55,6 +55,158 @@ QT_BEGIN_NAMESPACE +QDeclarativeAbstractBinding::QDeclarativeAbstractBinding() +: m_object(0), m_propertyIndex(-1), m_mePtr(0), m_prevBinding(0), m_nextBinding(0) +{ +} + +QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding() +{ + Q_ASSERT(m_prevBinding == 0); + Q_ASSERT(m_mePtr == 0); +} + +/*! +Destroy the binding. Use this instead of calling delete. + +Bindings are free to implement their own memory management, so the delete operator is not +necessarily safe. The default implementation clears the binding, removes it from the object +and calls delete. +*/ +void QDeclarativeAbstractBinding::destroy() +{ + removeFromObject(); + clear(); + + delete this; +} + +/*! +Add this binding to \a object. + +This transfers ownership of the binding to the object, marks the object's property as +being bound. + +However, it does not enable the binding itself or call update() on it. +*/ +void QDeclarativeAbstractBinding::addToObject(QObject *object, int index) +{ + Q_ASSERT(object); + + if (m_object == object && m_propertyIndex == index) + return; + + removeFromObject(); + + Q_ASSERT(!m_prevBinding); + + m_object = object; + m_propertyIndex = index; + + QDeclarativeData *data = QDeclarativeData::get(object, true); + + if (index & 0xFF000000) { + // Value type + + int coreIndex = index & 0xFFFFFF; + + // Find the value type proxy (if there is one) + QDeclarativeValueTypeProxyBinding *proxy = 0; + if (data->hasBindingBit(coreIndex)) { + QDeclarativeAbstractBinding *b = data->bindings; + while (b && b->propertyIndex() != coreIndex) + b = b->m_nextBinding; + Q_ASSERT(b && b->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy); + proxy = static_cast(b); + } + + if (!proxy) { + proxy = new QDeclarativeValueTypeProxyBinding(object, coreIndex); + proxy->addToObject(object, coreIndex); + } + + m_nextBinding = proxy->m_bindings; + if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding; + m_prevBinding = &proxy->m_bindings; + proxy->m_bindings = this; + + } else { + m_nextBinding = data->bindings; + if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding; + m_prevBinding = &data->bindings; + data->bindings = this; + + data->setBindingBit(m_object, index); + } +} + +/*! +Remove the binding from the object. +*/ +void QDeclarativeAbstractBinding::removeFromObject() +{ + if (m_prevBinding) { + int index = propertyIndex(); + + *m_prevBinding = m_nextBinding; + if (m_nextBinding) m_nextBinding->m_prevBinding = m_prevBinding; + m_prevBinding = 0; + m_nextBinding = 0; + + if (index & 0xFF000000) { + // Value type - we don't remove the proxy from the object. It will sit their happily + // doing nothing until it is removed by a write, a binding change or it is reused + // to hold more sub-bindings. + } else if (m_object) { + QDeclarativeData *data = QDeclarativeData::get(m_object, false); + if (data) data->clearBindingBit(index); + } + + m_object = 0; + m_propertyIndex = -1; + } +} + +static void bindingDummyDeleter(QDeclarativeAbstractBinding *) +{ +} + +QDeclarativeAbstractBinding::Pointer QDeclarativeAbstractBinding::weakPointer() +{ + if (m_selfPointer.isNull()) + m_selfPointer = QSharedPointer(this, bindingDummyDeleter); + + return m_selfPointer.toWeakRef(); +} + +void QDeclarativeAbstractBinding::clear() +{ + if (m_mePtr) { + *m_mePtr = 0; + m_mePtr = 0; + } +} + +QString QDeclarativeAbstractBinding::expression() const +{ + return QLatin1String(""); +} + +QObject *QDeclarativeAbstractBinding::object() const +{ + return m_object; +} + +int QDeclarativeAbstractBinding::propertyIndex() const +{ + return m_propertyIndex; +} + +void QDeclarativeAbstractBinding::setEnabled(bool enabled, QDeclarativePropertyPrivate::WriteFlags flags) +{ + if (enabled) update(flags); +} + void QDeclarativeBindingPrivate::refresh() { Q_Q(QDeclarativeBinding); @@ -255,20 +407,8 @@ void QDeclarativeBinding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteF d->enabled = e; setNotifyOnValueChanged(e); - QDeclarativeAbstractBinding::setEnabled(e, flags); - - if (e) { - addToObject(d->property.object()); + if (e) update(flags); - } else { - removeFromObject(); - } -} - -int QDeclarativeBinding::propertyIndex() -{ - Q_D(QDeclarativeBinding); - return QDeclarativePropertyPrivate::bindingIndex(d->property); } bool QDeclarativeBinding::enabled() const @@ -283,127 +423,6 @@ QString QDeclarativeBinding::expression() const return QDeclarativeExpression::expression(); } -QDeclarativeAbstractBinding::QDeclarativeAbstractBinding() -: m_object(0), m_mePtr(0), m_prevBinding(0), m_nextBinding(0) -{ -} - -QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding() -{ - Q_ASSERT(m_prevBinding == 0); - Q_ASSERT(m_mePtr == 0); -} - -void QDeclarativeAbstractBinding::destroy() -{ - removeFromObject(); - clear(); - - delete this; -} - -void QDeclarativeAbstractBinding::addToObject(QObject *object) -{ - Q_ASSERT(object); - - if (m_object == object) - return; - - int index = propertyIndex(); - - removeFromObject(); - - Q_ASSERT(!m_prevBinding); - - m_object = object; - QDeclarativeData *data = QDeclarativeData::get(object, true); - - if (index & 0xFF000000) { - // Value type - - int coreIndex = index & 0xFFFFFF; - - // Find the value type proxy (if there is one) - QDeclarativeValueTypeProxyBinding *proxy = 0; - if (data->hasBindingBit(coreIndex)) { - QDeclarativeAbstractBinding *b = data->bindings; - while (b && b->propertyIndex() != coreIndex) - b = b->m_nextBinding; - Q_ASSERT(b && b->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy); - proxy = static_cast(b); - } - - if (!proxy) - proxy = new QDeclarativeValueTypeProxyBinding(object, coreIndex); - proxy->addToObject(object); - - m_nextBinding = proxy->m_bindings; - if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding; - m_prevBinding = &proxy->m_bindings; - proxy->m_bindings = this; - - } else { - m_nextBinding = data->bindings; - if (m_nextBinding) m_nextBinding->m_prevBinding = &m_nextBinding; - m_prevBinding = &data->bindings; - data->bindings = this; - - data->setBindingBit(m_object, index); - } -} - -void QDeclarativeAbstractBinding::removeFromObject() -{ - if (m_prevBinding) { - int index = propertyIndex(); - - *m_prevBinding = m_nextBinding; - if (m_nextBinding) m_nextBinding->m_prevBinding = m_prevBinding; - m_prevBinding = 0; - m_nextBinding = 0; - - if (index & 0xFF000000) { - // Value type - we don't remove the proxy from the object. It will sit their happily - // doing nothing for ever more. - } else if (m_object) { - QDeclarativeData *data = QDeclarativeData::get(m_object, false); - if (data) data->clearBindingBit(index); - } - - m_object = 0; - } -} - -static void bindingDummyDeleter(QDeclarativeAbstractBinding *) -{ -} - -QDeclarativeAbstractBinding::Pointer QDeclarativeAbstractBinding::weakPointer() -{ - if (m_selfPointer.isNull()) - m_selfPointer = QSharedPointer(this, bindingDummyDeleter); - - return m_selfPointer.toWeakRef(); -} - -void QDeclarativeAbstractBinding::clear() -{ - if (m_mePtr) { - *m_mePtr = 0; - m_mePtr = 0; - } -} - -QString QDeclarativeAbstractBinding::expression() const -{ - return QLatin1String(""); -} - -void QDeclarativeAbstractBinding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteFlags) -{ - if (e) m_mePtr = 0; -} - QDeclarativeValueTypeProxyBinding::QDeclarativeValueTypeProxyBinding(QObject *o, int index) : m_object(o), m_index(index), m_bindings(0) { @@ -421,16 +440,10 @@ QDeclarativeValueTypeProxyBinding::~QDeclarativeValueTypeProxyBinding() void QDeclarativeValueTypeProxyBinding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteFlags flags) { if (e) { - addToObject(m_object); - QDeclarativeAbstractBinding *bindings = m_bindings; - m_bindings = 0; recursiveEnable(bindings, flags); } else { - removeFromObject(); - QDeclarativeAbstractBinding *bindings = m_bindings; - m_bindings = 0; recursiveDisable(bindings); } } @@ -440,13 +453,7 @@ void QDeclarativeValueTypeProxyBinding::recursiveEnable(QDeclarativeAbstractBind if (!b) return; - QDeclarativeAbstractBinding *next = b->m_nextBinding; - b->m_prevBinding = 0; - b->m_nextBinding = 0; - Q_ASSERT(b->m_mePtr == 0); - b->m_mePtr = &b; - - recursiveEnable(next, flags); + recursiveEnable(b->m_nextBinding, flags); if (b) b->setEnabled(true, flags); @@ -459,19 +466,8 @@ void QDeclarativeValueTypeProxyBinding::recursiveDisable(QDeclarativeAbstractBin recursiveDisable(b->m_nextBinding); - b->setEnabled(false, 0); - - Q_ASSERT(b->m_prevBinding == 0); - Q_ASSERT(b->m_nextBinding == 0); - b->m_nextBinding = m_bindings; - if (b->m_nextBinding) b->m_nextBinding->m_prevBinding = &b->m_nextBinding; - b->m_prevBinding = &m_bindings; - m_bindings = b; -} - -int QDeclarativeValueTypeProxyBinding::propertyIndex() -{ - return m_index; + if (b) + b->setEnabled(false, 0); } void QDeclarativeValueTypeProxyBinding::update(QDeclarativePropertyPrivate::WriteFlags) @@ -488,4 +484,25 @@ QDeclarativeAbstractBinding *QDeclarativeValueTypeProxyBinding::binding(int prop return binding; } +/*! +Removes a collection of bindings, corresponding to the set bits in \a mask. +*/ +void QDeclarativeValueTypeProxyBinding::removeBindings(quint32 mask) +{ + QDeclarativeAbstractBinding *binding = m_bindings; + while (binding) { + if (mask & (1 << (binding->propertyIndex() >> 24))) { + QDeclarativeAbstractBinding *remove = binding; + binding = remove->m_nextBinding; + *remove->m_prevBinding = remove->m_nextBinding; + if (remove->m_nextBinding) remove->m_nextBinding->m_prevBinding = remove->m_prevBinding; + remove->m_prevBinding = 0; + remove->m_nextBinding = 0; + remove->destroy(); + } else { + binding = binding->m_nextBinding; + } + } +} + QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativebinding_p.h b/src/declarative/qml/qdeclarativebinding_p.h index 0b9bde6..7823a3d 100644 --- a/src/declarative/qml/qdeclarativebinding_p.h +++ b/src/declarative/qml/qdeclarativebinding_p.h @@ -78,14 +78,16 @@ public: enum Type { PropertyBinding, ValueTypeProxy }; virtual Type bindingType() const { return PropertyBinding; } + QObject *object() const; + int propertyIndex() const; + void setEnabled(bool e) { setEnabled(e, QDeclarativePropertyPrivate::DontRemoveBinding); } virtual void setEnabled(bool, QDeclarativePropertyPrivate::WriteFlags) = 0; - virtual int propertyIndex() = 0; void update() { update(QDeclarativePropertyPrivate::DontRemoveBinding); } virtual void update(QDeclarativePropertyPrivate::WriteFlags) = 0; - void addToObject(QObject *); + void addToObject(QObject *, int); void removeFromObject(); static Pointer getPointer(QDeclarativeAbstractBinding *p) { return p ? p->weakPointer() : Pointer(); } @@ -98,12 +100,14 @@ private: Pointer weakPointer(); friend class QDeclarativeData; + friend class QDeclarativeComponentPrivate; friend class QDeclarativeValueTypeProxyBinding; friend class QDeclarativePropertyPrivate; friend class QDeclarativeVME; friend class QtSharedPointer::ExternalRefCount; QObject *m_object; + int m_propertyIndex; QDeclarativeAbstractBinding **m_mePtr; QDeclarativeAbstractBinding **m_prevBinding; QDeclarativeAbstractBinding *m_nextBinding; @@ -118,11 +122,12 @@ public: virtual Type bindingType() const { return ValueTypeProxy; } virtual void setEnabled(bool, QDeclarativePropertyPrivate::WriteFlags); - virtual int propertyIndex(); virtual void update(QDeclarativePropertyPrivate::WriteFlags); QDeclarativeAbstractBinding *binding(int propertyIndex); + void removeBindings(quint32 mask); + protected: ~QDeclarativeValueTypeProxyBinding(); @@ -154,7 +159,6 @@ public: // Inherited from QDeclarativeAbstractBinding virtual void setEnabled(bool, QDeclarativePropertyPrivate::WriteFlags flags); - virtual int propertyIndex(); virtual void update(QDeclarativePropertyPrivate::WriteFlags flags); virtual QString expression() const; diff --git a/src/declarative/qml/qdeclarativecompiledbindings.cpp b/src/declarative/qml/qdeclarativecompiledbindings.cpp index fbe5829..5c295b9 100644 --- a/src/declarative/qml/qdeclarativecompiledbindings.cpp +++ b/src/declarative/qml/qdeclarativecompiledbindings.cpp @@ -187,7 +187,6 @@ public: // Inherited from QDeclarativeAbstractBinding virtual void setEnabled(bool, QDeclarativePropertyPrivate::WriteFlags flags); - virtual int propertyIndex(); virtual void update(QDeclarativePropertyPrivate::WriteFlags flags); virtual void destroy(); @@ -294,14 +293,6 @@ QDeclarativeAbstractBinding *QDeclarativeCompiledBindings::configBinding(int ind void QDeclarativeCompiledBindingsPrivate::Binding::setEnabled(bool e, QDeclarativePropertyPrivate::WriteFlags flags) { - if (e) { - addToObject(target); - } else { - removeFromObject(); - } - - QDeclarativeAbstractBinding::setEnabled(e, flags); - if (enabled != e) { enabled = e; @@ -309,11 +300,6 @@ void QDeclarativeCompiledBindingsPrivate::Binding::setEnabled(bool e, QDeclarati } } -int QDeclarativeCompiledBindingsPrivate::Binding::propertyIndex() -{ - return property & 0xFFFF; -} - void QDeclarativeCompiledBindingsPrivate::Binding::update(QDeclarativePropertyPrivate::WriteFlags flags) { parent->run(this, flags); diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 645402e..df428b1 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -946,6 +946,16 @@ void QDeclarativeCompiler::genObject(QDeclarativeParser::Object *obj) QDeclarativePropertyCache::Data::IsVMEFunction, QDeclarativePropertyCache::Data::IsVMESignal); + // Add flag for alias properties + if (!obj->synthdata.isEmpty()) { + const QDeclarativeVMEMetaData *vmeMetaData = + reinterpret_cast(obj->synthdata.constData()); + for (int ii = 0; ii < vmeMetaData->aliasCount; ++ii) { + int index = obj->metaObject()->propertyOffset() + vmeMetaData->propertyCount + ii; + propertyCache->property(index)->flags |= QDeclarativePropertyCache::Data::IsAlias; + } + } + if (obj == unitRoot) { propertyCache->addref(); output->rootPropertyCache = propertyCache; @@ -1003,7 +1013,8 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeParser::Object *obj) seenDefer = true; continue; } - genValueProperty(prop, obj); + if (!prop->isAlias) + genValueProperty(prop, obj); } if (seenDefer) { QDeclarativeInstruction defer; @@ -1113,25 +1124,56 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeParser::Object *obj) } foreach(Property *prop, obj->valueTypeProperties) { - QDeclarativeInstruction fetch; - fetch.type = QDeclarativeInstruction::FetchValueType; - fetch.fetchValue.property = prop->index; - fetch.fetchValue.type = prop->type; - fetch.line = prop->location.start.line; + if (!prop->isAlias) + genValueTypeProperty(obj, prop); + } - output->bytecode << fetch; + foreach(Property *prop, obj->valueProperties) { + if (prop->isDeferred) + continue; + if (prop->isAlias) + genValueProperty(prop, obj); + } + + foreach(Property *prop, obj->valueTypeProperties) { + if (prop->isAlias) + genValueTypeProperty(obj, prop); + } +} +void QDeclarativeCompiler::genValueTypeProperty(QDeclarativeParser::Object *obj,QDeclarativeParser::Property *prop) +{ + QDeclarativeInstruction fetch; + fetch.type = QDeclarativeInstruction::FetchValueType; + fetch.fetchValue.property = prop->index; + fetch.fetchValue.type = prop->type; + fetch.fetchValue.bindingSkipList = 0; + fetch.line = prop->location.start.line; + + if (obj->type == -1 || output->types.at(obj->type).component) { + // We only have to do this if this is a composite type. If it is a builtin + // type it can't possibly already have bindings that need to be cleared. foreach(Property *vprop, prop->value->valueProperties) { - genPropertyAssignment(vprop, prop->value, prop); + if (!vprop->values.isEmpty()) { + Q_ASSERT(vprop->index >= 0 && vprop->index < 32); + fetch.fetchValue.bindingSkipList |= (1 << vprop->index); + } } + } - QDeclarativeInstruction pop; - pop.type = QDeclarativeInstruction::PopValueType; - pop.fetchValue.property = prop->index; - pop.fetchValue.type = prop->type; - pop.line = prop->location.start.line; - output->bytecode << pop; + output->bytecode << fetch; + + foreach(Property *vprop, prop->value->valueProperties) { + genPropertyAssignment(vprop, prop->value, prop); } + + QDeclarativeInstruction pop; + pop.type = QDeclarativeInstruction::PopValueType; + pop.fetchValue.property = prop->index; + pop.fetchValue.type = prop->type; + pop.fetchValue.bindingSkipList = 0; + pop.line = prop->location.start.line; + output->bytecode << pop; } void QDeclarativeCompiler::genComponent(QDeclarativeParser::Object *obj) @@ -1440,10 +1482,22 @@ bool QDeclarativeCompiler::buildProperty(QDeclarativeParser::Property *prop, if (p.name()) { prop->type = p.userType(); } - } - if (prop->index != -1) - prop->parent->setBindingBit(prop->index); + // Check if this is an alias + if (prop->index != -1 && + prop->parent && + prop->parent->type != -1 && + output->types.at(prop->parent->type).component) { + + QDeclarativePropertyCache *cache = output->types.at(prop->parent->type).component->rootPropertyCache; + if (cache && cache->property(prop->index) && + cache->property(prop->index)->flags & QDeclarativePropertyCache::Data::IsAlias) + prop->isAlias = true; + } + + if (prop->index != -1 && !prop->values.isEmpty()) + prop->parent->setBindingBit(prop->index); + } if (!prop->isDefault && prop->name == "id" && !ctxt.isSubContext()) { @@ -1778,6 +1832,12 @@ bool QDeclarativeCompiler::buildGroupedProperty(QDeclarativeParser::Property *pr COMPILE_EXCEPTION(prop, tr( "Invalid property assignment: \"%1\" is a read-only property").arg(QString::fromUtf8(prop->name))); } + + if (prop->isAlias) { + foreach (Property *vtProp, prop->value->properties) + vtProp->isAlias = true; + } + COMPILE_CHECK(buildValueTypeProperty(enginePrivate->valueTypes[prop->type], prop->value, obj, ctxt.incr())); obj->addValueTypeProperty(prop); @@ -2423,7 +2483,7 @@ bool QDeclarativeCompiler::buildDynamicMeta(QDeclarativeParser::Object *obj, Dyn if (p.type == Object::DynamicProperty::Alias) { if (mode == ResolveAliases) { ((QDeclarativeVMEMetaData *)dynamicData.data())->aliasCount++; - compileAlias(builder, dynamicData, obj, p); + COMPILE_CHECK(compileAlias(builder, dynamicData, obj, p)); } else { // Need a fake signal so that the metaobject remains consistent across // the resolve and non-resolve alias runs @@ -2694,7 +2754,10 @@ void QDeclarativeCompiler::genBindingAssignment(QDeclarativeParser::Value *bindi } QDeclarativeInstruction store; - store.type = QDeclarativeInstruction::StoreBinding; + if (!prop->isAlias) + store.type = QDeclarativeInstruction::StoreBinding; + else + store.type = QDeclarativeInstruction::StoreBindingOnAlias; store.assignBinding.value = output->indexForByteArray(ref.compiledData); store.assignBinding.context = ref.bindingContext.stack; store.assignBinding.owner = ref.bindingContext.owner; @@ -2769,13 +2832,17 @@ bool QDeclarativeCompiler::completeComponentBuild() expr.expression = binding.expression; expr.imports = unit->imports(); - int index = bindingCompiler.compile(expr, enginePrivate); - if (index != -1) { - binding.dataType = BindingReference::Experimental; - binding.compiledIndex = index; - componentStat.optimizedBindings.append(iter.key()->location); - continue; - } + // ### We don't currently optimize for bindings on alias's - because + // of the solution to QTBUG-13719 + if (!binding.property->isAlias) { + int index = bindingCompiler.compile(expr, enginePrivate); + if (index != -1) { + binding.dataType = BindingReference::Experimental; + binding.compiledIndex = index; + componentStat.optimizedBindings.append(iter.key()->location); + continue; + } + } binding.dataType = BindingReference::QtScript; diff --git a/src/declarative/qml/qdeclarativecompiler_p.h b/src/declarative/qml/qdeclarativecompiler_p.h index 5cd1fd2..7d76ad9 100644 --- a/src/declarative/qml/qdeclarativecompiler_p.h +++ b/src/declarative/qml/qdeclarativecompiler_p.h @@ -252,6 +252,7 @@ private: void genObject(QDeclarativeParser::Object *obj); void genObjectBody(QDeclarativeParser::Object *obj); + void genValueTypeProperty(QDeclarativeParser::Object *obj,QDeclarativeParser::Property *); void genComponent(QDeclarativeParser::Object *obj); void genValueProperty(QDeclarativeParser::Property *prop, QDeclarativeParser::Object *obj); void genListProperty(QDeclarativeParser::Property *prop, QDeclarativeParser::Object *obj); diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 2686ce3..63bde0f 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -876,9 +876,12 @@ void QDeclarativeComponentPrivate::complete(QDeclarativeEnginePrivate *enginePri QDeclarativeEnginePrivate::SimpleList bv = state->bindValues.at(ii); for (int jj = 0; jj < bv.count; ++jj) { - if(bv.at(jj)) + if(bv.at(jj)) { + // XXX akennedy + bv.at(jj)->m_mePtr = 0; bv.at(jj)->setEnabled(true, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding); + } } QDeclarativeEnginePrivate::clear(bv); } diff --git a/src/declarative/qml/qdeclarativeinstruction.cpp b/src/declarative/qml/qdeclarativeinstruction.cpp index 1767d2f..818c15d 100644 --- a/src/declarative/qml/qdeclarativeinstruction.cpp +++ b/src/declarative/qml/qdeclarativeinstruction.cpp @@ -63,7 +63,7 @@ void QDeclarativeCompiledData::dump(QDeclarativeInstruction *instr, int idx) qWarning().nospace() << idx << "\t\t" << line << "\t" << "INIT\t\t\t" << instr->init.bindingsSize << "\t" << instr->init.parserStatusSize << "\t" << instr->init.contextCache << "\t" << instr->init.compiledBinding; break; case QDeclarativeInstruction::CreateObject: - qWarning().nospace() << idx << "\t\t" << line << "\t" << "CREATE\t\t\t" << instr->create.type << "\t\t\t" << types.at(instr->create.type).className; + qWarning().nospace() << idx << "\t\t" << line << "\t" << "CREATE\t\t\t" << instr->create.type << "\t" << instr->create.bindingBits << "\t\t" << types.at(instr->create.type).className; break; case QDeclarativeInstruction::CreateSimpleObject: qWarning().nospace() << idx << "\t\t" << line << "\t" << "CREATE_SIMPLE\t\t" << instr->createSimple.typeSize; @@ -174,6 +174,9 @@ void QDeclarativeCompiledData::dump(QDeclarativeInstruction *instr, int idx) case QDeclarativeInstruction::StoreBinding: qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_BINDING\t" << instr->assignBinding.property << "\t" << instr->assignBinding.value << "\t" << instr->assignBinding.context; break; + case QDeclarativeInstruction::StoreBindingOnAlias: + qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_BINDING_ALIAS\t" << instr->assignBinding.property << "\t" << instr->assignBinding.value << "\t" << instr->assignBinding.context; + break; case QDeclarativeInstruction::StoreCompiledBinding: qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_COMPILED_BINDING\t" << instr->assignBinding.property << "\t" << instr->assignBinding.value << "\t" << instr->assignBinding.context; break; @@ -203,7 +206,7 @@ void QDeclarativeCompiledData::dump(QDeclarativeInstruction *instr, int idx) qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH\t\t\t" << instr->fetch.property; break; case QDeclarativeInstruction::FetchValueType: - qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH_VALUE\t\t" << instr->fetchValue.property << "\t" << instr->fetchValue.type; + qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH_VALUE\t\t" << instr->fetchValue.property << "\t" << instr->fetchValue.type << "\t" << instr->fetchValue.bindingSkipList; break; case QDeclarativeInstruction::PopFetchedObject: qWarning().nospace() << idx << "\t\t" << line << "\t" << "POP"; diff --git a/src/declarative/qml/qdeclarativeinstruction_p.h b/src/declarative/qml/qdeclarativeinstruction_p.h index f0b032c..94676fc 100644 --- a/src/declarative/qml/qdeclarativeinstruction_p.h +++ b/src/declarative/qml/qdeclarativeinstruction_p.h @@ -132,6 +132,7 @@ public: AssignCustomType, /* assignCustomType */ StoreBinding, /* assignBinding */ + StoreBindingOnAlias, /* assignBinding */ StoreCompiledBinding, /* assignBinding */ StoreValueSource, /* assignValueSource */ StoreValueInterceptor, /* assignValueInterceptor */ @@ -214,6 +215,7 @@ public: struct FetchValueInstruction { int property; int type; + quint32 bindingSkipList; }; struct FetchQmlListInstruction { int property; diff --git a/src/declarative/qml/qdeclarativeparser.cpp b/src/declarative/qml/qdeclarativeparser.cpp index 8d00ef8..effecb1 100644 --- a/src/declarative/qml/qdeclarativeparser.cpp +++ b/src/declarative/qml/qdeclarativeparser.cpp @@ -205,13 +205,13 @@ QDeclarativeParser::Object::DynamicSlot::DynamicSlot(const DynamicSlot &o) QDeclarativeParser::Property::Property() : parent(0), type(0), index(-1), value(0), isDefault(true), isDeferred(false), - isValueTypeSubProperty(false) + isValueTypeSubProperty(false), isAlias(false) { } QDeclarativeParser::Property::Property(const QByteArray &n) : parent(0), type(0), index(-1), value(0), name(n), isDefault(false), - isDeferred(false), isValueTypeSubProperty(false) + isDeferred(false), isValueTypeSubProperty(false), isAlias(false) { } diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h index 77184c2..633847d 100644 --- a/src/declarative/qml/qdeclarativeparser_p.h +++ b/src/declarative/qml/qdeclarativeparser_p.h @@ -358,6 +358,9 @@ namespace QDeclarativeParser bool isDeferred; // True if this property is a value-type pseudo-property bool isValueTypeSubProperty; + // True if this property is a property alias. Set by the + // QDeclarativeCompiler + bool isAlias; LocationSpan location; LocationRange listValueRange; diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp index 1395e97..df0917f 100644 --- a/src/declarative/qml/qdeclarativeproperty.cpp +++ b/src/declarative/qml/qdeclarativeproperty.cpp @@ -607,26 +607,7 @@ QDeclarativePropertyPrivate::binding(const QDeclarativeProperty &that) if (!that.isProperty() || !that.d->object) return 0; - QDeclarativeData *data = QDeclarativeData::get(that.d->object); - if (!data) - return 0; - - if (!data->hasBindingBit(that.d->core.coreIndex)) - return 0; - - QDeclarativeAbstractBinding *binding = data->bindings; - while (binding && binding->propertyIndex() != that.d->core.coreIndex) - binding = binding->m_nextBinding; - - if (binding && that.d->valueType.valueTypeCoreIdx != -1) { - if (binding->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy) { - QDeclarativeValueTypeProxyBinding *proxy = static_cast(binding); - - binding = proxy->binding(bindingIndex(that)); - } - } - - return binding; + return binding(that.d->object, that.d->core.coreIndex, that.d->valueType.valueTypeCoreIdx); } /*! @@ -658,12 +639,106 @@ QDeclarativePropertyPrivate::setBinding(const QDeclarativeProperty &that, } QDeclarativeAbstractBinding * +QDeclarativePropertyPrivate::binding(QObject *object, int coreIndex, int valueTypeIndex) +{ + QDeclarativeData *data = QDeclarativeData::get(object); + if (!data) + return 0; + + QDeclarativePropertyCache::Data *propertyData = + data->propertyCache?data->propertyCache->property(coreIndex):0; + if (propertyData && propertyData->flags & QDeclarativePropertyCache::Data::IsAlias) { + const QDeclarativeVMEMetaObject *vme = + static_cast(metaObjectForProperty(object->metaObject(), coreIndex)); + + QObject *aObject = 0; int aCoreIndex = -1; int aValueTypeIndex = -1; + if (!vme->aliasTarget(coreIndex, &aObject, &aCoreIndex, &aValueTypeIndex)) + return 0; + + // This will either be a value type sub-reference or an alias to a value-type sub-reference not both + Q_ASSERT(valueTypeIndex == -1 || aValueTypeIndex == -1); + return binding(aObject, aCoreIndex, (valueTypeIndex == -1)?aValueTypeIndex:valueTypeIndex); + } + + if (!data->hasBindingBit(coreIndex)) + return 0; + + QDeclarativeAbstractBinding *binding = data->bindings; + while (binding && binding->propertyIndex() != coreIndex) + binding = binding->m_nextBinding; + + if (binding && valueTypeIndex != -1) { + if (binding->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy) { + int index = coreIndex | (valueTypeIndex << 24); + binding = static_cast(binding)->binding(index); + } + } + + return binding; +} + +void QDeclarativePropertyPrivate::findAliasTarget(QObject *object, int bindingIndex, + QObject **targetObject, int *targetBindingIndex) +{ + int coreIndex = bindingIndex & 0xFFFFFF; + int valueTypeIndex = bindingIndex >> 24; + if (valueTypeIndex == 0) valueTypeIndex = -1; + + QDeclarativeData *data = QDeclarativeData::get(object, false); + if (data) { + QDeclarativePropertyCache::Data *propertyData = + data->propertyCache?data->propertyCache->property(coreIndex):0; + if (propertyData && propertyData->flags & QDeclarativePropertyCache::Data::IsAlias) { + const QDeclarativeVMEMetaObject *vme = + static_cast(metaObjectForProperty(object->metaObject(), coreIndex)); + QObject *aObject = 0; int aCoreIndex = -1; int aValueTypeIndex = -1; + if (vme->aliasTarget(coreIndex, &aObject, &aCoreIndex, &aValueTypeIndex)) { + // This will either be a value type sub-reference or an alias to a value-type sub-reference not both + Q_ASSERT(valueTypeIndex == -1 || aValueTypeIndex == -1); + + int aBindingIndex = aCoreIndex; + if (aValueTypeIndex != -1) + aBindingIndex |= aValueTypeIndex << 24; + else if (valueTypeIndex != -1) + aBindingIndex |= valueTypeIndex << 24; + + findAliasTarget(aObject, aBindingIndex, targetObject, targetBindingIndex); + return; + } + } + } + + *targetObject = object; + *targetBindingIndex = bindingIndex; +} + +QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(QObject *object, int coreIndex, int valueTypeIndex, QDeclarativeAbstractBinding *newBinding, WriteFlags flags) { QDeclarativeData *data = QDeclarativeData::get(object, 0 != newBinding); QDeclarativeAbstractBinding *binding = 0; + if (data) { + QDeclarativePropertyCache::Data *propertyData = + data->propertyCache?data->propertyCache->property(coreIndex):0; + if (propertyData && propertyData->flags & QDeclarativePropertyCache::Data::IsAlias) { + const QDeclarativeVMEMetaObject *vme = + static_cast(metaObjectForProperty(object->metaObject(), coreIndex)); + + QObject *aObject = 0; int aCoreIndex = -1; int aValueTypeIndex = -1; + if (!vme->aliasTarget(coreIndex, &aObject, &aCoreIndex, &aValueTypeIndex)) { + if (newBinding) newBinding->destroy(); + return 0; + } + + // This will either be a value type sub-reference or an alias to a value-type sub-reference not both + Q_ASSERT(valueTypeIndex == -1 || aValueTypeIndex == -1); + return setBinding(aObject, aCoreIndex, (valueTypeIndex == -1)?aValueTypeIndex:valueTypeIndex, + newBinding, flags); + } + } + if (data && data->hasBindingBit(coreIndex)) { binding = data->bindings; @@ -671,16 +746,72 @@ QDeclarativePropertyPrivate::setBinding(QObject *object, int coreIndex, int valu binding = binding->m_nextBinding; } - if (binding && valueTypeIndex != -1 && binding->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy) { - int index = coreIndex | (valueTypeIndex << 24); + int index = coreIndex; + if (valueTypeIndex != -1) + index |= (valueTypeIndex << 24); + + if (binding && valueTypeIndex != -1 && binding->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy) binding = static_cast(binding)->binding(index); + + if (binding) { + binding->removeFromObject(); + binding->setEnabled(false, 0); } + if (newBinding) { + newBinding->addToObject(object, index); + newBinding->setEnabled(true, flags); + } + + return binding; +} + +QDeclarativeAbstractBinding * +QDeclarativePropertyPrivate::setBindingNoEnable(QObject *object, int coreIndex, int valueTypeIndex, + QDeclarativeAbstractBinding *newBinding) +{ + QDeclarativeData *data = QDeclarativeData::get(object, 0 != newBinding); + QDeclarativeAbstractBinding *binding = 0; + + if (data) { + QDeclarativePropertyCache::Data *propertyData = + data->propertyCache?data->propertyCache->property(coreIndex):0; + if (propertyData && propertyData->flags & QDeclarativePropertyCache::Data::IsAlias) { + const QDeclarativeVMEMetaObject *vme = + static_cast(metaObjectForProperty(object->metaObject(), coreIndex)); + + QObject *aObject = 0; int aCoreIndex = -1; int aValueTypeIndex = -1; + if (!vme->aliasTarget(coreIndex, &aObject, &aCoreIndex, &aValueTypeIndex)) { + if (newBinding) newBinding->destroy(); + return 0; + } + + // This will either be a value type sub-reference or an alias to a value-type sub-reference not both + Q_ASSERT(valueTypeIndex == -1 || aValueTypeIndex == -1); + return setBindingNoEnable(aObject, aCoreIndex, (valueTypeIndex == -1)?aValueTypeIndex:valueTypeIndex, + newBinding); + } + } + + if (data && data->hasBindingBit(coreIndex)) { + binding = data->bindings; + + while (binding && binding->propertyIndex() != coreIndex) + binding = binding->m_nextBinding; + } + + int index = coreIndex; + if (valueTypeIndex != -1) + index |= (valueTypeIndex << 24); + + if (binding && valueTypeIndex != -1 && binding->bindingType() == QDeclarativeAbstractBinding::ValueTypeProxy) + binding = static_cast(binding)->binding(index); + if (binding) - binding->setEnabled(false); + binding->removeFromObject(); if (newBinding) - newBinding->setEnabled(true, flags); + newBinding->addToObject(object, index); return binding; } @@ -1392,11 +1523,26 @@ static inline int QMetaObject_methods(const QMetaObject *metaObject) int className; int classInfoCount, classInfoData; int methodCount, methodData; + int propertyCount, propertyData; }; return reinterpret_cast(metaObject->d.data)->methodCount; } +static inline int QMetaObject_properties(const QMetaObject *metaObject) +{ + struct Private + { + int revision; + int className; + int classInfoCount, classInfoData; + int methodCount, methodData; + int propertyCount, propertyData; + }; + + return reinterpret_cast(metaObject->d.data)->propertyCount; +} + static inline void flush_vme_signal(const QObject *object, int index) { QDeclarativeData *data = static_cast(QObjectPrivate::get(const_cast(object))->declarativeData); @@ -1437,4 +1583,19 @@ bool QDeclarativePropertyPrivate::connect(const QObject *sender, int signal_inde return QMetaObject::connect(sender, signal_index, receiver, method_index, type, types); } +/*! +Return \a metaObject's [super] meta object that provides data for \a property. +*/ +const QMetaObject *QDeclarativePropertyPrivate::metaObjectForProperty(const QMetaObject *metaObject, int property) +{ + int propertyOffset = metaObject->propertyOffset(); + + while (propertyOffset > property) { + metaObject = metaObject->d.superdata; + propertyOffset -= QMetaObject_properties(metaObject); + } + + return metaObject; +} + QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativeproperty_p.h b/src/declarative/qml/qdeclarativeproperty_p.h index a9d6979..6392f88 100644 --- a/src/declarative/qml/qdeclarativeproperty_p.h +++ b/src/declarative/qml/qdeclarativeproperty_p.h @@ -68,7 +68,7 @@ class QDeclarativeExpression; class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativePropertyPrivate { public: - enum WriteFlag { BypassInterceptor = 0x01, DontRemoveBinding = 0x02 }; + enum WriteFlag { BypassInterceptor = 0x01, DontRemoveBinding = 0x02, RemoveBindingOnAliasWrite = 0x04 }; Q_DECLARE_FLAGS(WriteFlags, WriteFlag) QDeclarativePropertyPrivate() @@ -108,9 +108,13 @@ public: const QVariant &value, int flags); static bool write(QObject *, const QDeclarativePropertyCache::Data &, const QVariant &, QDeclarativeContextData *, WriteFlags flags = 0); + static void findAliasTarget(QObject *, int, QObject **, int *); static QDeclarativeAbstractBinding *setBinding(QObject *, int coreIndex, int valueTypeIndex /* -1 */, QDeclarativeAbstractBinding *, WriteFlags flags = DontRemoveBinding); + static QDeclarativeAbstractBinding *setBindingNoEnable(QObject *, int coreIndex, int valueTypeIndex /* -1 */, + QDeclarativeAbstractBinding *); + static QDeclarativeAbstractBinding *binding(QObject *, int coreIndex, int valueTypeIndex /* -1 */); static QByteArray saveValueType(const QMetaObject *, int, const QMetaObject *, int); @@ -120,7 +124,6 @@ public: static bool equal(const QMetaObject *, const QMetaObject *); static bool canConvert(const QMetaObject *from, const QMetaObject *to); - // "Public" (to QML) methods static QDeclarativeAbstractBinding *binding(const QDeclarativeProperty &that); static QDeclarativeAbstractBinding *setBinding(const QDeclarativeProperty &that, @@ -136,6 +139,7 @@ public: static bool connect(const QObject *sender, int signal_index, const QObject *receiver, int method_index, int type = 0, int *types = 0); + static const QMetaObject *metaObjectForProperty(const QMetaObject *, int); }; Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativePropertyPrivate::WriteFlags) diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h index 922010d..f7c5daa 100644 --- a/src/declarative/qml/qdeclarativepropertycache_p.h +++ b/src/declarative/qml/qdeclarativepropertycache_p.h @@ -83,6 +83,7 @@ public: IsConstant = 0x00000001, IsWritable = 0x00000002, IsResettable = 0x00000004, + IsAlias = 0x00000008, // These are mutualy exclusive IsFunction = 0x00000010, diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp index b9e9cec..5dc6ffd 100644 --- a/src/declarative/qml/qdeclarativevaluetype.cpp +++ b/src/declarative/qml/qdeclarativevaluetype.cpp @@ -109,36 +109,54 @@ void QDeclarativeValueTypeFactory::registerValueTypes() QDeclarativeValueType *QDeclarativeValueTypeFactory::valueType(int t) { + QDeclarativeValueType *rv = 0; + switch (t) { case QVariant::Point: - return new QDeclarativePointValueType; + rv = new QDeclarativePointValueType; + break; case QVariant::PointF: - return new QDeclarativePointFValueType; + rv = new QDeclarativePointFValueType; + break; case QVariant::Size: - return new QDeclarativeSizeValueType; + rv = new QDeclarativeSizeValueType; + break; case QVariant::SizeF: - return new QDeclarativeSizeFValueType; + rv = new QDeclarativeSizeFValueType; + break; case QVariant::Rect: - return new QDeclarativeRectValueType; + rv = new QDeclarativeRectValueType; + break; case QVariant::RectF: - return new QDeclarativeRectFValueType; + rv = new QDeclarativeRectFValueType; + break; case QVariant::Vector2D: - return new QDeclarativeVector2DValueType; + rv = new QDeclarativeVector2DValueType; + break; case QVariant::Vector3D: - return new QDeclarativeVector3DValueType; + rv = new QDeclarativeVector3DValueType; + break; case QVariant::Vector4D: - return new QDeclarativeVector4DValueType; + rv = new QDeclarativeVector4DValueType; + break; case QVariant::Quaternion: - return new QDeclarativeQuaternionValueType; + rv = new QDeclarativeQuaternionValueType; + break; case QVariant::Matrix4x4: - return new QDeclarativeMatrix4x4ValueType; + rv = new QDeclarativeMatrix4x4ValueType; + break; case QVariant::EasingCurve: - return new QDeclarativeEasingValueType; + rv = new QDeclarativeEasingValueType; + break; case QVariant::Font: - return new QDeclarativeFontValueType; + rv = new QDeclarativeFontValueType; + break; default: - return 0; + break; } + + Q_ASSERT(!rv || rv->metaObject()->propertyCount() < 32); + return rv; } QDeclarativeValueType::QDeclarativeValueType(QObject *parent) diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index db90aff..c742dec 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -154,7 +154,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(ctxt->engine); int status = -1; //for dbus - QDeclarativePropertyPrivate::WriteFlags flags = QDeclarativePropertyPrivate::BypassInterceptor; + QDeclarativePropertyPrivate::WriteFlags flags = QDeclarativePropertyPrivate::BypassInterceptor | + QDeclarativePropertyPrivate::RemoveBindingOnAliasWrite; for (int ii = start; !isError() && ii < (start + count); ++ii) { const QDeclarativeInstruction &instr = comp->bytecode.at(ii); @@ -664,6 +665,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, break; case QDeclarativeInstruction::StoreBinding: + case QDeclarativeInstruction::StoreBindingOnAlias: { QObject *target = stack.at(stack.count() - 1 - instr.assignBinding.owner); @@ -675,14 +677,20 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, int coreIndex = mp.index(); - if (stack.count() == 1 && bindingSkipList.testBit(coreIndex)) + if ((stack.count() - instr.assignBinding.owner) == 1 && bindingSkipList.testBit(coreIndex)) break; QDeclarativeBinding *bind = new QDeclarativeBinding((void *)datas.at(instr.assignBinding.value).constData(), comp, context, ctxt, comp->name, instr.line, 0); bindValues.append(bind); bind->m_mePtr = &bindValues.values[bindValues.count - 1]; bind->setTarget(mp); - bind->addToObject(target); + + if (instr.type == QDeclarativeInstruction::StoreBindingOnAlias) { + QDeclarativeAbstractBinding *old = QDeclarativePropertyPrivate::setBindingNoEnable(target, coreIndex, QDeclarativePropertyPrivate::valueTypeCoreIndex(mp), bind); + if (old) { old->destroy(); } + } else { + bind->addToObject(target, QDeclarativePropertyPrivate::bindingIndex(mp)); + } } break; @@ -701,7 +709,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, ctxt->optimizedBindings->configBinding(instr.assignBinding.value, target, scope, property); bindValues.append(binding); binding->m_mePtr = &bindValues.values[bindValues.count - 1]; - binding->addToObject(target); + binding->addToObject(target, property); } break; @@ -874,8 +882,26 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::FetchValueType: { QObject *target = stack.top(); - QDeclarativeValueType *valueHandler = - ep->valueTypes[instr.fetchValue.type]; + + if (instr.fetchValue.bindingSkipList != 0) { + // Possibly need to clear bindings + QDeclarativeData *targetData = QDeclarativeData::get(target); + if (targetData) { + QDeclarativeAbstractBinding *binding = + QDeclarativePropertyPrivate::binding(target, instr.fetchValue.property, -1); + + if (binding && binding->bindingType() != QDeclarativeAbstractBinding::ValueTypeProxy) { + QDeclarativePropertyPrivate::setBinding(target, instr.fetchValue.property, -1, 0); + binding->destroy(); + } else if (binding) { + QDeclarativeValueTypeProxyBinding *proxy = + static_cast(binding); + proxy->removeBindings(instr.fetchValue.bindingSkipList); + } + } + } + + QDeclarativeValueType *valueHandler = ep->valueTypes[instr.fetchValue.type]; valueHandler->read(target, instr.fetchValue.property); stack.push(valueHandler); } diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp index e28062b..38c1709 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject.cpp +++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp @@ -46,6 +46,7 @@ #include "qdeclarativeexpression.h" #include "private/qdeclarativeexpression_p.h" #include "private/qdeclarativecontext_p.h" +#include "private/qdeclarativebinding_p.h" Q_DECLARE_METATYPE(QScriptValue); @@ -589,7 +590,21 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) if (d->isObjectAlias()) { *reinterpret_cast(a[0]) = target; return -1; - } else if (d->isValueTypeAlias()) { + } + + // Remove binding (if any) on write + if(c == QMetaObject::WriteProperty) { + int flags = *reinterpret_cast(a[3]); + if (flags & QDeclarativePropertyPrivate::RemoveBindingOnAliasWrite) { + QDeclarativeData *targetData = QDeclarativeData::get(target); + if (targetData && targetData->hasBindingBit(d->propertyIndex())) { + QDeclarativeAbstractBinding *binding = QDeclarativePropertyPrivate::setBinding(target, d->propertyIndex(), d->isValueTypeAlias()?d->valueTypeIndex():-1, 0); + if (binding) binding->destroy(); + } + } + } + + if (d->isValueTypeAlias()) { // Value type property QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(ctxt->engine); @@ -821,6 +836,36 @@ void QDeclarativeVMEMetaObject::setVMEProperty(int index, const QScriptValue &v) return writeVarProperty(index - propOffset, v); } +bool QDeclarativeVMEMetaObject::aliasTarget(int index, QObject **target, int *coreIndex, int *valueTypeIndex) const +{ + Q_ASSERT(index >= propOffset + metaData->propertyCount); + + *target = 0; + *coreIndex = -1; + *valueTypeIndex = -1; + + if (!ctxt) + return false; + + QDeclarativeVMEMetaData::AliasData *d = metaData->aliasData() + (index - propOffset - metaData->propertyCount); + QDeclarativeContext *context = ctxt->asQDeclarativeContext(); + QDeclarativeContextPrivate *ctxtPriv = QDeclarativeContextPrivate::get(context); + + *target = ctxtPriv->data->idValues[d->contextIdx].data(); + if (!*target) + return false; + + if (d->isObjectAlias()) { + } else if (d->isValueTypeAlias()) { + *coreIndex = d->propertyIndex(); + *valueTypeIndex = d->valueTypeIndex(); + } else { + *coreIndex = d->propertyIndex(); + } + + return true; +} + void QDeclarativeVMEMetaObject::connectAlias(int aliasId) { if (!aConnected.testBit(aliasId)) { diff --git a/src/declarative/qml/qdeclarativevmemetaobject_p.h b/src/declarative/qml/qdeclarativevmemetaobject_p.h index 5134763..7b6b410 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject_p.h +++ b/src/declarative/qml/qdeclarativevmemetaobject_p.h @@ -138,6 +138,7 @@ public: QDeclarativeCompiledData *compiledData); ~QDeclarativeVMEMetaObject(); + bool aliasTarget(int index, QObject **target, int *coreIndex, int *valueTypeIndex) const; void registerInterceptor(int index, int valueIndex, QDeclarativePropertyValueInterceptor *interceptor); QScriptValue vmeMethod(int index); int vmeMethodLineNumber(int index); @@ -146,6 +147,7 @@ public: void setVMEProperty(int index, const QScriptValue &); void connectAliasSignal(int index); + protected: virtual int metaCall(QMetaObject::Call _c, int _id, void **_a); diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsAssignCorrectlyType.qml b/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsAssignCorrectlyType.qml new file mode 100644 index 0000000..0eda67d --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsAssignCorrectlyType.qml @@ -0,0 +1,9 @@ +import QtQuick 1.0 + +QtObject { + id: root + + property real realProperty + property alias aliasProperty: root.realProperty +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType.qml b/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType.qml new file mode 100644 index 0000000..f539fb6 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType.qml @@ -0,0 +1,14 @@ +import QtQuick 1.0 +import Qt.test 1.0 + +MyTypeObject { + id: root + + property int data: 7 + + property int targetProperty: root.data * 43 - root.data + property alias aliasProperty: root.targetProperty + + pointProperty: Qt.point(data, data); + property alias pointAliasProperty: root.pointProperty +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType3.qml b/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType3.qml new file mode 100644 index 0000000..a4b0527 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/AliasBindingsOverrideTargetType3.qml @@ -0,0 +1,9 @@ +import QtQuick 1.0 + +QtObject { + id: root + + property int testProperty + property alias aliasProperty: root.testProperty +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsAssignCorrectly.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsAssignCorrectly.qml new file mode 100644 index 0000000..f0808c4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsAssignCorrectly.qml @@ -0,0 +1,59 @@ +import QtQuick 1.0 + +Item { + id: root + + property bool test: false + + property real testData: 9 + property real testData2: 9 + + states: State { + name: "change" + PropertyChanges { + target: myType + realProperty: if (testData2 > 3) 9; else 11; + } + } + + AliasBindingsAssignCorrectlyType { + id: myType + + aliasProperty: if (testData > 3) 14; else 12; + } + + Component.onCompleted: { + // Check original binding works + if (myType.aliasProperty != 14) return; + + testData = 2; + if (myType.aliasProperty != 12) return; + + // Change binding indirectly by modifying the "realProperty" + root.state = "change"; + if (myType.aliasProperty != 9) return; + + // Check the new binding works + testData2 = 1; + if (myType.aliasProperty != 11) return; + + // Try and trigger the old binding (that should have been removed) + testData = 6; + if (myType.aliasProperty != 11) return; + + // Restore the original binding + root.state = ""; + if (myType.aliasProperty != 14) return; + + // Test the restored binding works + testData = 0; + if (myType.aliasProperty != 12) return; + + // Test the old binding isn't somehow hanging around and still in effect + testData2 = 13; + if (myType.aliasProperty != 12) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.2.qml new file mode 100644 index 0000000..4f07cbf --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.2.qml @@ -0,0 +1,29 @@ +import QtQuick 1.0 + +Item { + id: me + property bool test: false + + property int value: 9 + + AliasBindingsOverrideTargetType { + id: aliasType + pointAliasProperty.x: me.value + } + + Component.onCompleted: { + if (aliasType.pointAliasProperty.x != 9) return; + + me.value = 11; + if (aliasType.pointAliasProperty.x != 11) return; + + aliasType.data = 8; + if (aliasType.pointAliasProperty.x != 11) return; + + me.value = 4; + if (aliasType.pointAliasProperty.x != 4) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.3.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.3.qml new file mode 100644 index 0000000..937ae91 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.3.qml @@ -0,0 +1,24 @@ +import QtQuick 1.0 + +Item { + id: root + property bool test: false; + + property int value1: 10 + property int value2: 11 + + AliasBindingsOverrideTargetType3 { + id: obj + + testProperty: root.value1 * 9 + aliasProperty: root.value2 * 10 + } + + Component.onCompleted: { + if (obj.testProperty != 110) return; + if (obj.aliasProperty != 110) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.qml new file mode 100644 index 0000000..a01dc5b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasBindingsOverrideTarget.qml @@ -0,0 +1,28 @@ +import QtQuick 1.0 + +Item { + id: me + property bool test: false + + property int value: 9 + + AliasBindingsOverrideTargetType { + id: aliasType + aliasProperty: me.value + } + + Component.onCompleted: { + if (aliasType.aliasProperty != 9) return; + + me.value = 11; + if (aliasType.aliasProperty != 11) return; + + aliasType.data = 8; + if (aliasType.aliasProperty != 11) return; + + me.value = 4; + if (aliasType.aliasProperty != 4) return; + + test = true; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.2.qml new file mode 100644 index 0000000..5bf9f6a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.2.qml @@ -0,0 +1,29 @@ +import QtQuick 1.0 + +Item { + id: me + property bool test: false + + property int value: 9 + + AliasBindingsOverrideTargetType { + id: aliasType + } + + Component.onCompleted: { + if (aliasType.aliasProperty != 294) return; + + aliasType.data = 8; + if (aliasType.aliasProperty != 336) return; + + aliasType.aliasProperty = 4; + if (aliasType.aliasProperty != 4) return; + + aliasType.data = 7; + if (aliasType.aliasProperty != 4) return; + + test = true; + } +} + + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.3.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.3.qml new file mode 100644 index 0000000..a23ad4a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.3.qml @@ -0,0 +1,23 @@ +import QtQuick 1.0 + +Item { + id: me + property bool test: false + + property int value: 9 + + AliasBindingsOverrideTargetType { + id: aliasType + pointAliasProperty.x: 9 + } + + Component.onCompleted: { + if (aliasType.pointAliasProperty.x != 9) return; + + aliasType.data = 8; + if (aliasType.pointAliasProperty.x != 9) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.qml b/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.qml new file mode 100644 index 0000000..ac20371 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/aliasWritesOverrideBindings.qml @@ -0,0 +1,23 @@ +import QtQuick 1.0 + +Item { + id: me + property bool test: false + + property int value: 9 + + AliasBindingsOverrideTargetType { + id: aliasType + aliasProperty: 11 + } + + Component.onCompleted: { + if (aliasType.aliasProperty != 11) return; + + aliasType.data = 8; + if (aliasType.aliasProperty != 11) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/writeRemovesBinding.qml b/tests/auto/declarative/qdeclarativeecmascript/data/writeRemovesBinding.qml new file mode 100644 index 0000000..035f037 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/writeRemovesBinding.qml @@ -0,0 +1,46 @@ +import QtQuick 1.0 + +QtObject { + id: root + + property bool test: false + + property real data: 9 + property real binding: data + + property alias aliasProperty: root.aliasBinding + property real aliasBinding: data + + Component.onCompleted: { + // Non-aliased properties + if (binding != 9) return; + + data = 11; + if (binding != 11) return; + + binding = 6; + if (binding != 6) return; + + data = 3; + if (binding != 6) return; + + + // Writing through an aliased property + if (aliasProperty != 3) return; + if (aliasBinding != 3) return; + + data = 4; + if (aliasProperty != 4) return; + if (aliasBinding != 4) return; + + aliasProperty = 19; + if (aliasProperty != 19) return; + if (aliasBinding != 19) return; + + data = 5; + if (aliasProperty != 19) return; + if (aliasBinding != 19) return; + + test = true; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 652404c..8658217 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -164,6 +164,10 @@ private slots: void in(); void sharedAttachedObject(); void objectName(); + void writeRemovesBinding(); + void aliasBindingsAssignCorrectly(); + void aliasBindingsOverrideTarget(); + void aliasWritesOverrideBindings(); void include(); @@ -2671,6 +2675,97 @@ void tst_qdeclarativeecmascript::objectName() delete o; } +void tst_qdeclarativeecmascript::writeRemovesBinding() +{ + QDeclarativeComponent component(&engine, TEST_FILE("writeRemovesBinding.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; +} + +// Test bindings assigned to alias properties actually assign to the alias' target +void tst_qdeclarativeecmascript::aliasBindingsAssignCorrectly() +{ + QDeclarativeComponent component(&engine, TEST_FILE("aliasBindingsAssignCorrectly.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; +} + +// Test bindings assigned to alias properties override a binding on the target (QTBUG-13719) +void tst_qdeclarativeecmascript::aliasBindingsOverrideTarget() +{ + { + QDeclarativeComponent component(&engine, TEST_FILE("aliasBindingsOverrideTarget.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("aliasBindingsOverrideTarget.2.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("aliasBindingsOverrideTarget.3.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; + } +} + +// Test that writes to alias properties override bindings on the alias target (QTBUG-13719) +void tst_qdeclarativeecmascript::aliasWritesOverrideBindings() +{ + { + QDeclarativeComponent component(&engine, TEST_FILE("aliasWritesOverrideBindings.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("aliasWritesOverrideBindings.2.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("aliasWritesOverrideBindings.3.qml")); + QObject *o = component.create(); + QVERIFY(o != 0); + + QCOMPARE(o->property("test").toBool(), true); + + delete o; + } +} + QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" diff --git a/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp b/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp index db1f191..4470d65 100644 --- a/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp +++ b/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp @@ -458,6 +458,7 @@ void tst_qdeclarativeinstruction::dump() i.type = QDeclarativeInstruction::FetchValueType; i.fetchValue.property = 34; i.fetchValue.type = 6; + i.fetchValue.bindingSkipList = 7; data->bytecode << i; } @@ -538,7 +539,7 @@ void tst_qdeclarativeinstruction::dump() << "Index\tLine\tOperation\t\tData1\tData2\tData3\tComments" << "-------------------------------------------------------------------------------" << "0\t\t0\tINIT\t\t\t0\t3\t-1\t-1" - << "1\t\t1\tCREATE\t\t\t0\t\t\t\"Test\"" + << "1\t\t1\tCREATE\t\t\t0\t-1\t\t\"Test\"" << "2\t\t2\tSETID\t\t\t0\t\t\t\"testId\"" << "3\t\t3\tSET_DEFAULT" << "4\t\t4\tCREATE_COMPONENT\t3" @@ -578,7 +579,7 @@ void tst_qdeclarativeinstruction::dump() << "38\t\t40\tFETCH_ATTACHED\t\t23" << "39\t\t42\tFETCH_QLIST\t\t32" << "40\t\t43\tFETCH\t\t\t33" - << "41\t\t44\tFETCH_VALUE\t\t34\t6" + << "41\t\t44\tFETCH_VALUE\t\t34\t6\t7" << "42\t\t45\tPOP" << "43\t\t46\tPOP_QLIST" << "44\t\t47\tPOP_VALUE\t\t35\t8" diff --git a/tests/auto/declarative/qdeclarativeproperty/data/aliasPropertyBindings.qml b/tests/auto/declarative/qdeclarativeproperty/data/aliasPropertyBindings.qml new file mode 100644 index 0000000..a253a58 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeproperty/data/aliasPropertyBindings.qml @@ -0,0 +1,19 @@ +import QtQuick 1.0 + +Item { + id: root + + property real test: 9 + property real test2: 3 + + property real realProperty: test * test + test + property alias aliasProperty: root.realProperty + + states: State { + name: "switch" + PropertyChanges { + target: root + aliasProperty: 32 * test2 + } + } +} diff --git a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp index 0ca0e03..3cc71bb 100644 --- a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp +++ b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp @@ -132,6 +132,7 @@ private slots: // Bugs void crashOnValueProperty(); + void aliasPropertyBindings(); void copy(); private: @@ -1308,6 +1309,74 @@ void tst_qdeclarativeproperty::crashOnValueProperty() QCOMPARE(p.read(), QVariant(20)); } +// QTBUG-13719 +void tst_qdeclarativeproperty::aliasPropertyBindings() +{ + QDeclarativeComponent component(&engine, TEST_FILE("aliasPropertyBindings.qml")); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("realProperty").toReal(), 90.); + QCOMPARE(object->property("aliasProperty").toReal(), 90.); + + object->setProperty("test", 10); + + QCOMPARE(object->property("realProperty").toReal(), 110.); + QCOMPARE(object->property("aliasProperty").toReal(), 110.); + + QDeclarativeProperty realProperty(object, QLatin1String("realProperty")); + QDeclarativeProperty aliasProperty(object, QLatin1String("aliasProperty")); + + // Check there is a binding on these two properties + QVERIFY(QDeclarativePropertyPrivate::binding(realProperty) != 0); + QVERIFY(QDeclarativePropertyPrivate::binding(aliasProperty) != 0); + + // Check that its the same binding on these two properties + QCOMPARE(QDeclarativePropertyPrivate::binding(realProperty), + QDeclarativePropertyPrivate::binding(aliasProperty)); + + // Change the binding + object->setProperty("state", QString("switch")); + + QVERIFY(QDeclarativePropertyPrivate::binding(realProperty) != 0); + QVERIFY(QDeclarativePropertyPrivate::binding(aliasProperty) != 0); + QCOMPARE(QDeclarativePropertyPrivate::binding(realProperty), + QDeclarativePropertyPrivate::binding(aliasProperty)); + + QCOMPARE(object->property("realProperty").toReal(), 96.); + QCOMPARE(object->property("aliasProperty").toReal(), 96.); + + // Check the old binding really has not effect any more + object->setProperty("test", 4); + + QCOMPARE(object->property("realProperty").toReal(), 96.); + QCOMPARE(object->property("aliasProperty").toReal(), 96.); + + object->setProperty("test2", 9); + + QCOMPARE(object->property("realProperty").toReal(), 288.); + QCOMPARE(object->property("aliasProperty").toReal(), 288.); + + // Revert + object->setProperty("state", QString("")); + + QVERIFY(QDeclarativePropertyPrivate::binding(realProperty) != 0); + QVERIFY(QDeclarativePropertyPrivate::binding(aliasProperty) != 0); + QCOMPARE(QDeclarativePropertyPrivate::binding(realProperty), + QDeclarativePropertyPrivate::binding(aliasProperty)); + + QCOMPARE(object->property("realProperty").toReal(), 20.); + QCOMPARE(object->property("aliasProperty").toReal(), 20.); + + object->setProperty("test2", 3); + + QCOMPARE(object->property("realProperty").toReal(), 20.); + QCOMPARE(object->property("aliasProperty").toReal(), 20.); + + delete object; +} + void tst_qdeclarativeproperty::copy() { PropertyObject object; diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType.qml new file mode 100644 index 0000000..f625d08 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + property bool boldProperty: false + + font.bold: boldProperty +} diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType4.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType4.qml new file mode 100644 index 0000000..0bdccce --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType4.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + property int dataProperty: 7 + + point: Qt.point(dataProperty, dataProperty) +} diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType5.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType5.qml new file mode 100644 index 0000000..151c499 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/BindingsSpliceCorrectlyType5.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + property int dataProperty: 7 + + point.x: dataProperty +} diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.1.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.1.qml new file mode 100644 index 0000000..7012143 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.1.qml @@ -0,0 +1,29 @@ +import Test 1.0 +import QtQuick 1.0 + +BindingsSpliceCorrectlyType { + property bool test: false + + property bool italicProperty: false + + font.italic: italicProperty + + Component.onCompleted: { + // Test initial state + if (font.italic != false) return; + if (font.bold != false) return; + + // Test italic binding worked + italicProperty = true; + + if (font.italic != true) return; + if (font.bold != false) return; + + // Test bold binding worked + boldProperty = true; + if (font.italic != true) return; + if (font.bold != true) return; + + test = true; + } +} diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.2.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.2.qml new file mode 100644 index 0000000..69dbcab --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.2.qml @@ -0,0 +1,31 @@ +import Test 1.0 +import QtQuick 1.0 + +BindingsSpliceCorrectlyType { + property bool test: false + + property bool italicProperty: false + + font.italic: italicProperty + font.bold: false + + Component.onCompleted: { + // Test initial state + if (font.italic != false) return; + if (font.bold != false) return; + + // Test italic binding worked + italicProperty = true; + + if (font.italic != true) return; + if (font.bold != false) return; + + // Test bold binding was removed by constant write + boldProperty = true; + if (font.italic != true) return; + if (font.bold != false) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.3.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.3.qml new file mode 100644 index 0000000..669feb9 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.3.qml @@ -0,0 +1,36 @@ +import Test 1.0 +import QtQuick 1.0 + +BindingsSpliceCorrectlyType { + property bool test: false + + property bool italicProperty: false + property bool boldProperty2: false + + font.italic: italicProperty + font.bold: boldProperty2 + + Component.onCompleted: { + // Test initial state + if (font.italic != false) return; + if (font.bold != false) return; + + // Test italic binding worked + italicProperty = true; + + if (font.italic != true) return; + if (font.bold != false) return; + + // Test bold binding was overridden + boldProperty = true; + if (font.italic != true) return; + if (font.bold != false) return; + + boldProperty2 = true; + if (font.italic != true) return; + if (font.bold != true) return; + + test = true; + } +} + diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.4.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.4.qml new file mode 100644 index 0000000..f28584f --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.4.qml @@ -0,0 +1,27 @@ +import Test 1.0 +import QtQuick 1.0 + +BindingsSpliceCorrectlyType4 { + property bool test: false + + property int dataProperty2: 8 + + point.x: dataProperty2 + + Component.onCompleted: { + if (point.x != 8) return; + if (point.y != 4) return; + + dataProperty = 9; + + if (point.x != 8) return; + if (point.y != 4) return; + + dataProperty2 = 13; + + if (point.x != 13) return; + if (point.y != 4) return; + + test = true; + } +} diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.5.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.5.qml new file mode 100644 index 0000000..1214c83 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevaluetypes/data/bindingsSpliceCorrectly.5.qml @@ -0,0 +1,27 @@ +import Test 1.0 +import QtQuick 1.0 + +BindingsSpliceCorrectlyType5 { + property bool test: false + + property int dataProperty2: 8 + + point: Qt.point(dataProperty2, dataProperty2); + + Component.onCompleted: { + if (point.x != 8) return; + if (point.y != 8) return; + + dataProperty = 9; + + if (point.x != 8) return; + if (point.y != 8) return; + + dataProperty2 = 13; + + if (point.x != 13) return; + if (point.y != 13) return; + + test = true; + } +} diff --git a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp index a4819f3..c243a75 100644 --- a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp +++ b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp @@ -94,6 +94,7 @@ private slots: void conflictingBindings(); void returnValues(); void varAssignment(); + void bindingsSpliceCorrectly(); private: QDeclarativeEngine engine; @@ -942,6 +943,61 @@ void tst_qdeclarativevaluetypes::varAssignment() delete object; } +// Test bindings splice together correctly +void tst_qdeclarativevaluetypes::bindingsSpliceCorrectly() +{ + { + QDeclarativeComponent component(&engine, TEST_FILE("bindingsSpliceCorrectly.1.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test").toBool(), true); + + delete object; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("bindingsSpliceCorrectly.2.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test").toBool(), true); + + delete object; + } + + + { + QDeclarativeComponent component(&engine, TEST_FILE("bindingsSpliceCorrectly.3.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test").toBool(), true); + + delete object; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("bindingsSpliceCorrectly.4.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test").toBool(), true); + + delete object; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("bindingsSpliceCorrectly.5.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test").toBool(), true); + + delete object; + } +} + QTEST_MAIN(tst_qdeclarativevaluetypes) #include "tst_qdeclarativevaluetypes.moc" -- cgit v0.12 From 3b4ff89731d5e63bba91d91c0256626f92538e9d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 29 Nov 2010 12:32:56 +0200 Subject: Add NetworkServices capability automatically for network apps Any application linking to QtNetwork, QtWebKit, or QtDeclarative is likely to utilize network, so add NetworkServices capabiltity for these applications by default in Symbian. Also increased the default epocheap maximum size for these applications. Task-number: QTBUG-14472 Reviewed-by: Janne Koskinen --- doc/src/platforms/platform-notes.qdoc | 13 +++++++++---- mkspecs/features/qt_functions.prf | 15 +++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc index 9c5f3c8..177d3f6 100644 --- a/doc/src/platforms/platform-notes.qdoc +++ b/doc/src/platforms/platform-notes.qdoc @@ -737,18 +737,23 @@ \o \c PowerMgmt if QProcess::kill(...) or QProcess::terminate(...) is called. \row \o QtCore \o \c AllFiles when \l{http://developer.symbian.org/wiki/index.php/Capabilities_%28Symbian_Signed%29/AllFiles_Capability}{accessing specific areas.} + \row \o QtDeclarative + \o \c NetworkServices is automatically added for this module. + \row \o QtNetwork + \o \c NetworkServices is automatically added for this module. \row \o QtNetwork - \o \c NetworkServices is basically always required for this module. \o \c ReadUserData is required to include all the phone's SSL certificates in the system's default CA certificate list (for example those added by the user or stored in the SIM card), without this capability only the CA certs built into the phone are used. \row \o QtMultiMedia \o \c UserEnvironment if QAudioInput is used. + \row \o QtWebkit + \o \c NetworkServices is automatically added for this module. \endtable - Note that some modules rely on other modules. If your application uses - QtXmlPatterns, QtWebkit or QtScript it may still require \c NetworkServices - as these modules rely on QtNetwork to go online. + \note Some modules rely on other modules. E.g. QtWebkit and QtDeclarative + depend on QtNetwork and therefore any application that + depends on these modules is also likely to need \c NetworkServices capability. For more information see the documentation of the individual Qt classes. If a class does not mention Symbian capabilities, it requires none. diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index afc708a..59d49c6 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -49,16 +49,23 @@ defineTest(qtAddLibrary) { isEqual(LIB_NAME, QtGui) { # Needed for #include because qs60mainapplication.h includes aknapp.h INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE - } - isEqual(LIB_NAME, QtWebKit) { + } else:isEqual(LIB_NAME, QtWebKit) { # Needed for because relative inclusion problem in toolchain INCLUDEPATH *= $$QMAKE_INCDIR_QT/QtXmlPatterns INCLUDEPATH *= $$QMAKE_INCDIR_QT/QtNetwork - } - isEqual(LIB_NAME, QtXmlPatterns) { + TARGET.CAPABILITY *= NetworkServices + isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 + } else:isEqual(LIB_NAME, QtXmlPatterns) { # Needed for #include because relative inclusion problem in toolchain INCLUDEPATH *= $$QMAKE_INCDIR_QT/QtNetwork + } else:isEqual(LIB_NAME, QtNetwork) { + TARGET.CAPABILITY *= NetworkServices + } else:isEqual(LIB_NAME, QtDeclarative) { + TARGET.CAPABILITY *= NetworkServices + isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } + export(TARGET.EPOCHEAPSIZE) + export(TARGET.CAPABILITY) } isEmpty(LINKAGE) { if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { -- cgit v0.12 From b5651eacb88739ab4c77d6fe220ec0fd98091849 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 29 Nov 2010 16:13:52 +0200 Subject: Updated language map in localize_deployment.prf Added missing Symbian language codes for which an Qt equivalent was available. Some codes were mapped to language/country pairs. Task-number: QTBUG-15293 Reviewed-by: Janne Koskinen --- mkspecs/common/symbian/symbian.conf | 6 ++++- mkspecs/features/symbian/localize_deployment.prf | 29 +++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index f8586b0..11907cf 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -139,7 +139,11 @@ SYMBIAN_SUPPORTED_LANGUAGES = \ mr mo mn nb pl pt pa ro ru sr \ si sk sl so es sw sv tl ta te \ th bo ti tr tk uk ur vi cy zu \ - nn + nn eu zh gl fa st en_US fr_BE \ + pt_BR en_CA fr_CA el_CY tr_CY \ + en_TW en_HK en_CN en_JP en_TH \ + sv_FI zh_HK es_419 en_ZA fr_CH \ + de_CH it_CH zh_TW # These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins diff --git a/mkspecs/features/symbian/localize_deployment.prf b/mkspecs/features/symbian/localize_deployment.prf index 5f52dbc..26a254b 100644 --- a/mkspecs/features/symbian/localize_deployment.prf +++ b/mkspecs/features/symbian/localize_deployment.prf @@ -3,11 +3,13 @@ SYMBIAN_LANG.sq = 35 #Albanian SYMBIAN_LANG.am = 36 #Amharic SYMBIAN_LANG.ar = 37 #Arabic SYMBIAN_LANG.hy = 38 #Armenian +SYMBIAN_LANG.eu = 102 #Basque SYMBIAN_LANG.bn = 41 #Bengali SYMBIAN_LANG.bg = 42 #Bulgarian SYMBIAN_LANG.my = 43 #Burmese SYMBIAN_LANG.be = 40 #Byelorussian SYMBIAN_LANG.ca = 44 #Catalan +SYMBIAN_LANG.zh = 31 #Chinese SYMBIAN_LANG.hr = 45 #Croatian SYMBIAN_LANG.cs = 25 #Czech SYMBIAN_LANG.da = 07 #Danish @@ -17,6 +19,7 @@ SYMBIAN_LANG.et = 49 #Estonian SYMBIAN_LANG.fi = 09 #Finnish SYMBIAN_LANG.fr = 02 #French SYMBIAN_LANG.gd = 52 #Gaelic +SYMBIAN_LANG.gl = 103 #Galician SYMBIAN_LANG.ka = 53 #Georgian SYMBIAN_LANG.de = 03 #German SYMBIAN_LANG.el = 54 #Greek @@ -42,6 +45,8 @@ SYMBIAN_LANG.mr = 72 #Marathi SYMBIAN_LANG.mo = 73 #Moldavian SYMBIAN_LANG.mn = 74 #Mongolian SYMBIAN_LANG.nb = 08 #Norwegian +SYMBIAN_LANG.nn = 75 #Nynorsk +SYMBIAN_LANG.fa = 50 #Persian SYMBIAN_LANG.pl = 27 #Polish SYMBIAN_LANG.pt = 13 #Portuguese SYMBIAN_LANG.pa = 77 #Punjabi @@ -52,6 +57,7 @@ SYMBIAN_LANG.si = 80 #Singhalese SYMBIAN_LANG.sk = 26 #Slovak SYMBIAN_LANG.sl = 28 #Slovenian SYMBIAN_LANG.so = 81 #Somali +SYMBIAN_LANG.st = 101 #South Sotho/Sesotho SYMBIAN_LANG.es = 04 #Spanish SYMBIAN_LANG.sw = 84 #Swahili SYMBIAN_LANG.sv = 06 #Swedish @@ -68,7 +74,28 @@ SYMBIAN_LANG.ur = 94 #Urdu SYMBIAN_LANG.vi = 96 #Vietnamese SYMBIAN_LANG.cy = 97 #Welsh SYMBIAN_LANG.zu = 98 #Zulu -SYMBIAN_LANG.nn = 75 #Nynorsk + +# Regional dialects +SYMBIAN_LANG.en_US = 10 #American English +SYMBIAN_LANG.fr_BE = 21 #Belgian French +SYMBIAN_LANG.pt_BR = 76 #Brazilian Portuguese +SYMBIAN_LANG.en_CA = 46 #Canadian English +SYMBIAN_LANG.fr_CA = 51 #Canadian French +SYMBIAN_LANG.el_CY = 55 #Cyprus Greek +SYMBIAN_LANG.tr_CY = 91 #Cyprus Turkish +SYMBIAN_LANG.en_TW = 157 #English as appropriate for use in Taiwan +SYMBIAN_LANG.en_HK = 158 #English as appropriate for use in Hong Kong +SYMBIAN_LANG.en_CN = 159 #English as appropriate for use in the Peoples Republic of China +SYMBIAN_LANG.en_JP = 160 #English as appropriate for use in Japan +SYMBIAN_LANG.en_TH = 161 #English as appropriate for use in Thailand +SYMBIAN_LANG.sv_FI = 85 #Finland Swedish +SYMBIAN_LANG.zh_HK = 30 #HongKong Chinese +SYMBIAN_LANG.es_419 = 83 #Latin American Spanish +SYMBIAN_LANG.en_ZA = 48 #South African English +SYMBIAN_LANG.fr_CH = 11 #Swiss French +SYMBIAN_LANG.de_CH = 12 #Swiss German +SYMBIAN_LANG.it_CH = 61 #Swiss Italian +SYMBIAN_LANG.zh_TW = 29 #Taiwan Chinese isEmpty(SYMBIAN_MATCHED_LANGUAGES) { matchSymbianLanguages() -- cgit v0.12 From 8e6d4283edc5fcf04a1a624a23e8fc1a9aa7c2d4 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 29 Nov 2010 19:08:47 +0100 Subject: Removed some new warnigs. --- src/gui/styles/qs60style_s60.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 7b75d40..92f53ff 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -698,7 +698,7 @@ void QS60StylePrivate::deleteStoredSettings() { QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); settings.beginGroup(QLatin1String("QS60Style")); - settings.remove(""); + settings.remove(QString()); settings.endGroup(); } @@ -717,7 +717,6 @@ QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const QT_TRAP_THROWING( CRepository *themeRepository = CRepository::NewLC(personalisationUID); if (themeRepository) { - static const TInt KThemePkgIDDesSize = 23; //size of the stored theme package ID TBuf<32> value; //themeID is currently max of 8 + 1 + 8 characters, but lets have some extra space const TUint32 key = 0x00000002; //active theme key in the repository error = themeRepository->Get(key, value); @@ -747,7 +746,7 @@ QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const return storedColor; } } - settings.remove(""); //if color was invalid, or theme has been changed, just delete all stored settings + settings.remove(QString()); //if color was invalid, or theme has been changed, just delete all stored settings } } #endif -- cgit v0.12 From 3aabc92c72bdd9f7e7bc67dd22dae203033e958a Mon Sep 17 00:00:00 2001 From: Rhys Weatherley Date: Tue, 30 Nov 2010 08:33:25 +1000 Subject: Fix resource leak in QEgl::getCompatibleVisualld() Contributed patch. Task-number: QT-4335 Reviewed-by: Daniel Pope --- src/gui/egl/qegl_x11.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/egl/qegl_x11.cpp b/src/gui/egl/qegl_x11.cpp index 15cc109..29415ed 100644 --- a/src/gui/egl/qegl_x11.cpp +++ b/src/gui/egl/qegl_x11.cpp @@ -165,8 +165,10 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config) if (chosenVisualInfo) { // Skip size checks if implementation supports non-matching visual // and config (http://bugreports.qt.nokia.com/browse/QTBUG-9444). - if (QEgl::hasExtension("EGL_NV_post_convert_rounding")) + if (QEgl::hasExtension("EGL_NV_post_convert_rounding")) { + XFree(chosenVisualInfo); return visualId; + } int visualRedSize = countBits(chosenVisualInfo->red_mask); int visualGreenSize = countBits(chosenVisualInfo->green_mask); -- cgit v0.12 From d1dbc94fad945e7a80ce0ca0d17b713d3685dc22 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 30 Nov 2010 09:53:46 +1000 Subject: Add license to example code --- doc/src/snippets/declarative/keynavigation.qml | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/doc/src/snippets/declarative/keynavigation.qml b/doc/src/snippets/declarative/keynavigation.qml index d72bb3a..e11cdf1 100644 --- a/doc/src/snippets/declarative/keynavigation.qml +++ b/doc/src/snippets/declarative/keynavigation.qml @@ -1,3 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ //![0] import QtQuick 1.0 -- cgit v0.12 From 067d63d03556d361b13f5d9fb9d41b78294fc04c Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Tue, 30 Nov 2010 11:08:48 +1000 Subject: Remove expect-fails from passing tests --- .../declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 8658217..14755f32 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -745,11 +745,9 @@ void tst_qdeclarativeecmascript::constantsOverrideBindings() QVERIFY(object != 0); QCOMPARE(object->property("c1").toInt(), 0); - QEXPECT_FAIL("", "QTBUG-13719", Continue); QCOMPARE(object->property("c3").toInt(), 10); object->setProperty("c1", QVariant(9)); QCOMPARE(object->property("c1").toInt(), 9); - QEXPECT_FAIL("", "QTBUG-13719", Continue); QCOMPARE(object->property("c3").toInt(), 10); } } -- cgit v0.12 From 47914053d93abe291ea85ad46e00fa8a6dc7a702 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 30 Nov 2010 11:55:51 +1000 Subject: Link to List Properties docs from QML Intro page Task-number: QTBUG-15606 --- doc/src/declarative/qdeclarativeintro.qdoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc index 1d807e3..a3773fd 100644 --- a/doc/src/declarative/qdeclarativeintro.qdoc +++ b/doc/src/declarative/qdeclarativeintro.qdoc @@ -233,6 +233,10 @@ Image { } \endcode +Items in the list can be accessed by index. See the \l{list}{list type} documentation +for more details about list properties and their available operations. + + \section2 Default properties Each object type can specify one of its list or object properties as its default property. -- cgit v0.12 From e960316477982d21061ca8894109f1f8426b2dec Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 30 Nov 2010 12:19:18 +1000 Subject: Fix id documentation Task-number: QTBUG-15604 --- doc/src/declarative/qdeclarativeintro.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc index a3773fd..4e41fda 100644 --- a/doc/src/declarative/qdeclarativeintro.qdoc +++ b/doc/src/declarative/qdeclarativeintro.qdoc @@ -186,7 +186,7 @@ Item { \section3 The \c id property Each object can be given a special unique property called an \e id. No other object within the -same \l{QML Documents}{QML document} can have the same \c id value. Assigning an id enables the object +same QML component (see \l{QML Documents}) can have the same \c id value. Assigning an id enables the object to be referred to by other objects and scripts. The first Rectangle element below has an \e id, "myRect". The second Rectangle element defines its -- cgit v0.12 From 282441f72a7704aadc5525a360430d0c3d49aea6 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 30 Nov 2010 11:37:09 +1000 Subject: Don't draw null pixmap in QDeclarativeImage paint function Task-number: QTBUG-15690 Reviewed-by: Martin Jones --- .../graphicsitems/qdeclarativeimage.cpp | 2 +- .../qdeclarativeimage/tst_qdeclarativeimage.cpp | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp index 3b08a9b..aa74716 100644 --- a/src/declarative/graphicsitems/qdeclarativeimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp @@ -461,7 +461,7 @@ QRectF QDeclarativeImage::boundingRect() const void QDeclarativeImage::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *) { Q_D(QDeclarativeImage); - if (d->pix.isNull()) + if (d->pix.pixmap().isNull() ) return; bool oldAA = p->testRenderHint(QPainter::Antialiasing); diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index bf779ad..447210d 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -87,6 +87,7 @@ private slots: void noLoading(); void paintedWidthHeight(); void sourceSize_QTBUG_14303(); + void nullPixmapPaint(); private: template @@ -540,6 +541,35 @@ void tst_qdeclarativeimage::sourceSize_QTBUG_14303() QTRY_COMPARE(sourceSizeSpy.count(), 2); } +static int numberOfWarnings = 0; +static void checkWarnings(QtMsgType, const char *) +{ + numberOfWarnings++; +} + +// QTBUG-15690 +void tst_qdeclarativeimage::nullPixmapPaint() +{ + QString componentStr = QString("import QtQuick 1.0\nImage { width: 10; height:10; fillMode: Image.PreserveAspectFit; source: \"") + + SERVER_ADDR + QString("/no-such-file.png\" }"); + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeImage *image = qobject_cast(component.create()); + + QTRY_VERIFY(image != 0); + + QtMsgHandler previousMsgHandler = qInstallMsgHandler(checkWarnings); + + QPixmap pm(100, 100); + QPainter p(&pm); + + // used to print "QTransform::translate with NaN called" + image->paint(&p, 0, 0); + qInstallMsgHandler(previousMsgHandler); + QVERIFY(numberOfWarnings == 0); + delete image; +} + /* Find an item with the specified objectName. If index is supplied then the item must also evaluate the {index} expression equal to index -- cgit v0.12 From efc41eaa7224c33b5b5af7eae27c93c6748255bc Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 30 Nov 2010 13:48:30 +1000 Subject: Document which header to include for qmlRegister functions. Task-number: QTBUG-15630 Reviewed-by: Bea Lam --- doc/src/declarative/extending.qdoc | 2 ++ doc/src/declarative/qtdeclarative.qdoc | 16 ++++++++++++++++ .../declarative/qtbinding/newelements/imageviewer.h | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index 5c1b977..740f7d1 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -75,6 +75,8 @@ constructor. \endquotation +#include to use qmlRegisterType(). + Types can be registered by libraries, application code, or by plugins (see QDeclarativeExtensionPlugin). diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc index f2b2032..b0c6e06 100644 --- a/doc/src/declarative/qtdeclarative.qdoc +++ b/doc/src/declarative/qtdeclarative.qdoc @@ -57,6 +57,8 @@ \relates QDeclarativeEngine Equivalent to \c Q_DECLARE_METATYPE(TYPE) and \c Q_DECLARE_METATYPE(QDeclarativeListProperty) + + #include to use this macro. */ /*! @@ -68,6 +70,8 @@ Current the only supported type info is \c QML_HAS_ATTACHED_PROPERTIES which declares that the \a Type supports \l {Attached Properties}. + + #include to use this macro. */ @@ -86,6 +90,10 @@ "com.mycompany.qmlcomponents": \code + #include + + ... + qmlRegisterType("com.mycompany.qmlcomponents", 1, 0, "Slider"); \endcode @@ -119,6 +127,8 @@ Returns the QML type id. + #include to use this function. + \sa qmlRegisterTypeNotAvailable() */ @@ -154,6 +164,8 @@ Without this, a generic "Game is not a type" message would be given. + #include to use this function. + \sa qmlRegisterUncreatableType() */ @@ -166,6 +178,8 @@ system. Instances of this type cannot be created from the QML system. + #include to use this function. + Returns the QML type id. */ @@ -176,5 +190,7 @@ This template function registers the C++ type in the QML system under the name \a typeName. + #include to use this function. + Returns the QML type id. */ diff --git a/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h b/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h index fd9db5e..cec9757 100644 --- a/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h +++ b/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h @@ -37,10 +37,10 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ +//![0] #include #include -//![0] class ImageViewer : public QDeclarativeItem { Q_OBJECT -- cgit v0.12 From 1de080649c6b810ed6bc05e883795687ecde1f3d Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Fri, 29 Oct 2010 13:05:16 +1000 Subject: Fix Browser.qml warnings Task-number: QTBUG-15720 Reviewed-by: Martin Jones --- src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp | 2 +- .../qdeclarativeviewer/tst_qdeclarativeviewer.cpp | 12 ++++++++++++ tools/qml/browser/Browser.qml | 4 ++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp index abab33c..9c71004 100644 --- a/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp +++ b/src/imports/folderlistmodel/qdeclarativefolderlistmodel.cpp @@ -279,7 +279,7 @@ void QDeclarativeFolderListModel::classBegin() void QDeclarativeFolderListModel::componentComplete() { - if (!d->folder.isValid() || !QDir().exists(d->folder.toLocalFile())) + if (!d->folder.isValid() || d->folder.toLocalFile().isEmpty() || !QDir().exists(d->folder.toLocalFile())) setFolder(QUrl(QLatin1String("file://")+QDir::currentPath())); if (!d->folderIndex.isValid()) diff --git a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp index 21c7197..f19eb03 100644 --- a/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp +++ b/tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp @@ -238,13 +238,25 @@ void tst_QDeclarativeViewer::loading() delete viewer; } +static int numberOfWarnings = 0; +static void checkWarnings(QtMsgType, const char *) +{ + numberOfWarnings++; +} + void tst_QDeclarativeViewer::fileBrowser() { + QtMsgHandler previousMsgHandler = qInstallMsgHandler(checkWarnings); QDeclarativeViewer *viewer = new QDeclarativeViewer(); QVERIFY(viewer); viewer->setUseNativeFileBrowser(false); viewer->openFile(); viewer->show(); + QCoreApplication::processEvents(); + qInstallMsgHandler(previousMsgHandler); + + // QTBUG-15720 + QVERIFY(numberOfWarnings == 0); QApplication::setActiveWindow(viewer); QTest::qWaitForWindowShown(viewer); diff --git a/tools/qml/browser/Browser.qml b/tools/qml/browser/Browser.qml index ebed72f..b9573da 100644 --- a/tools/qml/browser/Browser.qml +++ b/tools/qml/browser/Browser.qml @@ -180,7 +180,7 @@ Rectangle { GradientStop { id: t1; position: 0.0; color: palette.highlight } GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } } - width: view1.currentItem.width + width: view1.currentItem == null ? 0 : view1.currentItem.width } highlightMoveSpeed: 1000 pressDelay: 100 @@ -230,7 +230,7 @@ Rectangle { GradientStop { id: t1; position: 0.0; color: palette.highlight } GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) } } - width: view1.currentItem.width + width: view1.currentItem == null ? 0 : view1.currentItem.width } highlightMoveSpeed: 1000 pressDelay: 100 -- cgit v0.12 From 46213b30d639505849d079b30e72ef8393e9a748 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Tue, 30 Nov 2010 14:30:35 +1000 Subject: Correctly handle CppOwnership even when a QDeclarativeData doesn't exist Task-number: QTBUG-15695 --- src/declarative/qml/qdeclarativeengine.cpp | 4 +- .../tst_qdeclarativeecmascript.cpp | 46 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index c646302..add1ab7 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -897,9 +897,7 @@ void QDeclarativeEngine::setObjectOwnership(QObject *object, ObjectOwnership own if (!object) return; - // No need to do anything if CppOwnership and there is no QDeclarativeData as - // the current ownership must be CppOwnership - QDeclarativeData *ddata = QDeclarativeData::get(object, ownership == JavaScriptOwnership); + QDeclarativeData *ddata = QDeclarativeData::get(object, true); if (!ddata) return; diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 14755f32..7c0a316 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -135,6 +135,7 @@ private slots: void scriptConnect(); void scriptDisconnect(); void ownership(); + void cppOwnershipReturnValue(); void qlistqobjectMethods(); void strictlyEquals(); void compiled(); @@ -2100,6 +2101,51 @@ void tst_qdeclarativeecmascript::ownership() } } +class CppOwnershipReturnValue : public QObject +{ + Q_OBJECT +public: + CppOwnershipReturnValue() : value(0) {} + + Q_INVOKABLE QObject *create() { + Q_ASSERT(value == 0); + + value = new QObject; + QDeclarativeEngine::setObjectOwnership(value, QDeclarativeEngine::CppOwnership); + return value; + } + + QPointer value; +}; + +// QTBUG-15695. +// Test setObjectOwnership(CppOwnership) works even when there is no QDeclarativeData +void tst_qdeclarativeecmascript::cppOwnershipReturnValue() +{ + CppOwnershipReturnValue source; + + { + QDeclarativeEngine engine; + engine.rootContext()->setContextProperty("source", &source); + + QVERIFY(source.value == 0); + + QDeclarativeComponent component(&engine); + component.setData("import QtQuick 1.0\nQtObject {\nComponent.onCompleted: { var a = source.create(); }\n}\n", QUrl()); + + QObject *object = component.create(); + + QVERIFY(object != 0); + QVERIFY(source.value != 0); + + delete object; + } + + QCoreApplication::instance()->processEvents(QEventLoop::DeferredDeletion); + + QVERIFY(source.value != 0); +} + class QListQObjectMethodsObject : public QObject { Q_OBJECT -- cgit v0.12 From 16cbe54f41ff4ff9a03ce3973c52be32d63b7138 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Tue, 30 Nov 2010 15:13:42 +1000 Subject: Correct ownership semantics for QObject derived types Task-number: QTBUG-15697 --- .../qml/qdeclarativeobjectscriptclass.cpp | 11 +++++-- .../tst_qdeclarativeecmascript.cpp | 37 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp index eff59df..b0bc5bb 100644 --- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp +++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp @@ -69,7 +69,7 @@ struct ObjectData : public QScriptDeclarativeClass::Object { virtual ~ObjectData() { if (object && !object->parent()) { QDeclarativeData *ddata = QDeclarativeData::get(object, false); - if (ddata && !ddata->indestructible && 0 == --ddata->objectDataRefCount) + if (ddata && !ddata->indestructible && 0 == --ddata->objectDataRefCount) object->deleteLater(); } } @@ -808,7 +808,14 @@ QScriptDeclarativeClass::Value MetaCallArgument::toValue(QDeclarativeEngine *e) } return QScriptDeclarativeClass::Value(engine, rv); } else if (type == -1 || type == qMetaTypeId()) { - return QScriptDeclarativeClass::Value(engine, QDeclarativeEnginePrivate::get(e)->scriptValueFromVariant(*((QVariant *)&data))); + QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(e); + QScriptValue rv = ep->scriptValueFromVariant(*((QVariant *)&data)); + if (rv.isQObject()) { + QObject *object = rv.toQObject(); + if (object) + QDeclarativeData::get(object, true)->setImplicitDestructible(); + } + return QScriptDeclarativeClass::Value(engine, rv); } else { return QScriptDeclarativeClass::Value(); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 7c0a316..77fab91 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -136,6 +136,7 @@ private slots: void scriptDisconnect(); void ownership(); void cppOwnershipReturnValue(); + void ownershipCustomReturnValue(); void qlistqobjectMethods(); void strictlyEquals(); void compiled(); @@ -2106,6 +2107,7 @@ class CppOwnershipReturnValue : public QObject Q_OBJECT public: CppOwnershipReturnValue() : value(0) {} + ~CppOwnershipReturnValue() { delete value; } Q_INVOKABLE QObject *create() { Q_ASSERT(value == 0); @@ -2115,6 +2117,14 @@ public: return value; } + Q_INVOKABLE MyQmlObject *createQmlObject() { + Q_ASSERT(value == 0); + + MyQmlObject *rv = new MyQmlObject; + value = rv; + return rv; + } + QPointer value; }; @@ -2146,6 +2156,33 @@ void tst_qdeclarativeecmascript::cppOwnershipReturnValue() QVERIFY(source.value != 0); } +// QTBUG-15697 +void tst_qdeclarativeecmascript::ownershipCustomReturnValue() +{ + CppOwnershipReturnValue source; + + { + QDeclarativeEngine engine; + engine.rootContext()->setContextProperty("source", &source); + + QVERIFY(source.value == 0); + + QDeclarativeComponent component(&engine); + component.setData("import QtQuick 1.0\nQtObject {\nComponent.onCompleted: { var a = source.createQmlObject(); }\n}\n", QUrl()); + + QObject *object = component.create(); + + QVERIFY(object != 0); + QVERIFY(source.value != 0); + + delete object; + } + + QCoreApplication::instance()->processEvents(QEventLoop::DeferredDeletion); + + QVERIFY(source.value == 0); +} + class QListQObjectMethodsObject : public QObject { Q_OBJECT -- cgit v0.12 From fe3cfced940f41d078380ef7bdebe40d85aa49a2 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Tue, 30 Nov 2010 15:23:45 +1000 Subject: Fix integer overflow in QDeclarativeItemPrivate::origin enumeration Task-number: QTBUG-15694 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativeitem_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativeitem_p.h b/src/declarative/graphicsitems/qdeclarativeitem_p.h index f85fa27..d8635b9 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem_p.h +++ b/src/declarative/graphicsitems/qdeclarativeitem_p.h @@ -259,7 +259,7 @@ public: QDeclarativeStateGroup *_states(); QDeclarativeStateGroup *_stateGroup; - QDeclarativeItem::TransformOrigin origin:4; + QDeclarativeItem::TransformOrigin origin:5; bool widthValid:1; bool heightValid:1; bool componentComplete:1; -- cgit v0.12 From 840ffbd6187fe2573d8c00481120d4cf30aed351 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 30 Nov 2010 15:54:25 +1000 Subject: Ensure header is considered when positioning content with snapping. When snapping is enabled the header was ignored and content would be aligned with the first item rather than the header, when at the top of the view. Task-number: QTBUG-15710 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativegridview.cpp | 37 ++++++++++++---------- .../graphicsitems/qdeclarativelistview.cpp | 6 +++- .../tst_qdeclarativegridview.cpp | 2 +- .../qdeclarativelistview/data/header.qml | 31 ++++++++++++++++++ .../tst_qdeclarativelistview.cpp | 31 ++++++++++++++++++ 5 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativelistview/data/header.qml diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 6f38f63..4454284 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -219,12 +219,8 @@ public: } } else { qreal pos = (modelIndex / columns) * rowSize(); - if (header) { - qreal headerSize = flow == QDeclarativeGridView::LeftToRight - ? header->item->height() - : header->item->width(); - pos += headerSize; - } + if (header) + pos += headerSize(); return pos; } return 0; @@ -291,11 +287,9 @@ public: if (item->index == -1) continue; qreal itemTop = item->rowPos(); - if (item->index == model->count()-1 || (itemTop+rowSize()/2 >= pos)) + if (itemTop+rowSize()/2 >= pos && itemTop - rowSize()/2 <= pos) return item; } - if (visibleItems.count() && visibleItems.first()->rowPos() <= pos) - return visibleItems.first(); return 0; } @@ -315,6 +309,16 @@ public: return index; } + qreal headerSize() const { + if (!header) + return 0.0; + + return flow == QDeclarativeGridView::LeftToRight + ? header->item->height() + : header->item->width(); + } + + virtual void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) { Q_Q(const QDeclarativeGridView); QDeclarativeFlickablePrivate::itemGeometryChanged(item, newGeometry, oldGeometry); @@ -878,14 +882,11 @@ void QDeclarativeGridViewPrivate::updateHeader() if (header) { if (visibleItems.count()) { qreal startPos = startPosition(); - qreal headerSize = flow == QDeclarativeGridView::LeftToRight - ? header->item->height() - : header->item->width(); if (visibleIndex == 0) { - header->setPosition(0, startPos - headerSize); + header->setPosition(0, startPos - headerSize()); } else { - if (position() <= startPos || header->rowPos() > startPos - headerSize) - header->setPosition(0, startPos - headerSize); + if (position() <= startPos || header->rowPos() > startPos - headerSize()) + header->setPosition(0, startPos - headerSize()); } } else { header->setPosition(0, 0); @@ -920,10 +921,14 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m qreal bottomPos = qMax(bottomItem->rowPos() - highlightRangeEnd, -minExtent); pos = qAbs(data.move + topPos) < qAbs(data.move + bottomPos) ? topPos : bottomPos; } else if (topItem) { - pos = qMax(qMin(topItem->rowPos() - highlightRangeStart, -maxExtent), -minExtent); + if (topItem->index == 0 && header && position()+highlightRangeStart < header->rowPos()+headerSize()/2) + pos = header->rowPos() - highlightRangeStart; + else + pos = qMax(qMin(topItem->rowPos() - highlightRangeStart, -maxExtent), -minExtent); } else if (bottomItem) { pos = qMax(qMin(bottomItem->rowPos() - highlightRangeStart, -maxExtent), -minExtent); } else { + QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent); fixupDuration = oldDuration; return; } diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 450b6af..d1f52be 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1185,10 +1185,14 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m FxListItem *bottomItem = snapItemAt(position()+highlightRangeEnd); qreal pos; if (topItem) { - pos = qMax(qMin(topItem->position() - highlightRangeStart, -maxExtent), -minExtent); + if (topItem->index == 0 && header && position()+highlightRangeStart < header->position()+header->size()/2) + pos = header->position() - highlightRangeStart; + else + pos = qMax(qMin(topItem->position() - highlightRangeStart, -maxExtent), -minExtent); } else if (bottomItem) { pos = qMax(qMin(bottomItem->position() - highlightRangeStart, -maxExtent), -minExtent); } else { + QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent); fixupDuration = oldDuration; return; } diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 327bba2..7998e30 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -1263,7 +1263,7 @@ void tst_QDeclarativeGridView::header() QDeclarativeView *canvas = createView(); TestModel model; - for (int i = 0; i < 7; i++) + for (int i = 0; i < 30; i++) model.addItem("Item" + QString::number(i), ""); QDeclarativeContext *ctxt = canvas->rootContext(); diff --git a/tests/auto/declarative/qdeclarativelistview/data/header.qml b/tests/auto/declarative/qdeclarativelistview/data/header.qml new file mode 100644 index 0000000..6da996e --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/data/header.qml @@ -0,0 +1,31 @@ +import QtQuick 1.0 + +Rectangle { + width: 240 + height: 320 + color: "#ffffff" + Component { + id: myDelegate + Rectangle { + id: wrapper + objectName: "wrapper" + height: 30 + width: 240 + Text { + text: index + } + color: ListView.isCurrentItem ? "lightsteelblue" : "white" + } + } + ListView { + id: list + objectName: "list" + focus: true + width: 240 + height: 320 + snapMode: ListView.SnapToItem + model: testModel + delegate: myDelegate + header: Text { objectName: "header"; text: "Header"; height: 10 } + } +} diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 37d836d..295a75d 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -98,6 +98,7 @@ private slots: void QTBUG_9791(); void manualHighlight(); void QTBUG_11105(); + void header(); void footer(); void resizeView(); void sizeLessThan1(); @@ -1661,6 +1662,36 @@ void tst_QDeclarativeListView::QTBUG_11105() delete canvas; } +void tst_QDeclarativeListView::header() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeText *header = findItem(contentItem, "header"); + QVERIFY(header); + QCOMPARE(header->y(), 0.0); + + QCOMPARE(listview->contentY(), 0.0); + + model.clear(); + QTRY_COMPARE(header->y(), 0.0); +} + void tst_QDeclarativeListView::footer() { QDeclarativeView *canvas = createView(); -- cgit v0.12 From 6f18ee7ce50bc9b2688079e923a34c08117b3eb8 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 1 Dec 2010 11:15:46 +1000 Subject: Fix BorderImage painting at sizes less than margin size. If the width < left+right margins or height < top+bottom margins the image was painted with the complete margins, resulting in an ugle pattern. This change reduces the size of the margins proportionately, which gives a much better appearance. Task-number: QTBUG-15736 Reviewed-by: Yann Bodson --- .../graphicsitems/qdeclarativeborderimage.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index 649c8fb..c0a7d72 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -509,7 +509,7 @@ void QDeclarativeBorderImage::doUpdate() void QDeclarativeBorderImage::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *) { Q_D(QDeclarativeBorderImage); - if (d->pix.isNull()) + if (d->pix.isNull() || d->width() <= 0.0 || d->height() <= 0.0) return; bool oldAA = p->testRenderHint(QPainter::Antialiasing); @@ -518,7 +518,23 @@ void QDeclarativeBorderImage::paint(QPainter *p, const QStyleOptionGraphicsItem p->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth); const QDeclarativeScaleGrid *border = d->getScaleGrid(); - QMargins margins(border->left(), border->top(), border->right(), border->bottom()); + int left = border->left(); + int right = border->right(); + qreal borderWidth = left + right; + if (borderWidth > 0.0 && d->width() < borderWidth) { + qreal diff = borderWidth - d->width() - 1; + left -= qRound(diff * qreal(left) / borderWidth); + right -= qRound(diff * qreal(right) / borderWidth); + } + int top = border->top(); + int bottom = border->bottom(); + qreal borderHeight = top + bottom; + if (borderHeight > 0.0 && d->height() < borderHeight) { + qreal diff = borderHeight - d->height() - 1; + top -= qRound(diff * qreal(top) / borderHeight); + bottom -= qRound(diff * qreal(bottom) / borderHeight); + } + QMargins margins(left, top, right, bottom); QTileRules rules((Qt::TileRule)d->horizontalTileMode, (Qt::TileRule)d->verticalTileMode); qDrawBorderPixmap(p, QRect(0, 0, (int)d->width(), (int)d->height()), margins, d->pix, d->pix.rect(), margins, rules); if (d->smooth) { -- cgit v0.12 From fe90d7a3d9f00fa2ea46c0816f63c65f812c360f Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Wed, 1 Dec 2010 11:29:23 +1000 Subject: Change pen correctly when drawing cached text Task-number: QTBUG-14568 --- src/declarative/graphicsitems/qdeclarativetextlayout.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp index e8da367..14a1109 100644 --- a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp @@ -361,10 +361,18 @@ void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p) d->position = p; } + QPen oldPen = priv->state->pen; + QColor currentColor = oldPen.color(); for (int ii = 0; ii < itemCount; ++ii) { QStaticTextItem &item = d->items[ii]; + if (item.color.isValid() && currentColor != item.color) { + painter->setPen(item.color); + currentColor = item.color; + } priv->extended->drawStaticTextItem(&item); } + if (currentColor != oldPen.color()) + painter->setPen(oldPen); } QT_END_NAMESPACE -- cgit v0.12 From e46bf51f830dcc80932b9219fe608d1bc1a388ad Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Wed, 1 Dec 2010 16:03:08 +1000 Subject: Fix license header. --- doc/src/declarative/qmlinuse.qdoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/declarative/qmlinuse.qdoc b/doc/src/declarative/qmlinuse.qdoc index 90ce02c..1127b4c 100644 --- a/doc/src/declarative/qmlinuse.qdoc +++ b/doc/src/declarative/qmlinuse.qdoc @@ -7,11 +7,11 @@ ** This file is part of the documentation of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:FDL$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in a -** written agreement between you and Nokia. +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Free Documentation License ** Alternatively, this file may be used under the terms of the GNU Free -- cgit v0.12 From 1337a3e031477aa4d628d01252557dee622629ff Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 1 Dec 2010 17:30:52 +1000 Subject: ListView header is not visible initially. If the header size was not set explicitly, but determined implicitly from Text height, the view was not positioned so that the header was visible when first shown. Task-number: QTBUG-15599 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativegridview.cpp | 16 ++++-- .../graphicsitems/qdeclarativelistview.cpp | 22 ++++--- .../qdeclarativelistview/data/header1.qml | 33 +++++++++++ .../tst_qdeclarativelistview.cpp | 67 ++++++++++++++++------ 4 files changed, 108 insertions(+), 30 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativelistview/data/header1.qml diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 4454284..1615b0f 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1769,8 +1769,10 @@ void QDeclarativeGridView::setFooter(QDeclarativeComponent *footer) d->footer = 0; } d->footerComponent = footer; - d->updateFooter(); - d->updateGrid(); + if (isComponentComplete()) { + d->updateFooter(); + d->updateGrid(); + } emit footerChanged(); } } @@ -1799,9 +1801,11 @@ void QDeclarativeGridView::setHeader(QDeclarativeComponent *header) d->header = 0; } d->headerComponent = header; - d->updateHeader(); - d->updateFooter(); - d->updateGrid(); + if (isComponentComplete()) { + d->updateHeader(); + d->updateFooter(); + d->updateGrid(); + } emit headerChanged(); } } @@ -2226,6 +2230,8 @@ void QDeclarativeGridView::componentComplete() { Q_D(QDeclarativeGridView); QDeclarativeFlickable::componentComplete(); + d->updateHeader(); + d->updateFooter(); d->updateGrid(); if (d->isValid()) { refill(); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index d1f52be..845da79 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -402,6 +402,8 @@ public: void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) { Q_Q(QDeclarativeListView); QDeclarativeFlickablePrivate::itemGeometryChanged(item, newGeometry, oldGeometry); + if (!q->isComponentComplete()) + return; if (item != contentItem && (!highlight || item != highlight->item)) { if ((orient == QDeclarativeListView::Vertical && newGeometry.height() != oldGeometry.height()) || (orient == QDeclarativeListView::Horizontal && newGeometry.width() != oldGeometry.width())) { @@ -1123,8 +1125,6 @@ void QDeclarativeListViewPrivate::updateHeader() QDeclarativeItemPrivate *itemPrivate = static_cast(QGraphicsItemPrivate::get(item)); itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry); header = new FxListItem(item, q); - if (visibleItems.isEmpty()) - visiblePos = header->size(); } } if (header) { @@ -1137,6 +1137,8 @@ void QDeclarativeListViewPrivate::updateHeader() header->setPosition(startPos - header->size()); } } else { + if (itemCount == 0) + visiblePos = header->size(); header->setPosition(0); } } @@ -2215,8 +2217,10 @@ void QDeclarativeListView::setFooter(QDeclarativeComponent *footer) d->footerComponent = footer; d->minExtentDirty = true; d->maxExtentDirty = true; - d->updateFooter(); - d->updateViewport(); + if (isComponentComplete()) { + d->updateFooter(); + d->updateViewport(); + } emit footerChanged(); } } @@ -2247,9 +2251,11 @@ void QDeclarativeListView::setHeader(QDeclarativeComponent *header) d->headerComponent = header; d->minExtentDirty = true; d->maxExtentDirty = true; - d->updateHeader(); - d->updateFooter(); - d->updateViewport(); + if (isComponentComplete()) { + d->updateHeader(); + d->updateFooter(); + d->updateViewport(); + } emit headerChanged(); } } @@ -2659,6 +2665,8 @@ void QDeclarativeListView::componentComplete() Q_D(QDeclarativeListView); QDeclarativeFlickable::componentComplete(); updateSections(); + d->updateHeader(); + d->updateFooter(); if (d->isValid()) { refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; diff --git a/tests/auto/declarative/qdeclarativelistview/data/header1.qml b/tests/auto/declarative/qdeclarativelistview/data/header1.qml new file mode 100644 index 0000000..f2ab4c1 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistview/data/header1.qml @@ -0,0 +1,33 @@ +import QtQuick 1.0 + +Rectangle { + width: 240 + height: 320 + color: "#ffffff" + + ListModel { id: testModel } + + ListView { + id: list + objectName: "list" + width: parent.width + anchors.top: parent.top + anchors.bottom: parent.bottom + model: testModel + delegate: Text { + objectName: "wrapper" + font.pointSize: 20 + text: index + } + footer: Rectangle { + width: parent.width + height: 40 + color: "green" + } + header: Text { objectName: "header"; text: "Header" } + } + + Component.onCompleted: { + for (var i=0; i<30; i++) testModel.append({"name" : i, "val": i}) + } +} diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 295a75d..759caf2 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -1664,32 +1664,63 @@ void tst_QDeclarativeListView::QTBUG_11105() void tst_QDeclarativeListView::header() { - QDeclarativeView *canvas = createView(); + { + QDeclarativeView *canvas = createView(); - TestModel model; - for (int i = 0; i < 30; i++) - model.addItem("Item" + QString::number(i), ""); + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); - QDeclarativeContext *ctxt = canvas->rootContext(); - ctxt->setContextProperty("testModel", &model); + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header.qml")); - qApp->processEvents(); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header.qml")); + qApp->processEvents(); - QDeclarativeListView *listview = findItem(canvas->rootObject(), "list"); - QTRY_VERIFY(listview != 0); + QDeclarativeListView *listview = findItem(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); - QDeclarativeItem *contentItem = listview->contentItem(); - QTRY_VERIFY(contentItem != 0); + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); - QDeclarativeText *header = findItem(contentItem, "header"); - QVERIFY(header); - QCOMPARE(header->y(), 0.0); + QDeclarativeText *header = findItem(contentItem, "header"); + QVERIFY(header); + QCOMPARE(header->y(), 0.0); - QCOMPARE(listview->contentY(), 0.0); + QCOMPARE(listview->contentY(), 0.0); - model.clear(); - QTRY_COMPARE(header->y(), 0.0); + model.clear(); + QTRY_COMPARE(header->y(), 0.0); + + delete canvas; + } + { + QDeclarativeView *canvas = createView(); + + TestModel model; + + QDeclarativeContext *ctxt = canvas->rootContext(); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header1.qml")); + qApp->processEvents(); + + QDeclarativeListView *listview = findItem(canvas->rootObject(), "list"); + QTRY_VERIFY(listview != 0); + + QDeclarativeItem *contentItem = listview->contentItem(); + QTRY_VERIFY(contentItem != 0); + + QDeclarativeText *header = findItem(contentItem, "header"); + QVERIFY(header); + QCOMPARE(header->y(), 0.0); + + QCOMPARE(listview->contentY(), 0.0); + + model.clear(); + QTRY_COMPARE(header->y(), 0.0); + + delete canvas; + } } void tst_QDeclarativeListView::footer() -- cgit v0.12 From 5822db01277a19d8424b1f0d55868a82c8e719e6 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 1 Dec 2010 08:55:47 +0100 Subject: Fix two minor doc errors Task-number: QTBUG-14929, QTBUG-15739 Reviewed-by: TrustMe --- doc/src/platforms/emb-envvars.qdoc | 2 +- src/corelib/tools/qalgorithms.qdoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/platforms/emb-envvars.qdoc b/doc/src/platforms/emb-envvars.qdoc index 1d109b4..3f318eb 100644 --- a/doc/src/platforms/emb-envvars.qdoc +++ b/doc/src/platforms/emb-envvars.qdoc @@ -112,7 +112,7 @@ device, e.g., \c /dev/mouse for mouse devices and \c /dev/ts for touch panels. - Multiple keyboard drivers can be specified in one go: + Multiple mouse drivers can be specified in one go: \snippet doc/src/snippets/code/doc_src_emb-envvars.qdoc 3 diff --git a/src/corelib/tools/qalgorithms.qdoc b/src/corelib/tools/qalgorithms.qdoc index 898f940..cd33f28 100644 --- a/src/corelib/tools/qalgorithms.qdoc +++ b/src/corelib/tools/qalgorithms.qdoc @@ -266,7 +266,7 @@ \overload - This is the same as qFind(\a{container}.begin(), \a{container}.end(), value); + This is the same as qFind(\a{container}.constBegin(), \a{container}.constEnd(), value); */ /*! \fn void qCount(InputIterator begin, InputIterator end, const T &value, Size &n) -- cgit v0.12 From de30288bb108d70cd66774c3beb7497efb5d0e6d Mon Sep 17 00:00:00 2001 From: aavit Date: Tue, 30 Nov 2010 15:31:09 +0100 Subject: Workaround for certain malformed PNGs that lack the final crc bytes Task-number: QT-4103 Reviewed-by: gunnar --- src/gui/image/qpnghandler.cpp | 80 +++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index 935aba0..a4d669b 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -82,6 +82,41 @@ QT_BEGIN_NAMESPACE Never to grayscale. */ +class QPngHandlerPrivate +{ +public: + enum State { + Ready, + ReadHeader, + ReadingEnd, + Error + }; + + QPngHandlerPrivate(QPngHandler *qq) + : gamma(0.0), quality(2), png_ptr(0), info_ptr(0), + end_info(0), row_pointers(0), state(Ready), q(qq) + { } + + float gamma; + int quality; + QString description; + + png_struct *png_ptr; + png_info *info_ptr; + png_info *end_info; + png_byte **row_pointers; + + bool readPngHeader(); + bool readPngImage(QImage *image); + + QImage::Format readImageFormat(); + + State state; + + QPngHandler *q; +}; + + #if defined(Q_C_CALLBACKS) extern "C" { #endif @@ -118,7 +153,15 @@ private: static void CALLBACK_CALL_TYPE iod_read_fn(png_structp png_ptr, png_bytep data, png_size_t length) { - QIODevice *in = (QIODevice *)png_get_io_ptr(png_ptr); + QPngHandlerPrivate *d = (QPngHandlerPrivate *)png_get_io_ptr(png_ptr); + QIODevice *in = d->q->device(); + + if (d->state == QPngHandlerPrivate::ReadingEnd && in->atEnd() && length == 4) { + // Workaround for certain malformed PNGs that lack the final crc bytes + uchar endcrc[4] = { 0xae, 0x42, 0x60, 0x82 }; + qMemCopy(data, endcrc, 4); + return; + } while (length) { int nr = in->read((char*)data, length); @@ -314,38 +357,6 @@ static void CALLBACK_CALL_TYPE qt_png_warning(png_structp /*png_ptr*/, png_const } #endif -class QPngHandlerPrivate -{ -public: - enum State { - Ready, - ReadHeader, - Error - }; - - QPngHandlerPrivate(QPngHandler *qq) - : gamma(0.0), quality(2), png_ptr(0), info_ptr(0), - end_info(0), row_pointers(0), state(Ready), q(qq) - { } - - float gamma; - int quality; - QString description; - - png_struct *png_ptr; - png_info *info_ptr; - png_info *end_info; - png_byte **row_pointers; - - bool readPngHeader(); - bool readPngImage(QImage *image); - - QImage::Format readImageFormat(); - - State state; - - QPngHandler *q; -}; /*! \internal @@ -379,7 +390,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngHeader() return false; } - png_set_read_fn(png_ptr, q->device(), iod_read_fn); + png_set_read_fn(png_ptr, this, iod_read_fn); png_read_info(png_ptr, info_ptr); #ifndef QT_NO_IMAGE_TEXT @@ -505,6 +516,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage) } #endif + state = ReadingEnd; png_read_end(png_ptr, end_info); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); delete [] row_pointers; -- cgit v0.12 From fa72ccc5076e80c9a4c51501d8ff7c8161abfdeb Mon Sep 17 00:00:00 2001 From: aavit Date: Wed, 1 Dec 2010 11:52:00 +0100 Subject: Improvement of de30288: handle PNGs having 1 to 4 bytes truncated. Task-number: QT-4103 Reviewed-by: trustme --- src/gui/image/qpnghandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp index a4d669b..1a78bae 100644 --- a/src/gui/image/qpnghandler.cpp +++ b/src/gui/image/qpnghandler.cpp @@ -156,10 +156,11 @@ void CALLBACK_CALL_TYPE iod_read_fn(png_structp png_ptr, png_bytep data, png_siz QPngHandlerPrivate *d = (QPngHandlerPrivate *)png_get_io_ptr(png_ptr); QIODevice *in = d->q->device(); - if (d->state == QPngHandlerPrivate::ReadingEnd && in->atEnd() && length == 4) { + if (d->state == QPngHandlerPrivate::ReadingEnd && !in->isSequential() && (in->size() - in->pos()) < 4 && length == 4) { // Workaround for certain malformed PNGs that lack the final crc bytes uchar endcrc[4] = { 0xae, 0x42, 0x60, 0x82 }; qMemCopy(data, endcrc, 4); + in->seek(in->size()); return; } -- cgit v0.12 From 0f8e39459b47b99195eb677e7a32784b325834bd Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Wed, 1 Dec 2010 16:52:17 +0100 Subject: fix line endings --- .../qmlvisual/webview/flickable/flickweb.qml | 70 +++++++++++----------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml b/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml index 6063226..af09389 100644 --- a/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml +++ b/tests/auto/declarative/qmlvisual/webview/flickable/flickweb.qml @@ -1,35 +1,35 @@ -import QtQuick 1.0 -import QtWebKit 1.0 - -Flickable { - id: flickable - width: 320 - height: 200 - contentWidth: Math.max(flickable.width,webView.width) - contentHeight: Math.max(flickable.height,webView.height) - pressDelay: 100 - - WebView { - id: webView - transformOrigin: Item.TopLeft - smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions - url: "test.html" - preferredWidth: flickable.width - preferredHeight: flickable.height - contentsScale: 1 - onContentsSizeChanged: { - // zoom out - contentsScale = Math.min(1,flickable.width / contentsSize.width) - } - } - - Rectangle { - id: button - width: 50; height: 50; color: "red" - MouseArea { - anchors.fill: parent - onPressed: button.color = "blue" - onReleased: button.color = "green" - } - } -} +import QtQuick 1.0 +import QtWebKit 1.0 + +Flickable { + id: flickable + width: 320 + height: 200 + contentWidth: Math.max(flickable.width,webView.width) + contentHeight: Math.max(flickable.height,webView.height) + pressDelay: 100 + + WebView { + id: webView + transformOrigin: Item.TopLeft + smooth: false // We don't want smooth scaling, since we only scale during (fast) transitions + url: "test.html" + preferredWidth: flickable.width + preferredHeight: flickable.height + contentsScale: 1 + onContentsSizeChanged: { + // zoom out + contentsScale = Math.min(1,flickable.width / contentsSize.width) + } + } + + Rectangle { + id: button + width: 50; height: 50; color: "red" + MouseArea { + anchors.fill: parent + onPressed: button.color = "blue" + onReleased: button.color = "green" + } + } +} -- cgit v0.12 From 03ff62841c5dae85fde40982a65980a91c5f3109 Mon Sep 17 00:00:00 2001 From: Christopher Ham Date: Thu, 2 Dec 2010 13:12:18 +1000 Subject: Rectangle should not paint with negative width or height Task-number: QTBUG-15250 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativerectangle.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index dedb3f7..59d1a84 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -470,6 +470,8 @@ void QDeclarativeRectangle::generateBorderedRect() void QDeclarativeRectangle::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *) { Q_D(QDeclarativeRectangle); + if (width() <= 0 || height() <= 0) + return; if (d->radius > 0 || (d->pen && d->pen->isValid()) || (d->gradient && d->gradient->gradient()) ) { drawRect(*p); -- cgit v0.12 From b5a2e8bc3e49ed13d44d4273f5e65cda97c55db1 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 2 Dec 2010 13:07:29 +1000 Subject: Ensure semi-transparent rects paint correctly with radius == size/2. The margins could overlap, which caused overpainting. Ensure the margins are always <= width or height /2. Task-number: QTBUG-14657 Reviewed-by: Yann Bodson --- src/declarative/graphicsitems/qdeclarativerectangle.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index 59d1a84..99b36a8 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -541,6 +541,12 @@ void QDeclarativeRectangle::drawRect(QPainter &p) Q_ASSERT(d->rectImage.width() == 2*xOffset + 1); Q_ASSERT(d->rectImage.height() == 2*yOffset + 1); + // check whether we've eliminated the center completely + if (2*xOffset > width()+pw) + xOffset = (width()+pw)/2; + if (2*yOffset > height()+pw) + yOffset = (height()+pw)/2; + QMargins margins(xOffset, yOffset, xOffset, yOffset); QTileRules rules(Qt::StretchTile, Qt::StretchTile); //NOTE: even though our item may have qreal-based width and height, qDrawBorderPixmap only supports QRects -- cgit v0.12 From afbf017b8929d1215851dc43823de61fb1ffa400 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Thu, 2 Dec 2010 16:55:28 +1000 Subject: Update TextInput when echoMode changes. Task-number: QTBUG-15779 Reviewed-by: Martin Jones --- src/declarative/graphicsitems/qdeclarativetextinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp index 0deacf8..f8421a3 100644 --- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp @@ -771,7 +771,7 @@ void QDeclarativeTextInput::setEchoMode(QDeclarativeTextInput::EchoMode echo) imHints &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText); setInputMethodHints(imHints); d->control->setEchoMode((uint)echo); - update(); + q_textChanged(); emit echoModeChanged(echoMode()); } -- cgit v0.12 From d4b73604d545da4ab802f22a55fbf420f4bf5baa Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Thu, 2 Dec 2010 15:16:58 +1000 Subject: Append qml import path individually for each available drive on Symbian Task-number: QTBUG-15405 Reviewed-by: Jason Barron --- src/declarative/declarative.pro | 5 ++++- src/declarative/qml/qdeclarativeimport.cpp | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/declarative/declarative.pro b/src/declarative/declarative.pro index 299ca06..93ad861 100644 --- a/src/declarative/declarative.pro +++ b/src/declarative/declarative.pro @@ -25,7 +25,10 @@ include(graphicsitems/graphicsitems.pri) include(qml/qml.pri) include(debugger/debugger.pri) -symbian:TARGET.UID3=0x2001E623 +symbian: { + TARGET.UID3=0x2001E623 + LIBS += -lefsrv +} DEFINES += QT_NO_OPENTYPE INCLUDEPATH += ../3rdparty/harfbuzz/src diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 6f5216a..acc13de 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -51,6 +51,10 @@ #include #include +#ifdef Q_OS_SYMBIAN +#include "private/qcore_symbian_p.h" +#endif + QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(qmlImportTrace, QML_IMPORT_TRACE) @@ -658,8 +662,32 @@ QDeclarativeImportDatabase::QDeclarativeImportDatabase(QDeclarativeEngine *e) // Search order is applicationDirPath(), $QML_IMPORT_PATH, QLibraryInfo::ImportsPath - addImportPath(QLibraryInfo::location(QLibraryInfo::ImportsPath)); + QString installImportsPath = QLibraryInfo::location(QLibraryInfo::ImportsPath); +#if defined(Q_OS_SYMBIAN) + // Append imports path for all available drives in Symbian + if (installImportsPath.at(1) != QChar(QLatin1Char(':'))) { + QString tempPath = installImportsPath; + if (tempPath.at(tempPath.length() - 1) != QDir::separator()) { + tempPath += QDir::separator(); + } + RFs& fs = qt_s60GetRFs(); + TPtrC tempPathPtr(reinterpret_cast (tempPath.constData())); + TFindFile finder(fs); + TInt err = finder.FindByDir(tempPathPtr, tempPathPtr); + while (err == KErrNone) { + QString foundDir(reinterpret_cast(finder.File().Ptr()), + finder.File().Length()); + foundDir = QDir(foundDir).canonicalPath(); + addImportPath(foundDir); + err = finder.Find(); + } + } else { + addImportPath(installImportsPath); + } +#else + addImportPath(installImportsPath); +#endif // env import paths QByteArray envImportPath = qgetenv("QML_IMPORT_PATH"); if (!envImportPath.isEmpty()) { -- cgit v0.12 From 187a42d1ee1a86e6e0ecd79f39c86d4f790bf98f Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 2 Dec 2010 14:50:02 +0200 Subject: Cleaned up sis_targets.prf Removed the unnecessary checks for the case where pkg file doesn't exist are no longer needed as we now have dependencies to pkg files and no sis creation targets are generated if pkg is not generated. Also improved documentation a bit and added the missing ok_installer_sis target generation. Reviewed-by: Janne Koskinen --- doc/src/platforms/symbian-introduction.qdoc | 9 ++++ mkspecs/features/symbian/sis_targets.prf | 84 +++++++++++++---------------- 2 files changed, 45 insertions(+), 48 deletions(-) diff --git a/doc/src/platforms/symbian-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc index 9da94c4..cce2be3 100644 --- a/doc/src/platforms/symbian-introduction.qdoc +++ b/doc/src/platforms/symbian-introduction.qdoc @@ -144,8 +144,17 @@ Smart installer will attempt to download missing dependencies in addition to just installing the application. + Note: The application \c .sis contained in smart installer \c .sis + will be recreated and signed with same certificates as + smart installer \c .sis. + \row \o \c ok_installer_sis \o Otherwise similar to \c installer_sis target, except + the application sis will not be recreated. This is useful + when application \c .sis needs to be separately signed before + including it into smart installer \c .sis. \row \o \c unsigned_installer_sis \o Create unsigned \l{Smart Installer}{smart installer} \c .sis file for project. + Note: The application \c .sis contained in smart installer + \c .sis will also be unsigned. \row \o \c stub_sis \o Create a stub sis to allow upgradability of projects that are deployed in ROM \endtable diff --git a/mkspecs/features/symbian/sis_targets.prf b/mkspecs/features/symbian/sis_targets.prf index ad81803..024378b 100644 --- a/mkspecs/features/symbian/sis_targets.prf +++ b/mkspecs/features/symbian/sis_targets.prf @@ -33,19 +33,16 @@ equals(GENERATE_SIS_TARGETS, true) { make_cache_name = .make.cache sis_target.target = sis - sis_target.commands = $(if $(wildcard $${baseTarget}_template.pkg), \ - $(if $(wildcard $$make_cache_name), \ - $(MAKE) -f $(MAKEFILE) ok_sis MAKEFILES=$$make_cache_name \ + sis_target.commands = $(if $(wildcard $$make_cache_name), \ + $(MAKE) -f $(MAKEFILE) ok_sis MAKEFILES=$$make_cache_name \ + , \ + $(if $(QT_SIS_TARGET), \ + $(MAKE) -f $(MAKEFILE) ok_sis \ , \ - $(if $(QT_SIS_TARGET), \ - $(MAKE) -f $(MAKEFILE) ok_sis \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nocache \ - ) \ + $(MAKE) -f $(MAKEFILE) fail_sis_nocache \ ) \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) + sis_target.depends += $${baseTarget}_template.pkg ok_sis_target.target = ok_sis @@ -53,19 +50,16 @@ equals(GENERATE_SIS_TARGETS, true) { $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) unsigned_sis_target.target = unsigned_sis - unsigned_sis_target.commands = $(if $(wildcard $${baseTarget}_template.pkg), \ - $(if $(wildcard $$make_cache_name), \ - $(MAKE) -f $(MAKEFILE) ok_unsigned_sis MAKEFILES=$$make_cache_name \ - , \ - $(if $(QT_SIS_TARGET), \ - $(MAKE) -f $(MAKEFILE) ok_unsigned_sis \ + unsigned_sis_target.commands = $(if $(wildcard $$make_cache_name), \ + $(MAKE) -f $(MAKEFILE) ok_unsigned_sis MAKEFILES=$$make_cache_name \ , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nocache \ - ) \ - ) \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ - ) + $(if $(QT_SIS_TARGET), \ + $(MAKE) -f $(MAKEFILE) ok_unsigned_sis \ + , \ + $(MAKE) -f $(MAKEFILE) fail_sis_nocache \ + ) \ + ) + unsigned_sis_target.depends += $${baseTarget}_template.pkg ok_unsigned_sis_target.target = ok_unsigned_sis @@ -74,49 +68,39 @@ equals(GENERATE_SIS_TARGETS, true) { target_sis_target.target = $${baseTarget}.sis target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis + # The installer_sis target has dependency to sis target, so it will regenerate sis package. + # To create smart installer wrapper for for an existing sis package, use ok_installer_sis target directly. installer_sis_target.target = installer_sis - installer_sis_target.commands = $(if $(wildcard $${baseTarget}_installer.pkg), \ - $(MAKE) -f $(MAKEFILE) ok_installer_sis \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ - ) + installer_sis_target.commands = $(MAKE) -f $(MAKEFILE) ok_installer_sis installer_sis_target.depends = $${baseTarget}_installer.pkg sis ok_installer_sis_target.target = ok_installer_sis ok_installer_sis_target.commands = createpackage $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \ $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) + ok_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_installer_sis_target.target = unsigned_installer_sis - unsigned_installer_sis_target.commands = $(if $(wildcard $${baseTarget}_installer.pkg), \ - $(MAKE) -f $(MAKEFILE) ok_unsigned_installer_sis \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ - ) + unsigned_installer_sis_target.commands = $(MAKE) -f $(MAKEFILE) ok_unsigned_installer_sis unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_sis ok_unsigned_installer_sis_target.target = ok_unsigned_installer_sis ok_unsigned_installer_sis_target.commands = createpackage $(QT_SIS_OPTIONS) -o $${baseTarget}_installer.pkg - - fail_sis_nopkg_target.target = fail_sis_nopkg - fail_sis_nopkg_target.commands = "$(error PKG file does not exist, 'sis' and 'installer_sis' target are only supported for executables or projects with DEPLOYMENT statement)" + ok_unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg fail_sis_nocache_target.target = fail_sis_nocache fail_sis_nocache_target.commands = "$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)" stub_sis_target.target = stub_sis - stub_sis_target.commands = $(if $(wildcard $${baseTarget}_template.pkg), \ - $(if $(wildcard $$make_cache_name), \ - $(MAKE) -f $(MAKEFILE) ok_stub_sis MAKEFILES=$$make_cache_name \ + stub_sis_target.commands = $(if $(wildcard $$make_cache_name), \ + $(MAKE) -f $(MAKEFILE) ok_stub_sis MAKEFILES=$$make_cache_name \ + , \ + $(if $(QT_SIS_TARGET), \ + $(MAKE) -f $(MAKEFILE) ok_stub_sis \ , \ - $(if $(QT_SIS_TARGET), \ - $(MAKE) -f $(MAKEFILE) ok_stub_sis \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nocache \ - ) \ + $(MAKE) -f $(MAKEFILE) fail_sis_nocache \ ) \ - , \ - $(MAKE) -f $(MAKEFILE) fail_sis_nopkg \ ) + stub_sis_target.depends += $${baseTarget}_stub.pkg ok_stub_sis_target.target = ok_stub_sis @@ -132,7 +116,6 @@ equals(GENERATE_SIS_TARGETS, true) { ok_installer_sis_target \ unsigned_installer_sis_target \ ok_unsigned_installer_sis_target \ - fail_sis_nopkg_target \ fail_sis_nocache_target \ stub_sis_target \ ok_stub_sis_target @@ -178,10 +161,14 @@ equals(GENERATE_SIS_TARGETS, true) { target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis installer_sis_target.target = installer_sis - installer_sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \ - $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) + installer_sis_target.commands = $(MAKE) -f $(MAKEFILE) ok_installer_sis installer_sis_target.depends = $${baseTarget}_installer.pkg sis + ok_installer_sis_target.target = ok_installer_sis + ok_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \ + $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE) + ok_installer_sis_target.depends = $${baseTarget}_installer.pkg + unsigned_installer_sis_target.target = unsigned_installer_sis unsigned_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE $(QT_SIS_OPTIONS) -o $${baseTarget}_installer.pkg unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_sis @@ -197,6 +184,7 @@ equals(GENERATE_SIS_TARGETS, true) { unsigned_sis_target \ target_sis_target \ installer_sis_target \ + ok_installer_sis_target \ unsigned_installer_sis_target QMAKE_DISTCLEAN += $${sis_destdir}/$${baseTarget}.sis -- cgit v0.12 From e0ecd0d3d6f0cf32061ccf3631a4038c255b41fe Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 3 Dec 2010 10:12:59 +1000 Subject: Update QML visual tests Reintroducing text tests to X11, and updating a few tests where the behaviour of the items has subtly changed (and it was deemed acceptable) Task-number: QTBUG-14792 --- .../qmlvisual/ListView/data/listview.5.png | Bin 1663 -> 1661 bytes .../qmlvisual/ListView/data/listview.6.png | Bin 1666 -> 1674 bytes .../qmlvisual/ListView/data/listview.qml | 234 ++--- .../data-X11/colorAnimation-visual.0.png | Bin 0 -> 622 bytes .../data-X11/colorAnimation-visual.1.png | Bin 0 -> 627 bytes .../data-X11/colorAnimation-visual.2.png | Bin 0 -> 626 bytes .../data-X11/colorAnimation-visual.3.png | Bin 0 -> 625 bytes .../data-X11/colorAnimation-visual.qml | 951 +++++++++++++++++++++ .../data/usingRepeater.0.png | Bin 1199 -> 1203 bytes .../qdeclarativepositioners/data/usingRepeater.qml | 62 +- .../qdeclarativespringanimation/data/follow.0.png | Bin 941 -> 950 bytes .../qdeclarativespringanimation/data/follow.1.png | Bin 975 -> 983 bytes .../qdeclarativespringanimation/data/follow.2.png | Bin 1235 -> 1243 bytes .../qdeclarativespringanimation/data/follow.3.png | Bin 1225 -> 1235 bytes .../qdeclarativespringanimation/data/follow.4.png | Bin 1247 -> 1253 bytes .../qdeclarativespringanimation/data/follow.5.png | Bin 1243 -> 1249 bytes .../qdeclarativespringanimation/data/follow.6.png | Bin 1234 -> 1241 bytes .../qdeclarativespringanimation/data/follow.7.png | Bin 1242 -> 1251 bytes .../qdeclarativespringanimation/data/follow.qml | 852 +++++++++--------- .../baseline/data-X11/parentanchor.0.png | Bin 1313 -> 1313 bytes .../baseline/data-X11/parentanchor.qml | 60 +- .../qdeclarativetext/elide/data-X11/elide.0.png | Bin 483 -> 481 bytes .../qdeclarativetext/elide/data-X11/elide.1.png | Bin 483 -> 481 bytes .../qdeclarativetext/elide/data-X11/elide.qml | 130 +-- .../qdeclarativetext/elide/data-X11/elide2.0.png | Bin 1189 -> 1187 bytes .../qdeclarativetext/elide/data-X11/elide2.1.png | Bin 1068 -> 1066 bytes .../qdeclarativetext/elide/data-X11/elide2.qml | 194 ++--- .../elide/data-X11/multilength.0.png | Bin 747 -> 742 bytes .../elide/data-X11/multilength.1.png | Bin 814 -> 810 bytes .../elide/data-X11/multilength.2.png | Bin 809 -> 805 bytes .../elide/data-X11/multilength.3.png | Bin 527 -> 529 bytes .../elide/data-X11/multilength.4.png | Bin 526 -> 528 bytes .../elide/data-X11/multilength.qml | 552 ++++++------ .../qdeclarativetext/font/data-X11/plaintext.0.png | Bin 13140 -> 13194 bytes .../font/data-X11/plaintext2.0.png | Bin 1503 -> 1510 bytes .../qdeclarativetext/font/data-X11/richtext.0.png | Bin 9297 -> 9415 bytes .../qdeclarativetext/font/data-X11/richtext2.0.png | Bin 10626 -> 10671 bytes .../qdeclarativetextedit/data-X11/qt-669.0.png | Bin 688 -> 692 bytes .../qdeclarativetextedit/data-X11/qt-669.1.png | Bin 693 -> 696 bytes .../qdeclarativetextedit/data-X11/qt-669.2.png | Bin 695 -> 699 bytes .../qdeclarativetextedit/data-X11/qt-669.3.png | Bin 694 -> 698 bytes .../qdeclarativetextedit/data-X11/qt-669.4.png | Bin 688 -> 692 bytes .../qdeclarativetextedit/data-X11/qt-669.qml | 528 ++++++------ .../qdeclarativetextedit/data-X11/wrap.0.png | Bin 3493 -> 3481 bytes .../qdeclarativetextedit/data-X11/wrap.1.png | Bin 3617 -> 3606 bytes .../qdeclarativetextedit/data-X11/wrap.2.png | Bin 3688 -> 3676 bytes .../qdeclarativetextedit/data-X11/wrap.3.png | Bin 3766 -> 3754 bytes .../qdeclarativetextedit/data-X11/wrap.4.png | Bin 3839 -> 3828 bytes .../qdeclarativetextedit/data-X11/wrap.5.png | Bin 3940 -> 3927 bytes .../qdeclarativetextedit/data-X11/wrap.6.png | Bin 3943 -> 3930 bytes .../qdeclarativetextedit/data-X11/wrap.7.png | Bin 3943 -> 3930 bytes .../qdeclarativetextedit/data-X11/wrap.qml | 842 +++++++++--------- .../qdeclarativetextinput/data-X11/echoMode.1.png | Bin 339 -> 342 bytes .../qdeclarativetextinput/data-X11/echoMode.2.png | Bin 446 -> 445 bytes .../qdeclarativetextinput/data-X11/echoMode.3.png | Bin 510 -> 508 bytes .../qdeclarativetextinput/data-X11/echoMode.qml | 270 +++--- .../qdeclarativetextinput/data-X11/hAlign.0.png | Bin 3661 -> 3685 bytes .../qdeclarativetextinput/data-X11/hAlign.qml | 48 +- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 7 +- 59 files changed, 2838 insertions(+), 1892 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png index d1f06fa..63a594e 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png index 9e6e29c..05e24c6 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml index b1ffe8f..059128d 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml @@ -1550,7 +1550,7 @@ VisualTest { } Frame { msec: 4240 - hash: "ad913e53e63c030ffdf4560766722760" + hash: "84b477b46c313d6dcb0a77628182905b" } Mouse { type: 5 @@ -1570,7 +1570,7 @@ VisualTest { } Frame { msec: 4256 - hash: "ef31f8a4d5bde5a2e308d19ee6d5e759" + hash: "281c0499db31ca78175ca7af6292b853" } Mouse { type: 5 @@ -1582,7 +1582,7 @@ VisualTest { } Frame { msec: 4272 - hash: "3ba07527f66e8bea5a8fb7647b0b4f3f" + hash: "5c29d61f037e4636988fdc99ee2ed8a4" } Mouse { type: 5 @@ -1594,7 +1594,7 @@ VisualTest { } Frame { msec: 4288 - hash: "70e5fe656f5fd843383964825690b678" + hash: "a18f5e9f7be932dcd1bcb4c7fe0797e8" } Mouse { type: 5 @@ -1614,7 +1614,7 @@ VisualTest { } Frame { msec: 4304 - hash: "b7d8738be4cd6caa63dbecdb0f810a2f" + hash: "85a4130b4a57ef79e90d350cf4816801" } Mouse { type: 5 @@ -1626,7 +1626,7 @@ VisualTest { } Frame { msec: 4320 - hash: "d6312191f9d7bbddc07f9253d8a93469" + hash: "364dd89fd6f96e1c77723436c7078a7b" } Mouse { type: 5 @@ -1638,7 +1638,7 @@ VisualTest { } Frame { msec: 4336 - hash: "b182da64886cf4f444296e5fde26701e" + hash: "3e37312c45aa92de34d9661f9b482c48" } Mouse { type: 5 @@ -1650,7 +1650,7 @@ VisualTest { } Frame { msec: 4352 - hash: "ebefef14b6fb990e0c6900884528bbd3" + hash: "dc2d63ad430ea6214f962629793925f3" } Mouse { type: 5 @@ -1662,7 +1662,7 @@ VisualTest { } Frame { msec: 4368 - hash: "9a3451ed091b1bb6b975a9c5506b1ea4" + hash: "188fe1e6af9d02b2680426127ef1d39e" } Mouse { type: 5 @@ -1674,7 +1674,7 @@ VisualTest { } Frame { msec: 4384 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Mouse { type: 5 @@ -1686,7 +1686,7 @@ VisualTest { } Frame { msec: 4400 - hash: "eaaf9ea1d7fcf4a2a9dd58b1b5bb3cae" + hash: "bb74813667f49b15978aa78843436205" } Mouse { type: 5 @@ -1698,7 +1698,7 @@ VisualTest { } Frame { msec: 4416 - hash: "7ca8e3d76cf913d85f84f0b96acde829" + hash: "8e88500470517ed1d7c3ca10edd4e230" } Mouse { type: 5 @@ -1710,7 +1710,7 @@ VisualTest { } Frame { msec: 4432 - hash: "7cfef56b24a552c6d4ecb3d0b88a1d08" + hash: "614dc45593db51f467adeda87d84f9a4" } Mouse { type: 5 @@ -1730,7 +1730,7 @@ VisualTest { } Frame { msec: 4448 - hash: "d032b257259810b4fe514c63ca5c9e4b" + hash: "b170583b9b284debdd04af643752aa6b" } Mouse { type: 5 @@ -1742,7 +1742,7 @@ VisualTest { } Frame { msec: 4464 - hash: "568f6a57e6f1644b0dc245d03a1d7b85" + hash: "dba0394b92f3ee166bc397439a86e6dc" } Mouse { type: 5 @@ -1754,87 +1754,87 @@ VisualTest { } Frame { msec: 4480 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4496 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4512 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4528 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4544 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4560 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4576 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4592 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4608 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4624 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4640 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4656 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4672 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4688 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4704 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4720 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4736 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4752 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4768 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4784 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4800 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4816 @@ -1842,11 +1842,11 @@ VisualTest { } Frame { msec: 4832 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Frame { msec: 4848 - hash: "5cb4cf2c527d821db2a5072dd3702653" + hash: "74b499d5d764bf53efbee8932bab3cc3" } Mouse { type: 5 @@ -1866,7 +1866,7 @@ VisualTest { } Frame { msec: 4864 - hash: "d48ecbd0661e08b2117fe2fd96ffeb2c" + hash: "95ab953fc04389396da9a38d97262d98" } Mouse { type: 5 @@ -1878,7 +1878,7 @@ VisualTest { } Frame { msec: 4880 - hash: "7cfef56b24a552c6d4ecb3d0b88a1d08" + hash: "614dc45593db51f467adeda87d84f9a4" } Mouse { type: 5 @@ -1890,7 +1890,7 @@ VisualTest { } Frame { msec: 4896 - hash: "5b12e9d17d9d464b055601db9cf0da44" + hash: "0d884cdb22e3668203d07c72055bcb85" } Mouse { type: 5 @@ -1902,7 +1902,7 @@ VisualTest { } Frame { msec: 4912 - hash: "25333e1f0cc9cfc664fd7369af544c06" + hash: "23bd71236829253fb3ef18ebc9dd3136" } Mouse { type: 5 @@ -1914,39 +1914,39 @@ VisualTest { } Frame { msec: 4928 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 4944 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 4960 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 4976 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 4992 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5008 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5024 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5040 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5056 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Mouse { type: 3 @@ -1958,179 +1958,179 @@ VisualTest { } Frame { msec: 5072 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5088 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5104 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5120 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5136 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5152 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5168 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5184 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5200 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5216 - hash: "04290d8d62436c8a812f886e0a56ec1b" + hash: "bdb784f5ccf428f8b8a9d29310069808" } Frame { msec: 5232 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5248 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5264 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5280 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5296 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5312 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5328 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5344 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5360 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5376 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5392 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5408 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5424 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5440 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5456 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5472 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5488 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5504 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5520 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5536 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5552 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5568 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5584 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5600 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5616 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5632 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5648 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5664 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5680 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5696 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5712 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5728 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5744 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5760 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5776 @@ -2138,90 +2138,90 @@ VisualTest { } Frame { msec: 5792 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5808 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5824 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5840 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5856 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5872 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5888 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5904 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5920 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5936 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5952 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5968 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 5984 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6000 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6016 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6032 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6048 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6064 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6080 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6096 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6112 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } Frame { msec: 6128 - hash: "dbd87bf02d698b7f053d307ef0c98452" + hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" } } diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png new file mode 100644 index 0000000..99748a7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png new file mode 100644 index 0000000..5393dd8 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png new file mode 100644 index 0000000..8c17bf7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png new file mode 100644 index 0000000..1317eef Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml new file mode 100644 index 0000000..930f08f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml @@ -0,0 +1,951 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "colorAnimation-visual.0.png" + } + Frame { + msec: 32 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 48 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 64 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 80 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 96 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 112 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 128 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 144 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 160 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 176 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 192 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 208 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 224 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 240 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 256 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 272 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 288 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 304 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 320 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 336 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 352 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 368 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 384 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 400 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 416 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 432 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 448 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 464 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 480 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 496 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 512 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 93; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 528 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 544 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 560 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 576 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 592 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 93; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 608 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 624 + hash: "e5bda0daf98288ce18db6ce06eda3ba0" + } + Frame { + msec: 640 + hash: "d35008f75b8c992f80fb16ba7203649d" + } + Frame { + msec: 656 + hash: "14f43e0784ddf42ea8550db88c501bf1" + } + Frame { + msec: 672 + hash: "02276e158b5391480b1bdeaadf1fb903" + } + Frame { + msec: 688 + hash: "35d9513eb97a2c482b7cd197de910934" + } + Frame { + msec: 704 + hash: "faf0fd681e60bb2489099f5df772b6cd" + } + Frame { + msec: 720 + hash: "a863d3e346f94785a3a392fdc91526eb" + } + Frame { + msec: 736 + hash: "fdf328d3f6eb8410da59a91345e41a44" + } + Frame { + msec: 752 + hash: "83514a3b10d5be8f6c3b128d0f3e0b1c" + } + Frame { + msec: 768 + hash: "ead0eae76cd00189075964671effbaea" + } + Frame { + msec: 784 + hash: "24d2457fcd51490fda23071bf9929d12" + } + Frame { + msec: 800 + hash: "1478683446cf543dacbe31d0b76a98a6" + } + Frame { + msec: 816 + hash: "99f7da1f31fe920f6c02add4042ae925" + } + Frame { + msec: 832 + hash: "22def892006cf66667770b0f17baf6c0" + } + Frame { + msec: 848 + hash: "6a36d5a77099bfd58baf285478ff04e4" + } + Frame { + msec: 864 + hash: "6258150666b59b20ab476724c07fc20c" + } + Frame { + msec: 880 + hash: "f1636315bc950a6dd400d9c7ed263b88" + } + Frame { + msec: 896 + hash: "18447ea8dc2e8da956788e5b3cf3790a" + } + Frame { + msec: 912 + hash: "1d2a6e65997a73e9e670356c8e8b63b2" + } + Frame { + msec: 928 + hash: "bed0242c0f9ef229d1392835286d5782" + } + Frame { + msec: 944 + hash: "88923c190e9e5beadef8a409c06df9d6" + } + Frame { + msec: 960 + hash: "2d133e7ee60c97386f57838b3f0976c7" + } + Frame { + msec: 976 + image: "colorAnimation-visual.1.png" + } + Frame { + msec: 992 + hash: "395195716d76bc0be7b2033ed37a7a1c" + } + Frame { + msec: 1008 + hash: "243dbffcf416926242bbcb7348974c4c" + } + Frame { + msec: 1024 + hash: "a755068679616d8ac65c2aa7431f2a19" + } + Frame { + msec: 1040 + hash: "e8249b35a47eb492cbdf2d91cc8426f0" + } + Frame { + msec: 1056 + hash: "15f3da1c0e6f0779b96859d51171dd27" + } + Frame { + msec: 1072 + hash: "258c0c756aac3de743b43051f2aace6b" + } + Frame { + msec: 1088 + hash: "a58b9fdf301d72b2cc5c93934cc8927b" + } + Frame { + msec: 1104 + hash: "a9181d30870d472521f8904818ce520f" + } + Frame { + msec: 1120 + hash: "7f9e94069ccf3897c26a71bd7becd903" + } + Frame { + msec: 1136 + hash: "bdf305c2f46cdb86dbf57b1e0cc5a65b" + } + Frame { + msec: 1152 + hash: "fe5b6865d7e4fc7d1d42c1e74f8666f7" + } + Frame { + msec: 1168 + hash: "734f0de45a6e34c9eab7ef606196f96a" + } + Frame { + msec: 1184 + hash: "02a361c4534fdf7f286dc3e6dc23275c" + } + Frame { + msec: 1200 + hash: "e649155ad69999c14b92f6561e4d1185" + } + Frame { + msec: 1216 + hash: "01af177084fab755d622973f64b92018" + } + Frame { + msec: 1232 + hash: "097cc4a082dfab995d213a3a73883c97" + } + Frame { + msec: 1248 + hash: "d7b4239a3280b1eb8e885e3f422df8e9" + } + Frame { + msec: 1264 + hash: "59893977994e34e83f91e7ce3ad65d6d" + } + Frame { + msec: 1280 + hash: "b68e3fbb5cdcd6bd96df7dec558db42b" + } + Frame { + msec: 1296 + hash: "94ad0580648f36a1e18a9ea7e249b04d" + } + Frame { + msec: 1312 + hash: "750a4c01d2f5806a89a1c6cc6a9b9a68" + } + Frame { + msec: 1328 + hash: "4f109f50f388f1bfa4bc6b03b3e6e514" + } + Frame { + msec: 1344 + hash: "c6168d5cf27a533e8ee636637667be47" + } + Frame { + msec: 1360 + hash: "f8120547bed987aa34c00da5a01a4d1e" + } + Frame { + msec: 1376 + hash: "cbff526136fa2c128c8b898fbbef9e5c" + } + Frame { + msec: 1392 + hash: "f29e52398fab1a239a63df4c32f2fc69" + } + Frame { + msec: 1408 + hash: "7178bfe86fd2fd513218b33760460f8d" + } + Frame { + msec: 1424 + hash: "ca83285bc8ac633403896fe976896eb0" + } + Frame { + msec: 1440 + hash: "96ba486c09cc69d5aa38c46c00df1181" + } + Frame { + msec: 1456 + hash: "b88eab335842787869f4a14824c19dd8" + } + Frame { + msec: 1472 + hash: "065aa59012729e1e1a246a2083142690" + } + Frame { + msec: 1488 + hash: "dd0e98c8398861002c5f178c5f9f612d" + } + Frame { + msec: 1504 + hash: "04192c2b545948048eccf4d81bbde198" + } + Frame { + msec: 1520 + hash: "bb7502c7208281ef9fd41714ab88a1a8" + } + Frame { + msec: 1536 + hash: "5397195471890d08b703dca101e5bc7c" + } + Frame { + msec: 1552 + hash: "4c678cdbebb2ffd2cbf012ca77800cde" + } + Frame { + msec: 1568 + hash: "0d7a34ecd0c7f52b2c015037bf1902c6" + } + Frame { + msec: 1584 + hash: "fd9d5048be749ac4369fda2d018b43ae" + } + Frame { + msec: 1600 + hash: "93ee03795cd57ae6f7fe3a020b039ad4" + } + Frame { + msec: 1616 + hash: "5e1118963f219c39761ca7fbf564a9ca" + } + Frame { + msec: 1632 + hash: "8f40038741903150136170503649d941" + } + Frame { + msec: 1648 + hash: "b087b7d0aa6224821f8e18718ff5e77d" + } + Frame { + msec: 1664 + hash: "aa46b04a3c67dc772265ed2901955565" + } + Frame { + msec: 1680 + hash: "ac024bf2aeb4becdf31a09fe0a6db8f3" + } + Frame { + msec: 1696 + hash: "13745a174e4d06e2108a5bf125ba50cc" + } + Frame { + msec: 1712 + hash: "bd972f0d8e230eca0b3fea1b8c960c08" + } + Frame { + msec: 1728 + hash: "cbdbec802a58e7ced0cf45b3ab0bc0ba" + } + Frame { + msec: 1744 + hash: "5128584c50305c7d218b81b8367fa3d5" + } + Frame { + msec: 1760 + hash: "a71461d3593f3685620668916de870bd" + } + Frame { + msec: 1776 + hash: "74ebac8f32cf044b58d9883dbcd9a722" + } + Frame { + msec: 1792 + hash: "fedc5b638f339b90fe59b478721e65b7" + } + Frame { + msec: 1808 + hash: "8593a81be812edf54ec94da8ae9c1314" + } + Frame { + msec: 1824 + hash: "4e9b083075bc5e9287a8abc982778b56" + } + Frame { + msec: 1840 + hash: "1d6f02aa99afa47d77fc49ab894b365a" + } + Frame { + msec: 1856 + hash: "a204feec783b3b05de4c209c21745826" + } + Frame { + msec: 1872 + hash: "665a2a8ff00b9663157802767f504754" + } + Frame { + msec: 1888 + hash: "624fb09ebe60cb87d767faf8d2420b1e" + } + Frame { + msec: 1904 + hash: "e5af0cdc33f3275a25abb09e9165f310" + } + Frame { + msec: 1920 + hash: "02bafb5a81ca66f7670ac93de5123860" + } + Frame { + msec: 1936 + image: "colorAnimation-visual.2.png" + } + Frame { + msec: 1952 + hash: "b5abd0dff1ab076faac7cc226e83f5d0" + } + Frame { + msec: 1968 + hash: "b759acc35bccff8efc2e6fe276ddc0f7" + } + Frame { + msec: 1984 + hash: "ce52e18c1f7732768779863b45314ff5" + } + Frame { + msec: 2000 + hash: "99d30652559dd6931e0c95543eeaa149" + } + Frame { + msec: 2016 + hash: "ffbd9a00e05e085b89296d19d5caec57" + } + Frame { + msec: 2032 + hash: "9c9d658b9c25602816b8066bf19105db" + } + Frame { + msec: 2048 + hash: "2b7fd058e6601e22a30bb7106b1c683b" + } + Frame { + msec: 2064 + hash: "f4c7e26b19ee0a3e7c9688685eb7bd05" + } + Frame { + msec: 2080 + hash: "0dc6d593bceff56b7f81f2a49d37fefb" + } + Frame { + msec: 2096 + hash: "9bfd7ad5091ccbdde43c593e133a7b10" + } + Frame { + msec: 2112 + hash: "2703b617937914a90ea42ebf249d79ee" + } + Frame { + msec: 2128 + hash: "b77e2983138254016c4cca53100f46fa" + } + Frame { + msec: 2144 + hash: "60c4dd24187d1281081479e586f02b37" + } + Frame { + msec: 2160 + hash: "62f2511abd99ef1231c9fa4b91d4abfe" + } + Frame { + msec: 2176 + hash: "e309b3353fd174e883d309571caddc98" + } + Frame { + msec: 2192 + hash: "1e2d6a134c7b12dde551b148ef4f088c" + } + Frame { + msec: 2208 + hash: "e5dc5450604a491cc24a0dcf5c278b58" + } + Frame { + msec: 2224 + hash: "c8dae97c10e1962c1e6a51ab3ab8579e" + } + Frame { + msec: 2240 + hash: "4e1b7e06f55fb084080689b474f1fe1d" + } + Frame { + msec: 2256 + hash: "b4639c907fa937bf15fac62421170cd8" + } + Frame { + msec: 2272 + hash: "c250208a0caeb5f6cb4d3aac3d7d350b" + } + Frame { + msec: 2288 + hash: "a73351eabecf0d71149efe31f197413e" + } + Frame { + msec: 2304 + hash: "479425f1b7aff79e4dfb7fca534af018" + } + Frame { + msec: 2320 + hash: "046d0f0040a52d1f26ba9f7c5de06ef4" + } + Frame { + msec: 2336 + hash: "655778bf13c6080903150b0eb43a7edc" + } + Frame { + msec: 2352 + hash: "72da0bbe81514870655fdd3354adac60" + } + Frame { + msec: 2368 + hash: "defe0bdf675c65fff55aaaced1e4dae7" + } + Frame { + msec: 2384 + hash: "c988628b6c3d3780e9a865c7694926cd" + } + Frame { + msec: 2400 + hash: "5ab17563655231089edd986ff13d6012" + } + Frame { + msec: 2416 + hash: "c1adff1d2e5800ed466d1691d3b17382" + } + Frame { + msec: 2432 + hash: "70129ba01fbb19592b9dc0d0a3b3e7df" + } + Frame { + msec: 2448 + hash: "0000829ef7ed908bf430d42904d59cc2" + } + Frame { + msec: 2464 + hash: "843d2927f50ab87b4a86b7a6aaeed91f" + } + Frame { + msec: 2480 + hash: "da86d21756025e7de8050586d5e2a1f8" + } + Frame { + msec: 2496 + hash: "48dd1bd6580133b0793fee327ea4f1e6" + } + Frame { + msec: 2512 + hash: "f0618193dcd0ba2837249515a1898b1c" + } + Frame { + msec: 2528 + hash: "a530184e57251065286c0cbba7301e9c" + } + Frame { + msec: 2544 + hash: "64a1d7203973d65dd342793007a61c58" + } + Frame { + msec: 2560 + hash: "5b830dfc6ba442772de87d75d5a578de" + } + Frame { + msec: 2576 + hash: "5563b056b0409b65f60dd16dd0dd890e" + } + Frame { + msec: 2592 + hash: "b8bcf9ad2ca8720c11563a23d8280804" + } + Frame { + msec: 2608 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2624 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2640 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2656 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2672 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2688 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2704 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2720 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2736 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2752 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2768 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2784 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2800 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2816 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2832 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2848 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2864 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2880 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2896 + image: "colorAnimation-visual.3.png" + } + Frame { + msec: 2912 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2928 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2944 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2960 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2976 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2992 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3008 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3024 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3040 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3056 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3072 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3088 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3104 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3120 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3136 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3152 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3168 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3184 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3200 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3216 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3232 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3248 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3264 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3280 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3296 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3312 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3328 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3344 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3360 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3376 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3392 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3408 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3424 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3440 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3456 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3472 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3488 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3504 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3520 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3536 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3552 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3568 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3584 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3600 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3616 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3632 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3648 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3664 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3680 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png index 75a6c49..f5b5622 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml index 3365d40..3869b73 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml @@ -10,126 +10,126 @@ VisualTest { } Frame { msec: 32 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 48 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 64 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 80 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 96 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 112 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 128 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 144 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 160 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 176 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 192 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 208 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 224 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 240 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 256 - hash: "1a396cf01a6c31155609532654653599" + hash: "3b670c14311188b82f37aa260fb1a8de" } Frame { msec: 272 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 288 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 304 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 320 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 336 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 352 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 368 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 384 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 400 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 416 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 432 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 448 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 464 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 480 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 496 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } Frame { msec: 512 - hash: "8a4565aee33d40840bda26b65b6a0d90" + hash: "07b267d5a8c194322d339e1ad609f199" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png index ae89849..6525dbb 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png index 7b7db05..5b8d209 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png index 7c1442f..cf012ba 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png index c01c980..57e77a4 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png index 8806e4c..24d26bd 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png index b331119..a540734 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png index 76e3c6f..17da643 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.7.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.7.png index 141753c..e03cfe4 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml index 4548e5b..2cbd278 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "e94ba580322887dbbbf9cb6309e39c23" + hash: "2ddcb50f5d285eb80a8136f0cf4cf85a" } Frame { msec: 48 - hash: "787a59cda2c0b27d8959026e6d1b9427" + hash: "519d93a844e05f8215139d91c9aef58b" } Frame { msec: 64 - hash: "9ca724d4b31aa16015b5cbb50eea0c3a" + hash: "9f075a5547e4dc67cbe2ace2766395bb" } Frame { msec: 80 - hash: "8a2c62a0190da1b7c1bade243baea6b8" + hash: "8fc48f74a51d45b4ea1fb7bd1d48002f" } Frame { msec: 96 - hash: "e129bebca7ad348c3134569d8eee4efc" + hash: "a28fc4be5a5bb9ff36f796d9b071f02c" } Frame { msec: 112 - hash: "fd6387415e1c02fe6d17d9c3aa1d1ed8" + hash: "ebc14c2905f3596ec451dd96409e6001" } Frame { msec: 128 - hash: "a82a4042fdca7c30facd2c4740c455f7" + hash: "4f270bdcff44006a56055edb1cda522a" } Frame { msec: 144 - hash: "62195722eb3acbfbad137ec71fd50bfe" + hash: "571f347e764bf38985768c85c2a13ba1" } Frame { msec: 160 - hash: "449819cdc880d59650732b5447ec6237" + hash: "b1aa23268167b7e2a1190288926f52c0" } Frame { msec: 176 - hash: "552a838ebcacc0e08fa93b64a2433831" + hash: "06d548aef9a678edbf3ab4d3ce62a647" } Frame { msec: 192 - hash: "3984992606d54f05eb31dd0974af2183" + hash: "daf6af0ae78f39566913c656450a66e5" } Frame { msec: 208 - hash: "3fd7225bbb0215ca8b6397580f2352a5" + hash: "f101cd0c026ee0ed6ccef7a4aed302a0" } Frame { msec: 224 - hash: "0fd8f26f40a9049de1cf2a9493d579d1" + hash: "b3caa673f072c53d31d71109c9b33357" } Frame { msec: 240 - hash: "d08f0c57f071dc42e79fc5e0e3c32eeb" + hash: "8596f1d305d6b8f97b9feda9e69bdefe" } Frame { msec: 256 - hash: "084c2db330ee82cd032df248ecc9629d" + hash: "23c23df2c130aafb2092fe47a958a4cd" } Frame { msec: 272 - hash: "98da0d7f280d7fc4579c970c9a173b51" + hash: "66a4f2d8213264437a5f4d6cf10cd442" } Frame { msec: 288 - hash: "4c819c54ced1b6ef0574417a7e11f2e7" + hash: "6392490111813bad0a9467cc0c1746ed" } Frame { msec: 304 - hash: "3dc5f7b412cb176c3b23d37cda3ef87c" + hash: "c115a47e0ecab63b881e2ec492d24e68" } Frame { msec: 320 - hash: "c368a01b43d94205c03f9c750c37f330" + hash: "c2a2b57e6f9ea2975c0846124d2dbc66" } Frame { msec: 336 - hash: "8842bd0c8b17cac4fc9df84835999174" + hash: "8286c315dfda4241607b2de1154f869d" } Frame { msec: 352 - hash: "26829e9c7ca44dfcb0c03852f4158a18" + hash: "3f0f7cae80357176892ff7628ec3153a" } Frame { msec: 368 - hash: "ecffdb0888f1721e27b163e1f29a1950" + hash: "d13bde4a5b5ed8202f92ae33913166c9" } Frame { msec: 384 - hash: "eaead96f2683c464a12df8aadba20691" + hash: "b70cc32134b1b0d31a5e7f145af09495" } Frame { msec: 400 - hash: "1e931963925bd208dce1ec9011372a3b" + hash: "03ebc2ff317ac840f4508e8701d66955" } Frame { msec: 416 - hash: "1c3fd049001c1e883f21d0d1e0e32cba" + hash: "8dff08e72365e8e2fee8088c386dedca" } Frame { msec: 432 - hash: "e8c3422ca637750ac52565594737d092" + hash: "720f3bbaf3fa3e3a064747d5689e47a0" } Frame { msec: 448 - hash: "b1c36322cf89e15a80af7c43f2aebca1" + hash: "350e3ebfcfef96969ef5b8d5944f7e62" } Frame { msec: 464 - hash: "f676c3171495f7bb2cb1812cfebaa17a" + hash: "1e4e6e68b3a8eac0c5cd039164eec166" } Frame { msec: 480 - hash: "255119e2efa99c8e31fee611aaaa5137" + hash: "62a10c4250ad025139a3f9e72109e8e1" } Frame { msec: 496 - hash: "e0bd32e3d44cfc2351db105f4595f18a" + hash: "23cfd643adfc98f6a06c7e7b15dac954" } Frame { msec: 512 - hash: "b7f23b8f3769f929b42491efda7ebe19" + hash: "3a78930d5b86b886723fad85e77dd075" } Frame { msec: 528 - hash: "718cee11d869a8a8c5191cc0c09f2d30" + hash: "64dc878e2f527e80403c766e61fe14a6" } Frame { msec: 544 - hash: "fbdbf92f8c5f507605ff50abc594682b" + hash: "d79160989d2584044042271e79a88e69" } Frame { msec: 560 - hash: "c07fdc69c72b40d3c8dd1cc499008888" + hash: "22cbaea4affc88433834c7d0dc1f1644" } Frame { msec: 576 - hash: "38e17ecd537dc0f51211ad672a2ebb21" + hash: "77cb616902257e1f239a0e6bfaabb33c" } Frame { msec: 592 - hash: "2cbdc8728ef779c62f9938672986658a" + hash: "a2fe73dced03b23c4acb9aae9b774b41" } Frame { msec: 608 - hash: "7fb66509d5d1df34861e9c70f9a579f0" + hash: "230e21d3a9ed0e185593677233af1275" } Frame { msec: 624 - hash: "410b89392e859058718a08b79ec3d8fa" + hash: "4e10ecffac4e06d624855d3f8917f76c" } Frame { msec: 640 - hash: "9bd90f80700217d08dafed93b81ee9cf" + hash: "84f49d56baace4a02e50d3eafaea04ec" } Frame { msec: 656 - hash: "6d83671504a4274887b4e0d9bd2b24e7" + hash: "e3cd0b334551a9f91723eb2c876d335a" } Frame { msec: 672 - hash: "51ff7bd3fd4a776af33fce7b935b145c" + hash: "259330f3ec390c9926d9c2ddc2d77319" } Frame { msec: 688 - hash: "20f27392368b63b248bcd455cf3c9106" + hash: "cc659623bfa385d282d608684d7cdc2b" } Frame { msec: 704 - hash: "1a5ab296bd55aa215c9b04a7ff6c73a1" + hash: "47ed75d077143a6bfa0e10158550c542" } Frame { msec: 720 - hash: "020fd7b14e8662fc006b0c39adca7c6a" + hash: "0de93bbd9f9ee63e97968089321003e1" } Frame { msec: 736 - hash: "2619120bdb25a153963bdf05c4a16d44" + hash: "b33d867d4399879256a01344ce0b81f2" } Frame { msec: 752 - hash: "fd321314031efeb9ce71146764289d9f" + hash: "97c31fce937d11f62bebc6169b464a42" } Frame { msec: 768 - hash: "378a71f09445dfff284db919787cbf87" + hash: "ea4166b8a4001bca3f27af30f251267f" } Frame { msec: 784 - hash: "d59eefe82ab8a00c903141dd9ea767ef" + hash: "b56d270b7893565f8d7ed2a0bfe10d60" } Frame { msec: 800 - hash: "0a65004d69a4567f2a5c7e84dab3a905" + hash: "88a42559fe22b45cff379258dd40ced9" } Frame { msec: 816 - hash: "92a4631716a51ff484ca14d9cfe05b2e" + hash: "4ee1a711cb8d26087e1b75a3166ca5f0" } Frame { msec: 832 - hash: "87203f627cf410cad56d6ba38a140efa" + hash: "9b88a00d041092e79b4a08bccbaca0e1" } Frame { msec: 848 - hash: "054cc085998cc059a6b7b4a7300dd36b" + hash: "afea397b3d740dc42f0313624fc10efd" } Frame { msec: 864 - hash: "af3fefeb908a0485c723d36f61eff0a4" + hash: "39fd8e4cefbd9fed283d62a7aecded22" } Frame { msec: 880 - hash: "3f905d1e1ea79858b5a9bbfeab4eb255" + hash: "916b783d2379ac054c749e7b6eae7ddf" } Frame { msec: 896 - hash: "f935f1fc5f26a201098d894fca9a4d1f" + hash: "fccd44740ff7ffb0f2adccf00a7588bd" } Frame { msec: 912 - hash: "42b003dbb531da514716b9c32bdd3614" + hash: "c064f20703a13543e8273d251fd645fe" } Frame { msec: 928 - hash: "a82fed83ee4efee7896b639c7691b13a" + hash: "1b9b0755101841e3d1cbe208d81575d5" } Frame { msec: 944 - hash: "31ad8cbf875233ea495330b0d3d4d2dd" + hash: "1eb5e4a301b565012bc8f6af8e879eb9" } Frame { msec: 960 - hash: "00586f2f1d49fa81f90f7b06614311b4" + hash: "032db65eb5c405e433f88df3975c322b" } Frame { msec: 976 @@ -250,175 +250,175 @@ VisualTest { } Frame { msec: 992 - hash: "5d71ff48b865ad4266eb8292f981b04e" + hash: "fdb67e11d7cc767b2389a8bbef752c7e" } Frame { msec: 1008 - hash: "df599d934d131c92b209284277009efb" + hash: "ed89cb161336c61b13e3514fdf816023" } Frame { msec: 1024 - hash: "5aaf33d11eb70ffdfe89246c637caed7" + hash: "331b873c5367e0aaa62af85cb54a6a96" } Frame { msec: 1040 - hash: "9648cf623a66ded145c4fd23a42917b3" + hash: "cde4503f02f0c3732e310a7d0418cd1e" } Frame { msec: 1056 - hash: "9d33c2cc44ceac5a527ddcf809a51df6" + hash: "f8c028c591fc1495d5bec8763da6f011" } Frame { msec: 1072 - hash: "6d0ad2e0d012e53a03e246e6d5e49e13" + hash: "9dc68483218335afe41aa3cd052a98b5" } Frame { msec: 1088 - hash: "d33fa68796e38b19f44571d11c1bcd33" + hash: "31105c455418a3284700cf9c88571507" } Frame { msec: 1104 - hash: "636680f49bbf30b0fac31a6c581f18dd" + hash: "72724947167a1ac600aaa1d7f331f7ec" } Frame { msec: 1120 - hash: "66801dbc39301e6b46b244fe502e0340" + hash: "a4a1243326de6b9e93948fcb22fecac4" } Frame { msec: 1136 - hash: "f8fa6a033483279e78636f26493b10ac" + hash: "c3e26e62f12dd658f21a0330fefb0533" } Frame { msec: 1152 - hash: "11b46611550173df42986dee4339d907" + hash: "15d85b4a9ad761a911bbaa3e0c4b2b61" } Frame { msec: 1168 - hash: "5c9afdb519006079ee8d28b2b60d0b76" + hash: "bce1400b437cc43b8ff57b1a5fbc9551" } Frame { msec: 1184 - hash: "9a55c38b2cd8abf25fbe448c7ef80971" + hash: "5d05848afcd8f697c1b3762f00a759f6" } Frame { msec: 1200 - hash: "27ebdf1424e892b35c93ec009d942407" + hash: "6c83f68ea72cd54793149f4c9e759d44" } Frame { msec: 1216 - hash: "2d9e3f0ae56f7337012b51c4dd173108" + hash: "5206b93666e51cee3e25a7a85e27b5b8" } Frame { msec: 1232 - hash: "e6f89ca892131d68ff1f4ca95c95d807" + hash: "a3ef5c76efece4455e5ad12bcc8bd8f5" } Frame { msec: 1248 - hash: "f75791f1b12a217d37acb09bdb114cc5" + hash: "c36c6ee7b6c8074f5dc1af7446fad1ad" } Frame { msec: 1264 - hash: "94c5ab1460fb1b0f957a9718b45bca36" + hash: "bb0887f1f10548bb53f0dc1ffeec25ee" } Frame { msec: 1280 - hash: "e246c8a0ec3d01ea20258b24a5673fe1" + hash: "ebffe547a7c3528e5deddc590510506d" } Frame { msec: 1296 - hash: "529de7735e73409dff266d8c1275215c" + hash: "18962faef1a1a1207a3c6783116154a2" } Frame { msec: 1312 - hash: "330400763a670580570cb62241ebec62" + hash: "8aaa876e4a6c4de04e557f35ddd4fb61" } Frame { msec: 1328 - hash: "ae444d1de9c509fc6f74136ca90f927a" + hash: "c66123bb4e01ce267629f5b50d147db1" } Frame { msec: 1344 - hash: "c43631ca8ee90ea5dc7664be5bc45429" + hash: "334e5acf84d90e70ca3085b9d5e057a7" } Frame { msec: 1360 - hash: "b366ac4a5b66c331a7667e9df0fc4eda" + hash: "9bb49ddcc775307c3c1159908323e010" } Frame { msec: 1376 - hash: "1c7f4c47a9c57a34787cc9703e99bff1" + hash: "1b3cfb8b6b6c39a34ea86a66ea1cc6b1" } Frame { msec: 1392 - hash: "5555535609d512e8d34549b6624f74b8" + hash: "d2a68c6eb2b05390ab1049137f96f227" } Frame { msec: 1408 - hash: "be59df714541923494b59f31f57e310e" + hash: "91e254fd2376ba35a283b18b947ca1a8" } Frame { msec: 1424 - hash: "63e434f053032e54298f6e61c8d4da7d" + hash: "fe94e2e8b4978390e9e8cbfe77dfc241" } Frame { msec: 1440 - hash: "b0bb838637eceb6f8993ebc5b887afed" + hash: "e3d32b73c5c50e7aa59f4e4725de170e" } Frame { msec: 1456 - hash: "fc39f33add4ebcaf578558ecd4aea281" + hash: "a73b90254d7da5557cc3941db0017a65" } Frame { msec: 1472 - hash: "3f36faa7cc1e5898d4d5890c47633ff3" + hash: "9aa49cce5d63f8dd6409995ac6d91d63" } Frame { msec: 1488 - hash: "4b328002b4461869b1f7de48e7291902" + hash: "0ba674df46accec28a3c1b81e656adc7" } Frame { msec: 1504 - hash: "26252c63924d2abcaebea2c7caf1d7aa" + hash: "025a45417b8c75d47b5dac6c5ef913e9" } Frame { msec: 1520 - hash: "a9a6023484ae439be86b2c2ff59dc40b" + hash: "742527b97c7f580b0b7ff9d6aa105d31" } Frame { msec: 1536 - hash: "620dab11bd4aab84cc0d949c48dd9a5d" + hash: "965ec8315d45894e704fcc5a3efc8c55" } Frame { msec: 1552 - hash: "3b45ef80ee3e6fbbd3533bfa0d666e2f" + hash: "6abdd59e6bd2c31124eab254418a5322" } Frame { msec: 1568 - hash: "b33306abcb6a8402e491b7216495c778" + hash: "9f6d06b176c55fa292e7f0ef4b5cd1cb" } Frame { msec: 1584 - hash: "3cc52e8649a02e87785f1dc63f5c1efd" + hash: "05eba8c6e02c0d4af49e59b3346c9e68" } Frame { msec: 1600 - hash: "fe21141f48da685213ed9d7641b2e7a0" + hash: "3c4215f6253aba836516cd51368bc471" } Frame { msec: 1616 - hash: "205aac4e822e20bd32f637256250f3c8" + hash: "c6339a290007c0106cb18ecef5b7392b" } Frame { msec: 1632 - hash: "124df0948f36aaf6151556d301f4b930" + hash: "39a4bcd2ce84035f9db70f196ca00971" } Frame { msec: 1648 - hash: "c1701edd5eaf143fd1dbdc4a5324b48a" + hash: "b75a4be472583c3b893fc894ebe7d4d8" } Frame { msec: 1664 - hash: "117402df55367c918a3835958f4ab1d6" + hash: "d1efebbe748c43b3c1241753612e100d" } Mouse { type: 2 @@ -430,67 +430,67 @@ VisualTest { } Frame { msec: 1680 - hash: "73e3b86a1da28490cae4b03fdceefe19" + hash: "f6f3ad64fb71ffb68a5ea0375cc94bae" } Frame { msec: 1696 - hash: "172e329fb47d6db0180242990a84fe3b" + hash: "778ecbafb5d235edde1683cabe3c3cfe" } Frame { msec: 1712 - hash: "82cf704cdfd406bab22689bc888ddc8d" + hash: "5a41b9196fe4a97e6ba2400806299bd8" } Frame { msec: 1728 - hash: "4c288f198a06d1b2815d34c3c8f97051" + hash: "1c8ddbc5910e35be389a1cb34fab9dec" } Frame { msec: 1744 - hash: "6404d81456bb95a6b1c1ae55a181e40e" + hash: "5e8b236c00087a067d366afde67184f3" } Frame { msec: 1760 - hash: "b2b4b3de77e2b7fd58d3da1ad52355a9" + hash: "72fe42361833054cd9388bb98ac9b150" } Frame { msec: 1776 - hash: "95388037c1f79a9dab951031f1d7c307" + hash: "bbe9f0b030efa716f34a05f0af929c66" } Frame { msec: 1792 - hash: "c4ee57d9bffbb5f0ff173db48eadf2e3" + hash: "cd393fc19a30d896bfe62aa0000308f8" } Frame { msec: 1808 - hash: "703ac9672a9c55cf08e6381ef76ac13c" + hash: "c390f5b1bcff54de203490d8f2616fcd" } Frame { msec: 1824 - hash: "ea7726d2a2923290398262c8f70d511e" + hash: "b5da2ea467c334dd13c75b811b94efb1" } Frame { msec: 1840 - hash: "5d1af6cbdb4ee5b00045751204408632" + hash: "49887c9312c3a4dfc2d9719f47c83a15" } Frame { msec: 1856 - hash: "a52aa37b10a05382f1b136896b7e00e8" + hash: "7f077703e49f154d01c12a44f53469c5" } Frame { msec: 1872 - hash: "a5acc1a45c95a67725e5e15084b7be18" + hash: "7be4130ed767f0e0bf41c3bebf050cac" } Frame { msec: 1888 - hash: "c9fac8b5a4110493958d49b073ea96ed" + hash: "cc1590486c172000557b76c6eadb51e0" } Frame { msec: 1904 - hash: "6fca3a5c6d1cfbf1b905aca25b7785c5" + hash: "7ccd05236d9c1f8af0e9645404326122" } Frame { msec: 1920 - hash: "a40e5e2744d1d84c8b9a45525801a745" + hash: "2da165bf7e868b53b85bb630649ddc3e" } Frame { msec: 1936 @@ -498,239 +498,239 @@ VisualTest { } Frame { msec: 1952 - hash: "b2f980ab19d44ee98ab3e82a19adfe2d" + hash: "2b6a24b6ceeaa956527c872af70fb5f9" } Frame { msec: 1968 - hash: "e01732623930aebefd76ab62c81dc722" + hash: "8c882de21f4ed0fb68433c19b114c3f8" } Frame { msec: 1984 - hash: "3a59c6851bc89eb31100092b1ceddbd9" + hash: "f75226c58726a687079d0d24e865ee6f" } Frame { msec: 2000 - hash: "2949de19eacb9f35816aa7ba69614f2c" + hash: "2fa9b69fe85b4e1361ba260545c10e06" } Frame { msec: 2016 - hash: "f2c4c1f4429cbb6bd10f2318b2cb6904" + hash: "6d513bc03f2798fbce1a0790969da6b5" } Frame { msec: 2032 - hash: "2c48af64162e7e028cd536dba03eab71" + hash: "7e359e605483493e9a865f6eb912c394" } Frame { msec: 2048 - hash: "7fe13b8f9253f720b6591b396cfba2d1" + hash: "497c7c82c24408dcaff5ec981d3d4f35" } Frame { msec: 2064 - hash: "559947a03e650575a764801366cc504b" + hash: "8738b024cf75ef970ffe20166e85141c" } Frame { msec: 2080 - hash: "a8d09f6c862fd5ec2dcf34f06d1ef744" + hash: "014b805eb1ecf2ea1cd61727bfd1ca08" } Frame { msec: 2096 - hash: "e3bb4b62209631ff84134f2243bfdb42" + hash: "a81cde60979300f397054ea017382114" } Frame { msec: 2112 - hash: "a1956a9d1939bc154ea0c88d596948cc" + hash: "c46183b5224e762335eea98d9da65465" } Frame { msec: 2128 - hash: "c98a375727860da1e827d4dd74af8f63" + hash: "11afbb88994f298a1fed6575fae3d7fd" } Frame { msec: 2144 - hash: "df4edcbb2ef5348341ff55c808609b6c" + hash: "0195fa503143561d9ae3ffe68739ca3f" } Frame { msec: 2160 - hash: "6287564be85b7cbadc6bb6f0232bc837" + hash: "6d298df37d2116eb9a62b58853cb3344" } Frame { msec: 2176 - hash: "9826fdb48f7ea770fa5f198ec49d7cb7" + hash: "1660865f00ea9adf94c8e56c7a8a73b2" } Frame { msec: 2192 - hash: "56f82641a5591df9bb929cc0d32eb95d" + hash: "9835b5527b84e8e8a8fea2bdf9653a99" } Frame { msec: 2208 - hash: "526c55e555fb2e58796561efa3568c50" + hash: "ec1158b83daa9e98437abc9ce90b70f0" } Frame { msec: 2224 - hash: "6b4b74613421c1841a17c369cb316754" + hash: "11ce5e37747e05ff5f5071b13324ce9e" } Frame { msec: 2240 - hash: "37f785c30947d5eec113dcf6af649abf" + hash: "6d7d427d5a15a31fd395f26c94ea455e" } Frame { msec: 2256 - hash: "5ff2c975dd9e261c764537c836627c4d" + hash: "828949e0fbdb7c79719fb533febb5b35" } Frame { msec: 2272 - hash: "efe554981583749c3d09988bce7fed02" + hash: "7ef7f73ef6a59c9210cfa37df3894cb1" } Frame { msec: 2288 - hash: "0f7204b4afb0ea5d58e49650e8027c0c" + hash: "e74bec397b32ba2934ffdde23a3d60c6" } Frame { msec: 2304 - hash: "817291f91f4b309710ad3aed53a7d47a" + hash: "09c2ca9c22e9b77bc166b4567b29bca7" } Frame { msec: 2320 - hash: "c15c9cd03089090cf8a777c1f0d88de7" + hash: "44d87983f33c4e03f4be70b406bb9bd9" } Frame { msec: 2336 - hash: "05f45cb8d0856dcc81091351615e35d6" + hash: "92844b36c2f30e618f04bfbc5cfbcad6" } Frame { msec: 2352 - hash: "99785a16fed6d6409b4b47ec55afb56b" + hash: "0245f39a8966c4addb3f8dbcee93cd3f" } Frame { msec: 2368 - hash: "39032cb4432ee9536af500673fccf526" + hash: "eb1e81cfa29295d4b1522c69d4501f51" } Frame { msec: 2384 - hash: "9057653e3cd6042831037d3590e7595b" + hash: "2af9c3bea11b25c0f6c2b780d533a968" } Frame { msec: 2400 - hash: "76c772eb2ab8f117c260c9c96bc99e1d" + hash: "5062e9ab29c4a7a9657a4d29249ca822" } Frame { msec: 2416 - hash: "b6474665b8f8bcdd76d1a38efecad889" + hash: "d7652ddc85d3be3bb3a2fc268ae9bc29" } Frame { msec: 2432 - hash: "106c2d2efafad0181e3ded3a6805f2c6" + hash: "7c924bf2ad6167db439723679b373a3a" } Frame { msec: 2448 - hash: "5275fa4ffef6c1909f9d03bb1e7b9cae" + hash: "a93b61dd26a2ca72100b747ac3ed81b6" } Frame { msec: 2464 - hash: "0c1043c0087d60000dc7259d4ac03618" + hash: "5fedc849d3d21e0acf0ab4a4815a1285" } Frame { msec: 2480 - hash: "645748569b4f5cb9b206b0808bb7d23d" + hash: "4313d2458f4bede8d3b02ac60135e728" } Frame { msec: 2496 - hash: "dd95dfa80e1b3ff511e7c75efd0d87ce" + hash: "0f09e81d89262b569c56a9c876f3898d" } Frame { msec: 2512 - hash: "86b3dd03b04d7610837cdc67cad07e0a" + hash: "ea932789ded14fc5c8bae565b67d004c" } Frame { msec: 2528 - hash: "8264f67ac92e4ebcfe4cc8e954f8c5d2" + hash: "fd1f7b9b51f1284fee4d777ef83bba3f" } Frame { msec: 2544 - hash: "6bf52377d822b09eb28a1ec36d3a36a9" + hash: "e98b884a1ec8ce4b4dc20749b85b571e" } Frame { msec: 2560 - hash: "7ae1d65cdaf7fa71eb4ec318b37bb0aa" + hash: "d144072bb87bb88750b9df9cd92f7a4b" } Frame { msec: 2576 - hash: "860f5ce9844c90cf9e6a6d383ff0972f" + hash: "9d8ad80d3367292d7e89d67cf49862b8" } Frame { msec: 2592 - hash: "5502229c038dfc59d966f69ae6ed8957" + hash: "c09b89e71e862da15d2b9edb0e00aa7b" } Frame { msec: 2608 - hash: "21843c027bc1434ae60b3bb0fced2c54" + hash: "551277add3f8f09951d9c8f55ccd40f7" } Frame { msec: 2624 - hash: "962df45680949c3eb6c968f98cd76b20" + hash: "1d0be0e7108516869374a9b985fd7543" } Frame { msec: 2640 - hash: "f313c26fa76a0edce61244bdf92528e4" + hash: "12e7cfb6c4a26af54c4b35182294a7b7" } Frame { msec: 2656 - hash: "b7bbde239e98cbd66b1e51b54b747f51" + hash: "a666a5a59d5854973668798eb8d508ba" } Frame { msec: 2672 - hash: "62340707fbc832fcb805c8f80ab353d1" + hash: "420d2e21461dc45f134b7dfa11d04d25" } Frame { msec: 2688 - hash: "d008a3f7af1810ff70b68b38a4cd0f0d" + hash: "95f848874899fb58a81c62b5921cf857" } Frame { msec: 2704 - hash: "e651dd628af24faf34d716beb392b052" + hash: "fa3ea7a0f90ca549cc9a857f0647b061" } Frame { msec: 2720 - hash: "a97733963c7a7616b25741545b07ffba" + hash: "cbc5338de6157cd5dad511b246f5093b" } Frame { msec: 2736 - hash: "3e017cc1db720cf16521bd17308e4f44" + hash: "e26b43c83197abab3746830bbfacc0f4" } Frame { msec: 2752 - hash: "13652ebaa610cca71486517e2eed21a5" + hash: "5225e854ff2763e562dee2810331d560" } Frame { msec: 2768 - hash: "09f0f500c6f7d11be39c31f9e589b38a" + hash: "a1d114ea67233ac4c6351e18e3afa64e" } Frame { msec: 2784 - hash: "b87968cbc60ddc6a5f5699e830410eab" + hash: "bc9f12af2d0816bb84fd5040ed29bdad" } Frame { msec: 2800 - hash: "50e65b043d1f07a321a08ee4c25204f6" + hash: "d9337da38caa4ad3385249602a830df3" } Frame { msec: 2816 - hash: "122d1ffa1510468e8c4067e0f511588f" + hash: "6ce20e0c89181b0f11e609b248da71d7" } Frame { msec: 2832 - hash: "585f6c25caaafb99a22a23d8a998d202" + hash: "bbc8337950a78c7bfa48aab2635120a8" } Frame { msec: 2848 - hash: "9b245a00ad576666c10f509d8a80a61e" + hash: "0e28ade7f52f3c27e1dbdd6e98be8c7d" } Frame { msec: 2864 - hash: "9b245a00ad576666c10f509d8a80a61e" + hash: "0e28ade7f52f3c27e1dbdd6e98be8c7d" } Frame { msec: 2880 - hash: "3c5d3d10bacc093afc6a9c0b5aa4cddc" + hash: "b496af17513d60d4028bd7402fbfba93" } Frame { msec: 2896 @@ -738,215 +738,215 @@ VisualTest { } Frame { msec: 2912 - hash: "31926d69c2309fdf13fbd7f0e9868c3d" + hash: "29aa7ce0fb1aa350753d3ec6da05bdf9" } Frame { msec: 2928 - hash: "eb3acacce5dd31b0e94b59b9e546ccae" + hash: "fde474797d8105d9d004a7020e010fa4" } Frame { msec: 2944 - hash: "9a51cff3276d75803a0a6e480f7ecb70" + hash: "5a553d9a4bd2ef5d86f5eb37a863d28f" } Frame { msec: 2960 - hash: "fbbd8b9d519993a699815d935bcd2b9f" + hash: "2dcbf6c84abd49529f0b5d85bfb74808" } Frame { msec: 2976 - hash: "0314190c6de73f9f374a4eaed0709645" + hash: "e96ec3b7d37bbf4c9ca297ad5afde31c" } Frame { msec: 2992 - hash: "8ca1a203bdb5446094eb948aeb0a333e" + hash: "9d824068affe32c143226b0b530206fc" } Frame { msec: 3008 - hash: "301e1b86ce38e11ad9d0d7aba0909985" + hash: "3e85f0ace68cffed47f4c9b00145f0f0" } Frame { msec: 3024 - hash: "922095867d0a91b73ab7a63df2041279" + hash: "540b8e1e2bee7d2ba5e29fd3b1086cd1" } Frame { msec: 3040 - hash: "ba8275f3ba4633bf64a1f81f630c90f1" + hash: "0786585d11934c5e4a7e965eaac9a152" } Frame { msec: 3056 - hash: "efe39545279a7bd015d2de75d2b9d8b1" + hash: "8271705df2ca697f4343007a7810d4ac" } Frame { msec: 3072 - hash: "78926c3c0c6fcf89b9291f9902710964" + hash: "b98e1cd20ab2e4239f35d04df5e5175a" } Frame { msec: 3088 - hash: "ea63dcb7f00d3ddede0d8be59ad9d6bc" + hash: "ab1a7eaa5c5d919ee76cba405d0dd4cd" } Frame { msec: 3104 - hash: "286ad493301b713a49e378f123482a53" + hash: "52682386448379a395dc6c541224b7d4" } Frame { msec: 3120 - hash: "a4bbbb8bb88188d3e99996502e3eebd1" + hash: "31dffcb9da94dfc085ab8c561404c248" } Frame { msec: 3136 - hash: "a6100e79f3dc5af594e86ab6cd8dfb76" + hash: "f3703eed8ebf9ece776ebe51e4c60ae6" } Frame { msec: 3152 - hash: "d9e3f777dc89bcf1b7f712206db768e2" + hash: "1126b90345bb42691cd17f37ecec6bdb" } Frame { msec: 3168 - hash: "768045c600c0aa0b1e9e6f012733c600" + hash: "7a63ab96d1c8d4992c03a6f59bba4e7e" } Frame { msec: 3184 - hash: "d8b4caa641ddee786f7898359efe9d07" + hash: "91f4a00c9a7ea6164b334aa4b90da862" } Frame { msec: 3200 - hash: "f7c3b76d5bb7c263ac9447eaad685158" + hash: "485471140f6a5336837377612e7a85bf" } Frame { msec: 3216 - hash: "f7f97db815d653ec29fa31b87f72af2a" + hash: "96881b4021aff05020e0a9342fbae75d" } Frame { msec: 3232 - hash: "18524623762487b60943312cd8bd4388" + hash: "9891326646c3da4ff250aab69c862f96" } Frame { msec: 3248 - hash: "5823dee5dd56e9f7515601f9629ccbae" + hash: "f00f36bbb5a828824c596ee6f85bec2f" } Frame { msec: 3264 - hash: "5823dee5dd56e9f7515601f9629ccbae" + hash: "f00f36bbb5a828824c596ee6f85bec2f" } Frame { msec: 3280 - hash: "5823dee5dd56e9f7515601f9629ccbae" + hash: "f00f36bbb5a828824c596ee6f85bec2f" } Frame { msec: 3296 - hash: "5823dee5dd56e9f7515601f9629ccbae" + hash: "f00f36bbb5a828824c596ee6f85bec2f" } Frame { msec: 3312 - hash: "18524623762487b60943312cd8bd4388" + hash: "9891326646c3da4ff250aab69c862f96" } Frame { msec: 3328 - hash: "430995770b655054aaeda383df8e27f7" + hash: "c766238db55f4704c2f29a6be6ee6907" } Frame { msec: 3344 - hash: "16a3a00f2b89aed676f80d63c4933ec3" + hash: "0254665427dcbd1c155bc954cc7aa7cd" } Frame { msec: 3360 - hash: "6c55aa62079ec546522edbf69c37b270" + hash: "33ae1012816b997ef5c61c03ccfcc590" } Frame { msec: 3376 - hash: "0d68ca3ccecdd831013950cc7405e46e" + hash: "4c7857bbbcb9aa812fc2503af2b395cf" } Frame { msec: 3392 - hash: "9da2511bc8b434218695fa74ed543439" + hash: "3a570e4af992d35e55923cea23c3c11b" } Frame { msec: 3408 - hash: "05afdd0b99dab81a500cdc2b2f0786fe" + hash: "533ef554538005512ce37c73c6def722" } Frame { msec: 3424 - hash: "e6f8882d146ae60bcc6ea47ff41a637b" + hash: "f863fa215d0642708bfa82780c766dc4" } Frame { msec: 3440 - hash: "154542ed0e88321294f382501819aefc" + hash: "fcca3ec34521c4b9087a102ba1e47293" } Frame { msec: 3456 - hash: "8f47b6980c387c5020145bf04645fd2d" + hash: "47d67cd74cb96b12801842b288a8b9ff" } Frame { msec: 3472 - hash: "b34b055c7602f1f4e1cde875b258120c" + hash: "34c5ea76f297ec68cba70521caa468e4" } Frame { msec: 3488 - hash: "5a697f675575f05e297d4877604b9a47" + hash: "7be247cc7a4032ff0478fca1a2aace8a" } Frame { msec: 3504 - hash: "729dff1d1b357d19fc81804ec8940d0e" + hash: "3ade2a1a48edef15f522b9fc016e137e" } Frame { msec: 3520 - hash: "c6f3fee46baa94a6139d2ee40254b160" + hash: "8b37b9d123504931d82bb06f6981bade" } Frame { msec: 3536 - hash: "af0e700bb8ae34834510830f8b44afdb" + hash: "5eb39825003f405f353f629e236b3395" } Frame { msec: 3552 - hash: "9c87bb54c2dfe58c2da9194dae6f7502" + hash: "c4550722260c4a30ab1176c7e5cb62bf" } Frame { msec: 3568 - hash: "2132356a92c75d725f9feafb8201b142" + hash: "bd33e3ecd4b59cd659588c0298b61095" } Frame { msec: 3584 - hash: "50d855d2595eeae2bfd6aaa8c2fa0454" + hash: "4b3a62bff0019df7412aa2e1c07c0a23" } Frame { msec: 3600 - hash: "5fde3c62d6e53a9056e3586f9dcda59e" + hash: "a9b98adcc3350febbb89dbf725b81436" } Frame { msec: 3616 - hash: "8f04460254a1e9fb949d5165894cd92a" + hash: "66eb8c84e75141d1575caf7d3cbc1ceb" } Frame { msec: 3632 - hash: "2b514c5e3b20d30f9c7e71092c69f081" + hash: "238f2b1dc5bf5b65e827c860f9ee76b5" } Frame { msec: 3648 - hash: "2c1ba6224037790e15f5c0f2864ace4d" + hash: "6d1fed0697370b2a2163c369fe559739" } Frame { msec: 3664 - hash: "0d5b8e7bd5f560888aacaf2b3c6827a8" + hash: "04ea478c785586d900bbe3472371bbc7" } Frame { msec: 3680 - hash: "ae25004530e7df134414018e4a34780e" + hash: "ba429e711c9363eebfb20e641fa44c84" } Frame { msec: 3696 - hash: "1a8fd9eaf9a91f1b42924f8986fbed9a" + hash: "0129dfba166ffcbaa15087467c864068" } Frame { msec: 3712 - hash: "2ea6de2025d40ed5beeff12a5b70ccc9" + hash: "3fb340c874eee94e8baa1453b37c3fb5" } Frame { msec: 3728 - hash: "624e417718d3cac1e4b7e4ce258ce6ea" + hash: "068c51d99c458f3edefe3371f46de260" } Frame { msec: 3744 - hash: "8b56d29391257c7be8966af6be26ea9f" + hash: "dd1e04ed3d610c2712158d73ee2c5b9d" } Mouse { type: 3 @@ -958,27 +958,27 @@ VisualTest { } Frame { msec: 3760 - hash: "5c0d977d8b446d9191bde57335cf1062" + hash: "840154afb9e7e0c859c66667bb6944b6" } Frame { msec: 3776 - hash: "100be2b21d069e3a5dbb694a90da4d4f" + hash: "239c2e33800e386b468a95341d0e23f4" } Frame { msec: 3792 - hash: "caab03f6c81080dd8fdbedb4e94ae4a5" + hash: "0a00515f2d297362862c1a5cf6519845" } Frame { msec: 3808 - hash: "3328a4d06f2f80a7e9ccf2ff21522fca" + hash: "f855df3495e44291aed8f085163c804b" } Frame { msec: 3824 - hash: "a534e6cc28daf3eff6a9cf8379bd6375" + hash: "b4eb31e48c65550bb78d175b48e0e9fb" } Frame { msec: 3840 - hash: "6686f9c1a814c6a6b785b70f94937b68" + hash: "70243664f9db83614e5972fc18ee81a1" } Frame { msec: 3856 @@ -986,239 +986,239 @@ VisualTest { } Frame { msec: 3872 - hash: "d3f1c3593375ca5c022a1361a7ec70bd" + hash: "c48ce2a4cf28ab706b9c097bddc74c27" } Frame { msec: 3888 - hash: "67843e6192e2ecaa3820c37dc2f93106" + hash: "754a957e0df02839dd2fe33fefb7a721" } Frame { msec: 3904 - hash: "19a022f678e5b8f4ebdff936162323dc" + hash: "ec3ebe7b941af9bf2163634d7f15e8aa" } Frame { msec: 3920 - hash: "34e55ae70c9e156db339ae15642359c3" + hash: "a76423ff2184cd9dac47abf7ae52ce5a" } Frame { msec: 3936 - hash: "3784778c817f9d9bb73d990cfe12685a" + hash: "559bec54f51c36c6e90004ca5e77c23c" } Frame { msec: 3952 - hash: "0403fdf79e3ba339c7e3786db0c9c0f0" + hash: "dc6fdd6a867a675afcb58f7052605614" } Frame { msec: 3968 - hash: "93e4a0d5645d1cfc916f1e8422655555" + hash: "b2fb0dbbec01490243f37fe5f80ab6c7" } Frame { msec: 3984 - hash: "29080bfabb87160b7c51385fb36b474b" + hash: "2bc1df7a913b1948ee7bb77eeaa55aa2" } Frame { msec: 4000 - hash: "9da2d83edc9d35f00fb8a159e79de4d9" + hash: "82c6430d85c6a94c4b55a9529d2bc78f" } Frame { msec: 4016 - hash: "5505a42d4788f00cfc7499fbfda851ce" + hash: "463e70dc9a9bdabdc158199bdcd7d2fa" } Frame { msec: 4032 - hash: "bdd3040ab16fa9ffdd2fbc66b06699f8" + hash: "c1e9553327f060b70caa713bf3015342" } Frame { msec: 4048 - hash: "2a347e30a20c693a9440caa60ade0a0f" + hash: "42f7f505d4e5ef316240e4f287a039bf" } Frame { msec: 4064 - hash: "0307f1857c091a639d47f112ce1a2f5a" + hash: "200500f600ffe43c5ad4d057bcfc0831" } Frame { msec: 4080 - hash: "778d18e539bbd562ebe39283a6315df1" + hash: "22e78edb813f7830776b2603b0aaae5c" } Frame { msec: 4096 - hash: "0369cf6c3d1f5db2e92ee1f7c5d3b8ed" + hash: "32ebf3490832fd0693b1b922b4501251" } Frame { msec: 4112 - hash: "9f7413587ab50f1abf776bf180ec2d6f" + hash: "1be622caa5ef94f87e2ec8297b6e1caa" } Frame { msec: 4128 - hash: "7d04a27236485808e571e8a39f23ea17" + hash: "d1480529e0cb94c51c412109663e5fab" } Frame { msec: 4144 - hash: "a1dff63b723473d5a4c9c59975a2fb81" + hash: "e55e627d6d13b647f35233f18f0cbe89" } Frame { msec: 4160 - hash: "9795ea70a3b9d3b7805221a58c19e5da" + hash: "87d7b349cd2898de7686e5f1a14f6338" } Frame { msec: 4176 - hash: "f1392c489e21107136eb8e0d1e8b427e" + hash: "2ac974836ee5e6092b55fcda20d7c35d" } Frame { msec: 4192 - hash: "95c225ef07171a96335e99078195b06a" + hash: "53867256c1dac4de2f02af1ae000b49f" } Frame { msec: 4208 - hash: "d46ef3e7f9cec06e8c18afc0d07be4f3" + hash: "08623509e9e5089fdaa1af2bf9a77eb1" } Frame { msec: 4224 - hash: "b017f5b51d423bb0fca0d6df3aaded8b" + hash: "e4692f42c12593ee865048aef00cbeb2" } Frame { msec: 4240 - hash: "60584d085b0cd6fbc436773be678597e" + hash: "981ad6459e3e7483bb323ab4bc514630" } Frame { msec: 4256 - hash: "117951465dfd5c386826b295560d2dec" + hash: "79e8adfcdc9d6dae0d2b6a69e8e322fa" } Frame { msec: 4272 - hash: "1b70137da5f4e024593999e93121fe8b" + hash: "58f967a607972faa9daa13402eeb9912" } Frame { msec: 4288 - hash: "bd50dffd41941fef127f39b55c4748e0" + hash: "1fd5b002b049132565b6a963fb7b3bb6" } Frame { msec: 4304 - hash: "8eec34d8e1d2e22d11b85a671cd4d3aa" + hash: "a16c96598f47404ec5f4ef55e87a1e70" } Frame { msec: 4320 - hash: "9e3c97cfad5002ef5f3fcc365aeb7bd0" + hash: "3c632899804812c93c7edd3e3f3d2bac" } Frame { msec: 4336 - hash: "28e1cf1ee033915ea2ee39c9ab00a73d" + hash: "af0eb810e0273f9bacb082d9f90612df" } Frame { msec: 4352 - hash: "99101a156a553f441f00221f6facbf1f" + hash: "728d7ac4a5410482c7d86d03c2d8a996" } Frame { msec: 4368 - hash: "419023e5d59d16c26b35bee7d3cea559" + hash: "416e76064f2be71a03eddddf61a33cb0" } Frame { msec: 4384 - hash: "485d23519293975b04031fe4baa5c276" + hash: "c41f20b4ac9a7b34eefd066f77ea351a" } Frame { msec: 4400 - hash: "c8bc60735e0ede26dbaf228294853f9a" + hash: "821d51db415a210b09ebdf8d861aadf2" } Frame { msec: 4416 - hash: "ada3680b807d59843e3adf6640704066" + hash: "9394266815a52f1779858bb088d557dc" } Frame { msec: 4432 - hash: "3e28f3adf9241512cd0d6918d81ffffb" + hash: "cc475d1589665414e5aef051ec237ef4" } Frame { msec: 4448 - hash: "8f339acc33cbc89ae1c62391ce021bb3" + hash: "a95f3b8128faa7820f36391fa9bd579f" } Frame { msec: 4464 - hash: "d303960c0853a90557d64a04b8283c94" + hash: "d52687293a11891c364de52525039203" } Frame { msec: 4480 - hash: "f907dbdacf2cfa9fdf8f9c8dead5b4c4" + hash: "5333dc4f65b2f1e066edcd23f7621bd7" } Frame { msec: 4496 - hash: "30c6e6f283f4a3f538cdda9c2e92de8c" + hash: "797bb5e27b2fe2b733a54402433901b4" } Frame { msec: 4512 - hash: "04d2ac55774b43107a43a7d33764199b" + hash: "84c610cdff7f8b04a34977216e37847d" } Frame { msec: 4528 - hash: "cddf3e111cbc59e721725daa1d8a0c31" + hash: "0317f0406a566b2851c8bda62900e40c" } Frame { msec: 4544 - hash: "15b1b63cd1695207ebf9f04387be0739" + hash: "6538ecd7abd35234c5cc5c2a17249fc1" } Frame { msec: 4560 - hash: "690769b9bbe86a3c5b1fbdee39615fbd" + hash: "f9019150a132eb5f5cfafcd5337aff7a" } Frame { msec: 4576 - hash: "2bd640d8ddbf878d808f22656fef1ed9" + hash: "0f0136fffbc65c02cee249ece4c8c0ef" } Frame { msec: 4592 - hash: "a654f1e4519bf883d554276ebbe96323" + hash: "0027e0d236b8b33a451a0cc35e81b4ce" } Frame { msec: 4608 - hash: "68f0313cfc3f51a0bb9b47c5407c19b6" + hash: "ac2f86b2d4f29f223fb78440d67ccd31" } Frame { msec: 4624 - hash: "77f29806b084de4cabf7ab9bf1a93d5e" + hash: "a6eb112a10c849e337f816ee408f22a6" } Frame { msec: 4640 - hash: "f9991189e3282d107b98fb0ae5f5ef00" + hash: "dafbb01f2615a2513310478ebe484a05" } Frame { msec: 4656 - hash: "0cd1f2f6e347d48feea1b26a4968dec7" + hash: "17c400c4c29652dc278980ab578b75b3" } Frame { msec: 4672 - hash: "e75a6f6a088e2289042572a161ffb0e9" + hash: "48696c02a2a4839b893a4c0b431b78a3" } Frame { msec: 4688 - hash: "5a541081444c0a71128223a4c4c3144c" + hash: "04e05c7e722e53299d24cd0f1b7d17ee" } Frame { msec: 4704 - hash: "6813d442cc610f346a5441ed0cd723e5" + hash: "55d158f13ffc7ccde5ee368656d2830b" } Frame { msec: 4720 - hash: "24ec539bc57899819915f833f26deacd" + hash: "fa478e1575acedae023322a520171a5b" } Frame { msec: 4736 - hash: "3a7ed1b4b533b817674aa141c420cd61" + hash: "e2147ddd6e19fde80bb76da24011400c" } Frame { msec: 4752 - hash: "d0a643fae97bb152e97ca60e96299003" + hash: "44ee0144db4c55aa90d2a931d83a895e" } Frame { msec: 4768 - hash: "c84093931520f4661eff6645091a294b" + hash: "552e87bbce4ad48006c899052a2c8cad" } Frame { msec: 4784 - hash: "81e7ceaece82505a4a16ead195a66162" + hash: "3b6efe225303566f751c3f884ac8c069" } Frame { msec: 4800 - hash: "315764d20b647f6ab1ba30239a69bf72" + hash: "3a7175916d1dc103506061607b910550" } Frame { msec: 4816 @@ -1226,239 +1226,239 @@ VisualTest { } Frame { msec: 4832 - hash: "d1824ced8af34ad9edb36a58ae9aa7f5" + hash: "b2e5d5c14b02a13bca62673f87e85627" } Frame { msec: 4848 - hash: "167b9a49fbb94908e09e7e9c9147cd8b" + hash: "bd89a911d6fb13e4e841f8ee5b8b42af" } Frame { msec: 4864 - hash: "442d5f0906840de526d59a80ada322c0" + hash: "89795784185e83d0299e656f2eec73c8" } Frame { msec: 4880 - hash: "78206c4d4d23c7c1ba888b9062b09432" + hash: "5b6d6fe78f341bdf0eb4bedfe3d975d0" } Frame { msec: 4896 - hash: "e898202cfebbff1952efc6e01254d855" + hash: "e246bc451ee48e16ef6dee20d6256e9c" } Frame { msec: 4912 - hash: "ab31dc7bbad2b0552359866bb8d92f0c" + hash: "8c1bc37b1b268743aa314247ea949ef5" } Frame { msec: 4928 - hash: "f093304e88964376baf9721d53d4fb49" + hash: "04f34203c34dc87efc708bfb232663df" } Frame { msec: 4944 - hash: "3ef76f3e1c44d13c3a469bd192ff7b5d" + hash: "d37a48545e81970d16951e3388f0ff8c" } Frame { msec: 4960 - hash: "5d3b6d0d91f8cc5b89e39407bc3b5a15" + hash: "9411e846c9f59cc915288efb59d4c9de" } Frame { msec: 4976 - hash: "3c73573f12f49b34e1d990a55ad913fa" + hash: "6ee179741ac74837708afb55943f15bd" } Frame { msec: 4992 - hash: "d1bac071b01a1c6fddab90cdc435fad4" + hash: "f626fc3166bd5b01171271ae9bfa9b22" } Frame { msec: 5008 - hash: "36a219aadec910f1dbef616c641e1d2b" + hash: "e22898b2c0c566bbf531223234f98327" } Frame { msec: 5024 - hash: "5871fc67d361cc988551592ee21dfb23" + hash: "1343d90c5eae70713cd49110fe61237b" } Frame { msec: 5040 - hash: "6e65ee6c814b9a9da205c36925e663bf" + hash: "493d9322da6d01979a3f1a120c265f8c" } Frame { msec: 5056 - hash: "290b20fa8e91d34000d7c2d81745f6d2" + hash: "defccc76caf3a7c7c67e8abf5ccc2def" } Frame { msec: 5072 - hash: "19e7405a9083a8143f7bb040f8837b29" + hash: "fe3cad9227fcfa7ba2238465078f2ac7" } Frame { msec: 5088 - hash: "c0a0fa2b4c1ceb6c70594994a1ac8713" + hash: "66ebfeee3a63323c7d8b949db9aafd7e" } Frame { msec: 5104 - hash: "c236224c16743fb606deb78bcb8afc8d" + hash: "805820b382d005894f9a615004b97b0d" } Frame { msec: 5120 - hash: "7d44db15eb300b4338ffc26e9bcfce20" + hash: "eee1620f47bb071de8a9c788d1fd258e" } Frame { msec: 5136 - hash: "067a79148a194c45c6f32d85316a1e11" + hash: "f5a7d9a81fcfc8cfb9e7cc8ead0f1ff8" } Frame { msec: 5152 - hash: "9075c379044476994a87f0fdcce8e332" + hash: "249903ee123090b27019350f120c8b79" } Frame { msec: 5168 - hash: "b2316988fbd51096a4f512e71fe7d0a2" + hash: "019793a363c905809af32bf34ef52ec0" } Frame { msec: 5184 - hash: "280f70877d93af5f84e178aad6a102d8" + hash: "4f5ad5a3ebb6eca73dd7567199d07b08" } Frame { msec: 5200 - hash: "3eef4ae7e43a8cf1cd9dd562237296f8" + hash: "fdc1b42d50c7a5c45458498788ff0abd" } Frame { msec: 5216 - hash: "e3184f77ce3a47ca4dca6386f42d7fec" + hash: "cc091469598cad28d0a00690f1acb412" } Frame { msec: 5232 - hash: "a2a5df66fe4808ea8d466cac84ba910c" + hash: "5c8757e1f8f34a31d8b3717b64b84c07" } Frame { msec: 5248 - hash: "9f8a0e54788112d6c30482e840504f35" + hash: "5da75559f60eac1b9f518ed55a174e5b" } Frame { msec: 5264 - hash: "ae69cf84798844f9f360c86790feaecd" + hash: "1214c08daec4dcfb27690fdc18f2ac28" } Frame { msec: 5280 - hash: "0244526572acb6266db5b7eb9d29c6fc" + hash: "87d92c1ba694d0cf187d8616b0f622f0" } Frame { msec: 5296 - hash: "8fb53d60b95ddb5aef27442934ea9983" + hash: "d4af63638fe69b6c4f087a935351057e" } Frame { msec: 5312 - hash: "930fcfde491b4f5681e3861764003895" + hash: "0573c41f34c2c117cada987e4ee813a5" } Frame { msec: 5328 - hash: "bcdcd0a637112d113ebe11dc18823237" + hash: "f179ef4b7bf0f915e25ffd8168a9126f" } Frame { msec: 5344 - hash: "65a564d5a5afbc14c0cdad4d52753507" + hash: "1618bf7c94e7898392eb5ffbf44b8aff" } Frame { msec: 5360 - hash: "0c5056d438d2d54938f31ef5f996673a" + hash: "5af24b902e3729d544f70c77e189b8a7" } Frame { msec: 5376 - hash: "11c157ad2236fc390ffbdf339366cbc1" + hash: "4e5789404e58113cc2d8aa737a03ab58" } Frame { msec: 5392 - hash: "6cb341b1f281a97a35c2e41bfd4c4d9d" + hash: "e4bf91a249e47597e959bbaf25f0724d" } Frame { msec: 5408 - hash: "553a945f7f19f70ddae4ebe88e52a79b" + hash: "39a3e3d6269522ed57a0e37319ab94d5" } Frame { msec: 5424 - hash: "d10b42b4095a2474e66a5a322f72e936" + hash: "f2e2e47922e7e058e14537a0455cd77f" } Frame { msec: 5440 - hash: "0f943d61e8072d70eddee8aa1ba0de5a" + hash: "64abb3f2c9e05fd1dd7490d11c74f06a" } Frame { msec: 5456 - hash: "3df18e237b666e78d57857739b759e6d" + hash: "a9bf45c29536ca34c42aa916747b485b" } Frame { msec: 5472 - hash: "1ddc0bfdb2ca7b6dee63f1024e62f26e" + hash: "da21839b6635e5c4e0a589d163e62752" } Frame { msec: 5488 - hash: "aaa397714528f41238059e3a88833abc" + hash: "f31e49258bcbb2a144daa320e4567df1" } Frame { msec: 5504 - hash: "c94bd69f925c782656afc5f9618180a6" + hash: "f96c5b39f94bf2ac1e3f4de96767d720" } Frame { msec: 5520 - hash: "824ff8c0e1ab43e3c0eaa79b7cc19b9c" + hash: "281b90d1056803093cc37f30465f0e73" } Frame { msec: 5536 - hash: "6c440a0b2293811335bdbf2c4f25f47d" + hash: "d63a2424e1947328957ad8f5f0bec043" } Frame { msec: 5552 - hash: "bfc7936cdf833d5b720ec9baca740112" + hash: "bd510a0de7df02b1b5741824b6f90944" } Frame { msec: 5568 - hash: "375fa305dbae2872dc9b20e59381cc0c" + hash: "47dc4e5ff91cb84c89dd0fc0459f75f2" } Frame { msec: 5584 - hash: "fffd6173aa49e74164dc17a238bcd830" + hash: "4bc46b5e116dd30e1db4d4bb650ed6ed" } Frame { msec: 5600 - hash: "44d9007e00fab161fd393b653255d7f4" + hash: "c6964b89f1962f120028057d1c588694" } Frame { msec: 5616 - hash: "f669ee25c58b4fa20a01705d334f0065" + hash: "39a77544a1c88b68cb63da9a8910a35e" } Frame { msec: 5632 - hash: "2dbb7d57711b67d5d9e1b81f70e22d34" + hash: "bd8ac21d7a507a8e195437ccac254ecc" } Frame { msec: 5648 - hash: "19351b91448265cb95c1670ee283c611" + hash: "7b39b2667a8f8efae20ec8696e35dbc4" } Frame { msec: 5664 - hash: "19351b91448265cb95c1670ee283c611" + hash: "7b39b2667a8f8efae20ec8696e35dbc4" } Frame { msec: 5680 - hash: "3a24b99d048348a21f4e4bd69393de89" + hash: "8628f4f24670d17965fec40a02e0196f" } Frame { msec: 5696 - hash: "35a6fe955a52950bbfa954a453e4008e" + hash: "515903d9896a853cb18cc7b7c45c1cce" } Frame { msec: 5712 - hash: "896f4ec28c976237b34fb2725a44460e" + hash: "b7a3f70bedcb3f90a2e294b447e05f70" } Frame { msec: 5728 - hash: "ed3008ea950ec84c57518e573ea36d15" + hash: "8e8b104ef82b1e219021aa38276f8b45" } Frame { msec: 5744 - hash: "3447c7be992759f772c1db2033eead99" + hash: "70abe79da860bebd2d17a8c7abb20b4e" } Frame { msec: 5760 - hash: "b7133225daa03563d3f5b1dac5f56a23" + hash: "d99af176fb6cf9d9cbcf7cf4286a165c" } Frame { msec: 5776 @@ -1466,239 +1466,239 @@ VisualTest { } Frame { msec: 5792 - hash: "adc55f2fcf312a90b025a75fa80aa079" + hash: "67809c7daad6716d0a664c52de9906ce" } Frame { msec: 5808 - hash: "3ac85cad400d2b8e4f33798f4f6b7b42" + hash: "29a27fd59b7316ce305803482686ea58" } Frame { msec: 5824 - hash: "1c115efd84ccbe489d24c3c521c4a61c" + hash: "25b9ca40d1d6208d026e5c965923f8fb" } Frame { msec: 5840 - hash: "39518f1bbc0c4aba6ff517bc3dc7c279" + hash: "126b1542415aea11dbb35492be4f66aa" } Frame { msec: 5856 - hash: "7bd28d32996f4de61c415d3217da16d0" + hash: "26ca7034536e0e690236797df740f19a" } Frame { msec: 5872 - hash: "f5d06e25d775bf8db07e95625a712733" + hash: "fec9db60af63a4712b0da037cf1d89cd" } Frame { msec: 5888 - hash: "4820ea6ea3be88af2f86111c547a19d7" + hash: "d9b7e2729c75ca0c0f33b542525c4880" } Frame { msec: 5904 - hash: "fa6e681c368118b7f135a47ae8fc12ff" + hash: "89149d16b893ea432b6d0fb05ead48cb" } Frame { msec: 5920 - hash: "f6b30e618aeeb837d2b3eca270b0a060" + hash: "8e389d2ca706277ce06e1da557e2e6c1" } Frame { msec: 5936 - hash: "ac8504bde8d3063a8bf02b9d4b69d755" + hash: "fc5c74473410da1ddd451c5901572172" } Frame { msec: 5952 - hash: "9670537bb77caa8e23fda7bbfa96ca60" + hash: "54514970eadff9362d31499a737e4c95" } Frame { msec: 5968 - hash: "8cd292865ce5c1d240e9ddc93881a0ed" + hash: "d5953bc29532ec49c20ee552c8756ba1" } Frame { msec: 5984 - hash: "de112013e526203d151c46e6cfba9f92" + hash: "5f03be3ed5824e6a6f8f371ce6a47997" } Frame { msec: 6000 - hash: "cd61066e697de8c055aaa168791c2d8c" + hash: "0431e2ec4765167d0099c59df400f3fd" } Frame { msec: 6016 - hash: "cd61066e697de8c055aaa168791c2d8c" + hash: "0431e2ec4765167d0099c59df400f3fd" } Frame { msec: 6032 - hash: "e68b27ff14aac03c827fd43ac488d23e" + hash: "403e1f235770f2b7c8b1b2e86aea69a5" } Frame { msec: 6048 - hash: "e68b27ff14aac03c827fd43ac488d23e" + hash: "403e1f235770f2b7c8b1b2e86aea69a5" } Frame { msec: 6064 - hash: "1f61d857a8c26587fbda5895c603441a" + hash: "32ff9f959598972f5a264418587dca1f" } Frame { msec: 6080 - hash: "1e0dffdd02e05ade1ae444427d4aa345" + hash: "b4c7c07e52a684f7ce21e47a4d66356a" } Frame { msec: 6096 - hash: "9a416ee7a1de9ac45ab2d609233c9520" + hash: "e0f214bed2c3a31f473952929b8f3ea9" } Frame { msec: 6112 - hash: "dfa35bf1cd908011c3214a506bcbdcb8" + hash: "15328b8a205965f3f29fc63a6a8ac8ed" } Frame { msec: 6128 - hash: "bd502dc72dce4af3036f7af9ed7cf9e9" + hash: "72c46ed63633e6879373f4783df25d8b" } Frame { msec: 6144 - hash: "8cd5edce652013a2ed4bf95693259538" + hash: "ae73e0adbdaacc648c2e97840cef4194" } Frame { msec: 6160 - hash: "a38ed1532a40210ad7da4c0d4d1a7195" + hash: "df9451c6634d72e6f794e962b3591086" } Frame { msec: 6176 - hash: "8ac8a8df937da526bbffb9a3590d89ac" + hash: "773e10bbd133e64457e7ddbc73a10fc2" } Frame { msec: 6192 - hash: "07527cb9a4494e11f4c9f99eb72598b9" + hash: "c79abb97eb86761b69053d77156dffd4" } Frame { msec: 6208 - hash: "655b0327ef0f8711810714ba50f2f8cc" + hash: "d927934b19ffd55ea7cea1916983351a" } Frame { msec: 6224 - hash: "4c1ce8b4eb16c69614e2560c04ad48cf" + hash: "ae5058d935c1e44d103be66921b19e77" } Frame { msec: 6240 - hash: "7a382ae4e6a48826eaa2c83ee7a73fb2" + hash: "b6a1446b6be054d5785ba52ac23f8aa8" } Frame { msec: 6256 - hash: "5acd5f250c5b32d9006ed68dfecbfa1c" + hash: "3dffbffded44249fdbe58aecd24ab97f" } Frame { msec: 6272 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6288 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6304 - hash: "07e5f1277558bfe7638b00cf9d967baf" + hash: "257ce16f529b99f28beb2e57625f52ee" } Frame { msec: 6320 - hash: "07e5f1277558bfe7638b00cf9d967baf" + hash: "257ce16f529b99f28beb2e57625f52ee" } Frame { msec: 6336 - hash: "07e5f1277558bfe7638b00cf9d967baf" + hash: "257ce16f529b99f28beb2e57625f52ee" } Frame { msec: 6352 - hash: "07e5f1277558bfe7638b00cf9d967baf" + hash: "257ce16f529b99f28beb2e57625f52ee" } Frame { msec: 6368 - hash: "07e5f1277558bfe7638b00cf9d967baf" + hash: "257ce16f529b99f28beb2e57625f52ee" } Frame { msec: 6384 - hash: "877aca1c64e588845329ca8a38222604" + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" } Frame { msec: 6400 - hash: "877aca1c64e588845329ca8a38222604" + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" } Frame { msec: 6416 - hash: "877aca1c64e588845329ca8a38222604" + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" } Frame { msec: 6432 - hash: "877aca1c64e588845329ca8a38222604" + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" } Frame { msec: 6448 - hash: "877aca1c64e588845329ca8a38222604" + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" } Frame { msec: 6464 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6480 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6496 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6512 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6528 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6544 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6560 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6576 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6592 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6608 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6624 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6640 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6656 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6672 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6688 - hash: "b0f28e923f93dcdcea8460ca9d8cd674" + hash: "fa87436d5e51122022a005d815f97c32" } Frame { msec: 6704 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6720 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6736 @@ -1706,58 +1706,58 @@ VisualTest { } Frame { msec: 6752 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6768 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6784 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6800 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6816 - hash: "228920e994ebf71d542c71ce8263614e" + hash: "da52e87ccd157c0330c07e480b8b0c06" } Frame { msec: 6832 - hash: "07e5f1277558bfe7638b00cf9d967baf" + hash: "257ce16f529b99f28beb2e57625f52ee" } Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 } Frame { msec: 6848 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6864 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6880 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6896 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6912 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } Frame { msec: 6928 - hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + hash: "56445ab8554a23a786b70e4fd9f40451" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.0.png index d85498b..823199c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml index 26cd97b..4bf0697 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml @@ -10,122 +10,122 @@ VisualTest { } Frame { msec: 32 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 48 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 64 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 80 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 96 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 112 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 128 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 144 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 160 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 176 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 192 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 208 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 224 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 240 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 256 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 272 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 288 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 304 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 320 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 336 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 352 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 368 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 384 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 400 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 416 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 432 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 448 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 464 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 480 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } Frame { msec: 496 - hash: "8e36621abce059cb8579dd04b28e8d58" + hash: "7e082fa05e000cc20fcda7cb61d98edd" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png index 16202c4..53d3c12 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png index 16202c4..53d3c12 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml index c911b0a9..7aadc15 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 48 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 64 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 80 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 96 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 112 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 128 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 144 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 160 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 176 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 192 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 208 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 224 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 240 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 256 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 272 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 288 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 304 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 320 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 336 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 352 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 368 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 384 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 400 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 416 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 432 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 448 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 464 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 480 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 496 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 512 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 528 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 544 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 560 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 576 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 592 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 608 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 624 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 640 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 656 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 672 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 688 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 704 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 720 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 736 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 752 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 768 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 784 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 800 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 816 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 832 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 848 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 864 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 880 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 896 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 912 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 928 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 944 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 960 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 976 @@ -251,29 +251,29 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 } Frame { msec: 992 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 1008 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 1024 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 1040 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } Frame { msec: 1056 - hash: "bfcbea92ed5278c01642fd3cd6d3175c" + hash: "40d4596fcecc4e6a214decccc581a75f" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png index 38b9668..2f4c84a 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png index 801ec2b..ae786a2 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml index 5275c05..6e9057c 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "0922fd48af050774d53e0b3815d57d8e" + hash: "716f5d150bd8757952d7b4ba327fb8bd" } Frame { msec: 48 - hash: "0922fd48af050774d53e0b3815d57d8e" + hash: "716f5d150bd8757952d7b4ba327fb8bd" } Frame { msec: 64 - hash: "0922fd48af050774d53e0b3815d57d8e" + hash: "716f5d150bd8757952d7b4ba327fb8bd" } Frame { msec: 80 - hash: "0922fd48af050774d53e0b3815d57d8e" + hash: "716f5d150bd8757952d7b4ba327fb8bd" } Frame { msec: 96 - hash: "0922fd48af050774d53e0b3815d57d8e" + hash: "716f5d150bd8757952d7b4ba327fb8bd" } Frame { msec: 112 - hash: "0922fd48af050774d53e0b3815d57d8e" + hash: "716f5d150bd8757952d7b4ba327fb8bd" } Frame { msec: 128 - hash: "6ed734d7092a34e440628dc70db97ac5" + hash: "8ec55fba2017a56c641c7baca5345b8b" } Frame { msec: 144 - hash: "6ed734d7092a34e440628dc70db97ac5" + hash: "8ec55fba2017a56c641c7baca5345b8b" } Frame { msec: 160 - hash: "6ed734d7092a34e440628dc70db97ac5" + hash: "8ec55fba2017a56c641c7baca5345b8b" } Frame { msec: 176 - hash: "6ed734d7092a34e440628dc70db97ac5" + hash: "8ec55fba2017a56c641c7baca5345b8b" } Frame { msec: 192 - hash: "a74b735016141dccf2c84fe9ee1e3ab2" + hash: "79dc1645a5486ddfa3d957f3bd4ffbda" } Frame { msec: 208 - hash: "a74b735016141dccf2c84fe9ee1e3ab2" + hash: "79dc1645a5486ddfa3d957f3bd4ffbda" } Frame { msec: 224 - hash: "a74b735016141dccf2c84fe9ee1e3ab2" + hash: "79dc1645a5486ddfa3d957f3bd4ffbda" } Frame { msec: 240 - hash: "a74b735016141dccf2c84fe9ee1e3ab2" + hash: "79dc1645a5486ddfa3d957f3bd4ffbda" } Frame { msec: 256 - hash: "047416b9368fb352b7da1e073d863e96" + hash: "476eae8ca9f6698cf67e2d20c5c24b66" } Frame { msec: 272 - hash: "047416b9368fb352b7da1e073d863e96" + hash: "476eae8ca9f6698cf67e2d20c5c24b66" } Frame { msec: 288 - hash: "047416b9368fb352b7da1e073d863e96" + hash: "476eae8ca9f6698cf67e2d20c5c24b66" } Frame { msec: 304 - hash: "047416b9368fb352b7da1e073d863e96" + hash: "476eae8ca9f6698cf67e2d20c5c24b66" } Frame { msec: 320 - hash: "f2d62e8675b8bba924b27db689c9cd7f" + hash: "bef1a9585daf30f1739a190ffa2e4b46" } Frame { msec: 336 - hash: "f2d62e8675b8bba924b27db689c9cd7f" + hash: "bef1a9585daf30f1739a190ffa2e4b46" } Frame { msec: 352 - hash: "f2d62e8675b8bba924b27db689c9cd7f" + hash: "bef1a9585daf30f1739a190ffa2e4b46" } Frame { msec: 368 - hash: "f2d62e8675b8bba924b27db689c9cd7f" + hash: "bef1a9585daf30f1739a190ffa2e4b46" } Frame { msec: 384 - hash: "f2d62e8675b8bba924b27db689c9cd7f" + hash: "bef1a9585daf30f1739a190ffa2e4b46" } Frame { msec: 400 - hash: "9498a80d60ab24d82ffb935979e1cf1b" + hash: "156dfc4e9fbc1af5e8c6c48ecd2afe8f" } Frame { msec: 416 - hash: "9498a80d60ab24d82ffb935979e1cf1b" + hash: "156dfc4e9fbc1af5e8c6c48ecd2afe8f" } Frame { msec: 432 - hash: "9498a80d60ab24d82ffb935979e1cf1b" + hash: "156dfc4e9fbc1af5e8c6c48ecd2afe8f" } Frame { msec: 448 - hash: "9498a80d60ab24d82ffb935979e1cf1b" + hash: "156dfc4e9fbc1af5e8c6c48ecd2afe8f" } Frame { msec: 464 - hash: "ee3cb45a15460f4235fc22ca97e0303d" + hash: "2fe675a360e61452c31dda42070c137f" } Frame { msec: 480 - hash: "ee3cb45a15460f4235fc22ca97e0303d" + hash: "2fe675a360e61452c31dda42070c137f" } Frame { msec: 496 - hash: "ee3cb45a15460f4235fc22ca97e0303d" + hash: "2fe675a360e61452c31dda42070c137f" } Frame { msec: 512 - hash: "ee3cb45a15460f4235fc22ca97e0303d" + hash: "2fe675a360e61452c31dda42070c137f" } Frame { msec: 528 - hash: "94464db418aec12b451e9dc106deec73" + hash: "0f1bac7c35b9f5bdbce10fb577c9cf28" } Frame { msec: 544 - hash: "94464db418aec12b451e9dc106deec73" + hash: "0f1bac7c35b9f5bdbce10fb577c9cf28" } Frame { msec: 560 - hash: "94464db418aec12b451e9dc106deec73" + hash: "0f1bac7c35b9f5bdbce10fb577c9cf28" } Frame { msec: 576 - hash: "94464db418aec12b451e9dc106deec73" + hash: "0f1bac7c35b9f5bdbce10fb577c9cf28" } Frame { msec: 592 - hash: "94464db418aec12b451e9dc106deec73" + hash: "0f1bac7c35b9f5bdbce10fb577c9cf28" } Frame { msec: 608 - hash: "22b23a55986e912cf38239d5e68f0c4a" + hash: "c79f68e9481f91f6f6a6816a655efc24" } Frame { msec: 624 - hash: "22b23a55986e912cf38239d5e68f0c4a" + hash: "c79f68e9481f91f6f6a6816a655efc24" } Frame { msec: 640 - hash: "22b23a55986e912cf38239d5e68f0c4a" + hash: "c79f68e9481f91f6f6a6816a655efc24" } Frame { msec: 656 - hash: "22b23a55986e912cf38239d5e68f0c4a" + hash: "c79f68e9481f91f6f6a6816a655efc24" } Frame { msec: 672 - hash: "3836d0aaf354d147dc6ffe3ace184ba5" + hash: "9a189e9d9249fb04fd98c4e91aba1cb5" } Frame { msec: 688 - hash: "3836d0aaf354d147dc6ffe3ace184ba5" + hash: "9a189e9d9249fb04fd98c4e91aba1cb5" } Frame { msec: 704 - hash: "3836d0aaf354d147dc6ffe3ace184ba5" + hash: "9a189e9d9249fb04fd98c4e91aba1cb5" } Frame { msec: 720 - hash: "3836d0aaf354d147dc6ffe3ace184ba5" + hash: "9a189e9d9249fb04fd98c4e91aba1cb5" } Frame { msec: 736 - hash: "3836d0aaf354d147dc6ffe3ace184ba5" + hash: "9a189e9d9249fb04fd98c4e91aba1cb5" } Frame { msec: 752 - hash: "20ccea5bc4c15401a7c660b1801488dd" + hash: "42c1ac48858ab5901601dc5a950a398f" } Frame { msec: 768 - hash: "20ccea5bc4c15401a7c660b1801488dd" + hash: "42c1ac48858ab5901601dc5a950a398f" } Frame { msec: 784 - hash: "20ccea5bc4c15401a7c660b1801488dd" + hash: "42c1ac48858ab5901601dc5a950a398f" } Frame { msec: 800 - hash: "20ccea5bc4c15401a7c660b1801488dd" + hash: "42c1ac48858ab5901601dc5a950a398f" } Frame { msec: 816 - hash: "31ffa9cfd6f60a33ed3b052e45ee5080" + hash: "f05bf4e3cc562c5a900fb389a7c093de" } Frame { msec: 832 - hash: "31ffa9cfd6f60a33ed3b052e45ee5080" + hash: "f05bf4e3cc562c5a900fb389a7c093de" } Frame { msec: 848 - hash: "31ffa9cfd6f60a33ed3b052e45ee5080" + hash: "f05bf4e3cc562c5a900fb389a7c093de" } Frame { msec: 864 - hash: "31ffa9cfd6f60a33ed3b052e45ee5080" + hash: "f05bf4e3cc562c5a900fb389a7c093de" } Frame { msec: 880 - hash: "7138b38fcff27e85aaf3179c6e81ac69" + hash: "1b5d1234aa02009ec447ac8fefc403bb" } Frame { msec: 896 - hash: "7138b38fcff27e85aaf3179c6e81ac69" + hash: "1b5d1234aa02009ec447ac8fefc403bb" } Frame { msec: 912 - hash: "7138b38fcff27e85aaf3179c6e81ac69" + hash: "1b5d1234aa02009ec447ac8fefc403bb" } Frame { msec: 928 - hash: "7138b38fcff27e85aaf3179c6e81ac69" + hash: "1b5d1234aa02009ec447ac8fefc403bb" } Frame { msec: 944 - hash: "7138b38fcff27e85aaf3179c6e81ac69" + hash: "1b5d1234aa02009ec447ac8fefc403bb" } Frame { msec: 960 - hash: "78854022288d4cd50bb9141896403d35" + hash: "ec7cfc539d7bde448c631da211de8f44" } Frame { msec: 976 @@ -250,151 +250,151 @@ VisualTest { } Frame { msec: 992 - hash: "78854022288d4cd50bb9141896403d35" + hash: "ec7cfc539d7bde448c631da211de8f44" } Frame { msec: 1008 - hash: "78854022288d4cd50bb9141896403d35" + hash: "ec7cfc539d7bde448c631da211de8f44" } Frame { msec: 1024 - hash: "8730d8adb4029b157e39b90e3cb2b879" + hash: "646394dd534a32bc3a066e606cc485f3" } Frame { msec: 1040 - hash: "8730d8adb4029b157e39b90e3cb2b879" + hash: "646394dd534a32bc3a066e606cc485f3" } Frame { msec: 1056 - hash: "8730d8adb4029b157e39b90e3cb2b879" + hash: "646394dd534a32bc3a066e606cc485f3" } Frame { msec: 1072 - hash: "8730d8adb4029b157e39b90e3cb2b879" + hash: "646394dd534a32bc3a066e606cc485f3" } Frame { msec: 1088 - hash: "9edb542976d1acd86be3d516276dee1f" + hash: "6b66b968aaed1896e2e9fafe27bba50f" } Frame { msec: 1104 - hash: "9edb542976d1acd86be3d516276dee1f" + hash: "6b66b968aaed1896e2e9fafe27bba50f" } Frame { msec: 1120 - hash: "9edb542976d1acd86be3d516276dee1f" + hash: "6b66b968aaed1896e2e9fafe27bba50f" } Frame { msec: 1136 - hash: "9edb542976d1acd86be3d516276dee1f" + hash: "6b66b968aaed1896e2e9fafe27bba50f" } Frame { msec: 1152 - hash: "9edb542976d1acd86be3d516276dee1f" + hash: "6b66b968aaed1896e2e9fafe27bba50f" } Frame { msec: 1168 - hash: "1a394542b01712fbd67b78a69733b324" + hash: "869f75182b9a4b452da1689a5921085f" } Frame { msec: 1184 - hash: "1a394542b01712fbd67b78a69733b324" + hash: "869f75182b9a4b452da1689a5921085f" } Frame { msec: 1200 - hash: "1a394542b01712fbd67b78a69733b324" + hash: "869f75182b9a4b452da1689a5921085f" } Frame { msec: 1216 - hash: "1a394542b01712fbd67b78a69733b324" + hash: "869f75182b9a4b452da1689a5921085f" } Frame { msec: 1232 - hash: "4825f9a6679fdee8efe89507d384c07c" + hash: "b2017890ac543b9224e85a44157d9fbb" } Frame { msec: 1248 - hash: "4825f9a6679fdee8efe89507d384c07c" + hash: "b2017890ac543b9224e85a44157d9fbb" } Frame { msec: 1264 - hash: "4825f9a6679fdee8efe89507d384c07c" + hash: "b2017890ac543b9224e85a44157d9fbb" } Frame { msec: 1280 - hash: "4825f9a6679fdee8efe89507d384c07c" + hash: "b2017890ac543b9224e85a44157d9fbb" } Frame { msec: 1296 - hash: "4825f9a6679fdee8efe89507d384c07c" + hash: "b2017890ac543b9224e85a44157d9fbb" } Frame { msec: 1312 - hash: "0ed5382fd2e370bad934647d7abf293f" + hash: "acac3eb92619e01b3470511cef1a91c8" } Frame { msec: 1328 - hash: "0ed5382fd2e370bad934647d7abf293f" + hash: "acac3eb92619e01b3470511cef1a91c8" } Frame { msec: 1344 - hash: "0ed5382fd2e370bad934647d7abf293f" + hash: "acac3eb92619e01b3470511cef1a91c8" } Frame { msec: 1360 - hash: "0ed5382fd2e370bad934647d7abf293f" + hash: "acac3eb92619e01b3470511cef1a91c8" } Frame { msec: 1376 - hash: "6206435ab4d05d5d5f84b362d45c30f9" + hash: "7f6d45b22e5cb86a7fb45d3f9bcebfc1" } Frame { msec: 1392 - hash: "6206435ab4d05d5d5f84b362d45c30f9" + hash: "7f6d45b22e5cb86a7fb45d3f9bcebfc1" } Frame { msec: 1408 - hash: "6206435ab4d05d5d5f84b362d45c30f9" + hash: "7f6d45b22e5cb86a7fb45d3f9bcebfc1" } Frame { msec: 1424 - hash: "6206435ab4d05d5d5f84b362d45c30f9" + hash: "7f6d45b22e5cb86a7fb45d3f9bcebfc1" } Frame { msec: 1440 - hash: "b0eb92df767e7cb61cc69d7363041263" + hash: "481f661e2613242d253498e467c91105" } Frame { msec: 1456 - hash: "b0eb92df767e7cb61cc69d7363041263" + hash: "481f661e2613242d253498e467c91105" } Frame { msec: 1472 - hash: "b0eb92df767e7cb61cc69d7363041263" + hash: "481f661e2613242d253498e467c91105" } Frame { msec: 1488 - hash: "b0eb92df767e7cb61cc69d7363041263" + hash: "481f661e2613242d253498e467c91105" } Frame { msec: 1504 - hash: "b0eb92df767e7cb61cc69d7363041263" + hash: "481f661e2613242d253498e467c91105" } Frame { msec: 1520 - hash: "0306262c9594536e0eecf3d67e5910cf" + hash: "4c342918351f0165ce63129afbd60074" } Frame { msec: 1536 - hash: "0306262c9594536e0eecf3d67e5910cf" + hash: "4c342918351f0165ce63129afbd60074" } Frame { msec: 1552 - hash: "0306262c9594536e0eecf3d67e5910cf" + hash: "4c342918351f0165ce63129afbd60074" } Frame { msec: 1568 - hash: "0306262c9594536e0eecf3d67e5910cf" + hash: "4c342918351f0165ce63129afbd60074" } Frame { msec: 1584 @@ -443,7 +443,7 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png index 730925e..bf41ce8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png index ddd6cc5..683a452 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png index 4679774..6b4a280 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png index 51018b4..ddf5431 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png index f5ed905..7e56a3c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml index faf7240..7b17ab2 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "12cd5401549bc43283d6c46964528b9b" + hash: "b5dfa53607ab952a07d77b4d6bd53a4a" } Frame { msec: 48 - hash: "ae042a0f3c6e32550288a9b0e6a0ce0d" + hash: "c9b99388f7570a65162026739c365edd" } Frame { msec: 64 - hash: "9124b4e5f5dd374e44f3f57fe3d6809b" + hash: "6f612fe36fa8028a75f6149390bd3585" } Frame { msec: 80 - hash: "54dabe45069a00c8759bb5560c9b269f" + hash: "efada1cf68ff7dae90962e7540c79b53" } Frame { msec: 96 - hash: "0d908ef6e3ea15455e35a9ebbc90c735" + hash: "f42b6952937376ae34f7ef493e86aee6" } Frame { msec: 112 - hash: "de5fcf719cd096b99a531e7af9b26e35" + hash: "008b0419f3ec6dbb16220a8e484a1ec8" } Frame { msec: 128 - hash: "d48ccb7c22c2606ef814cd5abd3888f3" + hash: "ecb3c1cb02f7a01d4343dad1a066fa6f" } Frame { msec: 144 - hash: "2ec7418477158ee60afe123fa2b7ce4b" + hash: "ce5adf6c5c4d5e385ce7e461e380b00e" } Frame { msec: 160 - hash: "418d6d46726c688bee6f415eb2ff2e43" + hash: "79b8fefae0ac2784391c15c0221bd99d" } Frame { msec: 176 - hash: "e754141341d9f81366f21820e46bd1ca" + hash: "259da9a4c2bb9c89d16dd1943645e836" } Frame { msec: 192 - hash: "89b4b5f7563bfdb5d1e636a5462e0d8e" + hash: "40ee5004fed2af60ab5fc4983bd2dacd" } Frame { msec: 208 - hash: "46c3a7d4700a9599d474b7de1ab44a18" + hash: "935314bef478d43e30b6cbdcb33ba72b" } Frame { msec: 224 - hash: "c50698470bc6c1ea04633b9e819a2d4d" + hash: "9860af14b459925078467f334bf41e42" } Frame { msec: 240 - hash: "dc7d5345363cad6ee007f162f9ea75e2" + hash: "d9955eabd55559d7bef3f4cd96b42a35" } Frame { msec: 256 - hash: "3b9ccb93f6375ea401c1fc3bcdf847d5" + hash: "7fa3de8afdeb61c6e2e87cde2e96152f" } Frame { msec: 272 - hash: "6d034da407af9e27ce70e9dbfee3bb38" + hash: "0deea16d1f6d18f1e9c57546b485fe75" } Frame { msec: 288 - hash: "3bce938e5db4c2295cd25a6e2b33738c" + hash: "231a71ad0981525d9eb15643bc397130" } Frame { msec: 304 - hash: "68266f4f9da256b9df499285ebb842fb" + hash: "119e67ab3b30bd9a716ad81bbb10d626" } Frame { msec: 320 - hash: "a9c912fd159baadc4afcd963f857e91b" + hash: "4f29d912920ab6b8973a2c392a19ea53" } Frame { msec: 336 - hash: "85cb9086774297b2772e71229f7d84fc" + hash: "8544592eb1d48a55cfd0e274c05622cb" } Frame { msec: 352 - hash: "585e6f2d28ec70d10741a52fb68d718c" + hash: "eca3de3a1f3e388a0029ea03327e4b21" } Frame { msec: 368 - hash: "bfd552ccaccc569d2478ac4d92fe2eb0" + hash: "7672135d842f0f6f3a06c19e320b9431" } Frame { msec: 384 - hash: "748d57dff4cdc09a842353e51de41e5a" + hash: "49b5720ebbb03a9c61aebdc6eaf6b2a8" } Frame { msec: 400 - hash: "e0012622a4ef1d5b2090c02020b676c2" + hash: "7d2ddf271385fef343412c43a41d88da" } Frame { msec: 416 - hash: "8e4d4a808564a8ba80578600104f230d" + hash: "3df6034ff296ab1242146ba7298a9dd8" } Frame { msec: 432 - hash: "d92e44d8e1f7651a9d256e9e4f3e8168" + hash: "5a52202453c359370c017a397cbc6f20" } Frame { msec: 448 - hash: "d99b016a0dfdb332dbb1a2c10f53bc05" + hash: "649d58d817e37e7b14d3080998dbc126" } Frame { msec: 464 - hash: "3ce4357881a34f4c9e2f0d684218e253" + hash: "f00b682156bde560b571e0044eff150a" } Frame { msec: 480 - hash: "07ee4bb59f7ee591bd7a6f117d9f1aa6" + hash: "0e5ce3806c60e7a67e72ee9f4c334454" } Frame { msec: 496 - hash: "f66ce51f2eece9f0fa89c41340245976" + hash: "9d8c0e6a6a66560752abc68de10a6ec0" } Frame { msec: 512 - hash: "a9d2b2d4f6ae5e071897d17469a5bad3" + hash: "ffd81c8901cdf67ec3fa574b606eba89" } Frame { msec: 528 - hash: "55db2dbd65cae186d59cb2edb5841880" + hash: "56b7098e63f8cc1d8957829e7779ae73" } Frame { msec: 544 - hash: "576297445ee3f89994538fcd8c8b102c" + hash: "7d7417b2b2c07c93bf5d951fddf4363b" } Frame { msec: 560 - hash: "6ca41b83b8ff27f97c71a23d1c7f9765" + hash: "a2dd725545042e9b6a366d809d2cfc4f" } Frame { msec: 576 - hash: "7e41ef79cae5966821106df39f6a748d" + hash: "8fd5ccba4b997a96f7773936afc4fc92" } Frame { msec: 592 - hash: "9e8b750bbb3680f90d6bbddb6e394d5e" + hash: "85f29eae877f93c4617a37b5c445c605" } Frame { msec: 608 - hash: "9a61dddcc33ff2b778097b5edb706912" + hash: "a8eb3ebef75081964a6beba533eba89b" } Frame { msec: 624 - hash: "395d015e538dde494059df392379ba26" + hash: "8c3e3f4833419e7df6de0c9443390751" } Frame { msec: 640 - hash: "d1db5dc62ca702f4241e45811aebe6f3" + hash: "537f3d9760f6cc0c07452ea3f334a008" } Frame { msec: 656 - hash: "18f1a038041bd8a51f3375ca64084251" + hash: "93a1851ca2afb595ad684a7f613e860c" } Frame { msec: 672 - hash: "6c0f6360156cb806a8b30cafc69013af" + hash: "fd353e60da99a884f60a2d1ab6e4be46" } Frame { msec: 688 - hash: "69525e71fe8fe9847ff956e40c2c45ec" + hash: "21cff9dcfa9e7bb4a44d75338e314d0e" } Frame { msec: 704 - hash: "ac7ae453f35a05e760976df6d91206e2" + hash: "64153f5d57b7191f5e957f22dcdff6d3" } Frame { msec: 720 - hash: "c96358482f0900a906b2fc4742981e3a" + hash: "211d8e9b6427129e4b9292fc862edfb6" } Frame { msec: 736 - hash: "2cccb8f6a63f21d01cd3b61a97730bf8" + hash: "35f96f202391dc805b0bbb45d7efb1bf" } Frame { msec: 752 - hash: "bf01c0cb968768199f3158e6cefcb09f" + hash: "0336a1ba71d4bf7b4cbf98812ba1ae9c" } Frame { msec: 768 - hash: "0ac63c33649462f06979de77c042476c" + hash: "c5ec3a61d64228efe448b0d5c0004baa" } Frame { msec: 784 - hash: "61931edba8d1abcdc07bb43e17446f4e" + hash: "9154774bce1d89b84c0f525e282bc95d" } Frame { msec: 800 - hash: "e8122f997a4076055d8addda88c4ad6e" + hash: "8d07794b2b17971ff69ff7961c441765" } Frame { msec: 816 - hash: "cc7e654138605c25cb21aa8966361cf4" + hash: "086c711c3794f8ad8d634ed6483f3caf" } Frame { msec: 832 - hash: "177aaec34c677b21798de1e024860490" + hash: "af591122aee8c949957ae19136505a57" } Frame { msec: 848 - hash: "d0fe9544e55f6876908d9c118366f038" + hash: "c84db4548f53ae95023e56fad3c4aea3" } Frame { msec: 864 - hash: "f713b7e11bf61a0f0a06e6aedb36b7f1" + hash: "d7a7bb5cfb91923db8d72d9a12f0016c" } Frame { msec: 880 - hash: "b703bd46b9f355711318882194f28d52" + hash: "7171788040f36bf1c878678906a84290" } Frame { msec: 896 - hash: "047dad73e6c845704f3de6b317ce9290" + hash: "d2016d9ba6b29c7dfb5d64e506e7f980" } Frame { msec: 912 - hash: "8c48b0963af8d71fc245373083c14a93" + hash: "75945e6719cea6aaf021fcd28dfe4da0" } Frame { msec: 928 - hash: "d11944e0d9035b6eff85ca9fc5adc2c0" + hash: "e203a20fc8dda077ff217ac74895b8f6" } Frame { msec: 944 - hash: "d650943a979c7bf52fff77063406c46d" + hash: "1acb696745e0ead2f8c9d807787ce225" } Frame { msec: 960 - hash: "13d533b5b3b01be7dbad7b8403ce1c24" + hash: "b8d60fcd3e262dc33d623a741fdafb0b" } Frame { msec: 976 @@ -250,239 +250,239 @@ VisualTest { } Frame { msec: 992 - hash: "ba51fa05accf637b31328ab0a11e4b61" + hash: "0acda3300bec26515f7ddfd33af6ca84" } Frame { msec: 1008 - hash: "25c783c07b5eb03c351274c3b6494e24" + hash: "12f5c647778c868638845fd66c825f51" } Frame { msec: 1024 - hash: "5665113db0b932b07ac707875e5d77e6" + hash: "e87432496a570b68c18d563fd3e55b7c" } Frame { msec: 1040 - hash: "aceeb64e5935f1889828f3487767db3e" + hash: "332a165345a53198ec22a69e12a7cd6c" } Frame { msec: 1056 - hash: "7c66c51a9fd694940a93a7acf036e6d3" + hash: "92f7d768af912807dca6ad16006d84e9" } Frame { msec: 1072 - hash: "8b699d11b0a8c7df7df448f5c27a0bc2" + hash: "50c330c7e9ed8f08e4b496b322fed388" } Frame { msec: 1088 - hash: "c592cebdfadf68eecbddb0add92afa42" + hash: "554317004bc31ba56c970fac294577df" } Frame { msec: 1104 - hash: "e175f718809eea5b38a1de46f061871f" + hash: "3c6391b4296451f1ca1db737e4d928c3" } Frame { msec: 1120 - hash: "3182ba22228e8cd056db81eea4678b5d" + hash: "8274fa399e0b132582389c909775e8cb" } Frame { msec: 1136 - hash: "e09776f37769f34bd2d856c6af3a1e53" + hash: "f66504b79f0415652f4c6720a2643afe" } Frame { msec: 1152 - hash: "085f9dd2539b950d9f62bdcdf4f3b172" + hash: "53ce26d4f839451868c70133c3f0dff2" } Frame { msec: 1168 - hash: "3c290084b9c251e039aef4df8581ed31" + hash: "715b6a5090e0a947cbbd5f8902088177" } Frame { msec: 1184 - hash: "893f5dc3cd01ace8d31ebc63e0d7e132" + hash: "3715a52358febdbfa4aeefe56b4b173e" } Frame { msec: 1200 - hash: "5cadde434641daffa52965659a4a056f" + hash: "d89459730ea136a34135fded35bc2247" } Frame { msec: 1216 - hash: "741d34abca5ba1a2e5678f3ca272dbd3" + hash: "ba8471a6c2449a05dfe411b86a38ff35" } Frame { msec: 1232 - hash: "96dd3f940c637b085026e224021239bd" + hash: "5c477b14e0ff59e5d7db360005deaea7" } Frame { msec: 1248 - hash: "df8334c4ce1ca5f2317a771e787aea96" + hash: "becdcaa9d4f78d94e3f3af87467798bd" } Frame { msec: 1264 - hash: "aeef63be208b75c9246248025c977b75" + hash: "2b1f5c5c6a9f26e6b359cf786591d480" } Frame { msec: 1280 - hash: "8722a8e9b1cca4cf20ec31da27f38614" + hash: "9b1cbb944a941fd2869ac193e9701582" } Frame { msec: 1296 - hash: "bdc1392f8e1a55e7c970502785024a89" + hash: "e1c67be1ec2030529335c02099a3d9cc" } Frame { msec: 1312 - hash: "ed2be797ca3d623ca532fea7ca5b1f2c" + hash: "4f4ecadaa0afad0e38530067ee7688b9" } Frame { msec: 1328 - hash: "bb79d75488df131bf5443371c6b4464f" + hash: "13f13cb8ea96d764c93ab43f538af2a7" } Frame { msec: 1344 - hash: "0b7dd91d5bc8290d4be1a0af6b2756c2" + hash: "cd33ccd1ac45f1f83cf93cfbdefa415a" } Frame { msec: 1360 - hash: "4f1c88a745105934fb94a6a3e3620602" + hash: "8c84a3842a8da763c4b398e49a13831f" } Frame { msec: 1376 - hash: "c5a3b476c66e9b6a33f93d5114303669" + hash: "3b47b3c27171032450a421ae8ecc786d" } Frame { msec: 1392 - hash: "3104791545798f8e43ca976c893d078f" + hash: "524517523cb15d7886c6dbfa8724ea95" } Frame { msec: 1408 - hash: "3c8c329b4c757ab37054cbcc93840a75" + hash: "3ae90a6ed20fe62da9fb81b51d6d9a1e" } Frame { msec: 1424 - hash: "36b1fc7d93664005449d818dd063c8e7" + hash: "70c0880f0d0d1deefc22baebbeda06c3" } Frame { msec: 1440 - hash: "25927d84d7394e912977d25ddf555ddf" + hash: "d97f6cda6df39ffe1db076204191bba6" } Frame { msec: 1456 - hash: "6f226e26d6a40b3688923fb833ce0fd9" + hash: "d170a0b8339bd0c29b664403ce8b3286" } Frame { msec: 1472 - hash: "75aaa5301fc8d716371d9fcec6491e81" + hash: "fd962a3a4e2fbe03f6730136cdc2a824" } Frame { msec: 1488 - hash: "fb87bcb1b620d48d6bfa6eeb94025907" + hash: "75bcbfc7d7bf3139538347b17b41cf12" } Frame { msec: 1504 - hash: "88231c28ef82974f8eb47060e64176d0" + hash: "0fcba8fa11a2f3fc7ebcefee6e9dafcd" } Frame { msec: 1520 - hash: "06db390a17fc2fa4a93012a168801d05" + hash: "621f80511b2ce7106b1d285045f505ca" } Frame { msec: 1536 - hash: "41400211939574696e04bcd615130f34" + hash: "be6896d8de4bbb8b7ef9e1d34f6f7f32" } Frame { msec: 1552 - hash: "ca979c24603d8cd31583c1670f15b1a9" + hash: "a770cffe72c2791d6d76c16926f98f2f" } Frame { msec: 1568 - hash: "515a32b5c4567c8dec3004c41214daa1" + hash: "7e8222f9831e235c7d044b5188a20dd1" } Frame { msec: 1584 - hash: "d4fbe8e354db8b1b5fc543daf7007fdb" + hash: "a740dfb5ae432712abb4f5f9479a22fa" } Frame { msec: 1600 - hash: "ec6351064566a120836cb115bb81e46a" + hash: "a731135b3ac067712081b959f27d8784" } Frame { msec: 1616 - hash: "74dcd99e1ba3e5e8447d2695e4c4acd9" + hash: "c6cdb85a28bdc970cf2a30f0e2cef763" } Frame { msec: 1632 - hash: "7a751f44c384b87b0c2f633932587795" + hash: "4c901d5879cd4e1602b4f3560745f0b1" } Frame { msec: 1648 - hash: "04e45b241cf498777835f74feeea0c15" + hash: "ef64a09b2bd30a6c618ac59a8cacd628" } Frame { msec: 1664 - hash: "66096d2ef700bb64771fa192219e034a" + hash: "816f55f5b0b8e3baa52e274ae737ee30" } Frame { msec: 1680 - hash: "1dd2437b0f63a8acaa8c62819d7de10e" + hash: "90db19b8b2d820d36d7a45518f730014" } Frame { msec: 1696 - hash: "89e6b25fc16c5d1eba04cd0f7bd2f910" + hash: "f94248d3df175536a4a6b88722763d75" } Frame { msec: 1712 - hash: "7cd23dbc40340bc3652255d4a65ce7ec" + hash: "d1aa57e0666a7d9b5b0dc7b021a1387c" } Frame { msec: 1728 - hash: "5f94c6ba73d2dbeb8ec90b17cb7fab6f" + hash: "77b17a540862f5ec6b2256408fd3637f" } Frame { msec: 1744 - hash: "e8e01bc97bbd349e2f64a59d13ca25a3" + hash: "e9b9a37996f5825006565f5b56e755ea" } Frame { msec: 1760 - hash: "a0cf054ef1005191637173a22e325891" + hash: "1ce712e1755047d17d5cf3c97cff1c96" } Frame { msec: 1776 - hash: "fa8b35c0141049d691735b26eb9410ac" + hash: "95c21bab93788ed45280e61c51173a99" } Frame { msec: 1792 - hash: "c55b4d3a3ee530480d0a0e0aa52f340f" + hash: "6f62ae9bba2b1d2ea67f13d63157bd7c" } Frame { msec: 1808 - hash: "b2639e3e32e513c991525a87448e805d" + hash: "b5f11412bdb100f88a1f29aa577316e5" } Frame { msec: 1824 - hash: "d66f25378bbec3eca675a90795567825" + hash: "d4e2468ed0935687e370fcf70059f57f" } Frame { msec: 1840 - hash: "13bb009108dfcdc861a16ab33a3c4f3a" + hash: "e7b5970ef9f327a8e7905f1a16c3f1a3" } Frame { msec: 1856 - hash: "3a09ccaf62d8929def529260da98dc7a" + hash: "c5b9694fe2d7952d6ef03ff5febec00b" } Frame { msec: 1872 - hash: "79564d7447732fcfdbb81ff2bcd85a4f" + hash: "0604da4b328d80162fd88bdfcf2a8a68" } Frame { msec: 1888 - hash: "149c65ef5ec18af4fd264fa284bfa027" + hash: "cbeffb3c86fcd7b52672382d6a186692" } Frame { msec: 1904 - hash: "e5370728e870ac9f907aafbd17526631" + hash: "deb96a6469b351f5e70d3032ad250df9" } Frame { msec: 1920 - hash: "98034cff5b93c905bbc53cf9582bc4be" + hash: "d4bcb6da72c0b7f2e0e55be917eb5720" } Frame { msec: 1936 @@ -490,239 +490,239 @@ VisualTest { } Frame { msec: 1952 - hash: "05c3a8016110ad576c349964af3d4d05" + hash: "c044b96932667fd56ca8c87ec70791a3" } Frame { msec: 1968 - hash: "91caa4f007dfd1ab7994a11bf4b4fa94" + hash: "f197116b796c3647986337515c04a812" } Frame { msec: 1984 - hash: "d1fb233313ef6e7be742a504e171f6c0" + hash: "3d06fad059276fd5f8f58faeac482d52" } Frame { msec: 2000 - hash: "0e20bbd3c80189a6d8ea23205bf7b278" + hash: "841ab0655e2bd498d51605fd37607378" } Frame { msec: 2016 - hash: "6f2b8de20e5800bda7a533353bb5805a" + hash: "5968dd4f704d72f264704ae6d6a416cf" } Frame { msec: 2032 - hash: "e25e8c3e7df20b0b7e8f25fba5d2608a" + hash: "5daf3758175963e409ad7ea18d40a894" } Frame { msec: 2048 - hash: "8802faef3121ac361b448b42b89d2176" + hash: "37750cd0aca54fc6fa6651213a4a8aa0" } Frame { msec: 2064 - hash: "567c710da8f36b51192a8994611a50a8" + hash: "b64411f26c1bde823daa4caf96402887" } Frame { msec: 2080 - hash: "d45309aabf9c510234276c28ef4e3c35" + hash: "cf6d68046e9b7cc39305bfbdbd64a6eb" } Frame { msec: 2096 - hash: "ef698cc1ea8eee480c57f38a8f704e6b" + hash: "47f89ab15314ce63dc3828aa4ae16d54" } Frame { msec: 2112 - hash: "5301682074b5343d18748cf6e7bada1c" + hash: "a7116055b3b33ad02bae75f2db016314" } Frame { msec: 2128 - hash: "dd5220c0d94b747cd462e35e41945ae8" + hash: "0a0443c4927d3d8d3373c311b89ead0d" } Frame { msec: 2144 - hash: "0d1c246956283f80eff128bbb5241e03" + hash: "6be5e906e9127471bb11e98ba9d68d4c" } Frame { msec: 2160 - hash: "7b57a3c6ee9b8ae316e2a2d7a1ab630d" + hash: "759c0e5e8a435846bf4471075df9ce1b" } Frame { msec: 2176 - hash: "61780d8d53f21b275f9ee795c5519cbf" + hash: "b7648957a2fdcca31b863907ea5cbc4f" } Frame { msec: 2192 - hash: "1876746b0b6bdc40c808c3afb0ad00e8" + hash: "7e9ead6f87c989160681fe87eb44224b" } Frame { msec: 2208 - hash: "6f7e9a1d8240b037501b486245eb5c33" + hash: "f7ab3534218320a49b8cc14b39d23a38" } Frame { msec: 2224 - hash: "8a5f3d8d9e0147072690740d567f8a2a" + hash: "44ac6d8e7fd3facac856b532bea9b0dd" } Frame { msec: 2240 - hash: "2ea7f42b92e407b50ebf82c841e77f7f" + hash: "238d68eb27eaacddcf428706fca95cad" } Frame { msec: 2256 - hash: "7ce3e829b75be2f2f72952c614748b51" + hash: "8568076d97d416810f1e91acd33bbba0" } Frame { msec: 2272 - hash: "112cbf9bf521c2fb0f0573081feb6051" + hash: "3649d85321ac7674d8c3dd77815aaf32" } Frame { msec: 2288 - hash: "c6d16bde84f714d3f14a105deb68e989" + hash: "0c6dab9f7d575265d554093b88ee7e17" } Frame { msec: 2304 - hash: "f1e3f7416233bc8b3bce90672185cbd2" + hash: "6387cb408d048d7b139f3d9aed2f14d6" } Frame { msec: 2320 - hash: "009fd4bfc354c91f3766bcf32732b027" + hash: "de2fa29a82cec9d9f22d50bba257f5de" } Frame { msec: 2336 - hash: "67220a780fc2cd8e9fbd314c5f000f7c" + hash: "ba77a0dc547202e129e899998c7e0909" } Frame { msec: 2352 - hash: "c306d1be1dc40fb115b583a83497fbb0" + hash: "0acde6d2435444611f7d5fc67d336d4b" } Frame { msec: 2368 - hash: "f6bedbbffec4447da8fda2d75169644c" + hash: "1032d38e48cc3485c7a50bcf3ae949d0" } Frame { msec: 2384 - hash: "be4f28bd814ce3688bd7a28a2dc71606" + hash: "571649ca193507216f344405d8cb9636" } Frame { msec: 2400 - hash: "130ec2ff6e06927a02df769743de19b5" + hash: "968aa311380ef783852b4a642d61d0c3" } Frame { msec: 2416 - hash: "34ffeec40133a30903809a30d9108887" + hash: "b440b4f5f2cb4a061b69e9a99bca0417" } Frame { msec: 2432 - hash: "133a89cf6c784106066b96f51e43f43a" + hash: "c1a2c2fd58f52c6a6f3e5dc2c1e9e8cf" } Frame { msec: 2448 - hash: "6336801efb0d62e5b790ff67b76754a5" + hash: "2eab036693343475b799188c98f18bad" } Frame { msec: 2464 - hash: "04d50179982fdf346a33e346eeb9eb62" + hash: "9b0e2eb4c5ed398dfe5ac82c83d38065" } Frame { msec: 2480 - hash: "5432d629a9bce20e041841d79acf91ab" + hash: "d6459b44113b2514a036a39449579918" } Frame { msec: 2496 - hash: "afbdef35aae3d79f0ba992a34c46b1dc" + hash: "99e24ed5413be65aee179d7fdd0aa473" } Frame { msec: 2512 - hash: "18a051efc4bf47515d2220549970fa69" + hash: "43c7a5fe622eee2202ab1061155da474" } Frame { msec: 2528 - hash: "a0cde51080347ba164227c8a40cf37c1" + hash: "78bc6de01b343c19ce11bcb5ce5db091" } Frame { msec: 2544 - hash: "b2eeabc7208b7a3f9e5a7d16f984be86" + hash: "77463f64f99952f37467b4cae5a75a73" } Frame { msec: 2560 - hash: "ee5c97a5bd22b22a4e18998b6d056517" + hash: "39181ec3e10fba5d73221e3ef725661d" } Frame { msec: 2576 - hash: "84f4575d2c4ba3a91ef72cb8caf64e63" + hash: "f23732daf5b25cbfa79256ad21739537" } Frame { msec: 2592 - hash: "bd14115e10086864de3ab6a7bc13f9a2" + hash: "171b8149512f9a1fc44c4076ae8e6891" } Frame { msec: 2608 - hash: "9b3672f731fad142ae7e3621a325cf21" + hash: "1c30c5284764d3aba948f417dc67ea95" } Frame { msec: 2624 - hash: "17d1887942d2b7297b6f3a2545ec8bf2" + hash: "5b40de40cc84f75a3038a2adafea6688" } Frame { msec: 2640 - hash: "c5c8b41e74b90fcb9d4da432fa01e361" + hash: "11e918309ac265c0dddc34b05ddd2beb" } Frame { msec: 2656 - hash: "a2992b652305077906db9dcbb90c1a23" + hash: "a18c91eae3fd3154c12e46717248577a" } Frame { msec: 2672 - hash: "bfb30aa4caa43833eca59ceaaca04084" + hash: "839199f3940822a38fc2b44161ee0840" } Frame { msec: 2688 - hash: "cbb06915ae6176ef52fdb518fb5a12de" + hash: "8b62f8b4c353981788111a9434995a18" } Frame { msec: 2704 - hash: "a894d34c39b274149a9391a5956f0666" + hash: "db7ee2d5e4905959c836d5162bd241c0" } Frame { msec: 2720 - hash: "7dcc1008d2287ca15f726854e5e204f2" + hash: "cb770a4cd0f56108ef703147e74338ae" } Frame { msec: 2736 - hash: "811db22f9a25dd594f59d97adb41b9ce" + hash: "bdaaedef0c17b19cc283eba699799073" } Frame { msec: 2752 - hash: "6535cb3f4cf2839158f172bd0c1baf88" + hash: "8a7f5f87493ba387c14056f9a598e320" } Frame { msec: 2768 - hash: "1919a3d079c06fbb00b6a23d4a47951a" + hash: "3974497b297fa233f3821abba2bdd6ce" } Frame { msec: 2784 - hash: "69f3525379f7628c4435d2681a2a0bb8" + hash: "41a5744b7747765764829328217e80ea" } Frame { msec: 2800 - hash: "4ce4253e733c24a1a988de018916d0b2" + hash: "4d380bb823659cdfc1d3517234144b72" } Frame { msec: 2816 - hash: "7610bee04c98b9af5e6ae34f4a1a4a09" + hash: "4699cc1dad5c6d5c84137ee5c5db52a4" } Frame { msec: 2832 - hash: "5e2a2c16c0a218afc3eb9095f3432f41" + hash: "22a34c810c640b378708079761d16c9b" } Frame { msec: 2848 - hash: "0124a41ff860d31b3e36973226db2916" + hash: "0c76a943b24dc9538416b05a678c7c94" } Frame { msec: 2864 - hash: "a1126e1d8cce43dfb571803a62f790de" + hash: "575a20b793f899d50a95121708263283" } Frame { msec: 2880 - hash: "6eee371fe5cc8b052ca49bb5e3509307" + hash: "830757417bbff5d6950177aa3617516a" } Frame { msec: 2896 @@ -730,239 +730,239 @@ VisualTest { } Frame { msec: 2912 - hash: "331bcae7bd6aeaede3556cf926bd1a0c" + hash: "1b83db1121bb3436621d3f22758af76d" } Frame { msec: 2928 - hash: "a7561f3a6ce4fee43e4b06dfe5ee7844" + hash: "b2a6d502e9ed62f67c29b8ae7b857116" } Frame { msec: 2944 - hash: "712e52e72cc01ae29cd7e736a78f94b3" + hash: "e9e06068090c076021e508772ae85b5a" } Frame { msec: 2960 - hash: "d34a4414fca4ef7a2cce288d438bfcc1" + hash: "5c7288791d73792b914e99a38b7b455c" } Frame { msec: 2976 - hash: "1c2c5241aee7efcc9a6adcbe01f56609" + hash: "ad2b35c647da055a1088e476f250ea78" } Frame { msec: 2992 - hash: "90a8547113c36002f62405aac41de5b1" + hash: "7cc9bbd4a2ed2ba1646b10a68c11241f" } Frame { msec: 3008 - hash: "5726801ea37dcfd2c087c9523b360b55" + hash: "f633c12a9d078c4a1405ee399bd75e6f" } Frame { msec: 3024 - hash: "a371d1f9ef687f50d433b0efb6bb57c9" + hash: "e4638bb2b40ed7c31630412010bccef1" } Frame { msec: 3040 - hash: "75e0e2728e2160dcc012a21c759c62d0" + hash: "76fdd98f79c08d9211c42b79f953315a" } Frame { msec: 3056 - hash: "428e6d8adbd0e85790365d7537dc37c8" + hash: "df754dffbe6429aa7222e7a37d1956c5" } Frame { msec: 3072 - hash: "798babedde2192b4ac9becc5bae3ea62" + hash: "68edef9b10728f0785cc74dfe92c3e03" } Frame { msec: 3088 - hash: "39745e87e8e96993fccfed6710c3c14f" + hash: "627ac43eb191db77345ab1a08bfd7e7a" } Frame { msec: 3104 - hash: "08624110f2bba4e676b4a339ead23f78" + hash: "c38698cc4c2de1eb96855f0b6398fd7f" } Frame { msec: 3120 - hash: "1d45fc90eb70a3c21d503284637355de" + hash: "6264db59fa7dd4498cedac94b856d90e" } Frame { msec: 3136 - hash: "37c6eed126e265f4a60a1bc92879e18e" + hash: "b550d8181dbf88c5079e2fb6310f0309" } Frame { msec: 3152 - hash: "a25f2accf6e19eb293a5540efa9447ec" + hash: "6ffecf31343192ae352c42c6ba978fd3" } Frame { msec: 3168 - hash: "5212d86075595cb1a9c47cf683ac411a" + hash: "445e7056bfb7726fcf1b0b6411400ec0" } Frame { msec: 3184 - hash: "8f43028def9e949ca3a15fdec9932a59" + hash: "9648c06d3a89c054587fa1e86c727fd0" } Frame { msec: 3200 - hash: "90b55602b8aa530d634db72c202f2d75" + hash: "8d0af1ad33c06cfceaba1a0ca84cf0a0" } Frame { msec: 3216 - hash: "f5a84978918f8987b49ce500959d81ef" + hash: "f8f0c27738b186f17a9dd106481e85c5" } Frame { msec: 3232 - hash: "588382357311925157e12ae7a576426c" + hash: "44e5893cd28e2d70afbfbb779f2dd154" } Frame { msec: 3248 - hash: "ce3e9a93f60579f77f6503637cb316d0" + hash: "dc0d1baafa24423402caf63d6fcd6189" } Frame { msec: 3264 - hash: "63c2ba78f5a81375fe79c5b2b2030b55" + hash: "12c17a563b37bf633dce6fc6793d1cd9" } Frame { msec: 3280 - hash: "7dceb950e0cae31bddeca1d279a688f3" + hash: "a8647172101b59753ea6aa40ec4570dc" } Frame { msec: 3296 - hash: "c6681bcf60562b16eb515f6b0bfdc751" + hash: "e21afb74f793bef8c1b03d252b5700a8" } Frame { msec: 3312 - hash: "cd2b41f01af6b80622158bf38a13c609" + hash: "2e10ccbdee088b17172a479a8a859d56" } Frame { msec: 3328 - hash: "69401bc38be274791a26f6ea161eb296" + hash: "f111c24e1e8d643543519fd703811f24" } Frame { msec: 3344 - hash: "425238342219c4fc66c4a0a8b16c5345" + hash: "dd9aeec2ed05f9c68e1726a91e90e127" } Frame { msec: 3360 - hash: "a501082add225fa59f468808d34d1c16" + hash: "043923ed2dee91815d0dce6cd38834e9" } Frame { msec: 3376 - hash: "58bba6d1eb3166e7ac9bfe36cd9a4fa9" + hash: "07e0dbb223355b2921eb0597235ee820" } Frame { msec: 3392 - hash: "293df1a2bdd526e97d5783f46f74262c" + hash: "0fba3e9a08d83405df35c632f9dc051e" } Frame { msec: 3408 - hash: "6808ee202e8eae3c72474126b59aa0dc" + hash: "a0a5a515ec395bdf4912ab24c8780339" } Frame { msec: 3424 - hash: "7ef977f275851649324e333d58777156" + hash: "4e04e0246eb952cfae716214084cc1ed" } Frame { msec: 3440 - hash: "12007edff45f9cc21a2f633052e4b9d6" + hash: "e7e989234e360e7c0cb44e7be4d654e8" } Frame { msec: 3456 - hash: "bc1d362d3a42ab3610136727605222dc" + hash: "139b3309ac9e25b2165342bfb202169f" } Frame { msec: 3472 - hash: "6bfead8d9644f5abdd3b896714521002" + hash: "b4008ee73b92abad9c5fd7c83cb864cf" } Frame { msec: 3488 - hash: "341c311e4b08d69a053c1faffc208838" + hash: "b801a917995bd41eee2f4e4fed3006c5" } Frame { msec: 3504 - hash: "54e4c8001d06c7c48180865598f5f5df" + hash: "a0ea151cd2a2056a45ff5428239b37f4" } Frame { msec: 3520 - hash: "e69c142bf2a6cf85194de5df91e54886" + hash: "01df418b5ba99271d3a2e8807de78899" } Frame { msec: 3536 - hash: "fb9fda1e790c64aea264a6af0020ce33" + hash: "047fd42df7a5ba0f939930c2021df5fe" } Frame { msec: 3552 - hash: "74c27a13090e8eb78bc157daff840e07" + hash: "4336498cee8b516e79297a073257e008" } Frame { msec: 3568 - hash: "f9a8c1764b0a1625ce336e80a91db00e" + hash: "ce404ce21bc91ff8dc61bd95b9e1d5ac" } Frame { msec: 3584 - hash: "11fd6f7cee3971ebce744f20da77139f" + hash: "06b5c263105ec574f10e70002c29adee" } Frame { msec: 3600 - hash: "6cea030cfc1c53772f14d760d046d7f8" + hash: "6a224a56bbeaeb703afa0c2a7f2daf7d" } Frame { msec: 3616 - hash: "599cf14ec73f6812ffb49312d3d8f742" + hash: "65259fcbdb9edfefc4fcbd1ab5f62542" } Frame { msec: 3632 - hash: "879798ae161f1550096abdfa113e3eac" + hash: "93be4111a6aa21d85ab354bbd41e5b31" } Frame { msec: 3648 - hash: "4cc9b679554a2a8b809a88504c17f86a" + hash: "2e4edcdc4807466620c9671d329a0977" } Frame { msec: 3664 - hash: "943bca80ab42c1856aa095add705a3fe" + hash: "e3232d08b83e3e9917b6f4eabc86df72" } Frame { msec: 3680 - hash: "0386a55ebc0cd32b4b7727eac2908a59" + hash: "f27caa5d738b4778d4343f7b197c5dac" } Frame { msec: 3696 - hash: "74ed8ea60f1c1b3fb097eb7f5bca43e8" + hash: "dcf3032bc798daf1dc6bb7d608e2dffb" } Frame { msec: 3712 - hash: "225f78966947d20268f1bea32093c0c9" + hash: "9f2d4ba31ab4ec10b43b7de19197994e" } Frame { msec: 3728 - hash: "d2ed6af6fbdfbdcd9c82a588b72c5f6b" + hash: "4bf6419de081524ecdeb4c07b376f06d" } Frame { msec: 3744 - hash: "3c0e45078e5223335a4204fb8904d116" + hash: "3fdd8166873e768e1346e52a1b4a6554" } Frame { msec: 3760 - hash: "58ad3d7030b079cdedf1a84d6c6a59fc" + hash: "7b25b2f1b2694a87095fba46d505684f" } Frame { msec: 3776 - hash: "2c8ce9f237a2c373584b661defe84e7f" + hash: "d8246057d4b0306747ba449d5247dd21" } Frame { msec: 3792 - hash: "c2f2ae8c7481036ddda01776db61ef0a" + hash: "e45c06fbf48923393f672381f0256513" } Frame { msec: 3808 - hash: "7236e9d1e086479acd5047070a4ae700" + hash: "fef8f1bf977d6567eebe14ccafd36853" } Frame { msec: 3824 - hash: "7f95776ac1804971cc939f8f1f0fee70" + hash: "04152eab971eac3fbba26f15ba09d329" } Frame { msec: 3840 - hash: "d6d76b50b7d2ec522a51d2512a5aeff8" + hash: "5039cb5183587fe46ef30c5d0f8c9584" } Frame { msec: 3856 @@ -970,99 +970,99 @@ VisualTest { } Frame { msec: 3872 - hash: "29b8b535c9321752a68b17400c7133ac" + hash: "5d62550ba4502c3eae3f62ce5b8e9374" } Frame { msec: 3888 - hash: "846f4f5718bce8dc7a333d8603bfe729" + hash: "859ab80ee7d563a158970d1f3360c7dd" } Frame { msec: 3904 - hash: "b285f6a417bfb46add698f4193b39552" + hash: "4f900b694d6e552c9287472ca58be35a" } Frame { msec: 3920 - hash: "b79708e4aa2b05a1c285dd075127460d" + hash: "6b3aa5a3071ea5ec911bae3dee02a496" } Frame { msec: 3936 - hash: "0cdded9c7796292cd38a3bc2fdc65597" + hash: "d1b1536b5162e5367db66bb21ccebdcd" } Frame { msec: 3952 - hash: "6f8855c20666a58bbf4ade762403180e" + hash: "8c8dd0b84be58a3257dbd0210a7b21ab" } Frame { msec: 3968 - hash: "1a7979b578c8b330099a5e840d5d2bd8" + hash: "f96cb092836d67c81fdfd3668005e912" } Frame { msec: 3984 - hash: "30fb74a2bf4e1ec57332713994e405cd" + hash: "7b06694d2fd4dd2def94b11a1e46a391" } Frame { msec: 4000 - hash: "1c7df42f90a867350adca840106d3ba1" + hash: "cef499e6c1665d2bd4a4322d4334234a" } Frame { msec: 4016 - hash: "5509a232afe047f365465ef8fd9f0af0" + hash: "664503d5cef2676e287c363a488e91f1" } Frame { msec: 4032 - hash: "2149d59ffd7c07bdc0bcb2d8ad9b1ca3" + hash: "cefa44e348ea0d6955a71c7eb0a9b45c" } Frame { msec: 4048 - hash: "4b8848019eaf4af67db4db09b98b183e" + hash: "0ee5684bf4d5b54c5bc9aeefcb98a3d1" } Frame { msec: 4064 - hash: "e3f6f9db89bd81ce68f8dfd401f1baa8" + hash: "fb6667f1c516187cfb93774469ea8165" } Frame { msec: 4080 - hash: "6e8d991c83094c89025148bc0943e554" + hash: "fba776d4d3056bf64e335de876e118be" } Frame { msec: 4096 - hash: "ed4d8bde61581cdcf6128c65d427846c" + hash: "a49aa08c4bd8a1ae9420e0962cf77e01" } Frame { msec: 4112 - hash: "c63d0baaa43c4f6a0f0150ecf268b06d" + hash: "bff31d464ae9fc68adf0c8072b637592" } Frame { msec: 4128 - hash: "b36c6a0092f400bb99b2c68a0ba4e6ce" + hash: "23bd0afacb2d9bd009c9b5006dc6adf1" } Frame { msec: 4144 - hash: "b4b1059c1e00ee77fda538f9e71a6206" + hash: "d918e94e5be77741d1172fbf960db07e" } Frame { msec: 4160 - hash: "e7c36e10dee12ea2d22d7c17cde9d8ca" + hash: "9abce75f201e20a730e79a672bf837e8" } Frame { msec: 4176 - hash: "78d070c37bbc707e38db98896f997349" + hash: "aae93f5e2a2c6e06dbe78bea4e6b1283" } Frame { msec: 4192 - hash: "e56cb5fbb7713a66ef1f1577eff20db8" + hash: "66cba82f479ae6536800b05f6d694884" } Frame { msec: 4208 - hash: "17e466af39cdde893cf93fa38392bb90" + hash: "d79d43b820c4a53735cfb84288dd5efd" } Frame { msec: 4224 - hash: "75bf32afe1071794bba58623d7165a22" + hash: "fe0237b64a2ef664ce2c3028b730fdc4" } Frame { msec: 4240 - hash: "6de50f6748021b99731f6cb25d6d6ec3" + hash: "771b02756dadb0a1f268166138f7cad4" } Frame { msec: 4256 @@ -1258,66 +1258,66 @@ VisualTest { } Frame { msec: 5024 - hash: "f803bd7bdc97bb8bbb5103a54901d756" + hash: "c95868a45ccb031ea1d440bedd1fc33f" } Frame { msec: 5040 - hash: "de956b3223e24a615713c35faa403128" + hash: "eb78d75fbf3ef0b88c072f69ac3f490d" } Frame { msec: 5056 - hash: "9124b4e5f5dd374e44f3f57fe3d6809b" + hash: "6f612fe36fa8028a75f6149390bd3585" } Frame { msec: 5072 - hash: "5b8313c622796aa87248b38ab336bcf8" + hash: "7906071fe656ccf18d24c100950b6a7a" } Frame { msec: 5088 - hash: "de6477fc7e6b8f14a7a51f9cf762ee79" + hash: "064a0b9a0adb235fd52a6d53b65c9d1c" } Frame { msec: 5104 - hash: "0d908ef6e3ea15455e35a9ebbc90c735" + hash: "f42b6952937376ae34f7ef493e86aee6" } Frame { msec: 5120 - hash: "bd1d7ad510cd5e04283f6167a5a8e2df" + hash: "3444491cc10b0ae2f298ac3aefcda77c" } Frame { msec: 5136 - hash: "2ec7418477158ee60afe123fa2b7ce4b" + hash: "ce5adf6c5c4d5e385ce7e461e380b00e" } Frame { msec: 5152 - hash: "04c671070b1eba13380aa2fbb672d3a1" + hash: "6b6c1a422f778935b400c9a170439ec4" } Frame { msec: 5168 - hash: "ce031ba5b388dfaff34674eb71f790f2" + hash: "fdaff741a826c10cb9799adc70d92145" } Frame { msec: 5184 - hash: "e754141341d9f81366f21820e46bd1ca" + hash: "259da9a4c2bb9c89d16dd1943645e836" } Frame { msec: 5200 - hash: "acf56542617bc742ad729709645ac919" + hash: "fd2903f4b3d7086981a89e87e460a7ba" } Frame { msec: 5216 - hash: "c50698470bc6c1ea04633b9e819a2d4d" + hash: "9860af14b459925078467f334bf41e42" } Frame { msec: 5232 - hash: "c156d3540c3cf6d406b72696fd6e9148" + hash: "ae2b8b255d48c12a954f02c63e0d5aa4" } Frame { msec: 5248 - hash: "82a04f09cd35db0dbf012797625368e4" + hash: "c33e9369e76654433e97b2b72cca7911" } Frame { msec: 5264 - hash: "3b9ccb93f6375ea401c1fc3bcdf847d5" + hash: "7fa3de8afdeb61c6e2e87cde2e96152f" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png index 56d98ff..b4e1d3a 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext2.0.png index 1ab1eb5..4177b9e 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png index 68921f6..36e5d35 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext2.0.png index c9450c7..34f8e38 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png index 59fc0fc..19a7ea1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png index 2747b50..e25493f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png index 74efe73..5800e13 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png index 02f6e17..29e8168 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png index 59fc0fc..19a7ea1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml index 760a831..955ebbd 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml @@ -10,95 +10,95 @@ VisualTest { } Frame { msec: 32 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 48 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 64 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 80 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 96 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 112 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 128 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 144 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 160 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 176 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 192 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 208 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 224 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 240 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 256 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 272 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 288 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 304 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 320 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 336 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 352 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 368 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 384 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Key { type: 6 @@ -110,15 +110,15 @@ VisualTest { } Frame { msec: 400 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 416 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 432 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Key { type: 7 @@ -130,27 +130,27 @@ VisualTest { } Frame { msec: 448 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 464 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 480 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 496 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 512 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 528 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Key { type: 6 @@ -162,15 +162,15 @@ VisualTest { } Frame { msec: 544 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 560 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 576 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Key { type: 7 @@ -182,27 +182,27 @@ VisualTest { } Frame { msec: 592 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 608 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 624 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 640 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 656 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 672 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Key { type: 6 @@ -214,19 +214,19 @@ VisualTest { } Frame { msec: 688 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 704 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 720 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 736 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Key { type: 7 @@ -238,23 +238,23 @@ VisualTest { } Frame { msec: 752 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 768 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 784 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 800 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 816 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Key { type: 6 @@ -266,19 +266,19 @@ VisualTest { } Frame { msec: 832 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 848 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 864 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 880 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Key { type: 7 @@ -290,19 +290,19 @@ VisualTest { } Frame { msec: 896 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 912 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 928 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 944 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Key { type: 6 @@ -314,7 +314,7 @@ VisualTest { } Frame { msec: 960 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 976 @@ -322,11 +322,11 @@ VisualTest { } Frame { msec: 992 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 1008 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Key { type: 7 @@ -338,23 +338,23 @@ VisualTest { } Frame { msec: 1024 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 1040 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 1056 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 1072 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 1088 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Key { type: 6 @@ -366,15 +366,15 @@ VisualTest { } Frame { msec: 1104 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 1120 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 1136 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Key { type: 7 @@ -386,23 +386,23 @@ VisualTest { } Frame { msec: 1152 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 1168 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 1184 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 1200 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 1216 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Key { type: 6 @@ -414,19 +414,19 @@ VisualTest { } Frame { msec: 1232 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 1248 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 1264 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 1280 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Key { type: 7 @@ -438,19 +438,19 @@ VisualTest { } Frame { msec: 1296 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 1312 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 1328 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 1344 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Key { type: 6 @@ -462,19 +462,19 @@ VisualTest { } Frame { msec: 1360 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1376 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1392 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1408 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Key { type: 7 @@ -486,23 +486,23 @@ VisualTest { } Frame { msec: 1424 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1440 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1456 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1472 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1488 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Key { type: 6 @@ -514,15 +514,15 @@ VisualTest { } Frame { msec: 1504 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1520 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1536 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Key { type: 7 @@ -534,79 +534,79 @@ VisualTest { } Frame { msec: 1552 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1568 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1584 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1600 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1616 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1632 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1648 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1664 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1680 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1696 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1712 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1728 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1744 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1760 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1776 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1792 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1808 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1824 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Frame { msec: 1840 - hash: "64f5712c1f96345f2a2ad103e6fbd734" + hash: "79ad12250ec5379ed79ad01604968fe0" } Key { type: 6 @@ -618,23 +618,23 @@ VisualTest { } Frame { msec: 1856 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1872 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1888 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1904 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1920 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1936 @@ -642,15 +642,15 @@ VisualTest { } Frame { msec: 1952 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1968 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 1984 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Key { type: 7 @@ -662,23 +662,23 @@ VisualTest { } Frame { msec: 2000 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 2016 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 2032 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 2048 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Frame { msec: 2064 - hash: "7f895d1255301397298cd6b92282e4f7" + hash: "0a110e257ae412b8440a17be98a6b7f5" } Key { type: 6 @@ -690,23 +690,23 @@ VisualTest { } Frame { msec: 2080 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2096 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2112 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2128 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2144 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Key { type: 7 @@ -718,23 +718,23 @@ VisualTest { } Frame { msec: 2160 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2176 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2192 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2208 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Frame { msec: 2224 - hash: "6ec9e863238467c249f62bdd38b68490" + hash: "162c39ecb50d0a2a03953cca07c493ff" } Key { type: 6 @@ -746,11 +746,11 @@ VisualTest { } Frame { msec: 2240 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 2256 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Key { type: 7 @@ -762,23 +762,23 @@ VisualTest { } Frame { msec: 2272 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 2288 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 2304 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 2320 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Frame { msec: 2336 - hash: "fe998f3c7c780fddfa6a595936d2e78e" + hash: "0386e92fe3ea2eda40b6f785419cf9f7" } Key { type: 6 @@ -790,15 +790,15 @@ VisualTest { } Frame { msec: 2352 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2368 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2384 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Key { type: 7 @@ -810,55 +810,55 @@ VisualTest { } Frame { msec: 2400 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2416 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2432 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2448 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2464 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2480 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2496 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2512 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2528 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2544 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2560 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2576 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Frame { msec: 2592 - hash: "a7415d0abcc670ba02c2a00b3b5fc647" + hash: "671d2393c31db71d33cd29482294b855" } Key { type: 6 @@ -870,23 +870,23 @@ VisualTest { } Frame { msec: 2608 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2624 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2640 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2656 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2672 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Key { type: 7 @@ -898,23 +898,23 @@ VisualTest { } Frame { msec: 2688 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2704 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2720 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2736 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Frame { msec: 2752 - hash: "9eda76efdd179847e89b9e96ead51e4a" + hash: "59923f379655d063d27641c88064c071" } Key { type: 6 @@ -926,15 +926,15 @@ VisualTest { } Frame { msec: 2768 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 2784 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 2800 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Key { type: 7 @@ -946,19 +946,19 @@ VisualTest { } Frame { msec: 2816 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 2832 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 2848 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Frame { msec: 2864 - hash: "1bcb9bc9d6606329ad5376ea6f608bf8" + hash: "5815bbb03307e196fa567ae273366394" } Key { type: 6 @@ -970,7 +970,7 @@ VisualTest { } Frame { msec: 2880 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 2896 @@ -978,11 +978,11 @@ VisualTest { } Frame { msec: 2912 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 2928 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Key { type: 7 @@ -994,23 +994,23 @@ VisualTest { } Frame { msec: 2944 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 2960 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 2976 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 2992 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Frame { msec: 3008 - hash: "1465f1f32ba4a6180ab3460298febe26" + hash: "7f418dcd1c4ef954cbb66e16361b8871" } Key { type: 6 @@ -1022,23 +1022,23 @@ VisualTest { } Frame { msec: 3024 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3040 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3056 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3072 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3088 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Key { type: 7 @@ -1050,155 +1050,155 @@ VisualTest { } Frame { msec: 3104 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3120 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3136 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3152 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3168 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3184 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3200 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3216 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3232 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3248 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3264 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3280 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3296 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3312 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3328 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3344 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3360 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3376 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3392 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3408 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3424 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3440 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3456 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3472 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3488 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3504 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3520 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3536 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3552 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3568 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3584 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3600 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3616 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3632 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3648 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3664 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3680 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Frame { msec: 3696 - hash: "89f3a1c5080d5d742e4455a8818a715c" + hash: "ff9e0c6cfbbbd68708698875037ac3d3" } Key { type: 6 @@ -1210,27 +1210,27 @@ VisualTest { } Frame { msec: 3712 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3728 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3744 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3760 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3776 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3792 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Key { type: 7 @@ -1242,15 +1242,15 @@ VisualTest { } Frame { msec: 3808 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3824 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3840 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3856 @@ -1258,114 +1258,114 @@ VisualTest { } Frame { msec: 3872 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3888 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3904 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3920 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3936 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3952 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3968 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 3984 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4000 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4016 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4032 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4048 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4064 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4080 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4096 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4112 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4128 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4144 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4160 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4176 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4192 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4208 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4224 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4240 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4256 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4272 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4288 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } Frame { msec: 4304 - hash: "0051b27d72a917e2af72c4b953877d42" + hash: "5efa0360e73361a50a5fb4e2b7a650b5" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png index d63f753..da3b971 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png index bb7daa3..8ea0787 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png index bcad242..33328db 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png index 7be45e7..222ba53 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png index 42f7f51..970e73d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png index 147632a..4dc64a1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png index d624a71..99d451c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.7.png index d624a71..99d451c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml index 72f68e7..13834f0 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml @@ -18,7 +18,7 @@ VisualTest { } Frame { msec: 32 - hash: "3e34b9a8c5df08caa18f37289c25138f" + hash: "ca07773bf0df96be1f23d13c4d6e2bfd" } Key { type: 7 @@ -30,11 +30,11 @@ VisualTest { } Frame { msec: 48 - hash: "3e34b9a8c5df08caa18f37289c25138f" + hash: "ca07773bf0df96be1f23d13c4d6e2bfd" } Frame { msec: 64 - hash: "3e34b9a8c5df08caa18f37289c25138f" + hash: "ca07773bf0df96be1f23d13c4d6e2bfd" } Key { type: 7 @@ -46,11 +46,11 @@ VisualTest { } Frame { msec: 80 - hash: "3e34b9a8c5df08caa18f37289c25138f" + hash: "ca07773bf0df96be1f23d13c4d6e2bfd" } Frame { msec: 96 - hash: "3e34b9a8c5df08caa18f37289c25138f" + hash: "ca07773bf0df96be1f23d13c4d6e2bfd" } Key { type: 6 @@ -62,15 +62,15 @@ VisualTest { } Frame { msec: 112 - hash: "4242081446f2a3122bbd4f8c03a67e5c" + hash: "fc223de2e1f35db08d9689bc41f02304" } Frame { msec: 128 - hash: "4242081446f2a3122bbd4f8c03a67e5c" + hash: "fc223de2e1f35db08d9689bc41f02304" } Frame { msec: 144 - hash: "4242081446f2a3122bbd4f8c03a67e5c" + hash: "fc223de2e1f35db08d9689bc41f02304" } Key { type: 6 @@ -82,15 +82,15 @@ VisualTest { } Frame { msec: 160 - hash: "79c4a9defe89f99b3f6b3c25bd81fc7e" + hash: "dc208fb5236b0a2a54bf9aaf7a9d60cd" } Frame { msec: 176 - hash: "79c4a9defe89f99b3f6b3c25bd81fc7e" + hash: "dc208fb5236b0a2a54bf9aaf7a9d60cd" } Frame { msec: 192 - hash: "79c4a9defe89f99b3f6b3c25bd81fc7e" + hash: "dc208fb5236b0a2a54bf9aaf7a9d60cd" } Key { type: 7 @@ -102,11 +102,11 @@ VisualTest { } Frame { msec: 208 - hash: "79c4a9defe89f99b3f6b3c25bd81fc7e" + hash: "dc208fb5236b0a2a54bf9aaf7a9d60cd" } Frame { msec: 224 - hash: "79c4a9defe89f99b3f6b3c25bd81fc7e" + hash: "dc208fb5236b0a2a54bf9aaf7a9d60cd" } Key { type: 6 @@ -118,7 +118,7 @@ VisualTest { } Frame { msec: 240 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Key { type: 7 @@ -130,19 +130,19 @@ VisualTest { } Frame { msec: 256 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Frame { msec: 272 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Frame { msec: 288 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Frame { msec: 304 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Key { type: 7 @@ -154,11 +154,11 @@ VisualTest { } Frame { msec: 320 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Frame { msec: 336 - hash: "0bee22de7793974cadec12dfb5df16aa" + hash: "c017468afd522089b5c9f42dd61be1b4" } Key { type: 6 @@ -170,19 +170,19 @@ VisualTest { } Frame { msec: 352 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Frame { msec: 368 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Frame { msec: 384 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Frame { msec: 400 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Key { type: 7 @@ -194,19 +194,19 @@ VisualTest { } Frame { msec: 416 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Frame { msec: 432 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Frame { msec: 448 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Frame { msec: 464 - hash: "07393d1c1bb6da436700881ebcd38195" + hash: "84b1f1bf26af0da07006bb102d22693f" } Key { type: 6 @@ -218,19 +218,19 @@ VisualTest { } Frame { msec: 480 - hash: "b12a4550ae068d157d340c008047d6f1" + hash: "a16f5aa01bd07de4ef7f868b7b6116f7" } Frame { msec: 496 - hash: "b12a4550ae068d157d340c008047d6f1" + hash: "a16f5aa01bd07de4ef7f868b7b6116f7" } Frame { msec: 512 - hash: "b12a4550ae068d157d340c008047d6f1" + hash: "a16f5aa01bd07de4ef7f868b7b6116f7" } Frame { msec: 528 - hash: "b12a4550ae068d157d340c008047d6f1" + hash: "a16f5aa01bd07de4ef7f868b7b6116f7" } Key { type: 6 @@ -250,23 +250,23 @@ VisualTest { } Frame { msec: 544 - hash: "f291de0963549b92d607f38d2d08c551" + hash: "e25e16d0d7b223b243d466630b901f68" } Frame { msec: 560 - hash: "f291de0963549b92d607f38d2d08c551" + hash: "e25e16d0d7b223b243d466630b901f68" } Frame { msec: 576 - hash: "f291de0963549b92d607f38d2d08c551" + hash: "e25e16d0d7b223b243d466630b901f68" } Frame { msec: 592 - hash: "f291de0963549b92d607f38d2d08c551" + hash: "e25e16d0d7b223b243d466630b901f68" } Frame { msec: 608 - hash: "f291de0963549b92d607f38d2d08c551" + hash: "e25e16d0d7b223b243d466630b901f68" } Key { type: 7 @@ -286,19 +286,19 @@ VisualTest { } Frame { msec: 624 - hash: "b7eedae59cc521aa8222596cd97bf129" + hash: "a53520edb9c117aa53abc42fce3505be" } Frame { msec: 640 - hash: "b7eedae59cc521aa8222596cd97bf129" + hash: "a53520edb9c117aa53abc42fce3505be" } Frame { msec: 656 - hash: "b7eedae59cc521aa8222596cd97bf129" + hash: "a53520edb9c117aa53abc42fce3505be" } Frame { msec: 672 - hash: "b7eedae59cc521aa8222596cd97bf129" + hash: "a53520edb9c117aa53abc42fce3505be" } Key { type: 7 @@ -310,11 +310,11 @@ VisualTest { } Frame { msec: 688 - hash: "b7eedae59cc521aa8222596cd97bf129" + hash: "a53520edb9c117aa53abc42fce3505be" } Frame { msec: 704 - hash: "b7eedae59cc521aa8222596cd97bf129" + hash: "a53520edb9c117aa53abc42fce3505be" } Key { type: 6 @@ -326,23 +326,23 @@ VisualTest { } Frame { msec: 720 - hash: "98ef281d984841075f2fc82cebcba3a9" + hash: "a7ef30038b24e8bf946bdd38aaac6430" } Frame { msec: 736 - hash: "98ef281d984841075f2fc82cebcba3a9" + hash: "a7ef30038b24e8bf946bdd38aaac6430" } Frame { msec: 752 - hash: "98ef281d984841075f2fc82cebcba3a9" + hash: "a7ef30038b24e8bf946bdd38aaac6430" } Frame { msec: 768 - hash: "98ef281d984841075f2fc82cebcba3a9" + hash: "a7ef30038b24e8bf946bdd38aaac6430" } Frame { msec: 784 - hash: "98ef281d984841075f2fc82cebcba3a9" + hash: "a7ef30038b24e8bf946bdd38aaac6430" } Key { type: 7 @@ -354,7 +354,7 @@ VisualTest { } Frame { msec: 800 - hash: "98ef281d984841075f2fc82cebcba3a9" + hash: "a7ef30038b24e8bf946bdd38aaac6430" } Key { type: 6 @@ -366,15 +366,15 @@ VisualTest { } Frame { msec: 816 - hash: "e7b8f24ba55765e2fc1f386d510b402f" + hash: "026b29fc03bd22e15ff725d34dee91eb" } Frame { msec: 832 - hash: "e7b8f24ba55765e2fc1f386d510b402f" + hash: "026b29fc03bd22e15ff725d34dee91eb" } Frame { msec: 848 - hash: "e7b8f24ba55765e2fc1f386d510b402f" + hash: "026b29fc03bd22e15ff725d34dee91eb" } Key { type: 7 @@ -386,15 +386,15 @@ VisualTest { } Frame { msec: 864 - hash: "e7b8f24ba55765e2fc1f386d510b402f" + hash: "026b29fc03bd22e15ff725d34dee91eb" } Frame { msec: 880 - hash: "e7b8f24ba55765e2fc1f386d510b402f" + hash: "026b29fc03bd22e15ff725d34dee91eb" } Frame { msec: 896 - hash: "e7b8f24ba55765e2fc1f386d510b402f" + hash: "026b29fc03bd22e15ff725d34dee91eb" } Key { type: 6 @@ -406,19 +406,19 @@ VisualTest { } Frame { msec: 912 - hash: "38a3062cb4f23993416f83ff6acbe189" + hash: "2b1cef34dff32e36e3c44f2ffb2be66e" } Frame { msec: 928 - hash: "38a3062cb4f23993416f83ff6acbe189" + hash: "2b1cef34dff32e36e3c44f2ffb2be66e" } Frame { msec: 944 - hash: "38a3062cb4f23993416f83ff6acbe189" + hash: "2b1cef34dff32e36e3c44f2ffb2be66e" } Frame { msec: 960 - hash: "38a3062cb4f23993416f83ff6acbe189" + hash: "2b1cef34dff32e36e3c44f2ffb2be66e" } Frame { msec: 976 @@ -426,7 +426,7 @@ VisualTest { } Frame { msec: 992 - hash: "38a3062cb4f23993416f83ff6acbe189" + hash: "2b1cef34dff32e36e3c44f2ffb2be66e" } Key { type: 6 @@ -446,23 +446,23 @@ VisualTest { } Frame { msec: 1008 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1024 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1040 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1056 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1072 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Key { type: 7 @@ -474,31 +474,31 @@ VisualTest { } Frame { msec: 1088 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1104 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1120 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1136 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1152 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1168 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Frame { msec: 1184 - hash: "daef9995a008f0ca672adc98315a6b9f" + hash: "f619bc4148876effc459127009d4cc3a" } Key { type: 6 @@ -510,23 +510,23 @@ VisualTest { } Frame { msec: 1200 - hash: "da27d35f241ccc7c1ee2832e491fa726" + hash: "c7fbee3129141e8493b7bc4f85fdc2d0" } Frame { msec: 1216 - hash: "da27d35f241ccc7c1ee2832e491fa726" + hash: "c7fbee3129141e8493b7bc4f85fdc2d0" } Frame { msec: 1232 - hash: "da27d35f241ccc7c1ee2832e491fa726" + hash: "c7fbee3129141e8493b7bc4f85fdc2d0" } Frame { msec: 1248 - hash: "da27d35f241ccc7c1ee2832e491fa726" + hash: "c7fbee3129141e8493b7bc4f85fdc2d0" } Frame { msec: 1264 - hash: "da27d35f241ccc7c1ee2832e491fa726" + hash: "c7fbee3129141e8493b7bc4f85fdc2d0" } Key { type: 7 @@ -546,11 +546,11 @@ VisualTest { } Frame { msec: 1280 - hash: "7136f5cfcca4a86b8764667895efa813" + hash: "f2a45d80148ee1b5f1cd8cb6ddd0c5ed" } Frame { msec: 1296 - hash: "7136f5cfcca4a86b8764667895efa813" + hash: "f2a45d80148ee1b5f1cd8cb6ddd0c5ed" } Key { type: 6 @@ -562,15 +562,15 @@ VisualTest { } Frame { msec: 1312 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Frame { msec: 1328 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Frame { msec: 1344 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Key { type: 7 @@ -582,11 +582,11 @@ VisualTest { } Frame { msec: 1360 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Frame { msec: 1376 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Key { type: 7 @@ -598,19 +598,19 @@ VisualTest { } Frame { msec: 1392 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Frame { msec: 1408 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Frame { msec: 1424 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Frame { msec: 1440 - hash: "b99aec3d97f4442378a18ac88d50b97d" + hash: "147efa341e4dc39cdd555c2c81e5c603" } Key { type: 6 @@ -622,23 +622,23 @@ VisualTest { } Frame { msec: 1456 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Frame { msec: 1472 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Frame { msec: 1488 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Frame { msec: 1504 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Frame { msec: 1520 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Key { type: 7 @@ -650,11 +650,11 @@ VisualTest { } Frame { msec: 1536 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Frame { msec: 1552 - hash: "c32293903502fd1964cfbc10515b2ef7" + hash: "d5b19a6d767a08f488cc8fc5c427a2dd" } Key { type: 6 @@ -666,23 +666,23 @@ VisualTest { } Frame { msec: 1568 - hash: "47371eb93a2a8fac7afb53990fac9130" + hash: "bf6265ca859f700fb07f8b992255787d" } Frame { msec: 1584 - hash: "47371eb93a2a8fac7afb53990fac9130" + hash: "bf6265ca859f700fb07f8b992255787d" } Frame { msec: 1600 - hash: "47371eb93a2a8fac7afb53990fac9130" + hash: "bf6265ca859f700fb07f8b992255787d" } Frame { msec: 1616 - hash: "47371eb93a2a8fac7afb53990fac9130" + hash: "bf6265ca859f700fb07f8b992255787d" } Frame { msec: 1632 - hash: "47371eb93a2a8fac7afb53990fac9130" + hash: "bf6265ca859f700fb07f8b992255787d" } Key { type: 6 @@ -702,23 +702,23 @@ VisualTest { } Frame { msec: 1648 - hash: "5c22c2566b437497dd6fd908135ec39e" + hash: "329e4cd26283eb08188d96b2b0325733" } Frame { msec: 1664 - hash: "5c22c2566b437497dd6fd908135ec39e" + hash: "329e4cd26283eb08188d96b2b0325733" } Frame { msec: 1680 - hash: "5c22c2566b437497dd6fd908135ec39e" + hash: "329e4cd26283eb08188d96b2b0325733" } Frame { msec: 1696 - hash: "5c22c2566b437497dd6fd908135ec39e" + hash: "329e4cd26283eb08188d96b2b0325733" } Frame { msec: 1712 - hash: "5c22c2566b437497dd6fd908135ec39e" + hash: "329e4cd26283eb08188d96b2b0325733" } Key { type: 6 @@ -730,15 +730,15 @@ VisualTest { } Frame { msec: 1728 - hash: "29b4e69de4c83ccdee6ef116ab3785ee" + hash: "7b5ac2afafbbaf1e13c70a11461820ad" } Frame { msec: 1744 - hash: "29b4e69de4c83ccdee6ef116ab3785ee" + hash: "7b5ac2afafbbaf1e13c70a11461820ad" } Frame { msec: 1760 - hash: "29b4e69de4c83ccdee6ef116ab3785ee" + hash: "7b5ac2afafbbaf1e13c70a11461820ad" } Key { type: 7 @@ -750,7 +750,7 @@ VisualTest { } Frame { msec: 1776 - hash: "29b4e69de4c83ccdee6ef116ab3785ee" + hash: "7b5ac2afafbbaf1e13c70a11461820ad" } Key { type: 6 @@ -762,11 +762,11 @@ VisualTest { } Frame { msec: 1792 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1808 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Key { type: 7 @@ -778,19 +778,19 @@ VisualTest { } Frame { msec: 1824 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1840 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1856 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1872 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Key { type: 7 @@ -802,15 +802,15 @@ VisualTest { } Frame { msec: 1888 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1904 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1920 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Frame { msec: 1936 @@ -818,7 +818,7 @@ VisualTest { } Frame { msec: 1952 - hash: "5ab8ecb0ca9fed70f1d8add6b7b3972d" + hash: "bcfa1aa48767f70541a70cb5f85792ba" } Key { type: 6 @@ -830,27 +830,27 @@ VisualTest { } Frame { msec: 1968 - hash: "2a43f5ac0c7bdf38e367b0cdb0bccea9" + hash: "e89f7cf38b3b596298d6c649a1207469" } Frame { msec: 1984 - hash: "2a43f5ac0c7bdf38e367b0cdb0bccea9" + hash: "e89f7cf38b3b596298d6c649a1207469" } Frame { msec: 2000 - hash: "2a43f5ac0c7bdf38e367b0cdb0bccea9" + hash: "e89f7cf38b3b596298d6c649a1207469" } Frame { msec: 2016 - hash: "2a43f5ac0c7bdf38e367b0cdb0bccea9" + hash: "e89f7cf38b3b596298d6c649a1207469" } Frame { msec: 2032 - hash: "2a43f5ac0c7bdf38e367b0cdb0bccea9" + hash: "e89f7cf38b3b596298d6c649a1207469" } Frame { msec: 2048 - hash: "2a43f5ac0c7bdf38e367b0cdb0bccea9" + hash: "e89f7cf38b3b596298d6c649a1207469" } Key { type: 6 @@ -862,7 +862,7 @@ VisualTest { } Frame { msec: 2064 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Key { type: 7 @@ -874,15 +874,15 @@ VisualTest { } Frame { msec: 2080 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2096 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2112 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Key { type: 7 @@ -894,27 +894,27 @@ VisualTest { } Frame { msec: 2128 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2144 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2160 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2176 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2192 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Frame { msec: 2208 - hash: "0f28c7855c7fde3390d16a2638e23bd0" + hash: "18e71331b42a115f7f9d5c09e235b944" } Key { type: 6 @@ -926,23 +926,23 @@ VisualTest { } Frame { msec: 2224 - hash: "b56e002e5eddde0245f7ad4c75339968" + hash: "3630abd7cc6ab303d08f30dea7b1eec1" } Frame { msec: 2240 - hash: "b56e002e5eddde0245f7ad4c75339968" + hash: "3630abd7cc6ab303d08f30dea7b1eec1" } Frame { msec: 2256 - hash: "b56e002e5eddde0245f7ad4c75339968" + hash: "3630abd7cc6ab303d08f30dea7b1eec1" } Frame { msec: 2272 - hash: "b56e002e5eddde0245f7ad4c75339968" + hash: "3630abd7cc6ab303d08f30dea7b1eec1" } Frame { msec: 2288 - hash: "b56e002e5eddde0245f7ad4c75339968" + hash: "3630abd7cc6ab303d08f30dea7b1eec1" } Key { type: 6 @@ -954,7 +954,7 @@ VisualTest { } Frame { msec: 2304 - hash: "0bdd50e3c8b382b464c82d791ae6c1e5" + hash: "83e7b8c680cda95ec0a669b8030a3efd" } Key { type: 7 @@ -966,15 +966,15 @@ VisualTest { } Frame { msec: 2320 - hash: "0bdd50e3c8b382b464c82d791ae6c1e5" + hash: "83e7b8c680cda95ec0a669b8030a3efd" } Frame { msec: 2336 - hash: "0bdd50e3c8b382b464c82d791ae6c1e5" + hash: "83e7b8c680cda95ec0a669b8030a3efd" } Frame { msec: 2352 - hash: "0bdd50e3c8b382b464c82d791ae6c1e5" + hash: "83e7b8c680cda95ec0a669b8030a3efd" } Key { type: 6 @@ -986,11 +986,11 @@ VisualTest { } Frame { msec: 2368 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Frame { msec: 2384 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Key { type: 7 @@ -1002,15 +1002,15 @@ VisualTest { } Frame { msec: 2400 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Frame { msec: 2416 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Frame { msec: 2432 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Key { type: 7 @@ -1022,15 +1022,15 @@ VisualTest { } Frame { msec: 2448 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Frame { msec: 2464 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Frame { msec: 2480 - hash: "b61b475b84c6e6a149f6262fc560b741" + hash: "cc826833607ae754e633d21ca67a6b5a" } Key { type: 6 @@ -1042,19 +1042,19 @@ VisualTest { } Frame { msec: 2496 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2512 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2528 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2544 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Key { type: 7 @@ -1066,27 +1066,27 @@ VisualTest { } Frame { msec: 2560 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2576 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2592 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2608 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2624 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Frame { msec: 2640 - hash: "1acd6152f317a6c8f6aca52ccf62a8c6" + hash: "2b4c812fac4e84909cc8fc70d8966a27" } Key { type: 6 @@ -1098,19 +1098,19 @@ VisualTest { } Frame { msec: 2656 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Frame { msec: 2672 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Frame { msec: 2688 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Frame { msec: 2704 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Key { type: 7 @@ -1122,15 +1122,15 @@ VisualTest { } Frame { msec: 2720 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Frame { msec: 2736 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Frame { msec: 2752 - hash: "90ab887de5fbf34f4d45e13c4b211490" + hash: "c1aabf4b43cbae0d7654ba78fc870fdd" } Key { type: 6 @@ -1142,23 +1142,23 @@ VisualTest { } Frame { msec: 2768 - hash: "fc91281749bf1a844a19f20d87a17126" + hash: "a707dd726c777a661e4f12d27a75cf63" } Frame { msec: 2784 - hash: "fc91281749bf1a844a19f20d87a17126" + hash: "a707dd726c777a661e4f12d27a75cf63" } Frame { msec: 2800 - hash: "fc91281749bf1a844a19f20d87a17126" + hash: "a707dd726c777a661e4f12d27a75cf63" } Frame { msec: 2816 - hash: "fc91281749bf1a844a19f20d87a17126" + hash: "a707dd726c777a661e4f12d27a75cf63" } Frame { msec: 2832 - hash: "fc91281749bf1a844a19f20d87a17126" + hash: "a707dd726c777a661e4f12d27a75cf63" } Key { type: 6 @@ -1178,15 +1178,15 @@ VisualTest { } Frame { msec: 2848 - hash: "dcf6e510866fa20e54255c2c980d7b4b" + hash: "bdaa69c1074f9820901ce31ea24383ca" } Frame { msec: 2864 - hash: "dcf6e510866fa20e54255c2c980d7b4b" + hash: "bdaa69c1074f9820901ce31ea24383ca" } Frame { msec: 2880 - hash: "dcf6e510866fa20e54255c2c980d7b4b" + hash: "bdaa69c1074f9820901ce31ea24383ca" } Frame { msec: 2896 @@ -1202,11 +1202,11 @@ VisualTest { } Frame { msec: 2912 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 2928 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Key { type: 7 @@ -1218,11 +1218,11 @@ VisualTest { } Frame { msec: 2944 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 2960 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Key { type: 7 @@ -1234,35 +1234,35 @@ VisualTest { } Frame { msec: 2976 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 2992 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 3008 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 3024 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 3040 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 3056 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 3072 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Frame { msec: 3088 - hash: "a26b06714f951084f2ee5ee4b4e67e43" + hash: "f703f87031be4f9d7409fb145343c02b" } Key { type: 6 @@ -1274,23 +1274,23 @@ VisualTest { } Frame { msec: 3104 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3120 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3136 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3152 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3168 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Key { type: 7 @@ -1302,23 +1302,23 @@ VisualTest { } Frame { msec: 3184 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3200 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3216 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3232 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Frame { msec: 3248 - hash: "832c43553cea6d22b7664ef6f145d1c6" + hash: "cb2660df955b757b00661a1acb5f22d2" } Key { type: 6 @@ -1330,15 +1330,15 @@ VisualTest { } Frame { msec: 3264 - hash: "081c183901aadcc6406f4ad9f41efa7e" + hash: "8ea510d25195956fa42eabfe3bb9f230" } Frame { msec: 3280 - hash: "081c183901aadcc6406f4ad9f41efa7e" + hash: "8ea510d25195956fa42eabfe3bb9f230" } Frame { msec: 3296 - hash: "081c183901aadcc6406f4ad9f41efa7e" + hash: "8ea510d25195956fa42eabfe3bb9f230" } Key { type: 7 @@ -1350,15 +1350,15 @@ VisualTest { } Frame { msec: 3312 - hash: "081c183901aadcc6406f4ad9f41efa7e" + hash: "8ea510d25195956fa42eabfe3bb9f230" } Frame { msec: 3328 - hash: "081c183901aadcc6406f4ad9f41efa7e" + hash: "8ea510d25195956fa42eabfe3bb9f230" } Frame { msec: 3344 - hash: "081c183901aadcc6406f4ad9f41efa7e" + hash: "8ea510d25195956fa42eabfe3bb9f230" } Key { type: 6 @@ -1370,23 +1370,23 @@ VisualTest { } Frame { msec: 3360 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Frame { msec: 3376 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Frame { msec: 3392 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Frame { msec: 3408 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Frame { msec: 3424 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Key { type: 7 @@ -1398,15 +1398,15 @@ VisualTest { } Frame { msec: 3440 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Frame { msec: 3456 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Frame { msec: 3472 - hash: "9bd3c76a58f942880f40566cfbaa2e99" + hash: "26b58aef7b1f50a5d261718e8266a3fb" } Key { type: 6 @@ -1418,19 +1418,19 @@ VisualTest { } Frame { msec: 3488 - hash: "204a2ee8a33e5452d47d95ad4142d417" + hash: "012854de1c9d1a772994d02f52bdcd7c" } Frame { msec: 3504 - hash: "204a2ee8a33e5452d47d95ad4142d417" + hash: "012854de1c9d1a772994d02f52bdcd7c" } Frame { msec: 3520 - hash: "204a2ee8a33e5452d47d95ad4142d417" + hash: "012854de1c9d1a772994d02f52bdcd7c" } Frame { msec: 3536 - hash: "204a2ee8a33e5452d47d95ad4142d417" + hash: "012854de1c9d1a772994d02f52bdcd7c" } Key { type: 7 @@ -1442,11 +1442,11 @@ VisualTest { } Frame { msec: 3552 - hash: "204a2ee8a33e5452d47d95ad4142d417" + hash: "012854de1c9d1a772994d02f52bdcd7c" } Frame { msec: 3568 - hash: "204a2ee8a33e5452d47d95ad4142d417" + hash: "012854de1c9d1a772994d02f52bdcd7c" } Key { type: 6 @@ -1458,27 +1458,27 @@ VisualTest { } Frame { msec: 3584 - hash: "4729d1f555fe604d4660f02673f9c5f3" + hash: "660a31e1c0d573f4155cfa8fe2323413" } Frame { msec: 3600 - hash: "4729d1f555fe604d4660f02673f9c5f3" + hash: "660a31e1c0d573f4155cfa8fe2323413" } Frame { msec: 3616 - hash: "4729d1f555fe604d4660f02673f9c5f3" + hash: "660a31e1c0d573f4155cfa8fe2323413" } Frame { msec: 3632 - hash: "4729d1f555fe604d4660f02673f9c5f3" + hash: "660a31e1c0d573f4155cfa8fe2323413" } Frame { msec: 3648 - hash: "4729d1f555fe604d4660f02673f9c5f3" + hash: "660a31e1c0d573f4155cfa8fe2323413" } Frame { msec: 3664 - hash: "4729d1f555fe604d4660f02673f9c5f3" + hash: "660a31e1c0d573f4155cfa8fe2323413" } Key { type: 6 @@ -1490,7 +1490,7 @@ VisualTest { } Frame { msec: 3680 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Key { type: 7 @@ -1502,23 +1502,23 @@ VisualTest { } Frame { msec: 3696 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3712 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3728 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3744 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3760 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Key { type: 7 @@ -1530,23 +1530,23 @@ VisualTest { } Frame { msec: 3776 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3792 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3808 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3824 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3840 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3856 @@ -1554,15 +1554,15 @@ VisualTest { } Frame { msec: 3872 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3888 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Frame { msec: 3904 - hash: "2c0e0951ce4839b302a6e2735adc6c09" + hash: "bea00f5e628e40b679eb8829c16c6260" } Key { type: 6 @@ -1574,23 +1574,23 @@ VisualTest { } Frame { msec: 3920 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Frame { msec: 3936 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Frame { msec: 3952 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Frame { msec: 3968 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Frame { msec: 3984 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Key { type: 7 @@ -1602,11 +1602,11 @@ VisualTest { } Frame { msec: 4000 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Frame { msec: 4016 - hash: "28c2ffe2ad35010dc077625cde7d21b6" + hash: "c5c60cd10a1106161cde5f51dbdec5ad" } Key { type: 6 @@ -1618,15 +1618,15 @@ VisualTest { } Frame { msec: 4032 - hash: "6f206482adcd45a2b0d8d3c8b85f53c6" + hash: "41c26e6a4c911f9ecd082c4d3366806b" } Frame { msec: 4048 - hash: "6f206482adcd45a2b0d8d3c8b85f53c6" + hash: "41c26e6a4c911f9ecd082c4d3366806b" } Frame { msec: 4064 - hash: "6f206482adcd45a2b0d8d3c8b85f53c6" + hash: "41c26e6a4c911f9ecd082c4d3366806b" } Key { type: 7 @@ -1638,7 +1638,7 @@ VisualTest { } Frame { msec: 4080 - hash: "6f206482adcd45a2b0d8d3c8b85f53c6" + hash: "41c26e6a4c911f9ecd082c4d3366806b" } Key { type: 6 @@ -1650,19 +1650,19 @@ VisualTest { } Frame { msec: 4096 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Frame { msec: 4112 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Frame { msec: 4128 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Frame { msec: 4144 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Key { type: 7 @@ -1674,15 +1674,15 @@ VisualTest { } Frame { msec: 4160 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Frame { msec: 4176 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Frame { msec: 4192 - hash: "4685a786f36cb821a69b0ac059145a5f" + hash: "e212938ce981ed4e8d7a993468bc9377" } Key { type: 6 @@ -1694,23 +1694,23 @@ VisualTest { } Frame { msec: 4208 - hash: "d0efb89ee3e2d2b18429b57dcfe13f33" + hash: "55df0528a97d77d0a4b513aeedd34440" } Frame { msec: 4224 - hash: "d0efb89ee3e2d2b18429b57dcfe13f33" + hash: "55df0528a97d77d0a4b513aeedd34440" } Frame { msec: 4240 - hash: "d0efb89ee3e2d2b18429b57dcfe13f33" + hash: "55df0528a97d77d0a4b513aeedd34440" } Frame { msec: 4256 - hash: "d0efb89ee3e2d2b18429b57dcfe13f33" + hash: "55df0528a97d77d0a4b513aeedd34440" } Frame { msec: 4272 - hash: "d0efb89ee3e2d2b18429b57dcfe13f33" + hash: "55df0528a97d77d0a4b513aeedd34440" } Key { type: 6 @@ -1722,7 +1722,7 @@ VisualTest { } Frame { msec: 4288 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Key { type: 7 @@ -1734,15 +1734,15 @@ VisualTest { } Frame { msec: 4304 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Frame { msec: 4320 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Frame { msec: 4336 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Key { type: 7 @@ -1754,23 +1754,23 @@ VisualTest { } Frame { msec: 4352 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Frame { msec: 4368 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Frame { msec: 4384 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Frame { msec: 4400 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Frame { msec: 4416 - hash: "cbe0bb714b2e9b63af978f666292d8f0" + hash: "2165091c97a891560bf3afab879e6dbc" } Key { type: 6 @@ -1782,15 +1782,15 @@ VisualTest { } Frame { msec: 4432 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Frame { msec: 4448 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Frame { msec: 4464 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Key { type: 7 @@ -1802,23 +1802,23 @@ VisualTest { } Frame { msec: 4480 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Frame { msec: 4496 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Frame { msec: 4512 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Frame { msec: 4528 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Frame { msec: 4544 - hash: "d15a45a86874daaff5f2e6afae43b2f4" + hash: "a3d7968e13768c4ec538fe9ba7edf142" } Key { type: 6 @@ -1830,19 +1830,19 @@ VisualTest { } Frame { msec: 4560 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Frame { msec: 4576 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Frame { msec: 4592 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Frame { msec: 4608 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Key { type: 7 @@ -1854,19 +1854,19 @@ VisualTest { } Frame { msec: 4624 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Frame { msec: 4640 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Frame { msec: 4656 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Frame { msec: 4672 - hash: "b0c3ef9c5331af8768b23537d1d38311" + hash: "3b18ada8637d4024acfe88718765f71c" } Key { type: 6 @@ -1878,19 +1878,19 @@ VisualTest { } Frame { msec: 4688 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Frame { msec: 4704 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Frame { msec: 4720 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Frame { msec: 4736 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Key { type: 7 @@ -1902,15 +1902,15 @@ VisualTest { } Frame { msec: 4752 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Frame { msec: 4768 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Frame { msec: 4784 - hash: "3be1d2faec1ab5d3d1ab72c25db95059" + hash: "c419775870b0c5e41b5156c840e6a298" } Key { type: 6 @@ -1922,7 +1922,7 @@ VisualTest { } Frame { msec: 4800 - hash: "db999862fcf827930098b3f129ff567f" + hash: "81a744f02650728c7557a27c94056e64" } Frame { msec: 4816 @@ -1938,19 +1938,19 @@ VisualTest { } Frame { msec: 4832 - hash: "db999862fcf827930098b3f129ff567f" + hash: "81a744f02650728c7557a27c94056e64" } Frame { msec: 4848 - hash: "db999862fcf827930098b3f129ff567f" + hash: "81a744f02650728c7557a27c94056e64" } Frame { msec: 4864 - hash: "db999862fcf827930098b3f129ff567f" + hash: "81a744f02650728c7557a27c94056e64" } Frame { msec: 4880 - hash: "db999862fcf827930098b3f129ff567f" + hash: "81a744f02650728c7557a27c94056e64" } Key { type: 6 @@ -1962,19 +1962,19 @@ VisualTest { } Frame { msec: 4896 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 4912 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 4928 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 4944 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Key { type: 7 @@ -1986,207 +1986,207 @@ VisualTest { } Frame { msec: 4960 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 4976 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 4992 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5008 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5024 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5040 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5056 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5072 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5088 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5104 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5120 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5136 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5152 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5168 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5184 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5200 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5216 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5232 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5248 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5264 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5280 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5296 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5312 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5328 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5344 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5360 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5376 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5392 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5408 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5424 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5440 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5456 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5472 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5488 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5504 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5520 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5536 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5552 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5568 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5584 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5600 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5616 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5632 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5648 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5664 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5680 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5696 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5712 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5728 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5744 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5760 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5776 @@ -2194,239 +2194,239 @@ VisualTest { } Frame { msec: 5792 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5808 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5824 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5840 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5856 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5872 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5888 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5904 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5920 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5936 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5952 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5968 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 5984 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6000 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6016 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6032 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6048 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6064 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6080 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6096 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6112 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6128 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6144 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6160 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6176 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6192 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6208 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6224 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6240 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6256 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6272 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6288 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6304 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6320 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6336 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6352 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6368 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6384 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6400 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6416 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6432 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6448 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6464 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6480 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6496 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6512 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6528 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6544 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6560 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6576 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6592 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6608 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6624 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6640 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6656 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6672 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6688 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6704 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6720 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6736 @@ -2434,34 +2434,34 @@ VisualTest { } Frame { msec: 6752 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6768 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6784 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6800 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6816 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6832 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6848 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } Frame { msec: 6864 - hash: "6557c4982e2c23d0ef5ec8a594df7277" + hash: "ed1520bf20159e60c6a75bbf07f3a6ee" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png index 914f1b1..c9e17f9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png index dd2b946..32a5600 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png index 629b84b..a63fd07 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml index 211ca68..c752f0f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml @@ -274,15 +274,15 @@ VisualTest { } Frame { msec: 864 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Frame { msec: 880 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Frame { msec: 896 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Key { type: 7 @@ -294,19 +294,19 @@ VisualTest { } Frame { msec: 912 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Frame { msec: 928 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Frame { msec: 944 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Frame { msec: 960 - hash: "a1c7aeece2891f3ca0103761ffa7f424" + hash: "24a0a2f12031b23a98d65178f0d6d58d" } Frame { msec: 976 @@ -322,19 +322,19 @@ VisualTest { } Frame { msec: 992 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1008 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1024 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1040 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Key { type: 7 @@ -346,51 +346,51 @@ VisualTest { } Frame { msec: 1056 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1072 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1088 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1104 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1120 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1136 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1152 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1168 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1184 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1200 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1216 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Frame { msec: 1232 - hash: "7a4ebe5f0875ded07b44c9ff2d6a4d75" + hash: "7dde2dd8afe7283dd0601b12831f8946" } Key { type: 6 @@ -402,15 +402,15 @@ VisualTest { } Frame { msec: 1248 - hash: "b7cdd294253e065c06fabc60895a29c2" + hash: "e098aa83b3287f67aba57e134e871d62" } Frame { msec: 1264 - hash: "b7cdd294253e065c06fabc60895a29c2" + hash: "e098aa83b3287f67aba57e134e871d62" } Frame { msec: 1280 - hash: "b7cdd294253e065c06fabc60895a29c2" + hash: "e098aa83b3287f67aba57e134e871d62" } Key { type: 7 @@ -422,15 +422,15 @@ VisualTest { } Frame { msec: 1296 - hash: "b7cdd294253e065c06fabc60895a29c2" + hash: "e098aa83b3287f67aba57e134e871d62" } Frame { msec: 1312 - hash: "b7cdd294253e065c06fabc60895a29c2" + hash: "e098aa83b3287f67aba57e134e871d62" } Frame { msec: 1328 - hash: "b7cdd294253e065c06fabc60895a29c2" + hash: "e098aa83b3287f67aba57e134e871d62" } Key { type: 6 @@ -442,39 +442,39 @@ VisualTest { } Frame { msec: 1344 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1360 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1376 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1392 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1408 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1424 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1440 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1456 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Frame { msec: 1472 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Key { type: 7 @@ -486,7 +486,7 @@ VisualTest { } Frame { msec: 1488 - hash: "d8669a3194f485aaef3a1421f7fd50f6" + hash: "3f0a9e0cfd6937c943273bc1d39ce336" } Key { type: 6 @@ -498,19 +498,19 @@ VisualTest { } Frame { msec: 1504 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1520 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1536 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1552 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Key { type: 7 @@ -522,27 +522,27 @@ VisualTest { } Frame { msec: 1568 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1584 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1600 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1616 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1632 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Frame { msec: 1648 - hash: "b53fd36f58dc692856e6a789371aaf33" + hash: "b78259d22dd86c1dd7ba722795e7e155" } Key { type: 6 @@ -554,23 +554,23 @@ VisualTest { } Frame { msec: 1664 - hash: "98de66666f6ea1a87bd493db3f67a7c6" + hash: "1402f8182c74124a1fb34ecd78fa4819" } Frame { msec: 1680 - hash: "98de66666f6ea1a87bd493db3f67a7c6" + hash: "1402f8182c74124a1fb34ecd78fa4819" } Frame { msec: 1696 - hash: "98de66666f6ea1a87bd493db3f67a7c6" + hash: "1402f8182c74124a1fb34ecd78fa4819" } Frame { msec: 1712 - hash: "98de66666f6ea1a87bd493db3f67a7c6" + hash: "1402f8182c74124a1fb34ecd78fa4819" } Frame { msec: 1728 - hash: "98de66666f6ea1a87bd493db3f67a7c6" + hash: "1402f8182c74124a1fb34ecd78fa4819" } Key { type: 6 @@ -582,7 +582,7 @@ VisualTest { } Frame { msec: 1744 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Key { type: 7 @@ -594,15 +594,15 @@ VisualTest { } Frame { msec: 1760 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Frame { msec: 1776 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Frame { msec: 1792 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Key { type: 7 @@ -614,19 +614,19 @@ VisualTest { } Frame { msec: 1808 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Frame { msec: 1824 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Frame { msec: 1840 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Frame { msec: 1856 - hash: "696807419ef2b228dfb9d85dd79dd293" + hash: "93d5b02d77829aef8f8afa0f5a9e93d1" } Key { type: 6 @@ -638,19 +638,19 @@ VisualTest { } Frame { msec: 1872 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 1888 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 1904 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 1920 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Key { type: 7 @@ -666,23 +666,23 @@ VisualTest { } Frame { msec: 1952 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 1968 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 1984 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 2000 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Frame { msec: 2016 - hash: "4c0a528609872cf65180d336bbca4231" + hash: "1f3b2da0ad387187f202857ed9bb4934" } Key { type: 6 @@ -694,11 +694,11 @@ VisualTest { } Frame { msec: 2032 - hash: "03b670f413abfa1811d4020de969b2ea" + hash: "f2fd02bca5f5bf26013957e11d3f11ce" } Frame { msec: 2048 - hash: "03b670f413abfa1811d4020de969b2ea" + hash: "f2fd02bca5f5bf26013957e11d3f11ce" } Key { type: 7 @@ -710,11 +710,11 @@ VisualTest { } Frame { msec: 2064 - hash: "03b670f413abfa1811d4020de969b2ea" + hash: "f2fd02bca5f5bf26013957e11d3f11ce" } Frame { msec: 2080 - hash: "03b670f413abfa1811d4020de969b2ea" + hash: "f2fd02bca5f5bf26013957e11d3f11ce" } Key { type: 6 @@ -726,19 +726,19 @@ VisualTest { } Frame { msec: 2096 - hash: "6d478c62fa5bb37f0178e94914473174" + hash: "550f7f60df621c951ce7d5271aabc41f" } Frame { msec: 2112 - hash: "6d478c62fa5bb37f0178e94914473174" + hash: "550f7f60df621c951ce7d5271aabc41f" } Frame { msec: 2128 - hash: "6d478c62fa5bb37f0178e94914473174" + hash: "550f7f60df621c951ce7d5271aabc41f" } Frame { msec: 2144 - hash: "6d478c62fa5bb37f0178e94914473174" + hash: "550f7f60df621c951ce7d5271aabc41f" } Key { type: 6 @@ -758,19 +758,19 @@ VisualTest { } Frame { msec: 2160 - hash: "2f9803e906ce38a6ade3874bbeb27216" + hash: "d2aca851dde9f96747d3f54fb831144a" } Frame { msec: 2176 - hash: "2f9803e906ce38a6ade3874bbeb27216" + hash: "d2aca851dde9f96747d3f54fb831144a" } Frame { msec: 2192 - hash: "2f9803e906ce38a6ade3874bbeb27216" + hash: "d2aca851dde9f96747d3f54fb831144a" } Frame { msec: 2208 - hash: "2f9803e906ce38a6ade3874bbeb27216" + hash: "d2aca851dde9f96747d3f54fb831144a" } Key { type: 6 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2224 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Key { type: 7 @@ -794,23 +794,23 @@ VisualTest { } Frame { msec: 2240 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Frame { msec: 2256 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Frame { msec: 2272 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Frame { msec: 2288 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Frame { msec: 2304 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Key { type: 7 @@ -822,11 +822,11 @@ VisualTest { } Frame { msec: 2320 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Frame { msec: 2336 - hash: "d93582b0c7de46d5ff1c9959c158bfe7" + hash: "9ed75a4dc5b88fe1c1531833db1dd364" } Key { type: 6 @@ -838,27 +838,27 @@ VisualTest { } Frame { msec: 2352 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2368 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2384 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2400 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2416 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2432 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Key { type: 7 @@ -870,19 +870,19 @@ VisualTest { } Frame { msec: 2448 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2464 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2480 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Frame { msec: 2496 - hash: "8accfa30ddc59803d8f9d2f60dd6a891" + hash: "39079b642f00ea767114d5a831be939a" } Key { type: 6 @@ -894,15 +894,15 @@ VisualTest { } Frame { msec: 2512 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2528 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2544 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Key { type: 7 @@ -914,87 +914,87 @@ VisualTest { } Frame { msec: 2560 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2576 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2592 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2608 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2624 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2640 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2656 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2672 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2688 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2704 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2720 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2736 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2752 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2768 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2784 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2800 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2816 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2832 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2848 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2864 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2880 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2896 @@ -1002,42 +1002,42 @@ VisualTest { } Frame { msec: 2912 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2928 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2944 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2960 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2976 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 2992 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 3008 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 3024 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 3040 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } Frame { msec: 3056 - hash: "a444ce402f5dc0d892f66a88b8252301" + hash: "92035cf4d7df9e637567c7834f23b030" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png index a12db0a..4c04a1b 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml index acc646c..74ee95f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml @@ -10,98 +10,98 @@ VisualTest { } Frame { msec: 32 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 48 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 64 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 80 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 96 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 112 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 128 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 144 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 160 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 176 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 192 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 208 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 224 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 240 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 256 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 272 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 288 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 304 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 320 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 336 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 352 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 368 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 384 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } Frame { msec: 400 - hash: "fe5a0e7ac7ea0796d8cf3e49b513669d" + hash: "93758371bdc69b81077989e911f62fb0" } } diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index ef0d4dc..fe23e09 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -104,13 +104,8 @@ void tst_qmlvisual::visual_data() QStringList files; files << findQmlFiles(QDir(QT_TEST_SOURCE_DIR)); if (qgetenv("QMLVISUAL_ALL") != "1") { -#if defined(Q_WS_X11) - //Text on X11 varies per version - and the CI system is currently using something outdated. - foreach(const QString &str, files.filter(QRegExp(".*text.*"))) - files.removeAll(str); -#endif #if defined(Q_WS_MAC) - //Text on Mac also varies per version. Only check the text on 10.6 + //Text on Mac varies per version. Only check the text on 10.6 if(QSysInfo::MacintoshVersion != QSysInfo::MV_10_6) foreach(const QString &str, files.filter(QRegExp(".*text.*"))) files.removeAll(str); -- cgit v0.12 From 89f4a877c401e1ab18d3ed520d17440b3e9078e7 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 2 Dec 2010 14:20:50 +1000 Subject: Mention that image providers should be added before loading QML files --- src/declarative/qml/qdeclarativeengine.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 7ac3a68..a8404f0 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -678,6 +678,9 @@ QNetworkAccessManager *QDeclarativeEngine::networkAccessManager() const requests. See the QDeclarativeImageProvider documentation for details on implementing and using image providers. + All required image providers should be added to the engine before any + QML sources files are loaded. + Note that images loaded from a QDeclarativeImageProvider are cached by QPixmapCache, similar to any image loaded by QML. -- cgit v0.12 From fe63d0ee5671ec4f0a1926ad8875b9f11789b105 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Fri, 3 Dec 2010 10:50:43 +1000 Subject: Add 'Writing New Components' docs, and document the connect() function. The 'Writing QML Components' is mainly a restructuring of the 'Extending types from QML' page. It also documents the signal connect() function that was previously undocumented. Task-number: QTBUG-15718, QTBUG-15138 --- doc/src/declarative/basictypes.qdoc | 4 +- doc/src/declarative/declarativeui.qdoc | 4 +- doc/src/declarative/dynamicobjects.qdoc | 3 + doc/src/declarative/extending-tutorial.qdoc | 4 +- doc/src/declarative/extending.qdoc | 617 +++++++++++---------- doc/src/declarative/javascriptblocks.qdoc | 19 + doc/src/declarative/pics/qml-extending-types.png | Bin 0 -> 738 bytes doc/src/declarative/qtbinding.qdoc | 2 +- doc/src/declarative/tutorial.qdoc | 4 +- doc/src/examples/qml-examples.qdoc | 3 +- .../integrating-javascript/connectjs.qml | 57 ++ .../declarative/integrating-javascript/script.js | 47 ++ .../qml-extending-types/components/Button.qml | 53 ++ .../qml-extending-types/components/application.qml | 49 ++ .../qml-extending-types/methods/app.qml | 55 ++ .../qml-extending-types/properties/ImageViewer.qml | 52 ++ .../properties/alias-override.qml | 48 ++ .../qml-extending-types/properties/alias.qml | 51 ++ .../properties/alias/ImageViewer.qml | 52 ++ .../properties/alias/application.qml | 54 ++ .../qml-extending-types/properties/application.qml | 50 ++ .../properties/property-signals.qml | 49 ++ .../qml-extending-types/signals/Button.qml | 55 ++ .../qml-extending-types/signals/basic.qml | 55 ++ .../qml-extending-types/signals/connectdynamic.qml | 61 ++ .../qml-extending-types/signals/connectslots.qml | 56 ++ .../qml-extending-types/signals/no-parameters.qml | 49 ++ .../qml-extending-types/signals/parameters.qml | 50 ++ .../modelviews/visualitemmodel/visualitemmodel.qml | 7 + .../ui-components/tabwidget/TabWidget.qml | 4 +- 30 files changed, 1296 insertions(+), 318 deletions(-) create mode 100644 doc/src/declarative/pics/qml-extending-types.png create mode 100644 doc/src/snippets/declarative/integrating-javascript/connectjs.qml create mode 100644 doc/src/snippets/declarative/integrating-javascript/script.js create mode 100644 doc/src/snippets/declarative/qml-extending-types/components/Button.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/components/application.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/methods/app.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/ImageViewer.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/alias-override.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/alias.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/alias/ImageViewer.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/alias/application.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/application.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/properties/property-signals.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/signals/Button.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/signals/basic.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/signals/connectdynamic.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/signals/connectslots.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/signals/no-parameters.qml create mode 100644 doc/src/snippets/declarative/qml-extending-types/signals/parameters.qml diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc index 71192bf..034b7d1 100644 --- a/doc/src/declarative/basictypes.qdoc +++ b/doc/src/declarative/basictypes.qdoc @@ -33,7 +33,7 @@ the \l {QML Elements}. Some of these types can also be used for defining - \c property values in QML. See \l{Extending types from QML} for the + \c property values in QML. See \l{Writing QML Components: Properties, Methods and Signals} for the list of types that can be used for \c property values. \annotatedlist qmlbasictypes @@ -380,7 +380,7 @@ \c child1, \c child2 and \c child3 will be added to the children list in the order in which they appear. - List \l {Adding new properties}{properties} can be created as a + List \l {Adding Properties}{properties} can be created as a \c variant type, or as a \c list type, where \c Type is the type of the object in the list: diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc index 01e1302..5d9eaaf 100644 --- a/doc/src/declarative/declarativeui.qdoc +++ b/doc/src/declarative/declarativeui.qdoc @@ -91,9 +91,10 @@ Module. \list \o \l{QML Documents} \o \l{Property Binding} +\o \l{Anchor-based Layout in QML} +\o \l{Writing QML Components: Properties, Methods and Signals} \o \l{QML Scope} \o \l{QML Modules} -\o \l{Anchor-based Layout in QML} \endlist \section1 User Interaction @@ -118,7 +119,6 @@ Module. \list \o \l{Qt Declarative UI Runtime} \o \l{Integrating JavaScript} -\o \l{Extending types from QML} \o \l{Dynamic Object Management in QML} \endlist diff --git a/doc/src/declarative/dynamicobjects.qdoc b/doc/src/declarative/dynamicobjects.qdoc index daf2ae1..fcc9fd4 100644 --- a/doc/src/declarative/dynamicobjects.qdoc +++ b/doc/src/declarative/dynamicobjects.qdoc @@ -102,6 +102,9 @@ Notice in both instances, \l {Component::createObject()}{createObject()} is call When using files with relative paths, the path should be relative to the file where \l {QML:Qt::createComponent()}{Qt.createComponent()} is executed. +To connect signals to (or receive signals from) dynamically created objects, use the signal +\c connect() method. See \l {Connecting signals to methods and other signals} for more information. + \section2 Creating an object from a string of QML diff --git a/doc/src/declarative/extending-tutorial.qdoc b/doc/src/declarative/extending-tutorial.qdoc index dff1d9c..c998c5c 100644 --- a/doc/src/declarative/extending-tutorial.qdoc +++ b/doc/src/declarative/extending-tutorial.qdoc @@ -285,8 +285,8 @@ int-type property to store an identifier for each chart: } \endcode -We can also use various other property types. QML has built-in support for the following -types listed in the \l{Extending Types from QML} document, including the following: +We can also use various other property types. QML has built-in support for the types +listed in the \l{Adding Properties} documentation, which includes the following: \list \o bool, unsigned int, int, float, double, qreal diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc index 740f7d1..fc5c586 100644 --- a/doc/src/declarative/extending.qdoc +++ b/doc/src/declarative/extending.qdoc @@ -82,8 +82,8 @@ Types can be registered by libraries, application code, or by plugins Once registered, all \l {Qt's Property System}{properties} of the supported types are available in QML. QML has intrinsic support for -properties of the types listed in the \l{Extending Types from QML} -document, including the following: +properties of the types listed in the \l{Adding Properties} +document, which includes the following: \list \o bool, unsigned int, int, float, double, qreal @@ -429,7 +429,7 @@ onChanged, regardless of the name used for the NOTIFY signal in C++. We recommend using Changed() for the NOTIFY signal in C++. -See also \l {Extending Types from QML}. +See also \l {Writing QML Components: Properties, Methods and Signals} \section1 Methods @@ -637,147 +637,177 @@ public: /*! \page qml-extending-types.html -\title Extending Types from QML +\title Writing QML Components: Properties, Methods and Signals -Many of the elements available for use in QML are implemented in -\l {Extending QML in C++}{C++}. These types are know as "core types". QML -allows programmers to build new, fully functional elements without using C++. -Existing core types can be extended, and new types defined entirely in the QML -language. +One of the key concepts in QML is the ability to define your own QML components that suit +the purposes of your application. The standard \l {QML Elements} provide the essential components +for creating a QML application; beyond these, you can write your own custom components that can +be created and reused, without the use of C++. -\tableofcontents +Components are the building blocks of a QML project. When writing a QML application, whether +large or small, it is best to separate QML code into smaller components that perform specific +sets of operations, instead of creating mammoth QML files with large, combined functionality +that is more difficult to manage and may contain duplicated code. + + +\section1 Defining New Components -\section1 Adding new properties +A component is a reusable type with a well-defined interface, built entirely in QML. +Any snippet of QML code can become a component, by placing the code in a file ".qml" where + is the new component name, beginning with an uppercase letter. These QML files automatically +become available as new QML element types to other QML components and applications in the same directory. -New properties can be added to an existing type using the \c property keyword. -These new properties are -available for use within QML, and also appear as regular Qt properties on the -C++ object, accessible through the regular property access mechanisms. +For example, one of the simplest and most common components you can build in QML is a +button-type component. Below, we implement this component as a \l Rectangle with a clickable +\l MouseArea, in a file named \c Button.qml: -Like all properties in QML, custom properties are typed. The type is used to -define the property's behavior, and also determines the C++ type of the created -Qt property. The following table shows the list of types available when -declaring a new property, and the corresponding C++ type. +\snippet doc/src/snippets/declarative/qml-extending-types/components/Button.qml 0 + +Now this component can be reused by another file within the same directory. Since the file is +named \c Button.qml, the component is referred to as \c Button: \table -\header \o QML Type Name \o C++ Type Name -\row \o int \o int -\row \o bool \o bool -\row \o double \o double -\row \o real \o double -\row \o string \o QString -\row \o url \o QUrl -\row \o color \o QColor -\row \o date \o QDateTime -\row \o variant \o QVariant +\row +\o \snippet doc/src/snippets/declarative/qml-extending-types/components/application.qml 0 +\o \image qml-extending-types.png \endtable -From QML you can also declare object and list properties using any element name -like this: +The root object in \c Button.qml defines the attributes that are available to users of the +\c Button component. In this case, the root object is a \l Rectangle, so any properties, methods +and signals of \l Rectangle are made available, allowing \c application.qml to +customize the \c width, \c height, \c radius and \c color properties of \c Button objects. -\code - property QtObject objectProperty - property Item itemProperty - property MyCustomType customProperty - property list listOfItemsProperty -\endcode -Custom types must be registered with qmlRegisterType() to be usable as a property -type. Also note that list properties cannot be modified like ordinary JavaScript -arrays; see the \l {list}{list type documentation} for details. +If \c Button.qml was not in the same directory, \c application.qml would need to load it as a +\l {Modules}{module} from a specific filesystem path or \l{QDeclarativeExtensionPlugin}{plugin}. +Also, note the letter case of the component file name is significant on some (notably UNIX) +filesystems. It is recommended the file name case matches the case of the QML component name +exactly - for example, \c Box.qml and not \c BoX.qml - regardless of the platform to which the +QML component will be deployed. + +To write a useful component, it is generally necessary to provide it with custom attributes that store and +communicate specific data. This is achieved by adding the following attributes to your components: + +\list +\o \bold Properties that can be accessed externally to modify an object (for example, \l Item has + \l {Item::}{width} and \l {Item::}{height} properties) and used in \l {Property Binding} +\o \bold Methods of JavaScript code can be invoked internally or externally (for example, + \l Animation has a \l {Animation::}{start()} method) +\o \bold Signals to notify other objects when an event has occurred (for example, MouseArea has a + \c clicked signal) +\endlist + +The following sections show how these attributes can be added to QML components. -QML supports two methods for adding a new property to a type: a new property -definition, and a property alias. These are shown below. -\section2 Property definitions +\section1 Adding Properties -Property definitions add a new property to an existing type. The storage of the -property is managed by QML. The defined property may be read, written and bound -to and from. +A property is a value of a QML component that can be read and modified by other objects. For +example, a \l Rectangle component has \l {Item::}{width}, \l {Item::}{height} and \l +{Rectangle::}{color} properties. Significantly, properties be used with \l {Property Binding}, where +a property value is automatically updated using the value of another property. The syntax for defining a new property is: + \code - [default] property [: defaultValue] +[default] property [: defaultValue] \endcode -This declaration may appear anywhere within a type body, but it is customary to -include it at the top. Attempting to declare two properties with the same name -in the same type block is an error. However, a new property may reuse the name -of an existing property on the type. This should be done with caution, as the -existing property will be hidden, and become inaccessible. +A \c property declaration can appear anywhere within a QML component definition, but it is customary +to place it at the top. A component cannot declare more than one property with the same name. (It is +possible to have a property name that is the same as an existing property in a type, but this is not +recommended as the existing property becomes hidden and inaccessible.) -The must be one of the QML type names shown in the above table. -Additionally, an optional default value of the property can be provided. The -default value is a convenient shortcut, but is behaviorally identical to doing -it in two steps, like this: +Below is an example. The \c ImageViewer component has defined a \c string type property named +\c currentImage, and its initial value is "default-image.png". This property is used to set the image +displayed in the child \l Image object. Another file, \c application.qml, can create +an \c ImageViewer object and read or modify the \c currentImage value: -\code - // Use default value - property int myProperty: 10 +\table +\row +\o \snippet doc/src/snippets/declarative/qml-extending-types/properties/ImageViewer.qml 0 +\o \snippet doc/src/snippets/declarative/qml-extending-types/properties/application.qml 0 +\endtable - // Longer, but behaviorally identical - property int myProperty - myProperty: 10 -\endcode +It is optional for a property to have a default value. The default value is a convenient shortcut, and is +behaviorally identical to doing it in two steps, like this: + +\qml +// Use default value +property int myProperty: 10 + +// Longer, but behaviorally identical +property int myProperty +myProperty: 10 +\endqml -If a default value is not supplied or set later in the file, each type has a -default value for when none is explicitly set. Below are the default values -of some of the types. For the remaining types the default values are undefined. + +\section2 Supported property types + +All QML properties are typed. The examples above show properties with \c int and \c string types; +notice that the type of the property must be declared. The type is used to determine the property +behavior, and how the property is defined in C++. + +A number of property types are supported by default. These are listed in the table below, +with their default values and the corresponding C++ type: \table -\header \o QML Type \o Default Value -\row \o bool \o false -\row \o int \o 0 -\row \o double, real \o 0.0 -\row \o string, url \o "" (an empty string) -\row \o color \o #000000 (black) +\header \o QML Type Name \o Default value \o C++ Type Name +\row \o int \o 0 \o int +\row \o bool \o \c false \o bool +\row \o double \o 0.0 \o double +\row \o real \o 0.0 \o double +\row \o string \o "" (empty string) \o QString +\row \o url \o "" (empty url) \o QUrl +\row \o color \o #000000 (black) \o QColor +\row \o date \o \c undefined \o QDateTime +\row \o variant \o \c undefined \o QVariant \endtable -The following example shows how to declare a new "innerColor" property that -controls the color of the inner rectangle. +QML object types can also be used as property types. This includes +\l {Defining new QML elements}{custom QML types} implemented in C++. Such properties are +defined like this: -\code - Rectangle { - property color innerColor: "black" - - color: "red"; width: 100; height: 100 - Rectangle { - anchors.centerIn: parent - width: parent.width - 10 - height: parent.height - 10 - color: innerColor - } - } -\endcode +\qml +property Item itemProperty +property QtObject objectProperty +property MyCustomType customProperty +\endqml +Such object-type properties default to an \c undefined value. -\section3 Property signal handlers +\l{list}{List properties} are created with the \c list syntax, and default to an empty +list: -Adding a property to an item automatically adds a \e{value-changed} -signal handler to the item. The signal hander is named -\c{onChanged}, with the first letter of the property -name being upper case. +\qml +property list listOfItems +\endqml -Signal handlers can have arbitrary JavaScript code assigned. The following -example shows how to output to a text console a new value of property -\c{innerColor} whenever the value of this property changes. +Note that list properties cannot be modified like ordinary JavaScript +arrays. See the \l {list}{list type documentation} for details. -\code - Rectangle { - id: rect - property color innerColor: "black" +For details about accessing and manipulating QML properties from C++, see \l {Using QML with C++}. - onInnerColorChanged: { console.log(rect.innerColor); } - } -\endcode +\section2 Property change signals + +Adding a \c property to an item automatically adds a \e {value changed} +signal handler to the item. To connect to this signal, use a \l {Signal Handlers}{signal handler} +named with the \c onChanged syntax, using upper case for the first letter of the +property name. + +For example, the following \c onMyNumberChanged signal handler is automatically called whenever the +\c myNumber property changes: + +\snippet doc/src/snippets/declarative/qml-extending-types/properties/property-signals.qml 0 -\section3 Setting default properties + +\section2 Default properties The optional \c default attribute for a property marks it as the \e {default property} for a type. This allows other items to specify the default property's value -as child elements. For example, the \l Item element's default property is its -\l{Item::children}{children} property. This allows the children of an \l Item +as child elements. For example, the \l Item element's default property is its +\l{Item::children}{children} property. This allows the children of an \l Item to be set like this: \qml @@ -787,7 +817,7 @@ Item { } \endqml -If the \l{Item::children}{children} property was not the default property for +If the \l{Item::children}{children} property was not the default property for \l Item, its value would have to be set like this instead: \qml @@ -804,21 +834,20 @@ demonstration of using default properties. Specifying a default property overrides any existing default property (for example, any default property inherited from a parent item). Using the -default attribute twice in the same type block is an error. +\c default attribute twice in the same type block is an error. -\target qml-property-aliases \section2 Property aliases Property aliases are a more advanced form of property declaration. Unlike a -property definition, that allocates a new, unique storage space for the +property definition, which allocates a new, unique storage space for the property, a property alias connects the newly declared property (called the -aliasing property) to an existing property (the aliased property). Read +aliasing property) as a direct reference to an existing property (the aliased property). Read operations on the aliasing property act as read operations on the aliased property, and write operations on the aliasing property as write operations on the aliased property. -A property alias declaration looks a lot like a property definition: +A property alias declaration looks a lot like an ordinary property definition: \code [default] property alias : \endcode @@ -829,7 +858,7 @@ value, a property alias includes a compulsory alias reference. The alias reference is used to locate the aliased property. While similar to a property binding, the alias reference syntax is highly restricted. -An alias reference takes one of the following forms +An alias reference takes one of the following forms: \code . @@ -838,61 +867,58 @@ An alias reference takes one of the following forms where must refer to an object id within the same component as the type declaring the alias, and, optionally, refers to a property on that object. -Here is the property definition example rewritten to use property aliases. -\code -Rectangle { - property alias innerColor: innerRect.color - - color: "red"; width: 100; height: 100 - Rectangle { - id: innerRect - anchors.centerIn: parent - width: parent.width - 10 - height: parent.height - 10 - color: "black" - } -} -\endcode +For example, below is a \c Button.qml component with a \c buttonText aliased property which is +connected to the child Text object's \c text property: + +\snippet doc/src/snippets/declarative/qml-extending-types/properties/alias.qml 0 + +The following code would create a \c Button with a defined text string for the +child \l Text object: -Aliases are most useful when \l {Defining new Components}. Consequently -they have several apparent limitations that only make sense in this context. +\qml +Button { buttonText: "This is a button" } +\endqml + +Here, modifying \c buttonText directly modifies the \c textItem.text value; it does not +change some other value that then updates \c textItem.text. + +In this case, the use of aliased properties is essential. If \c buttonText was not an alias, +changing its value would not actually change the displayed text at all, as +\l {Property Binding}{property bindings} are not bi-directional: the \c buttonText value would +change when \c textItem.text changes, but not the other way around. + +Aliased properties are also useful for allowing external objects to directly modify and +access child objects in a component. For example, here is a modified version of the \c ImageViewer +component shown \l {Adding Properties}{earlier} on this page. The \c currentImage property has +been changed to an alias to the child \l Image object: + +\table +\row +\o \snippet doc/src/snippets/declarative/qml-extending-types/properties/alias/ImageViewer.qml 0 +\o \snippet doc/src/snippets/declarative/qml-extending-types/properties/alias/application.qml 0 +\endtable + +Instead of being limited to setting the \l Image source, \c application.qml can now directly +access and modify the child \l Image object and its properties. + +Obviously, exposing child objects in this manner should be done with care, as it allows external +objects to modify them freely. However, this use of aliased properties can be quite useful in +particular situations, such as for the \l {declarative/ui-components/tabwidget}{TabWidget} +example, where new tab items are actually parented to a child object that displays the current tab. + + +\section3 Considerations for property aliases Aliases are only activated once the component specifying them is completed. The most obvious consequence of this is that the component itself cannot generally -use the aliased property directly. For example, this will not work: +use the aliased property directly during creation. For example, this will not work: \code // Does NOT work - property alias innerColor: innerRect.color - innerColor: "black" + property alias buttonText: textItem.text + buttonText: "Some text" // buttonText is not yet defined when this value is set \endcode -This behavior is required to allow type developers to redefine the behavior -of existing property names while continuing to use the existing behavior within -the type they are building, something that is not possible with property -definitions. In the example used so far, this could allows the developer to fix -the external rectangle's color as "red" and redefine the "color" property to -refer to the inner rectangle, like this: - -\code -Rectangle { - property alias color: innerRect.color - - color: "red"; width: 100; height: 100 - Rectangle { - id: innerRect - anchors.centerIn: parent - width: parent.width - 10 - height: parent.height - 10 - color: "black" - } -} -\endcode - -Users of this type would not be able to affect the color of the red rectangle, -but would find using the "color" property, rather than the strange new -"innerColor" property, much more familiar. - A second, much less significant, consequence of the delayed activation of aliases is that an alias reference cannot refer to another aliasing property declared within the same component. This will not work: @@ -900,198 +926,177 @@ declared within the same component. This will not work: \code // Does NOT work id: root - property alias innerColor: innerRect.color - property alias innerColor2: root.innerColor + property alias buttonText: textItem.text + property alias buttonText2: root.buttonText \endcode -From outside the component, aliasing properties appear as regular Qt properties -and consequently can be used in alias references. +At the time the component is created, the \c buttonText value has not yet been assigned, +so \c root.buttonText would refer to an undefined value. (From outside the component, +however, aliasing properties appear as regular Qt properties and consequently can be +used in alias references.) -\section1 Adding new signals +It is possible for an aliased property to have the same name as an existing property. For example, +the following component has a \c color alias property, named the same as the built-in +\l {Rectangle::color} property: -New signals can be added to an existing type. These new signals are available -for use within QML, and also appear as regular Qt signals on the C++ object that -can be used in Qt signal/slot connections. +\snippet doc/src/snippets/declarative/qml-extending-types/properties/alias-override.qml 0 + +Any objects that use this component and refer to its \c color property will be +referring to the alias rather than the ordinary \l {Rectangle::color} property. Internally, +however, the rectangle can correctly set this property to "red" and refer to the actual defined +property rather than the alias. + + +\section1 Adding Methods + +A QML component can define methods of JavaScript code. These methods can be invoked +either internally or by other objects. + +The syntax for defining a method is: -The syntax for defining a new signal is: \code -signal [([ [, ...]])] +function ([[, ...]]) { } \endcode This declaration may appear anywhere within a type body, but it is customary to -include it at the top. Attempting to declare two signals or methods with the -same name in the same type block is an error. However, a new signal may reuse -the name of an existing signal on the type. This should be done with caution, -as the existing signal may be hidden and become inaccessible. +include it at the top. Attempting to declare two methods or signals with the +same name in the same type block is an error. However, a new method may reuse +the name of an existing method on the type. (This should be done with caution, +as the existing method may be hidden and become inaccessible.) -The options for parameter types are the same as for property types (see -\l {Adding new properties}. If this signal has no parameters, the parameter -list may be omitted entirely. +Unlike \l{Adding Signals}{signals}, method parameter types do not have to be declared as they +default to the \c variant type. The body of the method is written in JavaScript and may access +the parameters by name. -Here are three examples of signal declarations: -\code - Item { - signal clicked - signal hovered() - signal performAction(string action, variant actionArgument) - } -\endcode +Here is an example of a component with a \c say() method that accepts a single \c text argument: -Adding a signal to an item automatically adds a signal handler to it. -The signal hander is named on, with the first letter of the -signal name being upper cased. The above example item would now have the -following signal handlers: +\snippet doc/src/snippets/declarative/qml-extending-types/methods/app.qml 0 -\list - \o onClicked - \o onHovered - \o onPerformAction -\endlist +A method can be connected to a signal so that it is automatically invoked whenever the signal +is emitted. See \l {Connecting signals to methods and other signals} below. + +Also see \l {Integrating JavaScript} for more information on using JavaScript with QML. -\section1 Adding new methods -New methods can be added to an existing type. These new methods are available -for use within QML, and also appear as regular Qt slots on the C++ object that -can be used in Qt signal/slot connections. +\section1 Adding Signals + +Signals provide a way to notify other objects when an event has occurred. For example, the MouseArea +\c clicked signal notifies other objects that the mouse has been clicked within the area. + +The syntax for defining a new signal is: \code -function ([[, ...]]) { } +signal [([ [, ...]])] \endcode This declaration may appear anywhere within a type body, but it is customary to -include it at the top. Attempting to declare two methods or signals with the -same name in the same type block is an error. However, a new method may reuse -the name of an existing method on the type. This should be done with caution, -as the existing method may be hidden and become inaccessible. +include it at the top. Attempting to declare two signals or methods with the +same name in the same type block is an error. However, a new signal may reuse +the name of an existing signal on the type. (This should be done with caution, +as the existing signal may be hidden and become inaccessible.) -Methods parameters are not typed. In C++ these parameters are of type QVariant. -The body of the method is written in JavaScript and may access the parameters by -name. +Here are three examples of signal declarations: -This example adds a new method that behaves like a child: \code Item { - function say(text) { - console.log("You said " + text); - } + signal clicked + signal hovered() + signal performAction(string action, variant actionArgument) } \endcode -This may be connected to via QObject::connect() or called directly from C++ using -QMetaObject::invokeMethod(): +If the signal has no parameters, the "()" brackets are optional. If parameters are used, the +parameter types must be declared, as for the \c string and \c variant arguments for the \c +performAction signal above; the allowed parameter types are the same as those listed in the \l +{Adding Properties} section on this page. -\code - QDeclarativeEngine engine; - QDeclarativeContext *context = new QDeclarativeContext(engine.rootContext()); - QDeclarativeComponent component(&engine, QUrl::fromLocalFile("main.qml")); - QObject *object = component.create(context); - QVariant str("Hello"); - QMetaObject::invokeMethod(object, "say", Q_ARG(QVariant, str)); -\endcode - -Return values of type QVariant are also supported via Q_RETURN_ARG. - -\section1 Defining new Components -\target components +Adding a signal to an item automatically adds a \l {Signal Handlers}{signal handler} as well. +The signal hander is named \c on, with the first letter of the signal being upper +cased. The above example item would now have the following signal handlers: -A component is a reusable type with a well-defined interface built entirely in -QML. Components appear as regular QML elements, and can be used interchangeably -with core types. Components allow developers to create new types to be reused -in other projects without the use of C++. Components can also help to reduce -duplication inside one project by limiting the need for large numbers of -copy-and-pasted blocks. +\list +\o onClicked +\o onHovered +\o onPerformAction +\endlist -Any snippet of QML code can become a component, just by placing it in the file ".qml" -where is the new element name, and begins with an uppercase letter. Note that -the case of all characters in the are significant on some filesystems, notably -UNIX filesystems. It is recommended that the case of the filename matches the case of -the component name in QML exactly, regardless of the platform the QML will be deployed to. +To emit a signal, simply invoke it in the same way as a method. Below left, when the \l MouseArea is +clicked, it emits the parent \c buttonClicked signal by invoking \c rect.buttonClicked(). The +signal is received by \c application.qml through an \c onButtonClicked signal handler: -These QML files automatically become available as new QML element types -to other QML components and applications in the same directory. +\table +\row +\o \snippet doc/src/snippets/declarative/qml-extending-types/signals/basic.qml 0 +\o \snippet doc/src/snippets/declarative/qml-extending-types/signals/no-parameters.qml 0 +\endtable -For example, here we show how a component named "Box" is defined and used -multiple times by an application. +If the signal has parameters, they are accessible by parameter name in the signal handler. +In the example below, \c buttonClicked is emitted with \c xPos and \c yPos parameters instead: \table \row -\o application.qml -\code -Rectangle { - width: 100; height: 400; - Box { x: 0; y: 0 } - Box { x: 0; y: 150 } - Box { x: 0; y: 300 } -} -\endcode -\o Box.qml -\code -Rectangle { - width: 100; height: 100; - color: "blue" -} -\endcode +\o \snippet doc/src/snippets/declarative/qml-extending-types/signals/Button.qml 0 +\o \snippet doc/src/snippets/declarative/qml-extending-types/signals/parameters.qml 0 \endtable -Components may be collected into \l {Modules} that gives the -developer more freedom than just putting files in the same directory. -\section2 Building reusable components +\section2 Connecting signals to methods and other signals -A component type built to be reused by others must have a well defined -interface. In QML, an interface consists of a defined collection of -properties, signals and methods. Users of a component have access to all the -properties, signals and methods defined on the root element of the component. +Signal objects have a \c connect() method that can be used to a connect a signal to a method or +another signal. When a signal is connected to a method, the method is automatically invoked +whenever the signal is emitted. (In Qt terminology, the method is a \e slot that is connected +to the \e signal; all methods defined in QML are created as Qt slots.) This enables a signal +to be received by a method instead of a \l {Signal Handlers}{signal handler}. -In the component example above, the root element of the "Box" component is a -Rect. As the Rect type has a "color" property, this property is accessible to -users of the Box component. For example, the application.qml can be modified -to show three different colored boxes like this: -\code -Rectangle { - width: 100; height: 400; - Box { x: 0; y: 0; color: "red"; } - Box { x: 0; y: 150; color: "yellow"; } - Box { x: 0; y: 300; color: "green"; } -} -\endcode +For example, the \c application.qml above could be rewritten as: -As expected, adding additional properties to the root element of Box, makes them -available externally. Here we add a "text" property: +\snippet doc/src/snippets/declarative/qml-extending-types/signals/connectslots.qml 0 -\table -\row -\o application.qml -\code -Rectangle { - width: 100; height: 400; - Box { x: 0; y: 0; color: "red"; text: "stop" } - Box { x: 0; y: 150; color: "yellow"; text: "slow" } - Box { x: 0; y: 300; color: "green"; text: "go" } -} -\endcode -\o Box.qml -\code -Rectangle { - property alias text: myText.text - width: 100; height: 100; - color: "blue" - Text { - id: myText - anchors.centerIn: parent +The \c myMethod() method will be called whenever the \c buttonClicked signal is received. + +In many cases it is sufficient to receive signals through signal handlers rather than using +the \c connect() function; the above example does not provide any improvements over using a +simple \c onButtonClicked handler. However, if you are \l{Dynamic Object Management in QML}{creating objects dynamically}, +or \l {Integrating JavaScript}{integrating JavaScript code}, then you will find the +\c connect() method useful. For example, the component below creates three \c Button +objects dynamically, and connects the \c buttonClicked signal of each object to the +\c myMethod() function: + +\snippet doc/src/snippets/declarative/qml-extending-types/signals/connectdynamic.qml 0 + +In the same way, you could connect a signal to methods defined in a dynamically +created object, or \l {Receiving QML Signals in JavaScript}{connect a signal to a JavaScript method}. + +There is also a corresponding \c disconnect() method for removing connected signals. The following +code removes the connection created in \c application.qml above: + +\qml +// application.qml +Item { + ... + + function removeSignal() { + button.clicked.disconnect(item.myMethod) } } -\endcode -\endtable +\endqml + + +\section3 Forwarding signals + +The \c connect() method can also connect a signal to other signals. This has the effect +of "forwarding" a signal: it is automatically emitted whenever the relevant signal is emitted. For +example, the MouseArea \c onClicked handler in \c Button.qml above could have been replaced with +a call to \c connect(): + +\qml +MouseArea { + anchors.fill: parent + Component.onCompleted: clicked.connect(item.buttonClicked) +} +\endqml -Methods and signals may be added in the same way. +Whenever the \l MouseArea \c clicked signal is emitted, the \c rect.buttonClicked signal will +automatically be emitted as well. -As all external methods, signals and properties are accessible to external -users, developers should ensure that setting these properties does not have -any undesirable side-effects. For most resilience, root level properties should -only be used for literal default values. When a root level property must be -used inside the component - such as the children property - property aliases -can be used to redirect this property to a "safe" location for external users. -Try to think of the root level properties as being "owned" by the components -user, rather than the component itself. */ diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc index b6fad5b..16d0633 100644 --- a/doc/src/declarative/javascriptblocks.qdoc +++ b/doc/src/declarative/javascriptblocks.qdoc @@ -207,6 +207,25 @@ changes. See \l {Property Binding} for more information. +\section1 Receiving QML Signals in JavaScript + +To receive a QML signal, use the signal's \c connect() method to connect it to a JavaScript +function. + +For example, the following code connects the MouseArea \c clicked signal to the \c jsFunction() +in \c script.js: + +\table +\row +\o \snippet doc/src/snippets/declarative/integrating-javascript/connectjs.qml 0 +\o \snippet doc/src/snippets/declarative/integrating-javascript/script.js 0 +\endtable + +The \c jsFunction() will now be called whenever MouseArea's \c clicked signal is emitted. + +See \l {Connecting signals to methods and other signals} for more information. + + \section1 QML JavaScript Restrictions QML executes standard JavaScript code, with the following restrictions: diff --git a/doc/src/declarative/pics/qml-extending-types.png b/doc/src/declarative/pics/qml-extending-types.png new file mode 100644 index 0000000..6990d7c Binary files /dev/null and b/doc/src/declarative/pics/qml-extending-types.png differ diff --git a/doc/src/declarative/qtbinding.qdoc b/doc/src/declarative/qtbinding.qdoc index c3ce6d0..71f41bc 100644 --- a/doc/src/declarative/qtbinding.qdoc +++ b/doc/src/declarative/qtbinding.qdoc @@ -230,7 +230,7 @@ Also see the QDeclarativeContext documentation for more information. \section2 Defining new QML elements -While new QML elements can be \l {Defining new Components}{defined in QML}, they can also be +While new QML elements can be \l {Defining New Components}{defined in QML}, they can also be defined by C++ classes; in fact, many of the core \l {QML Elements} are implemented through C++ classes. When you create a QML object using one of these elements, you are simply creating an instance of a QObject-based C++ class and setting its properties. diff --git a/doc/src/declarative/tutorial.qdoc b/doc/src/declarative/tutorial.qdoc index 8467478..d8139b4 100644 --- a/doc/src/declarative/tutorial.qdoc +++ b/doc/src/declarative/tutorial.qdoc @@ -124,7 +124,7 @@ Our color picker is made of six cells with different colors. To avoid writing the same code multiple times for each cell, we create a new \c Cell component. A component provides a way of defining a new type that we can re-use in other QML files. A QML component is like a black-box and interacts with the outside world through properties, signals and functions and is generally -defined in its own QML file. (For more details, see \l {Defining new Components}). +defined in its own QML file. (For more details, see \l {Defining New Components}). The component's filename must always start with a capital letter. Here is the QML code for \c Cell.qml: @@ -144,7 +144,7 @@ An \l Item is the most basic visual element in QML and is often used as a contai We declare a \c cellColor property. This property is accessible from \e outside our component, this allows us to instantiate the cells with different colors. -This property is just an alias to an existing property - the color of the rectangle that compose the cell (see \l{Adding new properties}). +This property is just an alias to an existing property - the color of the rectangle that compose the cell (see \l{Adding Properties}). \snippet examples/declarative/tutorials/helloworld/Cell.qml 5 diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc index ca24c66..0834527 100644 --- a/doc/src/examples/qml-examples.qdoc +++ b/doc/src/examples/qml-examples.qdoc @@ -663,7 +663,8 @@ \example declarative/ui-components/tabwidget This example shows how to create a tab widget. It also demonstrates how - \l {Setting default properties}{default properties} can be used to collect and + \l {Property aliases}{property aliases} and + \l {Default Properties}{default properties} can be used to collect and assemble the child items declared within an \l Item. \image qml-tabwidget-example.png diff --git a/doc/src/snippets/declarative/integrating-javascript/connectjs.qml b/doc/src/snippets/declarative/integrating-javascript/connectjs.qml new file mode 100644 index 0000000..d84b827 --- /dev/null +++ b/doc/src/snippets/declarative/integrating-javascript/connectjs.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import QtQuick 1.0 +import "script.js" as MyScript + +Item { + id: item + width: 200; height: 200 + + MouseArea { + id: mouseArea + anchors.fill: parent + } + + Component.onCompleted: { + mouseArea.clicked.connect(MyScript.jsFunction) + } +} +//![0] diff --git a/doc/src/snippets/declarative/integrating-javascript/script.js b/doc/src/snippets/declarative/integrating-javascript/script.js new file mode 100644 index 0000000..f7099f8 --- /dev/null +++ b/doc/src/snippets/declarative/integrating-javascript/script.js @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// script.js + +function jsFunction() { + console.log("Called JavaScript function!") +} +//![0] + diff --git a/doc/src/snippets/declarative/qml-extending-types/components/Button.qml b/doc/src/snippets/declarative/qml-extending-types/components/Button.qml new file mode 100644 index 0000000..43fe0e2 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/components/Button.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// Button.qml +import QtQuick 1.0 + +Rectangle { + width: 100; height: 100 + color: "red" + + MouseArea { + anchors.fill: parent + onClicked: console.log("Button clicked!") + } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/components/application.qml b/doc/src/snippets/declarative/qml-extending-types/components/application.qml new file mode 100644 index 0000000..0c3b0df --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/components/application.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// application.qml +import QtQuick 1.0 + +Column { + Button { width: 50; height: 50 } + Button { x: 50; width: 100; height: 50; color: "blue" } + Button { width: 50; height: 50; radius: 8 } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/methods/app.qml b/doc/src/snippets/declarative/qml-extending-types/methods/app.qml new file mode 100644 index 0000000..3b5f008 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/methods/app.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 +//![0] +Rectangle { + id: rect + width: 100; height: 100 + + function say(text) { + console.log("You said: " + text); + } + + MouseArea { + anchors.fill: parent + onClicked: rect.say("Mouse clicked") + } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/ImageViewer.qml b/doc/src/snippets/declarative/qml-extending-types/properties/ImageViewer.qml new file mode 100644 index 0000000..e37db9c --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/ImageViewer.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// ImageViewer.qml +import QtQuick 1.0 + +Item { + id: item + width: 200; height: 200 + + property string currentImage: "default-image.png" + + Image { source: item.currentImage } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/alias-override.qml b/doc/src/snippets/declarative/qml-extending-types/properties/alias-override.qml new file mode 100644 index 0000000..aab2748 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/alias-override.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 +//![0] +Rectangle { + property alias color: childRect.color + color: "red" + + Rectangle { id: childRect } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/alias.qml b/doc/src/snippets/declarative/qml-extending-types/properties/alias.qml new file mode 100644 index 0000000..1bda447 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/alias.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// Button.qml +import QtQuick 1.0 + +Item { + property alias buttonText: textItem.text + + width: 200; height: 50 + + Text { id: textItem } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/alias/ImageViewer.qml b/doc/src/snippets/declarative/qml-extending-types/properties/alias/ImageViewer.qml new file mode 100644 index 0000000..7f50674 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/alias/ImageViewer.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// ImageViewer.qml +import QtQuick 1.0 + +Item { + id: item + width: 200; height: 200 + + property alias currentImage: image + + Image { id: image } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/alias/application.qml b/doc/src/snippets/declarative/qml-extending-types/properties/alias/application.qml new file mode 100644 index 0000000..3592e60 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/alias/application.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// application.qml +import QtQuick 1.0 + +ImageViewer { + id: viewer + + currentImage.source: "http://qt.nokia.com/logo.png" + currentImage.width: width + currentImage.height: height + currentImage.fillMode: Image.Tile + + Text { text: currentImage.source } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/application.qml b/doc/src/snippets/declarative/qml-extending-types/properties/application.qml new file mode 100644 index 0000000..4978f05 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/application.qml @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +import QtQuick 1.0 + +ImageViewer { + id: viewer + + currentImage: "http://qt.nokia.com/logo.png" + + Text { text: viewer.currentImage } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/properties/property-signals.qml b/doc/src/snippets/declarative/qml-extending-types/properties/property-signals.qml new file mode 100644 index 0000000..1d1b325 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/properties/property-signals.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 +//![0] +Item { + property int myNumber + + onMyNumberChanged: { console.log("myNumber has changed:", myNumber); } + + Component.onCompleted: myNumber = 100 +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/signals/Button.qml b/doc/src/snippets/declarative/qml-extending-types/signals/Button.qml new file mode 100644 index 0000000..9272572 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/signals/Button.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//![0] +// Button.qml +Rectangle { + id: rect + width: 100; height: 100 + + signal buttonClicked(int xPos, int yPos) + + MouseArea { + anchors.fill: parent + onClicked: rect.buttonClicked(mouse.x, mouse.y) + } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/signals/basic.qml b/doc/src/snippets/declarative/qml-extending-types/signals/basic.qml new file mode 100644 index 0000000..272c972 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/signals/basic.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// Button.qml +import QtQuick 1.0 + +Rectangle { + id: rect + width: 100; height: 100 + + signal buttonClicked + + MouseArea { + anchors.fill: parent + onClicked: rect.buttonClicked() + } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/signals/connectdynamic.qml b/doc/src/snippets/declarative/qml-extending-types/signals/connectdynamic.qml new file mode 100644 index 0000000..4b1f217 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/signals/connectdynamic.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 +//![0] +Item { + id: item + width: 300; height: 100 + + function myMethod() { + console.log("Button was clicked!") + } + + Row { id: row } + + Component.onCompleted: { + var component = Qt.createComponent("Button.qml") + for (var i=0; i<3; i++) { + var button = component.createObject(row) + button.border.width = 1 + button.buttonClicked.connect(myMethod) + } + } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/signals/connectslots.qml b/doc/src/snippets/declarative/qml-extending-types/signals/connectslots.qml new file mode 100644 index 0000000..ae14281 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/signals/connectslots.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 +//![0] +Item { + id: item + width: 200; height: 200 + + function myMethod() { + console.log("Button was clicked!") + } + + Button { + id: button + anchors.fill: parent + Component.onCompleted: buttonClicked.connect(item.myMethod) + } +} +//![0] diff --git a/doc/src/snippets/declarative/qml-extending-types/signals/no-parameters.qml b/doc/src/snippets/declarative/qml-extending-types/signals/no-parameters.qml new file mode 100644 index 0000000..742ab18 --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/signals/no-parameters.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//![0] +// application.qml +import QtQuick 1.0 + +Button { + width: 100; height: 100 + onButtonClicked: console.log("Mouse was clicked") +} +//![0] + diff --git a/doc/src/snippets/declarative/qml-extending-types/signals/parameters.qml b/doc/src/snippets/declarative/qml-extending-types/signals/parameters.qml new file mode 100644 index 0000000..f513f5f --- /dev/null +++ b/doc/src/snippets/declarative/qml-extending-types/signals/parameters.qml @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 +//![0] +// application.qml +Button { + width: 100; height: 100 + onButtonClicked: { + console.log("Mouse clicked at " + xPos + "," + yPos) + } +} +//![0] + diff --git a/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml index 15f2f11..f6564f7 100644 --- a/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml +++ b/examples/declarative/modelviews/visualitemmodel/visualitemmodel.qml @@ -55,16 +55,22 @@ Rectangle { width: view.width; height: view.height color: "#FFFEF0" Text { text: "Page 1"; font.bold: true; anchors.centerIn: parent } + + Component.onDestruction: print("destroyed 1") } Rectangle { width: view.width; height: view.height color: "#F0FFF7" Text { text: "Page 2"; font.bold: true; anchors.centerIn: parent } + + Component.onDestruction: print("destroyed 2") } Rectangle { width: view.width; height: view.height color: "#F4F0FF" Text { text: "Page 3"; font.bold: true; anchors.centerIn: parent } + + Component.onDestruction: print("destroyed 3") } } @@ -76,6 +82,7 @@ Rectangle { highlightRangeMode: ListView.StrictlyEnforceRange orientation: ListView.Horizontal snapMode: ListView.SnapOneItem; flickDeceleration: 2000 + cacheBuffer: 200 } Rectangle { diff --git a/examples/declarative/ui-components/tabwidget/TabWidget.qml b/examples/declarative/ui-components/tabwidget/TabWidget.qml index f066fd2..2a74c46 100644 --- a/examples/declarative/ui-components/tabwidget/TabWidget.qml +++ b/examples/declarative/ui-components/tabwidget/TabWidget.qml @@ -45,8 +45,8 @@ Item { // Setting the default property to stack.children means any child items // of the TabWidget are actually added to the 'stack' item's children. - // See the "Extending Types from QML" documentation for details on default - // properties. + // See the "Writing QML Components: Properties, Methods and Signals" + // documentation for details on default properties. default property alias content: stack.children property int current: 0 -- cgit v0.12 From 2a67cbb031608e73b0e02a12ea26de6d43c9250d Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Fri, 3 Dec 2010 15:15:51 +1000 Subject: Give qmlviewer a minimum size if root object has no size. de8c9d69fa7c7cc50e9a238e58f6e9370f158fc4 ensured the window was at least partly visible on Windows and Linux but it did not work on Mac. Task-number: QTBUG-15783 Reviewed-by: Alan Alpert --- tools/qml/qmlruntime.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp index 7ea77d1..a368bc1 100644 --- a/tools/qml/qmlruntime.cpp +++ b/tools/qml/qmlruntime.cpp @@ -1520,7 +1520,7 @@ void QDeclarativeViewer::updateSizeHints(bool initial) //qWarning() << "USH: R2V: setting free size "; layout()->setSizeConstraint(QLayout::SetNoConstraint); layout()->activate(); - setMinimumSize(QSize(1,1)); + setMinimumSize(minimumSizeHint()); setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); canvas->setMinimumSize(QSize(0,0)); canvas->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); -- cgit v0.12 From d55ea5c4b4d1d80ab94c3ef3a59b15359373c84a Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 3 Dec 2010 18:52:03 +1000 Subject: Do not use openGL on Mac OS X for QML visual tests It appears to lead to sporadic crashes in the CI system. Task-number: QTBUG-14792 --- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index fe23e09..3ca6d93 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -133,6 +133,9 @@ void tst_qmlvisual::visual() QFETCH(QString, testdata); QStringList arguments; +#ifdef Q_WS_MAC + arguments << "-no-opengl"; +#endif arguments << "-script" << testdata << "-scriptopts" << "play,testimages,testerror,testskip,exitoncomplete,exitonfailure" << file; @@ -236,6 +239,9 @@ void action(Mode mode, const QString &file) QString testdata = tst_qmlvisual::toTestScript(file,mode); QStringList arguments; +#ifdef Q_WS_MAC + arguments << "-no-opengl"; +#endif switch (mode) { case Test: // Don't run qml -- cgit v0.12 From 5b7b11238b0edbf1d0177732acc50fe0459c42c7 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 3 Dec 2010 19:11:41 +1000 Subject: Update visual tests for the recent qmlviewer change Changing the minimum size of the viewer changes the size of some of the visual test outputs which were really small. Task-number: QTBUG-14792 --- .../qmlvisual/focusscope/data/test2.0.png | Bin 305 -> 439 bytes .../qmlvisual/focusscope/data/test2.1.png | Bin 305 -> 439 bytes .../qmlvisual/focusscope/data/test2.qml | 154 ++--- .../data/usingRepeater.0.png | Bin 1203 -> 1747 bytes .../qdeclarativepositioners/data/usingRepeater.qml | 62 +- .../align/data-X11/multilineAlign.0.png | Bin 762 -> 791 bytes .../align/data-X11/multilineAlign.qml | 118 ++-- .../qdeclarativetext/data-X11/qtbug_14865.0.png | Bin 303 -> 465 bytes .../qdeclarativetext/data-X11/qtbug_14865.1.png | Bin 303 -> 465 bytes .../qdeclarativetext/data-X11/qtbug_14865.qml | 216 +++---- .../qdeclarativetext/elide/data-X11/elide.0.png | Bin 481 -> 581 bytes .../qdeclarativetext/elide/data-X11/elide.1.png | Bin 481 -> 581 bytes .../qdeclarativetext/elide/data-X11/elide.qml | 128 ++-- .../elide/data-X11/multilength.0.png | Bin 742 -> 903 bytes .../elide/data-X11/multilength.1.png | Bin 810 -> 967 bytes .../elide/data-X11/multilength.2.png | Bin 805 -> 962 bytes .../elide/data-X11/multilength.3.png | Bin 529 -> 678 bytes .../elide/data-X11/multilength.4.png | Bin 528 -> 676 bytes .../elide/data-X11/multilength.5.png | Bin 399 -> 542 bytes .../elide/data-X11/multilength.qml | 646 ++++++++++----------- .../qdeclarativetextedit/data-X11/qt-669.0.png | Bin 692 -> 855 bytes .../qdeclarativetextedit/data-X11/qt-669.1.png | Bin 696 -> 863 bytes .../qdeclarativetextedit/data-X11/qt-669.2.png | Bin 699 -> 865 bytes .../qdeclarativetextedit/data-X11/qt-669.3.png | Bin 698 -> 862 bytes .../qdeclarativetextedit/data-X11/qt-669.4.png | Bin 692 -> 855 bytes .../qdeclarativetextedit/data-X11/qt-669.qml | 528 ++++++++--------- .../qdeclarativetextinput/data-X11/echoMode.0.png | Bin 256 -> 358 bytes .../qdeclarativetextinput/data-X11/echoMode.1.png | Bin 342 -> 446 bytes .../qdeclarativetextinput/data-X11/echoMode.2.png | Bin 445 -> 553 bytes .../qdeclarativetextinput/data-X11/echoMode.3.png | Bin 508 -> 622 bytes .../qdeclarativetextinput/data-X11/echoMode.qml | 374 ++++++------ 31 files changed, 1113 insertions(+), 1113 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png index 22d7496..396bf2d 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png index 22d7496..396bf2d 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml index 62eff17..8669071 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 48 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 64 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 80 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 96 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 112 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 128 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 144 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 160 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 176 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 192 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 208 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 224 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 240 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 256 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 272 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 288 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 304 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 320 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 336 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 352 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 368 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 384 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 400 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 416 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 432 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 448 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 464 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 480 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 496 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 512 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 528 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 544 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 560 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 576 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 592 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 608 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 624 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 640 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 656 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 672 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 688 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 704 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 720 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 736 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 752 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 768 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 784 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 800 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 816 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 832 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 848 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 864 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 880 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 896 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 912 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 928 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 944 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 960 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 976 @@ -250,74 +250,74 @@ VisualTest { } Frame { msec: 992 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1008 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1024 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1040 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1056 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1072 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1088 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1104 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1120 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1136 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1152 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1168 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1184 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1200 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1216 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1232 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1248 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } Frame { msec: 1264 - hash: "4823f4520db0c1f64d887f172b3efa17" + hash: "f4041fcc91346361df95e344a0ee8e2d" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png index f5b5622..0efb20a 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml index 3869b73..365c25f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml @@ -10,126 +10,126 @@ VisualTest { } Frame { msec: 32 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 48 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 64 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 80 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 96 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 112 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 128 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 144 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 160 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 176 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 192 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 208 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 224 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 240 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 256 - hash: "3b670c14311188b82f37aa260fb1a8de" + hash: "e76f50af76d6ee5925b183f9e2316b78" } Frame { msec: 272 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 288 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 304 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 320 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 336 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 352 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 368 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 384 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 400 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 416 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 432 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 448 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 464 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 480 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 496 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } Frame { msec: 512 - hash: "07b267d5a8c194322d339e1ad609f199" + hash: "c98a904eb5da750f4cabf787e253b2ec" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png index 38f2051..666d272 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml index d431bb8..75e6859 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml @@ -10,238 +10,238 @@ VisualTest { } Frame { msec: 32 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 48 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 64 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 80 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 96 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 112 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 128 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 144 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 160 - hash: "d80fd046c582a26230e547471f290f12" + hash: "377fd9e347a2e6e0930d1422ce744c5c" } Frame { msec: 176 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 192 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 208 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 224 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 240 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 256 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 272 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 288 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 304 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 320 - hash: "f9e466557e920150c638621536d94e5b" + hash: "36106ba13106d262c02c67e82bba1443" } Frame { msec: 336 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 352 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 368 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 384 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 400 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 416 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 432 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 448 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 464 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 480 - hash: "40b5718a9370c332f254a3ead05dfe5b" + hash: "509d31a486ae2f83055b52ec12f33e76" } Frame { msec: 496 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 512 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 528 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 544 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 560 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 576 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 592 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 608 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 624 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 640 - hash: "3249c560c69e915020f9632acd1c5eca" + hash: "09b9249750ba637ef659cbc7b9a6055f" } Frame { msec: 656 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 672 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 688 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 704 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 720 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 736 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 752 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 768 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 784 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 800 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 816 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 832 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 848 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 864 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 880 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 896 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 912 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 928 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 944 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } Frame { msec: 960 - hash: "2df61c56ba08ef258a0d493760127a8d" + hash: "1ac7017fcf7c9775b66ed1fb78930a45" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.0.png index 026d06c..6119f92 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.1.png index 026d06c..6119f92 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.qml index 26d0656..481c9aa 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 48 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 64 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 80 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 96 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 112 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 128 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 144 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 160 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 176 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 192 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 208 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 224 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 240 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 256 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 272 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 288 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 304 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 320 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 336 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 352 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 368 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 384 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 400 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 416 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 432 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 448 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 464 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 480 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 496 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 512 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 528 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 544 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 560 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 576 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 592 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 608 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 624 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 640 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 656 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 672 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 688 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 704 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 720 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 736 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 752 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 768 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 784 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 800 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 816 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 832 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 848 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 864 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 880 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 896 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 912 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 928 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 944 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 960 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 976 @@ -250,198 +250,198 @@ VisualTest { } Frame { msec: 992 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 1008 - hash: "4235bd6abcbdf6621c4c41153fbaada5" + hash: "bd09363ea401e07a38d216bf29806592" } Frame { msec: 1024 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1040 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1056 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1072 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1088 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1104 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1120 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1136 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1152 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1168 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1184 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1200 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1216 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1232 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1248 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1264 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1280 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1296 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1312 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1328 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1344 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1360 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1376 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1392 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1408 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1424 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1440 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1456 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1472 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1488 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1504 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1520 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1536 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1552 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1568 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1584 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1600 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1616 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1632 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1648 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1664 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1680 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1696 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1712 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1728 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1744 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } Frame { msec: 1760 - hash: "3ccd3d26158a50d8f0567bafd7a23e06" + hash: "a3e4ab9c6151c9acb4c9dd41c9c2c596" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png index 53d3c12..f2e6117 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png index 53d3c12..f2e6117 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml index 7aadc15..f306f5c 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 48 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 64 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 80 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 96 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 112 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 128 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 144 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 160 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 176 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 192 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 208 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 224 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 240 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 256 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 272 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 288 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 304 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 320 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 336 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 352 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 368 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 384 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 400 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 416 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 432 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 448 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 464 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 480 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 496 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 512 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 528 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 544 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 560 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 576 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 592 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 608 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 624 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 640 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 656 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 672 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 688 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 704 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 720 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 736 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 752 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 768 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 784 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 800 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 816 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 832 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 848 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 864 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 880 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 896 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 912 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 928 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 944 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 960 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 976 @@ -258,22 +258,22 @@ VisualTest { } Frame { msec: 992 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 1008 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 1024 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 1040 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } Frame { msec: 1056 - hash: "40d4596fcecc4e6a214decccc581a75f" + hash: "a2003f5b238564e9b68b38db156431d2" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png index bf41ce8..f71c1ac 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png index 683a452..93c16dc 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png index 6b4a280..acec1ee 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png index ddf5431..f380c08 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png index 7e56a3c..18142dd 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.5.png index 5005724..c7f59b8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml index 7b17ab2..6e802f4 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml @@ -10,239 +10,239 @@ VisualTest { } Frame { msec: 32 - hash: "b5dfa53607ab952a07d77b4d6bd53a4a" + hash: "fde26fa3d17fb92d676afe61ca6a2170" } Frame { msec: 48 - hash: "c9b99388f7570a65162026739c365edd" + hash: "54c7a0ea10fa212959dc4f7606c31f3c" } Frame { msec: 64 - hash: "6f612fe36fa8028a75f6149390bd3585" + hash: "e73c4521144b2c810f15239e6d8fa468" } Frame { msec: 80 - hash: "efada1cf68ff7dae90962e7540c79b53" + hash: "31a68bfd57846795db57bb30d1d60341" } Frame { msec: 96 - hash: "f42b6952937376ae34f7ef493e86aee6" + hash: "55edcaeed37c1390eee2619d52a2eb03" } Frame { msec: 112 - hash: "008b0419f3ec6dbb16220a8e484a1ec8" + hash: "2c27d9c3dc215c68630495e255c1670e" } Frame { msec: 128 - hash: "ecb3c1cb02f7a01d4343dad1a066fa6f" + hash: "b27dd9260f6da3ab414076e83bf5a2bd" } Frame { msec: 144 - hash: "ce5adf6c5c4d5e385ce7e461e380b00e" + hash: "bfcbba7e970af922ee87fbbe936eaa84" } Frame { msec: 160 - hash: "79b8fefae0ac2784391c15c0221bd99d" + hash: "75af84ff6f21648737cef4a215410cc6" } Frame { msec: 176 - hash: "259da9a4c2bb9c89d16dd1943645e836" + hash: "71fd1fe13a14632ff54ad7a87be68bca" } Frame { msec: 192 - hash: "40ee5004fed2af60ab5fc4983bd2dacd" + hash: "69f553a1893403dc6fc82d3c9c47f501" } Frame { msec: 208 - hash: "935314bef478d43e30b6cbdcb33ba72b" + hash: "9456b12d49cc2a1f9212dba98a83c8ab" } Frame { msec: 224 - hash: "9860af14b459925078467f334bf41e42" + hash: "cfd826f91f6f880816d505c93a8f125a" } Frame { msec: 240 - hash: "d9955eabd55559d7bef3f4cd96b42a35" + hash: "d8e3291525eff9f905102ed7654f986b" } Frame { msec: 256 - hash: "7fa3de8afdeb61c6e2e87cde2e96152f" + hash: "044c1f37e37a68fbfbb9ddbc2da4300a" } Frame { msec: 272 - hash: "0deea16d1f6d18f1e9c57546b485fe75" + hash: "d640cba5f14d9c065bec6f6c23f2831f" } Frame { msec: 288 - hash: "231a71ad0981525d9eb15643bc397130" + hash: "9e15b68dace4b39b937dfea8777ae503" } Frame { msec: 304 - hash: "119e67ab3b30bd9a716ad81bbb10d626" + hash: "7ea72711e3f8bdd1087181e127e093c7" } Frame { msec: 320 - hash: "4f29d912920ab6b8973a2c392a19ea53" + hash: "c45dae8eb1768c8aba2d92dea4f268a2" } Frame { msec: 336 - hash: "8544592eb1d48a55cfd0e274c05622cb" + hash: "181ebf6597be2d9e54c1d01a5ab54b46" } Frame { msec: 352 - hash: "eca3de3a1f3e388a0029ea03327e4b21" + hash: "094b6cc486b60882836a9ba35411ae7d" } Frame { msec: 368 - hash: "7672135d842f0f6f3a06c19e320b9431" + hash: "031f1bcb864b4507bf93caab88756317" } Frame { msec: 384 - hash: "49b5720ebbb03a9c61aebdc6eaf6b2a8" + hash: "42b4d89a1026327f180ecc414dcd0ef0" } Frame { msec: 400 - hash: "7d2ddf271385fef343412c43a41d88da" + hash: "a99c5d1d434687e2f16e7054bcff8a69" } Frame { msec: 416 - hash: "3df6034ff296ab1242146ba7298a9dd8" + hash: "91cf18d3f8538ee8550f7e190911b072" } Frame { msec: 432 - hash: "5a52202453c359370c017a397cbc6f20" + hash: "1c11a328d74bc7bf77da10f094db8d4a" } Frame { msec: 448 - hash: "649d58d817e37e7b14d3080998dbc126" + hash: "e4da6dc99c962e8f37dc8d99669616d0" } Frame { msec: 464 - hash: "f00b682156bde560b571e0044eff150a" + hash: "628d4c1455f58a304887050c0552499a" } Frame { msec: 480 - hash: "0e5ce3806c60e7a67e72ee9f4c334454" + hash: "dd17a403f45bcd1001cb08e7f4ae8443" } Frame { msec: 496 - hash: "9d8c0e6a6a66560752abc68de10a6ec0" + hash: "1ed042d0289fc6167143ddcd92f708f6" } Frame { msec: 512 - hash: "ffd81c8901cdf67ec3fa574b606eba89" + hash: "b55abb6249925cf06439b3177310dcfc" } Frame { msec: 528 - hash: "56b7098e63f8cc1d8957829e7779ae73" + hash: "251c3346640a2aa7a9c18ca84ff2d5bb" } Frame { msec: 544 - hash: "7d7417b2b2c07c93bf5d951fddf4363b" + hash: "6f5e18d84c4107213599b57bf7284c4b" } Frame { msec: 560 - hash: "a2dd725545042e9b6a366d809d2cfc4f" + hash: "2179c1d7d7acb3c2f6354b493cfe74e0" } Frame { msec: 576 - hash: "8fd5ccba4b997a96f7773936afc4fc92" + hash: "bbc757e8f3c08f93ffcdd68b392c8cdb" } Frame { msec: 592 - hash: "85f29eae877f93c4617a37b5c445c605" + hash: "7eefd9c7291c1a23679efd42f2c29539" } Frame { msec: 608 - hash: "a8eb3ebef75081964a6beba533eba89b" + hash: "fa375510d3850614aebceb2bc31ab4de" } Frame { msec: 624 - hash: "8c3e3f4833419e7df6de0c9443390751" + hash: "f643c5ba39bb90f396f00c0a9df995c8" } Frame { msec: 640 - hash: "537f3d9760f6cc0c07452ea3f334a008" + hash: "c6b7792f780b00b1b07c0ce948dff13b" } Frame { msec: 656 - hash: "93a1851ca2afb595ad684a7f613e860c" + hash: "d43d82ee9b0da8f237469c555b48bee8" } Frame { msec: 672 - hash: "fd353e60da99a884f60a2d1ab6e4be46" + hash: "addaa9d2aa8f54d6a4e82dc7e029f19d" } Frame { msec: 688 - hash: "21cff9dcfa9e7bb4a44d75338e314d0e" + hash: "b12af2fd05a1ccd4664c5093456bae01" } Frame { msec: 704 - hash: "64153f5d57b7191f5e957f22dcdff6d3" + hash: "982d3505c51fc1bac026c744e2d1db11" } Frame { msec: 720 - hash: "211d8e9b6427129e4b9292fc862edfb6" + hash: "a67a0705ce893dcafdcfc3a7fe71f608" } Frame { msec: 736 - hash: "35f96f202391dc805b0bbb45d7efb1bf" + hash: "6e00f746695ca67fb4c4462740b13c8f" } Frame { msec: 752 - hash: "0336a1ba71d4bf7b4cbf98812ba1ae9c" + hash: "bc4235d556a1e18d591b9afd87b29826" } Frame { msec: 768 - hash: "c5ec3a61d64228efe448b0d5c0004baa" + hash: "830ebf4b9214f1dc31975c83cf49d31e" } Frame { msec: 784 - hash: "9154774bce1d89b84c0f525e282bc95d" + hash: "bac049ae3d6676db8bca99620c9f5bd3" } Frame { msec: 800 - hash: "8d07794b2b17971ff69ff7961c441765" + hash: "0f9623c23e4e45126078c3c93015d26c" } Frame { msec: 816 - hash: "086c711c3794f8ad8d634ed6483f3caf" + hash: "bedde76baa8905970ea5fa8da62355a6" } Frame { msec: 832 - hash: "af591122aee8c949957ae19136505a57" + hash: "018b9b1444d921b8cfd823265556c8f6" } Frame { msec: 848 - hash: "c84db4548f53ae95023e56fad3c4aea3" + hash: "2be3e0693f54ffefd24e44f552d59e3f" } Frame { msec: 864 - hash: "d7a7bb5cfb91923db8d72d9a12f0016c" + hash: "c8c99f68125df2a1f41f6b44fdcc0406" } Frame { msec: 880 - hash: "7171788040f36bf1c878678906a84290" + hash: "3e18d6a24a1c6983f3f2ce984d22dbe4" } Frame { msec: 896 - hash: "d2016d9ba6b29c7dfb5d64e506e7f980" + hash: "aa336c4e5ace2b33689ca280de2299db" } Frame { msec: 912 - hash: "75945e6719cea6aaf021fcd28dfe4da0" + hash: "fd7245f879bbd72b6e72c563a588eea7" } Frame { msec: 928 - hash: "e203a20fc8dda077ff217ac74895b8f6" + hash: "e484656517fcb5763c0c8992b22efe91" } Frame { msec: 944 - hash: "1acb696745e0ead2f8c9d807787ce225" + hash: "fbd58b050963fc7cdbd5ae89aa7a4a70" } Frame { msec: 960 - hash: "b8d60fcd3e262dc33d623a741fdafb0b" + hash: "b47ad6fb8b364e3c2764bf31e62f21e0" } Frame { msec: 976 @@ -250,239 +250,239 @@ VisualTest { } Frame { msec: 992 - hash: "0acda3300bec26515f7ddfd33af6ca84" + hash: "ac1a6692030ed80cd34c082ac70ea06e" } Frame { msec: 1008 - hash: "12f5c647778c868638845fd66c825f51" + hash: "068a6b82a35d94e3db3eae772c7da56a" } Frame { msec: 1024 - hash: "e87432496a570b68c18d563fd3e55b7c" + hash: "8252bb45e74bc09e1d5e6b3951fbb08e" } Frame { msec: 1040 - hash: "332a165345a53198ec22a69e12a7cd6c" + hash: "a5d7ad9287238780cb45c61bb70d6cd4" } Frame { msec: 1056 - hash: "92f7d768af912807dca6ad16006d84e9" + hash: "e0307f3a1193af0df0cd52d7dac44db9" } Frame { msec: 1072 - hash: "50c330c7e9ed8f08e4b496b322fed388" + hash: "d649cf0c4a768dba1a0380b64bc7e48b" } Frame { msec: 1088 - hash: "554317004bc31ba56c970fac294577df" + hash: "3fd512a0860c17abbb6ed71488cd7255" } Frame { msec: 1104 - hash: "3c6391b4296451f1ca1db737e4d928c3" + hash: "26032efe6efd1de4b5fae23ce4e28a0a" } Frame { msec: 1120 - hash: "8274fa399e0b132582389c909775e8cb" + hash: "846652a87d93e397d1a84b187b7aafea" } Frame { msec: 1136 - hash: "f66504b79f0415652f4c6720a2643afe" + hash: "4dfdaa030da4c72a0e1a19bfd70b5856" } Frame { msec: 1152 - hash: "53ce26d4f839451868c70133c3f0dff2" + hash: "365ad99db7302dfe078f4283af13f5ca" } Frame { msec: 1168 - hash: "715b6a5090e0a947cbbd5f8902088177" + hash: "f378a096243bd2c6f7e33e0baf24716a" } Frame { msec: 1184 - hash: "3715a52358febdbfa4aeefe56b4b173e" + hash: "e972a84715d314e8814cb7fcab1ad379" } Frame { msec: 1200 - hash: "d89459730ea136a34135fded35bc2247" + hash: "8826dbafd12ba2a7437623c8967f2699" } Frame { msec: 1216 - hash: "ba8471a6c2449a05dfe411b86a38ff35" + hash: "effa889b33b97f665a21d6562acc45fc" } Frame { msec: 1232 - hash: "5c477b14e0ff59e5d7db360005deaea7" + hash: "6ebb408651cf5fbb2fa8788e0ec544d6" } Frame { msec: 1248 - hash: "becdcaa9d4f78d94e3f3af87467798bd" + hash: "c4f45fd05b7b4f00acf80f768e99af38" } Frame { msec: 1264 - hash: "2b1f5c5c6a9f26e6b359cf786591d480" + hash: "735a7c461f6b10cd967b03c173bfd81d" } Frame { msec: 1280 - hash: "9b1cbb944a941fd2869ac193e9701582" + hash: "608cf5ebac88726ffe7e66d763d74e27" } Frame { msec: 1296 - hash: "e1c67be1ec2030529335c02099a3d9cc" + hash: "6322c5aebdf814bfc5bfaef8b6bb4d91" } Frame { msec: 1312 - hash: "4f4ecadaa0afad0e38530067ee7688b9" + hash: "730b7cef2e0cf57a4721e77e6849b862" } Frame { msec: 1328 - hash: "13f13cb8ea96d764c93ab43f538af2a7" + hash: "13879c0772938e39d820b6fc10e0f7e5" } Frame { msec: 1344 - hash: "cd33ccd1ac45f1f83cf93cfbdefa415a" + hash: "0710bf8a2beff02009d4bb02f2404b7b" } Frame { msec: 1360 - hash: "8c84a3842a8da763c4b398e49a13831f" + hash: "2cd38c2cbf3d8b7eb3a50b9db4bb8f7f" } Frame { msec: 1376 - hash: "3b47b3c27171032450a421ae8ecc786d" + hash: "4e988a74a3846171f86d4d69ce3407d9" } Frame { msec: 1392 - hash: "524517523cb15d7886c6dbfa8724ea95" + hash: "82cc4b40fe1190de5a2cbbf3f11ac7b0" } Frame { msec: 1408 - hash: "3ae90a6ed20fe62da9fb81b51d6d9a1e" + hash: "f15bd345b992b39167165a640ad45794" } Frame { msec: 1424 - hash: "70c0880f0d0d1deefc22baebbeda06c3" + hash: "be5ca66da00327ecc9f5dde2aa3660d2" } Frame { msec: 1440 - hash: "d97f6cda6df39ffe1db076204191bba6" + hash: "f97a1e863c36477d31a78342c7aa21b7" } Frame { msec: 1456 - hash: "d170a0b8339bd0c29b664403ce8b3286" + hash: "d137a2a6ae95aba3f7a2b2a0560718a5" } Frame { msec: 1472 - hash: "fd962a3a4e2fbe03f6730136cdc2a824" + hash: "e7529db7cf310e41eb0ac42ab86ae317" } Frame { msec: 1488 - hash: "75bcbfc7d7bf3139538347b17b41cf12" + hash: "66914e90881a4a8751ba5391ac41a70b" } Frame { msec: 1504 - hash: "0fcba8fa11a2f3fc7ebcefee6e9dafcd" + hash: "249863a5ef1a14ca0eb4397d206dfc1e" } Frame { msec: 1520 - hash: "621f80511b2ce7106b1d285045f505ca" + hash: "26095384b724a5e704c7b627930f4e22" } Frame { msec: 1536 - hash: "be6896d8de4bbb8b7ef9e1d34f6f7f32" + hash: "98281eed5ae9d9f933e47a8fba8709f1" } Frame { msec: 1552 - hash: "a770cffe72c2791d6d76c16926f98f2f" + hash: "d9b50c54255edb300e36af2648ef8f30" } Frame { msec: 1568 - hash: "7e8222f9831e235c7d044b5188a20dd1" + hash: "9bde860d92f5ec979fa5c274fd1c13a1" } Frame { msec: 1584 - hash: "a740dfb5ae432712abb4f5f9479a22fa" + hash: "39c13a42f920f57d9f9fe85ebc4e68fa" } Frame { msec: 1600 - hash: "a731135b3ac067712081b959f27d8784" + hash: "e80bd130bad05078212089586d6c2731" } Frame { msec: 1616 - hash: "c6cdb85a28bdc970cf2a30f0e2cef763" + hash: "753732b5309fd8dd7daa16761dd7dad0" } Frame { msec: 1632 - hash: "4c901d5879cd4e1602b4f3560745f0b1" + hash: "2eb56a98f728b224f7db073c6ea3c3b9" } Frame { msec: 1648 - hash: "ef64a09b2bd30a6c618ac59a8cacd628" + hash: "21ab167d173e244ffb471faddf704e81" } Frame { msec: 1664 - hash: "816f55f5b0b8e3baa52e274ae737ee30" + hash: "9964a0386ae349b909424f588d8decf5" } Frame { msec: 1680 - hash: "90db19b8b2d820d36d7a45518f730014" + hash: "cee42f46df4c879fa6fc378481ec728c" } Frame { msec: 1696 - hash: "f94248d3df175536a4a6b88722763d75" + hash: "4779aeed276cbe4112484d189d1baf8b" } Frame { msec: 1712 - hash: "d1aa57e0666a7d9b5b0dc7b021a1387c" + hash: "d482cd14db734f5fed2eaec7d8c0c555" } Frame { msec: 1728 - hash: "77b17a540862f5ec6b2256408fd3637f" + hash: "1f8b0681711c46afcf8af66df6d7caf8" } Frame { msec: 1744 - hash: "e9b9a37996f5825006565f5b56e755ea" + hash: "44b0e6d69fcd2b7acb499dfdfced026b" } Frame { msec: 1760 - hash: "1ce712e1755047d17d5cf3c97cff1c96" + hash: "b6e25c4a276917b7f7f9189e65d965a8" } Frame { msec: 1776 - hash: "95c21bab93788ed45280e61c51173a99" + hash: "07e5da936f8d5c84606fcdc49fc6aca2" } Frame { msec: 1792 - hash: "6f62ae9bba2b1d2ea67f13d63157bd7c" + hash: "f27a54a8d37ec62f54e083f1ca65aada" } Frame { msec: 1808 - hash: "b5f11412bdb100f88a1f29aa577316e5" + hash: "074403259022efd08fcbd9d3a3052c79" } Frame { msec: 1824 - hash: "d4e2468ed0935687e370fcf70059f57f" + hash: "a126762087c8f94beef81216b6010f0c" } Frame { msec: 1840 - hash: "e7b5970ef9f327a8e7905f1a16c3f1a3" + hash: "96b8c7cebbb9676ea4f028907de71bbf" } Frame { msec: 1856 - hash: "c5b9694fe2d7952d6ef03ff5febec00b" + hash: "e6f073522d0af8e504fdb7df971f5e0a" } Frame { msec: 1872 - hash: "0604da4b328d80162fd88bdfcf2a8a68" + hash: "9223ed285f322fae3ba2b52afb408586" } Frame { msec: 1888 - hash: "cbeffb3c86fcd7b52672382d6a186692" + hash: "b24575dd4c0b0da0b99a03c46209ed3a" } Frame { msec: 1904 - hash: "deb96a6469b351f5e70d3032ad250df9" + hash: "5c82bc860f64183e66aead451ee5b893" } Frame { msec: 1920 - hash: "d4bcb6da72c0b7f2e0e55be917eb5720" + hash: "3172ab9c62b0870d6894b13720e54918" } Frame { msec: 1936 @@ -490,239 +490,239 @@ VisualTest { } Frame { msec: 1952 - hash: "c044b96932667fd56ca8c87ec70791a3" + hash: "5f8e85839f9ac82f46a17f871c3fffbc" } Frame { msec: 1968 - hash: "f197116b796c3647986337515c04a812" + hash: "245219fb6c4aa37d8cba7b5e1f74265f" } Frame { msec: 1984 - hash: "3d06fad059276fd5f8f58faeac482d52" + hash: "b68cfc5366c4ed8d1e5950a1facf0d85" } Frame { msec: 2000 - hash: "841ab0655e2bd498d51605fd37607378" + hash: "dd5c2d2470cc87d57d35ecc9ae8a3528" } Frame { msec: 2016 - hash: "5968dd4f704d72f264704ae6d6a416cf" + hash: "1a15d7f02b35d046305b40f9e6a6839d" } Frame { msec: 2032 - hash: "5daf3758175963e409ad7ea18d40a894" + hash: "d44c382ea28d429e6f8bbef9ae17338a" } Frame { msec: 2048 - hash: "37750cd0aca54fc6fa6651213a4a8aa0" + hash: "63598cb09d5ecbeb991c6db778c5c002" } Frame { msec: 2064 - hash: "b64411f26c1bde823daa4caf96402887" + hash: "b3fcd0180ecd01e2ad0c0114b3dfbf78" } Frame { msec: 2080 - hash: "cf6d68046e9b7cc39305bfbdbd64a6eb" + hash: "8d441044f5f10da23708d7ddf0472989" } Frame { msec: 2096 - hash: "47f89ab15314ce63dc3828aa4ae16d54" + hash: "6e87518a368c39d68521046773c2f922" } Frame { msec: 2112 - hash: "a7116055b3b33ad02bae75f2db016314" + hash: "59e377ccc851ee361e3874ad5ec18e55" } Frame { msec: 2128 - hash: "0a0443c4927d3d8d3373c311b89ead0d" + hash: "57a9b0431c7db130bfe4d6603f98c1f5" } Frame { msec: 2144 - hash: "6be5e906e9127471bb11e98ba9d68d4c" + hash: "526c93727c6321782a373ea6952a8784" } Frame { msec: 2160 - hash: "759c0e5e8a435846bf4471075df9ce1b" + hash: "fcd0a4605e27ecb0bac18686e7846b3b" } Frame { msec: 2176 - hash: "b7648957a2fdcca31b863907ea5cbc4f" + hash: "d697892f9944c67b5aadd7ad641e3ee5" } Frame { msec: 2192 - hash: "7e9ead6f87c989160681fe87eb44224b" + hash: "f46fd7e568d0995c518749ec0f5a0882" } Frame { msec: 2208 - hash: "f7ab3534218320a49b8cc14b39d23a38" + hash: "31cd2243fb23d4332c02e91f9956f648" } Frame { msec: 2224 - hash: "44ac6d8e7fd3facac856b532bea9b0dd" + hash: "3b29a9c0121ff127b69abba9c0b13c2c" } Frame { msec: 2240 - hash: "238d68eb27eaacddcf428706fca95cad" + hash: "ecd789e744ebb5dee7f25ebb089407bf" } Frame { msec: 2256 - hash: "8568076d97d416810f1e91acd33bbba0" + hash: "c99a6dfad8d750b7e67c1e3ef1021cbb" } Frame { msec: 2272 - hash: "3649d85321ac7674d8c3dd77815aaf32" + hash: "82d18b0c193f0ada9cae68e9f6ad5ff5" } Frame { msec: 2288 - hash: "0c6dab9f7d575265d554093b88ee7e17" + hash: "a09e8144b06db76f5849561d880f037e" } Frame { msec: 2304 - hash: "6387cb408d048d7b139f3d9aed2f14d6" + hash: "3e6922ca54c809a32ed5ef72e19d7ff0" } Frame { msec: 2320 - hash: "de2fa29a82cec9d9f22d50bba257f5de" + hash: "28e46da32bf34b3e1cd3d351e4c40317" } Frame { msec: 2336 - hash: "ba77a0dc547202e129e899998c7e0909" + hash: "297aeeaadc5f3268d95320bc3b33a429" } Frame { msec: 2352 - hash: "0acde6d2435444611f7d5fc67d336d4b" + hash: "31721528cdb17b03d3d6ca9f9a91370b" } Frame { msec: 2368 - hash: "1032d38e48cc3485c7a50bcf3ae949d0" + hash: "52fd1721330321daaea0b56122a72e5b" } Frame { msec: 2384 - hash: "571649ca193507216f344405d8cb9636" + hash: "739c5179b9739021dbb522d01812388c" } Frame { msec: 2400 - hash: "968aa311380ef783852b4a642d61d0c3" + hash: "4ae07f58d3a514f5c08f314c5dd445c4" } Frame { msec: 2416 - hash: "b440b4f5f2cb4a061b69e9a99bca0417" + hash: "4305ea97d47bac3fb0eebf9181b3ce48" } Frame { msec: 2432 - hash: "c1a2c2fd58f52c6a6f3e5dc2c1e9e8cf" + hash: "21c99059dba068bc145896217cc0883c" } Frame { msec: 2448 - hash: "2eab036693343475b799188c98f18bad" + hash: "0a514ae5d36acc07c7809a7b4f21ed8e" } Frame { msec: 2464 - hash: "9b0e2eb4c5ed398dfe5ac82c83d38065" + hash: "550ce887f462ace686bc6a9021c5cb73" } Frame { msec: 2480 - hash: "d6459b44113b2514a036a39449579918" + hash: "b65857dcfa0b1281dd5b9821a12dd8e8" } Frame { msec: 2496 - hash: "99e24ed5413be65aee179d7fdd0aa473" + hash: "5a6bb448a570e1a3eef142b8054f3717" } Frame { msec: 2512 - hash: "43c7a5fe622eee2202ab1061155da474" + hash: "b38e2f6b4063e1b8a40292017c5ed4ec" } Frame { msec: 2528 - hash: "78bc6de01b343c19ce11bcb5ce5db091" + hash: "fa7545e6e3fc92d62af2f7651077da5b" } Frame { msec: 2544 - hash: "77463f64f99952f37467b4cae5a75a73" + hash: "ebf0c79720a5692b761b62c4ba360875" } Frame { msec: 2560 - hash: "39181ec3e10fba5d73221e3ef725661d" + hash: "cb5356376d97308a4d102c9a53e93abe" } Frame { msec: 2576 - hash: "f23732daf5b25cbfa79256ad21739537" + hash: "879f434f4901bdcb166294336c60e26a" } Frame { msec: 2592 - hash: "171b8149512f9a1fc44c4076ae8e6891" + hash: "3ab575ac04bdd455346c0460aed413a0" } Frame { msec: 2608 - hash: "1c30c5284764d3aba948f417dc67ea95" + hash: "8f08366cb474ca2a1988ebba9d65ecaa" } Frame { msec: 2624 - hash: "5b40de40cc84f75a3038a2adafea6688" + hash: "2939cf0235f98aeaf48b3f28964cdddd" } Frame { msec: 2640 - hash: "11e918309ac265c0dddc34b05ddd2beb" + hash: "9cf4b339914e48f896dda17e08759472" } Frame { msec: 2656 - hash: "a18c91eae3fd3154c12e46717248577a" + hash: "3f5568ac7a4386f1d5072f1cda0c35b8" } Frame { msec: 2672 - hash: "839199f3940822a38fc2b44161ee0840" + hash: "107edbf8181f79cd7847d0154b6eda11" } Frame { msec: 2688 - hash: "8b62f8b4c353981788111a9434995a18" + hash: "9254497b95b89a7d40903edb04a3764a" } Frame { msec: 2704 - hash: "db7ee2d5e4905959c836d5162bd241c0" + hash: "7e7d25a2ee3fbfd67a3b8fecb9fe9202" } Frame { msec: 2720 - hash: "cb770a4cd0f56108ef703147e74338ae" + hash: "03759f59bbd2be573acd6c03eb088edd" } Frame { msec: 2736 - hash: "bdaaedef0c17b19cc283eba699799073" + hash: "58689762be6c7d3d6de6f23580ec8886" } Frame { msec: 2752 - hash: "8a7f5f87493ba387c14056f9a598e320" + hash: "0d4e315f9b079a30e6a4294a667f9ebc" } Frame { msec: 2768 - hash: "3974497b297fa233f3821abba2bdd6ce" + hash: "3f3dfa1c8d160238dae2da79a6a569f3" } Frame { msec: 2784 - hash: "41a5744b7747765764829328217e80ea" + hash: "b3cd7c3034e2a34c4ae9ed7f3144b2cc" } Frame { msec: 2800 - hash: "4d380bb823659cdfc1d3517234144b72" + hash: "c27d3a9057d1f15c6e0b2d427ac12ad2" } Frame { msec: 2816 - hash: "4699cc1dad5c6d5c84137ee5c5db52a4" + hash: "9b25ab315d9bfc582e41c05e88812cbe" } Frame { msec: 2832 - hash: "22a34c810c640b378708079761d16c9b" + hash: "e75671bfb99741dcff476690ede42166" } Frame { msec: 2848 - hash: "0c76a943b24dc9538416b05a678c7c94" + hash: "7dd3307fb41277ebcc4339cdb7747d7c" } Frame { msec: 2864 - hash: "575a20b793f899d50a95121708263283" + hash: "a148bce140f1637e27ae5f0207b75351" } Frame { msec: 2880 - hash: "830757417bbff5d6950177aa3617516a" + hash: "64e57a31c1baa16bcf47f2202fd6e2ed" } Frame { msec: 2896 @@ -730,239 +730,239 @@ VisualTest { } Frame { msec: 2912 - hash: "1b83db1121bb3436621d3f22758af76d" + hash: "83381c54b1923356c403cad2ae2c3519" } Frame { msec: 2928 - hash: "b2a6d502e9ed62f67c29b8ae7b857116" + hash: "e110f28619c2ec7c1c8d479793b93e54" } Frame { msec: 2944 - hash: "e9e06068090c076021e508772ae85b5a" + hash: "996a9a698f1a7c673eeef67501d7b81b" } Frame { msec: 2960 - hash: "5c7288791d73792b914e99a38b7b455c" + hash: "6cf2465c8b7c70343a26e981e6492212" } Frame { msec: 2976 - hash: "ad2b35c647da055a1088e476f250ea78" + hash: "3a9078adf3d4ca207c97b62ad525998f" } Frame { msec: 2992 - hash: "7cc9bbd4a2ed2ba1646b10a68c11241f" + hash: "0bf0d9a6a202119daa6a44f17d03b9ed" } Frame { msec: 3008 - hash: "f633c12a9d078c4a1405ee399bd75e6f" + hash: "6dfadc21810c9176dad599a6f7f672b9" } Frame { msec: 3024 - hash: "e4638bb2b40ed7c31630412010bccef1" + hash: "f1f866c6245bd6fd8141abfb8a040d46" } Frame { msec: 3040 - hash: "76fdd98f79c08d9211c42b79f953315a" + hash: "84329287c7555bc6207039ea632632b2" } Frame { msec: 3056 - hash: "df754dffbe6429aa7222e7a37d1956c5" + hash: "da7e80527f58c93bce9267958ce4c5d7" } Frame { msec: 3072 - hash: "68edef9b10728f0785cc74dfe92c3e03" + hash: "cd8eea7543ebc42971b3f41ea21dd4ed" } Frame { msec: 3088 - hash: "627ac43eb191db77345ab1a08bfd7e7a" + hash: "b9abb526dc3447370d847a5bca868b50" } Frame { msec: 3104 - hash: "c38698cc4c2de1eb96855f0b6398fd7f" + hash: "b8d63ac8331a9375ca06adacb56d12ea" } Frame { msec: 3120 - hash: "6264db59fa7dd4498cedac94b856d90e" + hash: "20fcdd73a4cc2abebbc462c32fb9b2c8" } Frame { msec: 3136 - hash: "b550d8181dbf88c5079e2fb6310f0309" + hash: "3f656f80771828ee6696a2e0a0626ae4" } Frame { msec: 3152 - hash: "6ffecf31343192ae352c42c6ba978fd3" + hash: "0d99110edca4f8ec544d10d680d27092" } Frame { msec: 3168 - hash: "445e7056bfb7726fcf1b0b6411400ec0" + hash: "48026f803bd17f56d13dd946fb359e3a" } Frame { msec: 3184 - hash: "9648c06d3a89c054587fa1e86c727fd0" + hash: "40759d794139327e2e66685c9fcb047b" } Frame { msec: 3200 - hash: "8d0af1ad33c06cfceaba1a0ca84cf0a0" + hash: "419953a3f882008e82bd733e63e66ab6" } Frame { msec: 3216 - hash: "f8f0c27738b186f17a9dd106481e85c5" + hash: "ddcd288b0a825ef6899755fbad56f2dd" } Frame { msec: 3232 - hash: "44e5893cd28e2d70afbfbb779f2dd154" + hash: "bc203d9f0f32efdd177353b9589bd127" } Frame { msec: 3248 - hash: "dc0d1baafa24423402caf63d6fcd6189" + hash: "a4ae6c449b53545a683cd33bc9274d59" } Frame { msec: 3264 - hash: "12c17a563b37bf633dce6fc6793d1cd9" + hash: "59e7c218b5a1b857469972f966489a43" } Frame { msec: 3280 - hash: "a8647172101b59753ea6aa40ec4570dc" + hash: "521fc5833ab0e3088200e1fea9a887b0" } Frame { msec: 3296 - hash: "e21afb74f793bef8c1b03d252b5700a8" + hash: "bd2386f85afb7516d147bff4c07e239f" } Frame { msec: 3312 - hash: "2e10ccbdee088b17172a479a8a859d56" + hash: "5298fdee07ff2ff34121f064fed3db4e" } Frame { msec: 3328 - hash: "f111c24e1e8d643543519fd703811f24" + hash: "311a8f163cebf7bafcb47c8e6db40ed1" } Frame { msec: 3344 - hash: "dd9aeec2ed05f9c68e1726a91e90e127" + hash: "ad6342bed57257a1616a74e19f2bb484" } Frame { msec: 3360 - hash: "043923ed2dee91815d0dce6cd38834e9" + hash: "4eb186c5f4963dc72b3dbc3a9da4df65" } Frame { msec: 3376 - hash: "07e0dbb223355b2921eb0597235ee820" + hash: "58f1f128001dd1ce0d405595acbaab2a" } Frame { msec: 3392 - hash: "0fba3e9a08d83405df35c632f9dc051e" + hash: "ba4a39b66cac22fceba9c4ecfdbae363" } Frame { msec: 3408 - hash: "a0a5a515ec395bdf4912ab24c8780339" + hash: "bbfde54a4de637bc1c54248e2e342544" } Frame { msec: 3424 - hash: "4e04e0246eb952cfae716214084cc1ed" + hash: "ddc3b4e87782e0472630e2f9f8a57099" } Frame { msec: 3440 - hash: "e7e989234e360e7c0cb44e7be4d654e8" + hash: "1bf1212686520da772fc18ca7684a924" } Frame { msec: 3456 - hash: "139b3309ac9e25b2165342bfb202169f" + hash: "706ec5a3b48123d3b5113d55b71f7968" } Frame { msec: 3472 - hash: "b4008ee73b92abad9c5fd7c83cb864cf" + hash: "62b08db0c3c4f1313bcf4a1e7b90badb" } Frame { msec: 3488 - hash: "b801a917995bd41eee2f4e4fed3006c5" + hash: "ae8409fed9d8919b1af2b4d0eafce670" } Frame { msec: 3504 - hash: "a0ea151cd2a2056a45ff5428239b37f4" + hash: "9f6ed6ada78e42f06f33514e363c736f" } Frame { msec: 3520 - hash: "01df418b5ba99271d3a2e8807de78899" + hash: "97e9a504c2c4ba5329a616810fc19505" } Frame { msec: 3536 - hash: "047fd42df7a5ba0f939930c2021df5fe" + hash: "348b6d15b8ef6862818b4fbdb938f241" } Frame { msec: 3552 - hash: "4336498cee8b516e79297a073257e008" + hash: "c1845df466f5690a8d7a439d33a27f7d" } Frame { msec: 3568 - hash: "ce404ce21bc91ff8dc61bd95b9e1d5ac" + hash: "aee2486331275b9f4116b61588ce169e" } Frame { msec: 3584 - hash: "06b5c263105ec574f10e70002c29adee" + hash: "efca3eaffa3421d68d788ee3f0ec068c" } Frame { msec: 3600 - hash: "6a224a56bbeaeb703afa0c2a7f2daf7d" + hash: "35f2940b51ed8c4734c23a43bf6fe448" } Frame { msec: 3616 - hash: "65259fcbdb9edfefc4fcbd1ab5f62542" + hash: "92b7d34480b7fab4dd39bbccfa8455a5" } Frame { msec: 3632 - hash: "93be4111a6aa21d85ab354bbd41e5b31" + hash: "4408049f405ecf5c3c696780390e2155" } Frame { msec: 3648 - hash: "2e4edcdc4807466620c9671d329a0977" + hash: "29aa30678d5c87c79ac67198e4dd7bd4" } Frame { msec: 3664 - hash: "e3232d08b83e3e9917b6f4eabc86df72" + hash: "2f88ac156017b20795f01716d9e9f2e8" } Frame { msec: 3680 - hash: "f27caa5d738b4778d4343f7b197c5dac" + hash: "4d72dec4a2e8edcff806c11f3742cf07" } Frame { msec: 3696 - hash: "dcf3032bc798daf1dc6bb7d608e2dffb" + hash: "3f5ebad282a4aa9c03a17d32aea03151" } Frame { msec: 3712 - hash: "9f2d4ba31ab4ec10b43b7de19197994e" + hash: "a8d289d15353d45159607377de285732" } Frame { msec: 3728 - hash: "4bf6419de081524ecdeb4c07b376f06d" + hash: "af2d2fcfa4510e0d26ea90fc7711b0cf" } Frame { msec: 3744 - hash: "3fdd8166873e768e1346e52a1b4a6554" + hash: "aed6897bc8b2163822a052e1cc9ad36b" } Frame { msec: 3760 - hash: "7b25b2f1b2694a87095fba46d505684f" + hash: "bf7077614b5045f79c8697bab1e83839" } Frame { msec: 3776 - hash: "d8246057d4b0306747ba449d5247dd21" + hash: "e5c8c0bf1fce3a964f4bb911ffee0bdb" } Frame { msec: 3792 - hash: "e45c06fbf48923393f672381f0256513" + hash: "bcfe4aebc880809f56d480f23b17dfd1" } Frame { msec: 3808 - hash: "fef8f1bf977d6567eebe14ccafd36853" + hash: "2ce342f7864ab26124093edc88585c97" } Frame { msec: 3824 - hash: "04152eab971eac3fbba26f15ba09d329" + hash: "8be15d95125e03a0282e897096abb443" } Frame { msec: 3840 - hash: "5039cb5183587fe46ef30c5d0f8c9584" + hash: "a4486f30becceca3ec3cc5c8718af82a" } Frame { msec: 3856 @@ -970,239 +970,239 @@ VisualTest { } Frame { msec: 3872 - hash: "5d62550ba4502c3eae3f62ce5b8e9374" + hash: "38de7ed0d05015f9b06a4bb278fc96c1" } Frame { msec: 3888 - hash: "859ab80ee7d563a158970d1f3360c7dd" + hash: "1cd9a38bb1fc8b06d5c05cd28719d4b3" } Frame { msec: 3904 - hash: "4f900b694d6e552c9287472ca58be35a" + hash: "682ba6e2eb83ce1b6bf8526b21cf2694" } Frame { msec: 3920 - hash: "6b3aa5a3071ea5ec911bae3dee02a496" + hash: "3da075fccb3d26f30530a69f86d999a8" } Frame { msec: 3936 - hash: "d1b1536b5162e5367db66bb21ccebdcd" + hash: "b0fb39798dfa94d0898e5e0d7afd1277" } Frame { msec: 3952 - hash: "8c8dd0b84be58a3257dbd0210a7b21ab" + hash: "7e41bbe233d6bc7354ba4516edec4841" } Frame { msec: 3968 - hash: "f96cb092836d67c81fdfd3668005e912" + hash: "1d3f24f20ba123940d97f09949cfcc0f" } Frame { msec: 3984 - hash: "7b06694d2fd4dd2def94b11a1e46a391" + hash: "abc7a82d91e28c5a3ee9ffd663c8c7bd" } Frame { msec: 4000 - hash: "cef499e6c1665d2bd4a4322d4334234a" + hash: "e685c0218a3d80584013806707693eb0" } Frame { msec: 4016 - hash: "664503d5cef2676e287c363a488e91f1" + hash: "6ff98dc7eb0453f058a5d4cadf86ddf4" } Frame { msec: 4032 - hash: "cefa44e348ea0d6955a71c7eb0a9b45c" + hash: "5a3d0c2c95cb85678f32a8b68dc8d399" } Frame { msec: 4048 - hash: "0ee5684bf4d5b54c5bc9aeefcb98a3d1" + hash: "d5bde2f063d524ac0e7bcef26d543668" } Frame { msec: 4064 - hash: "fb6667f1c516187cfb93774469ea8165" + hash: "64e7bc5e0798ecd009fd05cbc1523977" } Frame { msec: 4080 - hash: "fba776d4d3056bf64e335de876e118be" + hash: "3c87a9ee92661da2aacc09b71dd393ca" } Frame { msec: 4096 - hash: "a49aa08c4bd8a1ae9420e0962cf77e01" + hash: "bf4806e0e8cb73cded37ca97966078d7" } Frame { msec: 4112 - hash: "bff31d464ae9fc68adf0c8072b637592" + hash: "a5956031dac15dba64bf49c9d308c9c7" } Frame { msec: 4128 - hash: "23bd0afacb2d9bd009c9b5006dc6adf1" + hash: "51395284acf731266eaed86387ad768a" } Frame { msec: 4144 - hash: "d918e94e5be77741d1172fbf960db07e" + hash: "489ab28b773d48b8fdf9cf674b1da87f" } Frame { msec: 4160 - hash: "9abce75f201e20a730e79a672bf837e8" + hash: "4c6a5b7442a4ff241329157657b8c9f7" } Frame { msec: 4176 - hash: "aae93f5e2a2c6e06dbe78bea4e6b1283" + hash: "629faa780676c705ca8349b8765ed38b" } Frame { msec: 4192 - hash: "66cba82f479ae6536800b05f6d694884" + hash: "28654cb8801bea906a4f181004ed0e85" } Frame { msec: 4208 - hash: "d79d43b820c4a53735cfb84288dd5efd" + hash: "2abf774ccf33e6d0af4a8c4154e2ab2a" } Frame { msec: 4224 - hash: "fe0237b64a2ef664ce2c3028b730fdc4" + hash: "f1cbdf35081b08b676d1661834829c9a" } Frame { msec: 4240 - hash: "771b02756dadb0a1f268166138f7cad4" + hash: "a49ef4ec40d59be1e872c6f8bcdbbb4c" } Frame { msec: 4256 - hash: "cbd224a02668f57413b6999dfb141723" + hash: "dab02c8afd3914177bfdf29e68b54291" } Frame { msec: 4272 - hash: "f770a74ce40615095798b244af3cc097" + hash: "7bdca9571a346117277b0de6fa1f6e5e" } Frame { msec: 4288 - hash: "faea3d28eb65656392860d888ec087b1" + hash: "11dc19768b1a4a787f46082a583c068c" } Frame { msec: 4304 - hash: "1f1d5ee10403184ab83ec5c1f94c4290" + hash: "5e72d13702108d55d650a01c1caf2cfb" } Frame { msec: 4320 - hash: "501253b40939d98beac9db85d3cd5b4b" + hash: "e5a379841ae54f07d54c4baa78fa7b69" } Frame { msec: 4336 - hash: "0819ece70a98a3ea4371947375b52d46" + hash: "88d2363709d377cad251dc956b0ff866" } Frame { msec: 4352 - hash: "2b5f64e4a03aa416a4cf172c99aec498" + hash: "5e6db7322e69f41d37efdd35a769df4e" } Frame { msec: 4368 - hash: "931a6fa175b8d540fc745d425a9b93b3" + hash: "cc781d136bb48a1a41bd9243327bacc3" } Frame { msec: 4384 - hash: "fa6f54fae79a428029fbd0ae6481bcc5" + hash: "69612d6379a204fa1e1c6d7b58f78370" } Frame { msec: 4400 - hash: "7796756dfd30688ed74c2e6e0b05ca5a" + hash: "a81c15225bc81a19e22375532a5457ab" } Frame { msec: 4416 - hash: "b42cfbfe1527412b977b8e2c7506cdf0" + hash: "a97bb0ac528a1377ef8f6bf655795b69" } Frame { msec: 4432 - hash: "c81300e8d29770c0efd2ab91d75a669a" + hash: "7fa6d66219c66ae8aec43e44626b427a" } Frame { msec: 4448 - hash: "923494f5147a85432e6efbcf5b79e26a" + hash: "99f47bc80b706692f16c6c5fa3c0c85d" } Frame { msec: 4464 - hash: "3aaffee732cb243bbda5df938f487b2d" + hash: "55d6cf7f545c74ed59a8bf040f9d5d58" } Frame { msec: 4480 - hash: "ce8e33f621c7f5cd5047da86bdef4084" + hash: "1a07d14fa7866c5268e622d0925cbf4d" } Frame { msec: 4496 - hash: "55e2bc371ea853ee4f3ba22e35c20e8e" + hash: "a41b281563c401d0e4ff55f4a3c45e18" } Frame { msec: 4512 - hash: "e8bec4813a6c8f212c70019f907ba904" + hash: "6bff67c2f53a4e620c63eea539f4abe0" } Frame { msec: 4528 - hash: "aae9dd25ca9935c478e5d9fa629c6f70" + hash: "a5f06e5ff2fd7f390279f7df822c8297" } Frame { msec: 4544 - hash: "30828a796072deb6e6505090dbc2c840" + hash: "213b174770c13105b89a1d88cd2f0b7c" } Frame { msec: 4560 - hash: "c8ebeb539a6ebb2ca47544f7f1617da9" + hash: "dde34ca92317a54ddaa2f9bff515d91c" } Frame { msec: 4576 - hash: "3ad9a23b57b0938a430c636910dc312f" + hash: "12446cca2aae19fd721cda11bbb51bae" } Frame { msec: 4592 - hash: "1a12587ebbae18dd761c70c4ed845fa5" + hash: "f4d00502cab0a843563fcfd336b74596" } Frame { msec: 4608 - hash: "f1d6ee0cd7aaa221d151c2d32e963358" + hash: "b6ae2b396adf6068ef3a6027e4b175db" } Frame { msec: 4624 - hash: "e9bbf398abc09d9740dce4e3843c53f4" + hash: "370dabffdfc0bebf5d25abfaefff399c" } Frame { msec: 4640 - hash: "f839c105f1897f028611d557b11f5814" + hash: "fd496e8c03f85a872bd5ee6e8a85db7f" } Frame { msec: 4656 - hash: "b923b46ccfe53ceb7ea228b12f44842d" + hash: "0999335427d63f318e166ea8662c4c22" } Frame { msec: 4672 - hash: "8e3708a8f2ba63f7cb01b8d66d1b3dec" + hash: "5a4eb9267cd35a71f6c2daaca1a582be" } Frame { msec: 4688 - hash: "68659fce94c9d019a1d5da6273186674" + hash: "4270d7a26d56f1d805b647c5ec7cc6ce" } Frame { msec: 4704 - hash: "56797caf6f2987b7d03c0401871d87e3" + hash: "334f1e3c8520196016352bf4d00fbc18" } Frame { msec: 4720 - hash: "de0d89aaa5b1ce0ed99d2906b63e7434" + hash: "2bf704e85c197c776a188927a80deaad" } Frame { msec: 4736 - hash: "e3802a76b64eeaeae06b23134b5198a9" + hash: "e2c5c42e55dc185977bd5049eb4bd3d2" } Frame { msec: 4752 - hash: "1a3ddf57aa429a407705ae268441c5b5" + hash: "7ead4353fdc135d6b959be0ce22955e3" } Frame { msec: 4768 - hash: "319b09c0e4a8c0d1f507594b53a407c4" + hash: "ab42998e1e17ac8637d76dc0cf356c7a" } Frame { msec: 4784 - hash: "fd54c9ee19133b0f75c56e4d6472cdad" + hash: "030f34f8caf0814eaaf18ea5fda669dd" } Frame { msec: 4800 - hash: "e6b983b491133a41b753411c587c69ec" + hash: "6e12a04ac25553142875a10a5c8e46e8" } Frame { msec: 4816 @@ -1210,114 +1210,114 @@ VisualTest { } Frame { msec: 4832 - hash: "2760407d7defa4738d7b9ecb243f41a9" + hash: "e2f2ab9a3fe6a3a375341010c91017bd" } Frame { msec: 4848 - hash: "1ff562f05454980d4f677e783ba4bf75" + hash: "9301889debd3932772a1c81314eb1ef2" } Frame { msec: 4864 - hash: "43ad6e0926f812af5553e3a8492404e9" + hash: "671feec6eb1166c612a22405db9c044e" } Frame { msec: 4880 - hash: "b9c34d52c0c44dcdf8a2ca8a0e20ae65" + hash: "648215ffa5448dc173165d24389c014e" } Frame { msec: 4896 - hash: "4fd7f6d183626686569462a9828837d2" + hash: "a70806b54806f29d0e240cd63d86b77e" } Frame { msec: 4912 - hash: "3b904440f68aa0009707b5f3a0c2af74" + hash: "4bf9ffe611c52c21fbdb84221d3d4dba" } Frame { msec: 4928 - hash: "cc58910f0881ec5b3cb2eec404c19e16" + hash: "ae78202b0ebd4c13a92d468a7470bdc9" } Frame { msec: 4944 - hash: "8b638f369c3629530d91e6acac8c5fdf" + hash: "fb0c3d6c3e3479abb6a1b44b1a5f3785" } Frame { msec: 4960 - hash: "b403e21b14646ac0cdaee2027125c0ad" + hash: "48906c21e17479807f736d7f7713f6b0" } Frame { msec: 4976 - hash: "d037545cc68b7582c400c8c9da49ff2a" + hash: "a661a461542b3078dd1dad25bf6d8414" } Frame { msec: 4992 - hash: "551435ecb008ff217eb65a5a77a28090" + hash: "387deb0df0c59cfb120313946c4e5c9a" } Frame { msec: 5008 - hash: "a1684c1c0938386bbfb309969114beee" + hash: "f2473c6e4877f3035f0b511ff2d27684" } Frame { msec: 5024 - hash: "c95868a45ccb031ea1d440bedd1fc33f" + hash: "f88d3767ccd773930ef9d99dfd0e8c17" } Frame { msec: 5040 - hash: "eb78d75fbf3ef0b88c072f69ac3f490d" + hash: "aef8a93d2caafec839d425184176bcc7" } Frame { msec: 5056 - hash: "6f612fe36fa8028a75f6149390bd3585" + hash: "e73c4521144b2c810f15239e6d8fa468" } Frame { msec: 5072 - hash: "7906071fe656ccf18d24c100950b6a7a" + hash: "a66856750cc5aa7a21ffb6e0a9c94306" } Frame { msec: 5088 - hash: "064a0b9a0adb235fd52a6d53b65c9d1c" + hash: "22bce57e360790c356564a0568ec3bee" } Frame { msec: 5104 - hash: "f42b6952937376ae34f7ef493e86aee6" + hash: "55edcaeed37c1390eee2619d52a2eb03" } Frame { msec: 5120 - hash: "3444491cc10b0ae2f298ac3aefcda77c" + hash: "51d8495324954f1bd62caa67d15e9ab2" } Frame { msec: 5136 - hash: "ce5adf6c5c4d5e385ce7e461e380b00e" + hash: "bfcbba7e970af922ee87fbbe936eaa84" } Frame { msec: 5152 - hash: "6b6c1a422f778935b400c9a170439ec4" + hash: "a7652fe427ca7b8ef37dbf9a6097f8af" } Frame { msec: 5168 - hash: "fdaff741a826c10cb9799adc70d92145" + hash: "d5ab00fc274a7fd568af514c55f24e04" } Frame { msec: 5184 - hash: "259da9a4c2bb9c89d16dd1943645e836" + hash: "71fd1fe13a14632ff54ad7a87be68bca" } Frame { msec: 5200 - hash: "fd2903f4b3d7086981a89e87e460a7ba" + hash: "761f9b41ce4136619f89c73746ab176e" } Frame { msec: 5216 - hash: "9860af14b459925078467f334bf41e42" + hash: "cfd826f91f6f880816d505c93a8f125a" } Frame { msec: 5232 - hash: "ae2b8b255d48c12a954f02c63e0d5aa4" + hash: "33fbc77640cc73c17a0f68db5f70ddec" } Frame { msec: 5248 - hash: "c33e9369e76654433e97b2b72cca7911" + hash: "ef925f6709f7603d8acddbbe3e3b0426" } Frame { msec: 5264 - hash: "7fa3de8afdeb61c6e2e87cde2e96152f" + hash: "044c1f37e37a68fbfbb9ddbc2da4300a" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png index 19a7ea1..8d74b8d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png index e25493f..8a642d2 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png index 5800e13..5698741 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png index 29e8168..7f56f34 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png index 19a7ea1..8d74b8d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml index 955ebbd..a4ba005 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml @@ -10,95 +10,95 @@ VisualTest { } Frame { msec: 32 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 48 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 64 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 80 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 96 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 112 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 128 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 144 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 160 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 176 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 192 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 208 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 224 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 240 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 256 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 272 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 288 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 304 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 320 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 336 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 352 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 368 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 384 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Key { type: 6 @@ -110,15 +110,15 @@ VisualTest { } Frame { msec: 400 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 416 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 432 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Key { type: 7 @@ -130,27 +130,27 @@ VisualTest { } Frame { msec: 448 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 464 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 480 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 496 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 512 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 528 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Key { type: 6 @@ -162,15 +162,15 @@ VisualTest { } Frame { msec: 544 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 560 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 576 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Key { type: 7 @@ -182,27 +182,27 @@ VisualTest { } Frame { msec: 592 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 608 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 624 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 640 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 656 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 672 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Key { type: 6 @@ -214,19 +214,19 @@ VisualTest { } Frame { msec: 688 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 704 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 720 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 736 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Key { type: 7 @@ -238,23 +238,23 @@ VisualTest { } Frame { msec: 752 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 768 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 784 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 800 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 816 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Key { type: 6 @@ -266,19 +266,19 @@ VisualTest { } Frame { msec: 832 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 848 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 864 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 880 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Key { type: 7 @@ -290,19 +290,19 @@ VisualTest { } Frame { msec: 896 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 912 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 928 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 944 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Key { type: 6 @@ -314,7 +314,7 @@ VisualTest { } Frame { msec: 960 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 976 @@ -322,11 +322,11 @@ VisualTest { } Frame { msec: 992 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 1008 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Key { type: 7 @@ -338,23 +338,23 @@ VisualTest { } Frame { msec: 1024 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 1040 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 1056 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 1072 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 1088 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Key { type: 6 @@ -366,15 +366,15 @@ VisualTest { } Frame { msec: 1104 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 1120 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 1136 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Key { type: 7 @@ -386,23 +386,23 @@ VisualTest { } Frame { msec: 1152 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 1168 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 1184 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 1200 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 1216 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Key { type: 6 @@ -414,19 +414,19 @@ VisualTest { } Frame { msec: 1232 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 1248 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 1264 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 1280 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Key { type: 7 @@ -438,19 +438,19 @@ VisualTest { } Frame { msec: 1296 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 1312 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 1328 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 1344 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Key { type: 6 @@ -462,19 +462,19 @@ VisualTest { } Frame { msec: 1360 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1376 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1392 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1408 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Key { type: 7 @@ -486,23 +486,23 @@ VisualTest { } Frame { msec: 1424 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1440 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1456 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1472 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1488 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Key { type: 6 @@ -514,15 +514,15 @@ VisualTest { } Frame { msec: 1504 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1520 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1536 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Key { type: 7 @@ -534,79 +534,79 @@ VisualTest { } Frame { msec: 1552 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1568 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1584 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1600 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1616 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1632 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1648 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1664 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1680 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1696 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1712 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1728 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1744 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1760 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1776 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1792 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1808 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1824 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Frame { msec: 1840 - hash: "79ad12250ec5379ed79ad01604968fe0" + hash: "da047993eb77afffee6b8f0f210ca2d6" } Key { type: 6 @@ -618,23 +618,23 @@ VisualTest { } Frame { msec: 1856 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1872 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1888 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1904 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1920 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1936 @@ -642,15 +642,15 @@ VisualTest { } Frame { msec: 1952 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1968 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 1984 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Key { type: 7 @@ -662,23 +662,23 @@ VisualTest { } Frame { msec: 2000 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 2016 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 2032 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 2048 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Frame { msec: 2064 - hash: "0a110e257ae412b8440a17be98a6b7f5" + hash: "6f08f7b6337d5ebb305579bb71ba31d8" } Key { type: 6 @@ -690,23 +690,23 @@ VisualTest { } Frame { msec: 2080 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2096 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2112 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2128 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2144 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Key { type: 7 @@ -718,23 +718,23 @@ VisualTest { } Frame { msec: 2160 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2176 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2192 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2208 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Frame { msec: 2224 - hash: "162c39ecb50d0a2a03953cca07c493ff" + hash: "b80db720c6371aeaf99f4787fec2c5a3" } Key { type: 6 @@ -746,11 +746,11 @@ VisualTest { } Frame { msec: 2240 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 2256 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Key { type: 7 @@ -762,23 +762,23 @@ VisualTest { } Frame { msec: 2272 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 2288 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 2304 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 2320 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Frame { msec: 2336 - hash: "0386e92fe3ea2eda40b6f785419cf9f7" + hash: "c8b5e39f4930399527236905cdbcb546" } Key { type: 6 @@ -790,15 +790,15 @@ VisualTest { } Frame { msec: 2352 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2368 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2384 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Key { type: 7 @@ -810,55 +810,55 @@ VisualTest { } Frame { msec: 2400 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2416 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2432 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2448 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2464 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2480 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2496 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2512 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2528 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2544 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2560 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2576 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Frame { msec: 2592 - hash: "671d2393c31db71d33cd29482294b855" + hash: "3624b85c9362dfeff911cd5426f11ada" } Key { type: 6 @@ -870,23 +870,23 @@ VisualTest { } Frame { msec: 2608 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2624 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2640 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2656 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2672 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Key { type: 7 @@ -898,23 +898,23 @@ VisualTest { } Frame { msec: 2688 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2704 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2720 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2736 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Frame { msec: 2752 - hash: "59923f379655d063d27641c88064c071" + hash: "fa22742b8778a3b63ce7d6699dbf7482" } Key { type: 6 @@ -926,15 +926,15 @@ VisualTest { } Frame { msec: 2768 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 2784 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 2800 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Key { type: 7 @@ -946,19 +946,19 @@ VisualTest { } Frame { msec: 2816 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 2832 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 2848 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Frame { msec: 2864 - hash: "5815bbb03307e196fa567ae273366394" + hash: "b069c174a1b9589ed3137cd01f870b17" } Key { type: 6 @@ -970,7 +970,7 @@ VisualTest { } Frame { msec: 2880 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 2896 @@ -978,11 +978,11 @@ VisualTest { } Frame { msec: 2912 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 2928 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Key { type: 7 @@ -994,23 +994,23 @@ VisualTest { } Frame { msec: 2944 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 2960 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 2976 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 2992 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Frame { msec: 3008 - hash: "7f418dcd1c4ef954cbb66e16361b8871" + hash: "53f9d63bacad27fd73c2f84b82599dbc" } Key { type: 6 @@ -1022,23 +1022,23 @@ VisualTest { } Frame { msec: 3024 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3040 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3056 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3072 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3088 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Key { type: 7 @@ -1050,155 +1050,155 @@ VisualTest { } Frame { msec: 3104 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3120 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3136 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3152 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3168 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3184 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3200 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3216 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3232 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3248 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3264 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3280 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3296 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3312 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3328 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3344 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3360 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3376 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3392 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3408 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3424 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3440 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3456 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3472 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3488 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3504 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3520 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3536 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3552 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3568 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3584 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3600 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3616 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3632 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3648 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3664 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3680 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Frame { msec: 3696 - hash: "ff9e0c6cfbbbd68708698875037ac3d3" + hash: "9294b20b7160322e1f2eecaee6ebf856" } Key { type: 6 @@ -1210,27 +1210,27 @@ VisualTest { } Frame { msec: 3712 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3728 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3744 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3760 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3776 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3792 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Key { type: 7 @@ -1242,15 +1242,15 @@ VisualTest { } Frame { msec: 3808 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3824 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3840 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3856 @@ -1258,114 +1258,114 @@ VisualTest { } Frame { msec: 3872 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3888 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3904 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3920 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3936 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3952 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3968 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 3984 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4000 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4016 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4032 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4048 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4064 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4080 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4096 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4112 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4128 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4144 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4160 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4176 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4192 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4208 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4224 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4240 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4256 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4272 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4288 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } Frame { msec: 4304 - hash: "5efa0360e73361a50a5fb4e2b7a650b5" + hash: "80122e3e0d124c01b2769c1c88aa4a13" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png index a6593c9..63b1779 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png index c9e17f9..7924652 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png index 32a5600..e77bfde 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png index a63fd07..67d7e52 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml index c752f0f..ee29db6 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml @@ -10,7 +10,7 @@ VisualTest { } Frame { msec: 32 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Key { type: 6 @@ -22,83 +22,83 @@ VisualTest { } Frame { msec: 48 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 64 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 80 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 96 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 112 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 128 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 144 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 160 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 176 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 192 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 208 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 224 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 240 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 256 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 272 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 288 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 304 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 320 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 336 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Frame { msec: 352 - hash: "eff6a4491bc00e5570ea73a1371f63fc" + hash: "75bcecaf83ffc9b851894db0be2c02bc" } Key { type: 6 @@ -110,23 +110,23 @@ VisualTest { } Frame { msec: 368 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 384 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 400 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 416 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 432 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Key { type: 7 @@ -138,27 +138,27 @@ VisualTest { } Frame { msec: 448 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 464 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 480 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 496 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 512 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 528 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Key { type: 7 @@ -170,43 +170,43 @@ VisualTest { } Frame { msec: 544 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 560 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 576 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 592 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 608 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 624 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 640 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 656 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 672 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Frame { msec: 688 - hash: "00097f2bb5cf4ea412db48acb93ffd76" + hash: "1a9f4d47e3982ce68eee8446fd735487" } Key { type: 6 @@ -218,23 +218,23 @@ VisualTest { } Frame { msec: 704 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 720 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 736 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 752 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 768 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Key { type: 7 @@ -246,23 +246,23 @@ VisualTest { } Frame { msec: 784 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 800 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 816 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 832 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Frame { msec: 848 - hash: "94e683223900efc840296b86ce934ec3" + hash: "9ab137169f2ea0f4b140a6e668f59ad2" } Key { type: 6 @@ -274,15 +274,15 @@ VisualTest { } Frame { msec: 864 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Frame { msec: 880 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Frame { msec: 896 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Key { type: 7 @@ -294,19 +294,19 @@ VisualTest { } Frame { msec: 912 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Frame { msec: 928 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Frame { msec: 944 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Frame { msec: 960 - hash: "24a0a2f12031b23a98d65178f0d6d58d" + hash: "3080734a2da042b87ef9177cbb314835" } Frame { msec: 976 @@ -322,19 +322,19 @@ VisualTest { } Frame { msec: 992 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1008 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1024 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1040 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Key { type: 7 @@ -346,51 +346,51 @@ VisualTest { } Frame { msec: 1056 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1072 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1088 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1104 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1120 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1136 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1152 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1168 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1184 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1200 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1216 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Frame { msec: 1232 - hash: "7dde2dd8afe7283dd0601b12831f8946" + hash: "e591963b05361595383b1a60eec289cb" } Key { type: 6 @@ -402,15 +402,15 @@ VisualTest { } Frame { msec: 1248 - hash: "e098aa83b3287f67aba57e134e871d62" + hash: "8a528bf3110bace8275f6fe33ce528b9" } Frame { msec: 1264 - hash: "e098aa83b3287f67aba57e134e871d62" + hash: "8a528bf3110bace8275f6fe33ce528b9" } Frame { msec: 1280 - hash: "e098aa83b3287f67aba57e134e871d62" + hash: "8a528bf3110bace8275f6fe33ce528b9" } Key { type: 7 @@ -422,15 +422,15 @@ VisualTest { } Frame { msec: 1296 - hash: "e098aa83b3287f67aba57e134e871d62" + hash: "8a528bf3110bace8275f6fe33ce528b9" } Frame { msec: 1312 - hash: "e098aa83b3287f67aba57e134e871d62" + hash: "8a528bf3110bace8275f6fe33ce528b9" } Frame { msec: 1328 - hash: "e098aa83b3287f67aba57e134e871d62" + hash: "8a528bf3110bace8275f6fe33ce528b9" } Key { type: 6 @@ -442,39 +442,39 @@ VisualTest { } Frame { msec: 1344 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1360 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1376 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1392 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1408 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1424 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1440 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1456 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Frame { msec: 1472 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Key { type: 7 @@ -486,7 +486,7 @@ VisualTest { } Frame { msec: 1488 - hash: "3f0a9e0cfd6937c943273bc1d39ce336" + hash: "03d56caa0c86b5544d1f5148e0dccd92" } Key { type: 6 @@ -498,19 +498,19 @@ VisualTest { } Frame { msec: 1504 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1520 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1536 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1552 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Key { type: 7 @@ -522,27 +522,27 @@ VisualTest { } Frame { msec: 1568 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1584 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1600 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1616 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1632 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Frame { msec: 1648 - hash: "b78259d22dd86c1dd7ba722795e7e155" + hash: "d9aac9ed4ca0ad97b440db3ac7384001" } Key { type: 6 @@ -554,23 +554,23 @@ VisualTest { } Frame { msec: 1664 - hash: "1402f8182c74124a1fb34ecd78fa4819" + hash: "a2e8a6a742b11b4f30a2d75df14d5f47" } Frame { msec: 1680 - hash: "1402f8182c74124a1fb34ecd78fa4819" + hash: "a2e8a6a742b11b4f30a2d75df14d5f47" } Frame { msec: 1696 - hash: "1402f8182c74124a1fb34ecd78fa4819" + hash: "a2e8a6a742b11b4f30a2d75df14d5f47" } Frame { msec: 1712 - hash: "1402f8182c74124a1fb34ecd78fa4819" + hash: "a2e8a6a742b11b4f30a2d75df14d5f47" } Frame { msec: 1728 - hash: "1402f8182c74124a1fb34ecd78fa4819" + hash: "a2e8a6a742b11b4f30a2d75df14d5f47" } Key { type: 6 @@ -582,7 +582,7 @@ VisualTest { } Frame { msec: 1744 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Key { type: 7 @@ -594,15 +594,15 @@ VisualTest { } Frame { msec: 1760 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Frame { msec: 1776 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Frame { msec: 1792 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Key { type: 7 @@ -614,19 +614,19 @@ VisualTest { } Frame { msec: 1808 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Frame { msec: 1824 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Frame { msec: 1840 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Frame { msec: 1856 - hash: "93d5b02d77829aef8f8afa0f5a9e93d1" + hash: "021641e69fef4720acf6af15d4a2da82" } Key { type: 6 @@ -638,19 +638,19 @@ VisualTest { } Frame { msec: 1872 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 1888 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 1904 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 1920 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Key { type: 7 @@ -666,23 +666,23 @@ VisualTest { } Frame { msec: 1952 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 1968 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 1984 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 2000 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Frame { msec: 2016 - hash: "1f3b2da0ad387187f202857ed9bb4934" + hash: "46ece14e3a61aefcb28b3c888ac7ea59" } Key { type: 6 @@ -694,11 +694,11 @@ VisualTest { } Frame { msec: 2032 - hash: "f2fd02bca5f5bf26013957e11d3f11ce" + hash: "ffa55ac51f20c82725cadbb445908fd2" } Frame { msec: 2048 - hash: "f2fd02bca5f5bf26013957e11d3f11ce" + hash: "ffa55ac51f20c82725cadbb445908fd2" } Key { type: 7 @@ -710,11 +710,11 @@ VisualTest { } Frame { msec: 2064 - hash: "f2fd02bca5f5bf26013957e11d3f11ce" + hash: "ffa55ac51f20c82725cadbb445908fd2" } Frame { msec: 2080 - hash: "f2fd02bca5f5bf26013957e11d3f11ce" + hash: "ffa55ac51f20c82725cadbb445908fd2" } Key { type: 6 @@ -726,19 +726,19 @@ VisualTest { } Frame { msec: 2096 - hash: "550f7f60df621c951ce7d5271aabc41f" + hash: "e9e2edb9176cb57506a3f130fca15d1e" } Frame { msec: 2112 - hash: "550f7f60df621c951ce7d5271aabc41f" + hash: "e9e2edb9176cb57506a3f130fca15d1e" } Frame { msec: 2128 - hash: "550f7f60df621c951ce7d5271aabc41f" + hash: "e9e2edb9176cb57506a3f130fca15d1e" } Frame { msec: 2144 - hash: "550f7f60df621c951ce7d5271aabc41f" + hash: "e9e2edb9176cb57506a3f130fca15d1e" } Key { type: 6 @@ -758,19 +758,19 @@ VisualTest { } Frame { msec: 2160 - hash: "d2aca851dde9f96747d3f54fb831144a" + hash: "87c3cf93b47a766d6373ecaec7239dd4" } Frame { msec: 2176 - hash: "d2aca851dde9f96747d3f54fb831144a" + hash: "87c3cf93b47a766d6373ecaec7239dd4" } Frame { msec: 2192 - hash: "d2aca851dde9f96747d3f54fb831144a" + hash: "87c3cf93b47a766d6373ecaec7239dd4" } Frame { msec: 2208 - hash: "d2aca851dde9f96747d3f54fb831144a" + hash: "87c3cf93b47a766d6373ecaec7239dd4" } Key { type: 6 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2224 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Key { type: 7 @@ -794,23 +794,23 @@ VisualTest { } Frame { msec: 2240 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Frame { msec: 2256 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Frame { msec: 2272 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Frame { msec: 2288 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Frame { msec: 2304 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Key { type: 7 @@ -822,11 +822,11 @@ VisualTest { } Frame { msec: 2320 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Frame { msec: 2336 - hash: "9ed75a4dc5b88fe1c1531833db1dd364" + hash: "1fb4aa190807d169d1ceaff7d9fa92ad" } Key { type: 6 @@ -838,27 +838,27 @@ VisualTest { } Frame { msec: 2352 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2368 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2384 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2400 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2416 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2432 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Key { type: 7 @@ -870,19 +870,19 @@ VisualTest { } Frame { msec: 2448 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2464 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2480 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Frame { msec: 2496 - hash: "39079b642f00ea767114d5a831be939a" + hash: "e9cd789b114befb4637fcff39d4413b0" } Key { type: 6 @@ -894,15 +894,15 @@ VisualTest { } Frame { msec: 2512 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2528 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2544 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Key { type: 7 @@ -914,87 +914,87 @@ VisualTest { } Frame { msec: 2560 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2576 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2592 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2608 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2624 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2640 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2656 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2672 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2688 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2704 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2720 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2736 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2752 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2768 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2784 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2800 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2816 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2832 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2848 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2864 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2880 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2896 @@ -1002,42 +1002,42 @@ VisualTest { } Frame { msec: 2912 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2928 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2944 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2960 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2976 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 2992 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 3008 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 3024 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 3040 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } Frame { msec: 3056 - hash: "92035cf4d7df9e637567c7834f23b030" + hash: "15f91fda9bcc8a2a9ebf3b9c32f61efb" } } -- cgit v0.12 From a3967216f29b3ec8303c7aa71959dd30ae18ecc3 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 3 Dec 2010 11:06:29 +0200 Subject: Unify epocroot usage in createpackage and patch_capabilities scripts Some tools calls required epoc32/tools to be in path and some didn't. Now all tools calls will use tools from under %EPOCROOT%epoc32/tools if EPOCROOT env variable is defined. Reviewed-by: Janne Koskinen --- bin/createpackage.pl | 15 +++++++-------- bin/patch_capabilities.pl | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/bin/createpackage.pl b/bin/createpackage.pl index 6b83585..87ed29e 100755 --- a/bin/createpackage.pl +++ b/bin/createpackage.pl @@ -144,11 +144,13 @@ unless (GetOptions('i|install' => \$install, } my $epocroot = $ENV{EPOCROOT}; +my $epocToolsDir = ""; if ($epocroot ne "") { $epocroot =~ s,\\,/,g; if ($epocroot =~ m,[^/]$,) { $epocroot = $epocroot."/"; } + $epocToolsDir = "${epocroot}epoc32/tools/"; } my $certfilepath = abs_path(dirname($certfile)); @@ -341,7 +343,7 @@ if($stub) { mkpath($systeminstall); my $stub_sis_name = $systeminstall."/".$stub_sis_name; # Create stub SIS. - system ("${epocroot}epoc32/tools/makesis -s $pkgoutput $stub_sis_name"); + system ("${epocToolsDir}makesis -s $pkgoutput $stub_sis_name"); } else { if ($certtext eq "Self Signed" && !@certificates @@ -358,11 +360,8 @@ if($stub) { # Create SIS. # The 'and' is because system uses 0 to indicate success. - if($epocroot) { - system ("${epocroot}epoc32/tools/makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed"); - } else { - system ("makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed"); - } + system ("${epocToolsDir}makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed"); + print("\n"); my $targetInsert = ""; @@ -389,7 +388,7 @@ if($stub) { my $relcert = File::Spec->abs2rel($certificate); my $relkey = File::Spec->abs2rel($key); # The 'and' is because system uses 0 to indicate success. - system ("signsis $unsigned_sis_name $signed_sis_name $relcert $relkey $passphrase") and die ("ERROR: signsis failed"); + system ("${epocToolsDir}signsis $unsigned_sis_name $signed_sis_name $relcert $relkey $passphrase") and die ("ERROR: signsis failed"); # Check if creating signed SIS Succeeded stat($signed_sis_name); @@ -402,7 +401,7 @@ if($stub) { my $relcert = File::Spec->abs2rel(File::Spec->rel2abs( $row->[0], $certfilepath)); my $relkey = File::Spec->abs2rel(File::Spec->rel2abs( $row->[1], $certfilepath)); - system ("signsis $signed_sis_name $signed_sis_name $relcert $relkey $row->[2]"); + system ("${epocToolsDir}signsis $signed_sis_name $signed_sis_name $relcert $relkey $row->[2]"); print ("\tAdditionally signed the SIS with certificate: $row->[0]!\n"); } diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index df71339..c3fb89f 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -78,6 +78,16 @@ sub trim($) { return $string; } +my $epocroot = $ENV{EPOCROOT}; +my $epocToolsDir = ""; +if ($epocroot ne "") { + $epocroot =~ s,\\,/,g; + if ($epocroot =~ m,[^/]$,) { + $epocroot = $epocroot."/"; + } + $epocToolsDir = "${epocroot}epoc32/tools/"; +} + my $nullDevice = "/dev/null"; $nullDevice = "NUL" if ($^O =~ /MSWin/); @@ -237,7 +247,7 @@ if (@ARGV) } print ("\n"); - my $baseCommandToExecute = "elftran -vid 0x0 -capability \"%s\" "; + my $baseCommandToExecute = "${epocToolsDir}elftran -vid 0x0 -capability \"%s\" "; # Actually set the capabilities of the listed binaries. foreach my $binaryPath(@binaries) @@ -256,7 +266,7 @@ if (@ARGV) # Test which capabilities are present and then restrict them to the allowed set. # This avoid raising the capabilities of apps that already have none. my $dllCaps; - open($dllCaps, "elftran -dump s $binaryPath |") or die ("ERROR: Could not execute elftran"); + open($dllCaps, "${epocToolsDir}elftran -dump s $binaryPath |") or die ("ERROR: Could not execute elftran"); my $capsFound = 0; my $originalVid; my @capabilitiesToSet; @@ -329,8 +339,6 @@ if (@ARGV) system ("$commandToExecute > $nullDevice"); $somethingPatched = true; } - ## Create another command line to check that the set capabilities are correct. - #$commandToExecute = "elftran -dump s ".$binaryPath; } if ($checkFailed) { -- cgit v0.12 From 2eec8cbb2227db6e84a268d53591dd2ef026cbeb Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Fri, 3 Dec 2010 13:38:11 +0100 Subject: purge vestiges of imageformat-plugins The imageformat-plugins variable is never referenced by the .pr[io] for building Qt. Its presence in configure.exe appears to be a vestige of an earlier state of affairs. As a reminder, jpeg, mng, tiff and gif can be built into QtGui or built as plugins. The default is plugin. During configuration, this can be overridden by adding, for example, "no-jpeg" to disable support altogether or "jpeg" to build into QtGui. Merge-request: 961 Reviewed-by: Oswald Buddenhagen --- tools/configure/configureapp.cpp | 8 -------- tools/configure/configureapp.h | 2 -- 2 files changed, 10 deletions(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index f4fd7c6..9649aba 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2471,15 +2471,11 @@ void Configure::generateOutputVars() qtConfig += "no-gif"; else if (dictionary[ "GIF" ] == "yes") qtConfig += "gif"; - else if (dictionary[ "GIF" ] == "plugin") - qmakeFormatPlugins += "gif"; if (dictionary[ "TIFF" ] == "no") qtConfig += "no-tiff"; else if (dictionary[ "TIFF" ] == "yes") qtConfig += "tiff"; - else if (dictionary[ "TIFF" ] == "plugin") - qmakeFormatPlugins += "tiff"; if (dictionary[ "LIBTIFF" ] == "system") qtConfig += "system-tiff"; @@ -2487,8 +2483,6 @@ void Configure::generateOutputVars() qtConfig += "no-jpeg"; else if (dictionary[ "JPEG" ] == "yes") qtConfig += "jpeg"; - else if (dictionary[ "JPEG" ] == "plugin") - qmakeFormatPlugins += "jpeg"; if (dictionary[ "LIBJPEG" ] == "system") qtConfig += "system-jpeg"; @@ -2807,8 +2801,6 @@ void Configure::generateOutputVars() qmakeVars += QString("styles += ") + qmakeStyles.join(" "); if (!qmakeStylePlugins.isEmpty()) qmakeVars += QString("style-plugins += ") + qmakeStylePlugins.join(" "); - if (!qmakeFormatPlugins.isEmpty()) - qmakeVars += QString("imageformat-plugins += ") + qmakeFormatPlugins.join(" "); if (dictionary["QMAKESPEC"].endsWith("-g++")) { QString includepath = qgetenv("INCLUDE"); diff --git a/tools/configure/configureapp.h b/tools/configure/configureapp.h index b3c07f7..32d1860 100644 --- a/tools/configure/configureapp.h +++ b/tools/configure/configureapp.h @@ -122,8 +122,6 @@ private: QStringList qmakeStyles; QStringList qmakeStylePlugins; - QStringList qmakeFormatPlugins; - QStringList qmakeVars; QStringList qmakeDefines; // makeList[0] for qt and qtmain -- cgit v0.12 From 401ce2a3be40047bdbc3e66be1d88e371a316e16 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 24 Nov 2010 12:47:25 +0100 Subject: build lrelease as part of the "libs" part. currently it is a bootstrapped tool like moc, rcc and uic in src/tools/, so just force it into the same group. every qt build includes the libs part, so this will resolve the translation part's dependency. --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 059aa1a..e5f5745 100755 --- a/configure +++ b/configure @@ -8530,8 +8530,8 @@ PART_ROOTS= for part in $CFG_BUILD_PARTS; do case "$part" in tools) PART_ROOTS="$PART_ROOTS tools" ;; - libs) PART_ROOTS="$PART_ROOTS src" ;; - translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease translations" ;; + libs) PART_ROOTS="$PART_ROOTS src tools/linguist/lrelease" ;; + translations) PART_ROOTS="$PART_ROOTS translations" ;; examples) PART_ROOTS="$PART_ROOTS examples demos" ;; *) ;; esac -- cgit v0.12 From 64836cf058266ac6251d6ff9ae24df655159ac27 Mon Sep 17 00:00:00 2001 From: Oleh Vasyura Date: Mon, 22 Nov 2010 15:26:06 +0200 Subject: Synchronized configure.exe OpenGL options with Unix configure Windows configure tool and Linux configure script use different options for OpenGL modules. Windows configure tool uses -opengl-es-cm and -opengl-es-2. Linux configure script uses -opengl where can be as "desktop", "es1", "es2" and are more common. Windows configure tool is changed to understand Linux OpenGL configure options as well. The old options are retained for compatibility but not documented any more. Reviewed-by: ossi --- tools/configure/configureapp.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 9649aba..050ad62 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -741,6 +741,23 @@ void Configure::parseCmdLine() } else if (configCmdLine.at(i) == "-opengl-es-2") { dictionary[ "OPENGL" ] = "yes"; dictionary[ "OPENGL_ES_2" ] = "yes"; + } else if (configCmdLine.at(i) == "-opengl") { + dictionary[ "OPENGL" ] = "yes"; + i++; + if (i == argCount) + break; + + if (configCmdLine.at(i) == "es1") { + dictionary[ "OPENGL_ES_CM" ] = "yes"; + } else if ( configCmdLine.at(i) == "es2" ) { + dictionary[ "OPENGL_ES_2" ] = "yes"; + } else if ( configCmdLine.at(i) == "desktop" ) { + dictionary[ "OPENGL_ES_2" ] = "yes"; + } else { + cout << "Argument passed to -opengl option is not valid." << endl; + dictionary[ "DONE" ] = "error"; + break; + } } // OpenVG Support ------------------------------------------- @@ -1735,6 +1752,11 @@ bool Configure::displayHelp() desc("QT3SUPPORT", "no","-no-qt3support", "Disables the Qt 3 support functionality.\n"); desc("OPENGL", "no","-no-opengl", "Disables OpenGL functionality\n"); + desc("OPENGL", "no","-opengl ", "Enable OpenGL support with specified API version.\n" + "Available values for :"); + desc("", "", "", " desktop - Enable support for Desktop OpenGL", ' '); + desc("OPENGL_ES_CM", "no", "", " es1 - Enable support for OpenGL ES Common Profile", ' '); + desc("OPENGL_ES_2", "no", "", " es2 - Enable support for OpenGL ES 2.0", ' '); desc("OPENVG", "no","-no-openvg", "Disables OpenVG functionality\n"); desc("OPENVG", "yes","-openvg", "Enables OpenVG functionality"); @@ -1895,8 +1917,7 @@ bool Configure::displayHelp() desc("CETEST", "no", "-no-cetest", "Do not compile Windows CE remote test application"); desc("CETEST", "yes", "-cetest", "Compile Windows CE remote test application"); desc( "-signature ", "Use file for signing the target project"); - desc("OPENGL_ES_CM", "no", "-opengl-es-cm", "Enable support for OpenGL ES Common"); - desc("OPENGL_ES_2", "no", "-opengl-es-2", "Enable support for OpenGL ES 2.0"); + desc("DIRECTSHOW", "no", "-phonon-wince-ds9", "Enable Phonon Direct Show 9 backend for Windows CE"); // Qt\Symbian only options go below here ----------------------------------------------------------------------------- -- cgit v0.12 From 0359135db3ece1eced29b7c867c10f9bd3b7c4bf Mon Sep 17 00:00:00 2001 From: Oleh Vasyura Date: Wed, 17 Nov 2010 14:31:29 +0200 Subject: Adding -dont-process option to Unix configure script This option is supported by Windows configure tool and used in Symbian releases. Reviewed-by: ossi --- configure | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/configure b/configure index e5f5745..5687505 100755 --- a/configure +++ b/configure @@ -800,6 +800,7 @@ CFG_ALSA=auto CFG_PULSEAUDIO=auto CFG_COREWLAN=auto CFG_ICD=auto +CFG_NOPROCESS=no # initalize variables used for installation QT_INSTALL_PREFIX= @@ -2236,6 +2237,12 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=yes fi ;; + dont-process) + CFG_NOPROCESS=yes + ;; + process) + CFG_NOPROCESS=no + ;; audio-backend) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_AUDIO_BACKEND="$VAL" @@ -8397,11 +8404,13 @@ EXEC="" #------------------------------------------------------------------------------- echo "Finding project files. Please wait..." -"$outpath/bin/qmake" -prl -r "${relpath}/projects.pro" -if [ -f "${relpath}/projects.pro" ]; then - mkfile="${outpath}/Makefile" - [ -f "$mkfile" ] && chmod +w "$mkfile" - QTDIR="$outpath" "$outpath/bin/qmake" -spec "$XQMAKESPEC" "${relpath}/projects.pro" -o "$mkfile" +if [ "$CFG_NOPROCESS" != "yes" ]; then + "$outpath/bin/qmake" -prl -r "${relpath}/projects.pro" + if [ -f "${relpath}/projects.pro" ]; then + mkfile="${outpath}/Makefile" + [ -f "$mkfile" ] && chmod +w "$mkfile" + QTDIR="$outpath" "$outpath/bin/qmake" -spec "$XQMAKESPEC" "${relpath}/projects.pro" -o "$mkfile" + fi fi # .projects -> projects to process @@ -8558,13 +8567,17 @@ for file in .projects .projects.3; do *winmain/winmain.pro) [ "$XPLATFORM_MINGW" = "yes" ] || continue SPEC=$XQMAKESPEC ;; - *s60main/s60main.pro) if [ -z "`echo "$XPLATFORM" | grep "symbian" >/dev/null`" ]; then + *s60main/s60main.pro) if [ "$CFG_NOPROCESS" = "yes" ] || [ -z "`echo "$XPLATFORM" | grep "symbian" >/dev/null`"]; then continue fi;; *examples/activeqt/*) continue ;; */qmake/qmake.pro) continue ;; *tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*|*linguist/lrelease*) SPEC=$QMAKESPEC ;; - *) SPEC=$XQMAKESPEC ;; + *) if [ "$CFG_NOPROCESS" = "yes" ]; then + continue + else + SPEC=$XQMAKESPEC + fi;; esac dir=`dirname "$a" | sed -e "s;$sepath;.;g"` test -d "$dir" || mkdir -p "$dir" -- cgit v0.12 From 62385d41ba287908439fb97ab079951e136a9039 Mon Sep 17 00:00:00 2001 From: Oleh Vasyura Date: Wed, 17 Nov 2010 14:34:30 +0200 Subject: VFP type on ARM option in Linux configure script Windows configuration tool uses -fpu option for VFP types. This option is used in Symbian releases but is not supported by Linux configure script. Reviewed-by: ossi --- configure | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 5687505..6eb2a99 100755 --- a/configure +++ b/configure @@ -840,6 +840,9 @@ QT_LIBS_GLIB= QT_CFLAGS_GSTREAMER= QT_LIBS_GSTREAMER= +#flag for Symbian fpu settings +QT_CFLAGS_FPU= + # flags for libconnsettings0 (used for Maemo ICD bearer management plugin) QT_CFLAGS_CONNSETTINGS= QT_LIBS_CONNSETTINGS= @@ -1072,6 +1075,16 @@ while [ "$#" -gt 0 ]; do VAL=`echo $1 | sed 's,-D,,'` fi ;; + -fpu) + VAR="fpu" + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=no + else + shift + VAL=$1 + fi + ;; -I?*|-I) VAR="add_ipath" if [ "$1" = "-I" ]; then @@ -2250,6 +2263,11 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=yes fi ;; + fpu) + if [ "$VAL" != "no" ]; then + QT_CFLAGS_FPU=$VAL + fi + ;; *) UNKNOWN_OPT=yes ;; @@ -7944,6 +7962,12 @@ if [ "$CFG_DEV" = "yes" ]; then QT_CONFIG="$QT_CONFIG private_tests" fi +if [ -z "$QT_CFLAGS_FPU" ]; then + if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null 2>&1; then + QT_CFLAGS_FPU=softvfp + fi +fi + # Make the application arch follow the Qt arch for single arch builds. # (for multiple-arch builds, set CONFIG manually in the application .pro file) if [ `echo "$CFG_MAC_ARCHS" | wc -w` -eq 1 ]; then @@ -7977,10 +8001,11 @@ if [ -n "$QT_GCC_MAJOR_VERSION" ]; then echo "QT_GCC_MINOR_VERSION = $QT_GCC_MINOR_VERSION" >> "$QTCONFIG.tmp" echo "QT_GCC_PATCH_VERSION = $QT_GCC_PATCH_VERSION" >> "$QTCONFIG.tmp" fi -if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null 2>&1; then +if [ -n "$QT_CFLAGS_FPU" ]; then echo "#Qt for symbian FPU settings" >> "$QTCONFIG.tmp" - echo "MMP_RULES += \"ARMFPU softvfp\"" >> "$QTCONFIG.tmp" + echo "MMP_RULES += \"ARMFPU $QT_CFLAGS_FPU\"" >> "$QTCONFIG.tmp" fi + # replace qconfig.pri if it differs from the newly created temp file if cmp -s "$QTCONFIG.tmp" "$QTCONFIG"; then rm -f "$QTCONFIG.tmp" -- cgit v0.12 From b611d84da963372b180b98e0e76761b60f7f23f4 Mon Sep 17 00:00:00 2001 From: Oleh Vasyura Date: Mon, 22 Nov 2010 15:26:06 +0200 Subject: Disable OpenGL on Symbian only by default instead of always Reviewed-by: ossi --- configure | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 6eb2a99..9ffb8a2 100755 --- a/configure +++ b/configure @@ -6670,10 +6670,12 @@ else QCONFIG_FLAGS="$QCONFIG_FLAGS QT_STYLE_S60" fi -# Disable OpenGL on Symbian. +# Just check if OpenGL is not set by command argumets for Symbian. case "$XPLATFORM" in symbian*) - CFG_OPENGL="no" + if [ "$CFG_OPENGL" = "auto" ]; then + CFG_OPENGL="no" + fi ;; esac -- cgit v0.12 From 3f517783d4ce31f970e6e1f2d4ff5add9073da3d Mon Sep 17 00:00:00 2001 From: Oleh Vasyura Date: Wed, 24 Nov 2010 12:29:59 +0100 Subject: Enable Phonon on Symbian by default. Always enable Phonon on Symbian unless it was explicitly disabled. Reviewed-by: ossi --- configure | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure b/configure index 9ffb8a2..86c14dd 100755 --- a/configure +++ b/configure @@ -4903,6 +4903,9 @@ case "$XPLATFORM" in *symbian*) if [ "$CFG_LARGEFILE" = auto ]; then CFG_LARGEFILE=no fi + if [ "$CFG_PHONON" = auto ]; then + CFG_PHONON=yes + fi if test -z "$EPOCROOT"; then echo "Please export EPOCROOT. It should point to the sdk install dir" -- cgit v0.12 From f424c3460f135aee2facc111869b678d65f125a6 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 22 Nov 2010 12:08:39 +0100 Subject: fix misleading uppercasing deprecation warning don't complain about uppercasing in the function's name if the real problem is that it's not defined at all. this is also slighly more efficient, as we try to lowercase only as a fallback now. Reviewed-by: joerg --- qmake/project.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/qmake/project.cpp b/qmake/project.cpp index 2586c57..d967a63 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -1813,11 +1813,10 @@ QMakeProject::doProjectExpand(QString func, QList args_list, for(int i = 0; i < args_list.size(); ++i) args += args_list[i].join(QString(Option::field_sep)); - QString lfunc = func.toLower(); - if (!lfunc.isSharedWith(func)) + ExpandFunc func_t = qmake_expandFunctions().value(func); + if (!func_t && (func_t = qmake_expandFunctions().value(func.toLower()))) warn_msg(WarnDeprecated, "%s:%d: Using uppercased builtin functions is deprecated.", parser.file.toLatin1().constData(), parser.line_no); - ExpandFunc func_t = qmake_expandFunctions().value(lfunc); debug_msg(1, "Running project expand: %s(%s) [%d]", func.toLatin1().constData(), args.join("::").toLatin1().constData(), func_t); -- cgit v0.12 From b552f7c8b5cdc455b87a2688ac0df47fcdf7ac35 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 3 Dec 2010 13:54:22 +0100 Subject: rebuild configure --- configure.exe | Bin 1325568 -> 1325568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/configure.exe b/configure.exe index f8d520a..068701f 100755 Binary files a/configure.exe and b/configure.exe differ -- cgit v0.12 From 19b1ab1f2f4df72621b1bef43a4a24286ae12657 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 16:07:06 +0100 Subject: Fixed a bug by changing the id name to lower case. --- doc/src/getting-started/gettingstartedqml.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc index b767587..e3977bb 100644 --- a/doc/src/getting-started/gettingstartedqml.qdoc +++ b/doc/src/getting-started/gettingstartedqml.qdoc @@ -148,7 +148,7 @@ \code Rectangle { - id:Button + id: button ... property color buttonColor: "lightblue" -- cgit v0.12 From 9679add86ec1562d24d587c6c2343c47ca4b61d7 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 16:09:26 +0100 Subject: Some whitespace fixes. --- doc/src/declarative/modules.qdoc | 64 ++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc index 011eb63..2a2e4ff 100644 --- a/doc/src/declarative/modules.qdoc +++ b/doc/src/declarative/modules.qdoc @@ -31,14 +31,14 @@ \section1 QML Modules -A module is a set of QML content files that can be imported as a unit into a QML +A module is a set of QML content files that can be imported as a unit into a QML application. Modules can be used to organize QML content into independent units, -and they can use a versioning mechanism that allows for independent +and they can use a versioning mechanism that allows for independent upgradability of the modules. While QML component files within the same directory are automatically accessible -within the global namespace, components defined elsewhere must be imported -explicitly using the \c import statement to import them as modules. For +within the global namespace, components defined elsewhere must be imported +explicitly using the \c import statement to import them as modules. For example, an \c import statement is required to use: \list @@ -54,13 +54,13 @@ This can be seen in the snippet commonly found at the top of QML files: \qml import QtQuick 1.0 \endqml - -This imports version 4.7 of the "Qt" module into the global namespace. (The QML + +This imports version 1.0 of the "QtQuick" module into the global namespace. (The QML library itself must be imported to use any of the \l {QML Elements}, as they are not included in the global namespace by default.) -The \c Qt module is an \e installed module; it is found in the -\l{The QML import path}{import path}. There are two types of QML modules: +The \c Qt module is an \e installed module; it is found in the +\l{The QML import path}{import path}. There are two types of QML modules: location modules (defined by a URL) and installed modules (defined by a URI). @@ -87,8 +87,8 @@ directory using a relative or absolute path, like this: MyQMLProject |- MyComponents |- Slider.qml - |- CheckBox.qml - |- Main + |- CheckBox.qml + |- Main |- application.qml \endcode @@ -112,7 +112,7 @@ be imported like this: Remote location modules must have a \l{Writing a qmldir file}{qmldir file} in the same directory to specify which QML files should be made available. See the -\l {#qmldirexample}{example} below. The qmldir file is optional for modules on +\l {#qmldirexample}{example} below. The qmldir file is optional for modules on the local filesystem. @@ -121,8 +121,8 @@ the local filesystem. Installed modules are modules that are installed on the -local filesystem within the QML import path, or modules defined in C++ -application code. When importing an installed module, an un-quoted URI is +local filesystem within the QML import path, or modules defined in C++ +application code. When importing an installed module, an un-quoted URI is used, with a mandatory version number: \code @@ -131,7 +131,7 @@ used, with a mandatory version number: \endcode Installed modules that are installed into the import path or created -as a \l{QDeclarativeExtensionPlugin}{QML C++ plugin} must define a +as a \l{QDeclarativeExtensionPlugin}{QML C++ plugin} must define a \l{Writing a qmldir file}{qmldir file}. @@ -142,7 +142,7 @@ The default import path includes: \list \o The directory of the current file -\o The location specified by QLibraryInfo::ImportsPath +\o The location specified by QLibraryInfo::ImportsPath \o Paths specified by the \c QML_IMPORT_PATH environment variable \endlist @@ -153,10 +153,10 @@ When running the \l {QML Viewer}, use the \c -I option to add paths to the impor \section2 Creating installed modules in C++ -C++ applications can dynamically define installed modules using -qmlRegisterType(). +C++ applications can dynamically define installed modules using +qmlRegisterType(). -For \l{QDeclarativeExtensionPlugin}{QML C++ plugins}, the +For \l{QDeclarativeExtensionPlugin}{QML C++ plugins}, the module URI is automatically passed to QDeclarativeExtensionPlugin::registerTypes(). The QDeclarativeExtensionPlugin documentation shows how to use this URI to call qmlRegisterType() to enable the plugin library to be built as @@ -167,7 +167,7 @@ in QML, like this: import com.nokia.TimeExample 1.0 \endcode -A \l{QDeclarativeExtensionPlugin}{QML C++ plugin} also requires a +A \l{QDeclarativeExtensionPlugin}{QML C++ plugin} also requires a \l{Writing a qmldir file}{qmldir file} to make it available to the QML engine. @@ -190,9 +190,9 @@ Types from these modules can then only be used when qualified by the namespace: \qml QtLibrary.Rectangle { ... } - + MyComponents.Slider { ... } - + MyModule.SomeComponent { ... } \endqml @@ -209,7 +209,7 @@ JavaScript files must always be imported with a named import: \qml import "somescript.js" as MyScript - + Item { //... Component.onCompleted: MyScript.doSomething() @@ -220,8 +220,8 @@ JavaScript files must always be imported with a named import: \section1 Writing a qmldir file -A \c qmldir file is a metadata file for a module that maps all type names in -the module to versioned QML files. It is required for installed modules, and +A \c qmldir file is a metadata file for a module that maps all type names in +the module to versioned QML files. It is required for installed modules, and location modules that are loaded from a network source. It is defined by a plain text file named "qmldir" that contains one or more lines of the form: @@ -237,7 +237,7 @@ plugin [] \bold { [] } lines are used to add QML files as types. is the type being made available, the optional is a version -number, and is the (relative) file name of the QML file defining the type. +number, and is the (relative) file name of the QML file defining the type. Installed files do not need to import the module of which they are a part, as they can refer to the other QML files in the module as relative (local) files, but @@ -264,10 +264,10 @@ provide those identifiers. \bold {plugin []} lines are used to add \l{QDeclarativeExtensionPlugin}{QML C++ plugins} to the module. is the name of the library. It is usually not the same as the file name of the plugin binary, which is platform dependent; e.g. the library \c MyAppTypes would produce -\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows. +\c libMyAppTypes.so on Linux and \c MyAppTypes.dll on Windows. is an optional argument specifying either an absolute path to the directory containing the -plugin file, or a relative path from the directory containing the \c qmldir file to the directory +plugin file, or a relative path from the directory containing the \c qmldir file to the directory containing the plugin file. By default the engine searches for the plugin library in the directory that contains the \c qmldir file. The plugin search path can be queried with QDeclarativeEngine::pluginPathList() and modified using QDeclarativeEngine::addPluginPath(). When running the \l {QML Viewer}, use the \c -P option to add paths to the plugin search path. @@ -275,7 +275,7 @@ file. The plugin search path can be queried with QDeclarativeEngine::pluginPathL \target qmldirexample \section2 Example -If the components in the \c MyComponents directory from the +If the components in the \c MyComponents directory from the \l{Location Modules}{earlier example} were to be made available as a network resource, the directory would need to contain a \c qmldir file similar to this: @@ -284,7 +284,7 @@ ComponentA 1.0 ComponentA.qml ComponentB 1.0 ComponentB.qml \endcode -The \c MyComponents directory could then be imported as a module using: +The \c MyComponents directory could then be imported as a module using: \code import "http://the-server-name.com/MyComponents" @@ -298,15 +298,15 @@ a later version is used, as the \c qmldir file specifies that these elements are only available in the 1.0 version. -For examples of \c qmldir files for plugins, see the -\l {declarative/cppextensions/plugins}{Plugins} example and +For examples of \c qmldir files for plugins, see the +\l {declarative/cppextensions/plugins}{Plugins} example and \l {Tutorial: Writing QML extensions with C++}. \section1 Debugging The \c QML_IMPORT_TRACE environment variable can be useful for debugging -when there are problems with finding and loading modules. See +when there are problems with finding and loading modules. See \l{Debugging module imports} for more information. -- cgit v0.12 From 686dfda2146a84e6653faa56a1484e84571cc4fa Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 17:39:21 +0100 Subject: Fixed link to qtestlib-tools by adding link to qt-webpages.qdoc. Link is now linking to the gitorious project site. Task-number: QTBUG-15714 Reviewed-by: David Boddie --- doc/src/development/qtestlib.qdoc | 29 ++++++++++++++--------------- doc/src/qt-webpages.qdoc | 10 ++++++++++ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc index e53957f..08fdfc6 100644 --- a/doc/src/development/qtestlib.qdoc +++ b/doc/src/development/qtestlib.qdoc @@ -245,10 +245,10 @@ \endtable In short, walltime is always available but requires many repetitions to - get a useful result. - Tick counters are usually available and can provide - results with fewer repetitions, but can be susceptible to CPU frequency - scaling issues. + get a useful result. + Tick counters are usually available and can provide + results with fewer repetitions, but can be susceptible to CPU frequency + scaling issues. Valgrind provides exact results, but does not take I/O waits into account, and is only available on a limited number of platforms. @@ -264,7 +264,7 @@ See the chapter 5 in the \l{QTestLib Tutorial} for more benchmarking examples. \section1 Using QTestLib remotely on Windows CE - \c cetest is a convenience application which helps the user to launch an + \c cetest is a convenience application which helps the user to launch an application remotely on a Windows CE device or emulator. It needs to be executed after the unit test has been successfully compiled. @@ -717,15 +717,15 @@ \section1 Writing a Benchmark To create a benchmark we extend a test function with a QBENCHMARK macro. - A benchmark test function will then typically consist of setup code and + A benchmark test function will then typically consist of setup code and a QBENCHMARK macro that contains the code to be measured. This test function benchmarks QString::localeAwareCompare(). \snippet examples/qtestlib/tutorial5/benchmarking.cpp 0 - Setup can be done at the beginning of the function, the clock is not + Setup can be done at the beginning of the function, the clock is not running at this point. The code inside the QBENCHMARK macro will be - measured, and possibly repeated several times in order to get an + measured, and possibly repeated several times in order to get an accurate measurement. Several \l {testlib-benchmarking-measurement}{back-ends} are available @@ -733,7 +733,7 @@ \section1 Data Functions - Data functions are useful for creating benchmarks that compare + Data functions are useful for creating benchmarks that compare multiple data inputs, for example locale aware compare against standard compare. @@ -743,20 +743,19 @@ \snippet examples/qtestlib/tutorial5/benchmarking.cpp 2 - The "if(useLocaleCompare)" switch is placed outside the QBENCHMARK + The "if(useLocaleCompare)" switch is placed outside the QBENCHMARK macro to avoid measuring its overhead. Each benchmark test function - can have one active QBENCHMARK macro. + can have one active QBENCHMARK macro. \section1 External Tools Tools for handling and visualizing test data are available as part of - the qtestlib-tools project on the - \l{http://labs.qt.nokia.com/}{http://labs.qt.nokia.com/}Qt Labs Web site. + the \l {qtestlib-tools} project in the \l{Qt Labs} web site. These include a tool for comparing performance data obtained from test runs and a utility to generate Web-based graphs of performance data. - See the \l{qtestlib-tools Announcement} for more information on these - tools and a simple graphing example. + See the \l{qtestlib-tools Announcement}{qtestlib-tools announcement} + for more information on these tools and a simple graphing example. */ diff --git a/doc/src/qt-webpages.qdoc b/doc/src/qt-webpages.qdoc index 05817df..b7b9fba 100644 --- a/doc/src/qt-webpages.qdoc +++ b/doc/src/qt-webpages.qdoc @@ -239,3 +239,13 @@ \externalpage http://get.qt.nokia.com/nokiasmartinstaller/ \title Smart Installer */ + +/*! + \externalpage http://qt.gitorious.org/qt-labs/qtestlib-tools + \title qtestlib-tools +*/ + +/*! + \externalpage http://labs.qt.nokia.com + \title Qt Labs +*/ -- cgit v0.12 From 1eb7dca7fe6a81bada556c1310905be08e1b1d10 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 17:43:31 +0100 Subject: Added QML coding convention for "private" properties. Private properties start with two underscores. __property Reviewed-by: David Boddie --- doc/src/declarative/codingconventions.qdoc | 18 ++++++-- .../declarative/codingconventions/private.qml | 49 ++++++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 doc/src/snippets/declarative/codingconventions/private.qml diff --git a/doc/src/declarative/codingconventions.qdoc b/doc/src/declarative/codingconventions.qdoc index ba789e0..3f92d46 100644 --- a/doc/src/declarative/codingconventions.qdoc +++ b/doc/src/declarative/codingconventions.qdoc @@ -35,7 +35,7 @@ This page assumes that you are already familiar with the QML language. If you need an introduction to the language, please read \l {Introduction to the QML language}{the QML introduction} first. -\section1 QML objects +\section1 QML Objects Through our documentation and examples, QML objects are always structured in the following order: @@ -58,7 +58,7 @@ For example, a hypothetical \e photo QML object would look like this: \snippet doc/src/snippets/declarative/codingconventions/photo.qml 0 -\section1 Grouped properties +\section1 Grouped Properties If using multiple properties from a group of properties, we use the \e {group notation} rather than the \e {dot notation} to improve readability. @@ -72,6 +72,18 @@ can be written like this: \snippet doc/src/snippets/declarative/codingconventions/dotproperties.qml 1 +\section1 Private Properties + +QML and JavaScript do not enforce private properties like C++. There is a need +to hide these private properties, for example, when the properties are part of +the implementation. As a convention, private properties begin with two +\e underscore characters. For example, \c __area, is a property that is +accessible but is not meant for public use. Note that QML and JavaScript will +grant the user access to these properties. + +\snippet doc/src/snippets/declarative/codingconventions/private.qml 0 + + \section1 Lists If a list contains only one element, we generally omit the square brackets. @@ -87,7 +99,7 @@ we will write this: \snippet doc/src/snippets/declarative/codingconventions/lists.qml 1 -\section1 JavaScript code +\section1 JavaScript Code If the script is a single expression, we recommend writing it inline: diff --git a/doc/src/snippets/declarative/codingconventions/private.qml b/doc/src/snippets/declarative/codingconventions/private.qml new file mode 100644 index 0000000..1d3dda8 --- /dev/null +++ b/doc/src/snippets/declarative/codingconventions/private.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 1.0 + +//! [0] +Item { + id: component + width: 40; height: 50 + property real __area: width * height * 0.5 //not meant for outside use +} +//! [0] -- cgit v0.12 From 608b66b5af75ae6982be428439eea735c00cc455 Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 6 Dec 2010 17:46:28 +0100 Subject: Fixed the QML Focus document. Fixed snippets, images, and formatting. Reviewed-by: David Boddie --- doc/src/declarative/focus.qdoc | 339 ++++++++------------- doc/src/images/declarative-qmlfocus1.png | Bin 0 -> 1890 bytes doc/src/images/declarative-qmlfocus2.png | Bin 0 -> 2756 bytes doc/src/images/declarative-qmlfocus3.png | Bin 0 -> 2743 bytes doc/src/images/declarative-qmlfocus4.png | Bin 0 -> 4137 bytes doc/src/images/declarative-qmlfocus5.png | Bin 0 -> 1376 bytes .../snippets/declarative/focus/advancedFocus.qml | 67 ++++ doc/src/snippets/declarative/focus/basicwidget.qml | 59 ++++ .../snippets/declarative/focus/clickablewidget.qml | 61 ++++ doc/src/snippets/declarative/focus/focusColumn.qml | 25 ++ .../declarative/focus/focusscopewidget.qml | 61 ++++ .../declarative/focus/myclickablewidget.qml | 69 +++++ .../declarative/focus/myfocusscopewidget.qml | 66 ++++ doc/src/snippets/declarative/focus/mywidget.qml | 58 ++++ doc/src/snippets/declarative/focus/qmldir | 4 + doc/src/snippets/declarative/focus/rectangle.qml | 62 ++++ doc/src/snippets/declarative/focus/widget.qml | 61 ++++ 17 files changed, 713 insertions(+), 219 deletions(-) create mode 100644 doc/src/images/declarative-qmlfocus1.png create mode 100644 doc/src/images/declarative-qmlfocus2.png create mode 100644 doc/src/images/declarative-qmlfocus3.png create mode 100644 doc/src/images/declarative-qmlfocus4.png create mode 100644 doc/src/images/declarative-qmlfocus5.png create mode 100644 doc/src/snippets/declarative/focus/advancedFocus.qml create mode 100644 doc/src/snippets/declarative/focus/basicwidget.qml create mode 100644 doc/src/snippets/declarative/focus/clickablewidget.qml create mode 100644 doc/src/snippets/declarative/focus/focusColumn.qml create mode 100644 doc/src/snippets/declarative/focus/focusscopewidget.qml create mode 100644 doc/src/snippets/declarative/focus/myclickablewidget.qml create mode 100644 doc/src/snippets/declarative/focus/myfocusscopewidget.qml create mode 100644 doc/src/snippets/declarative/focus/mywidget.qml create mode 100644 doc/src/snippets/declarative/focus/qmldir create mode 100644 doc/src/snippets/declarative/focus/rectangle.qml create mode 100644 doc/src/snippets/declarative/focus/widget.qml diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc index 2e74fe0..ae72c3c 100644 --- a/doc/src/declarative/focus.qdoc +++ b/doc/src/declarative/focus.qdoc @@ -31,7 +31,7 @@ \title Keyboard Focus in QML When a key is pressed or released, a key event is generated and delivered to the -focused QML \l Item. To facilitate the construction of reusable components +focused QML \l Item. To facilitate the construction of reusable components and to address some of the cases unique to fluid user interfaces, the QML items add a \e scope based extension to Qt's traditional keyboard focus model. @@ -42,27 +42,21 @@ and to address some of the cases unique to fluid user interfaces, the QML items When the user presses or releases a key, the following occurs: \list 1 \o Qt receives the key action and generates a key event. -\o If the Qt widget containing the \l QDeclarativeView has focus, the key event is delivered to it. Otherwise, regular Qt key handling continues. -\o The key event is delivered by the scene to the QML \l Item with \e {active focus}. If no \l Item has \e {active focus}, the key event is \l {QEvent::ignore()}{ignored} and regular Qt key handling continues. -\o If the QML \l Item with \e {active focus} accepts the key event, propagation stops. Otherwise the event is "bubbled up", by recursively passing it to each \l Item's parent until either the event is accepted, or the root \l Item is reached. - -If the \c {Rectangle} element in the following example has active focus and the \e A key is pressed, -it will bubble up to its parent. However, pressing the \e B key will bubble up to the root -item and thus subsequently be \l {QEvent::ignore()}{ignored}. - -\code -Item { - Item { - Keys.onPressed: { - if (event.key == Qt.Key_A) { - console.log('Key A was pressed'); - event.accepted = true; - } - } - Rectangle {} - } -} -\endcode +\o If the Qt widget containing the \l QDeclarativeView has focus, the key event +is delivered to it. Otherwise, regular Qt key handling continues. +\o The key event is delivered by the scene to the QML \l Item with +\e {active focus}. If no Item has active focus, the key event is +\l {QEvent::ignore()}{ignored} and regular Qt key handling continues. +\o If the QML Item with active focus accepts the key event, propagation +stops. Otherwise the event is "bubbled up", by recursively passing it to each +Item's parent until either the event is accepted, or the root Item is reached. + +If the \c {Rectangle} element in the following example has active focus and the \c A key is pressed, +it will bubble up to its parent. However, pressing the \c B key will bubble up to the root +item and thus subsequently be ignored. + +\snippet doc/src/snippets/declarative/focus/rectangle.qml simple key event +\snippet doc/src/snippets/declarative/focus/rectangle.qml simple key event end \o If the root \l Item is reached, the key event is \l {QEvent::ignore()}{ignored} and regular Qt key handling continues. @@ -72,232 +66,139 @@ See also the \l {Keys}{Keys attached property} and \l {KeyNavigation}{KeyNavigat \section1 Querying the Active Focus Item -Whether or not an \l Item has \e {active focus} can be queried through the -property \c {Item::activeFocus}. For example, here we have a \l Text -element whose text is determined by whether or not it has \e {active focus}. +Whether or not an \l Item has active focus can be queried through the +property \c {Item::activeFocus} property. For example, here we have a \l Text +element whose text is determined by whether or not it has active focus. -\code -Text { - text: activeFocus ? "I have active focus!" : "I do not have active focus" -} -\endcode +\snippet doc/src/snippets/declarative/focus/rectangle.qml active focus \section1 Acquiring Focus and Focus Scopes -An \l Item requests focus by setting the \c {Item::focus} property to true. - -For very simple cases simply setting the \c {Item::focus} property is sometimes -sufficient. If we run the following example with the \l {QML Viewer}, we see that -the \c {keyHandler} element has \e {active focus} and pressing the 'A', 'B' -or 'C' keys modifies the text appropriately. - -\table -\row -\o \code - Rectangle { - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } -\endcode -\o \image declarative-qmlfocus1.png -\endtable - -However, were the above example to be used as a self-contained component, this -simple use of the \c {Item::focus} property is no longer sufficient. The left -hand side of the following table shows what we would like to be able to write. -Here we create two instances of our previously defined component, and set the -second one to have focus. The intention is that when the \e A, \e B, or \e C -keys are pressed, the second of the two components receives the event and +An \l Item requests focus by setting the \c focus property to \c true. + +For very simple cases simply setting the \c focus property is sometimes +sufficient. If we run the following example with the \l {QML Viewer}, we see that +the \c {keyHandler} element has active focus and pressing the \c A, \c B, +or \c C keys modifies the text appropriately. + +\snippet doc/src/snippets/declarative/focus/basicwidget.qml focus true + +\image declarative-qmlfocus1.png + +However, were the above example to be used as a reusable or imported component, +this simple use of the \c focus property is no longer sufficient. + +To demonstrate, we create two instances of our previously defined component and +set the first one to have focus. The intention is that when the \c A, \c B, or +\c C keys are pressed, the first of the two components receives the event and responds accordingly. -\table -\row -\o \code -Rectangle { - color: "red"; width: 240; height: 55 - MyWidget {} - MyWidget { y: 30; focus: true } -} -\endcode -\o \code -Rectangle { - color: "red"; width: 240; height: 55 - Rectangle { - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } - Rectangle { - y: 30; focus: true - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } -} -\endcode -\endtable - -The right hand side of the example shows the expanded code - the equivalent QML -without the use of the component \c {MyWidget}. From this, the problem is -evident - there are no less than three elements that have the \c {Item::focus} -property set to true. Ultimately only one element can have keyboard focus, and the -system has to decide which on. In this case the first appearance of the -\c {Item::focus} property being set to true on line 4 is selected, and the value -of \c {Item::focus} in the other two instances is reverted back to false. This -is exactly the opposite of what was wanted! - -This problem is fundamentally one of visibility. The \c {MyWidget} -components each set their \c {keyHandler} Items as focused as that is all they can -do - they don't know how they are going to be used, but they do know that when -they're in use their \c {keyHandler} element is what needs focus. Likewise -the code that uses the two \c {MyWidgets} sets the second \c {MyWidget} as -focused. While it doesn't know exactly how the \c {MyWidget} is -implemented, it knows that it wants the second one to be focused. This allows us -to achieve encapsulation, allowing each widget to focus on it's appropriate behaviour -itself. - -To solve this problem - allowing components to care about what they know about -and ignore everything else - the QML items introduce a concept known as a -\e {focus scope}. For existing Qt users, a \e {focus scope} is like an -automatic focus proxy. A \e {focus scope} is created using the \l FocusScope -element. - -In the next example, a \l FocusScope is added to the component, and the visual -result shown. - -\table -\row -\o \code -FocusScope { - width: 240; height: 25 - Rectangle { - color: "lightsteelblue"; width: 240; height: 25 - Text { id: myText } - Item { - id: keyHandler - focus: true - Keys.onPressed: { - if (event.key == Qt.Key_A) - myText.text = 'Key A was pressed' - else if (event.key == Qt.Key_B) - myText.text = 'Key B was pressed' - else if (event.key == Qt.Key_C) - myText.text = 'Key C was pressed' - } - } - } -} -\endcode -\o \image declarative-qmlfocus2.png -\endtable +The code that imports and creates two MyWidget instances: +\snippet doc/src/snippets/declarative/focus/widget.qml window + +The MyWidget code: +\snippet doc/src/snippets/declarative/focus/mywidget.qml mywidget + +We would like to have the first MyWidget object to have the focus by setting its +\c focus property to \c true. However, by running the code, we can confirm that +the second widget receives the focus. + +\image declarative-qmlfocus2.png + +Looking at both \c MyWidget and \c window code, the problem is evident - there +are three elements that set the \c focus property set to \c true. The two +MyWidget sets the \c focus to \c true and the \c window component also sets the +focus. Ultimately, only one element can have keyboard focus, and the system has +to decide which element receives the focus. When the second MyWidget is created, +it receives the focus because it is the last element to set its \c focus +property to \c true. + +This problem is due to visibility. The \c MyWidget component would like to have +the focus, but it cannot control the focus when it is imported or reused. +Likewise, the \c window component does not have the ability to know if its +imported components are requesting the focus. + +To solve this problem, the QML introduces a concept known as a \e {focus scope}. +For existing Qt users, a focus scope is like an automatic focus proxy. +A focus scope is created by declaring the \l FocusScope element. + +In the next example, a \l FocusScope element is added to the component, and the +visual result shown. + +\snippet doc/src/snippets/declarative/focus/myfocusscopewidget.qml widget in focusscope + +\image declarative-qmlfocus3.png + Conceptually \e {focus scopes} are quite simple. \list -\o Within each \e {focus scope} one element may have \c {Item::focus} set to true. -If more than one \l Item has the \c {Item::focus} property set, the first is selected -and the others are unset, just like when there are no \e {focus scopes}. -\o When a \e {focus scope} receives \e {active focus}, the contained element with -\c {Item::focus} set (if any) also gets \e {active focus}. If this element is -also a \l FocusScope, the proxying behaviour continues. Both the -\e {focus scope} and the sub-focused item will have \c {Item::activeFocus} set. +\o Within each focus scope one element may have \c {Item::focus} set to +\c true. If more than one \l Item has the \c focus property set, the +last element to set the \c focus will have the focus and the others are unset, +similar to when there are no focus scopes. +\o When a focus scope receives active focus, the contained element with +\c focus set (if any) also gets the active focus. If this element is +also a \l FocusScope, the proxying behavior continues. Both the +focus scope and the sub-focused item will have \c activeFocus property set. \endlist -So far the example has the second component statically selected. It is trivial +Note that, since the FocusScope element is not a visual element, the properties +of its children need to be exposed to the parent item of the FocusScope. Layouts +and positioning elements will use these visual and styling properties to create +the layout. In our example, the \c Column element cannot display the two widgets +properly because the FocusScope lacks visual properties of its own. The MyWidget +component directly binds to the \c rectangle properties to allow the \c Column +element to create the layout containing the children of the FocusScope. + +So far, the example has the second component statically selected. It is trivial now to extend this component to make it clickable, and add it to the original -application. We still set a one of the widgets as focused by default, but from -then on clicking the either one gives it focus. - -\table -\row -\o \code -Rectangle { - color: "red"; width: 240; height: 55 - MyClickableWidget {} - MyClickableWidget { y: 30; focus: true } -} -\endcode -\o \code -FocusScope { - id: page; width: 240; height: 25 - MyWidget { focus: true } - MouseArea { anchors.fill: parent; onClicked: { page.focus = true } } -} -\endcode -\endtable +application. We still set one of the widgets as focused by default. +Now, clicking either MyClickableWidget gives it focus and the other widget +loses the focus. -\image declarative-qmlfocus3.png +The code that imports and creates two MyClickableWidget instances: +\snippet doc/src/snippets/declarative/focus/clickablewidget.qml clickable window + +The MyClickableWidget code: +\snippet doc/src/snippets/declarative/focus/myclickablewidget.qml clickable in focusscope -When a QML item explicitly relinquishes focus (by setting its -\c {Item::focus} property to false while it has \e {active focus}), the system -does not automatically select another element to receive focus. That is, it -is possible for there to be no currently \e {active focus}. +\image declarative-qmlfocus4.png -See the \l{declarative/keyinteraction/focus}{Keyboard Focus example} for a +When a QML \l Item explicitly relinquishes focus (by setting its +\c focus property to \c false while it has active focus), the +system does not automatically select another element to receive focus. That is, +it is possible for there to be no currently active focus. + +See the \l{declarative/keyinteraction/focus}{Keyboard Focus example} for a demonstration of moving keyboard focus between multiple areas using FocusScope elements. \section1 Advanced uses of Focus Scopes -Focus scopes allow focus to allocation to be easily partitioned. Several +Focus scopes allow focus to allocation to be easily partitioned. Several QML items use it to this effect. -\l ListView, for example, is itself a focus scope. Generally this isn't +\l ListView, for example, is itself a focus scope. Generally this isn't noticeable as \l ListView doesn't usually have manually added visual children. By being a focus scope, \l ListView can focus the current list item without -worrying about how that will effect the rest of the application. This allows -the current item delegate to react to key presses. +worrying about how that will effect the rest of the application. This allows the +current item delegate to react to key presses. -This contrived example shows how this works. Pressing the \c Return key will +This contrived example shows how this works. Pressing the \c Return key will print the name of the current list item. -\table -\row -\o \snippet doc/src/snippets/declarative/focusscopes.qml 0 -\o \image declarative-qmlfocus4.png -\endtable +\snippet doc/src/snippets/declarative/focus/advancedFocus.qml FocusScope delegate + +\image declarative-qmlfocus5.png -While the example is simple, there's a lot going on behind the scenes. Whenever +While the example is simple, there are a lot going on behind the scenes. Whenever the current item changes, the \l ListView sets the delegate's \c {Item::focus} -property. As the \l ListView is a \e {focus scope}, this doesn't effect the -rest of the application. However, if the \l ListView itself has -\e {active focus} this causes the delegate itself to receive \e {active focus}. -In this example, the root element of the delegate is also a \e {focus scope}, -which in turn gives \e {active focus} to the \c {Text} element that -actually performs the work of handling the \e {Return} key. +property. As the \l ListView is a focus scope, this doesn't affect the +rest of the application. However, if the \l ListView itself has +active focus this causes the delegate itself to receive active focus. +In this example, the root element of the delegate is also a focus scope, +which in turn gives active focus to the \c {Text} element that actually performs +the work of handling the \c {Return} key. All of the QML view classes, such as \l PathView and \l GridView, behave in a similar manner to allow key handling in their respective delegates. diff --git a/doc/src/images/declarative-qmlfocus1.png b/doc/src/images/declarative-qmlfocus1.png new file mode 100644 index 0000000..317b34b Binary files /dev/null and b/doc/src/images/declarative-qmlfocus1.png differ diff --git a/doc/src/images/declarative-qmlfocus2.png b/doc/src/images/declarative-qmlfocus2.png new file mode 100644 index 0000000..e3f9643 Binary files /dev/null and b/doc/src/images/declarative-qmlfocus2.png differ diff --git a/doc/src/images/declarative-qmlfocus3.png b/doc/src/images/declarative-qmlfocus3.png new file mode 100644 index 0000000..a5897ce Binary files /dev/null and b/doc/src/images/declarative-qmlfocus3.png differ diff --git a/doc/src/images/declarative-qmlfocus4.png b/doc/src/images/declarative-qmlfocus4.png new file mode 100644 index 0000000..f2e64cd Binary files /dev/null and b/doc/src/images/declarative-qmlfocus4.png differ diff --git a/doc/src/images/declarative-qmlfocus5.png b/doc/src/images/declarative-qmlfocus5.png new file mode 100644 index 0000000..ec7307b Binary files /dev/null and b/doc/src/images/declarative-qmlfocus5.png differ diff --git a/doc/src/snippets/declarative/focus/advancedFocus.qml b/doc/src/snippets/declarative/focus/advancedFocus.qml new file mode 100644 index 0000000..274f54f --- /dev/null +++ b/doc/src/snippets/declarative/focus/advancedFocus.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [FocusScope delegate] +Rectangle { + color: "lightsteelblue"; width: 100; height: 50 + + ListView { + anchors.fill: parent + focus: true + + model: ListModel { + ListElement { name: "Bob" } + ListElement { name: "John" } + ListElement { name: "Michael" } + } + + delegate: FocusScope { + width: childrenRect.width; height: childrenRect.height + x:childrenRect.x; y: childrenRect.y + TextInput { + focus: true + text: name + Keys.onReturnPressed: console.log(name) + } + } + } +} +//! [FocusScope delegate] diff --git a/doc/src/snippets/declarative/focus/basicwidget.qml b/doc/src/snippets/declarative/focus/basicwidget.qml new file mode 100644 index 0000000..71e75ff --- /dev/null +++ b/doc/src/snippets/declarative/focus/basicwidget.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [focus true] +Rectangle { + color: "lightsteelblue"; width: 240; height: 25 + Text { id: myText } + Item { + id: keyHandler + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + myText.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + myText.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + myText.text = 'Key C was pressed' + } + } +} +//! [focus true] diff --git a/doc/src/snippets/declarative/focus/clickablewidget.qml b/doc/src/snippets/declarative/focus/clickablewidget.qml new file mode 100644 index 0000000..34b0d87 --- /dev/null +++ b/doc/src/snippets/declarative/focus/clickablewidget.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [clickable window] +Rectangle { + id: window + + color: "white"; width: 240; height: 150 + + Column { + anchors.centerIn: parent; spacing: 15 + + MyClickableWidget { + focus: true //set this MyWidget to receive the focus + color: "lightblue" + } + MyClickableWidget { + color: "palegreen" + } + } + +} +//! [clickable window] diff --git a/doc/src/snippets/declarative/focus/focusColumn.qml b/doc/src/snippets/declarative/focus/focusColumn.qml new file mode 100644 index 0000000..eb59309 --- /dev/null +++ b/doc/src/snippets/declarative/focus/focusColumn.qml @@ -0,0 +1,25 @@ +import QtQuick 1.0 + +Rectangle { + width: 200; height: 200 + + // Column { + FocusScope { + x: rect1.x; y:rect1.y; width: rect1.width; height: rect1.height + Rectangle {id: rect1; width: 50; height: 50; focus:true + color: focus ? "red":"blue" + } + Rectangle {id: rect2; width: 50; height: 50; focus:true + color: focus ? "red":"blue" + y: 75 + } +// } +/* + FocusScope { + x: rect2.x; y:rect2.y; width: rect2.width; height: rect2.height + Rectangle {id: rect2; width: 50; height: 50; color: "red"} + } +*/ + } + +} diff --git a/doc/src/snippets/declarative/focus/focusscopewidget.qml b/doc/src/snippets/declarative/focus/focusscopewidget.qml new file mode 100644 index 0000000..48e5750 --- /dev/null +++ b/doc/src/snippets/declarative/focus/focusscopewidget.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [focusscope window] +Rectangle { + id: window + + color: "white"; width: 240; height: 150 + + Column { + anchors.centerIn: parent; spacing: 15 + + MyFocusScopeWidget { + focus: true //set this MyWidget to receive the focus + color: "lightblue" + } + MyFocusScopeWidget { + color: "palegreen" + } + } + +} +//! [focusscope window] diff --git a/doc/src/snippets/declarative/focus/myclickablewidget.qml b/doc/src/snippets/declarative/focus/myclickablewidget.qml new file mode 100644 index 0000000..3294662 --- /dev/null +++ b/doc/src/snippets/declarative/focus/myclickablewidget.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [clickable in focusscope] +FocusScope { + + id: scope + + //FocusScope needs to bind to visual properties of the children + property alias color: rectangle.color + x: rectangle.x; y: rectangle.y + width: rectangle.width; height: rectangle.height + + Rectangle { + id: rectangle + anchors.centerIn: parent + color: "lightsteelblue"; width: 175; height: 25; radius: 10; smooth: true + Text { id: label; anchors.centerIn: parent } + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + label.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + label.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + label.text = 'Key C was pressed' + } + } + MouseArea { anchors.fill: parent; onClicked: { scope.focus = true } } +} +//! [clickable in focusscope] diff --git a/doc/src/snippets/declarative/focus/myfocusscopewidget.qml b/doc/src/snippets/declarative/focus/myfocusscopewidget.qml new file mode 100644 index 0000000..231ae3a --- /dev/null +++ b/doc/src/snippets/declarative/focus/myfocusscopewidget.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [widget in focusscope] +FocusScope { + + //FocusScope needs to bind to visual properties of the children + property alias color: rectangle.color + x: rectangle.x; y: rectangle.y + width: rectangle.width; height: rectangle.height + + Rectangle { + id: rectangle + anchors.centerIn: parent + color: "lightsteelblue"; width: 175; height: 25; radius: 10; smooth: true + Text { id: label; anchors.centerIn: parent } + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + label.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + label.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + label.text = 'Key C was pressed' + } + } +} +//! [widget in focusscope] diff --git a/doc/src/snippets/declarative/focus/mywidget.qml b/doc/src/snippets/declarative/focus/mywidget.qml new file mode 100644 index 0000000..bea723d --- /dev/null +++ b/doc/src/snippets/declarative/focus/mywidget.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [mywidget] +//MyWidget code +Rectangle { + id: widget + color: "lightsteelblue"; width: 175; height: 25; radius: 10; smooth: true + Text { id: label; anchors.centerIn: parent} + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) + label.text = 'Key A was pressed' + else if (event.key == Qt.Key_B) + label.text = 'Key B was pressed' + else if (event.key == Qt.Key_C) + label.text = 'Key C was pressed' + } +} +//! [mywidget] diff --git a/doc/src/snippets/declarative/focus/qmldir b/doc/src/snippets/declarative/focus/qmldir new file mode 100644 index 0000000..d0683b2 --- /dev/null +++ b/doc/src/snippets/declarative/focus/qmldir @@ -0,0 +1,4 @@ +MyWidget 1.0 mywidget.qml +MyFocusScopeWidget 1.0 myfocusscopewidget.qml +MyClickableWidget 1.0 myclickablewidget.qml + diff --git a/doc/src/snippets/declarative/focus/rectangle.qml b/doc/src/snippets/declarative/focus/rectangle.qml new file mode 100644 index 0000000..01d1f0c --- /dev/null +++ b/doc/src/snippets/declarative/focus/rectangle.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [simple key event] +Rectangle { + width: 100; height: 100 + focus: true + Keys.onPressed: { + if (event.key == Qt.Key_A) { + console.log('Key A was pressed'); + event.accepted = true; + } + } +//! [simple key event] + +//! [active focus] + Text { + text: activeFocus ? "I have active focus!" : "I do not have active focus" + } +//! [active focus] + +//! [simple key event end] +} +//! [simple key event end] diff --git a/doc/src/snippets/declarative/focus/widget.qml b/doc/src/snippets/declarative/focus/widget.qml new file mode 100644 index 0000000..cef34c5 --- /dev/null +++ b/doc/src/snippets/declarative/focus/widget.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 1.0 + +//! [window] + +//Window code that imports MyWidget +Rectangle { + id: window + color: "white"; width: 240; height: 150 + + Column { + anchors.centerIn: parent; spacing: 15 + + MyWidget { + focus: true //set this MyWidget to receive the focus + color: "lightblue" + } + MyWidget { + color: "palegreen" + } + } +} +//! [window] -- cgit v0.12