summaryrefslogtreecommitdiffstats
path: root/Lib/weakref.py
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2014-09-27 19:38:15 (GMT)
committerR David Murray <rdmurray@bitdance.com>2014-09-27 19:38:15 (GMT)
commit6f1e400d976b741bd808bc3518ca01e53f7a8ad2 (patch)
tree1a3c657cd95ae171af619dc426bc2f597af07374 /Lib/weakref.py
parent10177be421a0f670bc219a76ffba979138a6a03a (diff)
parent9cc5fd7b59d554ea7d008bd12b9166a25b494465 (diff)
downloadcpython-6f1e400d976b741bd808bc3518ca01e53f7a8ad2.zip
cpython-6f1e400d976b741bd808bc3518ca01e53f7a8ad2.tar.gz
cpython-6f1e400d976b741bd808bc3518ca01e53f7a8ad2.tar.bz2
Merge: #18854: make it explicit that is_multipart does not mean 'multipart/xxx'.
Diffstat (limited to 'Lib/weakref.py')
0 files changed, 0 insertions, 0 deletions
this,SLOT(devicePropertyChangedContext(QString,QString,QDBusVariant))); - deviceMap.insert(path,QStringList() << devPath); - } - } - } - if(value.variant().toString() == "offline") { - deviceMap.remove(path); - QConnmanTechnologyInterface tech(path); - disconnect(&tech,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(technologyPropertyChangedContext(QString,QString,QDBusVariant))); - - technologies.remove(path); - getNetworkListing(); - } - } -} - void QConnmanEngine::configurationChange(const QString &id) { QMutexLocker locker(&mutex); @@ -513,8 +403,8 @@ void QConnmanEngine::configurationChange(const QString &id) locker.unlock(); emit configurationChanged(ptr); locker.relock(); - } + locker.unlock(); emit updateCompleted(); } @@ -622,12 +512,7 @@ void QConnmanEngine::removeConfiguration(const QString &id) disconnect(&serv,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), this,SLOT(servicePropertyChangedContext(QString,QString, QDBusVariant))); - QString netPath = serviceNetworks.value(service); - serviceNetworks.remove(service); - - QConnmanServiceInterface network(netPath); - disconnect(&network,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(networkPropertyChangedContext(QString,QString, QDBusVariant))); + serviceNetworks.removeOne(service); QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(id); locker.unlock(); @@ -641,20 +526,11 @@ void QConnmanEngine::addServiceConfiguration(const QString &servicePath) QMutexLocker locker(&mutex); QConnmanServiceInterface *serv; serv = new QConnmanServiceInterface(servicePath); - const QString netPath = serviceNetworks.value(servicePath); - - QConnmanNetworkInterface *network; - network = new QConnmanNetworkInterface(netPath, this); - const QString id = QString::number(qHash(servicePath)); if (!accessPointConfigurations.contains(id)) { - QConnmanDeviceInterface device(netPath.section("/",0,5),this); - - serviceNetworks.insert(servicePath,netPath); - - knownNetworks[device.getType()].append(netPath); + serviceNetworks.append(servicePath); connect(serv,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), this,SLOT(servicePropertyChangedContext(QString,QString, QDBusVariant))); @@ -693,15 +569,12 @@ void QConnmanEngine::addServiceConfiguration(const QString &servicePath) cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; } - connect(network,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(networkPropertyChangedContext(QString,QString, QDBusVariant))); - cpPriv->state = getStateForService(servicePath); QNetworkConfigurationPrivatePointer ptr(cpPriv); accessPointConfigurations.insert(ptr->id, ptr); foundConfigurations.append(cpPriv); - configInterfaces[cpPriv->id] = device.getInterface(); + configInterfaces[cpPriv->id] = serv->getInterface(); locker.unlock(); emit configurationAdded(ptr); @@ -710,96 +583,6 @@ void QConnmanEngine::addServiceConfiguration(const QString &servicePath) } } -void QConnmanEngine::addNetworkConfiguration(const QString &networkPath) -{ - QMutexLocker locker(&mutex); - if(networkPath.isNull()) - return; - - QConnmanNetworkInterface *network; - network = new QConnmanNetworkInterface(networkPath, this); - QString servicePath = getServiceForNetwork(networkPath); - QConnmanServiceInterface *serv; - - QString id; - QConnmanDeviceInterface device(networkPath.section("/",0,5),this); - - if(servicePath.isEmpty()) { - id = QString::number(qHash(networkPath)); - serv = 0; - } else { - id = QString::number(qHash(servicePath)); - serv = new QConnmanServiceInterface(servicePath,this); - connect(serv,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(servicePropertyChangedContext(QString,QString, QDBusVariant))); - } - - if (!id.isEmpty() && !accessPointConfigurations.contains(id)) { - - knownNetworks[device.getType()].append(networkPath); - - serviceNetworks.insert(servicePath,networkPath); - - connect(network,SIGNAL(propertyChangedContext(QString,QString,QDBusVariant)), - this,SLOT(networkPropertyChangedContext(QString,QString, QDBusVariant))); - - QNetworkConfigurationPrivate* cpPriv = new QNetworkConfigurationPrivate(); - - QString networkName = network->getName(); - - if(networkName.isEmpty()) - networkName = "Hidden Network"; - - QNetworkConfiguration::BearerType bearerType; - - if(servicePath.isEmpty()) { - QString devicePath = networkPath.section("/",0,5); - - QConnmanDeviceInterface device(devicePath,this); - bearerType = typeToBearer(device.getType()); - } else { - if(serv->getType() == "cellular") { - bearerType = ofonoTechToBearerType("cellular"); - if(servicePath.isEmpty()) { - networkName = serv->getName(); - } - cpPriv->roamingSupported = isRoamingAllowed(servicePath); - } else { - bearerType = typeToBearer(serv->getType()); - } - } - - cpPriv->name = networkName; - cpPriv->isValid = true; - cpPriv->id = id; - cpPriv->type = QNetworkConfiguration::InternetAccessPoint; - cpPriv->bearerType = bearerType; - - if(network->getWifiSecurity() == "none") { - cpPriv->purpose = QNetworkConfiguration::PublicPurpose; - } else { - cpPriv->purpose = QNetworkConfiguration::PrivatePurpose; - } - - if(servicePath.isEmpty()) - cpPriv->state = QNetworkConfiguration::Undefined; - else - cpPriv->state = getStateForService(servicePath); - - QNetworkConfigurationPrivatePointer ptr(cpPriv); - accessPointConfigurations.insert(ptr->id, ptr); - foundConfigurations.append(cpPriv); - configInterfaces[cpPriv->id] = device.getInterface(); - - locker.unlock(); - emit configurationAdded(ptr); - locker.relock(); - emit updateCompleted(); - } /*else { - qDebug() << "Not added~~~~~~~~~~~"; - }*/ -} - bool QConnmanEngine::requiresPolling() const { return false; diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h index 2a2308f..55067d8 100644 --- a/src/plugins/bearer/connman/qconnmanengine.h +++ b/src/plugins/bearer/connman/qconnmanengine.h @@ -103,8 +103,6 @@ private Q_SLOTS: void doRequestUpdate(); void servicePropertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void networkPropertyChangedContext(const QString &,const QString &,const QDBusVariant &); - void devicePropertyChangedContext(const QString &,const QString &,const QDBusVariant &); void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); void technologyPropertyChangedContext(const QString &,const QString &, const QDBusVariant &); @@ -113,10 +111,6 @@ private: QList foundConfigurations; - void getNetworkListing(); - - QString getServiceForNetwork(const QString &network); - QString serviceFromId(const QString &id); QString networkFromId(const QString &id); @@ -125,15 +119,12 @@ private: void removeConfiguration(const QString &servicePath); void addServiceConfiguration(const QString &servicePath); - void addNetworkConfiguration(const QString &worknetPath); QDateTime activeTime; QMap technologies; // techpath, tech interface QMap configInterfaces; // id, interface name - QMap knownNetworks; //device path, net paths list - QMap deviceMap; //tech path, device path - QMap serviceNetworks; //service, network + QList serviceNetworks; //servpath QNetworkConfiguration::BearerType ofonoTechToBearerType(const QString &type); bool isRoamingAllowed(const QString &context); diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 0545422..092bea9 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -317,126 +317,8 @@ QString QConnmanManagerInterface::getPathForTechnology(const QString &name) return ""; } -QConnmanNetworkInterface::QConnmanNetworkInterface(const QString &dbusPathName, QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - dbusPathName, - CONNMAN_NETWORK_INTERFACE, - QDBusConnection::systemBus(), parent) -{ -} - -QConnmanNetworkInterface::~QConnmanNetworkInterface() -{ -} - -void QConnmanNetworkInterface::connectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { - if(!connection().connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_NETWORK_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant)))) { - qWarning() << "network properties not connected"; - } - } - if (QLatin1String(signal) == SIGNAL(propertyChangedContext(QString,QString,QDBusVariant))) { - QConnmanDBusHelper *helper; - helper = new QConnmanDBusHelper(this); - - dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_NETWORK_INTERFACE), - QLatin1String("PropertyChanged"), - helper,SLOT(propertyChanged(QString,QDBusVariant))); - - QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); - } -} - -void QConnmanNetworkInterface::disconnectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { - - } -} - -QVariantMap QConnmanNetworkInterface::getProperties() -{ - QDBusReply reply = this->call(QLatin1String("GetProperties")); - return reply.value(); -} - -QVariant QConnmanNetworkInterface::getProperty(const QString &property) -{ - QVariant var; - QVariantMap map = getProperties(); - if (map.contains(property)) { - var = map.value(property); - } - return var; -} - -//properties - -QString QConnmanNetworkInterface::getAddress() -{ - QVariant var = getProperty("Address"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getName() -{ - QVariant var = getProperty("Name"); - return qdbus_cast(var); -} - -bool QConnmanNetworkInterface::isConnected() -{ - QVariant var = getProperty("Connected"); - return qdbus_cast(var); -} - -quint8 QConnmanNetworkInterface::getSignalStrength() -{ - QVariant var = getProperty("Strength"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getDevice() -{ - QVariant var = getProperty("Device"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiSsid() -{ - QVariant var = getProperty("WiFi.SSID"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiMode() -{ - QVariant var = getProperty("WiFi.Mode"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiSecurity() -{ - QVariant var = getProperty("WiFi.Security"); - return qdbus_cast(var); -} - -QString QConnmanNetworkInterface::getWifiPassphrase() -{ - QVariant var = getProperty("WiFi.Passphrase"); - return qdbus_cast(var); -} - ////////////////////////// - QConnmanProfileInterface::QConnmanProfileInterface(const QString &dbusPathName,QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), dbusPathName, @@ -503,6 +385,7 @@ QStringList QConnmanProfileInterface::getServices() return qdbus_cast(var); } + /////////////////////////// QConnmanServiceInterface::QConnmanServiceInterface(const QString &dbusPathName,QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), @@ -910,13 +793,6 @@ QString QConnmanTechnologyInterface::getType() } -QStringList QConnmanTechnologyInterface::getDevices() -{ - QVariant var = getProperty("Devices"); - return qdbus_cast(var); -} - - ////////////////////////////////// QConnmanAgentInterface::QConnmanAgentInterface(const QString &dbusPathName, QObject *parent) : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), @@ -994,151 +870,8 @@ quint64 QConnmanCounterInterface::getTimeOnline() return 0; } -///////////////////////////////////////// -QConnmanDeviceInterface::QConnmanDeviceInterface(const QString &dbusPathName,QObject *parent) - : QDBusAbstractInterface(QLatin1String(CONNMAN_SERVICE), - dbusPathName, - CONNMAN_DEVICE_INTERFACE, - QDBusConnection::systemBus(), parent) -{ -} - -QConnmanDeviceInterface::~QConnmanDeviceInterface() -{ -} - -void QConnmanDeviceInterface::connectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { - dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_DEVICE_INTERFACE), - QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant))); - - } - if (QLatin1String(signal) == SIGNAL(propertyChangedContext(QString,QString,QDBusVariant))) { - QConnmanDBusHelper *helper; - helper = new QConnmanDBusHelper(this); - - dbusConnection.connect(QLatin1String(CONNMAN_SERVICE), - this->path(), - QLatin1String(CONNMAN_DEVICE_INTERFACE), - QLatin1String("PropertyChanged"), - helper,SLOT(propertyChanged(QString,QDBusVariant))); - - QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); - } -} - -void QConnmanDeviceInterface::disconnectNotify(const char *signal) -{ - if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QVariant))) { - - } -} - -QVariantMap QConnmanDeviceInterface::getProperties() -{ - QDBusReply reply = this->call(QLatin1String("GetProperties")); - return reply.value(); -} - -bool QConnmanDeviceInterface::setProperty(const QString &name, const QDBusVariant &value) -{ - QDBusMessage reply = this->call(QLatin1String("SetProperty"),name, qVariantFromValue(value)); - return true; -} - -void QConnmanDeviceInterface::scan() -{ - QDBusReply reply = this->call(QLatin1String("ProposeScan")); - if(!reply.isValid()) { - qDebug() << reply.error().message(); - } -} - -QVariant QConnmanDeviceInterface::getProperty(const QString &property) -{ - QVariant var; - QVariantMap map = getProperties(); - if (map.contains(property)) { - var = map.value(property); - } - return var; -} - -//properties -QString QConnmanDeviceInterface::getAddress() -{ - QVariant var = getProperty("Address"); - return qdbus_cast(var); -} - -QString QConnmanDeviceInterface::getName() -{ - QVariant var = getProperty("Name"); - return qdbus_cast(var); -} - -QString QConnmanDeviceInterface::getType() -{ - QVariant var = getProperty("Type"); - return qdbus_cast(var); -} - -QString QConnmanDeviceInterface::getInterface() -{ - QVariant var = getProperty("Interface"); - return qdbus_cast(var); -} - -bool QConnmanDeviceInterface::isPowered() -{ - QVariant var = getProperty("Powered"); - return qdbus_cast(var); -} - -quint16 QConnmanDeviceInterface::getScanInterval() -{ - QVariant var = getProperty("ScanInterval"); - return qdbus_cast(var); -} - -bool QConnmanDeviceInterface::setScanInterval(const QString & interval) -{ -// QList args; -// args << qVariantFromValue(name) -// << value.variant(); - -// QDBusMessage reply = this->callWithArgumentList(QDBus::AutoDetect,QLatin1String("SetProperty"),args); - - return setProperty("ScanInterval", QDBusVariant(interval)); -} - -bool QConnmanDeviceInterface::isScanning() -{ - QVariant var = getProperty("Scanning"); - return qdbus_cast(var); -} - -QStringList QConnmanDeviceInterface::getNetworks() -{ - QVariant var = getProperty("Networks"); - return qdbus_cast(var); -} - -bool QConnmanDeviceInterface::setEnabled(bool powered) -{ - QList args; - args << qVariantFromValue(QString("Powered")) - << qVariantFromValue(QDBusVariant(powered)); - - QDBusMessage reply = this->callWithArgumentList(QDBus::AutoDetect,QLatin1String("SetProperty"),args); - return true; -} +///////////////////////////////////////// QConnmanDBusHelper::QConnmanDBusHelper(QObject * parent) : QObject(parent) { diff --git a/src/plugins/bearer/connman/qconnmanservice_linux_p.h b/src/plugins/bearer/connman/qconnmanservice_linux_p.h index 6e6b702..9615b33 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux_p.h +++ b/src/plugins/bearer/connman/qconnmanservice_linux_p.h @@ -70,8 +70,8 @@ #ifndef __CONNMAN_DBUS_H -#define CONNMAN_SERVICE "org.moblin.connman" -#define CONNMAN_PATH "/org/moblin/connman" +#define CONNMAN_SERVICE "net.connman" +#define CONNMAN_PATH "/net/connman" #define CONNMAN_DEBUG_INTERFACE CONNMAN_SERVICE ".Debug" #define CONNMAN_ERROR_INTERFACE CONNMAN_SERVICE ".Error" @@ -84,8 +84,6 @@ #define CONNMAN_TASK_INTERFACE CONNMAN_SERVICE ".Task" #define CONNMAN_PROFILE_INTERFACE CONNMAN_SERVICE ".Profile" #define CONNMAN_SERVICE_INTERFACE CONNMAN_SERVICE ".Service" -#define CONNMAN_DEVICE_INTERFACE CONNMAN_SERVICE ".Device" -#define CONNMAN_NETWORK_INTERFACE CONNMAN_SERVICE ".Network" #define CONNMAN_PROVIDER_INTERFACE CONNMAN_SERVICE ".Provider" #define CONNMAN_TECHNOLOGY_INTERFACE CONNMAN_SERVICE ".Technology" #endif @@ -151,38 +149,6 @@ protected: QVariant getProperty(const QString &); }; - -class QConnmanNetworkInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - QConnmanNetworkInterface(const QString &dbusPathName, QObject *parent = 0); - ~QConnmanNetworkInterface(); - - QVariantMap getProperties(); - - //properties - QString getAddress(); - QString getName(); - bool isConnected(); - quint8 getSignalStrength(); - QString getDevice(); - QString getWifiSsid(); - QString getWifiMode(); - QString getWifiSecurity(); - QString getWifiPassphrase(); - -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); -protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); - QVariant getProperty(const QString &); -}; - class QConnmanProfileInterfacePrivate; class QConnmanProfileInterface : public QDBusAbstractInterface { @@ -287,8 +253,6 @@ public: QString getName(); QString getType(); - QStringList getDevices(); - Q_SIGNALS: void propertyChanged(const QString &, const QDBusVariant &value); void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); @@ -337,42 +301,6 @@ private: QConnmanCounterInterfacePrivate *d; }; -class QConnmanDeviceInterface : public QDBusAbstractInterface -{ - Q_OBJECT - -public: - - QConnmanDeviceInterface(const QString &dbusPathName,QObject *parent = 0); - ~QConnmanDeviceInterface(); - - QVariantMap getProperties(); - void scan(); - -//properties - QString getAddress(); - QString getName(); - QString getType(); - QString getInterface(); - bool isPowered(); - quint16 getScanInterval(); - bool setScanInterval(const QString &interval); - - bool isScanning(); - QStringList getNetworks(); - bool setEnabled(bool powered); - bool setProperty(const QString &name, const QDBusVariant &value); - -Q_SIGNALS: - void propertyChanged(const QString &, const QDBusVariant &value); - void propertyChangedContext(const QString &,const QString &,const QDBusVariant &); -protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); - QVariant getProperty(const QString &); - -}; - class QConnmanDBusHelper: public QObject, protected QDBusContext { Q_OBJECT -- cgit v0.12 From d8990fbd132fc9e456c55a624eeb709088b0b819 Mon Sep 17 00:00:00 2001 From: Paul Labedan Date: Tue, 7 Dec 2010 12:25:23 +0100 Subject: Remove warning about null cursor handle on S60 while handle is valid --- src/gui/kernel/qcursor_s60.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qcursor_s60.cpp b/src/gui/kernel/qcursor_s60.cpp index 68e079e..6369f25 100644 --- a/src/gui/kernel/qcursor_s60.cpp +++ b/src/gui/kernel/qcursor_s60.cpp @@ -472,9 +472,9 @@ void qt_symbian_setWindowGroupCursor(const QCursor &cursor, RWindowTreeNode &nod if (handle) { RWsPointerCursor *pcurs = reinterpret_cast (handle); node.SetCustomPointerCursor(*pcurs); - } + } else #ifdef Q_SYMBIAN_HAS_SYSTEM_CURSORS - else { + { TInt shape = qt_symbian_translate_cursor_shape(cursor.shape()); node.SetPointerCursor(shape); } -- cgit v0.12 From ba2f8a1f7da6b40a095cad43e4b737dc1306b0cc Mon Sep 17 00:00:00 2001 From: aavit Date: Thu, 16 Dec 2010 10:57:06 +0100 Subject: Need not keep client waiting until server has saved --- tests/arthur/baselineserver/src/baselineserver.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp index 6351dff..f59600f 100644 --- a/tests/arthur/baselineserver/src/baselineserver.cpp +++ b/tests/arthur/baselineserver/src/baselineserver.cpp @@ -267,6 +267,13 @@ void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline) QString prefix = pathForItem(item, isBaseline); qDebug() << runId << logtime() << "Received" << (isBaseline ? "baseline" : "mismatched") << "image for:" << item.itemName << "Storing in" << prefix; + QString msg; + if (isBaseline) + msg = QLS("New baseline image stored: ") + pathForItem(item, true, true) + QLS(FileFormat); + else + msg = BaselineServer::baseUrl() + report.filePath(); + proto.sendBlock(BaselineProtocol::Ack, msg.toLatin1()); + QString dir = prefix.section(QLC('/'), 0, -2); QDir cwd; if (!cwd.exists(dir)) @@ -282,14 +289,6 @@ void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline) if (!isBaseline) report.addMismatch(item); - - QString msg; - if (isBaseline) - msg = QLS("New baseline image stored: ") + pathForItem(item, true, true) + QLS(FileFormat); - else - msg = BaselineServer::baseUrl() + report.filePath(); - - proto.sendBlock(BaselineProtocol::Ack, msg.toLatin1()); } -- cgit v0.12 From c70b1afe694b0d32ece6b639b1e4d10501df8bb0 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Thu, 16 Dec 2010 13:41:28 +0200 Subject: Remove support for automatic tactile feedback from QS60Style Currently QS60Style loads automatically a plugin to support tactile feedback for styled applications. However, there is no control over this, so applications cannot remove the automatic support, if they'd like to use Mobility APIs to control the feedback themselves. In order to avoid this, remove tactile feedback plugin from style. Lets see if we can later put this back with optional enable/disable flag. Task-number: QTBUG-16151 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style.cpp | 3 - src/gui/styles/qs60style_feedbackinterface_p.h | 50 -------------- src/gui/styles/qs60style_p.h | 4 -- src/gui/styles/qs60style_s60.cpp | 24 +------ src/plugins/s60/feedback/feedback.pro | 18 ----- src/plugins/s60/feedback/qtactileFeedback.h | 54 --------------- src/plugins/s60/feedback/qtactileFeedback_s60.cpp | 83 ----------------------- src/plugins/s60/s60.pro | 4 -- src/s60installs/qt.iby | 5 -- src/s60installs/s60installs.pro | 6 -- 10 files changed, 1 insertion(+), 250 deletions(-) delete mode 100644 src/gui/styles/qs60style_feedbackinterface_p.h delete mode 100644 src/plugins/s60/feedback/feedback.pro delete mode 100644 src/plugins/s60/feedback/qtactileFeedback.h delete mode 100644 src/plugins/s60/feedback/qtactileFeedback_s60.cpp diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 56d2d19..040ca4f 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -3464,9 +3464,6 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event) if (d->m_pressedWidget) d->m_pressedWidget->update(); -#ifdef Q_WS_S60 - d->touchFeedback(event, w); -#endif } break; } diff --git a/src/gui/styles/qs60style_feedbackinterface_p.h b/src/gui/styles/qs60style_feedbackinterface_p.h deleted file mode 100644 index 81fcdc3..0000000 --- a/src/gui/styles/qs60style_feedbackinterface_p.h +++ /dev/null @@ -1,50 +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 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 - -class TactileFeedbackInterface : public QObject -{ - public: - virtual void touchFeedback(QEvent *event, const QWidget *widget) = 0; -}; - -Q_DECLARE_INTERFACE(TactileFeedbackInterface, "com.trolltech.Qt.TactileFeedbackInterface/1.0") diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index db4285d..721fbd9 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -387,7 +387,6 @@ private: //data members class QFocusFrame; class QProgressBar; class QS60StyleAnimation; -class TactileFeedbackInterface; // Private class #ifdef Q_OS_SYMBIAN @@ -576,8 +575,6 @@ public: void stopAnimation(QS60StyleEnums::SkinParts animation); static QS60StyleAnimation* animationDefinition(QS60StyleEnums::SkinParts part); static void removeAnimations(); - //No support for tactile feedback in emulated style - void touchFeedback(QEvent *event, const QWidget *widget); #endif @@ -632,7 +629,6 @@ private: #ifdef Q_WS_S60 //list of progress bars having animation running QList m_bars; - TactileFeedbackInterface *m_feedbackPlugin; #endif }; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 92f53ff..4e3f5da 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -50,10 +50,6 @@ #include "qapplication.h" #include "qsettings.h" -#include "qpluginloader.h" -#include "qlibraryinfo.h" -#include "private/qs60style_feedbackinterface_p.h" - #include #include #include @@ -1221,25 +1217,13 @@ void QS60StylePrivate::setActiveLayout() Q_GLOBAL_STATIC(QList, m_animations) -QS60StylePrivate::QS60StylePrivate() : m_feedbackPlugin(0) +QS60StylePrivate::QS60StylePrivate() { //Animation defaults need to be created when style is instantiated QS60StyleAnimation* progressBarAnimation = new QS60StyleAnimation(QS60StyleEnums::SP_QgnGrafBarWaitAnim, 7, 100); m_animations()->append(progressBarAnimation); // No need to set active layout, if dynamic metrics API is available setActiveLayout(); - - //Tactile feedback plugin is only available for touch devices. - if (isTouchSupported()) { - QString pluginsPath = QLibraryInfo::location(QLibraryInfo::PluginsPath); - pluginsPath += QLatin1String("/feedback/qtactilefeedback.dll"); - - // Create plugin loader - QPluginLoader pluginLoader(pluginsPath); - // Load plugin and store pointer to the plugin implementation - if (pluginLoader.load()) - m_feedbackPlugin = qobject_cast(pluginLoader.instance()); - } } void QS60StylePrivate::removeAnimations() @@ -1529,12 +1513,6 @@ void QS60StylePrivate::stopAnimation(QS60StyleEnums::SkinParts animationPart) } } -void QS60StylePrivate::touchFeedback(QEvent *event, const QWidget *widget) -{ - if (m_feedbackPlugin) - m_feedbackPlugin->touchFeedback(event, widget); -} - QVariant QS60StyleModeSpecifics::themeDefinition( QS60StyleEnums::ThemeDefinitions definition, QS60StyleEnums::SkinParts part) { diff --git a/src/plugins/s60/feedback/feedback.pro b/src/plugins/s60/feedback/feedback.pro deleted file mode 100644 index 5e577ec..0000000 --- a/src/plugins/s60/feedback/feedback.pro +++ /dev/null @@ -1,18 +0,0 @@ -include(../../qpluginbase.pri) - -TARGET = qtactilefeedback$${QT_LIBINFIX} - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/s60/feedback - -INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE - -!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - HEADERS += qtactileFeedback.h - SOURCES += qtactileFeedback_s60.cpp - - LIBS += -ltouchfeedback -} - -load(data_caging_paths) - -TARGET.UID3=0x200315B4 diff --git a/src/plugins/s60/feedback/qtactileFeedback.h b/src/plugins/s60/feedback/qtactileFeedback.h deleted file mode 100644 index 7c4cc29..0000000 --- a/src/plugins/s60/feedback/qtactileFeedback.h +++ /dev/null @@ -1,54 +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 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 -#include - -#include "private/qs60style_feedbackinterface_p.h" - -class QTactileFeedback : public TactileFeedbackInterface -{ - Q_OBJECT - Q_INTERFACES(TactileFeedbackInterface) - - public: - void touchFeedback(QEvent *event, const QWidget *widget); - }; diff --git a/src/plugins/s60/feedback/qtactileFeedback_s60.cpp b/src/plugins/s60/feedback/qtactileFeedback_s60.cpp deleted file mode 100644 index c2f1d34..0000000 --- a/src/plugins/s60/feedback/qtactileFeedback_s60.cpp +++ /dev/null @@ -1,83 +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 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 -#include -#include -#include - -#include -#include "qtactileFeedback.h" - -#include - -void QTactileFeedback::touchFeedback(QEvent *event, const QWidget *widget) -{ - //Lets share the global instance for touch feedback (you are NOT allowed to try and delete it!). - MTouchFeedback* feedback = MTouchFeedback::Instance(); - - //If the widget itself is not handling focus, try to use focusProxy widget. - const QWidget *w = ((widget->focusPolicy() == Qt::NoFocus) && (widget->focusProxy())) ? widget->focusProxy() : widget; - - //Only give tactile feedback for enabled widgets that take focus. - if (feedback && w && w->isEnabled() && w->isWidgetType() && w->isVisible()) { - //Scrollbars are 'special' that they don't take focus (nor they have focusProxy), yet we'd like to have tactile feedback for them - if (w->focusPolicy() == Qt::NoFocus) - if (!qobject_cast(w)) - return; - - //Don't give tactile feedback for widgets that are outside topmost dialog. - QWidget *dialog = QApplication::activeModalWidget(); - if (dialog) { - QList allChildren = dialog->findChildren(); - if (!allChildren.contains(w)) - return; - } - - //Widget specific tactile feedback. - if (qobject_cast(w) || qobject_cast(w)) - feedback->InstantFeedback(ETouchFeedbackSensitive); - else - feedback->InstantFeedback(ETouchFeedbackBasic); - } -} - -Q_EXPORT_PLUGIN2("feedback", QTactileFeedback); diff --git a/src/plugins/s60/s60.pro b/src/plugins/s60/s60.pro index 1ddf326..c999fff 100644 --- a/src/plugins/s60/s60.pro +++ b/src/plugins/s60/s60.pro @@ -6,10 +6,6 @@ symbian { SUBDIRS += 3_1 3_2 } - !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - SUBDIRS += feedback - } - # 5.0 is used also for Symbian3 and later SUBDIRS += 5_0 } \ No newline at end of file diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby index 2b3be0a..4afbf05 100644 --- a/src/s60installs/qt.iby +++ b/src/s60installs/qt.iby @@ -60,8 +60,6 @@ file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll // so don't bother including those plugins file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll -file=ABI_DIR\BUILD_DIR\qtactilefeedback.dll SHARED_LIB_DIR\qtactilefeedback.dll - S60_APP_RESOURCE(s60main) // imageformats stubs @@ -107,9 +105,6 @@ data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplug // bearer stub data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\qt\plugins\bearer\qsymbianbearer.qtplugin -// feedback -data=\epoc32\data\z\resource\qt\plugins\feedback\qtactilefeedback.qtplugin resource\qt\plugins\feedback\qtactilefeedback.qtplugin - // Stub sis file data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 5a435cd..be7ed97 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -87,12 +87,6 @@ symbian: { DEPLOYMENT += bearer_plugin } - !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) { - feedback_plugin.sources = $$QT_BUILD_TREE/plugins/s60/feedback/qtactilefeedback$${QT_LIBINFIX}.dll - feedback_plugin.path = c:$$QT_PLUGINS_BASE_DIR/feedback - DEPLOYMENT += feedback_plugin - } - qtlibraries.pkg_postrules += qts60plugindeployment qtlibraries.path = c:/sys/bin -- cgit v0.12 From 28973e50710cfcd96da037cdad7f46700221c185 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Mon, 20 Dec 2010 15:50:41 +1000 Subject: Make it clear which security updates are needed for Visual Studio 2005. As well as Service Pack 1, the compiler also needs four additional security updates in order to work correctly with Qt's pre-built binary package. Task-number: QTBUG-7633 Reviewed-by: Toby Tomkins --- doc/src/getting-started/installation.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index a68310c..5b009cd 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -963,6 +963,7 @@ We hope you will enjoy using Qt. first install the Visual Studio Service Pack 1 available \l{http://www.microsoft.com/downloads/details.aspx?FamilyId=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&displaylang=en}{here} to avoid runtime conflicts. + Additionally, you must use the Check for Updates feature in the Help menu of the Visual Studio 2005 IDE to apply at least the following security updates: KB937061, KB971023, KB971090, KB973673. If you are using a source edition of Qt, you must first install Perl so that the syncqt script invoked by configure can be executed. You can download -- cgit v0.12 From de72670c620e1193fa875bf1a4adee553700bacb Mon Sep 17 00:00:00 2001 From: Ville Pernu Date: Mon, 20 Dec 2010 09:57:24 +0200 Subject: QNAM HTTP: Fix missing error() signal 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. We now store an unhandled error into a private member. It is handled and reset by the _q_disconnected (or more specifically, allDone-function). Also, an additional check is made that there are no simultaneous HTTP errors. If a HTTP error exists, any socket errors are suppressed. Task-Number: QT-3494 Reviewed-By: Markus Goetz --- src/network/access/qhttpnetworkconnectionchannel.cpp | 20 +++++++++++++++++++- src/network/access/qhttpnetworkconnectionchannel_p.h | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index c8caad4..c4471eb 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) @@ -642,7 +643,23 @@ 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 AND that there are no http errors. + // In case there are both socket errors and http errors, the socket error is suppressed. + // Http errors are handled in the QNetworkAccessHttpBackend. + if(unhandledError != QNetworkReply::NoError && reply->statusCode() == 200) { + 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)); + } else { + QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); + } + unhandledError = QNetworkReply::NoError; // Reset the value + } // 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; @@ -964,6 +981,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 fd18042..e1d42fb 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 0189fc2335c891373ce595a4a01e4a9d73cc5fe4 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Sun, 12 Dec 2010 17:33:12 +0100 Subject: Move advances for control character in Indic syllable shaping When handling control characters (ZWJ, ZWNJ) in Indic syllables, we only moved glyphs and attributes of the item, advances should also be moved forward, otherwise we will use the advance of ZWJ/ ZWNJ for the part of syllable, which is normally zero, it results some positioning problems. Task-number: QTBUG-14204 Reviewed-by: Lars Knoll --- src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp | 1 + tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp index 4a618da..bbf479e 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp @@ -1683,6 +1683,7 @@ static bool indic_shape_syllable(HB_Bool openType, HB_ShaperItem *item, bool inv } item->glyphs[j] = item->glyphs[i]; item->attributes[j] = item->attributes[i]; + item->advances[j] = item->advances[i]; ++i; ++j; } diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp index 0a7458f..b0b6b1e 100644 --- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp +++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp @@ -103,6 +103,7 @@ private slots: void khmer(); void linearB(); + void controlInSyllable_qtbug14204(); }; tst_QTextScriptEngine::tst_QTextScriptEngine() @@ -1111,6 +1112,22 @@ void tst_QTextScriptEngine::greek() #endif } +void tst_QTextScriptEngine::controlInSyllable_qtbug14204() +{ + QString s; + s.append(QChar(0x0915)); + s.append(QChar(0x094d)); + s.append(QChar(0x200d)); + s.append(QChar(0x0915)); + + QTextLayout layout(s); + QTextEngine *e = layout.d; + e->itemize(); + e->shape(0); + + QVERIFY(e->layoutData->items[0].num_glyphs == 2); + QVERIFY(e->layoutData->glyphLayout.advances_x[1] != 0); +} QTEST_MAIN(tst_QTextScriptEngine) #include "tst_qtextscriptengine.moc" -- cgit v0.12 From ad0841dfd89d08140b719098ecfec82881df63e6 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 14 Dec 2010 18:18:35 +0100 Subject: Disable certain GPOS features by default According to OpenType Layout tag registry, these features should be turned off by default. Leaving them on will cause some text layout problems in common UI widgets -- they are usually designed for better positioning in print publishing or full featured text layout programs, not for general usage. There is no way to turn them on in HarfBuzz now, it should be addressed later. Features like 'valt' are intended for vertical writing mode are also turned off, since HarfBuzz doesn't support it properly yet. Task-number: QTBUG-15754 Reviewed-by: Lars Knoll --- src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp | 41 +++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index ce4d4ac..ef86144 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -538,8 +538,20 @@ void HB_HeuristicSetGlyphAttributes(HB_ShaperItem *item) #ifndef NO_OPENTYPE static const HB_OpenTypeFeature basic_features[] = { { HB_MAKE_TAG('c', 'c', 'm', 'p'), CcmpProperty }, - { HB_MAKE_TAG('l', 'i', 'g', 'a'), CcmpProperty }, - { HB_MAKE_TAG('c', 'l', 'i', 'g'), CcmpProperty }, + { HB_MAKE_TAG('l', 'i', 'g', 'a'), LigaProperty }, + { HB_MAKE_TAG('c', 'l', 'i', 'g'), CligProperty }, + {0, 0} +}; + +static const HB_OpenTypeFeature disabled_features[] = { + { HB_MAKE_TAG('c', 'p', 'c', 't'), PositioningProperties }, + { HB_MAKE_TAG('h', 'a', 'l', 't'), PositioningProperties }, + // TODO: we need to add certain HB_ShaperFlag for vertical + // writing mode to enable these vertical writing features: + { HB_MAKE_TAG('v', 'a', 'l', 't'), PositioningProperties }, + { HB_MAKE_TAG('v', 'h', 'a', 'l'), PositioningProperties }, + { HB_MAKE_TAG('v', 'k', 'r', 'n'), PositioningProperties }, + { HB_MAKE_TAG('v', 'p', 'a', 'l'), PositioningProperties }, {0, 0} }; #endif @@ -1110,12 +1122,29 @@ HB_Bool HB_SelectScript(HB_ShaperItem *shaper_item, const HB_OpenTypeFeature *fe HB_UInt *feature_tag_list = feature_tag_list_buffer; while (*feature_tag_list) { HB_UShort feature_index; + bool skip = false; if (*feature_tag_list == HB_MAKE_TAG('k', 'e', 'r', 'n')) { - if (face->current_flags & HB_ShaperFlag_NoKerning) { - ++feature_tag_list; - continue; + if (face->current_flags & HB_ShaperFlag_NoKerning) + skip = true; + else + face->has_opentype_kerning = true; + } + features = disabled_features; + while (features->tag) { + if (*feature_tag_list == features->tag) { + skip = true; + break; } - face->has_opentype_kerning = true; + ++features; + } + // 'palt' should be turned off by default unless 'kern' is on + if (!face->has_opentype_kerning && + *feature_tag_list == HB_MAKE_TAG('p', 'a', 'l', 't')) + skip = true; + + if (skip) { + ++feature_tag_list; + continue; } error = HB_GPOS_Select_Feature(face->gpos, *feature_tag_list, script_index, 0xffff, &feature_index); if (!error) -- cgit v0.12 From d9dbdb1afde441c8ab87f42b4a5e0e29ad54480c Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Mon, 20 Dec 2010 14:05:53 +0100 Subject: Fixed QStatusBar not to repaint itself too early When the toplevel containing a statusbar is initially shown, QStatusBar will repaint itself way too early - repaint() is called from the LayoutRequest event causing a whole window repaint before the window was resized to the proper size. This caused Qt Creator to paint itself in small size in a maximized window on its startup. Task-number: QTBUG-14547 Reviewed-by: Olivier Goffart --- src/gui/widgets/qstatusbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qstatusbar.cpp b/src/gui/widgets/qstatusbar.cpp index c88d2a1..c60913e 100644 --- a/src/gui/widgets/qstatusbar.cpp +++ b/src/gui/widgets/qstatusbar.cpp @@ -575,7 +575,7 @@ void QStatusBar::reformat() d->savedStrut = maxH; vbox->addSpacing(2); d->box->activate(); - repaint(); + update(); } /*! -- cgit v0.12 From 4ff05f2ed8cef9a126af023a4692eb8c50a0a892 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Tue, 21 Dec 2010 15:58:12 +1000 Subject: Fix number of chapters in qtestlib tutorial. Task-number: QTBUG-10248 Reviewed-by: Trust Me --- doc/src/development/qtestlib.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc index e53957f..38c2220 100644 --- a/doc/src/development/qtestlib.qdoc +++ b/doc/src/development/qtestlib.qdoc @@ -370,7 +370,7 @@ \title QTestLib Tutorial This tutorial gives a short introduction to how to use some of the - features of the QTestLib framework. It is divided into four + features of the QTestLib framework. It is divided into five chapters: \list 1 -- cgit v0.12 From b696d941c06535b7a7813c4d3b39dbd3710476e4 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 21 Dec 2010 10:29:19 +0100 Subject: Fix timer warning when deleting item views Reviewed-by: Olivier Task-number: QTBUG-16175 --- src/gui/itemviews/qabstractitemview.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index 177b088..a7960ae 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -595,8 +595,15 @@ QAbstractItemView::QAbstractItemView(QAbstractItemViewPrivate &dd, QWidget *pare */ QAbstractItemView::~QAbstractItemView() { - // stop this timer here before ~QObject - d_func()->delayedReset.stop(); + Q_D(QAbstractItemView); + // stop these timers here before ~QObject + d->delayedReset.stop(); + d->updateTimer.stop(); + d->delayedEditing.stop(); + d->delayedAutoScroll.stop(); + d->autoScrollTimer.stop(); + d->delayedLayout.stop(); + d->fetchMoreTimer.stop(); } /*! -- cgit v0.12 From 5d68753927ac6ba1445ceb6831da7e2346d91bf9 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 21 Dec 2010 13:26:54 +0100 Subject: Optimize texture glyph cache To avoid calling the bounding box function for the same non-printable characters in every call, we cache them as empty in the coords table and bail out before painting them. This patch also fixes some possible reads of uninitialized memory (reference to return value) and reference to a default constructed object consisting of uninitialized pods. Reviewed-by: Samuel --- src/gui/painting/qpaintengine_raster.cpp | 4 +++- src/gui/painting/qtextureglyphcache.cpp | 11 ++++++++--- src/gui/painting/qtextureglyphcache_p.h | 5 +++++ .../gl2paintengineex/qpaintengineex_opengl2.cpp | 20 ++++++++++++-------- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 97dfddf..ec5cef0 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3111,7 +3111,9 @@ void QRasterPaintEngine::drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, if (supportsSubPixelPositions) subPixelPosition = cache->subPixelPositionForX(positions[i].x); QTextureGlyphCache::GlyphAndSubPixelPosition glyph(glyphs[i], subPixelPosition); - const QTextureGlyphCache::Coord &c = cache->coords.value(glyph); + const QTextureGlyphCache::Coord &c = cache->coords[glyph]; + if (c.isNull()) + continue; int x = qFloor(positions[i].x) + c.baseLineX - margin; int y = qFloor(positions[i].y) - c.baseLineY - margin; diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp index 60300c3..670ca95 100644 --- a/src/gui/painting/qtextureglyphcache.cpp +++ b/src/gui/painting/qtextureglyphcache.cpp @@ -175,11 +175,16 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const metrics.yoff.toReal(), metrics.x.toReal(), metrics.y.toReal()); -#endif +#endif + GlyphAndSubPixelPosition key(glyph, subPixelPosition); int glyph_width = metrics.width.ceil().toInt(); int glyph_height = metrics.height.ceil().toInt(); - if (glyph_height == 0 || glyph_width == 0) + if (glyph_height == 0 || glyph_width == 0) { + // Avoid multiple calls to boundingBox() for non-printable characters + Coord c = { 0, 0, 0, 0, 0, 0 }; + coords.insert(key, c); continue; + } glyph_width += margin * 2 + 4; glyph_height += margin * 2 + 4; // align to 8-bit boundary @@ -192,7 +197,7 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const metrics.x.round().truncate(), -metrics.y.truncate() }; // baseline for horizontal scripts - listItemCoordinates.insert(GlyphAndSubPixelPosition(glyph, subPixelPosition), c); + listItemCoordinates.insert(key, c); rowHeight = qMax(rowHeight, glyph_height); } if (listItemCoordinates.isEmpty()) diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h index 4227e9a..7a0bdfd 100644 --- a/src/gui/painting/qtextureglyphcache_p.h +++ b/src/gui/painting/qtextureglyphcache_p.h @@ -107,6 +107,11 @@ public: int baseLineX; int baseLineY; + + bool isNull() const + { + return w == 0 || h == 0; + } }; bool populate(QFontEngine *fontEngine, int numGlyphs, const glyph_t *glyphs, diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index cdd785a..771d33f 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1556,7 +1556,6 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } } - if (recreateVertexArrays) { vertexCoordinates->clear(); textureCoordinates->clear(); @@ -1569,7 +1568,10 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp QTextureGlyphCache::GlyphAndSubPixelPosition glyph(staticTextItem->glyphs[i], subPixelPosition); - const QTextureGlyphCache::Coord &c = cache->coords.value(glyph); + const QTextureGlyphCache::Coord &c = cache->coords[glyph]; + if (c.isNull()) + continue; + int x = staticTextItem->glyphPositions[i].x.toInt() + c.baseLineX - margin; int y = staticTextItem->glyphPositions[i].y.toInt() - c.baseLineY - margin; @@ -1580,10 +1582,12 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp staticTextItem->userDataNeedsUpdate = false; } - if (elementIndices.size() < staticTextItem->numGlyphs*6) { + int numGlyphs = vertexCoordinates->vertexCount() / 4; + + if (elementIndices.size() < numGlyphs*6) { Q_ASSERT(elementIndices.size() % 6 == 0); int j = elementIndices.size() / 6 * 4; - while (j < staticTextItem->numGlyphs*4) { + while (j < numGlyphs*4) { elementIndices.append(j + 0); elementIndices.append(j + 0); elementIndices.append(j + 1); @@ -1672,9 +1676,9 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, false); #if defined(QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO) - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, 0); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, 0); #else - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); #endif shaderManager->setMaskType(QGLEngineShaderManager::SubPixelMaskPass2); @@ -1722,10 +1726,10 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp } #if defined(QT_OPENGL_DRAWCACHEDGLYPHS_INDEX_ARRAY_VBO) - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, 0); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); #else - glDrawElements(GL_TRIANGLE_STRIP, 6 * staticTextItem->numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); + glDrawElements(GL_TRIANGLE_STRIP, 6 * numGlyphs, GL_UNSIGNED_SHORT, elementIndices.data()); #endif } -- cgit v0.12 From afa22a20c1b89960b647b0e3a9dc390fe6f87eae Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Wed, 22 Dec 2010 08:48:40 +1000 Subject: tst_headers: make failure more detailed when failing to open a file Replace QVERIFY(f.open(...)) with QVERIFY2(f.open(...), qPrintable(f.errorString())) This pattern should be followed for all functions which can provide an error string on failure. --- tests/auto/headers/tst_headers.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/headers/tst_headers.cpp b/tests/auto/headers/tst_headers.cpp index 7ccf058..8c8bc2c 100644 --- a/tests/auto/headers/tst_headers.cpp +++ b/tests/auto/headers/tst_headers.cpp @@ -203,7 +203,7 @@ void tst_Headers::licenseCheck() QFETCH(QString, sourceFile); QFile f(sourceFile); - QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(f.errorString())); QByteArray data = f.readAll(); data.replace("\r\n", "\n"); // Windows data.replace('\r', '\n'); // Mac OS9 @@ -264,7 +264,7 @@ void tst_Headers::privateSlots() return; QFile f(header); - QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(f.errorString())); QStringList content = QString::fromLocal8Bit(f.readAll()).split("\n"); foreach (QString line, content) { @@ -286,7 +286,7 @@ void tst_Headers::macros() return; QFile f(header); - QVERIFY(f.open(QIODevice::ReadOnly)); + QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(f.errorString())); QByteArray data = f.readAll(); QStringList content = QString::fromLocal8Bit(data.replace('\r', "")).split("\n"); -- cgit v0.12 From 55c32b91a298d52bd7c29968d21b4b7a5ee741e4 Mon Sep 17 00:00:00 2001 From: Peter Yard Date: Wed, 22 Dec 2010 16:03:35 +1000 Subject: Docs: QTBUG-9150 Incorrect snippet in class doc. --- src/sql/models/qsqltablemodel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index 8589163..974cf7b 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -265,7 +265,7 @@ QSqlRecord QSqlTableModelPrivate::primaryValues(int row) QSqlTableModel can also be used to access a database programmatically, without binding it to a view: - \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 25 + \snippet doc/src/snippets/sqldatabase/sqldatabase.cpp 21 The code snippet above extracts the \c salary field from record 4 in the result set of the query \c{SELECT * from employee}. -- cgit v0.12 From cafbb2943eea989b0eeadb0c54c151ad921691b9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Dec 2010 19:44:53 +0100 Subject: Do not crash in case a future version of libdbus has a new kind of message. --- src/dbus/qdbusintegrator.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 1842e5a..f64b7ca 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -565,10 +565,8 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) return true; case QDBusMessage::ReplyMessage: case QDBusMessage::ErrorMessage: - return false; // we don't handle those here case QDBusMessage::InvalidMessage: - Q_ASSERT_X(false, "QDBusConnection", "Invalid message found when processing"); - break; + return false; // we don't handle those here } return false; -- cgit v0.12 From fb9ded4e5e3e85672beef83945b3a7e17371368c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 22 Dec 2010 12:12:30 +0100 Subject: Work around an apparent GCC optimiser bug accessing arrays beyond end Accessing arrays beyond their end is known to cause problems in gcc 4.4 and 4.5. So don't try to be too smart in accessing m[0][index] but instead access the array as it's meant to be. Upstream bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43247#c10 Reviewed-by: Olivier Goffart --- src/gui/math3d/qgenericmatrix.h | 68 ++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/src/gui/math3d/qgenericmatrix.h b/src/gui/math3d/qgenericmatrix.h index 3224ae2..f91bce7 100644 --- a/src/gui/math3d/qgenericmatrix.h +++ b/src/gui/math3d/qgenericmatrix.h @@ -198,52 +198,58 @@ Q_OUTOFLINE_TEMPLATE QGenericMatrix QGenericMatrix::transposed template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator+=(const QGenericMatrix& other) { - for (int index = 0; index < N * M; ++index) - m[0][index] += other.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] += other.m[col][row]; return *this; } template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator-=(const QGenericMatrix& other) { - for (int index = 0; index < N * M; ++index) - m[0][index] -= other.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] -= other.m[col][row]; return *this; } template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator*=(T factor) { - for (int index = 0; index < N * M; ++index) - m[0][index] *= factor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] *= factor; return *this; } template Q_OUTOFLINE_TEMPLATE bool QGenericMatrix::operator==(const QGenericMatrix& other) const { - for (int index = 0; index < N * M; ++index) { - if (m[0][index] != other.m[0][index]) - return false; - } + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) { + if (m[col][row] != other.m[col][row]) + return false; + } return true; } template Q_OUTOFLINE_TEMPLATE bool QGenericMatrix::operator!=(const QGenericMatrix& other) const { - for (int index = 0; index < N * M; ++index) { - if (m[0][index] != other.m[0][index]) - return true; - } + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) { + if (m[col][row] != other.m[col][row]) + return true; + } return false; } template Q_OUTOFLINE_TEMPLATE QGenericMatrix& QGenericMatrix::operator/=(T divisor) { - for (int index = 0; index < N * M; ++index) - m[0][index] /= divisor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + m[col][row] /= divisor; return *this; } @@ -251,8 +257,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator+(const QGenericMatrix& m1, const QGenericMatrix& m2) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = m1.m[0][index] + m2.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = m1.m[col][row] + m2.m[col][row]; return result; } @@ -260,8 +267,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator-(const QGenericMatrix& m1, const QGenericMatrix& m2) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = m1.m[0][index] - m2.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = m1.m[col][row] - m2.m[col][row]; return result; } @@ -284,8 +292,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator-(const QGenericMatrix& matrix) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = -matrix.m[0][index]; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = -matrix.m[col][row]; return result; } @@ -293,8 +302,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator*(T factor, const QGenericMatrix& matrix) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = matrix.m[0][index] * factor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = matrix.m[col][row] * factor; return result; } @@ -302,8 +312,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator*(const QGenericMatrix& matrix, T factor) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = matrix.m[0][index] * factor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = matrix.m[col][row] * factor; return result; } @@ -311,8 +322,9 @@ template Q_OUTOFLINE_TEMPLATE QGenericMatrix operator/(const QGenericMatrix& matrix, T divisor) { QGenericMatrix result(1); - for (int index = 0; index < N * M; ++index) - result.m[0][index] = matrix.m[0][index] / divisor; + for (int row = 0; row < M; ++row) + for (int col = 0; col < N; ++col) + result.m[col][row] = matrix.m[col][row] / divisor; return result; } -- cgit v0.12 From e1ac82f713ab2a766ae518f3ec7a7f76689acb48 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Thu, 23 Dec 2010 13:14:06 +1000 Subject: Improve docs for QTEST_MAIN macro. The macro doesn't always create a QApplication, it depends on whether QT_GUI_LIB is defined. Task-number: QTBUG-3899 Reviewed-by: Rohan McGovern --- src/testlib/qtestcase.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index e3a8726..207873e 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -298,10 +298,14 @@ QT_BEGIN_NAMESPACE \relates QTest - Implements a main() function that instantiates a QApplication object and + Implements a main() function that instantiates an application object and the \a TestClass, and executes all tests in the order they were defined. Use this macro to build stand-alone executables. + If \c QT_GUI_LIB is defined, the application object will be a QApplication, + otherwise it will be a QCoreApplication. If qmake is used and the configuration + includes \c{QT += gui}, then \c QT_GUI_LIB will be defined automatically. + \bold {Note:} On platforms that have keypad navigation enabled by default (eg: Symbian), this macro will forcfully disable it to simplify the usage of key events when writing autotests. If you wish to write a test case that uses keypad navigation, you should -- cgit v0.12 From 26d2580daab37f4a6ff595a5f18b8a49249b5da1 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Thu, 23 Dec 2010 14:31:54 +0100 Subject: improve performance of QTextEngine, esp. setBoundary by using non-detaching operator[] Improves scrolling in testfile content.xml attached to QTBUG-9549. According to callgrind, the improvement is nearly 35% (comparing total incl. cost of QTextEngine::setBoundary) total incl cost / calls to setBoundary = before: 6.0883269E9 / 46520 = approx. 130875.47 after: 2.4834313E9 / 29370 = approx. 84556.733 in relation this gives us: 84556.733 / 130875.47 = approx. 0.64608542 Merge-request: 975 Reviewed-by: Harald Fernengel --- src/gui/text/qtextengine.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 3bd6122..17d5fc1 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -894,16 +894,16 @@ void QTextEngine::shapeText(int item) const if (letterSpacingIsAbsolute) glyphs.advances_x[i-1] += letterSpacing; else { - const QFixed advance = glyphs.advances_x[i-1]; - glyphs.advances_x[i-1] += (letterSpacing - 100) * advance / 100; + QFixed &advance = glyphs.advances_x[i-1]; + advance += (letterSpacing - 100) * advance / 100; } } } if (letterSpacingIsAbsolute) glyphs.advances_x[si.num_glyphs-1] += letterSpacing; else { - const QFixed advance = glyphs.advances_x[si.num_glyphs-1]; - glyphs.advances_x[si.num_glyphs-1] += (letterSpacing - 100) * advance / 100; + QFixed &advance = glyphs.advances_x[si.num_glyphs-1]; + advance += (letterSpacing - 100) * advance / 100; } } if (wordSpacing != 0) { @@ -2521,14 +2521,14 @@ void QTextEngine::setBoundary(int strPos) const return; int itemToSplit = 0; - while (itemToSplit < layoutData->items.size() && layoutData->items[itemToSplit].position <= strPos) + while (itemToSplit < layoutData->items.size() && layoutData->items.at(itemToSplit).position <= strPos) itemToSplit++; itemToSplit--; - if (layoutData->items[itemToSplit].position == strPos) { + if (layoutData->items.at(itemToSplit).position == strPos) { // already a split at the requested position return; } - splitItem(itemToSplit, strPos - layoutData->items[itemToSplit].position); + splitItem(itemToSplit, strPos - layoutData->items.at(itemToSplit).position); } void QTextEngine::splitItem(int item, int pos) const -- cgit v0.12 From b7ac9ed56ff8bfb3158d115ea7c6e3eef250f4bc Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Tue, 28 Dec 2010 14:19:18 +0100 Subject: Add compiler optimization for QtScript/JSC on Symbian Ported from http://trac.webkit.org/changeset/73126. This gives a ~70% performance improvement for the SunSpider and V8 benchmarks. Task-number: QTBUG-15847 Reviewed-by: Simon Hausmann --- src/script/script.pro | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/script/script.pro b/src/script/script.pro index 4ee86d7..d1633d8 100644 --- a/src/script/script.pro +++ b/src/script/script.pro @@ -84,5 +84,15 @@ symbian { LIBS += -lhal } +symbian { + symbian-abld|symbian-sbsv2 { + MMP_RULES += ALWAYS_BUILD_AS_ARM + } else { + QMAKE_CFLAGS -= --thumb + QMAKE_CXXFLAGS -= --thumb + } + QMAKE_CXXFLAGS.ARMCC += -OTime -O3 +} + # WebKit doesn't compile in C++0x mode *-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x -- cgit v0.12 From 5d18d393808d7a4be56eb00ab9f1e9cda9e211c9 Mon Sep 17 00:00:00 2001 From: Ville Pernu Date: Fri, 31 Dec 2010 12:48:09 +0200 Subject: Fix QNetworkReply autotest cases for QT-3494 These fixes add a new QTest columns to cases tst_QNetworkReply:: ioGetFromHttpStatus100_data and tst_QNetworkReply::ioGetFromHttpNoHeaders. Each test row now has an expected error message per input data string. Task-Number: QT-3494 Reviewed-By: Perttu Pohjonen --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index cff0ae9..6cd9d3c 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -2585,17 +2585,19 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer() void tst_QNetworkReply::ioGetFromHttpStatus100_data() { QTest::addColumn("dataToSend"); - QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n"); - QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n"); - QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::addColumn("expectedError"); + QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n") << QNetworkReply::RemoteHostClosedError; + QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n") << QNetworkReply::RemoteHostClosedError; + QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; } void tst_QNetworkReply::ioGetFromHttpStatus100() { QFETCH(QByteArray, dataToSend); + QFETCH(QNetworkReply::NetworkError, expectedError); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2607,7 +2609,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->error(), expectedError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QVERIFY(reply->rawHeader("bla").isNull()); } @@ -2615,12 +2617,14 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() void tst_QNetworkReply::ioGetFromHttpNoHeaders_data() { QTest::addColumn("dataToSend"); - QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n"); + QTest::addColumn("expectedError"); + QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n") << QNetworkReply::RemoteHostClosedError; } void tst_QNetworkReply::ioGetFromHttpNoHeaders() { QFETCH(QByteArray, dataToSend); + QFETCH(QNetworkReply::NetworkError, expectedError); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2632,7 +2636,7 @@ void tst_QNetworkReply::ioGetFromHttpNoHeaders() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->error(), expectedError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); } -- cgit v0.12 From 1f24941131a7ab62969265f1e29ef990dbc60ff5 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 3 Jan 2011 12:35:16 +0200 Subject: Ignore static_and_shared in Symbian builds. The function addExclusiveBuilds doesn't work on Symbian and is unlikely to ever work due to build system mandated target directories, so ignore static_and_shared in Symbian builds that rely on Symbian toolchains. Task-number: QTBUG-16298 Reviewed-by: axis --- mkspecs/features/static_and_shared.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/static_and_shared.prf b/mkspecs/features/static_and_shared.prf index f586bdd..39a9a1f 100644 --- a/mkspecs/features/static_and_shared.prf +++ b/mkspecs/features/static_and_shared.prf @@ -1,3 +1,3 @@ -!contains(TEMPLATE, subdirs):!macx-xcode { +!contains(TEMPLATE, subdirs):!macx-xcode:!symbian-abld:!symbian-sbsv2 { addExclusiveBuilds(static, Static, shared, Shared) } -- cgit v0.12 From 00cf748fa3d241e52dc0908da90864ea397dab8a Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Mon, 3 Jan 2011 15:08:22 +0100 Subject: Fix crash when closing QFontDialog::getFont() dialog Unfortunately, given the large number of ways of showing a QFontDialog, it's possible that we try to close the dialog before its event loop is finished. Setting the Cocoa font panel's isReleaseOnClose property to FALSE ensures the panel is still around when we effectively exit the dialog's event loop. Reviewed-by: Richard Task-number: QTBUG-15666 --- src/gui/dialogs/qfontdialog_mac.mm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm index 9c63dfa..e2c0ef5 100644 --- a/src/gui/dialogs/qfontdialog_mac.mm +++ b/src/gui/dialogs/qfontdialog_mac.mm @@ -116,6 +116,7 @@ const int StyleMask = NSTitledWindowMask | NSClosableWindowMask | NSResizableWin - (void)showModelessPanel; - (void)showWindowModalSheet:(QWidget *)docWidget; - (void)runApplicationModalPanel; +- (BOOL)isAppModal; - (void)changeFont:(id)sender; - (void)changeAttributes:(id)sender; - (BOOL)windowShouldClose:(id)window; @@ -226,6 +227,7 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont) QBoolBlocker nativeDialogOnTop(QApplicationPrivate::native_modal_dialog_active); mAppModal = true; NSWindow *ourPanel = [mStolenContentView window]; + [ourPanel setReleasedWhenClosed:NO]; [NSApp runModalForWindow:ourPanel]; QAbstractEventDispatcher::instance()->interrupt(); @@ -235,6 +237,11 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont) mPriv->fontDialog()->reject(); } +- (BOOL)isAppModal +{ + return mAppModal; +} + - (void)showWindowModalSheet:(QWidget *)docWidget { #ifdef QT_MAC_USE_COCOA @@ -485,6 +492,8 @@ void QFontDialogPrivate::closeCocoaFontPanel() QT_MANGLE_NAMESPACE(QCocoaFontPanelDelegate) *theDelegate = static_cast(delegate); NSWindow *ourPanel = [theDelegate actualPanel]; [ourPanel close]; + if ([theDelegate isAppModal]) + [ourPanel release]; [theDelegate cleanUpAfterMyself]; [theDelegate release]; this->delegate = 0; -- cgit v0.12 From e21f066df7017e8cb8e50a387b3bf952cf497602 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Tue, 4 Jan 2011 11:12:30 +1000 Subject: Update visual tests Minor changes in flickable and rectangle radius behaviours have led to some altered pixels here and there. Task-number: QTBUG-14792 --- .../qmlvisual/ListView/data/listview.5.png | Bin 1661 -> 1663 bytes .../qmlvisual/ListView/data/listview.6.png | Bin 1674 -> 1666 bytes .../qmlvisual/ListView/data/listview.qml | 234 ++--- .../data/flickable-horizontal.0.png | Bin 1439 -> 1436 bytes .../data/flickable-horizontal.1.png | Bin 1424 -> 1426 bytes .../data/flickable-horizontal.2.png | Bin 1428 -> 1429 bytes .../data/flickable-horizontal.3.png | Bin 1397 -> 1395 bytes .../data/flickable-horizontal.4.png | Bin 1454 -> 1450 bytes .../data/flickable-horizontal.qml | 578 +++++------ .../data/flickable-vertical.0.png | Bin 1073 -> 1070 bytes .../data/flickable-vertical.1.png | Bin 1063 -> 1064 bytes .../data/flickable-vertical.2.png | Bin 1080 -> 1079 bytes .../data/flickable-vertical.3.png | Bin 1080 -> 1079 bytes .../data/flickable-vertical.4.png | Bin 1056 -> 1057 bytes .../data/flickable-vertical.5.png | Bin 1075 -> 1080 bytes .../data/flickable-vertical.6.png | Bin 1029 -> 1030 bytes .../data/flickable-vertical.7.png | Bin 1073 -> 1070 bytes .../data/flickable-vertical.8.png | Bin 1053 -> 1055 bytes .../data/flickable-vertical.qml | 1034 ++++++++++---------- .../qmlvisual/rect/data/rect-painting.0.png | Bin 15272 -> 15366 bytes 20 files changed, 923 insertions(+), 923 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png index 63a594e..d1f06fa 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 05e24c6..9e6e29c 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 059128d..b1ffe8f 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: "84b477b46c313d6dcb0a77628182905b" + hash: "ad913e53e63c030ffdf4560766722760" } Mouse { type: 5 @@ -1570,7 +1570,7 @@ VisualTest { } Frame { msec: 4256 - hash: "281c0499db31ca78175ca7af6292b853" + hash: "ef31f8a4d5bde5a2e308d19ee6d5e759" } Mouse { type: 5 @@ -1582,7 +1582,7 @@ VisualTest { } Frame { msec: 4272 - hash: "5c29d61f037e4636988fdc99ee2ed8a4" + hash: "3ba07527f66e8bea5a8fb7647b0b4f3f" } Mouse { type: 5 @@ -1594,7 +1594,7 @@ VisualTest { } Frame { msec: 4288 - hash: "a18f5e9f7be932dcd1bcb4c7fe0797e8" + hash: "70e5fe656f5fd843383964825690b678" } Mouse { type: 5 @@ -1614,7 +1614,7 @@ VisualTest { } Frame { msec: 4304 - hash: "85a4130b4a57ef79e90d350cf4816801" + hash: "b7d8738be4cd6caa63dbecdb0f810a2f" } Mouse { type: 5 @@ -1626,7 +1626,7 @@ VisualTest { } Frame { msec: 4320 - hash: "364dd89fd6f96e1c77723436c7078a7b" + hash: "d6312191f9d7bbddc07f9253d8a93469" } Mouse { type: 5 @@ -1638,7 +1638,7 @@ VisualTest { } Frame { msec: 4336 - hash: "3e37312c45aa92de34d9661f9b482c48" + hash: "b182da64886cf4f444296e5fde26701e" } Mouse { type: 5 @@ -1650,7 +1650,7 @@ VisualTest { } Frame { msec: 4352 - hash: "dc2d63ad430ea6214f962629793925f3" + hash: "ebefef14b6fb990e0c6900884528bbd3" } Mouse { type: 5 @@ -1662,7 +1662,7 @@ VisualTest { } Frame { msec: 4368 - hash: "188fe1e6af9d02b2680426127ef1d39e" + hash: "9a3451ed091b1bb6b975a9c5506b1ea4" } Mouse { type: 5 @@ -1674,7 +1674,7 @@ VisualTest { } Frame { msec: 4384 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Mouse { type: 5 @@ -1686,7 +1686,7 @@ VisualTest { } Frame { msec: 4400 - hash: "bb74813667f49b15978aa78843436205" + hash: "eaaf9ea1d7fcf4a2a9dd58b1b5bb3cae" } Mouse { type: 5 @@ -1698,7 +1698,7 @@ VisualTest { } Frame { msec: 4416 - hash: "8e88500470517ed1d7c3ca10edd4e230" + hash: "7ca8e3d76cf913d85f84f0b96acde829" } Mouse { type: 5 @@ -1710,7 +1710,7 @@ VisualTest { } Frame { msec: 4432 - hash: "614dc45593db51f467adeda87d84f9a4" + hash: "7cfef56b24a552c6d4ecb3d0b88a1d08" } Mouse { type: 5 @@ -1730,7 +1730,7 @@ VisualTest { } Frame { msec: 4448 - hash: "b170583b9b284debdd04af643752aa6b" + hash: "d032b257259810b4fe514c63ca5c9e4b" } Mouse { type: 5 @@ -1742,7 +1742,7 @@ VisualTest { } Frame { msec: 4464 - hash: "dba0394b92f3ee166bc397439a86e6dc" + hash: "568f6a57e6f1644b0dc245d03a1d7b85" } Mouse { type: 5 @@ -1754,87 +1754,87 @@ VisualTest { } Frame { msec: 4480 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4496 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4512 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4528 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4544 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4560 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4576 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4592 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4608 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4624 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4640 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4656 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4672 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4688 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4704 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4720 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4736 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4752 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4768 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4784 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4800 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4816 @@ -1842,11 +1842,11 @@ VisualTest { } Frame { msec: 4832 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Frame { msec: 4848 - hash: "74b499d5d764bf53efbee8932bab3cc3" + hash: "5cb4cf2c527d821db2a5072dd3702653" } Mouse { type: 5 @@ -1866,7 +1866,7 @@ VisualTest { } Frame { msec: 4864 - hash: "95ab953fc04389396da9a38d97262d98" + hash: "d48ecbd0661e08b2117fe2fd96ffeb2c" } Mouse { type: 5 @@ -1878,7 +1878,7 @@ VisualTest { } Frame { msec: 4880 - hash: "614dc45593db51f467adeda87d84f9a4" + hash: "7cfef56b24a552c6d4ecb3d0b88a1d08" } Mouse { type: 5 @@ -1890,7 +1890,7 @@ VisualTest { } Frame { msec: 4896 - hash: "0d884cdb22e3668203d07c72055bcb85" + hash: "5b12e9d17d9d464b055601db9cf0da44" } Mouse { type: 5 @@ -1902,7 +1902,7 @@ VisualTest { } Frame { msec: 4912 - hash: "23bd71236829253fb3ef18ebc9dd3136" + hash: "25333e1f0cc9cfc664fd7369af544c06" } Mouse { type: 5 @@ -1914,39 +1914,39 @@ VisualTest { } Frame { msec: 4928 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4944 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4960 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4976 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 4992 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5008 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5024 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5040 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5056 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Mouse { type: 3 @@ -1958,179 +1958,179 @@ VisualTest { } Frame { msec: 5072 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5088 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5104 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5120 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5136 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5152 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5168 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5184 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5200 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5216 - hash: "bdb784f5ccf428f8b8a9d29310069808" + hash: "04290d8d62436c8a812f886e0a56ec1b" } Frame { msec: 5232 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5248 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5264 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5280 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5296 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5312 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5328 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5344 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5360 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5376 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5392 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5408 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5424 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5440 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5456 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5472 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5488 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5504 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5520 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5536 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5552 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5568 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5584 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5600 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5616 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5632 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5648 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5664 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5680 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5696 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5712 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5728 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5744 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5760 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5776 @@ -2138,90 +2138,90 @@ VisualTest { } Frame { msec: 5792 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5808 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5824 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5840 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5856 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5872 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5888 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5904 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5920 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5936 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5952 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5968 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 5984 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6000 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6016 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6032 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6048 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6064 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6080 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6096 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6112 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } Frame { msec: 6128 - hash: "9ba43cbdd92c077f64e4a59c6c1c42ac" + hash: "dbd87bf02d698b7f053d307ef0c98452" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png index e1b0967..968a78f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png index c7d4e1d..55ab3b7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png index 9373fae..a6ec6d1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png index 7a30196..e6755ac 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png index 4c4d17c..bc65634 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml index a94aca8..106d108 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml @@ -10,179 +10,179 @@ VisualTest { } Frame { msec: 32 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 48 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 64 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 80 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 96 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 112 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 128 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 144 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 160 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 176 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 192 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 208 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 224 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 240 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 256 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 272 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 288 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 304 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 320 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 336 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 352 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 368 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 384 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 400 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 416 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 432 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 448 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 464 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 480 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 496 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 512 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 528 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 544 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 560 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 576 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 592 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 608 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 624 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 640 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 656 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 672 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 688 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 704 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 720 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 2 @@ -194,15 +194,15 @@ VisualTest { } Frame { msec: 736 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 752 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 768 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -214,7 +214,7 @@ VisualTest { } Frame { msec: 784 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -226,7 +226,7 @@ VisualTest { } Frame { msec: 800 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -246,7 +246,7 @@ VisualTest { } Frame { msec: 816 - hash: "c92e345e4ffdb30c28d9d5aa5400bd30" + hash: "49372aa66b86904d587b72c6c2cfd467" } Mouse { type: 5 @@ -258,7 +258,7 @@ VisualTest { } Frame { msec: 832 - hash: "90f94986ab44ab59618e9a5da17b8cc9" + hash: "06519aabcc86c5fd961c80a65d2cf67c" } Mouse { type: 5 @@ -270,7 +270,7 @@ VisualTest { } Frame { msec: 848 - hash: "0154a65f8693b98576101ac1c2fc8761" + hash: "c3b182c37393ea0468c06474e84f127f" } Mouse { type: 5 @@ -290,31 +290,31 @@ VisualTest { } Frame { msec: 864 - hash: "792c1b5267f14c891dae2348a8188a92" + hash: "dce4bcca20e89c40a603394515f679b1" } Frame { msec: 880 - hash: "15ce9e88d4ad2e698bf167d1432c0b8a" + hash: "dabf2b63bedd0073f761a858f048df5a" } Frame { msec: 896 - hash: "8f4109ef4c24d286d73f689565a0d056" + hash: "c51ca7786b7346b3e62b774c01a67f98" } Frame { msec: 912 - hash: "f5728190bf5c94742686f063b4a4b09b" + hash: "d1628aa2fd1ec92021fa37f9960fb06a" } Frame { msec: 928 - hash: "a38c7527a9a818b7bc25466b0e4939f9" + hash: "4e571776c8a01d1ab79ff1c3affc0474" } Frame { msec: 944 - hash: "ed3902455fc31a4e3232308b815a4daa" + hash: "85a3c22ecaed87c119202b76e22f2b2e" } Frame { msec: 960 - hash: "a2093589363ac2d50491412e99e0193a" + hash: "42d345e97b0a8e5cbcfdf4243ccafcdc" } Frame { msec: 976 @@ -322,227 +322,227 @@ VisualTest { } Frame { msec: 992 - hash: "c32349580e3a9586cc1133c935607cf0" + hash: "1a651405076d8980b03cc8279a379fff" } Frame { msec: 1008 - hash: "cd2068492e346eb20d50aee69e3a3559" + hash: "8c4f3c6a4c67c76fe92ff401114892e7" } Frame { msec: 1024 - hash: "f43a1a38894b8ffad009ba995d84b0ee" + hash: "447a817e33cd8213e362192ffe663272" } Frame { msec: 1040 - hash: "2d5c4a73df2a054801571f1ce119e31f" + hash: "eed6ba9be5f7869101068afd1d46cb69" } Frame { msec: 1056 - hash: "b8825cc6bdca8102a655d797ea41b5b1" + hash: "15ae5acff4211f97802c6c50649ad487" } Frame { msec: 1072 - hash: "3f0be15b85220743d004f2d54b6e137c" + hash: "e30b0a23e215c0b9b71b083381a8523e" } Frame { msec: 1088 - hash: "4b0952d33149b44ffa0a06723a4116c7" + hash: "6fad48a7d3a2480468aca07e6760de94" } Frame { msec: 1104 - hash: "9056bda43259e92cfe56fdf394e2ca54" + hash: "998bd191ac5bac1f300e247514a112d7" } Frame { msec: 1120 - hash: "82ec9f09d2303e5b0b9c05b9a10a84db" + hash: "9245e8bf2fb38f491aa7f0da4400e190" } Frame { msec: 1136 - hash: "751a9b3054c09d900364d7c9cac8bc2b" + hash: "7565ea1f01cd9ad5d92e2a0ee7fc947d" } Frame { msec: 1152 - hash: "17dfdfef20f9da7e8b6f16df974baea9" + hash: "898c6e226787391340099910ee128ed6" } Frame { msec: 1168 - hash: "108e6d9a5a81df32823bfd7a90a000a7" + hash: "bafd74d70e99cf4053d3c00d18915762" } Frame { msec: 1184 - hash: "71dd0d55a3e837d3a8e4b4e318579ade" + hash: "6456a5ca9bb90b2d0fb99bae63a8db35" } Frame { msec: 1200 - hash: "8013cdb2615bca89134ea040409af509" + hash: "2b34216c9f7c76133ef4889b74df7ad9" } Frame { msec: 1216 - hash: "4b2826ad4c755690bd837994133f5fac" + hash: "cbc75068017b378f277c2692f2cb1709" } Frame { msec: 1232 - hash: "52d0da7f138bd37ac587a448d6402aca" + hash: "8c72d80a5a2776ee2d805c089f5c534d" } Frame { msec: 1248 - hash: "e634724c5bb294d338210845bf64d2cf" + hash: "d5a248b9177e078cad40af72b3cbceb5" } Frame { msec: 1264 - hash: "59bc5f0d057ee431f289806377f19213" + hash: "1a9b246f8223bbcf6421a22e8a1fb50e" } Frame { msec: 1280 - hash: "6ef2c5f7766c2cc77b30d636bfaa4422" + hash: "ea9b292eb000a9e4c5b46a8d94b8e80e" } Frame { msec: 1296 - hash: "578d056c3db094420dbaa51bd08ced20" + hash: "ac059cd45cd1936a7ff3fd0fc9fa688b" } Frame { msec: 1312 - hash: "14c6f7a04a52caffefa07af556ccb262" + hash: "fda383d47ffb1e2fd633793594831cfb" } Frame { msec: 1328 - hash: "7cb63d56fec144d0509ce219fc6fe459" + hash: "a4c7709f3642088e4be48ec607d0a0fe" } Frame { msec: 1344 - hash: "462dafa7f6427aecf6c28a5dcf5a10cc" + hash: "08d0268402d4a410f5f8c9bb8ba7b306" } Frame { msec: 1360 - hash: "45360814f985ed780a443568a91fc170" + hash: "ecc8f3c4faf86362e45b465b0f4d6dc2" } Frame { msec: 1376 - hash: "0d18ceb2436e4f7eb56a3443fab706e6" + hash: "3107a4b522744a643dd107da5e5e13c2" } Frame { msec: 1392 - hash: "1d83f367ba9f7f1d4496208271e925ed" + hash: "44c1731d0433aac53edc2e88a38c66b0" } Frame { msec: 1408 - hash: "fdbd00ee4c122aef779df42ea53f403a" + hash: "d86e9dfb38be51b2fa9cf44271eddc3e" } Frame { msec: 1424 - hash: "bedd1cb304efd4851813b39a746198a4" + hash: "0c33ce00df6fbb848d300aa510ad80d9" } Frame { msec: 1440 - hash: "9aa7bed86efa9634466736f20ee0ab5b" + hash: "48ff92aaa0c797c10ca8dbc5b2240736" } Frame { msec: 1456 - hash: "00fc8186a7ae44e10195a7b13defa0d2" + hash: "8582fd8c3643d9a5c1993e1607c6fae8" } Frame { msec: 1472 - hash: "42d6e8e0bbed879ed63644c83e61e7bd" + hash: "2390e374160ec5bc99613a463aa98fb2" } Frame { msec: 1488 - hash: "df074f8c210249e5ef652349479b6325" + hash: "369a11c32596b668a4f275232c45ac68" } Frame { msec: 1504 - hash: "4f94020437e35cf44dd3576997990ab7" + hash: "0b0d82d523a77a925ee00cf457326034" } Frame { msec: 1520 - hash: "8ca6c3b4fa3be73ac35073356b680a35" + hash: "48e7a92905761d7f0b8b9ac95bb5ff45" } Frame { msec: 1536 - hash: "c25eee1c5791383ebc59974e7754eacb" + hash: "2cdccfd2cdf56728fa07a49de34142d9" } Frame { msec: 1552 - hash: "f4917ada78942428cc6b9aa5e56c013d" + hash: "83a8166805523ee8426d88ef80c8f3a9" } Frame { msec: 1568 - hash: "23e1e607101fc7260a4ac841344f5fe0" + hash: "20ac2e68a5c733dc6128921c34f033e5" } Frame { msec: 1584 - hash: "2dcc7d187d8e0493e5766efbf09ef37c" + hash: "836963a1ed3084606b80b7f82fee09ef" } Frame { msec: 1600 - hash: "c1e5602753e80cf44d7b330140c6912e" + hash: "ee49c684d788558e20a10899ebe0b6c2" } Frame { msec: 1616 - hash: "febaf72d01a3763461b4b7d2ddd7a23e" + hash: "e00c0b340165d335cb49730890eca301" } Frame { msec: 1632 - hash: "071262b911b61576f451be25691a57cf" + hash: "fba2c2adeef04e6c1a764c4d8a1a97bc" } Frame { msec: 1648 - hash: "44705db9289fd8753b9d63e8bc963b38" + hash: "8160bd2a6daa2757b948d038fa754c77" } Frame { msec: 1664 - hash: "0c41d7b7d36bd083abfc0b83b862cad9" + hash: "10130d0b75ce420f5c9af6f181500783" } Frame { msec: 1680 - hash: "0c41d7b7d36bd083abfc0b83b862cad9" + hash: "10130d0b75ce420f5c9af6f181500783" } Frame { msec: 1696 - hash: "071262b911b61576f451be25691a57cf" + hash: "fba2c2adeef04e6c1a764c4d8a1a97bc" } Frame { msec: 1712 - hash: "a00aa90e894b48203b0446ca287ee712" + hash: "fec5477699ba60da129866e1c3727e08" } Frame { msec: 1728 - hash: "26c9ca53ee4b084c6595ad65bf4880df" + hash: "12076b96a177bd24be8ad4a3dc179d79" } Frame { msec: 1744 - hash: "f4917ada78942428cc6b9aa5e56c013d" + hash: "83a8166805523ee8426d88ef80c8f3a9" } Frame { msec: 1760 - hash: "ffedee7bf2d8099e361b8b1706b03f88" + hash: "e9016d43624060ef4efbad2b7bc53b1b" } Frame { msec: 1776 - hash: "1778ef1629ce977015b641448b46634f" + hash: "483700c4ba07a9f01d2a226a3efde15f" } Frame { msec: 1792 - hash: "42d6e8e0bbed879ed63644c83e61e7bd" + hash: "2390e374160ec5bc99613a463aa98fb2" } Frame { msec: 1808 - hash: "99e843ec69b79b79b0792e0a2f28cd1b" + hash: "094df49593f0cd1d6de4a0b91c459d15" } Frame { msec: 1824 - hash: "8b3ebca70b50a6a93823e015ea80f0f9" + hash: "0a60ed609c7fcb2d485f393ea309527a" } Frame { msec: 1840 - hash: "8eaa7f076064ce55051237b04861e408" + hash: "d4e0f07c2f298626ae800d5d7b5f098b" } Frame { msec: 1856 - hash: "6acc0ca5e5808d911287edfa78c8ac02" + hash: "ff249c1301704da0b82b023558512c6a" } Frame { msec: 1872 - hash: "e9f05899e0b53c21f6efe834095a3ea4" + hash: "42883458efeb17ff1e52296ae7228fb2" } Mouse { type: 2 @@ -562,7 +562,7 @@ VisualTest { } Frame { msec: 1888 - hash: "e9f05899e0b53c21f6efe834095a3ea4" + hash: "42883458efeb17ff1e52296ae7228fb2" } Mouse { type: 5 @@ -582,7 +582,7 @@ VisualTest { } Frame { msec: 1904 - hash: "d2dece405f5f6ed1de2acb6615a931de" + hash: "36a4b0d745ee8fa53e906b7a23b7ab88" } Mouse { type: 5 @@ -594,7 +594,7 @@ VisualTest { } Frame { msec: 1920 - hash: "21e0f21edc77424e8327c9a3350ecc1d" + hash: "826187b1a24fd09e1abcb6a01c59c059" } Mouse { type: 5 @@ -626,7 +626,7 @@ VisualTest { } Frame { msec: 1952 - hash: "c10c8b0c94f899414d8b3ef0b7c97646" + hash: "426f9459ac16c2903f85d618b366a475" } Mouse { type: 5 @@ -646,235 +646,235 @@ VisualTest { } Frame { msec: 1968 - hash: "807aff4e6c96a9d0de7fa55e233446b1" + hash: "d43dc1cfeaac1da281f2cdbffda93d17" } Frame { msec: 1984 - hash: "dbd02848cefacbb26f4bcb7d8f073d6c" + hash: "766dd54cdb6253ead664b6ab852e934b" } Frame { msec: 2000 - hash: "9a60608d8ea1b39fa2d3851873f2f08e" + hash: "1db59868779a357917a5d4859130108e" } Frame { msec: 2016 - hash: "e7b3e3a40281f63889808211d6746374" + hash: "1da33a5f6a001915464f34799a651f7a" } Frame { msec: 2032 - hash: "188c225c46ec00105df230bfeea09974" + hash: "868a6e445623378b6590789156e4b7e0" } Frame { msec: 2048 - hash: "e2e977b42e91d8c5dee57fd8245692eb" + hash: "46ae42a4b7f00e24a10ffdfd7a076b68" } Frame { msec: 2064 - hash: "ca2f12fb173c405f95e608858ab982ad" + hash: "2a91ffdfec461f573784cfaed2150e33" } Frame { msec: 2080 - hash: "fa86ee5f25fa425cf2569c8ef570b9d8" + hash: "2cbaa11e8589c806e65e52ce59ad1c42" } Frame { msec: 2096 - hash: "9b74656866fb8c7394bbbecec6414aca" + hash: "3b93b1e1fa7963d5a75103814f93a0a2" } Frame { msec: 2112 - hash: "87147326d1baab174c0f9a5ccdc2cb84" + hash: "a2e59dc9459a7afb6916638d08330dff" } Frame { msec: 2128 - hash: "c0d00f98c71bf3f8e5954b45fbab95a8" + hash: "cb3e8334babe3abffa202c2ba2d3b21f" } Frame { msec: 2144 - hash: "c087d1d62e56e573b55c1d8599bba8a6" + hash: "07882f5f098e59c479f089dbc74612bf" } Frame { msec: 2160 - hash: "dd5a94c6febdee58e8f115cb75131aaa" + hash: "e9ad84bf0c7f83bfe1bff3afed591bfd" } Frame { msec: 2176 - hash: "a7465d6137f865f512ce65ceb29533b4" + hash: "1839c26fda8710dc3fa7f5abd8136eee" } Frame { msec: 2192 - hash: "409086f6bb661aab8b548fea56d7e6b1" + hash: "15e3bdd811c390ad3a9cf22949568ed7" } Frame { msec: 2208 - hash: "6a22911e0fb58df31271baa463ff599d" + hash: "61ede9a7ef29997627bb08070fea65a4" } Frame { msec: 2224 - hash: "c4f6dd30d5fdfcf91a8b29cf5c622423" + hash: "fac89040e757522117e3792625ca6a19" } Frame { msec: 2240 - hash: "5a95b83f237c7243a198a43e9a587179" + hash: "1dc01a1118681f8606768fcf246397f7" } Frame { msec: 2256 - hash: "d79ed290efc6dbd976d574bf0b14a6a3" + hash: "2b243094b7f25368a8fb4a9014968cad" } Frame { msec: 2272 - hash: "a7bcb436e96d7c981852239462573495" + hash: "c6677acf9b9d632bc99caa8626448c49" } Frame { msec: 2288 - hash: "f63cc82e351daab503e316f8b516990f" + hash: "9035988b0dc0b7065fe4f1d1a4737801" } Frame { msec: 2304 - hash: "4ea63cd25a1424042ffc60549a78563c" + hash: "cd34e7118d43968cfcf52ed9ce58fc0a" } Frame { msec: 2320 - hash: "ef0fb776012575b3b0dbf6e5f4dee571" + hash: "7142aeaed61722424e184c55bb8d047c" } Frame { msec: 2336 - hash: "e2508faec7737be2666d87ad715b5f74" + hash: "9113c68cf5689e1f4690e58bbf824ae6" } Frame { msec: 2352 - hash: "9fe4e897c6b853f774d11817a0eb53bf" + hash: "2f9ec963d6f06f8252a69760965df2ee" } Frame { msec: 2368 - hash: "c122ce2e73cbfedcc99d649c21d91f9d" + hash: "07373282f0337437944dc8fff1e32343" } Frame { msec: 2384 - hash: "883b8b180853f1f432ae98ddfe1b6ce3" + hash: "4769fa4ba0c08baefa431b94b47a7ffc" } Frame { msec: 2400 - hash: "d0808284e431da60f61d571c257a3011" + hash: "390cd7786aa1989b590033682472f604" } Frame { msec: 2416 - hash: "df90f19450bf4d9496aab987a89e3a02" + hash: "482e2969bc1a877ba63c3df65ec04b7e" } Frame { msec: 2432 - hash: "5640c1e64556b90e7fbd4448fa9db462" + hash: "e3dc252a3a0b35398bf3d91c37d6b5e9" } Frame { msec: 2448 - hash: "6d9b5c2f7d0dedbbc444e69bb39fed08" + hash: "5bce3aac5cc049d81a74e7f71e2cf522" } Frame { msec: 2464 - hash: "485c4a8049068cf73bf22db5fd3618be" + hash: "390edc00756c4e92e94a7a75f3d65c45" } Frame { msec: 2480 - hash: "9e25da59c9e7e4cf7796902e8e2ff92a" + hash: "285397b2ff5a64d2a112c458d6ec5aba" } Frame { msec: 2496 - hash: "bd45e8f2442d7c1a1b16a762bc29e7cf" + hash: "ed0889dc439d66e6b5a81059956ef564" } Frame { msec: 2512 - hash: "ec1013d23e581dbb39b1549d2e1b3b32" + hash: "cb804da0db92d879a5cb8f138c546f88" } Frame { msec: 2528 - hash: "1ea3c2fde8ee3a14406e027f2124d793" + hash: "523fe4d3d9c11631f41d96bcc604103b" } Frame { msec: 2544 - hash: "3c3f31a05fb2f32538872c9fa158aaab" + hash: "cc4717c4233f9a2f2380bfad6dc89075" } Frame { msec: 2560 - hash: "05a84d9c55e634ec01edd2a63e13613b" + hash: "65c4171ff3e98aa04667606d9f6bd9b3" } Frame { msec: 2576 - hash: "0f7ccd2da58e2e73b0ab18bb681dafd5" + hash: "b2994136a603206c8013158fd67ca6bd" } Frame { msec: 2592 - hash: "e481ff78029f8bc4bf7c697db6824f6a" + hash: "44ad0d4645a01243b9d9be0faaf6d6ee" } Frame { msec: 2608 - hash: "efb92b8b7a90acabeb4a8d5cae52fe3c" + hash: "3b7b06f5f3f028fbae21dfedf821e696" } Frame { msec: 2624 - hash: "4728dd0fac4edf40cfd5ef5a422b4ed9" + hash: "b86466e530c3bd51353074cbb9da9ec3" } Frame { msec: 2640 - hash: "27641dcd772c979ae22d12bfbadbb67f" + hash: "2528deb04bae8b89a85dc6fcea05dbbd" } Frame { msec: 2656 - hash: "26268714105bc4832d336a38a859fc50" + hash: "e0ff5e36bff2b9e08244fc7f79cecee6" } Frame { msec: 2672 - hash: "caf0d351d3b6914ca52853a30643ea48" + hash: "34ca311d2e3462da3779324419c027e7" } Frame { msec: 2688 - hash: "319824b1143925162f04aaddcfaa65d9" + hash: "75aae68f21f68364a897c504f26ee655" } Frame { msec: 2704 - hash: "73aa36815f34bf5e005000e7da38555e" + hash: "8039e52e7f1977433596c1a34a41cc9f" } Frame { msec: 2720 - hash: "73aa36815f34bf5e005000e7da38555e" + hash: "8039e52e7f1977433596c1a34a41cc9f" } Frame { msec: 2736 - hash: "319824b1143925162f04aaddcfaa65d9" + hash: "75aae68f21f68364a897c504f26ee655" } Frame { msec: 2752 - hash: "caf0d351d3b6914ca52853a30643ea48" + hash: "34ca311d2e3462da3779324419c027e7" } Frame { msec: 2768 - hash: "c87ba4dda0a5c931d0c7ae74a0fb2896" + hash: "d3649eb8f8232b0e64b0cb476313b63c" } Frame { msec: 2784 - hash: "ab551561ad8a3937558afc080b3e6130" + hash: "cdb30549933d3778e74dbd419b474a5f" } Frame { msec: 2800 - hash: "474d8b566b9e4ef7dc125a8df30ccbb1" + hash: "3a43d652bb85d3f562bd5eaec386107f" } Frame { msec: 2816 - hash: "cc7dfbcfafa12d40210a4d5fa7f60862" + hash: "df6771eb2afa24b6e3250b05b180fa4d" } Frame { msec: 2832 - hash: "3c3f31a05fb2f32538872c9fa158aaab" + hash: "cc4717c4233f9a2f2380bfad6dc89075" } Frame { msec: 2848 - hash: "9705c0dd30c3f381084ec29242bebb2f" + hash: "76e04278dab430d5860306830b73ab6f" } Frame { msec: 2864 - hash: "917579854722d6e6711811e10cbe229f" + hash: "8f70f69731fe8b8f4aa397a667f4c5c0" } Frame { msec: 2880 - hash: "43fa578250e214ed9ad6894329a27c54" + hash: "25b72be5ca16c246bfc6adc4bf19871c" } Frame { msec: 2896 @@ -882,79 +882,79 @@ VisualTest { } Frame { msec: 2912 - hash: "5640c1e64556b90e7fbd4448fa9db462" + hash: "e3dc252a3a0b35398bf3d91c37d6b5e9" } Frame { msec: 2928 - hash: "88cef15940302e2b8b43e73234fd7b9c" + hash: "ce0d8b3f0f0b235eaedc932f4514ea00" } Frame { msec: 2944 - hash: "041aecec2b0b0d59a56e1dd26b45cab1" + hash: "f6b030effcca891ab20073f106b22d73" } Frame { msec: 2960 - hash: "0d519463c713f3da46ecacd155e1a0f3" + hash: "2cfafd1f686f5794d5bf99ec4aaa1d08" } Frame { msec: 2976 - hash: "5dd0c855b97d298244fb599c9f781651" + hash: "502a23fd9a3bcccb29c496e7edeb5d66" } Frame { msec: 2992 - hash: "bfc51621e9bc95d2d46cec632a3fae12" + hash: "82ac348a63a4e358a877a2e45d48e2b1" } Frame { msec: 3008 - hash: "b05fb6e798ab3fed940b5ac4d88ca378" + hash: "0d321f4ca15f09d849c4a28f032cc1cc" } Frame { msec: 3024 - hash: "6bc9cc0d3b11ea91856296b0ec934a8b" + hash: "5c995f84415ea7a260647f946b8963ee" } Frame { msec: 3040 - hash: "f4e63f3af69dacbf2d1d719d4d03a266" + hash: "ee4ecac449c4a2ad4e11ad1d560b3ec3" } Frame { msec: 3056 - hash: "31ab08997eb86fab062a3128aecbccb5" + hash: "0bc3d5b91d781bcf10041eb1557f0d6a" } Frame { msec: 3072 - hash: "90736b240ba1e634bd0ea86423908e16" + hash: "321297177b354e0cc435b3eae49331a3" } Frame { msec: 3088 - hash: "90736b240ba1e634bd0ea86423908e16" + hash: "321297177b354e0cc435b3eae49331a3" } Frame { msec: 3104 - hash: "e74982557dc06aac572078840c7e889a" + hash: "de00148fe89be44237af32d929432655" } Frame { msec: 3120 - hash: "e74982557dc06aac572078840c7e889a" + hash: "de00148fe89be44237af32d929432655" } Frame { msec: 3136 - hash: "ca30c14c7344d1711a35c707f8804f6e" + hash: "756c8068009e9780428bd3ae35df19fe" } Frame { msec: 3152 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 3168 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 3184 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 3200 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 2 @@ -966,15 +966,15 @@ VisualTest { } Frame { msec: 3216 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 3232 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 3248 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Mouse { type: 5 @@ -994,7 +994,7 @@ VisualTest { } Frame { msec: 3264 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "96a78749a57bdb87cf28a3804b63793f" } Mouse { type: 5 @@ -1006,7 +1006,7 @@ VisualTest { } Frame { msec: 3280 - hash: "1991cbb0fb053937f922731d5716032c" + hash: "b8f158a8694f2b922faf818d469230e4" } Mouse { type: 5 @@ -1018,7 +1018,7 @@ VisualTest { } Frame { msec: 3296 - hash: "df447575a4734bb5bd9badc6e27d98e4" + hash: "257a298bec9589037e3022cc2fe7a775" } Mouse { type: 5 @@ -1030,7 +1030,7 @@ VisualTest { } Frame { msec: 3312 - hash: "0fbfe1e0d7fb54450188398aa40690cd" + hash: "391d17c09dd33b3dcfc9a619fbb500dc" } Mouse { type: 5 @@ -1042,7 +1042,7 @@ VisualTest { } Frame { msec: 3328 - hash: "cb62e60296046c73d301d7186e14faed" + hash: "b645a1808de7a5d2ce7944ab66a7c233" } Mouse { type: 5 @@ -1054,7 +1054,7 @@ VisualTest { } Frame { msec: 3344 - hash: "909cbd1292476584554e22232cb43639" + hash: "54ddfe85ca8923bcf7f3b6ccab0560de" } Mouse { type: 5 @@ -1066,7 +1066,7 @@ VisualTest { } Frame { msec: 3360 - hash: "e63b7e502dfb2834c06a969b683b9bd3" + hash: "5c1169e17ee96b817e66b4a6097f790c" } Mouse { type: 5 @@ -1078,7 +1078,7 @@ VisualTest { } Frame { msec: 3376 - hash: "4ea63cd25a1424042ffc60549a78563c" + hash: "cd34e7118d43968cfcf52ed9ce58fc0a" } Mouse { type: 5 @@ -1090,7 +1090,7 @@ VisualTest { } Frame { msec: 3392 - hash: "77e39d2d4bfcacecdae4f014e4506d71" + hash: "f3d9d5cd228914b2e1323f19c22aa6f9" } Mouse { type: 5 @@ -1102,7 +1102,7 @@ VisualTest { } Frame { msec: 3408 - hash: "db576eca8bad67cb8b994f12fc448969" + hash: "10e63c46f4b970a9c997126906c01cf9" } Mouse { type: 5 @@ -1114,7 +1114,7 @@ VisualTest { } Frame { msec: 3424 - hash: "efeb3f616da9d78505c3c82fc34ee31c" + hash: "c9b412087f7b744096bf995c6a9ddf15" } Mouse { type: 5 @@ -1126,7 +1126,7 @@ VisualTest { } Frame { msec: 3440 - hash: "e4f8bb02f8ac6bc40e1801cc8f360078" + hash: "70cdc34e22c7a031c2e28898f7edea72" } Mouse { type: 5 @@ -1138,7 +1138,7 @@ VisualTest { } Frame { msec: 3456 - hash: "82118ef71809e3867717232c4d9c5518" + hash: "d0ea5c1f9050499d944ba7e61d354e40" } Mouse { type: 5 @@ -1150,7 +1150,7 @@ VisualTest { } Frame { msec: 3472 - hash: "5363451c696f6c6eb792b23d086243d7" + hash: "d9fc23e14a170b68264721dc18be4fb1" } Mouse { type: 5 @@ -1162,7 +1162,7 @@ VisualTest { } Frame { msec: 3488 - hash: "fe6afe8ae8a7c216a1cffc5515f273d5" + hash: "d59ccdfdb179f2c8c2636a64aecf2a6a" } Mouse { type: 5 @@ -1174,7 +1174,7 @@ VisualTest { } Frame { msec: 3504 - hash: "9b165741d86c70380c15e15cff3fabb6" + hash: "6d21752283210371faf2f757c7a972b3" } Mouse { type: 5 @@ -1186,7 +1186,7 @@ VisualTest { } Frame { msec: 3520 - hash: "f5e176355468f4fa224d4dfcdd7525a3" + hash: "1338a54d3b980a6868ba7d167cfdbdf7" } Mouse { type: 5 @@ -1198,27 +1198,27 @@ VisualTest { } Frame { msec: 3536 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3552 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3568 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3584 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3600 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Frame { msec: 3616 - hash: "8c5a14a76e052cc6503a3e78245d1da3" + hash: "0be430c9e6058be2aee599d4182bc0d0" } Mouse { type: 5 @@ -1230,7 +1230,7 @@ VisualTest { } Frame { msec: 3632 - hash: "f5e176355468f4fa224d4dfcdd7525a3" + hash: "1338a54d3b980a6868ba7d167cfdbdf7" } Mouse { type: 5 @@ -1242,7 +1242,7 @@ VisualTest { } Frame { msec: 3648 - hash: "acf538fce5f1b90b83474d9898b7cdd7" + hash: "b58a71e761abe238de0e90c1c756cd37" } Mouse { type: 5 @@ -1254,7 +1254,7 @@ VisualTest { } Frame { msec: 3664 - hash: "5a0ee016b8732fbc36064e8a35d91215" + hash: "3383dc4a9b1f8267d145d22f9d825dc0" } Mouse { type: 5 @@ -1266,7 +1266,7 @@ VisualTest { } Frame { msec: 3680 - hash: "8fd06a14c1de175813845ce8f07db6ec" + hash: "95df7fbe18630d9b8ffa83850bc5bec5" } Mouse { type: 5 @@ -1278,7 +1278,7 @@ VisualTest { } Frame { msec: 3696 - hash: "26b0ff6ffda0725e0800f7ea3af510ef" + hash: "96c625b6854a862c83ead3fbb32df3b0" } Mouse { type: 5 @@ -1290,7 +1290,7 @@ VisualTest { } Frame { msec: 3712 - hash: "80443f134511be0356a687c9b542b3e7" + hash: "f48f12540c60bc7b60279db8e67ff91b" } Mouse { type: 5 @@ -1302,7 +1302,7 @@ VisualTest { } Frame { msec: 3728 - hash: "3eeb98a829d29b3dc52f3d145ac49d58" + hash: "98353745244809a583c93c1fd87b9a56" } Mouse { type: 5 @@ -1314,7 +1314,7 @@ VisualTest { } Frame { msec: 3744 - hash: "f4d43069b16f41a30e5549aae911d4cd" + hash: "09a1bb3238282c80cc40fccb6e45ba28" } Mouse { type: 5 @@ -1326,7 +1326,7 @@ VisualTest { } Frame { msec: 3760 - hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + hash: "9e50b6fc980c66698a35178e2520e13c" } Mouse { type: 3 @@ -1338,23 +1338,23 @@ VisualTest { } Frame { msec: 3776 - hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + hash: "9e50b6fc980c66698a35178e2520e13c" } Frame { msec: 3792 - hash: "1520f54b6c8606b9e8372c5c06180453" + hash: "006c37d9d6b5a8470d74909b9646d5f1" } Frame { msec: 3808 - hash: "0fcf5e2ce47348cbb5bb485f101fe5ac" + hash: "24cf52f7c3cf095be20393757dfaaa6b" } Frame { msec: 3824 - hash: "2eb070e69de07c89830543e0475fc110" + hash: "2189799d060770928f1feaaa44728ec8" } Frame { msec: 3840 - hash: "d73c1059219c0655968af268d22e2c18" + hash: "b8a6375f0303ec8b66cf14f59888c273" } Frame { msec: 3856 @@ -1362,214 +1362,214 @@ VisualTest { } Frame { msec: 3872 - hash: "cc969b2c64839ca6d3b5069c0ed938d0" + hash: "1fd391b060c84ac99c6e94d2d3647c31" } Frame { msec: 3888 - hash: "1f819e18d1297a1c7eeebb7b040bdef8" + hash: "8b594f115e8158b931a9da42fa6829a5" } Frame { msec: 3904 - hash: "3643b99afbd8af0953cb39b2c8c04b9f" + hash: "8f93fdffed4bfd31f9f5977b09074f6a" } Frame { msec: 3920 - hash: "713fd2e2fa38ab27604cb9cae59f1777" + hash: "d0f3eae785732bf24c363fd189672eb2" } Frame { msec: 3936 - hash: "e2508faec7737be2666d87ad715b5f74" + hash: "9113c68cf5689e1f4690e58bbf824ae6" } Frame { msec: 3952 - hash: "fc33b1c7479caeff676ffd885a18d618" + hash: "44dd376f3d5f61ec71b7c488c3a6ee58" } Frame { msec: 3968 - hash: "aca01143db4f870a56bb7546e84cbc5e" + hash: "4555e295bd6de22abcbaecf797ec8902" } Frame { msec: 3984 - hash: "442b58c39fd3745c61a1eb5043fcbb53" + hash: "eb343f3e69f205a240c0425873ea6db1" } Frame { msec: 4000 - hash: "7983d7183cc11d6819fa0a006c2d67b4" + hash: "37a5b81894c16cacd13312f7113a5445" } Frame { msec: 4016 - hash: "9fe4e897c6b853f774d11817a0eb53bf" + hash: "2f9ec963d6f06f8252a69760965df2ee" } Frame { msec: 4032 - hash: "43f528c81ccfa5b9921dfa3564a24c68" + hash: "dec984b2a5cdd85f2dfb8983da5cdee4" } Frame { msec: 4048 - hash: "dfe04ff0b3ccf205bb38beeab58a4411" + hash: "a95f51c3e172ee76b5b74e94532cdfaf" } Frame { msec: 4064 - hash: "32ff30b50b500e9feb51e8eef205783c" + hash: "62d73e875875329c886d2eb540a9c2d9" } Frame { msec: 4080 - hash: "7d83ab4c336b05bcf2cde4e7d8031f6c" + hash: "63c70a0ea1f43d92c717ff23dcfebe81" } Frame { msec: 4096 - hash: "c92e345e4ffdb30c28d9d5aa5400bd30" + hash: "49372aa66b86904d587b72c6c2cfd467" } Frame { msec: 4112 - hash: "02eec604d0c00965aae4ac61b91bdc22" + hash: "523c18f3c7bbaaf9c625835ddf0d8435" } Frame { msec: 4128 - hash: "df447575a4734bb5bd9badc6e27d98e4" + hash: "257a298bec9589037e3022cc2fe7a775" } Frame { msec: 4144 - hash: "bac10d8f94a39573313b3b8b2f871c49" + hash: "d777e4b06791bda82cf1e8e84b1cff5c" } Frame { msec: 4160 - hash: "e5944c5dc6dec8f0c28b7ec3cd58723d" + hash: "c31de5bfff431b13dcbf2b8b4c503bc3" } Frame { msec: 4176 - hash: "1991cbb0fb053937f922731d5716032c" + hash: "b8f158a8694f2b922faf818d469230e4" } Frame { msec: 4192 - hash: "50d6538bcaffc343f6626635a3e5899c" + hash: "5fd4cd0c335cecc7468d44d188e1669d" } Frame { msec: 4208 - hash: "f3613f57cdb9ed38d8e3fa636962aa99" + hash: "77b003c8f72498ed295678158adf417c" } Frame { msec: 4224 - hash: "10a89da9887cb4bbd812c090a8a56797" + hash: "96a78749a57bdb87cf28a3804b63793f" } Frame { msec: 4240 - hash: "89ba74d46970ad2edff701475c059ec8" + hash: "f497ed7bc98daea35a9ae4838427207e" } Frame { msec: 4256 - hash: "6e8b84c70e81578a2216e9e975b35434" + hash: "35a7221f2888ab3afec443b2c1060c80" } Frame { msec: 4272 - hash: "6e8b84c70e81578a2216e9e975b35434" + hash: "35a7221f2888ab3afec443b2c1060c80" } Frame { msec: 4288 - hash: "883b8b180853f1f432ae98ddfe1b6ce3" + hash: "4769fa4ba0c08baefa431b94b47a7ffc" } Frame { msec: 4304 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4320 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4336 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4352 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4368 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4384 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4400 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4416 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4432 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4448 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4464 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4480 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4496 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4512 - hash: "e616110d39009f0d636b816828cc0ccb" + hash: "afec5604967bc19a2bb8fc7e899c1e11" } Frame { msec: 4528 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4544 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4560 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4576 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4592 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4608 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4624 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4640 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4656 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4672 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4688 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } Frame { msec: 4704 - hash: "244c12e82ee0b2528a0dbb02a8b8134a" + hash: "66d988259c52db9bd85f60ed598469f7" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png index 2af1a3e..5af9306 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png index 8334a3f..61acc87 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png index c705849..bc6ac34 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png index c705849..bc6ac34 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png index 349dca2..c970488 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png index a0e84e3..0af1424 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png index e5c1583..c826907 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png index 2af1a3e..5af9306 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png index 06468e4..f714fa5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml index 920a48f..8ad3029 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml @@ -10,71 +10,71 @@ VisualTest { } Frame { msec: 32 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 48 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 64 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 80 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 96 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 112 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 128 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 144 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 160 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 176 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 192 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 208 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 224 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 240 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 256 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 272 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 288 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 2 @@ -86,7 +86,7 @@ VisualTest { } Frame { msec: 304 - hash: "3d1b648229210ae5b57a0be51cc02f67" + hash: "71a0273e7582419e07937fe701d8e027" } Mouse { type: 5 @@ -98,7 +98,7 @@ VisualTest { } Frame { msec: 320 - hash: "3d1b648229210ae5b57a0be51cc02f67" + hash: "71a0273e7582419e07937fe701d8e027" } Mouse { type: 5 @@ -118,7 +118,7 @@ VisualTest { } Frame { msec: 336 - hash: "3d1b648229210ae5b57a0be51cc02f67" + hash: "71a0273e7582419e07937fe701d8e027" } Mouse { type: 5 @@ -138,7 +138,7 @@ VisualTest { } Frame { msec: 352 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -158,7 +158,7 @@ VisualTest { } Frame { msec: 368 - hash: "57fa1d842d37df12004b493c1c5761f3" + hash: "a8d53f622836800e43157685ce21fad4" } Mouse { type: 5 @@ -178,7 +178,7 @@ VisualTest { } Frame { msec: 384 - hash: "521a8188877551a97cd3ea82d209e8ae" + hash: "99c8215fbd87e45836908a85748dccc7" } Mouse { type: 5 @@ -198,7 +198,7 @@ VisualTest { } Frame { msec: 400 - hash: "ce126aaade1532e22a35416fd7203dde" + hash: "d56ff1a2994f1acb5ad06b0468672a29" } Mouse { type: 5 @@ -218,119 +218,119 @@ VisualTest { } Frame { msec: 416 - hash: "aa9c4301332240ccc00ec99a05b7f9c9" + hash: "85ba01e36cc978459451887facbc3260" } Frame { msec: 432 - hash: "db0a670d61133a3420a3581ecb532773" + hash: "958d223a6b27ecc87febd860168d5aa5" } Frame { msec: 448 - hash: "b34de164d5ec0294ca27281e1e5e3cd6" + hash: "851ef5f56b7b05d3feb0a1a357f96007" } Frame { msec: 464 - hash: "8636af4591c61c4b4a548f3a38749413" + hash: "4d90460d3b6c46075ffda426bc6ceaa6" } Frame { msec: 480 - hash: "eee4fa336149528dfb16565b856ca692" + hash: "bb67acd602414cf59e27b5ff19f69169" } Frame { msec: 496 - hash: "85eeaeaf359ed87417be68dc18c06d0c" + hash: "acce28653f8bf46c09067254774fb126" } Frame { msec: 512 - hash: "d5db4af6cf35c61146bd24646d82ab83" + hash: "91ea2538dfe0f9af7b4732cb4474215b" } Frame { msec: 528 - hash: "2189fc03c337fe41f3d9f51929c9860f" + hash: "e7fd52f25a4a9c31a2f2fabd59c31160" } Frame { msec: 544 - hash: "4e3e283fb402dc4ec79f65878a513747" + hash: "6acdb4852ef9091382030998e28d02a5" } Frame { msec: 560 - hash: "62f4281d8e049bc12b636b7ebe3862df" + hash: "10c7eaab96a538a7111b054a403132a3" } Frame { msec: 576 - hash: "cf9a0a968459a1283fff91102eb29ba3" + hash: "4ebb31f7945bb5542f9e5146888b1065" } Frame { msec: 592 - hash: "c432221928096cff3b76c8034db26b43" + hash: "b98d594580ad701afb4d2ef186853bc4" } Frame { msec: 608 - hash: "3df59808e56955c3c161609b72d93c7f" + hash: "2700eb44f9b7400f3c1bd11d878e078d" } Frame { msec: 624 - hash: "c497bcbe500905b8a69fd310fd7c7e1a" + hash: "b8a8c4db8325b3e0292e6473084347d9" } Frame { msec: 640 - hash: "7dceef52fab6dc38d140e3097e39a271" + hash: "88ff05697e82e78847794b153be12c46" } Frame { msec: 656 - hash: "c7bbd81b452db98fb8fd892762a23df6" + hash: "06970943c3cd12f07b1d661de0ab730f" } Frame { msec: 672 - hash: "17efc9793ef2966722544d561312b17a" + hash: "5804b412094ab17424de4ba12b2e2e32" } Frame { msec: 688 - hash: "1bf05b272ad6b8e5d134c94d9ba62030" + hash: "8ff038b364f065e67430b2a312a10101" } Frame { msec: 704 - hash: "cad61ba68fdfb26cfb136f22a2f8cc0c" + hash: "8a9a1c725b80af8fd3ffb9d8bc7328ac" } Frame { msec: 720 - hash: "0ce5ff1a1d9a6193ef763affa39cb790" + hash: "83c3481ec7a1dddcbc36d6fb9b7d6149" } Frame { msec: 736 - hash: "880bce9130454aaf1261842b8f9b9a57" + hash: "abf102e5d88bef8ed429c222284907da" } Frame { msec: 752 - hash: "ab78cadac88156d9755d8b70d26384e8" + hash: "e9bcb3268f705e708ffbcf707c78c889" } Frame { msec: 768 - hash: "4a22e502c105a7df0845ca75cbdfb0ec" + hash: "918c60c1ed90f5803d24ea515f21f8fa" } Frame { msec: 784 - hash: "d6209a0b9b9e0f2072179a4623c70fbd" + hash: "f3064485083025aba09224faafcede14" } Frame { msec: 800 - hash: "85e85567831cf57df1f013f5bf3beb86" + hash: "9f36e5b91e6abc9f991625cc52afdd4e" } Frame { msec: 816 - hash: "602d2e02029178faeb99748e2f70827e" + hash: "70a50039fbd67d4b56c0c7ec3d7aecd1" } Frame { msec: 832 - hash: "fd4dbb6f47f6681af98eb6781ae7de58" + hash: "90bbef58e2e59021f68b878db477f74b" } Frame { msec: 848 - hash: "faf3be40e402768724703f5d0051249f" + hash: "21480d7b949acba033f4686c666d3f85" } Frame { msec: 864 - hash: "bc650ca5b7a3bdc1f0f051b9481faf29" + hash: "b622d2cea2428fb92a8e37715a60f195" } Mouse { type: 2 @@ -342,7 +342,7 @@ VisualTest { } Frame { msec: 880 - hash: "bc650ca5b7a3bdc1f0f051b9481faf29" + hash: "b622d2cea2428fb92a8e37715a60f195" } Mouse { type: 5 @@ -362,7 +362,7 @@ VisualTest { } Frame { msec: 896 - hash: "bc650ca5b7a3bdc1f0f051b9481faf29" + hash: "b622d2cea2428fb92a8e37715a60f195" } Mouse { type: 5 @@ -382,7 +382,7 @@ VisualTest { } Frame { msec: 912 - hash: "f2a679f2b7585245d4f1896fed4e0d1e" + hash: "8b537cd0481c1a9bf84f4855ae5697ad" } Mouse { type: 5 @@ -402,7 +402,7 @@ VisualTest { } Frame { msec: 928 - hash: "721b5fa42f583c1e1e1a751fc8aad270" + hash: "f5aba503b2c155401d26be068724e28a" } Mouse { type: 5 @@ -422,7 +422,7 @@ VisualTest { } Frame { msec: 944 - hash: "7e3ddefca9a99d6b9103ffd4524bc593" + hash: "1aca5a9415dd669a0ff76ef4da9c9a56" } Mouse { type: 5 @@ -442,7 +442,7 @@ VisualTest { } Frame { msec: 960 - hash: "7858d23cb4c206676eca51c1c09802b5" + hash: "b046e18396cd3d2da6505fa783bd2b89" } Mouse { type: 5 @@ -474,171 +474,171 @@ VisualTest { } Frame { msec: 992 - hash: "e723da5ecaffe31f03b1d5ca6765229b" + hash: "c4506098417f905871a43d183cd5904d" } Frame { msec: 1008 - hash: "73d169bf6bdfce801b824b7b560c3fad" + hash: "fe8014819e6fe41fa109f5b0ff2e9764" } Frame { msec: 1024 - hash: "4e3e283fb402dc4ec79f65878a513747" + hash: "6acdb4852ef9091382030998e28d02a5" } Frame { msec: 1040 - hash: "38c2e2835c20dbee55c69d0211a0be2d" + hash: "d5a9739669a9a641c0c1f44b777cb9b8" } Frame { msec: 1056 - hash: "84e668ba374ff0004dd7222933a635cf" + hash: "a4006cb90c69313b9b04a6b7b8734855" } Frame { msec: 1072 - hash: "349c7a84ff8f9b52d39dba1282353167" + hash: "23b447e486a6354354505171cf3c45ec" } Frame { msec: 1088 - hash: "b63218110c65b6d7b4bc2d63155204cd" + hash: "ad172b89d9764bd568d9127c91547c0b" } Frame { msec: 1104 - hash: "aad65a7070aa668dd8ce4a3cc0f0f117" + hash: "0003fb6329e0bf293d56af63265bf0ca" } Frame { msec: 1120 - hash: "c4ae97e1d1f2efbc998f9b57c2373201" + hash: "dd62960e62800219c179fcd481e4504d" } Frame { msec: 1136 - hash: "94701ffaa4f45924ad89f92a30157c7d" + hash: "7fe6c7bd1bc9e46d3e520178a2309e87" } Frame { msec: 1152 - hash: "eee4fa336149528dfb16565b856ca692" + hash: "bb67acd602414cf59e27b5ff19f69169" } Frame { msec: 1168 - hash: "ff1a053c0af99c51353503002515843d" + hash: "3170c18b8dd74429b0f366ec07f4870b" } Frame { msec: 1184 - hash: "118494c60034b0e265e28b34e3128d00" + hash: "249e4e489236e3f0748ba63c7a105b33" } Frame { msec: 1200 - hash: "bf693bffb37d7554a437eca21bdec7c1" + hash: "bd2fb97c583e6fe653a32fa610d6ac83" } Frame { msec: 1216 - hash: "880f60263cd79fb6a1bff7252d2373bb" + hash: "95ca2f988370075070c6a98e5e680206" } Frame { msec: 1232 - hash: "b34de164d5ec0294ca27281e1e5e3cd6" + hash: "851ef5f56b7b05d3feb0a1a357f96007" } Frame { msec: 1248 - hash: "e1609c4e40fb9e043a9fff683b94c6c4" + hash: "80f599f50af9e601536f62ea93f4e429" } Frame { msec: 1264 - hash: "2450b61b84c24727232c779114e6a474" + hash: "485d719d81429e63be4de1ba81d53996" } Frame { msec: 1280 - hash: "cf5ac4a5e3d42b3d4e171ed3227cfa85" + hash: "745f3c2e0baede59a52805eddac5b01f" } Frame { msec: 1296 - hash: "5cb5576ab347647ca881d4d450732df3" + hash: "fea3fa6e26eb150ab37fe96a34d3be3b" } Frame { msec: 1312 - hash: "34dc672ebfd75ec017d0c2f0bd435cd8" + hash: "29c8004517294539adf3243533381436" } Frame { msec: 1328 - hash: "aa9c4301332240ccc00ec99a05b7f9c9" + hash: "85ba01e36cc978459451887facbc3260" } Frame { msec: 1344 - hash: "3f98121997a1613bd49d22003d1a1887" + hash: "deedb9ddcc2f5354a2356178db54d971" } Frame { msec: 1360 - hash: "86732d3e900877ae7a8615b7448afaaa" + hash: "9e1fb461c13b4affa39e5909d3ade168" } Frame { msec: 1376 - hash: "7e2f2786d3c0540a0b6559fffe06ad3c" + hash: "684a543d7afc5a5cac2bb823bbb94893" } Frame { msec: 1392 - hash: "79e00bbe77f0a178e8db30023a881c3f" + hash: "636f04661a0418c1fdcaaaba28092671" } Frame { msec: 1408 - hash: "5f611226b3aa38f9aa3cd6a2dbd01f12" + hash: "89cac82b6751208654d1e4ef4df8ef28" } Frame { msec: 1424 - hash: "4f4cd776b76272cfe79b86a108bd6b6e" + hash: "a974415dcf31bee79874c4a6e84cf796" } Frame { msec: 1440 - hash: "a746404a1a26e2a25b8d364dbef46eef" + hash: "f74c075e8cf2aef501b7115427b3b221" } Frame { msec: 1456 - hash: "9124d97d120de1806d86c8f437ec4ed2" + hash: "7efcd27e34db1d3adc3d31e0b9ebe432" } Frame { msec: 1472 - hash: "4fda328eafe6ec2d02d939517d6d82e3" + hash: "c8747327ae3370b04a996aa6b5e373c6" } Frame { msec: 1488 - hash: "6afb6abe291c9e9628fd0b8c3da5d9db" + hash: "b7b32b5e782f8f5b1cbd6f581f90004a" } Frame { msec: 1504 - hash: "cb5962fe94c5d3ef754ff45f905a5c88" + hash: "5fda56f77948e183557ff54690030746" } Frame { msec: 1520 - hash: "57b5fc47ed700831b3dc3f2afbb1c3ed" + hash: "6e43987a8db7a6231887cf5883d381bf" } Frame { msec: 1536 - hash: "38793fb8a19c9566c8dd9d23c9a15b5d" + hash: "901e1f9851d05ff300fa2d52a38829ec" } Frame { msec: 1552 - hash: "2e311a5dc484e9f4bc7bd85d32a693b1" + hash: "abda2edf3c9f1aa28f41bf28083d081f" } Frame { msec: 1568 - hash: "69d1eed68fba918e831899c8b84374a1" + hash: "5e324e90e4056f59730db9fbc941609a" } Frame { msec: 1584 - hash: "c872391012e6ab2a6d1eb98c7f47f9e8" + hash: "d98ec6ad7e6f2df6796f975cdf06ea2c" } Frame { msec: 1600 - hash: "cf12f90835d823550cd83d472b4f022f" + hash: "fa62c8154b5aba9fa6daa0a50229e752" } Frame { msec: 1616 - hash: "fbb2f03ddbd87ed419386eb2942bccac" + hash: "c03b7e52c7da4f1cb6a4a2cab119a1a1" } Frame { msec: 1632 - hash: "0788a0fdb51cedba0f8b597a4cc38ebe" + hash: "57c1149d35ed84de63bac7accdb30c77" } Frame { msec: 1648 - hash: "b6595edf06fba22f3258c9b433af6ab8" + hash: "48823d7e5b72ff6e11bbe877962c9884" } Mouse { type: 2 @@ -650,19 +650,19 @@ VisualTest { } Frame { msec: 1664 - hash: "521a8188877551a97cd3ea82d209e8ae" + hash: "99c8215fbd87e45836908a85748dccc7" } Frame { msec: 1680 - hash: "4d923cd520c00f5cd985283d62cf17ec" + hash: "45e2cf43322f038d2b322dea82e829f1" } Frame { msec: 1696 - hash: "7ccff14d344c7090fa634f6defd6511e" + hash: "6473a0dc426bf118674d09b281fb6c38" } Frame { msec: 1712 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 3 @@ -674,55 +674,55 @@ VisualTest { } Frame { msec: 1728 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1744 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1760 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1776 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1792 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1808 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1824 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1840 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1856 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1872 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1888 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1904 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1920 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1936 @@ -730,39 +730,39 @@ VisualTest { } Frame { msec: 1952 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1968 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 1984 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2000 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2016 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2032 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2048 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2064 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2080 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2096 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -802,7 +802,7 @@ VisualTest { } Frame { msec: 2112 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -822,7 +822,7 @@ VisualTest { } Frame { msec: 2128 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -842,7 +842,7 @@ VisualTest { } Frame { msec: 2144 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -862,7 +862,7 @@ VisualTest { } Frame { msec: 2160 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -882,7 +882,7 @@ VisualTest { } Frame { msec: 2176 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -902,7 +902,7 @@ VisualTest { } Frame { msec: 2192 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -922,7 +922,7 @@ VisualTest { } Frame { msec: 2208 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -942,7 +942,7 @@ VisualTest { } Frame { msec: 2224 - hash: "888c68103c4eef2f65ef32a93be8286a" + hash: "5f6ed58401fddd692503810f22b23e93" } Mouse { type: 5 @@ -970,79 +970,79 @@ VisualTest { } Frame { msec: 2240 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2256 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2272 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2288 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2304 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2320 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2336 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2352 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2368 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2384 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2400 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2416 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2432 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2448 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2464 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2480 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2496 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2512 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2528 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1054,7 +1054,7 @@ VisualTest { } Frame { msec: 2544 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1066,7 +1066,7 @@ VisualTest { } Frame { msec: 2560 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1086,7 +1086,7 @@ VisualTest { } Frame { msec: 2576 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1106,7 +1106,7 @@ VisualTest { } Frame { msec: 2592 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1126,7 +1126,7 @@ VisualTest { } Frame { msec: 2608 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1146,7 +1146,7 @@ VisualTest { } Frame { msec: 2624 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1166,7 +1166,7 @@ VisualTest { } Frame { msec: 2640 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1186,7 +1186,7 @@ VisualTest { } Frame { msec: 2656 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1206,7 +1206,7 @@ VisualTest { } Frame { msec: 2672 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1226,7 +1226,7 @@ VisualTest { } Frame { msec: 2688 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1246,7 +1246,7 @@ VisualTest { } Frame { msec: 2704 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1266,7 +1266,7 @@ VisualTest { } Frame { msec: 2720 - hash: "0d3bac7463b5fe7f585997e35f179122" + hash: "defd2e26ba579dffd2273bcc86c54a94" } Mouse { type: 5 @@ -1286,43 +1286,43 @@ VisualTest { } Frame { msec: 2736 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2752 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2768 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2784 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2800 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2816 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2832 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2848 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2864 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2880 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2896 @@ -1330,63 +1330,63 @@ VisualTest { } Frame { msec: 2912 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2928 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2944 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2960 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2976 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 2992 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3008 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3024 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3040 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3056 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3072 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3088 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3104 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3120 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3136 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1398,23 +1398,23 @@ VisualTest { } Frame { msec: 3152 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3168 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3184 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3200 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3216 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 3 @@ -1426,67 +1426,67 @@ VisualTest { } Frame { msec: 3232 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3248 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3264 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3280 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3296 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3312 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3328 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3344 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3360 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3376 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3392 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3408 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3424 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3440 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3456 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3472 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1498,19 +1498,19 @@ VisualTest { } Frame { msec: 3488 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3504 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3520 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3536 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 3 @@ -1522,55 +1522,55 @@ VisualTest { } Frame { msec: 3552 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3568 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3584 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3600 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3616 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3632 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3648 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3664 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3680 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3696 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3712 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3728 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Frame { msec: 3744 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 2 @@ -1582,7 +1582,7 @@ VisualTest { } Frame { msec: 3760 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 5 @@ -1602,7 +1602,7 @@ VisualTest { } Frame { msec: 3776 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 5 @@ -1622,7 +1622,7 @@ VisualTest { } Frame { msec: 3792 - hash: "998cb23307a61afefb59c8b9e361a89f" + hash: "8caa38000edef97a8276022b5da19ecc" } Mouse { type: 5 @@ -1642,7 +1642,7 @@ VisualTest { } Frame { msec: 3808 - hash: "2e311a5dc484e9f4bc7bd85d32a693b1" + hash: "abda2edf3c9f1aa28f41bf28083d081f" } Mouse { type: 5 @@ -1662,7 +1662,7 @@ VisualTest { } Frame { msec: 3824 - hash: "cbfcb7b986b0c51828473d98ca9fee03" + hash: "1a0305de0a8156f3f059d74891b71846" } Mouse { type: 5 @@ -1682,7 +1682,7 @@ VisualTest { } Frame { msec: 3840 - hash: "389b514c4cd4a4d65388608643d08c04" + hash: "04c2fbbb1df6ca9d03c105fcfa5c0770" } Mouse { type: 5 @@ -1722,7 +1722,7 @@ VisualTest { } Frame { msec: 3872 - hash: "cf9a0a968459a1283fff91102eb29ba3" + hash: "4ebb31f7945bb5542f9e5146888b1065" } Mouse { type: 5 @@ -1742,139 +1742,139 @@ VisualTest { } Frame { msec: 3888 - hash: "77c86fb26126825cfd5b6ba21b903808" + hash: "2a731429c6d5c4ee1f1fa8f3ca07f0c2" } Frame { msec: 3904 - hash: "c497bcbe500905b8a69fd310fd7c7e1a" + hash: "b8a8c4db8325b3e0292e6473084347d9" } Frame { msec: 3920 - hash: "95bffb4d4aff1603e96af55cbc2dc3f2" + hash: "fae53bd8bc9d05f343968c7006723207" } Frame { msec: 3936 - hash: "6fa87a7136528b688069fe1c4bd94043" + hash: "fe2fc28a79609af32ea1043f3c988b08" } Frame { msec: 3952 - hash: "602c16e1382d810f853d647e531b4e8a" + hash: "18f77a48b14347b2ab41eb39c9de3be4" } Frame { msec: 3968 - hash: "01d1227e4f5b95f8b0c6a57a4b2314c4" + hash: "93e83c35d34715ee703a0d79d51bc145" } Frame { msec: 3984 - hash: "1db6401af45574b7453ad57766e60e6f" + hash: "4ae9d80d6079b92be66fcc099209d779" } Frame { msec: 4000 - hash: "067a1bef3df5d1c40842f28885d60250" + hash: "bd8c0a924552cb4dfc5ddc1451931b01" } Frame { msec: 4016 - hash: "5fba31051e05ec00c0d68b8e8af94132" + hash: "6a1874cdac6f754b36f022c583834d32" } Frame { msec: 4032 - hash: "d6209a0b9b9e0f2072179a4623c70fbd" + hash: "f3064485083025aba09224faafcede14" } Frame { msec: 4048 - hash: "ec30f07ab0056a45954c07ecdfa1401a" + hash: "8e82568ac62969dfedbf1c2082101661" } Frame { msec: 4064 - hash: "fef6c7767970a283bb3b13826f71bdac" + hash: "4e447efea0dd139787c7aa9018327206" } Frame { msec: 4080 - hash: "29621938e96be0d11c95fd1e4ca37631" + hash: "ed23778ce6843053cd4af6df7262bdd0" } Frame { msec: 4096 - hash: "8103c96ac90ddf52056d7e8b32e4ae9e" + hash: "fe1118cc51b4cd25d775b5d1c1d66540" } Frame { msec: 4112 - hash: "d72bf8b88efe603050ad038380173969" + hash: "02a59ccc15df26abe5612f13ce926286" } Frame { msec: 4128 - hash: "4438b56eb6aa800602634db6016caa50" + hash: "71c43a208e3dfbce6cb461f8ff0d2f17" } Frame { msec: 4144 - hash: "44674f7a874023c3932d698344ccda0e" + hash: "404b8155f17dff084c2da1407d6915a9" } Frame { msec: 4160 - hash: "155a834ddaa7128b6f5a2a406b340315" + hash: "ab0dba54c469dea461cd1619161edd82" } Frame { msec: 4176 - hash: "3886efa510581ee5b6c4a2ed76aeb42d" + hash: "e6f158712a7afe1844acc1a1cd9385ec" } Frame { msec: 4192 - hash: "094954e8d10b85d3941626dec4fb36af" + hash: "b9d8fcc3d68ebc6d4d4f60e4652befe3" } Frame { msec: 4208 - hash: "b597aeb20a8630e4b1dfd0a7be383e4d" + hash: "9005a49b3ac2ef2344d78ef68595ea26" } Frame { msec: 4224 - hash: "abc58e74ab197a2d7c243ddd67442e53" + hash: "aad3dd90f766320ad68b62b97559ec02" } Frame { msec: 4240 - hash: "b6ec106d39af13492c3d43bf006b7b15" + hash: "a39008d78d188e8bd3571f80f679a915" } Frame { msec: 4256 - hash: "d80211f898473a01e0c0641b96bc92f4" + hash: "cedc580acc63d6a069442bb83f17b6f8" } Frame { msec: 4272 - hash: "5010579fcd925e65c778c2e9cf0317de" + hash: "f63f5d20e3b5a4b6247339d0ec518449" } Frame { msec: 4288 - hash: "5010579fcd925e65c778c2e9cf0317de" + hash: "f63f5d20e3b5a4b6247339d0ec518449" } Frame { msec: 4304 - hash: "d80211f898473a01e0c0641b96bc92f4" + hash: "cedc580acc63d6a069442bb83f17b6f8" } Frame { msec: 4320 - hash: "27cfc811f62029df48ea7f371ff5654b" + hash: "bccf94c11e92af36f418dbee1b797a86" } Frame { msec: 4336 - hash: "b6ec106d39af13492c3d43bf006b7b15" + hash: "a39008d78d188e8bd3571f80f679a915" } Frame { msec: 4352 - hash: "28c8e3f08f46bf13cc52a7d6a31a7cf1" + hash: "02d38396737a262fa983511a40514b38" } Frame { msec: 4368 - hash: "b597aeb20a8630e4b1dfd0a7be383e4d" + hash: "9005a49b3ac2ef2344d78ef68595ea26" } Frame { msec: 4384 - hash: "a3a3682ce0d2a2d57457458b13645afa" + hash: "c05dad606a9b5b501a201bfead974f03" } Frame { msec: 4400 - hash: "98bf25cbb8202fe1576ac15bac7b9e65" + hash: "27846f086c13e1b06e89a8a395802678" } Frame { msec: 4416 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Mouse { type: 2 @@ -1886,11 +1886,11 @@ VisualTest { } Frame { msec: 4432 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Frame { msec: 4448 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Mouse { type: 5 @@ -1902,7 +1902,7 @@ VisualTest { } Frame { msec: 4464 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "f919b09b6f7f4f09b5d9b123b686a442" } Mouse { type: 5 @@ -1922,7 +1922,7 @@ VisualTest { } Frame { msec: 4480 - hash: "16b99c9cf5297a5251869a3935084cf7" + hash: "ab0dba54c469dea461cd1619161edd82" } Mouse { type: 5 @@ -1942,7 +1942,7 @@ VisualTest { } Frame { msec: 4496 - hash: "abc58e74ab197a2d7c243ddd67442e53" + hash: "aad3dd90f766320ad68b62b97559ec02" } Mouse { type: 5 @@ -1962,7 +1962,7 @@ VisualTest { } Frame { msec: 4512 - hash: "e5c5b741da7c028ec77f52016675c1ca" + hash: "09e110197afc9350dbbaf3e19e24dbe8" } Mouse { type: 5 @@ -1982,7 +1982,7 @@ VisualTest { } Frame { msec: 4528 - hash: "12481bcccb524a478851a57d4db6cf8d" + hash: "c50fa7aa75b947d065109c97a0db4c02" } Mouse { type: 5 @@ -2002,7 +2002,7 @@ VisualTest { } Frame { msec: 4544 - hash: "a49985bd332cd3376986d379c474a3de" + hash: "e701f8ef23f576f10c286191ea4caaf1" } Mouse { type: 5 @@ -2030,51 +2030,51 @@ VisualTest { } Frame { msec: 4560 - hash: "cd4e55b15e9df7fee1862180fddec0ca" + hash: "c24daebe9c5ba9bd46ef674c49edd160" } Frame { msec: 4576 - hash: "64ff54775d198b616597f4539de90bd8" + hash: "fc762235395c772666d2529a5e9bff98" } Frame { msec: 4592 - hash: "2b188745bfff51f9d3af90b7ad9c8d77" + hash: "7f4f4420fde62e6126f0c3bf604425dc" } Frame { msec: 4608 - hash: "2dde7d565f92f22c6524448f97107e35" + hash: "0e9978b0f60cba7bf599571b97f2f751" } Frame { msec: 4624 - hash: "897a454ac464008d6dd7864eb608ae65" + hash: "ff19d1b0a0d7d0cc5dd8919606c17fc8" } Frame { msec: 4640 - hash: "269df4f1aca4f0cdbd5c86c2e115bd3c" + hash: "7c61e0a6c354b4f30db6c861b9250be2" } Frame { msec: 4656 - hash: "ec0ebdbd3f4665fba7f6a523a82a5071" + hash: "bd1196ce51f5abd53f6052f17d926a81" } Frame { msec: 4672 - hash: "c1ac6a385f580f23b3486c643d276e33" + hash: "ab2b1c33a5f60690fe2724a0ddd3bb67" } Frame { msec: 4688 - hash: "3de0d147a6a3c1382ec64a80996bb4f4" + hash: "0a0709d2649d649ab52eaddbe60c1dc9" } Frame { msec: 4704 - hash: "8db942b5909f63d4369ad5b29938ef49" + hash: "ef3b3099811cc2e26d823d94c5b66f1d" } Frame { msec: 4720 - hash: "f7840636f2d01c25be8e9c77230cca53" + hash: "522683305b2706b6e22d0e1770f285d6" } Frame { msec: 4736 - hash: "d315f82e175361fed83193ce550cb6e9" + hash: "c08d933b3dbda5fc476ed673cd7a2e4a" } Mouse { type: 2 @@ -2086,7 +2086,7 @@ VisualTest { } Frame { msec: 4752 - hash: "d315f82e175361fed83193ce550cb6e9" + hash: "c08d933b3dbda5fc476ed673cd7a2e4a" } Mouse { type: 5 @@ -2106,7 +2106,7 @@ VisualTest { } Frame { msec: 4768 - hash: "d315f82e175361fed83193ce550cb6e9" + hash: "ab0dba54c469dea461cd1619161edd82" } Mouse { type: 5 @@ -2126,7 +2126,7 @@ VisualTest { } Frame { msec: 4784 - hash: "00b072a0adbfcd520d495ef6540f5680" + hash: "d23653a4e1651babdbb3561fb7029df2" } Mouse { type: 5 @@ -2146,7 +2146,7 @@ VisualTest { } Frame { msec: 4800 - hash: "fb605e95988a6110384671e7f3f18ad8" + hash: "702d94cbca1ba235a5a2cc30c552d8b7" } Mouse { type: 5 @@ -2186,7 +2186,7 @@ VisualTest { } Frame { msec: 4832 - hash: "4d1eb644b592a693b13fe14377aeed97" + hash: "f53134176897d55299ab723ab20ba3fc" } Mouse { type: 5 @@ -2206,7 +2206,7 @@ VisualTest { } Frame { msec: 4848 - hash: "00eb1d3b016eb0220461074ce81b1aef" + hash: "84146c913b41215c4bab1f36471f2b7b" } Mouse { type: 5 @@ -2234,231 +2234,231 @@ VisualTest { } Frame { msec: 4864 - hash: "77c86fb26126825cfd5b6ba21b903808" + hash: "2a731429c6d5c4ee1f1fa8f3ca07f0c2" } Frame { msec: 4880 - hash: "e80f024bbdce0ceeae137e347abc95a4" + hash: "a1e960ffef391daecb52d31698c7b06c" } Frame { msec: 4896 - hash: "bb189f39a836b9a2aa68f4535ed1d6fb" + hash: "adca54c132f170c517f1ef17c45006c8" } Frame { msec: 4912 - hash: "cf9a0a968459a1283fff91102eb29ba3" + hash: "4ebb31f7945bb5542f9e5146888b1065" } Frame { msec: 4928 - hash: "27130e7f6b853a287a7bdd8608628a4f" + hash: "c43ebd04137e379216c94b4c57cab3d9" } Frame { msec: 4944 - hash: "231c7b7078af00a36cfee3d5e43a4021" + hash: "c0218c548f5e3eb74ef33cb2921dbc96" } Frame { msec: 4960 - hash: "d8ffc8cc9cecc25cb9b4e7990fb7b8e7" + hash: "e6a15947574c7ac8e5a2454a5f8b043d" } Frame { msec: 4976 - hash: "fb5db5dafdb375132f1f1a461193bc60" + hash: "ec9aca63b61a8c3beb4ad476d4e38568" } Frame { msec: 4992 - hash: "64100f9f102ffc9415e306c087547709" + hash: "28f0447e8107d7fac9ec29b83808d2cb" } Frame { msec: 5008 - hash: "6960e5c4feb55043ff91934fc934734e" + hash: "74e28cddf8dd7bd7593c7185e09ea752" } Frame { msec: 5024 - hash: "349c7a84ff8f9b52d39dba1282353167" + hash: "23b447e486a6354354505171cf3c45ec" } Frame { msec: 5040 - hash: "bb41010df844312fc15bb5b42712619a" + hash: "3e3948addc7236ff8638863786dfe045" } Frame { msec: 5056 - hash: "63a3e18670bb2a5e7edfe3b752c0a1b5" + hash: "49885ec2f3242fc3ba9c9b808b3bb491" } Frame { msec: 5072 - hash: "92b1d0fbadbefe9f122b14903a5e0ee9" + hash: "0c12fc65a0298af1a1ec3bccfcdb20ab" } Frame { msec: 5088 - hash: "6b979e1a4bc7226a89ffb97be2f08147" + hash: "49c71089343b963fd8b3587eb1d5d457" } Frame { msec: 5104 - hash: "7b783908e0b10d329a7d3172f2302a85" + hash: "f083682e9bce74022baeafcb26870adb" } Frame { msec: 5120 - hash: "41d5ef3390cfc0d806825fc0cd033be6" + hash: "5bd49eab3fd8b246659b51d4602ea391" } Frame { msec: 5136 - hash: "ff1a053c0af99c51353503002515843d" + hash: "3170c18b8dd74429b0f366ec07f4870b" } Frame { msec: 5152 - hash: "63b26ecde2a2a9ce36884191304352ed" + hash: "d82de8b7c5a144b20085f447cf041350" } Frame { msec: 5168 - hash: "bdcff2f9f2c376974211ea6ad5c4961f" + hash: "60e520c52c5b87c686294a23d96dbd11" } Frame { msec: 5184 - hash: "00ffef1a1d4341ac1c7f43d493a9e826" + hash: "bb5b6cb5862e28a7f309ef5c7cf2b5dd" } Frame { msec: 5200 - hash: "65dcbb543656f65267c7d32dcd644e56" + hash: "b9e255376ad0b74b2c9be6e694f84d90" } Frame { msec: 5216 - hash: "38b49419b7103d76da2b6d7101d63d88" + hash: "e7527c7c8cb2f8c9e5ce32be98612837" } Frame { msec: 5232 - hash: "de39f6bf64745054cbee30ddf306f641" + hash: "8f8547a6508b156d514c6d4a61d18424" } Frame { msec: 5248 - hash: "d6b5ceca4aa48a7d4fd901d44c151b53" + hash: "99b4220101d400b49346ca023799c8fe" } Frame { msec: 5264 - hash: "876e6eee8a35c34e2dd5269f86a9ab3a" + hash: "2d83cf7c5f93aad4f9dcadcfdbb08fa3" } Frame { msec: 5280 - hash: "f94219306eac2e678881d0b607d15a1e" + hash: "c9ea64aa7000008ad9032cddd898767c" } Frame { msec: 5296 - hash: "c9184196ef45c985f08f80435492641d" + hash: "4c37b188261e927f72725484d08ac9e1" } Frame { msec: 5312 - hash: "34dc672ebfd75ec017d0c2f0bd435cd8" + hash: "29c8004517294539adf3243533381436" } Frame { msec: 5328 - hash: "4daf1c730fdf13e0a87b28208f2b6dd1" + hash: "b5126298ebb61d6ab5ae58822c9380ca" } Frame { msec: 5344 - hash: "c28d5d7d9d3a86e5bbf6ad48331f9c61" + hash: "7b546c089dca57353b4867af724ea370" } Frame { msec: 5360 - hash: "3f98121997a1613bd49d22003d1a1887" + hash: "deedb9ddcc2f5354a2356178db54d971" } Frame { msec: 5376 - hash: "86732d3e900877ae7a8615b7448afaaa" + hash: "9e1fb461c13b4affa39e5909d3ade168" } Frame { msec: 5392 - hash: "9f3da7ebaeb319c9fec0abdd6bd76ee2" + hash: "dbb54d7d203c99d466b1a173fb90c148" } Frame { msec: 5408 - hash: "326563c2c812a74c7f1fa5e9da0c2369" + hash: "0a67ef028264551c1122f4d8a0b07c20" } Frame { msec: 5424 - hash: "79e00bbe77f0a178e8db30023a881c3f" + hash: "636f04661a0418c1fdcaaaba28092671" } Frame { msec: 5440 - hash: "e624204566550e928ab2a2c54113d217" + hash: "de8946eb6317277b580cbf6a38a85a29" } Frame { msec: 5456 - hash: "b95bf705b81544b05f560c54dec56ff1" + hash: "45dd5e856c10ef2e5a9b968044802096" } Frame { msec: 5472 - hash: "4f4cd776b76272cfe79b86a108bd6b6e" + hash: "a974415dcf31bee79874c4a6e84cf796" } Frame { msec: 5488 - hash: "ec2eb1b39a252bd9b37d12ede3d231ce" + hash: "58dab05300d4c83ba084c8bef6a04958" } Frame { msec: 5504 - hash: "a746404a1a26e2a25b8d364dbef46eef" + hash: "f74c075e8cf2aef501b7115427b3b221" } Frame { msec: 5520 - hash: "17d190465ee0d348d9b67a748626d99e" + hash: "7fd3e958115134b2f15cc6d3e01cbcfe" } Frame { msec: 5536 - hash: "9124d97d120de1806d86c8f437ec4ed2" + hash: "7efcd27e34db1d3adc3d31e0b9ebe432" } Frame { msec: 5552 - hash: "ea746de2380835d299c56bb01f0aa83c" + hash: "2229621b9ad55dddce371061584a4dfd" } Frame { msec: 5568 - hash: "4fda328eafe6ec2d02d939517d6d82e3" + hash: "c8747327ae3370b04a996aa6b5e373c6" } Frame { msec: 5584 - hash: "9c6f671def0b1f5d780024a9dad439e6" + hash: "677f52c273dda1f878bfea43b6353aaa" } Frame { msec: 5600 - hash: "b7d441d0bb27ed6d1984f324b6e02548" + hash: "d29de2f0505bdaca1e3443812a588fb1" } Frame { msec: 5616 - hash: "3042a62a1125171d9530b696f4b36e19" + hash: "71f3088ea8794a232ee08c6b0ad72e98" } Frame { msec: 5632 - hash: "4534f40cf6bb7f402d7252c474629664" + hash: "3733ba52e740ea8438967cb03c619368" } Frame { msec: 5648 - hash: "cb5962fe94c5d3ef754ff45f905a5c88" + hash: "5fda56f77948e183557ff54690030746" } Frame { msec: 5664 - hash: "b5a5f9f3aa0948f0bd8d9b4a3fceae50" + hash: "5996c2fc31ff3a13e1f3a23a230aad9a" } Frame { msec: 5680 - hash: "2e0605899abb5725cf22561ec9293879" + hash: "90b9b19f9f6aef7279b1199ca7b34b07" } Frame { msec: 5696 - hash: "1f260f1d931326be7e398f7c87e44735" + hash: "05b4559167ff77d07bb3063b87c4e621" } Frame { msec: 5712 - hash: "57b5fc47ed700831b3dc3f2afbb1c3ed" + hash: "6e43987a8db7a6231887cf5883d381bf" } Frame { msec: 5728 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5744 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5760 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5776 @@ -2474,19 +2474,19 @@ VisualTest { } Frame { msec: 5792 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5808 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5824 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5840 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 3 @@ -2498,59 +2498,59 @@ VisualTest { } Frame { msec: 5856 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5872 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5888 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5904 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5920 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5936 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5952 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5968 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 5984 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6000 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6016 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6032 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6048 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6064 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 2 @@ -2562,23 +2562,23 @@ VisualTest { } Frame { msec: 6080 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6096 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6112 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6128 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6144 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 3 @@ -2590,63 +2590,63 @@ VisualTest { } Frame { msec: 6160 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6176 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6192 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6208 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6224 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6240 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6256 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6272 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6288 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6304 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6320 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6336 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6352 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6368 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Frame { msec: 6384 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 2 @@ -2658,11 +2658,11 @@ VisualTest { } Frame { msec: 6400 - hash: "c18aeb6fb3914a0be2d34ff76249ed8e" + hash: "9b748b3b85f63d7f62cd916b0bf4357c" } Frame { msec: 6416 - hash: "c18aeb6fb3914a0be2d34ff76249ed8e" + hash: "9b748b3b85f63d7f62cd916b0bf4357c" } Mouse { type: 5 @@ -2682,7 +2682,7 @@ VisualTest { } Frame { msec: 6432 - hash: "c18aeb6fb3914a0be2d34ff76249ed8e" + hash: "9b748b3b85f63d7f62cd916b0bf4357c" } Mouse { type: 5 @@ -2702,7 +2702,7 @@ VisualTest { } Frame { msec: 6448 - hash: "8b9167c04a8acc7f8ade258a3e58893b" + hash: "351d95ba7bc01ea8d4991883885ca537" } Mouse { type: 5 @@ -2722,7 +2722,7 @@ VisualTest { } Frame { msec: 6464 - hash: "a5daa2f6c932fa38038639bdc8231c5d" + hash: "2c84bdd7066c8fd8c66b022783c6fcfe" } Mouse { type: 5 @@ -2742,7 +2742,7 @@ VisualTest { } Frame { msec: 6480 - hash: "f342612efcd5e0820b44bd788ec52d7a" + hash: "ffe18300d9ce72e2d4e191c473a6973c" } Mouse { type: 5 @@ -2762,7 +2762,7 @@ VisualTest { } Frame { msec: 6496 - hash: "9a66e65c69ec833a36cce5cbd7d8257f" + hash: "427720fdd38ff4310c8040b1a5a5f84f" } Mouse { type: 5 @@ -2782,7 +2782,7 @@ VisualTest { } Frame { msec: 6512 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2802,7 +2802,7 @@ VisualTest { } Frame { msec: 6528 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2822,7 +2822,7 @@ VisualTest { } Frame { msec: 6544 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2842,7 +2842,7 @@ VisualTest { } Frame { msec: 6560 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2862,7 +2862,7 @@ VisualTest { } Frame { msec: 6576 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2882,7 +2882,7 @@ VisualTest { } Frame { msec: 6592 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 5 @@ -2910,35 +2910,35 @@ VisualTest { } Frame { msec: 6608 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6624 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6640 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6656 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6672 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6688 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6704 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6720 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6736 @@ -2946,67 +2946,67 @@ VisualTest { } Frame { msec: 6752 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6768 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6784 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6800 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6816 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6832 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6848 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6864 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6880 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6896 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6912 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6928 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6944 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6960 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6976 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Frame { msec: 6992 - hash: "bca482a77823f03e8fb4170ee329fc0e" + hash: "08a827d109c78ff0d82ed7b6ef8d55b9" } Mouse { type: 2 @@ -3018,7 +3018,7 @@ VisualTest { } Frame { msec: 7008 - hash: "9ed65a21e4aaedf9c48a38324b3f5480" + hash: "ff198f6b27379e64b901b37e0cf1e98b" } Mouse { type: 5 @@ -3038,7 +3038,7 @@ VisualTest { } Frame { msec: 7024 - hash: "9ed65a21e4aaedf9c48a38324b3f5480" + hash: "ff198f6b27379e64b901b37e0cf1e98b" } Mouse { type: 5 @@ -3058,7 +3058,7 @@ VisualTest { } Frame { msec: 7040 - hash: "9ed65a21e4aaedf9c48a38324b3f5480" + hash: "ff198f6b27379e64b901b37e0cf1e98b" } Mouse { type: 5 @@ -3078,7 +3078,7 @@ VisualTest { } Frame { msec: 7056 - hash: "c4925926f64b852ff6c8d07e1c70ead5" + hash: "61d410fdbe0ee8a41e9c7b25eb2901a7" } Mouse { type: 5 @@ -3098,7 +3098,7 @@ VisualTest { } Frame { msec: 7072 - hash: "da771cedad067b8f25c100613b6a14f2" + hash: "8e27d1db841047a115561861a1c20e67" } Mouse { type: 5 @@ -3118,7 +3118,7 @@ VisualTest { } Frame { msec: 7088 - hash: "c8862bf76a431edc1cf04f4114fa859f" + hash: "7599e2f206da8b46dcaf35a4a7858747" } Mouse { type: 5 @@ -3138,7 +3138,7 @@ VisualTest { } Frame { msec: 7104 - hash: "4d923cd520c00f5cd985283d62cf17ec" + hash: "45e2cf43322f038d2b322dea82e829f1" } Mouse { type: 5 @@ -3158,7 +3158,7 @@ VisualTest { } Frame { msec: 7120 - hash: "76b0d1c77ba29bad836673b1b79de911" + hash: "0170b6aff2eab67213fc4f2883be1db9" } Mouse { type: 5 @@ -3178,7 +3178,7 @@ VisualTest { } Frame { msec: 7136 - hash: "3f9c5686f0a9ef5ecf2b8338ef2e7933" + hash: "23ef985de50ae4600d8f62ed4c91edc9" } Mouse { type: 5 @@ -3198,7 +3198,7 @@ VisualTest { } Frame { msec: 7152 - hash: "799d83eedefa0a56f37a83404c59ad4f" + hash: "a69e534df84e406e06ca94e2221c97f1" } Mouse { type: 5 @@ -3226,79 +3226,79 @@ VisualTest { } Frame { msec: 7168 - hash: "d6b5ceca4aa48a7d4fd901d44c151b53" + hash: "99b4220101d400b49346ca023799c8fe" } Frame { msec: 7184 - hash: "e1609c4e40fb9e043a9fff683b94c6c4" + hash: "80f599f50af9e601536f62ea93f4e429" } Frame { msec: 7200 - hash: "ea457fc4d4065d2ed0e9f6efc47a06ee" + hash: "e211b4a9e0059eaf7a3654121ed6b7a4" } Frame { msec: 7216 - hash: "b7f4319aa9c21640a697ee89f162bb49" + hash: "ef0997291fb3323c877b65847905f7c3" } Frame { msec: 7232 - hash: "880f60263cd79fb6a1bff7252d2373bb" + hash: "95ca2f988370075070c6a98e5e680206" } Frame { msec: 7248 - hash: "00ffef1a1d4341ac1c7f43d493a9e826" + hash: "bb5b6cb5862e28a7f309ef5c7cf2b5dd" } Frame { msec: 7264 - hash: "c949fe87ba91e08f26a1c4d90028513f" + hash: "958e9074dfa2392db05fb3f532573519" } Frame { msec: 7280 - hash: "8636af4591c61c4b4a548f3a38749413" + hash: "4d90460d3b6c46075ffda426bc6ceaa6" } Frame { msec: 7296 - hash: "63b26ecde2a2a9ce36884191304352ed" + hash: "d82de8b7c5a144b20085f447cf041350" } Frame { msec: 7312 - hash: "843f7263f63442f0041bf2c1a6fae400" + hash: "4d5d1c8470df16097c51517e750ef6be" } Frame { msec: 7328 - hash: "ff1a053c0af99c51353503002515843d" + hash: "3170c18b8dd74429b0f366ec07f4870b" } Frame { msec: 7344 - hash: "47aea3ac4ea935d43f731a258287c2e8" + hash: "35b4e282089b4f7e8cc60aaf6635a0f7" } Frame { msec: 7360 - hash: "eee4fa336149528dfb16565b856ca692" + hash: "bb67acd602414cf59e27b5ff19f69169" } Frame { msec: 7376 - hash: "bb94493c25c56c41e81ef1e390adf63d" + hash: "0135220633c5aebe964b596f3c1bae27" } Frame { msec: 7392 - hash: "2915f455a5e1e8c6b8cc78309c5e84d9" + hash: "b4a996bdc1ccae96f84e285b212a19a3" } Frame { msec: 7408 - hash: "94701ffaa4f45924ad89f92a30157c7d" + hash: "7fe6c7bd1bc9e46d3e520178a2309e87" } Frame { msec: 7424 - hash: "92fae8cf4b8d8404b26a31f995860b95" + hash: "b803764915a58bd59aed1223bd7c67d7" } Frame { msec: 7440 - hash: "6b979e1a4bc7226a89ffb97be2f08147" + hash: "49c71089343b963fd8b3587eb1d5d457" } Frame { msec: 7456 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Mouse { type: 2 @@ -3310,11 +3310,11 @@ VisualTest { } Frame { msec: 7472 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Frame { msec: 7488 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Mouse { type: 5 @@ -3334,7 +3334,7 @@ VisualTest { } Frame { msec: 7504 - hash: "dd94beeb0b4933a9ac2236a9abe630ff" + hash: "d2e577eecdf6fc9ecadf500896e0ff46" } Mouse { type: 5 @@ -3354,7 +3354,7 @@ VisualTest { } Frame { msec: 7520 - hash: "34c7ed1c072d84626a8a64f7db02f71d" + hash: "21bf0affeaf1033e59a99bed9efeb80d" } Mouse { type: 5 @@ -3374,7 +3374,7 @@ VisualTest { } Frame { msec: 7536 - hash: "e723da5ecaffe31f03b1d5ca6765229b" + hash: "c4506098417f905871a43d183cd5904d" } Mouse { type: 5 @@ -3394,7 +3394,7 @@ VisualTest { } Frame { msec: 7552 - hash: "a85128cae494abeb5d45ab8df0d127a6" + hash: "fdf8dfa53431f930b01e667b3b86c7a1" } Mouse { type: 5 @@ -3414,7 +3414,7 @@ VisualTest { } Frame { msec: 7568 - hash: "3599a92966c27321e9f702f3428b9b00" + hash: "a94e05f80f0f8d3af13678318fd91416" } Mouse { type: 5 @@ -3434,31 +3434,31 @@ VisualTest { } Frame { msec: 7584 - hash: "067a1bef3df5d1c40842f28885d60250" + hash: "bd8c0a924552cb4dfc5ddc1451931b01" } Frame { msec: 7600 - hash: "82f818ed44a191fb51e637b8068786dc" + hash: "ed5bab2126fb459989b7ea0e44da6776" } Frame { msec: 7616 - hash: "f408f59707195549ba61f030a3f020cd" + hash: "756fc80a88e6f5d28f9c6bba771355c5" } Frame { msec: 7632 - hash: "66e79c8b2f8e3a57c3bc14935c5df7d1" + hash: "640c092db0d2a523ce0cdc961e64124a" } Frame { msec: 7648 - hash: "4341c6b7b0d2e8021b51cb1abab85e10" + hash: "097582f1b42c16d41f4413755ac15c3e" } Frame { msec: 7664 - hash: "5ec8ee5ccecac1787b2f5e99268e810d" + hash: "67ef5e3297fe5605bd41a72681899f48" } Frame { msec: 7680 - hash: "1fae7b735ff6e88abfb1423f8960da4f" + hash: "91452c52c309b7d90c7ccca3fc9ae8b2" } Frame { msec: 7696 @@ -3466,182 +3466,182 @@ VisualTest { } Frame { msec: 7712 - hash: "dce74ff07eb37c82a38b3e515f9a43f2" + hash: "ebef3c7095abadf45855fe75cbf3d358" } Frame { msec: 7728 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7744 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7760 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7776 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7792 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7808 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7824 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7840 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7856 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7872 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7888 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7904 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7920 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7936 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7952 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7968 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 7984 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8000 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8016 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8032 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8048 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8064 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8080 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8096 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8112 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8128 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8144 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8160 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8176 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8192 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8208 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8224 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8240 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8256 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8272 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8288 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8304 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8320 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8336 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8352 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8368 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8384 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8400 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } Frame { msec: 8416 - hash: "ba2c06129f17fde474427859d66ecd23" + hash: "97b167a5a76d6b71713d25508ed360f0" } } diff --git a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png index 1dc9372..3556dce 100644 Binary files a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png and b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png differ -- cgit v0.12 From cb470a33bf85cf15b9df57e3ade27c6a0720d138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 4 Jan 2011 08:39:22 +0100 Subject: Fixed first element being a LineToElement in QPainterPath::connectPath() This would produce an invalid path, causing potential crashes in various parts of Qt. Task-number: QTBUG-16377 Reviewed-by: Gunnar Sletta --- src/gui/painting/qpainterpath.cpp | 3 ++- tests/auto/qpainterpath/tst_qpainterpath.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index ffd0d5c..94e2cd4 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -1196,7 +1196,8 @@ void QPainterPath::connectPath(const QPainterPath &other) int first = d->elements.size(); d->elements += other.d_func()->elements; - d->elements[first].type = LineToElement; + if (first != 0) + d->elements[first].type = LineToElement; // avoid duplicate points if (first > 0 && QPointF(d->elements[first]) == QPointF(d->elements[first - 1])) { diff --git a/tests/auto/qpainterpath/tst_qpainterpath.cpp b/tests/auto/qpainterpath/tst_qpainterpath.cpp index d0cddda..66e6d10 100644 --- a/tests/auto/qpainterpath/tst_qpainterpath.cpp +++ b/tests/auto/qpainterpath/tst_qpainterpath.cpp @@ -107,6 +107,7 @@ private slots: void operators(); void connectPathDuplicatePoint(); + void connectPathMoveTo(); void translate(); }; @@ -1169,6 +1170,31 @@ void tst_QPainterPath::connectPathDuplicatePoint() QCOMPARE(c, a); } +void tst_QPainterPath::connectPathMoveTo() +{ + QPainterPath path1; + QPainterPath path2; + QPainterPath path3; + QPainterPath path4; + + path1.moveTo(1,1); + + path2.moveTo(4,4); + path2.lineTo(5,6); + path2.lineTo(6,7); + + path3.connectPath(path2); + + path4.lineTo(5,5); + + path1.connectPath(path2); + + QVERIFY(path1.elementAt(0).type == QPainterPath::MoveToElement); + QVERIFY(path2.elementAt(0).type == QPainterPath::MoveToElement); + QVERIFY(path3.elementAt(0).type == QPainterPath::MoveToElement); + QVERIFY(path4.elementAt(0).type == QPainterPath::MoveToElement); +} + void tst_QPainterPath::translate() { QPainterPath path; -- cgit v0.12 From 7fec0ddfae9e7c79d904c87e7726991a306f5ab3 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 09:29:06 +0100 Subject: QMeeGoSwitchEvent exported and static. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 1009 Reviewed-by: Samuel Rødal --- tools/qmeegographicssystemhelper/qmeegoswitchevent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/qmeegographicssystemhelper/qmeegoswitchevent.h b/tools/qmeegographicssystemhelper/qmeegoswitchevent.h index 0ddbd3d..462182f 100644 --- a/tools/qmeegographicssystemhelper/qmeegoswitchevent.h +++ b/tools/qmeegographicssystemhelper/qmeegoswitchevent.h @@ -52,7 +52,7 @@ when going to software mode. */ -class QMeeGoSwitchEvent : public QEvent +class Q_DECL_EXPORT QMeeGoSwitchEvent : public QEvent { public: @@ -83,7 +83,7 @@ public: The type is registered on first access. Use this to detect incoming QMeeGoSwitchEvents. */ - QEvent::Type eventNumber(); + static QEvent::Type eventNumber(); private: QString name; -- cgit v0.12 From 3ad35ffdbfcbd2db5e8aac95fa0cc9f80e372128 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 10:28:20 +0100 Subject: Pre-create the GL share widget before window surface creation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not pixmap creation. Merge-request: 988 Reviewed-by: Samuel Rødal --- src/plugins/graphicssystems/meego/qmeegographicssystem.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index 4a86082..b1a8f5f7 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -75,6 +75,8 @@ QMeeGoGraphicsSystem::~QMeeGoGraphicsSystem() QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const { + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + QMeeGoGraphicsSystem::surfaceWasCreated = true; QWindowSurface *surface = new QGLWindowSurface(widget); return surface; @@ -82,12 +84,6 @@ QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const QPixmapData *QMeeGoGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const { - // Long story short: without this it's possible to hit an - // uninitialized paintDevice due to a Qt bug too complex to even - // explain here... not to mention fix without going crazy. - // MDK - QGLShareContextScope ctx(qt_gl_share_widget()->context()); - return new QRasterPixmapData(type); } -- cgit v0.12 From b5acfc61f3989ab8b72f784431fc5ab168ffb975 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 10:53:57 +0100 Subject: Support for swap modes in QGLWindowSurface. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AlwaysFull and AlwaysPartial implemented in ES only for now. By default do automatic. Merge-request: 993 Reviewed-by: Samuel Rødal --- src/opengl/qwindowsurface_gl.cpp | 13 ++++++++++++- src/opengl/qwindowsurface_gl_p.h | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 7dc7dc7..b8716ce 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -284,6 +284,7 @@ struct QGLWindowSurfacePrivate }; QGLFormat QGLWindowSurface::surfaceFormat; +QGLWindowSurface::SwapMode QGLWindowSurface::swapBehavior = QGLWindowSurface::AutomaticSwap; void QGLWindowSurfaceGLPaintDevice::endPaint() { @@ -541,6 +542,9 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & const GLenum target = GL_TEXTURE_2D; Q_UNUSED(target); + if (QGLWindowSurface::swapBehavior == QGLWindowSurface::KillSwap) + return; + if (context()) { context()->makeCurrent(); @@ -588,7 +592,14 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } } #endif - bool doingPartialUpdate = hasPartialUpdateSupport() && br.width() * br.height() < parent->geometry().width() * parent->geometry().height() * 0.2; + bool doingPartialUpdate = false; + if (QGLWindowSurface::swapBehavior == QGLWindowSurface::AutomaticSwap) + doingPartialUpdate = hasPartialUpdateSupport() && br.width() * br.height() < parent->geometry().width() * parent->geometry().height() * 0.2; + else if (QGLWindowSurface::swapBehavior == QGLWindowSurface::AlwaysFullSwap) + doingPartialUpdate = false; + else if (QGLWindowSurface::swapBehavior == QGLWindowSurface::AlwaysPartialSwap) + doingPartialUpdate = hasPartialUpdateSupport(); + QGLContext *ctx = reinterpret_cast(parent->d_func()->extraData()->glContext); if (widget != window()) { if (initializeOffscreenTexture(window()->size())) diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 6906f35..9b0bee3 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -102,6 +102,9 @@ public: static QGLFormat surfaceFormat; + enum SwapMode { AutomaticSwap, AlwaysFullSwap, AlwaysPartialSwap, KillSwap }; + static SwapMode swapBehavior; + private slots: void deleted(QObject *object); -- cgit v0.12 From 177f2a2f17251c22f57944e9dd100ec8515b891a Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Tue, 4 Jan 2011 10:53:58 +0100 Subject: QMeeGoGraphicsSystemHelper::setSwapBehavior implementation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 993 Reviewed-by: Samuel Rødal --- .../qmeegographicssystemhelper.cpp | 15 +++++++++++++++ .../qmeegographicssystemhelper.h | 18 ++++++++++++++++++ .../qmeegographicssystemhelper.pro | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp index b660eb3..37cc417 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include "qmeegoruntime.h" #include "qmeegoswitchevent.h" @@ -153,3 +154,17 @@ void QMeeGoGraphicsSystemHelper::setTranslucent(bool translucent) ENSURE_RUNNING_MEEGO; QMeeGoRuntime::setTranslucent(translucent); } + +void QMeeGoGraphicsSystemHelper::setSwapBehavior(SwapMode mode) +{ + ENSURE_RUNNING_MEEGO; + + if (mode == AutomaticSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::AutomaticSwap; + else if (mode == AlwaysFullSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::AlwaysFullSwap; + else if (mode == AlwaysPartialSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::AlwaysPartialSwap; + else if (mode == KillSwap) + QGLWindowSurface::swapBehavior = QGLWindowSurface::KillSwap; +} diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h index 6df3c22..c8dccc2 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h @@ -186,6 +186,24 @@ public: on the top-level widget *before* you show it instead. */ static void setTranslucent(bool translucent); + + //! Used to specify the mode for swapping buffers in double-buffered GL rendering. + enum SwapMode { + AutomaticSwap, /**< Automatically choose netween full and partial updates (25% threshold) */ + AlwaysFullSwap, /**< Always do a full swap even if partial updates support present */ + AlwaysPartialSwap, /**< Always do a partial swap (if support present) no matter what threshold */ + KillSwap /**< Do not perform buffer swapping at all (no picture) */ + }; + + //! Sets the buffer swapping mode. + /*! + This can be only called when running with the meego graphics system. + The KillSwap mode can be specififed to effectively block painting. + + This functionality should be used only by applications counting on a specific behavior. + Most applications should use the default automatic behavior. + */ + static void setSwapBehavior(SwapMode mode); }; #endif diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro index 360847e..7639ad7 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro @@ -3,7 +3,7 @@ TARGET = QtMeeGoGraphicsSystemHelper include(../../src/qbase.pri) -QT += gui +QT += gui opengl INCLUDEPATH += '../../src/plugins/graphicssystems/meego' HEADERS = qmeegographicssystemhelper.h qmeegooverlaywidget.h qmeegolivepixmap.h qmeegoruntime.h qmeegolivepixmap_p.h qmeegofencesync.h qmeegofencesync_p.h qmeegoswitchevent.h -- cgit v0.12 From 254281dae38b932998eb8014a55177948842b78d Mon Sep 17 00:00:00 2001 From: Joshua Grauman Date: Tue, 4 Jan 2011 11:03:32 +0100 Subject: Add line spacing to QTextBlockFormat, get/set functions, CSS support The patch adds line spacing options to Qt, as in all modern word processors. I primarily checked OpenOffice as a reference for how to position the lines based on the various types of line spacing as well as where to do the page breaks. The following functions were added: void QTextBlockFormat::setLineHeight(qreal height, int heightType) qreal QTextBlockFormat::lineHeight() int QTextBlockFormat::lineHeightType() qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling) Here are the HeightTypes available: QTextBlockFormat::SingleHeight QTextBlockFormat::ProportionalHeight QTextBlockFormat::FixedHeight QTextBlockFormat::AtLeastHeight QTextBlockFormat::LineDistanceHeight The following CSS syntax was added: line-height:150% line-height:40px line-height:normal line-height:40al line-height:40ld Merge-request: 2305 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qcssparser.cpp | 1 + src/gui/text/qcssparser_p.h | 1 + src/gui/text/qtextdocumentlayout.cpp | 38 ++++++++++++++++---- src/gui/text/qtextformat.cpp | 67 ++++++++++++++++++++++++++++++++++++ src/gui/text/qtextformat.h | 35 +++++++++++++++++++ src/gui/text/qtexthtmlparser.cpp | 18 ++++++++++ 6 files changed, 154 insertions(+), 6 deletions(-) diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp index dafc8e7..edb08ae 100644 --- a/src/gui/text/qcssparser.cpp +++ b/src/gui/text/qcssparser.cpp @@ -122,6 +122,7 @@ static const QCssKnownValue properties[NumProperties - 1] = { { "image", QtImage }, { "image-position", QtImageAlignment }, { "left", Left }, + { "line-height", LineHeight }, { "list-style", ListStyle }, { "list-style-type", ListStyleType }, { "margin" , Margin }, diff --git a/src/gui/text/qcssparser_p.h b/src/gui/text/qcssparser_p.h index ca9688e..6bcbdab 100644 --- a/src/gui/text/qcssparser_p.h +++ b/src/gui/text/qcssparser_p.h @@ -180,6 +180,7 @@ enum Property { TextTransform, QtListNumberPrefix, QtListNumberSuffix, + LineHeight, NumProperties }; diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index ff14490..5334ae8 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2506,6 +2506,23 @@ void QTextDocumentLayoutPrivate::layoutFlow(QTextFrame::Iterator it, QTextLayout fd->currentLayoutStruct = 0; } +static inline void getLineHeightParams(const QTextBlockFormat &blockFormat, const QTextLine &line, qreal scaling, + QFixed *lineAdjustment, QFixed *lineBreakHeight, QFixed *lineHeight) +{ + *lineHeight = QFixed::fromReal(blockFormat.lineHeight(line.height(), scaling)); + if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::AtLeastHeight) { + *lineBreakHeight = *lineHeight; + if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight) + *lineAdjustment = QFixed::fromReal(line.ascent() + qMax(line.leading(), 0.0)) - ((*lineHeight * 4) / 5); + else + *lineAdjustment = QFixed::fromReal(line.height()) - *lineHeight; + } + else { + *lineBreakHeight = QFixed::fromReal(line.height()); + *lineAdjustment = 0; + } +} + void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosition, const QTextBlockFormat &blockFormat, QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat) { @@ -2639,8 +2656,12 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi } - QFixed lineHeight = QFixed::fromReal(line.height()); - if (layoutStruct->pageHeight > 0 && layoutStruct->absoluteY() + lineHeight > layoutStruct->pageBottom) { + QFixed lineBreakHeight, lineHeight, lineAdjustment; + qreal scaling = (q->paintDevice() && q->paintDevice()->logicalDpiY() != qt_defaultDpi()) ? + qreal(q->paintDevice()->logicalDpiY()) / qreal(qt_defaultDpi()) : 1; + getLineHeightParams(blockFormat, line, scaling, &lineAdjustment, &lineBreakHeight, &lineHeight); + + if (layoutStruct->pageHeight > 0 && layoutStruct->absoluteY() + lineBreakHeight > layoutStruct->pageBottom) { layoutStruct->newPage(); floatMargins(layoutStruct->y, layoutStruct, &left, &right); @@ -2652,7 +2673,7 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi right -= text_indent; } - line.setPosition(QPointF((left - layoutStruct->x_left).toReal(), (layoutStruct->y - cy).toReal())); + line.setPosition(QPointF((left - layoutStruct->x_left).toReal(), (layoutStruct->y - cy - lineAdjustment).toReal())); layoutStruct->y += lineHeight; layoutStruct->contentsWidth = qMax(layoutStruct->contentsWidth, QFixed::fromReal(line.x() + line.naturalTextWidth()) + totalRightMargin); @@ -2672,11 +2693,16 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi QTextLine line = tl->lineAt(i); layoutStruct->contentsWidth = qMax(layoutStruct->contentsWidth, QFixed::fromReal(line.x() + tl->lineAt(i).naturalTextWidth()) + totalRightMargin); - const QFixed lineHeight = QFixed::fromReal(line.height()); + + QFixed lineBreakHeight, lineHeight, lineAdjustment; + qreal scaling = (q->paintDevice() && q->paintDevice()->logicalDpiY() != qt_defaultDpi()) ? + qreal(q->paintDevice()->logicalDpiY()) / qreal(qt_defaultDpi()) : 1; + getLineHeightParams(blockFormat, line, scaling, &lineAdjustment, &lineBreakHeight, &lineHeight); + if (layoutStruct->pageHeight != QFIXED_MAX) { - if (layoutStruct->absoluteY() + lineHeight > layoutStruct->pageBottom) + if (layoutStruct->absoluteY() + lineBreakHeight > layoutStruct->pageBottom) layoutStruct->newPage(); - line.setPosition(QPointF(line.position().x(), layoutStruct->y.toReal() - tl->position().y())); + line.setPosition(QPointF(line.position().x(), (layoutStruct->y - lineAdjustment).toReal() - tl->position().y())); } layoutStruct->y += lineHeight; } diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 945b012..719db7a 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -541,6 +541,8 @@ Q_GUI_EXPORT QDataStream &operator>>(QDataStream &stream, QTextFormat &fmt) \value TabPositions Specifies the tab positions. The tab positions are structs of QTextOption::Tab which are stored in a QList (internally, in a QList). \value BlockIndent + \value LineHeight + \value LineHeightType \value BlockNonBreakableLines \value BlockTrailingHorizontalRulerWidth The width of a horizontal ruler element. @@ -1856,6 +1858,10 @@ QFont QTextCharFormat::font() const indentation is set with setIndent(), the indentation of the first line with setTextIndent(). + Line spacing is set with setLineHeight() and retreived via lineHeight() + and lineHeightType(). The types of line spacing available are in the + LineHeightTypes enum. + Line breaking can be enabled and disabled with setNonBreakableLines(). The brush used to paint the paragraph's background @@ -1872,6 +1878,22 @@ QFont QTextCharFormat::font() const */ /*! + \since 4.7 + \enum QTextBlockFormat::LineHeightTypes + + This enum describes the various types of line spacing support paragraphs can have. + + \value SingleHeight This is the default line height: single spacing. + \value ProportionalHeight This sets the spacing proportional to the line (in percentage). + For example, set to 200 for double spacing. + \value FixedHeight This sets the line height to a fixed line height (in pixels). + \value AtLeastHeight This sets the minimum line height (in pixels). + \value LineDistanceHeight This adds the specified height between lines (in pixels). + + \sa lineHeight(), lineHeightType(), setLineHeight() +*/ + +/*! \fn QTextBlockFormat::QTextBlockFormat() Constructs a new QTextBlockFormat. @@ -2089,6 +2111,51 @@ QList QTextBlockFormat::tabPositions() const /*! + \fn void QTextBlockFormat::setLineHeight(qreal height, int heightType) + \since 4.7 + + This sets the line height for the paragraph to the value in height + which is dependant on heightType, described by the LineHeightTypes enum. + + \sa LineHeightTypes, lineHeight(), lineHeightType() +*/ + + +/*! + \fn qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling) const + \since 4.7 + + This returns what the height of the lines in the paragraph will be depending + on the given height of the script line and the scaling. The value that is returned + is also dependant on the given LineHeightType of the paragraph as well as the LineHeight + setting that has been set for the paragraph. The scaling is needed for the heights + that include a fixed number of pixels, to scale them appropriately for printing. + + \sa LineHeightTypes, setLineHeight(), lineHeightType() +*/ + + +/*! + \fn qreal QTextBlockFormat::lineHeight() const + \since 4.7 + + This returns the LineHeight property for the paragraph. + + \sa LineHeightTypes, setLineHeight(), lineHeightType() +*/ + + +/*! + \fn qreal QTextBlockFormat::lineHeightType() const + \since 4.7 + + This returns the LineHeightType property of the paragraph. + + \sa LineHeightTypes, setLineHeight(), lineHeight() +*/ + + +/*! \fn void QTextBlockFormat::setNonBreakableLines(bool b) If \a b is true, the lines in the paragraph are treated as diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index bb6e71d..41cc1d9 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -164,6 +164,8 @@ public: TextIndent = 0x1034, TabPositions = 0x1035, BlockIndent = 0x1040, + LineHeight = 0x1048, + LineHeightType = 0x1049, BlockNonBreakableLines = 0x1050, BlockTrailingHorizontalRulerWidth = 0x1060, @@ -531,6 +533,14 @@ inline void QTextCharFormat::setTableCellColumnSpan(int _tableCellColumnSpan) class Q_GUI_EXPORT QTextBlockFormat : public QTextFormat { public: + enum LineHeightTypes { + SingleHeight = 0, + ProportionalHeight = 1, + FixedHeight = 2, + AtLeastHeight = 3, + LineDistanceHeight = 4 + }; + QTextBlockFormat(); bool isValid() const { return isBlockFormat(); } @@ -568,6 +578,14 @@ public: inline int indent() const { return intProperty(BlockIndent); } + inline void setLineHeight(qreal height, int heightType) + { setProperty(LineHeight, height); setProperty(LineHeightType, heightType); } + inline qreal lineHeight(qreal scriptLineHeight, qreal scaling) const; + inline qreal lineHeight() const + { return doubleProperty(LineHeight); } + inline int lineHeightType() const + { return intProperty(LineHeightType); } + inline void setNonBreakableLines(bool b) { setProperty(BlockNonBreakableLines, b); } inline bool nonBreakableLines() const @@ -592,6 +610,23 @@ inline void QTextBlockFormat::setAlignment(Qt::Alignment aalignment) inline void QTextBlockFormat::setIndent(int aindent) { setProperty(BlockIndent, aindent); } +inline qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling = 1.0) const +{ + switch(intProperty(LineHeightType)) { + case SingleHeight: + return(scriptLineHeight); + case ProportionalHeight: + return(scriptLineHeight * doubleProperty(LineHeight) / 100.0); + case FixedHeight: + return(doubleProperty(LineHeight) * scaling); + case AtLeastHeight: + return(qMax(scriptLineHeight, doubleProperty(LineHeight) * scaling)); + case LineDistanceHeight: + return(scriptLineHeight + doubleProperty(LineHeight) * scaling); + } + return(0); +} + class Q_GUI_EXPORT QTextListFormat : public QTextFormat { public: diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp index 5b9ab90..769a509 100644 --- a/src/gui/text/qtexthtmlparser.cpp +++ b/src/gui/text/qtexthtmlparser.cpp @@ -1250,6 +1250,24 @@ void QTextHtmlParserNode::applyCssDeclarations(const QVector case QCss::QtBlockIndent: blockFormat.setIndent(decl.d->values.first().variant.toInt()); break; + case QCss::LineHeight: { + qreal lineHeight; + if (decl.realValue(&lineHeight, "px")) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::FixedHeight); + else if (decl.realValue(&lineHeight, "al")) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::AtLeastHeight); + else if (decl.realValue(&lineHeight, "ld")) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::LineDistanceHeight); + else { + bool ok; + QString value = decl.d->values.first().toString(); + lineHeight = value.toDouble(&ok); + if (ok) + blockFormat.setLineHeight(lineHeight, QTextBlockFormat::ProportionalHeight); + else + blockFormat.setLineHeight(0, QTextBlockFormat::SingleHeight); + } + break; } case QCss::TextIndent: { qreal indent = 0; if (decl.realValue(&indent, "px")) -- cgit v0.12 From 09b06552f98f8ee8be4d156049a6a37a4abed6bd Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 4 Jan 2011 11:09:38 +0100 Subject: Rename QTextBlockFormat::AtLeastHeight -> MinimumHeight Make some alterations to merge request 2305: 1. Rename enum for consistency with other APIs in Qt. 2. Correct documentation with actual version number of features. 3. Remove unstandard css syntax in line-height specification. Reviewed-by: Jiang Jiang --- src/gui/text/qtextdocumentlayout.cpp | 2 +- src/gui/text/qtextformat.cpp | 12 ++++++------ src/gui/text/qtextformat.h | 4 ++-- src/gui/text/qtexthtmlparser.cpp | 8 ++------ 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 5334ae8..22c6b8c 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2510,7 +2510,7 @@ static inline void getLineHeightParams(const QTextBlockFormat &blockFormat, cons QFixed *lineAdjustment, QFixed *lineBreakHeight, QFixed *lineHeight) { *lineHeight = QFixed::fromReal(blockFormat.lineHeight(line.height(), scaling)); - if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::AtLeastHeight) { + if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::MinimumHeight) { *lineBreakHeight = *lineHeight; if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight) *lineAdjustment = QFixed::fromReal(line.ascent() + qMax(line.leading(), 0.0)) - ((*lineHeight * 4) / 5); diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 719db7a..b05a830 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -1878,7 +1878,7 @@ QFont QTextCharFormat::font() const */ /*! - \since 4.7 + \since 4.8 \enum QTextBlockFormat::LineHeightTypes This enum describes the various types of line spacing support paragraphs can have. @@ -1887,7 +1887,7 @@ QFont QTextCharFormat::font() const \value ProportionalHeight This sets the spacing proportional to the line (in percentage). For example, set to 200 for double spacing. \value FixedHeight This sets the line height to a fixed line height (in pixels). - \value AtLeastHeight This sets the minimum line height (in pixels). + \value MinimumHeight This sets the minimum line height (in pixels). \value LineDistanceHeight This adds the specified height between lines (in pixels). \sa lineHeight(), lineHeightType(), setLineHeight() @@ -2112,7 +2112,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn void QTextBlockFormat::setLineHeight(qreal height, int heightType) - \since 4.7 + \since 4.8 This sets the line height for the paragraph to the value in height which is dependant on heightType, described by the LineHeightTypes enum. @@ -2123,7 +2123,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling) const - \since 4.7 + \since 4.8 This returns what the height of the lines in the paragraph will be depending on the given height of the script line and the scaling. The value that is returned @@ -2137,7 +2137,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn qreal QTextBlockFormat::lineHeight() const - \since 4.7 + \since 4.8 This returns the LineHeight property for the paragraph. @@ -2147,7 +2147,7 @@ QList QTextBlockFormat::tabPositions() const /*! \fn qreal QTextBlockFormat::lineHeightType() const - \since 4.7 + \since 4.8 This returns the LineHeightType property of the paragraph. diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h index 41cc1d9..81b053b 100644 --- a/src/gui/text/qtextformat.h +++ b/src/gui/text/qtextformat.h @@ -537,7 +537,7 @@ public: SingleHeight = 0, ProportionalHeight = 1, FixedHeight = 2, - AtLeastHeight = 3, + MinimumHeight = 3, LineDistanceHeight = 4 }; @@ -619,7 +619,7 @@ inline qreal QTextBlockFormat::lineHeight(qreal scriptLineHeight, qreal scaling return(scriptLineHeight * doubleProperty(LineHeight) / 100.0); case FixedHeight: return(doubleProperty(LineHeight) * scaling); - case AtLeastHeight: + case MinimumHeight: return(qMax(scriptLineHeight, doubleProperty(LineHeight) * scaling)); case LineDistanceHeight: return(scriptLineHeight + doubleProperty(LineHeight) * scaling); diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp index 769a509..5d5e2b6 100644 --- a/src/gui/text/qtexthtmlparser.cpp +++ b/src/gui/text/qtexthtmlparser.cpp @@ -1252,13 +1252,9 @@ void QTextHtmlParserNode::applyCssDeclarations(const QVector break; case QCss::LineHeight: { qreal lineHeight; - if (decl.realValue(&lineHeight, "px")) + if (decl.realValue(&lineHeight, "px")) { blockFormat.setLineHeight(lineHeight, QTextBlockFormat::FixedHeight); - else if (decl.realValue(&lineHeight, "al")) - blockFormat.setLineHeight(lineHeight, QTextBlockFormat::AtLeastHeight); - else if (decl.realValue(&lineHeight, "ld")) - blockFormat.setLineHeight(lineHeight, QTextBlockFormat::LineDistanceHeight); - else { + } else { bool ok; QString value = decl.d->values.first().toString(); lineHeight = value.toDouble(&ok); -- cgit v0.12 From ca87617ed4ba05a2ee1428616d1758ac6a05a26f Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Tue, 4 Jan 2011 16:34:27 +0200 Subject: Fixed broken configuration step for Symbian builds Non-existing exports were removed, and errors caused by whitespace conversion in the FLM used for configuration were corrected. Reviewed-by: TrustMe --- config.profiles/symbian/bld.inf | 9 ++----- config.profiles/symbian/qtconfig.flm | 46 ++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/config.profiles/symbian/bld.inf b/config.profiles/symbian/bld.inf index d3958dd..d2d959b 100644 --- a/config.profiles/symbian/bld.inf +++ b/config.profiles/symbian/bld.inf @@ -34,11 +34,13 @@ environment.prf /epoc32/tools/qt/mkspecs/features/environment.prf //for loc loc.prf /epoc32/tools/qt/mkspecs/features/loc.prf +#ifdef FF_QT_IN_UDA //For UDA image confml/qt.confml CONFML_EXPORT_PATH(qt.confml,uda_content) implml/qt_copy.implml CRML_EXPORT_PATH(qt_copy.implml,uda_content) content/apps/qt.sisx CRML_EXPORT_PATH(../content/sis/,uda_content) content/apps/qt_stub.sis /epoc32/data/z/system/install/qt_stub.sis +#endif //tools ../../bin/createpackage.bat /epoc32/tools/createpackage.bat @@ -73,13 +75,6 @@ translations/qt_zh_tw_symbian.ts /epoc32/include/platform/qt/translations/qt_zh_ ../../translations/qt_sv.ts /epoc32/include/platform/qt/translations/ ../../translations/qt_uk.ts /epoc32/include/platform/qt/translations/ - -PRJ_MMPFILES - - -PRJ_TESTMMPFILES - - PRJ_EXTENSIONS START EXTENSION qt/qtconfig OPTION QT_ROOT .. diff --git a/config.profiles/symbian/qtconfig.flm b/config.profiles/symbian/qtconfig.flm index 61ee6e6..03f860f 100644 --- a/config.profiles/symbian/qtconfig.flm +++ b/config.profiles/symbian/qtconfig.flm @@ -33,38 +33,38 @@ $(TARGET_TOOLS): $(QT_TOOLS) else $(TARGET_TOOLS): $(SOURCEDIR)/qmake$(DOTEXE) endif - $(call startrule,qtconf_deploy) \ - $(GNUCP) $(SOURCEDIR)/$$(notdir $$@) $$@ \ - $(call endrule,qtconf_deploy) + $(call startrule,qtconf_deploy) \ + $(GNUCP) $(SOURCEDIR)/$$(notdir $$@) $$@ \ + $(call endrule,qtconf_deploy) ifneq ($(filter linux,$(HOSTPLATFORM)),) $(QT_TOOLS): $(TOOLSSRCDIR)/bootstrap - $(call startrule,qtconf_tools_build) \ - cd $$@; \ - $(GNUMAKE38); \ - cd .. \ - $(call endrule,qtconf_tools_build) + $(call startrule,qtconf_tools_build) \ + cd $$@; \ + $(GNUMAKE38); \ + cd .. \ + $(call endrule,qtconf_tools_build) $(TOOLSSRCDIR)/bootstrap:$(SOURCEDIR)/qmake$(DOTEXE) - $(call startrule,qtconf_bootstrap_build) \ - cd $(TOOLSSRCDIR)/bootstrap; \ - $(GNUMAKE38); \ - cd .. \ - $(call endrule,qtconf_bootstrap_build) + $(call startrule,qtconf_bootstrap_build) \ + cd $(TOOLSSRCDIR)/bootstrap; \ + $(GNUMAKE38); \ + cd .. \ + $(call endrule,qtconf_bootstrap_build) endif $(SOURCEDIR)/qmake$(DOTEXE): $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) - $(call startrule,qtconf) \ - cd $(EXTENSION_ROOT)/$(QT_ROOT) && unset INCLUDE && unset LIB && $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) -platform $(PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS) \ - $(call endrule,qtconf) - $(call startrule,headerexport) \ - cd $(EXTENSION_ROOT)/$(QT_ROOT)/config.profiles/symbian && \ - perl headerexport -base-dir $(EXTENSION_ROOT)/$(QT_ROOT) -copy -oneway -outdir $(EPOCROOT)/epoc32/include/ -outsubdir mw - $(call endrule,headerexport) - $(call startrule,mkspecexport) \ - $(GNUCP) -R $(EXTENSION_ROOT)/$(QT_ROOT)/mkspecs $(MKSPECDIR) - $(call endrule,mkspecexport) + $(call startrule,qtconf) \ + cd $(EXTENSION_ROOT)/$(QT_ROOT) && unset INCLUDE && unset LIB && $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) -platform $(PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS) \ + $(call endrule,qtconf) + $(call startrule,headerexport) \ + cd $(EXTENSION_ROOT)/$(QT_ROOT)/config.profiles/symbian && \ + perl headerexport -base-dir $(EXTENSION_ROOT)/$(QT_ROOT) -copy -oneway -outdir $(EPOCROOT)/epoc32/include/ -outsubdir mw + $(call endrule,headerexport) + $(call startrule,mkspecexport) \ + $(GNUCP) -R $(EXTENSION_ROOT)/$(QT_ROOT)/mkspecs $(MKSPECDIR) + $(call endrule,mkspecexport) endef # Here a variable named "done_" gets created -- cgit v0.12 From 91e127444f1b217525263b26f44fb566b9067d75 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 4 Jan 2011 16:20:55 +0200 Subject: Generate freeze targets in Symbian Make it possible to freeze def files via makefile targets. Task-number: QTBUG-13769 Reviewed-by: Janne Koskinen --- qmake/generators/symbian/symmake_abld.cpp | 21 +++++++++++++++++++++ qmake/generators/symbian/symmake_sbsv2.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index eb39d36..94cb22e 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -406,6 +406,27 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool t << "\t$(ABLD)" << testClause << " reallyclean " << item << " urel" << endl; } t << endl; + + t << "freeze: $(ABLD)" << endl; + t << "\t$(ABLD)" << testClause << " freeze" << endl; + t << endl; + + // Abld toolchain doesn't differentiate between freezing release or debug + t << "freeze-debug: freeze" << endl << endl; + t << "freeze-release: freeze" << endl << endl; + + // For more specific builds, targets are in this form: freeze-build-platform, e.g. freeze-release-armv5, + // though note that debug and release targets of each platform are identical in symbian-abld. + foreach(QString item, debugPlatforms) { + t << "freeze-debug-" << item << ": $(ABLD)" << endl; + t << "\t$(ABLD)" << testClause << " freeze " << item << endl; + } + foreach(QString item, releasePlatforms) { + t << "freeze-release-" << item << ": $(ABLD)" << endl; + t << "\t$(ABLD)" << testClause << " freeze " << item << endl; + } + + t << endl; } void SymbianAbldMakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile) diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index c219f1d..c6dec6d 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -391,6 +391,14 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << clause; } t << endl; + + t << "freeze-debug: " << BLD_INF_FILENAME << endl; + t << "\t$(SBS) freeze"; + foreach(QString clause, debugClauses) { + t << clause; + } + t << endl; + t << "release: " << locFileDep << BLD_INF_FILENAME << endl; t << "\t$(SBS)"; foreach(QString clause, releaseClauses) { @@ -402,6 +410,13 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo foreach(QString clause, releaseClauses) { t << clause; } + t << endl; + + t << "freeze-release: " << BLD_INF_FILENAME << endl; + t << "\t$(SBS) freeze"; + foreach(QString clause, releaseClauses) { + t << clause; + } t << endl << endl; QString defaultGcceArmVersion; @@ -427,6 +442,8 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << "\t$(SBS)" << clause << endl; t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << clause << endl; + t << "freeze-debug-" << item << ": " << BLD_INF_FILENAME << endl; + t << "\t$(SBS) freeze" << clause << endl; } foreach(QString item, releasePlatforms) { @@ -440,6 +457,8 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << "\t$(SBS)" << clause << endl; t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << clause << endl; + t << "freeze-release-" << item << ": " << BLD_INF_FILENAME << endl; + t << "\t$(SBS) freeze" << clause << endl; } foreach(QString item, armPlatforms) { @@ -450,10 +469,14 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << "\t$(SBS)" << debugClause << endl; t << "clean-debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; t << "\t$(SBS) reallyclean" << debugClause << endl; + t << "freeze-debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; + t << "\t$(SBS) freeze" << debugClause << 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; + t << "freeze-release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl; + t << "\t$(SBS) freeze" << releaseClause << endl; } } @@ -471,6 +494,12 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo t << clause; } t << endl << endl; + + // Typically one wants to freeze release binaries, so make plain freeze target equal to + // freeze-release. If freezing of debug binaries is needed for some reason, then + // freeze-debug target should be used. There is no point to try freezing both with one + // target as both produce the same def file. + t << "freeze: freeze-release" << endl << endl; } // Add all extra targets including extra compiler targets also to wrapper makefile, -- cgit v0.12 From c981098ea0353aead43c93ac81835451515b63d0 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 4 Jan 2011 17:16:03 +0200 Subject: Fix def file names for libinfixed testlib Reviewed-by: Janne Koskinen --- mkspecs/features/symbian/def_files.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf index f243878..4a59116 100644 --- a/mkspecs/features/symbian/def_files.prf +++ b/mkspecs/features/symbian/def_files.prf @@ -4,7 +4,7 @@ CONFIG -= def_files_disabled # We need a target name without the INFIX'ed part, since DEF files are not infixed. -equals(QMAKE_TARGET_PRODUCT, Qt4):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "") +equals(QMAKE_TARGET_PRODUCT, Qt4)|equals(QMAKE_TARGET_PRODUCT, QTestLib):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "") else:clean_TARGET = $$TARGET symbian-abld|symbian-sbsv2 { -- cgit v0.12 From 572598884de78c5026694843473122487269a244 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Wed, 5 Jan 2011 15:41:56 +1000 Subject: Fix outdated tests selftest_noimages and qdeclarativespringanimation were correct, updating test scripts to match. Task-number: QTBUG-14792 --- .../data-X11/follow.0.png | Bin 0 -> 950 bytes .../data-X11/follow.1.png | Bin 0 -> 983 bytes .../data-X11/follow.2.png | Bin 0 -> 1243 bytes .../data-X11/follow.3.png | Bin 0 -> 1235 bytes .../data-X11/follow.4.png | Bin 0 -> 1253 bytes .../data-X11/follow.5.png | Bin 0 -> 1249 bytes .../data-X11/follow.6.png | Bin 0 -> 1241 bytes .../data-X11/follow.7.png | Bin 0 -> 1251 bytes .../data-X11/follow.qml | 1763 ++++++++++++++++++++ .../selftest_noimages/data/selftest_noimages.qml | 146 +- 10 files changed, 1779 insertions(+), 130 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.0.png new file mode 100644 index 0000000..6525dbb Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.1.png new file mode 100644 index 0000000..5b8d209 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.2.png new file mode 100644 index 0000000..cf012ba Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.3.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.3.png new file mode 100644 index 0000000..57e77a4 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.4.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.4.png new file mode 100644 index 0000000..24d26bd Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.5.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.5.png new file mode 100644 index 0000000..a540734 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.6.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.6.png new file mode 100644 index 0000000..17da643 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.7.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.7.png new file mode 100644 index 0000000..e03cfe4 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/follow.qml new file mode 100644 index 0000000..98cd12c --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data-X11/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: "2ddcb50f5d285eb80a8136f0cf4cf85a" + } + Frame { + msec: 48 + hash: "519d93a844e05f8215139d91c9aef58b" + } + Frame { + msec: 64 + hash: "9f075a5547e4dc67cbe2ace2766395bb" + } + Frame { + msec: 80 + hash: "8fc48f74a51d45b4ea1fb7bd1d48002f" + } + Frame { + msec: 96 + hash: "a28fc4be5a5bb9ff36f796d9b071f02c" + } + Frame { + msec: 112 + hash: "ebc14c2905f3596ec451dd96409e6001" + } + Frame { + msec: 128 + hash: "4f270bdcff44006a56055edb1cda522a" + } + Frame { + msec: 144 + hash: "571f347e764bf38985768c85c2a13ba1" + } + Frame { + msec: 160 + hash: "b1aa23268167b7e2a1190288926f52c0" + } + Frame { + msec: 176 + hash: "06d548aef9a678edbf3ab4d3ce62a647" + } + Frame { + msec: 192 + hash: "daf6af0ae78f39566913c656450a66e5" + } + Frame { + msec: 208 + hash: "f101cd0c026ee0ed6ccef7a4aed302a0" + } + Frame { + msec: 224 + hash: "b3caa673f072c53d31d71109c9b33357" + } + Frame { + msec: 240 + hash: "8596f1d305d6b8f97b9feda9e69bdefe" + } + Frame { + msec: 256 + hash: "23c23df2c130aafb2092fe47a958a4cd" + } + Frame { + msec: 272 + hash: "66a4f2d8213264437a5f4d6cf10cd442" + } + Frame { + msec: 288 + hash: "6392490111813bad0a9467cc0c1746ed" + } + Frame { + msec: 304 + hash: "c115a47e0ecab63b881e2ec492d24e68" + } + Frame { + msec: 320 + hash: "c2a2b57e6f9ea2975c0846124d2dbc66" + } + Frame { + msec: 336 + hash: "8286c315dfda4241607b2de1154f869d" + } + Frame { + msec: 352 + hash: "3f0f7cae80357176892ff7628ec3153a" + } + Frame { + msec: 368 + hash: "d13bde4a5b5ed8202f92ae33913166c9" + } + Frame { + msec: 384 + hash: "b70cc32134b1b0d31a5e7f145af09495" + } + Frame { + msec: 400 + hash: "03ebc2ff317ac840f4508e8701d66955" + } + Frame { + msec: 416 + hash: "8dff08e72365e8e2fee8088c386dedca" + } + Frame { + msec: 432 + hash: "720f3bbaf3fa3e3a064747d5689e47a0" + } + Frame { + msec: 448 + hash: "350e3ebfcfef96969ef5b8d5944f7e62" + } + Frame { + msec: 464 + hash: "1e4e6e68b3a8eac0c5cd039164eec166" + } + Frame { + msec: 480 + hash: "62a10c4250ad025139a3f9e72109e8e1" + } + Frame { + msec: 496 + hash: "23cfd643adfc98f6a06c7e7b15dac954" + } + Frame { + msec: 512 + hash: "3a78930d5b86b886723fad85e77dd075" + } + Frame { + msec: 528 + hash: "64dc878e2f527e80403c766e61fe14a6" + } + Frame { + msec: 544 + hash: "d79160989d2584044042271e79a88e69" + } + Frame { + msec: 560 + hash: "22cbaea4affc88433834c7d0dc1f1644" + } + Frame { + msec: 576 + hash: "77cb616902257e1f239a0e6bfaabb33c" + } + Frame { + msec: 592 + hash: "a2fe73dced03b23c4acb9aae9b774b41" + } + Frame { + msec: 608 + hash: "230e21d3a9ed0e185593677233af1275" + } + Frame { + msec: 624 + hash: "4e10ecffac4e06d624855d3f8917f76c" + } + Frame { + msec: 640 + hash: "84f49d56baace4a02e50d3eafaea04ec" + } + Frame { + msec: 656 + hash: "e3cd0b334551a9f91723eb2c876d335a" + } + Frame { + msec: 672 + hash: "259330f3ec390c9926d9c2ddc2d77319" + } + Frame { + msec: 688 + hash: "cc659623bfa385d282d608684d7cdc2b" + } + Frame { + msec: 704 + hash: "47ed75d077143a6bfa0e10158550c542" + } + Frame { + msec: 720 + hash: "0de93bbd9f9ee63e97968089321003e1" + } + Frame { + msec: 736 + hash: "b33d867d4399879256a01344ce0b81f2" + } + Frame { + msec: 752 + hash: "97c31fce937d11f62bebc6169b464a42" + } + Frame { + msec: 768 + hash: "ea4166b8a4001bca3f27af30f251267f" + } + Frame { + msec: 784 + hash: "b56d270b7893565f8d7ed2a0bfe10d60" + } + Frame { + msec: 800 + hash: "88a42559fe22b45cff379258dd40ced9" + } + Frame { + msec: 816 + hash: "4ee1a711cb8d26087e1b75a3166ca5f0" + } + Frame { + msec: 832 + hash: "9b88a00d041092e79b4a08bccbaca0e1" + } + Frame { + msec: 848 + hash: "afea397b3d740dc42f0313624fc10efd" + } + Frame { + msec: 864 + hash: "39fd8e4cefbd9fed283d62a7aecded22" + } + Frame { + msec: 880 + hash: "916b783d2379ac054c749e7b6eae7ddf" + } + Frame { + msec: 896 + hash: "fccd44740ff7ffb0f2adccf00a7588bd" + } + Frame { + msec: 912 + hash: "c064f20703a13543e8273d251fd645fe" + } + Frame { + msec: 928 + hash: "1b9b0755101841e3d1cbe208d81575d5" + } + Frame { + msec: 944 + hash: "1eb5e4a301b565012bc8f6af8e879eb9" + } + Frame { + msec: 960 + hash: "032db65eb5c405e433f88df3975c322b" + } + Frame { + msec: 976 + image: "follow.1.png" + } + Frame { + msec: 992 + hash: "fdb67e11d7cc767b2389a8bbef752c7e" + } + Frame { + msec: 1008 + hash: "ed89cb161336c61b13e3514fdf816023" + } + Frame { + msec: 1024 + hash: "331b873c5367e0aaa62af85cb54a6a96" + } + Frame { + msec: 1040 + hash: "cde4503f02f0c3732e310a7d0418cd1e" + } + Frame { + msec: 1056 + hash: "f8c028c591fc1495d5bec8763da6f011" + } + Frame { + msec: 1072 + hash: "9dc68483218335afe41aa3cd052a98b5" + } + Frame { + msec: 1088 + hash: "31105c455418a3284700cf9c88571507" + } + Frame { + msec: 1104 + hash: "72724947167a1ac600aaa1d7f331f7ec" + } + Frame { + msec: 1120 + hash: "a4a1243326de6b9e93948fcb22fecac4" + } + Frame { + msec: 1136 + hash: "c3e26e62f12dd658f21a0330fefb0533" + } + Frame { + msec: 1152 + hash: "15d85b4a9ad761a911bbaa3e0c4b2b61" + } + Frame { + msec: 1168 + hash: "bce1400b437cc43b8ff57b1a5fbc9551" + } + Frame { + msec: 1184 + hash: "5d05848afcd8f697c1b3762f00a759f6" + } + Frame { + msec: 1200 + hash: "6c83f68ea72cd54793149f4c9e759d44" + } + Frame { + msec: 1216 + hash: "5206b93666e51cee3e25a7a85e27b5b8" + } + Frame { + msec: 1232 + hash: "a3ef5c76efece4455e5ad12bcc8bd8f5" + } + Frame { + msec: 1248 + hash: "c36c6ee7b6c8074f5dc1af7446fad1ad" + } + Frame { + msec: 1264 + hash: "bb0887f1f10548bb53f0dc1ffeec25ee" + } + Frame { + msec: 1280 + hash: "ebffe547a7c3528e5deddc590510506d" + } + Frame { + msec: 1296 + hash: "18962faef1a1a1207a3c6783116154a2" + } + Frame { + msec: 1312 + hash: "8aaa876e4a6c4de04e557f35ddd4fb61" + } + Frame { + msec: 1328 + hash: "c66123bb4e01ce267629f5b50d147db1" + } + Frame { + msec: 1344 + hash: "334e5acf84d90e70ca3085b9d5e057a7" + } + Frame { + msec: 1360 + hash: "9bb49ddcc775307c3c1159908323e010" + } + Frame { + msec: 1376 + hash: "1b3cfb8b6b6c39a34ea86a66ea1cc6b1" + } + Frame { + msec: 1392 + hash: "d2a68c6eb2b05390ab1049137f96f227" + } + Frame { + msec: 1408 + hash: "91e254fd2376ba35a283b18b947ca1a8" + } + Frame { + msec: 1424 + hash: "fe94e2e8b4978390e9e8cbfe77dfc241" + } + Frame { + msec: 1440 + hash: "e3d32b73c5c50e7aa59f4e4725de170e" + } + Frame { + msec: 1456 + hash: "a73b90254d7da5557cc3941db0017a65" + } + Frame { + msec: 1472 + hash: "9aa49cce5d63f8dd6409995ac6d91d63" + } + Frame { + msec: 1488 + hash: "0ba674df46accec28a3c1b81e656adc7" + } + Frame { + msec: 1504 + hash: "025a45417b8c75d47b5dac6c5ef913e9" + } + Frame { + msec: 1520 + hash: "742527b97c7f580b0b7ff9d6aa105d31" + } + Frame { + msec: 1536 + hash: "965ec8315d45894e704fcc5a3efc8c55" + } + Frame { + msec: 1552 + hash: "6abdd59e6bd2c31124eab254418a5322" + } + Frame { + msec: 1568 + hash: "9f6d06b176c55fa292e7f0ef4b5cd1cb" + } + Frame { + msec: 1584 + hash: "05eba8c6e02c0d4af49e59b3346c9e68" + } + Frame { + msec: 1600 + hash: "3c4215f6253aba836516cd51368bc471" + } + Frame { + msec: 1616 + hash: "c6339a290007c0106cb18ecef5b7392b" + } + Frame { + msec: 1632 + hash: "39a4bcd2ce84035f9db70f196ca00971" + } + Frame { + msec: 1648 + hash: "b75a4be472583c3b893fc894ebe7d4d8" + } + Frame { + msec: 1664 + hash: "d1efebbe748c43b3c1241753612e100d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 195; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "f6f3ad64fb71ffb68a5ea0375cc94bae" + } + Frame { + msec: 1696 + hash: "778ecbafb5d235edde1683cabe3c3cfe" + } + Frame { + msec: 1712 + hash: "5a41b9196fe4a97e6ba2400806299bd8" + } + Frame { + msec: 1728 + hash: "1c8ddbc5910e35be389a1cb34fab9dec" + } + Frame { + msec: 1744 + hash: "5e8b236c00087a067d366afde67184f3" + } + Frame { + msec: 1760 + hash: "b7308837c5d7950dc81abec1340b4582" + } + Frame { + msec: 1776 + hash: "bbe9f0b030efa716f34a05f0af929c66" + } + Frame { + msec: 1792 + hash: "cd393fc19a30d896bfe62aa0000308f8" + } + Frame { + msec: 1808 + hash: "c390f5b1bcff54de203490d8f2616fcd" + } + Frame { + msec: 1824 + hash: "b5da2ea467c334dd13c75b811b94efb1" + } + Frame { + msec: 1840 + hash: "49887c9312c3a4dfc2d9719f47c83a15" + } + Frame { + msec: 1856 + hash: "7f077703e49f154d01c12a44f53469c5" + } + Frame { + msec: 1872 + hash: "7be4130ed767f0e0bf41c3bebf050cac" + } + Frame { + msec: 1888 + hash: "cc1590486c172000557b76c6eadb51e0" + } + Frame { + msec: 1904 + hash: "7ccd05236d9c1f8af0e9645404326122" + } + Frame { + msec: 1920 + hash: "2da165bf7e868b53b85bb630649ddc3e" + } + Frame { + msec: 1936 + image: "follow.2.png" + } + Frame { + msec: 1952 + hash: "2b6a24b6ceeaa956527c872af70fb5f9" + } + Frame { + msec: 1968 + hash: "8c882de21f4ed0fb68433c19b114c3f8" + } + Frame { + msec: 1984 + hash: "f75226c58726a687079d0d24e865ee6f" + } + Frame { + msec: 2000 + hash: "2fa9b69fe85b4e1361ba260545c10e06" + } + Frame { + msec: 2016 + hash: "6d513bc03f2798fbce1a0790969da6b5" + } + Frame { + msec: 2032 + hash: "7e359e605483493e9a865f6eb912c394" + } + Frame { + msec: 2048 + hash: "497c7c82c24408dcaff5ec981d3d4f35" + } + Frame { + msec: 2064 + hash: "8738b024cf75ef970ffe20166e85141c" + } + Frame { + msec: 2080 + hash: "014b805eb1ecf2ea1cd61727bfd1ca08" + } + Frame { + msec: 2096 + hash: "a81cde60979300f397054ea017382114" + } + Frame { + msec: 2112 + hash: "c46183b5224e762335eea98d9da65465" + } + Frame { + msec: 2128 + hash: "11afbb88994f298a1fed6575fae3d7fd" + } + Frame { + msec: 2144 + hash: "0195fa503143561d9ae3ffe68739ca3f" + } + Frame { + msec: 2160 + hash: "6d298df37d2116eb9a62b58853cb3344" + } + Frame { + msec: 2176 + hash: "1660865f00ea9adf94c8e56c7a8a73b2" + } + Frame { + msec: 2192 + hash: "9835b5527b84e8e8a8fea2bdf9653a99" + } + Frame { + msec: 2208 + hash: "ec1158b83daa9e98437abc9ce90b70f0" + } + Frame { + msec: 2224 + hash: "11ce5e37747e05ff5f5071b13324ce9e" + } + Frame { + msec: 2240 + hash: "6d7d427d5a15a31fd395f26c94ea455e" + } + Frame { + msec: 2256 + hash: "828949e0fbdb7c79719fb533febb5b35" + } + Frame { + msec: 2272 + hash: "7ef7f73ef6a59c9210cfa37df3894cb1" + } + Frame { + msec: 2288 + hash: "e74bec397b32ba2934ffdde23a3d60c6" + } + Frame { + msec: 2304 + hash: "09c2ca9c22e9b77bc166b4567b29bca7" + } + Frame { + msec: 2320 + hash: "44d87983f33c4e03f4be70b406bb9bd9" + } + Frame { + msec: 2336 + hash: "92844b36c2f30e618f04bfbc5cfbcad6" + } + Frame { + msec: 2352 + hash: "0245f39a8966c4addb3f8dbcee93cd3f" + } + Frame { + msec: 2368 + hash: "eb1e81cfa29295d4b1522c69d4501f51" + } + Frame { + msec: 2384 + hash: "2af9c3bea11b25c0f6c2b780d533a968" + } + Frame { + msec: 2400 + hash: "5062e9ab29c4a7a9657a4d29249ca822" + } + Frame { + msec: 2416 + hash: "d7652ddc85d3be3bb3a2fc268ae9bc29" + } + Frame { + msec: 2432 + hash: "7c924bf2ad6167db439723679b373a3a" + } + Frame { + msec: 2448 + hash: "a93b61dd26a2ca72100b747ac3ed81b6" + } + Frame { + msec: 2464 + hash: "5fedc849d3d21e0acf0ab4a4815a1285" + } + Frame { + msec: 2480 + hash: "4313d2458f4bede8d3b02ac60135e728" + } + Frame { + msec: 2496 + hash: "0f09e81d89262b569c56a9c876f3898d" + } + Frame { + msec: 2512 + hash: "ea932789ded14fc5c8bae565b67d004c" + } + Frame { + msec: 2528 + hash: "fd1f7b9b51f1284fee4d777ef83bba3f" + } + Frame { + msec: 2544 + hash: "e98b884a1ec8ce4b4dc20749b85b571e" + } + Frame { + msec: 2560 + hash: "d144072bb87bb88750b9df9cd92f7a4b" + } + Frame { + msec: 2576 + hash: "9d8ad80d3367292d7e89d67cf49862b8" + } + Frame { + msec: 2592 + hash: "c09b89e71e862da15d2b9edb0e00aa7b" + } + Frame { + msec: 2608 + hash: "551277add3f8f09951d9c8f55ccd40f7" + } + Frame { + msec: 2624 + hash: "1d0be0e7108516869374a9b985fd7543" + } + Frame { + msec: 2640 + hash: "12e7cfb6c4a26af54c4b35182294a7b7" + } + Frame { + msec: 2656 + hash: "a666a5a59d5854973668798eb8d508ba" + } + Frame { + msec: 2672 + hash: "420d2e21461dc45f134b7dfa11d04d25" + } + Frame { + msec: 2688 + hash: "95f848874899fb58a81c62b5921cf857" + } + Frame { + msec: 2704 + hash: "fa3ea7a0f90ca549cc9a857f0647b061" + } + Frame { + msec: 2720 + hash: "cbc5338de6157cd5dad511b246f5093b" + } + Frame { + msec: 2736 + hash: "e26b43c83197abab3746830bbfacc0f4" + } + Frame { + msec: 2752 + hash: "5225e854ff2763e562dee2810331d560" + } + Frame { + msec: 2768 + hash: "a1d114ea67233ac4c6351e18e3afa64e" + } + Frame { + msec: 2784 + hash: "bc9f12af2d0816bb84fd5040ed29bdad" + } + Frame { + msec: 2800 + hash: "d9337da38caa4ad3385249602a830df3" + } + Frame { + msec: 2816 + hash: "6ce20e0c89181b0f11e609b248da71d7" + } + Frame { + msec: 2832 + hash: "bbc8337950a78c7bfa48aab2635120a8" + } + Frame { + msec: 2848 + hash: "0e28ade7f52f3c27e1dbdd6e98be8c7d" + } + Frame { + msec: 2864 + hash: "0e28ade7f52f3c27e1dbdd6e98be8c7d" + } + Frame { + msec: 2880 + hash: "b496af17513d60d4028bd7402fbfba93" + } + Frame { + msec: 2896 + image: "follow.3.png" + } + Frame { + msec: 2912 + hash: "29aa7ce0fb1aa350753d3ec6da05bdf9" + } + Frame { + msec: 2928 + hash: "fde474797d8105d9d004a7020e010fa4" + } + Frame { + msec: 2944 + hash: "5a553d9a4bd2ef5d86f5eb37a863d28f" + } + Frame { + msec: 2960 + hash: "2dcbf6c84abd49529f0b5d85bfb74808" + } + Frame { + msec: 2976 + hash: "e96ec3b7d37bbf4c9ca297ad5afde31c" + } + Frame { + msec: 2992 + hash: "9d824068affe32c143226b0b530206fc" + } + Frame { + msec: 3008 + hash: "3e85f0ace68cffed47f4c9b00145f0f0" + } + Frame { + msec: 3024 + hash: "540b8e1e2bee7d2ba5e29fd3b1086cd1" + } + Frame { + msec: 3040 + hash: "0786585d11934c5e4a7e965eaac9a152" + } + Frame { + msec: 3056 + hash: "8271705df2ca697f4343007a7810d4ac" + } + Frame { + msec: 3072 + hash: "b98e1cd20ab2e4239f35d04df5e5175a" + } + Frame { + msec: 3088 + hash: "ab1a7eaa5c5d919ee76cba405d0dd4cd" + } + Frame { + msec: 3104 + hash: "52682386448379a395dc6c541224b7d4" + } + Frame { + msec: 3120 + hash: "31dffcb9da94dfc085ab8c561404c248" + } + Frame { + msec: 3136 + hash: "f3703eed8ebf9ece776ebe51e4c60ae6" + } + Frame { + msec: 3152 + hash: "1126b90345bb42691cd17f37ecec6bdb" + } + Frame { + msec: 3168 + hash: "7a63ab96d1c8d4992c03a6f59bba4e7e" + } + Frame { + msec: 3184 + hash: "91f4a00c9a7ea6164b334aa4b90da862" + } + Frame { + msec: 3200 + hash: "485471140f6a5336837377612e7a85bf" + } + Frame { + msec: 3216 + hash: "96881b4021aff05020e0a9342fbae75d" + } + Frame { + msec: 3232 + hash: "9891326646c3da4ff250aab69c862f96" + } + Frame { + msec: 3248 + hash: "f00f36bbb5a828824c596ee6f85bec2f" + } + Frame { + msec: 3264 + hash: "f00f36bbb5a828824c596ee6f85bec2f" + } + Frame { + msec: 3280 + hash: "f00f36bbb5a828824c596ee6f85bec2f" + } + Frame { + msec: 3296 + hash: "f00f36bbb5a828824c596ee6f85bec2f" + } + Frame { + msec: 3312 + hash: "9891326646c3da4ff250aab69c862f96" + } + Frame { + msec: 3328 + hash: "c766238db55f4704c2f29a6be6ee6907" + } + Frame { + msec: 3344 + hash: "0254665427dcbd1c155bc954cc7aa7cd" + } + Frame { + msec: 3360 + hash: "33ae1012816b997ef5c61c03ccfcc590" + } + Frame { + msec: 3376 + hash: "4c7857bbbcb9aa812fc2503af2b395cf" + } + Frame { + msec: 3392 + hash: "3a570e4af992d35e55923cea23c3c11b" + } + Frame { + msec: 3408 + hash: "533ef554538005512ce37c73c6def722" + } + Frame { + msec: 3424 + hash: "f863fa215d0642708bfa82780c766dc4" + } + Frame { + msec: 3440 + hash: "fcca3ec34521c4b9087a102ba1e47293" + } + Frame { + msec: 3456 + hash: "47d67cd74cb96b12801842b288a8b9ff" + } + Frame { + msec: 3472 + hash: "34c5ea76f297ec68cba70521caa468e4" + } + Frame { + msec: 3488 + hash: "7be247cc7a4032ff0478fca1a2aace8a" + } + Frame { + msec: 3504 + hash: "3ade2a1a48edef15f522b9fc016e137e" + } + Frame { + msec: 3520 + hash: "8b37b9d123504931d82bb06f6981bade" + } + Frame { + msec: 3536 + hash: "5eb39825003f405f353f629e236b3395" + } + Frame { + msec: 3552 + hash: "c4550722260c4a30ab1176c7e5cb62bf" + } + Frame { + msec: 3568 + hash: "bd33e3ecd4b59cd659588c0298b61095" + } + Frame { + msec: 3584 + hash: "4b3a62bff0019df7412aa2e1c07c0a23" + } + Frame { + msec: 3600 + hash: "a9b98adcc3350febbb89dbf725b81436" + } + Frame { + msec: 3616 + hash: "66eb8c84e75141d1575caf7d3cbc1ceb" + } + Frame { + msec: 3632 + hash: "238f2b1dc5bf5b65e827c860f9ee76b5" + } + Frame { + msec: 3648 + hash: "6d1fed0697370b2a2163c369fe559739" + } + Frame { + msec: 3664 + hash: "04ea478c785586d900bbe3472371bbc7" + } + Frame { + msec: 3680 + hash: "ba429e711c9363eebfb20e641fa44c84" + } + Frame { + msec: 3696 + hash: "0129dfba166ffcbaa15087467c864068" + } + Frame { + msec: 3712 + hash: "3fb340c874eee94e8baa1453b37c3fb5" + } + Frame { + msec: 3728 + hash: "068c51d99c458f3edefe3371f46de260" + } + Frame { + msec: 3744 + hash: "dd1e04ed3d610c2712158d73ee2c5b9d" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 195; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "840154afb9e7e0c859c66667bb6944b6" + } + Frame { + msec: 3776 + hash: "239c2e33800e386b468a95341d0e23f4" + } + Frame { + msec: 3792 + hash: "0a00515f2d297362862c1a5cf6519845" + } + Frame { + msec: 3808 + hash: "f855df3495e44291aed8f085163c804b" + } + Frame { + msec: 3824 + hash: "b4eb31e48c65550bb78d175b48e0e9fb" + } + Frame { + msec: 3840 + hash: "70243664f9db83614e5972fc18ee81a1" + } + Frame { + msec: 3856 + image: "follow.4.png" + } + Frame { + msec: 3872 + hash: "c48ce2a4cf28ab706b9c097bddc74c27" + } + Frame { + msec: 3888 + hash: "754a957e0df02839dd2fe33fefb7a721" + } + Frame { + msec: 3904 + hash: "ec3ebe7b941af9bf2163634d7f15e8aa" + } + Frame { + msec: 3920 + hash: "a76423ff2184cd9dac47abf7ae52ce5a" + } + Frame { + msec: 3936 + hash: "559bec54f51c36c6e90004ca5e77c23c" + } + Frame { + msec: 3952 + hash: "dc6fdd6a867a675afcb58f7052605614" + } + Frame { + msec: 3968 + hash: "b2fb0dbbec01490243f37fe5f80ab6c7" + } + Frame { + msec: 3984 + hash: "2bc1df7a913b1948ee7bb77eeaa55aa2" + } + Frame { + msec: 4000 + hash: "82c6430d85c6a94c4b55a9529d2bc78f" + } + Frame { + msec: 4016 + hash: "463e70dc9a9bdabdc158199bdcd7d2fa" + } + Frame { + msec: 4032 + hash: "c1e9553327f060b70caa713bf3015342" + } + Frame { + msec: 4048 + hash: "42f7f505d4e5ef316240e4f287a039bf" + } + Frame { + msec: 4064 + hash: "200500f600ffe43c5ad4d057bcfc0831" + } + Frame { + msec: 4080 + hash: "22e78edb813f7830776b2603b0aaae5c" + } + Frame { + msec: 4096 + hash: "32ebf3490832fd0693b1b922b4501251" + } + Frame { + msec: 4112 + hash: "1be622caa5ef94f87e2ec8297b6e1caa" + } + Frame { + msec: 4128 + hash: "d1480529e0cb94c51c412109663e5fab" + } + Frame { + msec: 4144 + hash: "e55e627d6d13b647f35233f18f0cbe89" + } + Frame { + msec: 4160 + hash: "87d7b349cd2898de7686e5f1a14f6338" + } + Frame { + msec: 4176 + hash: "2ac974836ee5e6092b55fcda20d7c35d" + } + Frame { + msec: 4192 + hash: "53867256c1dac4de2f02af1ae000b49f" + } + Frame { + msec: 4208 + hash: "08623509e9e5089fdaa1af2bf9a77eb1" + } + Frame { + msec: 4224 + hash: "e4692f42c12593ee865048aef00cbeb2" + } + Frame { + msec: 4240 + hash: "981ad6459e3e7483bb323ab4bc514630" + } + Frame { + msec: 4256 + hash: "79e8adfcdc9d6dae0d2b6a69e8e322fa" + } + Frame { + msec: 4272 + hash: "58f967a607972faa9daa13402eeb9912" + } + Frame { + msec: 4288 + hash: "1fd5b002b049132565b6a963fb7b3bb6" + } + Frame { + msec: 4304 + hash: "a16c96598f47404ec5f4ef55e87a1e70" + } + Frame { + msec: 4320 + hash: "3c632899804812c93c7edd3e3f3d2bac" + } + Frame { + msec: 4336 + hash: "af0eb810e0273f9bacb082d9f90612df" + } + Frame { + msec: 4352 + hash: "728d7ac4a5410482c7d86d03c2d8a996" + } + Frame { + msec: 4368 + hash: "416e76064f2be71a03eddddf61a33cb0" + } + Frame { + msec: 4384 + hash: "c41f20b4ac9a7b34eefd066f77ea351a" + } + Frame { + msec: 4400 + hash: "821d51db415a210b09ebdf8d861aadf2" + } + Frame { + msec: 4416 + hash: "9394266815a52f1779858bb088d557dc" + } + Frame { + msec: 4432 + hash: "cc475d1589665414e5aef051ec237ef4" + } + Frame { + msec: 4448 + hash: "a95f3b8128faa7820f36391fa9bd579f" + } + Frame { + msec: 4464 + hash: "d52687293a11891c364de52525039203" + } + Frame { + msec: 4480 + hash: "5333dc4f65b2f1e066edcd23f7621bd7" + } + Frame { + msec: 4496 + hash: "797bb5e27b2fe2b733a54402433901b4" + } + Frame { + msec: 4512 + hash: "84c610cdff7f8b04a34977216e37847d" + } + Frame { + msec: 4528 + hash: "0317f0406a566b2851c8bda62900e40c" + } + Frame { + msec: 4544 + hash: "6538ecd7abd35234c5cc5c2a17249fc1" + } + Frame { + msec: 4560 + hash: "f9019150a132eb5f5cfafcd5337aff7a" + } + Frame { + msec: 4576 + hash: "0f0136fffbc65c02cee249ece4c8c0ef" + } + Frame { + msec: 4592 + hash: "0027e0d236b8b33a451a0cc35e81b4ce" + } + Frame { + msec: 4608 + hash: "ac2f86b2d4f29f223fb78440d67ccd31" + } + Frame { + msec: 4624 + hash: "a6eb112a10c849e337f816ee408f22a6" + } + Frame { + msec: 4640 + hash: "dafbb01f2615a2513310478ebe484a05" + } + Frame { + msec: 4656 + hash: "17c400c4c29652dc278980ab578b75b3" + } + Frame { + msec: 4672 + hash: "48696c02a2a4839b893a4c0b431b78a3" + } + Frame { + msec: 4688 + hash: "04e05c7e722e53299d24cd0f1b7d17ee" + } + Frame { + msec: 4704 + hash: "55d158f13ffc7ccde5ee368656d2830b" + } + Frame { + msec: 4720 + hash: "fa478e1575acedae023322a520171a5b" + } + Frame { + msec: 4736 + hash: "e2147ddd6e19fde80bb76da24011400c" + } + Frame { + msec: 4752 + hash: "44ee0144db4c55aa90d2a931d83a895e" + } + Frame { + msec: 4768 + hash: "552e87bbce4ad48006c899052a2c8cad" + } + Frame { + msec: 4784 + hash: "3b6efe225303566f751c3f884ac8c069" + } + Frame { + msec: 4800 + hash: "3a7175916d1dc103506061607b910550" + } + Frame { + msec: 4816 + image: "follow.5.png" + } + Frame { + msec: 4832 + hash: "b2e5d5c14b02a13bca62673f87e85627" + } + Frame { + msec: 4848 + hash: "bd89a911d6fb13e4e841f8ee5b8b42af" + } + Frame { + msec: 4864 + hash: "89795784185e83d0299e656f2eec73c8" + } + Frame { + msec: 4880 + hash: "5b6d6fe78f341bdf0eb4bedfe3d975d0" + } + Frame { + msec: 4896 + hash: "e246bc451ee48e16ef6dee20d6256e9c" + } + Frame { + msec: 4912 + hash: "8c1bc37b1b268743aa314247ea949ef5" + } + Frame { + msec: 4928 + hash: "04f34203c34dc87efc708bfb232663df" + } + Frame { + msec: 4944 + hash: "d37a48545e81970d16951e3388f0ff8c" + } + Frame { + msec: 4960 + hash: "9411e846c9f59cc915288efb59d4c9de" + } + Frame { + msec: 4976 + hash: "6ee179741ac74837708afb55943f15bd" + } + Frame { + msec: 4992 + hash: "f626fc3166bd5b01171271ae9bfa9b22" + } + Frame { + msec: 5008 + hash: "e22898b2c0c566bbf531223234f98327" + } + Frame { + msec: 5024 + hash: "1343d90c5eae70713cd49110fe61237b" + } + Frame { + msec: 5040 + hash: "493d9322da6d01979a3f1a120c265f8c" + } + Frame { + msec: 5056 + hash: "defccc76caf3a7c7c67e8abf5ccc2def" + } + Frame { + msec: 5072 + hash: "fe3cad9227fcfa7ba2238465078f2ac7" + } + Frame { + msec: 5088 + hash: "66ebfeee3a63323c7d8b949db9aafd7e" + } + Frame { + msec: 5104 + hash: "805820b382d005894f9a615004b97b0d" + } + Frame { + msec: 5120 + hash: "eee1620f47bb071de8a9c788d1fd258e" + } + Frame { + msec: 5136 + hash: "f5a7d9a81fcfc8cfb9e7cc8ead0f1ff8" + } + Frame { + msec: 5152 + hash: "249903ee123090b27019350f120c8b79" + } + Frame { + msec: 5168 + hash: "019793a363c905809af32bf34ef52ec0" + } + Frame { + msec: 5184 + hash: "4f5ad5a3ebb6eca73dd7567199d07b08" + } + Frame { + msec: 5200 + hash: "fdc1b42d50c7a5c45458498788ff0abd" + } + Frame { + msec: 5216 + hash: "cc091469598cad28d0a00690f1acb412" + } + Frame { + msec: 5232 + hash: "5c8757e1f8f34a31d8b3717b64b84c07" + } + Frame { + msec: 5248 + hash: "5da75559f60eac1b9f518ed55a174e5b" + } + Frame { + msec: 5264 + hash: "1214c08daec4dcfb27690fdc18f2ac28" + } + Frame { + msec: 5280 + hash: "87d92c1ba694d0cf187d8616b0f622f0" + } + Frame { + msec: 5296 + hash: "d4af63638fe69b6c4f087a935351057e" + } + Frame { + msec: 5312 + hash: "0573c41f34c2c117cada987e4ee813a5" + } + Frame { + msec: 5328 + hash: "f179ef4b7bf0f915e25ffd8168a9126f" + } + Frame { + msec: 5344 + hash: "1618bf7c94e7898392eb5ffbf44b8aff" + } + Frame { + msec: 5360 + hash: "5af24b902e3729d544f70c77e189b8a7" + } + Frame { + msec: 5376 + hash: "4e5789404e58113cc2d8aa737a03ab58" + } + Frame { + msec: 5392 + hash: "e4bf91a249e47597e959bbaf25f0724d" + } + Frame { + msec: 5408 + hash: "39a3e3d6269522ed57a0e37319ab94d5" + } + Frame { + msec: 5424 + hash: "f2e2e47922e7e058e14537a0455cd77f" + } + Frame { + msec: 5440 + hash: "64abb3f2c9e05fd1dd7490d11c74f06a" + } + Frame { + msec: 5456 + hash: "a9bf45c29536ca34c42aa916747b485b" + } + Frame { + msec: 5472 + hash: "da21839b6635e5c4e0a589d163e62752" + } + Frame { + msec: 5488 + hash: "f31e49258bcbb2a144daa320e4567df1" + } + Frame { + msec: 5504 + hash: "f96c5b39f94bf2ac1e3f4de96767d720" + } + Frame { + msec: 5520 + hash: "281b90d1056803093cc37f30465f0e73" + } + Frame { + msec: 5536 + hash: "d63a2424e1947328957ad8f5f0bec043" + } + Frame { + msec: 5552 + hash: "bd510a0de7df02b1b5741824b6f90944" + } + Frame { + msec: 5568 + hash: "47dc4e5ff91cb84c89dd0fc0459f75f2" + } + Frame { + msec: 5584 + hash: "4bc46b5e116dd30e1db4d4bb650ed6ed" + } + Frame { + msec: 5600 + hash: "c6964b89f1962f120028057d1c588694" + } + Frame { + msec: 5616 + hash: "39a77544a1c88b68cb63da9a8910a35e" + } + Frame { + msec: 5632 + hash: "bd8ac21d7a507a8e195437ccac254ecc" + } + Frame { + msec: 5648 + hash: "7b39b2667a8f8efae20ec8696e35dbc4" + } + Frame { + msec: 5664 + hash: "7b39b2667a8f8efae20ec8696e35dbc4" + } + Frame { + msec: 5680 + hash: "8628f4f24670d17965fec40a02e0196f" + } + Frame { + msec: 5696 + hash: "515903d9896a853cb18cc7b7c45c1cce" + } + Frame { + msec: 5712 + hash: "b7a3f70bedcb3f90a2e294b447e05f70" + } + Frame { + msec: 5728 + hash: "8e8b104ef82b1e219021aa38276f8b45" + } + Frame { + msec: 5744 + hash: "70abe79da860bebd2d17a8c7abb20b4e" + } + Frame { + msec: 5760 + hash: "d99af176fb6cf9d9cbcf7cf4286a165c" + } + Frame { + msec: 5776 + image: "follow.6.png" + } + Frame { + msec: 5792 + hash: "67809c7daad6716d0a664c52de9906ce" + } + Frame { + msec: 5808 + hash: "29a27fd59b7316ce305803482686ea58" + } + Frame { + msec: 5824 + hash: "25b9ca40d1d6208d026e5c965923f8fb" + } + Frame { + msec: 5840 + hash: "126b1542415aea11dbb35492be4f66aa" + } + Frame { + msec: 5856 + hash: "26ca7034536e0e690236797df740f19a" + } + Frame { + msec: 5872 + hash: "fec9db60af63a4712b0da037cf1d89cd" + } + Frame { + msec: 5888 + hash: "d9b7e2729c75ca0c0f33b542525c4880" + } + Frame { + msec: 5904 + hash: "89149d16b893ea432b6d0fb05ead48cb" + } + Frame { + msec: 5920 + hash: "8e389d2ca706277ce06e1da557e2e6c1" + } + Frame { + msec: 5936 + hash: "fc5c74473410da1ddd451c5901572172" + } + Frame { + msec: 5952 + hash: "54514970eadff9362d31499a737e4c95" + } + Frame { + msec: 5968 + hash: "d5953bc29532ec49c20ee552c8756ba1" + } + Frame { + msec: 5984 + hash: "5f03be3ed5824e6a6f8f371ce6a47997" + } + Frame { + msec: 6000 + hash: "0431e2ec4765167d0099c59df400f3fd" + } + Frame { + msec: 6016 + hash: "0431e2ec4765167d0099c59df400f3fd" + } + Frame { + msec: 6032 + hash: "403e1f235770f2b7c8b1b2e86aea69a5" + } + Frame { + msec: 6048 + hash: "403e1f235770f2b7c8b1b2e86aea69a5" + } + Frame { + msec: 6064 + hash: "32ff9f959598972f5a264418587dca1f" + } + Frame { + msec: 6080 + hash: "b4c7c07e52a684f7ce21e47a4d66356a" + } + Frame { + msec: 6096 + hash: "e0f214bed2c3a31f473952929b8f3ea9" + } + Frame { + msec: 6112 + hash: "15328b8a205965f3f29fc63a6a8ac8ed" + } + Frame { + msec: 6128 + hash: "72c46ed63633e6879373f4783df25d8b" + } + Frame { + msec: 6144 + hash: "3f2570289df823446f85bbd8d620db4d" + } + Frame { + msec: 6160 + hash: "df9451c6634d72e6f794e962b3591086" + } + Frame { + msec: 6176 + hash: "773e10bbd133e64457e7ddbc73a10fc2" + } + Frame { + msec: 6192 + hash: "c79abb97eb86761b69053d77156dffd4" + } + Frame { + msec: 6208 + hash: "d927934b19ffd55ea7cea1916983351a" + } + Frame { + msec: 6224 + hash: "ae5058d935c1e44d103be66921b19e77" + } + Frame { + msec: 6240 + hash: "b6a1446b6be054d5785ba52ac23f8aa8" + } + Frame { + msec: 6256 + hash: "3dffbffded44249fdbe58aecd24ab97f" + } + Frame { + msec: 6272 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6288 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6304 + hash: "257ce16f529b99f28beb2e57625f52ee" + } + Frame { + msec: 6320 + hash: "257ce16f529b99f28beb2e57625f52ee" + } + Frame { + msec: 6336 + hash: "257ce16f529b99f28beb2e57625f52ee" + } + Frame { + msec: 6352 + hash: "257ce16f529b99f28beb2e57625f52ee" + } + Frame { + msec: 6368 + hash: "257ce16f529b99f28beb2e57625f52ee" + } + Frame { + msec: 6384 + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" + } + Frame { + msec: 6400 + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" + } + Frame { + msec: 6416 + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" + } + Frame { + msec: 6432 + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" + } + Frame { + msec: 6448 + hash: "cb2b0ddbc7b8485fbf32a537e5a98d0e" + } + Frame { + msec: 6464 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6480 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6496 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6512 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6528 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6544 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6560 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6576 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6592 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6608 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6624 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6640 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6656 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6672 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6688 + hash: "fa87436d5e51122022a005d815f97c32" + } + Frame { + msec: 6704 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6720 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6736 + image: "follow.7.png" + } + Frame { + msec: 6752 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6768 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6784 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6800 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6816 + hash: "da52e87ccd157c0330c07e480b8b0c06" + } + Frame { + msec: 6832 + hash: "257ce16f529b99f28beb2e57625f52ee" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 6848 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6864 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6880 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6896 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6912 + hash: "56445ab8554a23a786b70e4fd9f40451" + } + Frame { + msec: 6928 + hash: "56445ab8554a23a786b70e4fd9f40451" + } +} diff --git a/tests/auto/declarative/qmlvisual/selftest_noimages/data/selftest_noimages.qml b/tests/auto/declarative/qmlvisual/selftest_noimages/data/selftest_noimages.qml index 70ee988..ccadea0 100644 --- a/tests/auto/declarative/qmlvisual/selftest_noimages/data/selftest_noimages.qml +++ b/tests/auto/declarative/qmlvisual/selftest_noimages/data/selftest_noimages.qml @@ -196,6 +196,14 @@ VisualTest { Frame { msec: 1024 } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 53; y: 47 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1040 } @@ -214,6 +222,14 @@ VisualTest { Frame { msec: 1120 } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 53; y: 47 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1136 } @@ -259,14 +275,6 @@ VisualTest { Frame { msec: 1360 } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 77; y: 7 - modifiers: 0 - sendToViewport: true - } Frame { msec: 1376 } @@ -282,14 +290,6 @@ VisualTest { Frame { msec: 1440 } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 77; y: 7 - modifiers: 0 - sendToViewport: true - } Frame { msec: 1456 } @@ -353,118 +353,4 @@ VisualTest { Frame { msec: 1776 } - Frame { - msec: 1792 - } - Frame { - msec: 1808 - } - Frame { - msec: 1824 - } - Frame { - msec: 1840 - } - Frame { - msec: 1856 - } - Frame { - msec: 1872 - } - Frame { - msec: 1888 - } - Frame { - msec: 1904 - } - Frame { - msec: 1920 - } - Frame { - msec: 1936 - } - Frame { - msec: 1952 - } - Frame { - msec: 1968 - } - Frame { - msec: 1984 - } - Frame { - msec: 2000 - } - Frame { - msec: 2016 - } - Frame { - msec: 2032 - } - Frame { - msec: 2048 - } - Frame { - msec: 2064 - } - Frame { - msec: 2080 - } - Frame { - msec: 2096 - } - Frame { - msec: 2112 - } - Frame { - msec: 2128 - } - Frame { - msec: 2144 - } - Frame { - msec: 2160 - } - Frame { - msec: 2176 - } - Frame { - msec: 2192 - } - Frame { - msec: 2208 - } - Frame { - msec: 2224 - } - Frame { - msec: 2240 - } - Frame { - msec: 2256 - } - Frame { - msec: 2272 - } - Frame { - msec: 2288 - } - Frame { - msec: 2304 - } - Frame { - msec: 2320 - } - Frame { - msec: 2336 - } - Frame { - msec: 2352 - } - Frame { - msec: 2368 - } - Frame { - msec: 2384 - } } -- cgit v0.12 From 077f0cc4ebcacd130a4710a4d510ace18b383fb0 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Wed, 5 Jan 2011 10:55:04 +0200 Subject: Added patch for temporary support for --listgen option in qmake The --listgen option is needed in qmake for Symbian platform builds to list the files generated by qmake. This patch enables qmake to recognize this option, but is not functional, just to allow builds to succeed. This patch is not applied to qmake directly, but only made available in the source tree for usage in the build setup. Reviewed-by: TrustMe --- .../symbian/patches/qmake_listgen.patch | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 config.profiles/symbian/patches/qmake_listgen.patch diff --git a/config.profiles/symbian/patches/qmake_listgen.patch b/config.profiles/symbian/patches/qmake_listgen.patch new file mode 100644 index 0000000..b6224ce --- /dev/null +++ b/config.profiles/symbian/patches/qmake_listgen.patch @@ -0,0 +1,47 @@ +commit b2d4d498faa3c532372838ffa287906fdafdc3c6 +Author: Eckhart Koppen +Date: Fri Nov 19 17:31:36 2010 +0200 + + Added -listgen option (not functional!) temporarily + +diff --git a/qmake/option.cpp b/qmake/option.cpp +index 27e7c18..1c52d0f 100644 +--- a/qmake/option.cpp ++++ b/qmake/option.cpp +@@ -112,6 +112,7 @@ QString Option::mkfile::qmakespec; + int Option::mkfile::cachefile_depth = -1; + bool Option::mkfile::do_deps = true; + bool Option::mkfile::do_mocs = true; ++bool Option::mkfile::listgen = false; + bool Option::mkfile::do_dep_heuristics = true; + bool Option::mkfile::do_preprocess = false; + bool Option::mkfile::do_stub_makefile = false; +@@ -198,6 +199,7 @@ bool usage(const char *a0) + " -nocache Don't use a cache file [makefile mode only]\n" + " -nodepend Don't generate dependencies [makefile mode only]\n" + " -nomoc Don't generate moc targets [makefile mode only]\n" ++ " -listgen Lists generated files [makefile mode only]\n" + " -nopwd Don't look for files in pwd [project mode only]\n" + ,a0, + default_mode(a0) == Option::QMAKE_GENERATE_PROJECT ? " (default)" : "", project_builtin_regx().toLatin1().constData(), +@@ -297,6 +299,8 @@ Option::parseCommandLine(int argc, char **argv, int skip) + Option::mkfile::do_deps = false; + } else if(opt == "nomoc") { + Option::mkfile::do_mocs = false; ++ } else if(opt == "listgen") { ++ Option::mkfile::listgen = true; + } else if(opt == "nocache") { + Option::mkfile::do_cache = false; + } else if(opt == "createstub") { +diff --git a/qmake/option.h b/qmake/option.h +index b09ead2..a46d7fb 100644 +--- a/qmake/option.h ++++ b/qmake/option.h +@@ -179,6 +179,7 @@ struct Option + static bool do_cache; + static bool do_deps; + static bool do_mocs; ++ static bool listgen; + static bool do_dep_heuristics; + static bool do_preprocess; + static bool do_stub_makefile; -- cgit v0.12 From 7a54885b1df9baf793374e3cb9fdf8be93ee7c80 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 4 Jan 2011 15:35:58 +0100 Subject: Fix regression in text rendering in OpenGL2 engine Change 532115bcaa370af827a5cbad017b272842c5aacf introduced a regression by fixing a typo in the QT_OPENGL_ES_2 macro. This caused a broken and untested code path to be used in the GLES2 case. Since the QImage scanlines are 32 bit aligned, QImage::width() cannot be used when copying the data. Rather than pass in bytesPerLine() to the GL function, I opted to revert to the proven behavior, where the pad bytes are never read by GL but each scanline is copied separately, to avoid further regressions on different hardware. This also seems like the more correct approach, as the pad bytes should ideally not be copied into the cache texture. Reviewed-by: Samuel --- src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 1b879c3..ad1bf31 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -293,9 +293,6 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) if (mask.format() == QImage::Format_RGB32) { glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_BGRA, GL_UNSIGNED_BYTE, mask.bits()); } else { -#ifdef QT_OPENGL_ES_2 - glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_ALPHA, GL_UNSIGNED_BYTE, mask.bits()); -#else // glTexSubImage2D() might cause some garbage to appear in the texture if the mask width is // not a multiple of four bytes. The bug appeared on a computer with 32-bit Windows Vista // and nVidia GeForce 8500GT. GL_UNPACK_ALIGNMENT is set to four bytes, 'mask' has a @@ -307,7 +304,6 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) for (int i = 0; i < maskHeight; ++i) glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, maskWidth, 1, GL_ALPHA, GL_UNSIGNED_BYTE, mask.scanLine(i)); -#endif } } -- cgit v0.12 From 17e6529f7ff18c6f47f1fcc35379addd78d7156e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 5 Jan 2011 12:14:38 +0100 Subject: Added warning if is included when GLEW is present. GLEW can not be used in combination with . Reviewed-by: Eskil Abrahamsen Blomfeldt --- dist/changes-4.8.0 | 2 ++ src/opengl/qglfunctions.h | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0 index c55faf6..fa50f24 100644 --- a/dist/changes-4.8.0 +++ b/dist/changes-4.8.0 @@ -51,6 +51,8 @@ QtGui - Removed dependency of OpenGL Utility Library (GLU) - Added QGLFunctions, which provides cross-platform access to the OpenGL/ES 2.0 API. + - Including will not work in combination with GLEW, as + QGLFunctions will undefine GLEW's defines. **************************************************************************** diff --git a/src/opengl/qglfunctions.h b/src/opengl/qglfunctions.h index e06de7f..88f43c0 100644 --- a/src/opengl/qglfunctions.h +++ b/src/opengl/qglfunctions.h @@ -42,6 +42,11 @@ #ifndef QGLFUNCTIONS_H #define QGLFUNCTIONS_H +#ifdef __GLEW_H__ +#warning qglfunctions.h is not compatible with GLEW, GLEW defines will be undefined +#warning To use GLEW with Qt, do not include or after glew.h +#endif + #include QT_BEGIN_HEADER -- cgit v0.12 From 4836d809f5dc3fc9e978ef630c0e5c8847c171a7 Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Wed, 5 Jan 2011 15:19:07 +0100 Subject: Add support for QMetaType::QVariant in ActiveQt Previously when we convert the typename "QVariant" to QVaraint::Type, it returns QVariant::Invalid. From Qt 4.7 onwards, it will return QVariant::UserType. Task-number: QTBUG-15157 Reviewed-by: Martin Petersson --- src/activeqt/container/qaxbase.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp index 7692749..c29eac6 100644 --- a/src/activeqt/container/qaxbase.cpp +++ b/src/activeqt/container/qaxbase.cpp @@ -1671,12 +1671,11 @@ private: QVariant::Type vartype = QVariant::nameToType(prop.type); switch(vartype) { case QVariant::Invalid: + case QVariant::UserType: if (prop.type == "QVariant") { prop.typeId |= 0xff << 24; break; } - // fall through - case QVariant::UserType: if (QMetaType::type(prop.type) == -1) qWarning("QAxBase: Unsupported property type: %s", prop.type.data()); break; -- cgit v0.12 From 0c07af230d016aab6e416ae57594189ab9953101 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Fri, 19 Nov 2010 15:24:35 +0100 Subject: cookie jar code: enhance security by keeping track of effective TLDs The problem was the following: According to the cookie RFC, domains must have at least one dot in their name for setting a cookie (e.g. domain example.com can set a cookie for ".example.com" but not for ".com"). The problem is: Following this rule, one could still set "supercookies" for e.g. ".co.uk". The solution is to generate a table from http://publicsuffix.org which maintains a list of all "effective" TLDs like e.g. ".co.uk". Reviewed-by: Olivier Goffart Task-number: QTBUG-14706 --- src/network/access/access.pri | 1 + src/network/access/qnetworkcookiejar.cpp | 63 +- src/network/access/qnetworkcookiejar_p.h | 3 + src/network/access/qnetworkcookiejartlds_p.h | 6479 ++++++++++++++++++++ src/network/access/qnetworkcookiejartlds_p.h.INFO | 17 + .../qnetworkcookiejar/tst_qnetworkcookiejar.cpp | 104 + .../cookiejar-generateTLDs.pro | 9 + util/network/cookiejar-generateTLDs/main.cpp | 161 + 8 files changed, 6825 insertions(+), 12 deletions(-) create mode 100644 src/network/access/qnetworkcookiejartlds_p.h create mode 100644 src/network/access/qnetworkcookiejartlds_p.h.INFO create mode 100644 util/network/cookiejar-generateTLDs/cookiejar-generateTLDs.pro create mode 100644 util/network/cookiejar-generateTLDs/main.cpp diff --git a/src/network/access/access.pri b/src/network/access/access.pri index 6a0cd32..ce79b06 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -23,6 +23,7 @@ HEADERS += \ access/qnetworkcookie_p.h \ access/qnetworkcookiejar.h \ access/qnetworkcookiejar_p.h \ + access/qnetworkcookiejartlds_p.h \ access/qnetworkrequest.h \ access/qnetworkrequest_p.h \ access/qnetworkreply.h \ diff --git a/src/network/access/qnetworkcookiejar.cpp b/src/network/access/qnetworkcookiejar.cpp index 0b3a918..9cbeafe 100644 --- a/src/network/access/qnetworkcookiejar.cpp +++ b/src/network/access/qnetworkcookiejar.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qnetworkcookiejar.h" +#include "qnetworkcookiejartlds_p.h" #include "qnetworkcookiejar_p.h" #include "QtNetwork/qnetworkcookie.h" @@ -157,7 +158,8 @@ static inline bool isParentDomain(QString domain, QString reference) jar. Default values for path and domain are taken from the \a url object. - Returns true if one or more cookes are set for url otherwise false. + Returns true if one or more cookies are set for \a url, + otherwise false. If a cookie already exists in the cookie jar, it will be overridden by those in \a cookieList. @@ -208,16 +210,14 @@ bool QNetworkCookieJar::setCookiesFromUrl(const QList &cookieLis QString domain = cookie.domain(); if (!(isParentDomain(domain, defaultDomain) - || isParentDomain(defaultDomain, domain))) { - continue; // not accepted - } - - // reject if domain is like ".com" - // (i.e., reject if domain does not contain embedded dots, see RFC 2109 section 4.3.2) - // this is just a rudimentary check and does not cover all cases - if (domain.lastIndexOf(QLatin1Char('.')) == 0) - continue; // not accepted - + || isParentDomain(defaultDomain, domain))) + continue; // not accepted + + // the check for effective TLDs makes the "embedded dot" rule from RFC 2109 section 4.3.2 + // redundant; the "leading dot" rule has been relaxed anyway, see above + // we remove the leading dot for this check + if (QNetworkCookieJarPrivate::isEffectiveTLD(domain.remove(0, 1))) + continue; // not accepted } QList::Iterator it = d->allCookies.begin(), @@ -250,7 +250,7 @@ bool QNetworkCookieJar::setCookiesFromUrl(const QList &cookieLis If more than one cookie with the same name is found, but with differing paths, the one with longer path is returned before the one with shorter path. In other words, this function returns - cookies sorted by path length. + cookies sorted decreasingly by path length. The default QNetworkCookieJar class implements only a very basic security policy (it makes sure that the cookies' domain and path @@ -304,4 +304,43 @@ QList QNetworkCookieJar::cookiesForUrl(const QUrl &url) const return result; } +bool QNetworkCookieJarPrivate::isEffectiveTLD(const QString &domain) +{ + // for domain 'foo.bar.com': + // 1. return if TLD table contains 'foo.bar.com' + if (containsTLDEntry(domain)) + return true; + + if (domain.contains(QLatin1Char('.'))) { + int count = domain.size() - domain.indexOf(QLatin1Char('.')); + QString wildCardDomain; + wildCardDomain.reserve(count + 1); + wildCardDomain.append(QLatin1Char('*')); + wildCardDomain.append(domain.right(count)); + // 2. if table contains '*.bar.com', + // test if table contains '!foo.bar.com' + if (containsTLDEntry(wildCardDomain)) { + QString exceptionDomain; + exceptionDomain.reserve(domain.size() + 1); + exceptionDomain.append(QLatin1Char('!')); + exceptionDomain.append(domain); + return (! containsTLDEntry(exceptionDomain)); + } + } + return false; +} + +bool QNetworkCookieJarPrivate::containsTLDEntry(const QString &entry) +{ + int index = qHash(entry) % tldCount; + int currentDomainIndex = tldIndices[index]; + while (currentDomainIndex < tldIndices[index+1]) { + QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex); + if (currentEntry == entry) + return true; + currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0 + } + return false; +} + QT_END_NAMESPACE diff --git a/src/network/access/qnetworkcookiejar_p.h b/src/network/access/qnetworkcookiejar_p.h index 5802115..74870be 100644 --- a/src/network/access/qnetworkcookiejar_p.h +++ b/src/network/access/qnetworkcookiejar_p.h @@ -63,6 +63,9 @@ class QNetworkCookieJarPrivate: public QObjectPrivate public: QList allCookies; + static bool Q_AUTOTEST_EXPORT isEffectiveTLD(const QString &domain); + static bool containsTLDEntry(const QString &entry); + Q_DECLARE_PUBLIC(QNetworkCookieJar) }; diff --git a/src/network/access/qnetworkcookiejartlds_p.h b/src/network/access/qnetworkcookiejartlds_p.h new file mode 100644 index 0000000..fc1c75f --- /dev/null +++ b/src/network/access/qnetworkcookiejartlds_p.h @@ -0,0 +1,6479 @@ +// Version: MPL 1.1/GPL 2.0/LGPL 2.1 +// +// The contents of this file are subject to the Mozilla Public License Version +// 1.1 (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the +// License. +// +// The Original Code is the Public Suffix List. +// +// The Initial Developer of the Original Code is +// Jo Hermans . +// Portions created by the Initial Developer are Copyright (C) 2007 +// the Initial Developer. All Rights Reserved. +// +// Contributor(s): +// Ruben Arakelyan +// Gervase Markham +// Pamela Greene +// David Triendl +// Jothan Frakes +// The kind representatives of many TLD registries +// +// Alternatively, the contents of this file may be used under the terms of +// either the GNU General Public License Version 2 or later (the "GPL"), or +// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +// in which case the provisions of the GPL or the LGPL are applicable instead +// of those above. If you wish to allow use of your version of this file only +// under the terms of either the GPL or the LGPL, and not to allow others to +// use your version of this file under the terms of the MPL, indicate your +// decision by deleting the provisions above and replace them with the notice +// and other provisions required by the GPL or the LGPL. If you do not delete +// the provisions above, a recipient may use your version of this file under +// the terms of any one of the MPL, the GPL or the LGPL. +// + +#ifndef QNETWORKCOOKIEJARTLD_P_H +#define QNETWORKCOOKIEJARTLD_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the Network Access framework. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +// note to maintainer: +// this file should be updated before each release -> +// for instructions see the program at +// util/network/cookiejar-generateTLDs + +static const quint16 tldCount = 3949; +static const quint16 tldIndices[] = { +0, +7, +14, +14, +20, +51, +61, +93, +100, +100, +116, +159, +167, +180, +180, +193, +234, +234, +234, +255, +255, +255, +280, +280, +287, +287, +295, +303, +313, +326, +326, +380, +393, +413, +419, +419, +419, +424, +438, +438, +469, +515, +515, +515, +534, +534, +557, +557, +557, +557, +572, +572, +572, +579, +587, +597, +612, +612, +624, +636, +648, +662, +687, +709, +714, +740, +766, +789, +789, +805, +805, +810, +815, +815, +824, +824, +831, +857, +869, +891, +891, +916, +916, +916, +927, +934, +964, +971, +987, +987, +987, +1008, +1008, +1016, +1016, +1030, +1030, +1052, +1075, +1075, +1082, +1087, +1115, +1135, +1135, +1135, +1172, +1178, +1178, +1178, +1202, +1207, +1220, +1220, +1266, +1266, +1266, +1266, +1272, +1290, +1316, +1316, +1332, +1332, +1339, +1339, +1352, +1352, +1389, +1389, +1408, +1415, +1437, +1444, +1489, +1489, +1502, +1502, +1512, +1518, +1539, +1555, +1562, +1584, +1598, +1607, +1607, +1607, +1632, +1652, +1652, +1658, +1658, +1675, +1682, +1709, +1733, +1748, +1776, +1783, +1783, +1790, +1797, +1826, +1850, +1850, +1856, +1880, +1887, +1901, +1921, +1947, +1961, +1967, +1967, +1967, +1972, +1986, +1986, +1986, +2009, +2029, +2029, +2047, +2061, +2075, +2075, +2075, +2075, +2075, +2075, +2082, +2082, +2124, +2124, +2129, +2162, +2162, +2162, +2236, +2256, +2263, +2276, +2283, +2313, +2313, +2347, +2380, +2387, +2387, +2387, +2431, +2438, +2445, +2452, +2459, +2459, +2469, +2490, +2516, +2527, +2540, +2540, +2586, +2610, +2630, +2630, +2653, +2660, +2669, +2693, +2693, +2710, +2710, +2719, +2719, +2734, +2740, +2740, +2753, +2753, +2763, +2770, +2775, +2782, +2789, +2802, +2820, +2827, +2827, +2841, +2855, +2855, +2865, +2872, +2884, +2884, +2919, +2937, +2955, +2962, +3012, +3042, +3073, +3083, +3083, +3100, +3105, +3112, +3131, +3131, +3166, +3180, +3187, +3194, +3211, +3218, +3223, +3233, +3249, +3259, +3268, +3314, +3314, +3324, +3324, +3336, +3336, +3336, +3336, +3350, +3363, +3376, +3398, +3416, +3445, +3464, +3488, +3488, +3497, +3545, +3552, +3552, +3552, +3566, +3573, +3573, +3573, +3581, +3581, +3603, +3603, +3615, +3621, +3621, +3683, +3683, +3710, +3710, +3716, +3716, +3748, +3770, +3791, +3803, +3810, +3817, +3833, +3846, +3846, +3852, +3876, +3876, +3882, +3903, +3910, +3939, +3939, +3939, +3947, +3962, +3962, +3981, +3994, +4021, +4030, +4042, +4085, +4085, +4096, +4096, +4104, +4123, +4123, +4123, +4143, +4154, +4164, +4194, +4194, +4194, +4205, +4205, +4222, +4238, +4301, +4309, +4322, +4331, +4331, +4331, +4331, +4331, +4347, +4365, +4375, +4375, +4385, +4398, +4412, +4430, +4430, +4437, +4447, +4463, +4472, +4472, +4472, +4484, +4484, +4484, +4484, +4484, +4490, +4490, +4511, +4511, +4522, +4522, +4522, +4522, +4528, +4528, +4534, +4551, +4551, +4551, +4564, +4583, +4583, +4611, +4611, +4611, +4622, +4622, +4649, +4668, +4677, +4692, +4692, +4692, +4705, +4723, +4723, +4723, +4729, +4729, +4743, +4743, +4750, +4750, +4763, +4770, +4776, +4776, +4776, +4793, +4811, +4811, +4811, +4821, +4821, +4841, +4857, +4891, +4897, +4903, +4903, +4903, +4919, +4935, +4942, +4958, +4958, +4975, +4975, +4975, +4985, +4985, +5020, +5032, +5032, +5040, +5053, +5068, +5079, +5079, +5101, +5115, +5115, +5135, +5154, +5161, +5161, +5168, +5168, +5184, +5210, +5210, +5238, +5255, +5278, +5285, +5308, +5318, +5327, +5327, +5333, +5333, +5340, +5348, +5355, +5366, +5377, +5384, +5408, +5415, +5422, +5435, +5442, +5482, +5482, +5482, +5482, +5498, +5527, +5534, +5541, +5572, +5572, +5572, +5579, +5591, +5602, +5602, +5621, +5621, +5646, +5664, +5671, +5671, +5681, +5696, +5707, +5716, +5716, +5723, +5723, +5732, +5742, +5742, +5763, +5770, +5776, +5790, +5790, +5797, +5806, +5816, +5832, +5882, +5882, +5882, +5882, +5893, +5934, +5934, +5965, +5965, +5980, +5980, +5980, +5980, +6007, +6017, +6034, +6051, +6065, +6075, +6075, +6091, +6097, +6097, +6109, +6109, +6109, +6122, +6147, +6168, +6168, +6191, +6191, +6191, +6191, +6191, +6198, +6217, +6224, +6224, +6231, +6245, +6252, +6252, +6270, +6270, +6284, +6305, +6315, +6322, +6322, +6322, +6329, +6329, +6329, +6353, +6361, +6361, +6375, +6391, +6405, +6405, +6415, +6431, +6431, +6431, +6431, +6458, +6475, +6475, +6475, +6482, +6489, +6496, +6496, +6503, +6520, +6520, +6520, +6527, +6527, +6544, +6561, +6573, +6573, +6580, +6580, +6587, +6587, +6592, +6592, +6592, +6592, +6599, +6599, +6612, +6633, +6649, +6649, +6669, +6676, +6683, +6683, +6713, +6720, +6727, +6736, +6736, +6746, +6770, +6807, +6814, +6827, +6846, +6846, +6864, +6864, +6864, +6864, +6881, +6888, +6888, +6888, +6914, +6935, +6935, +6935, +6953, +6959, +6966, +6983, +6983, +6983, +7013, +7023, +7023, +7023, +7023, +7037, +7044, +7058, +7079, +7086, +7123, +7134, +7155, +7168, +7178, +7203, +7227, +7236, +7258, +7265, +7274, +7274, +7303, +7303, +7314, +7314, +7345, +7352, +7367, +7377, +7388, +7388, +7402, +7402, +7409, +7421, +7421, +7467, +7484, +7484, +7484, +7491, +7532, +7532, +7539, +7546, +7546, +7553, +7573, +7573, +7573, +7580, +7587, +7594, +7594, +7594, +7606, +7606, +7637, +7637, +7637, +7664, +7664, +7664, +7677, +7684, +7701, +7723, +7723, +7723, +7723, +7734, +7734, +7734, +7748, +7748, +7748, +7748, +7759, +7759, +7775, +7775, +7782, +7789, +7817, +7824, +7831, +7836, +7865, +7865, +7876, +7901, +7901, +7908, +7918, +7938, +7945, +7945, +7957, +7964, +7979, +7986, +7994, +8007, +8007, +8014, +8021, +8061, +8061, +8071, +8088, +8131, +8138, +8153, +8160, +8160, +8160, +8175, +8183, +8197, +8211, +8211, +8211, +8243, +8243, +8243, +8243, +8259, +8259, +8259, +8259, +8259, +8266, +8275, +8281, +8281, +8281, +8281, +8288, +8288, +8309, +8309, +8309, +8330, +8330, +8330, +8330, +8337, +8343, +8343, +8360, +8370, +8370, +8380, +8380, +8386, +8386, +8397, +8415, +8415, +8428, +8454, +8460, +8475, +8492, +8526, +8554, +8554, +8583, +8583, +8583, +8598, +8607, +8617, +8617, +8642, +8652, +8652, +8652, +8662, +8688, +8688, +8704, +8704, +8747, +8765, +8775, +8783, +8811, +8835, +8835, +8835, +8850, +8859, +8884, +8910, +8919, +8952, +8978, +8978, +8991, +8991, +8991, +8999, +8999, +8999, +9030, +9030, +9030, +9030, +9030, +9041, +9048, +9048, +9054, +9054, +9054, +9086, +9108, +9108, +9119, +9119, +9130, +9144, +9152, +9161, +9174, +9194, +9207, +9207, +9207, +9232, +9242, +9242, +9271, +9290, +9308, +9308, +9308, +9308, +9320, +9333, +9343, +9356, +9379, +9379, +9379, +9395, +9395, +9406, +9419, +9419, +9419, +9419, +9450, +9485, +9485, +9497, +9497, +9505, +9517, +9528, +9528, +9551, +9564, +9586, +9586, +9608, +9608, +9626, +9626, +9626, +9653, +9653, +9681, +9681, +9681, +9698, +9698, +9698, +9714, +9729, +9737, +9737, +9765, +9765, +9765, +9765, +9765, +9825, +9844, +9866, +9880, +9880, +9880, +9880, +9886, +9895, +9895, +9895, +9895, +9895, +9913, +9913, +9924, +9958, +9958, +9967, +9975, +9975, +9975, +9981, +9998, +9998, +9998, +10012, +10036, +10036, +10066, +10079, +10097, +10121, +10133, +10142, +10142, +10142, +10156, +10173, +10173, +10173, +10196, +10205, +10205, +10205, +10205, +10218, +10234, +10240, +10240, +10240, +10264, +10273, +10286, +10286, +10286, +10286, +10299, +10299, +10309, +10309, +10339, +10358, +10358, +10374, +10374, +10390, +10390, +10413, +10413, +10439, +10461, +10467, +10467, +10467, +10492, +10492, +10501, +10528, +10528, +10528, +10539, +10583, +10583, +10583, +10613, +10613, +10619, +10628, +10645, +10645, +10645, +10650, +10671, +10687, +10709, +10709, +10709, +10709, +10709, +10727, +10727, +10727, +10727, +10733, +10733, +10768, +10768, +10773, +10780, +10788, +10788, +10797, +10797, +10835, +10835, +10845, +10852, +10861, +10861, +10861, +10861, +10861, +10861, +10861, +10875, +10888, +10907, +10907, +10907, +10920, +10920, +10932, +10946, +10977, +10977, +10997, +11008, +11037, +11059, +11059, +11059, +11067, +11067, +11067, +11067, +11067, +11077, +11091, +11102, +11102, +11112, +11125, +11129, +11129, +11154, +11154, +11154, +11164, +11164, +11189, +11189, +11189, +11189, +11189, +11196, +11196, +11227, +11238, +11247, +11256, +11265, +11265, +11286, +11307, +11330, +11337, +11378, +11378, +11389, +11413, +11454, +11469, +11475, +11475, +11475, +11475, +11503, +11503, +11503, +11503, +11534, +11534, +11550, +11550, +11557, +11557, +11557, +11557, +11574, +11585, +11585, +11603, +11626, +11643, +11643, +11643, +11643, +11663, +11663, +11682, +11696, +11696, +11696, +11696, +11706, +11706, +11706, +11706, +11723, +11723, +11757, +11757, +11773, +11795, +11813, +11836, +11836, +11883, +11903, +11952, +11965, +11965, +11984, +11997, +12008, +12008, +12008, +12024, +12043, +12065, +12071, +12099, +12129, +12140, +12140, +12146, +12161, +12161, +12161, +12161, +12167, +12167, +12180, +12186, +12208, +12226, +12243, +12243, +12252, +12252, +12274, +12289, +12302, +12302, +12313, +12313, +12313, +12313, +12358, +12358, +12358, +12369, +12375, +12391, +12391, +12391, +12391, +12405, +12410, +12416, +12416, +12436, +12436, +12436, +12443, +12443, +12462, +12477, +12492, +12492, +12503, +12519, +12525, +12531, +12571, +12571, +12591, +12591, +12601, +12641, +12641, +12641, +12657, +12657, +12657, +12699, +12699, +12699, +12712, +12728, +12744, +12761, +12769, +12782, +12793, +12823, +12836, +12851, +12863, +12890, +12900, +12900, +12900, +12910, +12910, +12924, +12924, +12924, +12924, +12924, +12952, +12984, +13003, +13038, +13038, +13056, +13056, +13056, +13056, +13074, +13081, +13093, +13103, +13103, +13112, +13119, +13132, +13132, +13132, +13141, +13151, +13183, +13193, +13206, +13206, +13206, +13236, +13252, +13267, +13267, +13294, +13307, +13307, +13307, +13343, +13349, +13349, +13349, +13375, +13375, +13375, +13384, +13384, +13384, +13393, +13393, +13393, +13402, +13414, +13425, +13445, +13467, +13485, +13499, +13509, +13528, +13528, +13549, +13549, +13559, +13570, +13570, +13570, +13570, +13598, +13637, +13647, +13647, +13661, +13673, +13682, +13687, +13694, +13694, +13720, +13733, +13742, +13748, +13771, +13795, +13795, +13814, +13821, +13821, +13855, +13862, +13862, +13862, +13874, +13874, +13897, +13909, +13909, +13947, +13947, +13952, +13952, +13970, +13979, +13979, +13979, +14008, +14049, +14049, +14049, +14049, +14049, +14049, +14060, +14083, +14083, +14091, +14101, +14101, +14101, +14101, +14118, +14136, +14195, +14195, +14195, +14213, +14213, +14232, +14232, +14253, +14253, +14258, +14275, +14275, +14304, +14311, +14311, +14318, +14318, +14318, +14318, +14318, +14318, +14325, +14325, +14345, +14345, +14379, +14389, +14422, +14422, +14422, +14422, +14435, +14441, +14441, +14460, +14460, +14471, +14471, +14481, +14495, +14495, +14495, +14502, +14502, +14502, +14502, +14524, +14533, +14541, +14552, +14552, +14552, +14552, +14563, +14563, +14568, +14568, +14585, +14595, +14602, +14628, +14628, +14645, +14672, +14678, +14697, +14697, +14734, +14757, +14764, +14771, +14771, +14771, +14796, +14815, +14822, +14845, +14861, +14861, +14861, +14873, +14873, +14873, +14902, +14920, +14920, +14926, +14926, +14926, +14941, +14949, +14949, +14949, +14949, +14949, +14960, +14960, +14971, +14971, +14998, +15003, +15003, +15003, +15013, +15013, +15027, +15027, +15027, +15043, +15053, +15063, +15074, +15083, +15093, +15093, +15121, +15121, +15128, +15128, +15144, +15144, +15144, +15144, +15165, +15170, +15170, +15170, +15170, +15170, +15170, +15170, +15186, +15206, +15206, +15206, +15224, +15236, +15236, +15252, +15258, +15258, +15258, +15258, +15264, +15277, +15288, +15307, +15307, +15318, +15328, +15328, +15334, +15334, +15363, +15399, +15399, +15422, +15438, +15447, +15447, +15456, +15456, +15456, +15495, +15495, +15495, +15495, +15511, +15511, +15530, +15557, +15566, +15582, +15590, +15590, +15604, +15604, +15625, +15635, +15655, +15655, +15655, +15655, +15655, +15665, +15675, +15675, +15675, +15675, +15675, +15682, +15682, +15682, +15694, +15719, +15749, +15749, +15794, +15794, +15837, +15854, +15854, +15861, +15861, +15861, +15861, +15884, +15900, +15911, +15931, +15931, +15931, +15931, +15931, +15963, +15963, +15996, +16006, +16013, +16024, +16034, +16049, +16049, +16049, +16059, +16059, +16059, +16059, +16059, +16059, +16059, +16064, +16075, +16104, +16104, +16117, +16124, +16124, +16124, +16124, +16130, +16145, +16159, +16190, +16193, +16196, +16210, +16224, +16243, +16255, +16261, +16280, +16283, +16292, +16295, +16295, +16301, +16304, +16322, +16325, +16328, +16349, +16355, +16382, +16408, +16414, +16414, +16414, +16458, +16477, +16480, +16485, +16488, +16514, +16520, +16530, +16530, +16546, +16562, +16597, +16603, +16622, +16622, +16646, +16669, +16672, +16715, +16715, +16715, +16718, +16718, +16727, +16733, +16752, +16770, +16787, +16794, +16810, +16827, +16840, +16850, +16876, +16901, +16901, +16901, +16916, +16919, +16926, +16943, +16972, +16978, +16978, +16978, +16981, +17008, +17008, +17016, +17053, +17053, +17053, +17053, +17072, +17086, +17105, +17139, +17153, +17162, +17162, +17177, +17177, +17177, +17177, +17195, +17218, +17221, +17221, +17237, +17276, +17276, +17300, +17319, +17339, +17357, +17370, +17383, +17400, +17407, +17419, +17439, +17439, +17449, +17465, +17475, +17504, +17527, +17527, +17534, +17548, +17564, +17564, +17598, +17598, +17601, +17630, +17649, +17669, +17669, +17679, +17686, +17757, +17776, +17796, +17810, +17840, +17840, +17877, +17884, +17884, +17911, +17936, +17970, +17980, +17995, +17995, +18008, +18011, +18036, +18075, +18097, +18097, +18104, +18115, +18115, +18129, +18134, +18141, +18141, +18157, +18180, +18190, +18217, +18224, +18252, +18284, +18284, +18296, +18299, +18312, +18322, +18338, +18348, +18348, +18363, +18372, +18387, +18387, +18390, +18402, +18445, +18445, +18445, +18466, +18479, +18479, +18498, +18508, +18511, +18511, +18511, +18511, +18511, +18526, +18558, +18586, +18622, +18643, +18670, +18686, +18710, +18720, +18739, +18739, +18742, +18745, +18771, +18774, +18777, +18791, +18813, +18816, +18822, +18839, +18845, +18851, +18854, +18878, +18881, +18896, +18896, +18899, +18926, +18937, +18940, +18953, +18963, +19010, +19010, +19017, +19046, +19060, +19060, +19087, +19095, +19101, +19101, +19128, +19146, +19157, +19157, +19188, +19198, +19205, +19223, +19230, +19255, +19280, +19280, +19283, +19292, +19301, +19320, +19323, +19323, +19341, +19341, +19365, +19378, +19381, +19394, +19423, +19433, +19440, +19466, +19490, +19490, +19490, +19497, +19504, +19511, +19511, +19518, +19545, +19568, +19575, +19575, +19583, +19586, +19592, +19592, +19609, +19622, +19629, +19641, +19641, +19656, +19673, +19700, +19723, +19733, +19746, +19759, +19769, +19782, +19789, +19795, +19831, +19834, +19841, +19851, +19854, +19880, +19895, +19898, +19898, +19911, +19922, +19950, +20020, +20030, +20059, +20062, +20089, +20107, +20151, +20154, +20175, +20205, +20208, +20229, +20229, +20255, +20261, +20261, +20283, +20335, +20362, +20385, +20392, +20392, +20392, +20392, +20418, +20418, +20418, +20418, +20443, +20446, +20446, +20452, +20452, +20467, +20467, +20489, +20489, +20498, +20525, +20554, +20560, +20575, +20589, +20589, +20589, +20614, +20652, +20659, +20659, +20668, +20679, +20679, +20679, +20685, +20685, +20685, +20685, +20685, +20685, +20696, +20733, +20760, +20766, +20769, +20792, +20792, +20792, +20792, +20813, +20813, +20813, +20813, +20826, +20826, +20846, +20862, +20880, +20887, +20901, +20908, +20933, +20938, +20958, +20969, +20978, +20978, +20978, +20985, +20985, +20985, +21000, +21010, +21010, +21014, +21026, +21033, +21041, +21041, +21051, +21051, +21064, +21071, +21113, +21120, +21120, +21127, +21134, +21142, +21164, +21164, +21164, +21188, +21195, +21208, +21215, +21226, +21226, +21226, +21238, +21249, +21255, +21255, +21265, +21279, +21296, +21301, +21315, +21321, +21331, +21331, +21331, +21337, +21343, +21343, +21351, +21351, +21361, +21368, +21383, +21383, +21389, +21413, +21437, +21449, +21462, +21478, +21506, +21534, +21546, +21546, +21557, +21580, +21595, +21595, +21595, +21595, +21626, +21626, +21646, +21670, +21676, +21688, +21688, +21716, +21731, +21762, +21762, +21762, +21762, +21762, +21783, +21789, +21799, +21828, +21828, +21837, +21845, +21868, +21874, +21874, +21880, +21880, +21889, +21901, +21910, +21941, +21941, +21959, +21959, +21959, +21966, +21966, +21972, +21972, +21995, +22011, +22043, +22043, +22051, +22051, +22060, +22060, +22060, +22074, +22086, +22086, +22099, +22099, +22120, +22120, +22134, +22144, +22150, +22158, +22164, +22164, +22171, +22199, +22210, +22210, +22210, +22220, +22228, +22228, +22239, +22261, +22304, +22304, +22312, +22349, +22349, +22349, +22357, +22381, +22381, +22390, +22390, +22390, +22390, +22402, +22413, +22413, +22422, +22422, +22445, +22445, +22445, +22456, +22456, +22469, +22479, +22501, +22512, +22528, +22528, +22528, +22528, +22528, +22528, +22528, +22540, +22540, +22546, +22546, +22546, +22546, +22569, +22591, +22591, +22591, +22591, +22610, +22655, +22655, +22667, +22667, +22677, +22677, +22692, +22692, +22702, +22702, +22702, +22717, +22736, +22750, +22755, +22780, +22785, +22822, +22844, +22859, +22871, +22909, +22949, +22962, +22973, +22979, +22988, +23007, +23027, +23035, +23072, +23082, +23082, +23109, +23116, +23130, +23158, +23166, +23166, +23172, +23177, +23189, +23219, +23219, +23250, +23273, +23281, +23281, +23281, +23281, +23281, +23287, +23287, +23299, +23305, +23315, +23315, +23321, +23328, +23334, +23355, +23355, +23355, +23355, +23355, +23366, +23390, +23396, +23396, +23396, +23396, +23402, +23418, +23424, +23424, +23438, +23446, +23446, +23446, +23500, +23525, +23569, +23592, +23592, +23592, +23605, +23614, +23614, +23614, +23627, +23633, +23657, +23673, +23673, +23673, +23689, +23689, +23701, +23701, +23701, +23713, +23713, +23713, +23738, +23758, +23775, +23775, +23794, +23794, +23803, +23803, +23803, +23803, +23813, +23826, +23845, +23845, +23845, +23845, +23872, +23872, +23872, +23888, +23888, +23900, +23900, +23906, +23906, +23906, +23906, +23906, +23924, +23924, +23924, +23930, +23930, +23939, +23949, +23971, +23971, +23971, +24000, +24012, +24042, +24042, +24042, +24042, +24042, +24070, +24076, +24094, +24094, +24094, +24123, +24123, +24123, +24134, +24150, +24150, +24150, +24150, +24150, +24150, +24155, +24179, +24179, +24189, +24189, +24189, +24198, +24198, +24218, +24218, +24218, +24234, +24251, +24257, +24276, +24305, +24321, +24321, +24321, +24334, +24334, +24334, +24349, +24356, +24361, +24372, +24372, +24372, +24388, +24396, +24396, +24402, +24410, +24410, +24428, +24428, +24450, +24450, +24467, +24485, +24495, +24495, +24495, +24507, +24507, +24514, +24531, +24531, +24531, +24531, +24531, +24537, +24537, +24558, +24572, +24584, +24584, +24601, +24601, +24607, +24615, +24615, +24632, +24632, +24632, +24632, +24661, +24676, +24676, +24724, +24751, +24751, +24774, +24774, +24783, +24793, +24793, +24793, +24813, +24819, +24819, +24826, +24826, +24842, +24858, +24872, +24872, +24890, +24890, +24890, +24890, +24890, +24890, +24890, +24890, +24890, +24906, +24906, +24917, +24928, +24947, +24947, +24947, +24947, +24947, +24947, +24947, +24947, +24947, +24963, +24983, +24991, +24991, +24991, +24991, +24991, +24991, +24991, +24991, +25007, +25007, +25007, +25007, +25007, +25007, +25007, +25030, +25040, +25040, +25040, +25040, +25040, +25059, +25097, +25132, +25149, +25159, +25169, +25169, +25169, +25192, +25192, +25192, +25192, +25205, +25205, +25216, +25221, +25221, +25233, +25233, +25240, +25250, +25256, +25273, +25273, +25303, +25321, +25321, +25321, +25333, +25333, +25333, +25333, +25370, +25370, +25402, +25418, +25418, +25439, +25439, +25454, +25454, +25454, +25463, +25477, +25526, +25526, +25526, +25526, +25545, +25562, +25572, +25572, +25582, +25582, +25582, +25597, +25610, +25634, +25641, +25641, +25641, +25668, +25668, +25675, +25707, +25727, +25727, +25741, +25756, +25756, +25779, +25811, +25811, +25811, +25817, +25817, +25817, +25827, +25827, +25827, +25827, +25827, +25836, +25836, +25836, +25836, +25850, +25850, +25860, +25884, +25901, +25922, +25936, +25946, +25969, +25969, +25969, +25969, +25975, +25975, +25987, +25987, +26065, +26065, +26065, +26084, +26084, +26103, +26128, +26141, +26151, +26169, +26169, +26169, +26180, +26191, +26191, +26191, +26197, +26197, +26205, +26211, +26235, +26235, +26235, +26235, +26235, +26235, +26245, +26245, +26259, +26259, +26259, +26259, +26284, +26284, +26325, +26325, +26355, +26364, +26364, +26402, +26418, +26418, +26425, +26432, +26432, +26454, +26504, +26513, +26525, +26525, +26525, +26525, +26525, +26545, +26545, +26571, +26590, +26597, +26597, +26597, +26597, +26597, +26639, +26648, +26659, +26666, +26672, +26672, +26672, +26672, +26672, +26694, +26701, +26701, +26701, +26724, +26724, +26746, +26753, +26774, +26774, +26774, +26774, +26806, +26824, +26824, +26830, +26852, +26882, +26882, +26889, +26889, +26889, +26889, +26889, +26889, +26903, +26911, +26918, +26918, +26928, +26948, +26948, +26970, +26970, +26985, +26996, +27045, +27045, +27058, +27058, +27068, +27068, +27104, +27155, +27155, +27155, +27155, +27155, +27172, +27172, +27172, +27172, +27189, +27195, +27195, +27223, +27223, +27223, +27223, +27244, +27290, +27322, +27332, +27364, +27371, +27371, +27371, +27401, +27401, +27417, +27417, +27431, +27470, +27470, +27470, +27470, +27484, +27484, +27484, +27484, +27484, +27496, +27496, +27515, +27515, +27543, +27560, +27576, +27604, +27622, +27631, +27631, +27638, +27649, +27672, +27682, +27682, +27682, +27707, +27717, +27724, +27732, +27755, +27755, +27755, +27768, +27768, +27783, +27789, +27799, +27799, +27799, +27818, +27826, +27838, +27848, +27848, +27848, +27855, +27862, +27862, +27896, +27921, +27921, +27943, +27954, +27954, +27976, +27976, +27976, +27985, +28002, +28012, +28019, +28034, +28034, +28046, +28068, +28097, +28122, +28122, +28131, +28137, +28151, +28151, +28172, +28190, +28196, +28211, +28211, +28264, +28273, +28286, +28324, +28324, +28324, +28354, +28354, +28361, +28397, +28417, +28417, +28424, +28435, +28461, +28461, +28470, +28483, +28483, +28483, +28483, +28483, +28483, +28483, +28515, +28531, +28531, +28549, +28575, +28575, +28575, +28582, +28599, +28615, +28630, +28630, +28672, +28711, +28723, +28723, +28731, +28752, +28752, +28752, +28763, +28763, +28775, +28775, +28775, +28775, +28775, +28775, +28805, +28814, +28830, +28861, +28882, +28882, +28902, +28918, +28937, +28952, +28959, +28998, +29009, +29009, +29009, +29009, +29019, +29019, +29019, +29019, +29019, +29057, +29069, +29076, +29076, +29076, +29076, +29076, +29082, +29082, +29082, +29117, +29117, +29117, +29117, +29134, +29134, +29159, +29159, +29185, +29185, +29196, +29196, +29242, +29248, +29256, +29280, +29301, +29307, +29307, +29307, +29314, +29314, +29338, +29356, +29367, +29367, +29381, +29391, +29399, +29399, +29414, +29434, +29434, +29441, +29473, +29484, +29503, +29520, +29520, +29548, +29565, +29572, +29572, +29572, +29572, +29572, +29597, +29597, +29620, +29655, +29660, +29660, +29660, +29667, +29674, +29688, +29698, +29705, +29728, +29740, +29740, +29761, +29761, +29767, +29780, +29787, +29794, +29794, +29807, +29820, +29820, +29820, +29820, +29832, +29844, +29855, +29855, +29855, +29867, +29867, +29867, +29867, +29881, +29881, +29905, +29905, +29905, +29923, +29923, +29948, +29948, +29948, +29976, +29986, +29996, +29996, +30030, +30030, +30054, +30054, +30070, +30070, +30070, +30077, +30077, +30087, +30107, +30107, +30115, +30141, +30178, +30178, +30201, +30201, +30201, +30207, +30229, +30239, +30254, +30268, +30277, +30311, +30323, +30323, +30331, +30331, +30331, +30331, +30331, +30353, +30365, +30374, +30374, +30374, +30380, +30380, +30380, +30380, +30410, +30410, +30410, +30443, +30443, +30453, +30462, +30472, +30472, +30472, +30472, +30472, +30472, +30489, +30500, +30500, +30500, +30532, +30532, +30553, +30577, +30599, +30599, +30609, +30640, +30640, +30640, +30664, +30676, +30676, +30676, +30692, +30719, +30728, +30728, +30742, +30742, +30749, +30749, +30760, +30770, +30770, +30783, +30783, +30783, +30804, +30847, +30847, +30847, +30847, +30857, +30857, +30857, +30857, +30875, +30875, +30895, +30895, +30921, +30926, +30926, +30926, +30945, +30945, +30945, +30945, +30959, +30959, +30959, +30959, +30972, +30972, +30984, +31011, +31011, +31048, +31056, +31056, +31070, +31077, +31077, +31110, +31110, +31115, +31122, +31139, +31159, +31159, +31165, +31171, +31171, +31197, +31204, +31211, +31211, +31221, +31228, +31228, +31245, +31245, +31245, +31252, +31265, +31265, +31265, +31265, +31294, +31305, +31320, +31333, +31333, +31333, +31343, +31350, +31357, +31369, +31369, +31379, +31385, +31391, +31407, +31407, +31407, +31423, +31423, +31423, +31434, +31454, +31470, +31511, +31521, +31521, +31521, +31542, +31582, +31582, +31597, +31597, +31597, +31614, +31623, +31645, +31645, +31661, +31661, +31669, +31669, +31676, +31676, +31706, +31720, +31726, +31743, +31785, +31804, +31817, +31817, +31835, +31846, +31863, +31885, +31885, +31896, +31907, +31907, +31907, +31922, +31922, +31929, +31929, +31929, +31936, +31943, +31949, +31949, +31949, +31959, +32006, +32024, +32031, +32031, +32038, +32063, +32095, +32095, +32105, +32105, +32105, +32105, +32105, +32125, +32134, +32140, +32176, +32185, +32195, +32195, +32195, +32195, +32202, +32202, +32218, +32236, +32259, +32294, +32300, +32305, +32305, +32305, +32323, +32337, +32352, +32359, +32374, +32381, +32388, +32388, +32388, +32402, +32402, +32402, +32402, +32418, +32428, +32428, +32428, +32450, +32450, +32450, +32462, +32467, +32480, +32480, +32480, +32487, +32502, +32509, +32525, +32560, +32570, +32583, +32597, +32623, +32637, +32644, +32667, +32707, +32725, +32725, +32747, +32747, +32751, +32758, +32789, +32807, +32824, +32824, +32824, +32824, +32843, +32843, +32850, +32876, +32908, +32915, +32946, +32965, +32965, +32982, +33002, +33009, +33029, +33064, +33084, +33098, +33098, +33098, +33098, +33110, +33110, +33151, +33158, +33180, +33198, +33205, +33227, +33227, +33237, +33237, +33253, +33258, +33277, +33292, +33315, +33315, +33333, +33348, +33348, +33348, +33348, +33348, +33348, +33348, +33355, +33355, +33355, +33390, +33408, +33423, +33437, +33452, +33458, +33465, +33480, +33480, +33487, +33494, +33504, +33511, +33551, +33551, +33558, +33589, +33595, +33595, +33602, +33627, +33644, +33668, +33668, +33668, +33676, +33676, +33716, +33728, +33747, +33747, +33769, +33775, +33789, +33803, +33803, +33810, +33810, +33810, +33820, +33820, +33820, +33820, +33843, +33843, +33843, +33879, +33889, +33889, +33889, +33903, +33917, +33931, +33959, +33993, +34000, +34014, +34037, +34043, +34055, +34055, +34077, +34083, +34090, +34099, +34099, +34115, +34115, +34133, +34140, +34167, +34172, +34184, +34221, +34245, +34252, +34252, +34259, +34318, +34318, +34325, +34325, +34352, +34400, +34415, +34422, +34422, +34431, +34438, +34445, +34445, +34473, +34473, +34489, +34489, +34489, +34489, +34499, +34499, +34499, +34516, +34536, +34551, +34564, +34580, +34580, +34580, +34589, +34589, +34589, +34613, +34648, +34648, +34648, +34655, +34664, +34681, +34681, +34698, +34698, +34720, +34736, +34749, +34749, +34765, +34778, +34785, +34795, +34819, +34819, +34829, +34841, +34848, +34854, +34854, +34854, +34878, +34894, +34894, +34900, +34917, +34934, +34940, +34970, +34998, +34998, +35004, +35004, +35012, +35012, +35012, +35020, +35020, +35032, +35038, +35062, +35062, +35062, +35068, +35068, +35082, +35092, +35096, +35107, +35118, +35134, +35155, +35155, +35166, +35178, +35178, +35195, +35201, +35201, +35201, +35226, +35226, +35226, +35226, +35256, +35262, +35272, +35280, +35299, +35332, +35354, +35354, +35354, +35370, +35386, +35417, +35417, +35460, +35473, +35478, +35495, +35504, +35504, +35518, +35552, +35589, +35624, +35624, +35637, +35637, +35643, +35643, +35669, +35682, +35695, +35702, +35709, +35709, +35726, +35739, +35749, +35756, +35756, +35778, +35803, +35810, +35829, +35883, +35899, +35905, +35911, +35911, +35923, +35947, +35954, +35980, +35987, +36034, +36052, +36063, +36095, +36106, +36106, +36113, +36120, +36140, +36140, +36153, +36160, +36160, +36167, +36203, +36203, +36218, +36218, +36225, +36253, +36259, +36284, +36296, +36310, +36324, +36331, +36344, +36367, +36367, +36367, +36412, +36412, +36422, +36463, +36463, +36463, +36479, +36490, +36513, +36520, +36520, +36527, +36527, +36527, +36540, +36574, +36594, +36594, +36605, +36621, +36621, +36641, +36641, +36641, +36659, +36682, +36682, +36682, +36682, +36705, +36705, +36705, +36720, +36720, +36755, +36755, +36771, +36771, +36771, +36788, +36806, +36835, +36845, +36875, +36875, +36903, +36921, +36928, +36928, +36940, +36940, +36940, +36966, +36966, +36973, +36983, +36998, +37004, +37014, +37024, +37024, +37032, +37038, +37038, +37061, +37074, +37074, +37091, +37098, +37105, +37105, +37133, +37141, +37141, +37148, +37191, +37191, +37197, +37197, +37210, +37224, +37224, +37231, +37250, +37257, +37273, +37273, +37280, +37287, +37294, +37300, +37307, +37330, +37348, +37348, +37359, +37359, +37359, +37377, +37392, +37398, +37412, +37431, +37469, +37486, +37508, +37517, +37535, +37535, +37542, +37542, +37549, +37549, +37549, +37549, +37556, +37576, +37576, +37583, +37590, +37597, +37604, +37604, +37621, +37635, +37676, +37676, +37704, +37711, +37728, +37728, +37737, +37737, +37737, +37750, +37757, +37778, +37785, +37785, +37819, +37826, +37833, +37843, +37850, +37869, +37914, +37921, +37935, +37942, +37949, +37982, +38013, +38013, +38013, +38023, +38057, +38077, +38097, +38110, +38117, +38123, +38133, +38133, +38133, +38140, +38140, +38148, +38159, +38179, +38192, +38205, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38225, +38225, +38230, +38246, +38258, +38280, +38287, +38294, +38294, +38294, +38301, +38318, +38318, +38340, +38371, +38371, +38384, +38420, +38440, +38453, +38481, +38506, +38522, +38534, +38559, +38559, +38559, +38564, +38564, +38581, +38604, +38604, +38611, +38620, +38626, +38635, +38635, +38635, +38666, +38674, +38688, +38693, +38710, +38722, +38722, +38722, +38729, +38734, +38752, +38792, +38818, +38825, +38861, +38902, +38934, +38949, +38949, +38960, +38969, +38985, +38985, +38996, +39013, +39024, +39024, +39032, +39061, +39074, +39089, +39123, +39123, +39123, +39140, +39161, +39180, +39206, +39215, +39254, +39261, +39277, +39284, +39314, +39314, +39330, +39340, +39340, +39371, +39371, +39392, +39430, +39430, +39437, +39444, +39461, +39468, +39468, +39485, +39517, +39524, +39538, +39543, +39548, +39555, +39581, +39588, +39588, +39609, +39609, +39616, +39652, +39670, +39677, +39677, +39684, +39691, +39702, +39717, +39717, +39717, +39724, +39749, +39760, +39766, +39775, +39791, +39791, +39814, +39827, +39827, +39837, +39859}; + +static const char tldData[] = { +"com.cn\0" +"com.co\0" +"hb.cn\0" +"med.br\0conf.lv\0wallonie.museum\0" +"namsos.no\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0farmers.museum\0rel.pl\0" +"com.cu\0" +"military.museum\0" +"*.jm\0convent.museum\0cymru.museum\0malvik.no\0" +"univ.sn\0" +"gliding.aero\0" +"wodzislaw.pl\0" +"com.dm\0!pref.iwate.jp\0tran\xc3\xb8y.no\0pila.pl\0" +"mb.it\0*.ke\0lib.ri.us\0" +"com.ec\0*.kh\0tr\xc3\xb8gstad.no\0" +"com.ee\0" +"mobi.gp\0" +"gran.no\0" +"wa.gov.au\0" +"com.dz\0kg.kr\0" +"zoological.museum\0gjerstad.no\0haugesund.no\0kharkov.ua\0" +"walbrzych.pl\0" +"civilization.museum\0" +"ha.no\0" +"*.kw\0" +"med.ec\0com.es\0" +"med.ee\0otago.museum\0svelvik.no\0" +"art.ht\0amber.museum\0elvendrell.museum\0rost.no\0" +"jx.cn\0gratangen.no\0" +"association.aero\0ca.it\0" +"zaporizhzhe.ua\0" +"com.fr\0" +"szex.hu\0" +"e-burg.ru\0" +"com.ge\0bokn.no\0" +"mordovia.ru\0" +"com.gh\0*.mm\0" +"com.gi\0z.se\0" +"cahcesuolo.no\0" +"hurdal.no\0joshkar-ola.ru\0" +"cadaques.museum\0ma.us\0" +"a.bg\0" +"com.gn\0bozen.it\0tambov.ru\0" +"*.gifu.jp\0*.tokyo.jp\0*.mt\0" +"com.gp\0travel\0cc.tx.us\0" +"com.gr\0hemne.no\0" +"*.ni\0" +"*.mz\0" +"cc.il.us\0" +"com.gy\0" +"zj.cn\0oksnes.no\0museum.tt\0" +"com.hk\0*.np\0" +"rc.it\0baseball.museum\0" +"com.hn\0exhibition.museum\0" +"h\xc3\xa1""bmer.no\0" +"com.hr\0" +"fg.it\0stathelle.no\0defense.tn\0" +"com.ht\0" +"qld.gov.au\0*.nz\0" +"davvenj\xc3\xa1rga.no\0*.om\0" +"vang.no\0" +"*.kumamoto.jp\0" +"vercelli.it\0usenet.pl\0" +"com.io\0stalbans.museum\0" +"com.iq\0" +"*.pg\0" +"com.is\0klabu.no\0skiptvet.no\0" +"med.ht\0field.museum\0" +"gr.it\0gj\xc3\xb8vik.no\0tromsa.no\0lib.mi.us\0" +"ca.na\0" +"hagebostad.no\0k12.ma.us\0" +"*.qa\0" +"*.niigata.jp\0" +"monzaebrianza.it\0com.jo\0comunica\xc3\xa7\xc3\xb5""es.museum\0" +"gr.jp\0" +"ballangen.no\0*.py\0" +"scienceandindustry.museum\0" +"nuoro.it\0com.kg\0" +"com.ki\0" +"im.it\0idv.tw\0" +"*.akita.jp\0com.km\0r\xc3\xb8ros.no\0sopot.pl\0" +"!pref.yamanashi.jp\0" +"com.kp\0" +"!pref.kochi.jp\0com.la\0" +"com.lb\0" +"com.lc\0stjordalshalsen.no\0sigdal.no\0cc.nm.us\0" +"samnanger.no\0" +"drobak.no\0" +"vt.it\0" +"catering.aero\0com.ky\0" +"com.kz\0cc.ca.us\0" +"com.lk\0" +"grosseto.it\0mosvik.no\0" +"namsskogan.no\0" +"loten.no\0" +"chirurgiens-dentistes.fr\0" +"com.lr\0bremanger.no\0" +"gs.cn\0" +"com.lv\0lib.co.us\0" +"com.mg\0" +"passenger-association.aero\0" +"com.ly\0yekaterinburg.ru\0" +"vladivostok.ru\0" +"com.mk\0beeldengeluid.museum\0" +"com.ml\0" +"art.pl\0" +"com.mo\0" +"britishcolumbia.museum\0tx.us\0" +"com.na\0sakhalin.ru\0*.sv\0" +"mc.it\0" +"amsterdam.museum\0udm.ru\0" +"com.mu\0" +"com.mv\0com.nf\0" +"com.mw\0com.ng\0il.us\0" +"geometre-expert.fr\0com.mx\0" +"med.ly\0com.my\0" +"ag.it\0" +"*.tr\0" +"!pref.oita.jp\0" +"hoyanger.no\0skedsmo.no\0" +"com.nr\0turystyka.pl\0" +"koebenhavn.museum\0" +"quebec.museum\0" +"stord.no\0*.uk\0" +"act.au\0" +"br.it\0cb.it\0gyeonggi.kr\0jobs.tt\0lib.hi.us\0" +"*.ve\0" +"*.saga.jp\0wildlife.museum\0com.pa\0" +"monzabrianza.it\0sciencehistory.museum\0stange.no\0oskol.ru\0principe.st\0*.uy\0" +"plaza.museum\0com.pe\0" +"com.pf\0" +"eigersund.no\0" +"com.ph\0" +"manx.museum\0marylhurst.museum\0" +"md.ci\0pi.it\0schweiz.museum\0com.pk\0" +"grp.lk\0fr\xc3\xb8ya.no\0com.pl\0press.se\0" +"us.com\0" +"b.bg\0cremona.it\0communication.museum\0art.sn\0" +"med.pa\0" +"com.pr\0" +"com.ps\0" +"com.pt\0" +"k12.in.us\0" +"ah.cn\0bahcavuotna.no\0" +"sondrio.it\0arkhangelsk.ru\0" +"cargo.aero\0" +"council.aero\0" +"museum.mv\0hattfjelldal.no\0spydeberg.no\0med.pl\0" +"niepce.museum\0museum.mw\0" +"anthropology.museum\0" +"pharmacien.fr\0smola.no\0" +"fin.ec\0" +"selbu.no\0" +"workinggroup.aero\0nm.us\0" +"museum.no\0com.re\0" +"cc.vt.us\0" +"village.museum\0" +"ca.us\0" +"*.sapporo.jp\0" +"teramo.it\0" +"com.ro\0" +"*.ye\0" +"com.sa\0" +"com.sb\0" +"so.it\0com.sc\0" +"jolster.no\0com.sd\0" +"com.ru\0" +"com.rw\0com.sg\0" +"sydney.museum\0" +"sa.edu.au\0" +"tom.ru\0" +"com.sl\0*.za\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0naturbruksgymn.se\0com.sn\0" +"assedic.fr\0com.so\0" +"!pref.mie.jp\0*.yu\0" +"med.sa\0" +"newspaper.museum\0holmestrand.no\0dnepropetrovsk.ua\0" +"christiansburg.museum\0roan.no\0" +"pesaro-urbino.it\0med.sd\0com.st\0" +"s\xc3\xb8gne.no\0" +"nuernberg.museum\0" +"*.zm\0" +"com.sy\0" +"*.nagano.jp\0com.tj\0" +"nt.gov.au\0news.hu\0paderborn.museum\0" +"boston.museum\0" +"com.tn\0" +"com.to\0" +"broadcast.museum\0" +"com.ua\0" +"*.zw\0" +"baikal.ru\0" +"bykle.no\0com.tt\0" +"verdal.no\0" +"roros.no\0" +"fi.cr\0carboniaiglesias.it\0chuvashia.ru\0com.tw\0" +"k12.ca.us\0" +"eidsvoll.no\0" +"*.ishikawa.jp\0" +"dolls.museum\0" +"naval.museum\0" +"karasjok.no\0tysvar.no\0" +"bielawa.pl\0com.vc\0" +"svalbard.no\0deatnu.no\0rnd.ru\0" +"grandrapids.museum\0" +"bauern.museum\0k12.pr.us\0" +"press.ma\0" +"*.kagawa.jp\0fribourg.museum\0przeworsk.pl\0com.vi\0" +"com.uz\0" +"babia-gora.pl\0" +"com.vn\0" +"med.pro\0" +"suedtirol.it\0kursk.ru\0" +"bonn.museum\0" +"lt.it\0" +"design.aero\0microlight.aero\0americanantiques.museum\0meland.no\0" +"insurance.aero\0aarborte.no\0" +"kh.ua\0" +"macerata.it\0architecture.museum\0" +"rovigo.it\0rawa-maz.pl\0" +"store.nf\0levanger.no\0" +"b\xc3\xa1jddar.no\0" +"not.br\0" +"com.ws\0" +"!pref.kagawa.jp\0" +"!omanpost.om\0" +"vt.us\0" +"gs.ah.no\0vladikavkaz.ru\0" +"no.it\0" +"in.na\0szkola.pl\0a.se\0" +"aid.pl\0" +"workshop.museum\0vegarshei.no\0" +"sund.no\0" +"bs.it\0flora.no\0" +"agriculture.museum\0" +"koeln.museum\0" +"minnesota.museum\0k12.il.us\0" +"froya.no\0" +"aeroport.fr\0" +"davvenjarga.no\0zgora.pl\0ivano-frankivsk.ua\0" +"*.gunma.jp\0" +"amot.no\0" +"mus.br\0chungbuk.kr\0" +"ggf.br\0lorenskog.no\0" +"jeonbuk.kr\0" +"k12.vi.us\0" +"c.bg\0sande.more-og-romsdal.no\0" +"perugia.it\0" +"massa-carrara.it\0" +"michigan.museum\0" +"archaeology.museum\0mosj\xc3\xb8""en.no\0czest.pl\0koenig.ru\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"mobi.tt\0" +"kraanghke.no\0" +"cc.in.us\0" +"re.it\0lib.vt.us\0" +"dell-ogliastra.it\0" +"s\xc3\xb8mna.no\0" +"k12.wv.us\0" +"gok.pk\0fh.se\0" +"luzern.museum\0" +"fi.it\0swidnica.pl\0" +"cbg.ru\0" +"latina.it\0" +"vibovalentia.it\0" +"modum.no\0" +"safety.aero\0" +"sp.it\0" +"science.museum\0ah.no\0" +"norddal.no\0" +"cc.na\0" +"re.kr\0" +"dielddanuorri.no\0" +"force.museum\0" +"torino.it\0cc.md.us\0" +"artanddesign.museum\0pisz.pl\0" +"olsztyn.pl\0" +"unsa.ba\0rade.no\0vinnica.ua\0" +"in.rs\0astrakhan.ru\0" +"sogne.no\0" +"homebuilt.aero\0" +"polkowice.pl\0" +"hole.no\0health.vn\0" +"fj.cn\0" +"davvesiida.no\0" +"vic.au\0" +"kongsberg.no\0" +"pub.sa\0" +"vv.it\0" +"!pref.tottori.jp\0" +"*.sendai.jp\0in.th\0" +"lib.pa.us\0" +"chiropractic.museum\0" +"mobi.na\0aca.pro\0" +"konyvelo.hu\0sciencecenters.museum\0" +"he.cn\0" +"in.ua\0" +"!city.nagoya.jp\0" +"muenchen.museum\0" +"psi.br\0" +"maryland.museum\0" +"!statecouncil.om\0" +"tr\xc3\xa6na.no\0" +"!pref.yamagata.jp\0jewishart.museum\0" +"lu.it\0me.it\0" +"chel.ru\0" +"tatarstan.ru\0" +"adult.ht\0in.us\0" +"kafjord.no\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" +"net.ac\0k12.ec\0" +"net.ae\0bashkiria.ru\0" +"net.af\0!omantel.om\0" +"net.ag\0" +"net.ai\0" +"!pref.toyama.jp\0" +"net.al\0timekeeping.museum\0" +"net.an\0design.museum\0fin.tn\0" +"ethnology.museum\0" +"perso.ht\0asker.no\0b.se\0" +"net.ba\0" +"net.bb\0flanders.museum\0" +"mincom.tn\0" +"frana.no\0" +"bt.it\0" +"net.bh\0" +"auto.pl\0" +"net.az\0" +"treviso.it\0" +"war.museum\0" +"net.bm\0" +"langevag.no\0m\xc3\xa5lselv.no\0" +"net.bo\0" +"gol.no\0" +"folkebibl.no\0" +"net.br\0" +"net.bs\0troandin.no\0saotome.st\0lib.tn.us\0" +"md.us\0k12.ut.us\0" +"d.bg\0cambridge.museum\0\xc3\xa5s.no\0" +"net.ci\0" +"net.bz\0" +"sch.ae\0undersea.museum\0odda.no\0" +"net.cn\0" +"net.co\0c.la\0" +"gliwice.pl\0" +"aurskog-h\xc3\xb8land.no\0" +"andria-trani-barletta.it\0" +"net.cu\0loab\xc3\xa1t.no\0" +"rep.kp\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0" +"gallery.museum\0" +"\xc3\xb8rland.no\0" +"store.ro\0" +"net.dm\0" +"somna.no\0" +"hemnes.no\0" +"ringebu.no\0k12.ky.us\0" +"net.ec\0" +"dn.ua\0" +"tarnobrzeg.pl\0" +"soc.lk\0" +"romsa.no\0" +"bamble.no\0" +"net.dz\0lutsk.ua\0" +"barlettatraniandria.it\0ta.it\0countryestate.museum\0" +"kaszuby.pl\0" +"*.yamaguchi.jp\0cranbrook.museum\0store.st\0" +"southcarolina.museum\0lib.md.us\0" +"textile.museum\0" +"cheltenham.museum\0hurum.no\0" +"*.oita.jp\0" +"shop.ht\0cc.me.us\0" +"shop.hu\0turin.it\0" +"louvre.museum\0" +"k12.ar.us\0" +"consulting.aero\0" +"gv.ao\0" +"sauherad.no\0" +"gv.at\0net.ge\0" +"ostre-toten.no\0lib.ok.us\0" +"net.gg\0pilots.museum\0" +"2000.hu\0geology.museum\0" +"net.gn\0" +"mazowsze.pl\0bir.ru\0" +"net.gp\0" +"net.gr\0" +"oxford.museum\0" +"per.la\0" +"eastafrica.museum\0" +"meeres.museum\0" +"net.gy\0*.shizuoka.jp\0" +"\xe5\x95\x86\xe6\xa5\xad.tw\0" +"net.hk\0" +"net.hn\0" +"philadelphiaarea.museum\0" +"osen.no\0" +"net.ht\0net.id\0" +"fundacio.museum\0" +"j\xc3\xb8rpeland.no\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0" +"divtasvuodna.no\0" +"student.aero\0sch.gg\0net.im\0" +"\xe7\xbd\x91\xe7\xbb\x9c.cn\0net.in\0" +"net.iq\0" +"net.ir\0" +"net.is\0" +"net.je\0" +"kepno.pl\0lapy.pl\0" +"per.nf\0" +"gov\0*.shimane.jp\0" +"artcenter.museum\0" +"k\xc3\xa5""fjord.no\0" +"net.jo\0" +"eu.int\0" +"c.se\0" +"net.kg\0" +"ce.it\0net.ki\0" +"sch.id\0os.hedmark.no\0" +"columbus.museum\0" +"arteducation.museum\0" +"net.kn\0" +"kr.com\0" +"net.la\0bushey.museum\0cc.gu.us\0" +"net.lb\0" +"net.lc\0" +"gs.bu.no\0" +"e164.arpa\0" +"chieti.it\0labour.museum\0" +"sch.ir\0creation.museum\0krodsherad.no\0" +"net.ky\0" +"net.kz\0me.us\0" +"e.bg\0sch.je\0net.lk\0" +"zlg.br\0suwalki.pl\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0net.ma\0" +"net.lr\0" +"sch.jo\0notaires.km\0net.me\0" +"net.lv\0karate.museum\0" +"net.ly\0karm\xc3\xb8y.no\0" +"rg.it\0" +"net.mk\0" +"net.ml\0evenes.no\0" +"ngo.lk\0net.mo\0egyptian.museum\0" +"marine.ru\0" +"realestate.pl\0" +"net.mu\0" +"net.mv\0net.nf\0" +"net.mw\0net.ng\0gda.pl\0" +"net.mx\0" +"freemasonry.museum\0net.my\0enebakk.no\0" +"karlsoy.no\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0\xc3\xb8rskog.no\0" +"randaberg.no\0" +"club.aero\0" +"certification.aero\0sr.it\0" +"center.museum\0so.gov.pl\0" +"caa.aero\0" +"sch.lk\0tvedestrand.no\0" +"net.nr\0" +"luroy.no\0" +"aukra.no\0s\xc3\xa1lat.no\0lib.me.us\0" +"ddr.museum\0" +"york.museum\0stryn.no\0k12.nm.us\0" +"per.sg\0" +"judaica.museum\0" +"verona.it\0" +"agdenes.no\0" +"cng.br\0sch.ly\0" +"net.pa\0" +"author.aero\0" +"naturalhistory.museum\0steiermark.museum\0bu.no\0" +"sn\xc3\xa5sa.no\0net.pe\0" +"net.ph\0" +"savannahga.museum\0batsfjord.no\0lib.oh.us\0" +"net.pk\0" +"net.pl\0" +"net.pn\0" +"washingtondc.museum\0" +"net.pr\0" +"net.ps\0" +"net.pt\0" +"nordkapp.no\0" +"emergency.aero\0krokstadelva.no\0" +"satx.museum\0ngo.ph\0omsk.ru\0" +"texas.museum\0" +"ngo.pl\0" +"mantova.it\0gu.us\0" +"!pref.shiga.jp\0isa.us\0" +"usa.museum\0" +"gb.net\0k12.vi\0" +"iveland.no\0" +"tempio-olbia.it\0" +"net.sa\0" +"net.sb\0" +"works.aero\0net.sc\0komvux.se\0" +"net.sd\0" +"net.ru\0" +"0.bg\0" +"forlicesena.it\0net.rw\0net.sg\0" +"klodzko.pl\0" +"detroit.museum\0wegrow.pl\0" +"net.sl\0" +"glogow.pl\0" +"store.bb\0air.museum\0" +"net.so\0" +"katowice.pl\0" +"nsk.ru\0" +"pisa.it\0eid.no\0" +"net.st\0" +"film.hu\0" +"tuva.ru\0d.se\0" +"net.th\0" +"net.sy\0" +"viterbo.it\0tsaritsyn.ru\0perso.sn\0net.tj\0" +"lib.gu.us\0" +"plc.co.im\0sec.ps\0" +"r\xc3\xa1hkker\xc3\xa1vju.no\0kazimierz-dolny.pl\0net.tn\0" +"net.to\0" +"veterinaire.km\0" +"net.ua\0" +"info.ht\0net.tt\0" +"info.hu\0" +"exchange.aero\0" +"sch.sa\0net.tw\0" +"andriatranibarletta.it\0perso.tn\0" +"f.bg\0malselv.no\0" +"net.vc\0" +"trana.no\0" +"ns.ca\0" +"net.vi\0" +"lucca.it\0oristano.it\0" +"usarts.museum\0net.vn\0" +"gon.pk\0" +"pl.ua\0" +"eastcoast.museum\0" +"novara.it\0" +"k12.ks.us\0" +"dp.ua\0" +"nesseby.no\0" +"!pref.wakayama.jp\0" +"repbody.aero\0" +"jamison.museum\0lugansk.ua\0" +"ss.it\0" +"alessandria.it\0" +"hadsel.no\0net.ws\0" +"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" +"veterinaire.fr\0leirfjord.no\0" +"massacarrara.it\0north.museum\0" +"project.museum\0" +"other.nf\0" +"k12.nh.us\0" +"mat.br\0artgallery.museum\0" +"sr.gov.pl\0" +"gamvik.no\0" +"info.ec\0lancashire.museum\0" +"fm.br\0ltd.co.im\0" +"americana.museum\0southwest.museum\0cc.ak.us\0" +"enna.it\0lunner.no\0" +"v\xc3\xa5gan.no\0" +"mari.ru\0" +"accident-investigation.aero\0" +"sor-aurdal.no\0lib.ny.us\0" +"novosibirsk.ru\0" +"bjugn.no\0" +"n\xc3\xa6r\xc3\xb8y.no\0ostrowwlkp.pl\0" +"info.bb\0foundation.museum\0" +"brand.se\0" +"info.at\0!pref.akita.jp\0l\xc3\xb8ten.no\0" +"coal.museum\0miners.museum\0" +"glass.museum\0" +"info.az\0" +"frog.museum\0szczytno.pl\0nov.ru\0" +"sunndal.no\0" +"gen.in\0" +"gx.cn\0" +"web.co\0*.mie.jp\0hobol.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0" +"logistics.aero\0plo.ps\0" +"erotika.hu\0" +"torsken.no\0" +"exeter.museum\0" +"info.co\0" +"selje.no\0" +"storfjord.no\0" +"barum.no\0lind\xc3\xa5s.no\0" +"leasing.aero\0" +"championship.aero\0fst.br\0" +"lierne.no\0" +"!gobiernoelectronico.ar\0""1.bg\0" +"corporation.museum\0" +"al.it\0*.miyagi.jp\0" +"*.aomori.jp\0" +"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"amursk.ru\0" +"vestvagoy.no\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0cc.fl.us\0" +"os.hordaland.no\0" +"pistoia.it\0" +"tver.ru\0e.se\0" +"res.in\0*.yamagata.jp\0syzran.ru\0" +"capebreton.museum\0sandnessj\xc3\xb8""en.no\0" +"ternopil.ua\0" +"shop.pl\0" +"tank.museum\0" +"m\xc3\xa5s\xc3\xb8y.no\0" +"potenza.it\0time.museum\0" +"mjondalen.no\0" +"eng.br\0nedre-eiker.no\0" +"air-surveillance.aero\0" +"nt.au\0am.br\0pn.it\0" +"oystre-slidre.no\0ug.gov.pl\0" +"g.bg\0nesodden.no\0vologda.ru\0" +"parma.it\0tula.ru\0" +"*.nara.jp\0ak.us\0" +"nt.ca\0konin.pl\0" +"kiev.ua\0" +"skierv\xc3\xa1.no\0vestre-toten.no\0" +"ri.it\0botanical.museum\0farsund.no\0veg\xc3\xa5rshei.no\0dagestan.ru\0" +"ind.br\0k-uralsk.ru\0" +"rahkkeravju.no\0cmw.ru\0" +"canada.museum\0" +"fm.it\0" +"cc.wi.us\0" +"web.id\0aver\xc3\xb8y.no\0" +"dudinka.ru\0" +"baghdad.museum\0fitjar.no\0grane.no\0" +"gs.fm.no\0" +"sumy.ua\0" +"al.no\0" +"westfalen.museum\0" +"oregon.museum\0" +"bruxelles.museum\0elk.pl\0" +"planetarium.museum\0sn\xc3\xa5""ase.no\0" +"s\xc3\xb8rreisa.no\0" +"gs.st.no\0skien.no\0" +"bible.museum\0ivanovo.ru\0" +"avellino.it\0" +"tgory.pl\0" +"family.museum\0" +"ppg.br\0k12.as.us\0" +"trader.aero\0gorlice.pl\0" +"cc.al.us\0" +"ogliastra.it\0" +"is.it\0lib.nv.us\0" +"dr.na\0" +"media.hu\0nesna.no\0fl.us\0" +"uri.arpa\0" +"bjerkreim.no\0" +"charter.aero\0" +"genova.it\0" +"it.ao\0botany.museum\0hapmir.no\0" +"educational.museum\0" +"helsinki.museum\0" +"memorial.museum\0" +"web.lk\0pharmacy.museum\0" +"aircraft.aero\0appspot.com\0" +"ferrara.it\0beskidy.pl\0" +"hi.cn\0" +"taxi.aero\0flekkefjord.no\0" +"varoy.no\0" +"ragusa.it\0ambulance.museum\0" +"can.museum\0" +"*.osaka.jp\0isleofman.museum\0fm.no\0warmia.pl\0" +"educator.aero\0asmatart.museum\0" +"mi.it\0" +"kutno.pl\0" +"skedsmokorset.no\0" +"2.bg\0" +"*.kagoshima.jp\0km.ua\0" +"!city.sendai.jp\0" +"web.nf\0st.no\0cc.ri.us\0" +"reggiocalabria.it\0" +"wi.us\0" +"ancona.it\0newjersey.museum\0nnov.ru\0" +"f.se\0" +"ind.in\0" +"info.vn\0" +"andoy.no\0" +"ch.it\0fredrikstad.no\0guovdageaidnu.no\0" +"fjaler.no\0" +"sa.com\0" +"gs.nt.no\0" +"masfjorden.no\0" +"pordenone.it\0" +"po.it\0basel.museum\0" +"chambagri.fr\0" +"h.bg\0web.pk\0" +"london.museum\0" +"sciencecenter.museum\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"unbi.ba\0augustow.pl\0" +"wolomin.pl\0" +"notaires.fr\0tcm.museum\0al.us\0" +"nu.ca\0!pref.nagano.jp\0" +"info.tn\0" +"lib.wa.us\0" +"ed.ao\0info.tt\0" +"barreau.bj\0" +"k12.wy.us\0" +"pp.az\0gop.pk\0" +"int\0" +"l\xc3\xb8renskog.no\0podhale.pl\0" +"voagat.no\0" +"telekommunikation.museum\0" +"qld.au\0" +"te.it\0freiburg.museum\0snasa.no\0" +"gjemnes.no\0" +"sejny.pl\0" +"media.pl\0" +"skjak.no\0" +"watchandclock.museum\0" +"ed.ci\0pacific.museum\0" +"theater.museum\0info.ro\0" +"uk.com\0" +"campobasso.it\0aquarium.museum\0tysv\xc3\xa6r.no\0" +"kragero.no\0" +"windmill.museum\0info.sd\0" +"sologne.museum\0sande.m\xc3\xb8re-og-romsdal.no\0" +"nt.no\0cc.mi.us\0" +"ed.cr\0" +"academy.museum\0zachpomor.pl\0" +"tananger.no\0v\xc3\xa1rgg\xc3\xa1t.no\0ri.us\0" +"federation.aero\0" +"web.tj\0" +"matta-varjjat.no\0" +"steigen.no\0" +"local\0akrehamn.no\0" +"!pref.chiba.jp\0info.pk\0" +"info.pl\0""6bone.pl\0" +"klepp.no\0kherson.ua\0" +"ketrzyn.pl\0info.pr\0" +"sweden.museum\0" +"lardal.no\0" +"!retina.ar\0gz.cn\0" +"barletta-trani-andria.it\0vikna.no\0" +"bearalv\xc3\xa1hki.no\0" +"broker.aero\0gov.nc.tr\0" +"info.na\0k12.fl.us\0" +"hembygdsforbund.museum\0" +"entertainment.aero\0jerusalem.museum\0l\xc3\xa6rdal.no\0" +"hitra.no\0sogndal.no\0" +"farmequipment.museum\0info.mv\0info.nf\0\xc3\xa5lg\xc3\xa5rd.no\0" +"la-spezia.it\0" +"skanland.no\0fam.pk\0" +"skole.museum\0" +"art.museum\0" +"presidio.museum\0" +"3.bg\0public.museum\0" +"h\xc3\xb8yanger.no\0zagan.pl\0" +"an.it\0" +"philadelphia.museum\0info.nr\0" +"pesarourbino.it\0g\xc3\xa1ivuotna.no\0" +"poltava.ua\0" +"nt.ro\0" +"station.museum\0" +"mi.th\0" +"altoadige.it\0" +"nu.it\0" +"usculture.museum\0g.se\0" +"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" +"daegu.kr\0info.la\0" +"dovre.no\0" +"ci.it\0horology.museum\0" +"bergbau.museum\0" +"press.museum\0" +"gangwon.kr\0" +"!city.kitakyushu.jp\0sor-varanger.no\0cc.hi.us\0" +"fuossko.no\0" +"zp.ua\0" +"american.museum\0" +"fl\xc3\xa5.no\0mi.us\0" +"i.bg\0" +"od.ua\0" +"encyclopedic.museum\0" +"ind.tn\0" +"midatlantic.museum\0" +"newyork.museum\0" +"castres.museum\0" +"act.edu.au\0" +"topology.museum\0" +"ed.jp\0" +"of.by\0" +"iris.arpa\0inf.br\0askim.no\0pyatigorsk.ru\0" +"nord-fron.no\0nsn.us\0" +"beardu.no\0" +"agrar.hu\0corvette.museum\0chtr.k12.ma.us\0" +"figueres.museum\0" +"!pref.gunma.jp\0medizinhistorisches.museum\0" +"tjeldsund.no\0" +"nebraska.museum\0" +"bellevue.museum\0" +"abo.pa\0k12.al.us\0" +"info.ki\0" +"inf.cu\0sv.it\0" +"jfk.museum\0" +"!city.osaka.jp\0swinoujscie.pl\0" +"bydgoszcz.pl\0" +"!city.kyoto.jp\0" +"uvic.museum\0" +"madrid.museum\0steinkjer.no\0" +"lib.ma.us\0" +"sirdal.no\0" +"n\xc3\xb8tter\xc3\xb8y.no\0" +"taranto.it\0starnberg.museum\0" +"vic.gov.au\0pvt.ge\0pors\xc3\xa1\xc5\x8bgu.no\0" +"naroy.no\0ris\xc3\xb8r.no\0" +"va.it\0salem.museum\0starachowice.pl\0" +"!nawrastelecom.om\0" +"town.museum\0te.ua\0" +"se.net\0" +"kemerovo.ru\0" +"lerdal.no\0" +"gs.va.no\0" +"kms.ru\0" +"consulado.st\0" +"haram.no\0" +"tysnes.no\0" +"!pref.ibaraki.jp\0hamburg.museum\0" +"\xc3\xa5rdal.no\0" +"airline.aero\0" +"crew.aero\0newhampshire.museum\0" +"muenster.museum\0" +"aerodrome.aero\0" +"heroy.nordland.no\0belau.pw\0" +"kamchatka.ru\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0lillehammer.no\0hi.us\0" +"hk.cn\0" +"!city.kobe.jp\0berlevag.no\0" +"ardal.no\0" +"askoy.no\0" +"vardo.no\0" +"fyresdal.no\0" +"sassari.it\0" +"video.hu\0drammen.no\0" +"lyngen.no\0nakhodka.ru\0" +"ip6.arpa\0games.hu\0" +"online.museum\0" +"k12.sd.us\0" +"4.bg\0sebastopol.ua\0" +"ao.it\0atlanta.museum\0" +"lebork.pl\0" +"ravenna.it\0" +"railway.museum\0songdalen.no\0" +"!pref.shimane.jp\0delaware.museum\0ed.pw\0" +"f\xc3\xb8rde.no\0" +"living.museum\0" +"juif.museum\0" +"lomza.pl\0" +"h.se\0" +"!bl.uk\0" +"portland.museum\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" +"stj\xc3\xb8rdal.no\0" +"lecce.it\0" +"bz.it\0" +"farmstead.museum\0va.no\0" +"express.aero\0!nacion.ar\0" +"presse.km\0gs.of.no\0" +"\xe5\x8f\xb0\xe7\x81\xa3\0" +"og.ao\0gyeongbuk.kr\0vestv\xc3\xa5g\xc3\xb8y.no\0" +"prd.fr\0" +"pp.ru\0pp.se\0" +"forum.hu\0!pref.saga.jp\0" +"kvalsund.no\0" +"!city.kawasaki.jp\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"j.bg\0" +"vlaanderen.museum\0" +"cc.va.us\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0alabama.museum\0" +"school.museum\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" +"\xc3\xa5seral.no\0" +"traniandriabarletta.it\0" +"flog.br\0" +"presse.ml\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"historisch.museum\0" +"farm.museum\0palmsprings.museum\0oslo.no\0dyroy.no\0stranda.no\0" +"gs.rl.no\0r\xc3\xa5""de.no\0" +"bomlo.no\0s\xc3\xb8rum.no\0" +"jan-mayen.no\0ivgu.no\0" +"coop\0" +"agr.br\0k12.ak.us\0" +"!nic.ar\0catanzaro.it\0fusa.no\0" +"hu.com\0" +"inf.mk\0" +"vet.br\0" +"k12.mt.us\0k12.nd.us\0" +"vlog.br\0\xe5\x85\xac\xe5\x8f\xb8.cn\0sandnessjoen.no\0" +"lib.az.us\0" +"nsw.edu.au\0of.no\0\xc3\xb8stre-toten.no\0" +"*.okinawa.jp\0" +"vb.it\0" +"asso.fr\0firenze.it\0" +"trieste.it\0" +"\xe5\x85\xac\xe5\x8f\xb8.hk\0" +"museet.museum\0" +"prd.km\0" +"navuotna.no\0lib.ca.us\0" +"cc.nv.us\0" +"asso.gp\0" +"meraker.no\0" +"h\xc3\xa1pmir.no\0" +"i.ph\0" +"sx.cn\0jeonnam.kr\0" +"halden.no\0" +"fed.us\0" +"medio-campidano.it\0tsk.ru\0" +"barcelona.museum\0" +"giessen.museum\0roma.museum\0" +"hl.cn\0" +"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" +"biz.bb\0benevento.it\0rl.no\0bygland.no\0" +"port.fr\0asso.ht\0prd.mg\0" +"biz.at\0" +"tra.kp\0" +"*.aichi.jp\0khabarovsk.ru\0" +"campidano-medio.it\0" +"biz.az\0" +"newmexico.museum\0va.us\0" +"finearts.museum\0" +"murmansk.ru\0" +"\xc3\xb8rsta.no\0radom.pl\0k12.sc.us\0" +"5.bg\0kvinesdal.no\0" +"ap.it\0" +"*.fukushima.jp\0" +"asso.bj\0" +"mad.museum\0" +"lebesby.no\0" +"og.it\0glas.museum\0sauda.no\0" +"i.se\0" +"k12.tx.us\0" +"asso.ci\0mk.ua\0" +"cesena-forli.it\0" +"lowicz.pl\0" +"k12.id.us\0" +"tas.gov.au\0" +"lukow.pl\0" +"utazas.hu\0" +"maritimo.museum\0bjark\xc3\xb8y.no\0" +"adm.br\0" +"pr.it\0lib.vi.us\0" +"bergamo.it\0k12.va.us\0" +"k.bg\0" +"railroad.museum\0" +"!british-library.uk\0" +"cincinnati.museum\0" +"sorreisa.no\0" +"asso.dz\0!nel.uk\0" +"rm.it\0" +"nv.us\0" +"nx.cn\0gos.pk\0" +"vic.edu.au\0" +"biella.it\0tjome.no\0" +"r\xc3\xb8yken.no\0" +"beiarn.no\0" +"qc.ca\0" +"georgia.museum\0square.museum\0" +"labor.museum\0omasvuotna.no\0cc.la.us\0" +"br.com\0reggioemilia.it\0" +"kristiansund.no\0" +"sorum.no\0" +"orsta.no\0" +"furniture.museum\0surrey.museum\0eng.pro\0" +"asn.lv\0balat.no\0" +"lavangen.no\0sld.pa\0" +"fla.no\0k12.ms.us\0k12.nc.us\0" +"bardu.no\0" +"donostia.museum\0" +"club.tw\0" +"elburg.museum\0" +"gs.hl.no\0lodingen.no\0" +"samara.ru\0" +"vc.it\0*.nagasaki.jp\0" +"fosnes.no\0" +"fuel.aero\0" +"qc.com\0" +"skjervoy.no\0" +"bill.museum\0kv\xc3\xa6""fjord.no\0" +"skydiving.aero\0*.tokushima.jp\0" +"!congresodelalengua3.ar\0laquila.it\0k12.ct.us\0" +"gorge.museum\0linz.museum\0sherbrooke.museum\0" +"tranoy.no\0ing.pa\0" +"ptz.ru\0" +"kr.it\0prato.it\0stat.no\0" +"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" +"cosenza.it\0" +"stj\xc3\xb8rdalshalsen.no\0" +"finland.museum\0leka.no\0cc.pr.us\0" +"historichouses.museum\0s\xc3\xa1l\xc3\xa1t.no\0" +"venice.it\0" +"biz.ki\0" +"g\xc3\xa1ls\xc3\xa1.no\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0" +"*.yamanashi.jp\0" +"rad\xc3\xb8y.no\0" +"6.bg\0" +"fareast.ru\0" +"paragliding.aero\0ba.it\0aq.it\0" +"sk\xc3\xa5nland.no\0" +"its.me\0" +"us.na\0" +"hl.no\0cc.ga.us\0" +"ac\0granvin.no\0" +"ad\0qld.edu.au\0!city.sapporo.jp\0" +"ae\0" +"af\0" +"ag\0crotone.it\0" +"dallas.museum\0" +"ai\0brussels.museum\0" +"dali.museum\0" +"la.us\0" +"al\0salzburg.museum\0" +"am\0" +"an\0cl.it\0" +"ao\0" +"aq\0ba\0" +"bb\0" +"as\0lajolla.museum\0" +"at\0" +"be\0" +"bf\0inderoy.no\0snz.ru\0" +"aw\0bg\0" +"ax\0bh\0cim.br\0ltd.gi\0biz.mv\0" +"bi\0xz.cn\0\xe7\xb5\x84\xe7\xb9\x94.hk\0biz.mw\0" +"az\0bj\0" +"bm\0tranibarlettaandria.it\0naamesjevuemie.no\0" +"chattanooga.museum\0" +"bo\0" +"l.bg\0" +"ca\0" +"br\0stateofdelaware.museum\0" +"bs\0cc\0" +"cd\0biz.nr\0" +"cf\0berlev\xc3\xa5g.no\0" +"bw\0cg\0snaase.no\0" +"ch\0harvestcelebration.museum\0ck.ua\0" +"by\0ci\0" +"bz\0bahccavuotna.no\0" +"cl\0yuzhno-sakhalinsk.ru\0" +"cm\0halsa.no\0lyngdal.no\0" +"cn\0" +"co\0rn.it\0childrens.museum\0frankfurt.museum\0" +"cr\0" +"pskov.ru\0" +"cu\0de\0" +"cv\0fr.it\0lib.ky.us\0" +"aseral.no\0kvam.no\0" +"cx\0hellas.museum\0" +"hof.no\0" +"cz\0dj\0k12.la.us\0" +"dk\0moscow.museum\0" +"sosnowiec.pl\0" +"dm\0biz.pk\0" +"schokoladen.museum\0biz.pl\0" +"far.br\0arna.no\0tynset.no\0" +"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0" +"ec\0" +"biz.pr\0" +"ee\0celtic.museum\0" +"scientist.aero\0modern.museum\0" +"pr.us\0" +"dz\0" +"mj\xc3\xb8ndalen.no\0s\xc3\xb8r-odal.no\0" +"!nic.tr\0" +"conference.aero\0vestnes.no\0k12.mn.us\0" +"!pref.hiroshima.jp\0" +"es\0trapani.it\0" +"fermo.it\0vard\xc3\xb8.no\0" +"eu\0gs.hm.no\0r\xc3\xb8""d\xc3\xb8y.no\0stordal.no\0" +"gc.ca\0!nhs.uk\0" +"jgora.pl\0" +"fi\0stjordal.no\0" +"fm\0!mediaphone.om\0" +"kirov.ru\0pvt.k12.ma.us\0" +"fo\0" +"ga\0hyllestad.no\0" +"gov.ac\0fr\0andriabarlettatrani.it\0ga.us\0" +"gov.ae\0gd\0estate.museum\0" +"gov.af\0ge\0tolga.no\0" +"gf\0asso.re\0cc.oh.us\0" +"gg\0florida.museum\0" +"presse.ci\0gh\0" +"gi\0k12.dc.us\0" +"ltd.lk\0orland.no\0" +"gov.al\0" +"gl\0tokke.no\0" +"hanggliding.aero\0gm\0" +"hareid.no\0" +"gov.ba\0tj.cn\0gp\0" +"gov.bb\0gq\0" +"gov.as\0gr\0agrigento.it\0lc.it\0" +"gs\0kalmykia.ru\0aero.tt\0" +"gov.bf\0" +"county.museum\0" +"gov.bh\0hn.cn\0gw\0" +"gov.az\0gy\0assn.lk\0guernsey.museum\0" +"hk\0" +"gov.bm\0h\xc3\xa6gebostad.no\0biz.tj\0" +"hm\0computer.museum\0" +"gov.bo\0hn\0kl\xc3\xa6""bu.no\0" +"pulawy.pl\0" +"gov.br\0" +"trd.br\0gov.bs\0hr\0reggio-calabria.it\0historyofscience.museum\0lipetsk.ru\0" +"gov.cd\0*.nagoya.jp\0" +"ht\0id\0spjelkavik.no\0" +"hu\0ie\0aero.mv\0" +"marketplace.aero\0mn.it\0biz.tt\0" +"gov.by\0saintlouis.museum\0mer\xc3\xa5ker.no\0" +"gov.bz\0" +"7.bg\0gov.cl\0virtual.museum\0" +"gov.cm\0vennesla.no\0kr.ua\0" +"gov.cn\0im\0ar.it\0galsa.no\0rovno.ua\0" +"gov.co\0in\0" +"io\0limanowa.pl\0" +"iq\0k12.ga.us\0" +"ir\0" +"riik.ee\0is\0\xc3\xa1laheadju.no\0" +"gov.cu\0it\0hawaii.museum\0seaport.museum\0" +"je\0pubol.museum\0hm.no\0" +"gov.cx\0" +"*.chiba.jp\0" +"*.kawasaki.jp\0" +"k.se\0" +"gov.dm\0" +"aland.fi\0vik.no\0" +"yk.ca\0jo\0kobierzyce.pl\0" +"jp\0biz.vn\0" +"presse.fr\0lib.il.us\0\xe9\xa6\x99\xe6\xb8\xaf\0" +"gov.ec\0" +"transport.museum\0bronnoy.no\0" +"slg.br\0gov.ee\0asso.nc\0bievat.no\0" +"nyny.museum\0" +"kg\0" +"mo-i-rana.no\0" +"gov.dz\0ki\0" +"monmouth.museum\0" +"suldal.no\0" +"bc.ca\0km\0zt.ua\0" +"pt.it\0kn\0" +"fineart.museum\0" +"la\0" +"kr\0gulen.no\0" +"m.bg\0mo.cn\0lc\0alaheadju.no\0g\xc3\xa1\xc5\x8bgaviika.no\0" +"nowaruda.pl\0cc.ut.us\0" +"br\xc3\xb8nn\xc3\xb8y.no\0" +"ky\0li\0overhalla.no\0" +"kz\0khv.ru\0" +"lk\0" +"artdeco.museum\0" +"ma\0fortworth.museum\0kostroma.ru\0" +"ro.it\0kirkenes.no\0vestby.no\0" +"urbino-pesaro.it\0ls\0mc\0alstahaug.no\0" +"blog.br\0gov.ge\0lt\0md\0" +"lu\0me\0botanicgarden.museum\0" +"gov.gg\0lv\0oh.us\0" +"gov.gh\0mg\0valley.museum\0" +"gov.gi\0mh\0" +"ly\0sandiego.museum\0" +"mk\0" +"ml\0" +"gov.gn\0rollag.no\0naklo.pl\0" +"mn\0" +"mo\0" +"mp\0leirvik.no\0" +"gov.gr\0mq\0na\0cc.ks.us\0" +"mr\0" +"ms\0nc\0" +"valer.hedmark.no\0" +"mu\0ne\0" +"mv\0nf\0" +"mw\0" +"mx\0nord-odal.no\0jur.pro\0" +"my\0" +"gov.hk\0name.hr\0" +"nl\0" +"astronomy.museum\0lib.nm.us\0" +"catania.it\0" +"no\0" +"skjerv\xc3\xb8y.no\0" +"k12.ne.us\0" +"monza-e-della-brianza.it\0!pref.fukushima.jp\0nr\0" +"gov.ie\0" +"stuttgart.museum\0nu\0cc.mn.us\0" +"karasjohka.no\0" +"engine.aero\0bearalvahki.no\0" +"oyer.no\0" +"ve.it\0" +"gov.im\0froland.no\0cc.ar.us\0" +"gov.in\0magadan.ru\0" +"pescara.it\0" +"gov.iq\0usdecorativearts.museum\0" +"gov.ir\0pa\0" +"gov.is\0" +"gov.it\0lavagis.no\0" +"gov.je\0" +"naustdal.no\0pe\0k12.or.us\0" +"gd.cn\0carraramassa.it\0pf\0" +"ph\0" +"cc.ny.us\0" +"rissa.no\0" +"info\0pk\0pomorze.pl\0" +"pl\0" +"gov.jo\0asso.km\0pn\0" +"*.okayama.jp\0cieszyn.pl\0" +"freight.aero\0" +"pr\0" +"narvik.no\0ps\0" +"!pref.aichi.jp\0elverum.no\0pt\0" +"edunet.tn\0" +"gov.kg\0" +"flatanger.no\0marker.no\0pw\0" +"gov.ki\0nuremberg.museum\0" +"aip.ee\0" +"gov.km\0" +"gov.kn\0" +"gov.kp\0" +"rieti.it\0gov.la\0bajddar.no\0" +"gov.lb\0aviation.museum\0" +"gov.lc\0" +"asso.mc\0" +"re\0" +"ut.us\0" +"sa.gov.au\0gov.ky\0" +"mo.it\0gov.kz\0" +"gov.lk\0" +"iraq.museum\0" +"badajoz.museum\0" +"8.bg\0inder\xc3\xb8y.no\0" +"monticello.museum\0ro\0ks.ua\0" +"gov.ma\0svizzera.museum\0" +"gov.lr\0sa\0" +"matera.it\0sb\0" +"gov.lt\0rs\0sc\0" +"gov.me\0sd\0" +"gov.lv\0ru\0se\0" +"gov.mg\0" +"rw\0sg\0" +"gov.ly\0assisi.museum\0kids.museum\0sh\0" +"si\0" +"gov.mk\0" +"gov.ml\0sk\0" +"sl\0" +"gov.mn\0airguard.museum\0sm\0" +"gov.mo\0l.se\0sn\0" +"so\0" +"gov.mr\0ks.us\0" +"name.az\0sr\0" +"naturhistorisches.museum\0tc\0" +"trainer.aero\0cn.it\0urbinopesaro.it\0gov.mu\0nativeamerican.museum\0st\0td\0" +"gov.mv\0su\0" +"trentino.it\0gov.mw\0gov.ng\0tf\0" +"tg\0" +"co.ae\0venezia.it\0gov.my\0th\0" +"!pref.ehime.jp\0sy\0" +"co.ag\0lewismiller.museum\0ostrowiec.pl\0sz\0tj\0" +"tk\0" +"motorcycle.museum\0tl\0" +"birdart.museum\0trogstad.no\0tm\0" +"tn\0" +"humanities.museum\0to\0" +"pu.it\0gov.nr\0ua\0lib.ut.us\0" +"co.ao\0" +"co.ba\0trondheim.no\0tt\0" +"in-addr.arpa\0tempioolbia.it\0!city.yokohama.jp\0mn.us\0" +"n.bg\0schoenbrunn.museum\0tv\0" +"co.at\0aremark.no\0tw\0ug\0" +"jus.br\0" +"co.bi\0bialowieza.pl\0ar.us\0" +"audnedaln.no\0kustanai.ru\0" +"va\0" +"us\0vc\0" +"newport.museum\0" +"kopervik.no\0gov.ph\0vg\0" +"ny.us\0vi\0" +"co.bw\0finn\xc3\xb8y.no\0gov.pk\0uz\0" +"honefoss.no\0gov.pl\0lanbib.se\0" +"co.ci\0" +"gov.pn\0intl.tn\0" +"act.gov.au\0vn\0" +"television.museum\0gov.pr\0" +"sykkylven.no\0v\xc3\xa5ler.hedmark.no\0gov.ps\0" +"gov.pt\0" +"co.cr\0vu\0" +"legnica.pl\0" +"sa.au\0" +"bjarkoy.no\0" +"openair.museum\0birkenes.no\0lib.nj.us\0" +"fylkesbibl.no\0holt\xc3\xa5len.no\0" +"iz.hr\0" +"ws\0" +"oceanographique.museum\0" +"b\xc3\xa1id\xc3\xa1r.no\0cc.mo.us\0" +"\xc3\xb8ygarden.no\0" +"contemporary.museum\0" +"gb.com\0cc.as.us\0" +"belluno.it\0gov.sa\0" +"gov.sb\0" +"gov.rs\0gov.sc\0" +"gov.sd\0" +"!pref.nagasaki.jp\0gov.ru\0" +"asia\0" +"sa.cr\0gov.rw\0gov.sg\0" +"kuzbass.ru\0" +"gs.vf.no\0" +"gov.sl\0" +"norfolk.museum\0" +"k12.de.us\0" +"mil\0" +"rendalen.no\0" +"gov.st\0" +"agro.pl\0" +"orkdal.no\0" +"le.it\0gov.sy\0" +"gov.tj\0" +"co.gg\0nore-og-uvdal.no\0v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"gov.tl\0" +"gov.tn\0" +"gov.to\0" +"kids.us\0" +"equipment.aero\0gov.ua\0" +"!city.niigata.jp\0gov.tt\0" +"sel.no\0" +"l\xc3\xa4ns.museum\0" +"gov.tw\0" +"rennebu.no\0" +"egersund.no\0" +"medecin.km\0" +"co.gy\0" +"!mecon.ar\0" +"berlin.museum\0" +"carrara-massa.it\0" +"9.bg\0" +"pri.ee\0gov.vc\0" +"at.it\0" +"muosat.no\0" +"co.id\0" +"co.hu\0" +"etne.no\0" +"\xc3\xa1lt\xc3\xa1.no\0" +"gov.vn\0" +"modelling.aero\0" +"co.im\0" +"co.in\0\xc3\xa5krehamn.no\0m.se\0" +"gouv.fr\0*.kitakyushu.jp\0" +"narviika.no\0" +"rennes\xc3\xb8y.no\0" +"co.ir\0afjord.no\0" +"lea\xc5\x8bgaviika.no\0buryatia.ru\0" +"co.it\0coastaldefence.museum\0" +"co.je\0vf.no\0" +"osteroy.no\0" +"uslivinghistory.museum\0" +"aerobatic.aero\0" +"mesaverde.museum\0mining.museum\0" +"a\xc3\xa9roport.ci\0gov.ws\0" +"co.jp\0copenhagen.museum\0" +"pv.it\0" +"r\xc3\xb8mskog.no\0" +"vossevangen.no\0porsanger.no\0" +"salat.no\0mo.us\0" +"o.bg\0imperia.it\0carrier.museum\0" +"carbonia-iglesias.it\0" +"as.us\0" +"alvdal.no\0" +"state.museum\0mandal.no\0cn.ua\0" +"cuneo.it\0" +"gouv.ht\0" +"!city.okayama.jp\0co.kr\0" +"co.lc\0" +"sa.it\0" +"donna.no\0" +"sortland.no\0" +"tomsk.ru\0" +"birthplace.museum\0l\xc3\xb8""dingen.no\0" +"ge.it\0orenburg.ru\0" +"cn.com\0" +"co.ma\0" +"co.ls\0skaun.no\0name.vn\0" +"navigation.aero\0" +"cagliari.it\0co.me\0portal.museum\0" +"gouv.bj\0" +"udine.it\0" +"engineer.aero\0" +"szczecin.pl\0" +"wales.museum\0" +"co.na\0bo.telemark.no\0" +"austin.museum\0" +"k12.mo.us\0" +"co.mu\0" +"gouv.ci\0" +"co.mw\0" +"esp.br\0" +"naturalhistorymuseum.museum\0" +"mosjoen.no\0" +"solund.no\0" +"name.tj\0" +"sand\xc3\xb8y.no\0" +"kunstunddesign.museum\0" +"cartoonart.museum\0collection.museum\0gsm.pl\0" +"aure.no\0" +"!pref.yamaguchi.jp\0historical.museum\0" +"name.tt\0" +"england.museum\0valle.no\0" +"cc.ok.us\0" +"salangen.no\0" +"gloppen.no\0" +"cc.co.us\0" +"contemporaryart.museum\0" +"tas.edu.au\0" +"trading.aero\0" +"mazury.pl\0" +"!pref.aomori.jp\0co.pl\0" +"opoczno.pl\0" +"*.kobe.jp\0co.pn\0" +"oppegard.no\0" +"co.pw\0" +"saltdal.no\0smolensk.ru\0" +"na.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0" +"vgs.no\0evenassi.no\0" +"parachuting.aero\0jl.cn\0maritime.museum\0bd.se\0" +"badaddja.no\0" +"bergen.no\0" +"brussel.museum\0" +"avoues.fr\0" +"cesenaforli.it\0" +"oregontrail.museum\0" +"ullensaker.no\0" +"jobs\0" +"accident-prevention.aero\0" +"n.se\0" +"association.museum\0california.museum\0" +"cultural.museum\0co.rs\0" +"zoology.museum\0" +"pruszkow.pl\0" +"control.aero\0nt.edu.au\0net\0komforb.se\0" +"lincoln.museum\0aurland.no\0name.pr\0co.rw\0" +"ostroleka.pl\0" +"isernia.it\0" +"tm.fr\0" +"gs.ol.no\0" +"nb.ca\0marnardal.no\0" +"williamsburg.museum\0" +"!jet.uk\0" +"suisse.museum\0\xc3\xa5""fjord.no\0flakstad.no\0" +"karmoy.no\0" +"yn.cn\0chesapeakebay.museum\0" +"nsw.au\0" +"amur.ru\0co.st\0" +"imb.br\0siellak.no\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"name.na\0" +"co.th\0" +"p.bg\0" +"co.sz\0co.tj\0" +"name.mv\0\xc3\xa5lesund.no\0lib.in.us\0" +"lucerne.museum\0naumburg.museum\0" +"society.museum\0name.my\0" +"tinn.no\0" +"co.tt\0" +"unj\xc3\xa1rga.no\0" +"co.ug\0" +"lib.wy.us\0" +"co.tz\0" +"ass.km\0" +"ok.us\0" +"tm.hu\0kongsvinger.no\0" +"ibestad.no\0" +"juedisches.museum\0co.us\0" +"cq.cn\0" +"rs.ba\0" +"wa.edu.au\0co.vi\0" +"co.uz\0" +"health.museum\0" +"grue.no\0" +"automotive.museum\0journalism.museum\0settlement.museum\0" +"qh.cn\0interactive.museum\0" +"snillfjord.no\0!national-library-scotland.uk\0" +"balsfjord.no\0lib.nh.us\0" +"kolobrzeg.pl\0" +"gs.tm.no\0" +"h\xc3\xb8nefoss.no\0" +"ol.no\0" +"music.museum\0moareke.no\0" +"b\xc3\xb8.nordland.no\0" +"name.mk\0lier.no\0" +"eidfjord.no\0" +"sc.cn\0tm.km\0" +"jelenia-gora.pl\0sanok.pl\0" +"intelligence.museum\0" +"srv.br\0elblag.pl\0" +"judygarland.museum\0" +"padua.it\0" +"k12.co.us\0" +"lindesnes.no\0" +"name.jo\0izhevsk.ru\0" +"yorkshire.museum\0mel\xc3\xb8y.no\0" +"tm.mc\0lib.pr.us\0" +"hjartdal.no\0" +"tm.mg\0" +"bari.it\0milano.it\0" +"lg.jp\0" +"zgrad.ru\0" +"sm\xc3\xb8la.no\0" +"communications.museum\0" +"arts.co\0seoul.kr\0engerdal.no\0" +"oster\xc3\xb8y.no\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0foggia.it\0verran.no\0" +"orskog.no\0voronezh.ru\0kv.ua\0" +"av.it\0" +"tm.no\0nissedal.no\0" +"historisches.museum\0gs.mr.no\0" +"medecin.fr\0" +"montreal.museum\0" +"o.se\0" +"!metro.tokyo.jp\0sola.no\0" +"k12.tn.us\0" +"floro.no\0" +"milan.it\0*.shiga.jp\0" +"berkeley.museum\0" +"maintenance.aero\0" +"ws.na\0" +"lindas.no\0cc.ia.us\0" +"brescia.it\0embroidery.museum\0" +"arezzo.it\0tm.pl\0" +"r\xc3\xa6lingen.no\0" +"burghof.museum\0" +"rec.br\0" +"q.bg\0" +"!nawras.om\0" +"hammarfeasta.no\0" +"moss.no\0" +"on.ca\0" +"gouv.rw\0" +"luxembourg.museum\0" +"rec.co\0british.museum\0" +"reggio-emilia.it\0" +"gouv.sn\0lib.wv.us\0" +"avocat.fr\0" +"simbirsk.ru\0" +"jar.ru\0" +"monza-brianza.it\0" +"tm.ro\0" +"imageandsound.museum\0" +"jpn.com\0mr.no\0" +"siracusa.it\0" +"norilsk.ru\0tm.se\0" +"tn.it\0" +"jeju.kr\0" +"!pref.fukuoka.jp\0" +"*.hyogo.jp\0portlligat.museum\0" +"!pref.osaka.jp\0" +"siena.it\0sc.kr\0omaha.museum\0saskatchewan.museum\0" +"phoenix.museum\0vanylven.no\0" +"botanicalgarden.museum\0" +"turek.pl\0" +"vagsoy.no\0" +"riodejaneiro.museum\0" +"vi.it\0" +"uy.com\0" +"kristiansand.no\0" +"sd.cn\0trento.it\0" +"muncie.museum\0" +"berg.no\0meldal.no\0" +"nes.buskerud.no\0" +"saratov.ru\0" +"gs.oslo.no\0" +"harstad.no\0vaga.no\0" +"research.museum\0" +"brunel.museum\0ia.us\0" +"test.tj\0" +"columbia.museum\0" +"ms.it\0stockholm.museum\0" +"reklam.hu\0" +"pomorskie.pl\0lg.ua\0" +"bg.it\0historicalsociety.museum\0rns.tn\0" +"mallorca.museum\0surgut.ru\0cc.sc.us\0" +"ushistory.museum\0" +"palana.ru\0" +"snoasa.no\0" +"naturalsciences.museum\0" +"yaroslavl.ru\0" +"unjarga.no\0" +"p.se\0" +"ingatlan.hu\0" +"irc.pl\0" +"savona.it\0" +"cr.it\0" +"test.ru\0cc.tn.us\0" +"ms.kr\0museumvereniging.museum\0" +"time.no\0k12.ia.us\0" +"vladimir.ru\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" +"gouv.km\0nationalfirearms.museum\0" +"m\xc3\xa1latvuopmi.no\0" +"aero\0yosemite.museum\0" +"r.bg\0school.na\0" +"cc.vi.us\0" +"*.wakayama.jp\0" +"beauxarts.museum\0averoy.no\0ullensvang.no\0bar.pro\0" +"!city.hiroshima.jp\0" +"b\xc3\xa1hccavuotna.no\0" +"frosta.no\0" +"gdynia.pl\0" +"medical.museum\0" +"embaixada.st\0" +"balsan.it\0vantaa.museum\0" +"za.net\0" +"!city.saitama.jp\0lib.ks.us\0" +"fnd.br\0" +"ru.com\0se.com\0hol.no\0modalen.no\0" +"gouv.ml\0chukotka.ru\0" +"malopolska.pl\0" +"mansion.museum\0" +"iki.fi\0children.museum\0" +"cyber.museum\0rec.nf\0mo\xc3\xa5reke.no\0" +"to.it\0" +"hasvik.no\0" +"\xc3\xb8yer.no\0" +"arts.ro\0sc.ug\0" +"lib.ar.us\0" +"sc.tz\0cc.ms.us\0cc.nc.us\0" +"etc.br\0poznan.pl\0" +"cnt.br\0viking.museum\0" +"*.miyazaki.jp\0" +"melhus.no\0" +"skodje.no\0vevelstad.no\0" +"sc.us\0" +"upow.gov.pl\0" +"!city.fukuoka.jp\0brandywinevalley.museum\0natuurwetenschappen.museum\0tranby.no\0" +"bahn.museum\0msk.ru\0" +"delmenhorst.museum\0" +"russia.museum\0fuoisku.no\0" +"shell.museum\0" +"r\xc3\xa1isa.no\0" +"hs.kr\0udmurtia.ru\0" +"palermo.it\0" +"pilot.aero\0" +"tn.us\0" +"priv.hu\0" +"li.it\0" +"kr\xc3\xa5""anghke.no\0mosreg.ru\0" +"lib.fl.us\0" +"plants.museum\0" +"ulsan.kr\0national.museum\0" +"mil.ac\0!pref.nara.jp\0surgeonshall.museum\0" +"mil.ae\0santacruz.museum\0vi.us\0" +"wlocl.pl\0" +"mt.it\0napoli.it\0alaska.museum\0arts.nf\0" +"missoula.museum\0" +"rec.ro\0" +"mil.al\0" +"marburg.museum\0waw.pl\0" +"pharmaciens.km\0indianapolis.museum\0larsson.museum\0" +"cc.sd.us\0" +"mil.ba\0mobi\0" +"indianmarket.museum\0" +"recreation.aero\0padova.it\0" +"varese.it\0parti.se\0" +"mil.az\0" +"mil.bo\0!pref.kagoshima.jp\0khmelnitskiy.ua\0" +"rygge.no\0" +"os\xc3\xb8yro.no\0" +"mil.br\0" +"cs.it\0" +"austevoll.no\0fjell.no\0" +"mil.by\0" +"!pref.tokushima.jp\0org\0" +"mil.cn\0gs.svalbard.no\0" +"mil.co\0" +"pz.it\0lib.va.us\0\xd1\x80\xd1\x84\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0ms.us\0nc.us\0k12.wi.us\0" +"s.bg\0drangedal.no\0" +"en.it\0" +"culturalcenter.museum\0" +"house.museum\0divttasvuotna.no\0" +"fhs.no\0" +"circus.museum\0" +"priv.at\0" +"mil.ec\0" +"ruovat.no\0" +"midsund.no\0vagan.no\0" +"casadelamoneda.museum\0" +"bristol.museum\0" +"and.museum\0" +"ascolipiceno.it\0computerhistory.museum\0vyatka.ru\0" +"uhren.museum\0" +"lahppi.no\0" +"*.yokohama.jp\0cody.museum\0lib.al.us\0" +"colonialwilliamsburg.museum\0indian.museum\0cc.ky.us\0" +"tp.it\0biev\xc3\xa1t.no\0" +"can.br\0royken.no\0" +"id.ir\0" +"mediocampidano.it\0tromso.no\0" +"kartuzy.pl\0k12.ok.us\0" +"*.saitama.jp\0stjohn.museum\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" +"mil.ge\0trani-barletta-andria.it\0" +"lib.as.us\0" +"swiebodzin.pl\0cc.mt.us\0cc.nd.us\0" +"mil.gh\0" +"science-fiction.museum\0\xd9\x82\xd8\xb7\xd8\xb1\0" +"airtraffic.aero\0" +"konskowola.pl\0" +"scienceandhistory.museum\0nysa.pl\0sd.us\0" +"balestrand.no\0" +"oygarden.no\0" +"her\xc3\xb8y.nordland.no\0" +"!pref.ishikawa.jp\0strand.no\0" +"\xe7\xb5\x84\xe7\xbb\x87.hk\0mil.hn\0" +"gob.bo\0volda.no\0" +"losangeles.museum\0larvik.no\0" +"university.museum\0" +"cc.dc.us\0" +"mil.id\0" +"sorfold.no\0" +"watch-and-clock.museum\0" +"flor\xc3\xb8.no\0" +"nittedal.no\0oppeg\xc3\xa5rd.no\0" +"k12.ri.us\0" +"gob.cl\0" +"komi.ru\0" +"government.aero\0mil.in\0" +"mil.iq\0id.lv\0" +"culture.museum\0" +"id.ly\0" +"raholt.no\0" +"lubin.pl\0grozny.ru\0" +"kchr.ru\0" +"nikolaev.ua\0" +"lib.sd.us\0" +"de.com\0" +"mil.jo\0" +"*.kanagawa.jp\0gaular.no\0miasta.pl\0" +"bi.it\0rnu.tn\0uzhgorod.ua\0" +"idrett.no\0v\xc3\xa5gs\xc3\xb8y.no\0" +"wroclaw.pl\0" +"res.aero\0ne.jp\0mil.kg\0" +"\xc3\xa5mli.no\0" +"education.museum\0" +"dgca.aero\0" +"mil.km\0" +"trolley.museum\0" +"cci.fr\0r.se\0" +"archaeological.museum\0" +"monzaedellabrianza.it\0mil.kr\0" +"gob.es\0kvafjord.no\0ky.us\0" +"lecco.it\0" +"ct.it\0" +"magazine.aero\0" +"operaunite.com\0ne.kr\0" +"mil.kz\0skoczow.pl\0" +"nf.ca\0" +"western.museum\0" +"kunst.museum\0gaivuotna.no\0karpacz.pl\0spb.ru\0cc.id.us\0" +"slask.pl\0" +"youth.museum\0" +"adv.br\0campidanomedio.it\0!songfest.om\0" +"geelvinck.museum\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"mil.lv\0" +"fie.ee\0mil.mg\0mt.us\0nd.us\0k12.vt.us\0" +"t.bg\0ushuaia.museum\0" +"off.ai\0" +"irkutsk.ru\0" +"stor-elvdal.no\0tourism.tn\0" +"penza.ru\0" +"bj.cn\0\xe4\xb8\xad\xe5\x9b\xbd\0" +"civilwar.museum\0mil.mv\0opole.pl\0" +"nes.akershus.no\0" +"mil.my\0karelia.ru\0" +"como.it\0sande.vestfold.no\0" +"\xe4\xb8\xad\xe5\x9c\x8b\0" +"gob.hn\0lib.la.us\0" +"mil.no\0cc.wv.us\0" +"boleslawiec.pl\0" +"!pref.niigata.jp\0gs.sf.no\0dc.us\0k12.mi.us\0" +"museum\0dep.no\0kv\xc3\xa6nangen.no\0l\xc3\xa1hppi.no\0" +"film.museum\0" +"frei.no\0" +"notodden.no\0risor.no\0" +"messina.it\0" +"eidsberg.no\0" +"krakow.pl\0lib.mt.us\0lib.nd.us\0" +"rauma.no\0" +"mulhouse.museum\0" +"sibenik.museum\0grong.no\0mil.pe\0" +"budejju.no\0k12.nv.us\0" +"stavanger.no\0mil.ph\0" +"forli-cesena.it\0" +"naples.it\0cc.ne.us\0" +"s\xc3\xb8r-aurdal.no\0" +"mil.pl\0" +"vibo-valentia.it\0ski.museum\0siedlce.pl\0" +"bus.museum\0" +"tozsde.hu\0" +"!pref.shizuoka.jp\0santabarbara.museum\0" +"zhitomir.ua\0" +"pro.az\0" +"ne.pw\0" +"pro.br\0orkanger.no\0b\xc3\xb8.telemark.no\0" +"roma.it\0cc.ct.us\0" +"heritage.museum\0giske.no\0" +"!pref.kumamoto.jp\0prof.pr\0" +"*.kochi.jp\0" +"andria-barletta-trani.it\0*.toyama.jp\0sveio.no\0" +"id.us\0" +"bolt.hu\0" +"fetsund.no\0porsgrunn.no\0" +"iglesias-carbonia.it\0" +"sf.no\0" +"mil.ru\0" +"from.hr\0asnes.no\0mil.rw\0" +"alesund.no\0sos.pl\0" +"livorno.it\0" +"crafts.museum\0" +"aquila.it\0" +"vega.no\0" +"jewelry.museum\0" +"sk\xc3\xa1nit.no\0chita.ru\0" +"pro.ec\0" +"fortmissoula.museum\0j\xc3\xb8lster.no\0" +"pro\0mil.st\0" +"busan.kr\0lib.ga.us\0" +"dellogliastra.it\0" +"aosta.it\0chungnam.kr\0gob.mx\0" +"mil.sy\0k12.hi.us\0" +"mil.tj\0" +"ulan-ude.ru\0mil.to\0wv.us\0" +"luster.no\0volgograd.ru\0" +"pa.it\0kommunalforbund.se\0lib.tx.us\0" +"s.se\0" +"qsl.br\0" +"mil.tw\0" +"est.pr\0ens.tn\0" +"lib.id.us\0" +"mil.tz\0" +"uscountryestate.museum\0" +"agents.aero\0" +"\xc3\xb8vre-eiker.no\0ne.ug\0" +"pb.ao\0" +"gob.pa\0ne.tz\0" +"tur.br\0" +"mil.vc\0" +"or.at\0gob.pe\0" +"s\xc3\xb8r-fron.no\0" +"or.bi\0ne.us\0" +"u.bg\0gob.pk\0" +"stavern.no\0" +"brindisi.it\0" +"aknoluokta.no\0" +"!pref.kyoto.jp\0tydal.no\0" +"plc.ly\0muos\xc3\xa1t.no\0" +"or.ci\0hamaroy.no\0priv.pl\0" +"vestre-slidre.no\0gniezno.pl\0" +"\xe7\xae\x87\xe4\xba\xba.hk\0" +"andebu.no\0" +"nieruchomosci.pl\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" +"or.cr\0pro.ht\0bolzano.it\0" +"ct.us\0k12.md.us\0" +"za.org\0" +"!icnet.uk\0" +"localhistory.museum\0" +"firm.ht\0" +"lel.br\0tr.it\0kvanangen.no\0" +"sondre-land.no\0t\xc3\xb8nsberg.no\0vefsn.no\0" +"nature.museum\0yamal.ru\0" +"rv.ua\0" +"lans.museum\0lib.ne.us\0" +"lur\xc3\xb8y.no\0" +"eu.com\0firm.in\0" +"hjelmeland.no\0" +"gs.tr.no\0" +"casino.hu\0essex.museum\0tourism.pl\0" +"rennesoy.no\0" +"priv.no\0" +"baths.museum\0mytis.ru\0" +"tingvoll.no\0" +"cc.az.us\0" +"sh.cn\0" +"!pref.miyazaki.jp\0s\xc3\xb8rfold.no\0" +"aurskog-holand.no\0malatvuopmi.no\0" +"lib.ct.us\0" +"cc.pa.us\0" +"pa.gov.pl\0" +"firm.co\0cc.de.us\0" +"nrw.museum\0" +"daejeon.kr\0livinghistory.museum\0" +"gildeskal.no\0lund.no\0" +"\xc3\xb8ksnes.no\0stavropol.ru\0" +"b\xc3\xa6rum.no\0r\xc3\xb8yrvik.no\0" +"osoyro.no\0" +"priv.me\0sula.no\0!parliament.uk\0" +"nationalheritage.museum\0" +"jaworzno.pl\0" +"dinosaur.museum\0" +"garden.museum\0trust.museum\0" +"turen.tn\0" +"kautokeino.no\0" +"pro.na\0" +"gorizia.it\0" +"siljan.no\0" +"or.id\0pro.mv\0" +"bieszczady.pl\0www.ro\0" +"lib.ee\0antiques.museum\0brasil.museum\0tr.no\0" +"aejrie.no\0" +"!pref.hokkaido.jp\0" +"schlesisches.museum\0" +"huissier-justice.fr\0or.it\0" +"t.se\0" +"environment.museum\0" +"vindafjord.no\0" +"edu.ac\0or.jp\0" +"tree.museum\0" +"groundhandling.aero\0edu.af\0" +"rochester.museum\0sanfrancisco.museum\0" +"ebiz.tw\0" +"kirovograd.ua\0" +"edu.al\0" +"edu.an\0\xc3\xa1k\xc5\x8boluokta.no\0v\xc3\xa5g\xc3\xa5.no\0" +"v.bg\0" +"edu.ba\0" +"edu.bb\0nesset.no\0" +"hornindal.no\0pro.pr\0" +"or.kr\0" +"az.us\0" +"edu.bh\0volkenkunde.museum\0" +"edu.bi\0" +"edu.az\0" +"b\xc3\xb8mlo.no\0" +"edu.bm\0" +"edu.bo\0tyumen.ru\0" +"edu.br\0" +"edu.bs\0pa.us\0" +"alto-adige.it\0whaling.museum\0" +"*.iwate.jp\0" +"edu.ci\0law.pro\0" +"edu.bz\0de.us\0" +"lib.ak.us\0" +"edu.cn\0" +"edu.co\0" +"laspezia.it\0" +"baidar.no\0" +"ts.it\0" +"or.na\0" +"edu.cu\0hotel.lk\0" +"show.aero\0or.mu\0" +"sandnes.no\0" +"museumcenter.museum\0" +"edu.dm\0kazan.ru\0" +"biz\0caltanissetta.it\0odessa.ua\0k12.oh.us\0" +"crimea.ua\0" +"research.aero\0lom.no\0" +"edu.ec\0florence.it\0clock.museum\0sshn.se\0" +"edu.ee\0game.tw\0" +"!pref.okinawa.jp\0" +"ilawa.pl\0" +"edu.dz\0indiana.museum\0" +"gs.jan-mayen.no\0" +"publ.pt\0" +"nom.ad\0" +"skanit.no\0gdansk.pl\0k12.pa.us\0" +"nom.ag\0edu.es\0" +"if.ua\0" +"pro.tt\0lib.de.us\0" +"environmentalconservation.museum\0cc.or.us\0" +"bern.museum\0nat.tn\0" +"rubtsovsk.ru\0" +"!educ.ar\0masoy.no\0" +"bologna.it\0" +"\xc3\xa5snes.no\0fhv.se\0" +"*.tottori.jp\0radoy.no\0" +"romskog.no\0" +"malbork.pl\0" +"olbiatempio.it\0" +"edu.ge\0" +"edu.gh\0" +"edu.gi\0" +"or.pw\0" +"hob\xc3\xb8l.no\0" +"nom.br\0edu.gn\0virginia.museum\0mbone.pl\0!nls.uk\0" +"seljord.no\0pro.vn\0" +"edu.gp\0" +"edu.gr\0" +"!uba.ar\0!pref.saitama.jp\0" +"greta.fr\0gs.aa.no\0kvinnherad.no\0" +"lib.sc.us\0" +"js.cn\0nom.co\0edu.hk\0" +"lesja.no\0" +"bl.it\0" +"edu.hn\0\xc3\xb8ystre-slidre.no\0mari-el.ru\0" +"hotel.hu\0" +"rindal.no\0" +"edu.ht\0" +"!pref.miyagi.jp\0" +"midtre-gauldal.no\0" +"xj.cn\0australia.museum\0" +"ab.ca\0salvadordali.museum\0olawa.pl\0" +"pc.it\0" +"u.se\0" +"edu.in\0b\xc3\xa1l\xc3\xa1t.no\0" +"ln.cn\0alta.no\0" +"chelyabinsk.ru\0" +"edu.iq\0" +"ontario.museum\0" +"edu.is\0" +"edu.it\0" +"b\xc3\xa5tsfjord.no\0" +"trysil.no\0or.th\0" +"utsira.no\0" +"nom.es\0edu.jo\0fhsk.se\0" +"bale.museum\0" +"w.bg\0" +"lillesand.no\0" +"edu.kg\0" +"amusement.aero\0" +"edu.ki\0" +"fauske.no\0or.ug\0" +"int.az\0askvoll.no\0eidskog.no\0cv.ua\0" +"algard.no\0" +"edu.km\0or.tz\0" +"nom.fr\0edu.kn\0" +"*.ibaraki.jp\0hoylandet.no\0" +"int.bo\0edu.kp\0" +"edu.la\0" +"si.it\0edu.lb\0travel.pl\0" +"edu.lc\0mx.na\0n\xc3\xa1vuotna.no\0ovre-eiker.no\0" +"aa.no\0!siemens.om\0" +"sciences.museum\0or.us\0" +"cat\0" +"edu.ky\0" +"int.ci\0edu.kz\0firm.ro\0cc.wy.us\0" +"edu.lk\0vaapste.no\0" +"!pref.tochigi.jp\0" +"int.co\0podlasie.pl\0" +"edu.lr\0" +"karikatur.museum\0jamal.ru\0" +"gjovik.no\0krager\xc3\xb8.no\0k12.az.us\0" +"edu.me\0" +"ud.it\0edu.lv\0entomology.museum\0" +"edu.mg\0moskenes.no\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0edu.ly\0" +"stpetersburg.museum\0" +"edu.mk\0" +"edu.ml\0nordreisa.no\0" +"!pref.fukui.jp\0lib.ms.us\0lib.nc.us\0" +"edu.mn\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"fot.br\0edu.mo\0" +"iron.museum\0" +"asti.it\0annefrank.museum\0stv.ru\0cc.nh.us\0" +"edu.mv\0" +"lodi.it\0edu.mw\0edu.ng\0" +"gwangju.kr\0edu.mx\0" +"edu.my\0" +"soundandvision.museum\0" +"lenvik.no\0" +"ballooning.aero\0" +"name\0" +"jogasz.hu\0frogn.no\0" +"history.museum\0" +"consultant.aero\0edu.nr\0" +"manchester.museum\0" +"*.hiroshima.jp\0" +"pol.dz\0" +"*.tochigi.jp\0heimatunduhren.museum\0" +"!pref.kanagawa.jp\0" +"firm.nf\0edu.pa\0" +"coop.ht\0pc.pl\0" +"chicago.museum\0" +"vn.ua\0" +"edu.pe\0" +"tana.no\0edu.pf\0" +"edu.ph\0" +"nom.km\0" +"travel.tt\0" +"edu.pk\0" +"experts-comptables.fr\0edu.pl\0bryansk.ru\0" +"edu.pn\0" +"evje-og-hornnes.no\0warszawa.pl\0" +"ac.ae\0" +"edu.pr\0" +"vaksdal.no\0edu.ps\0dni.us\0" +"po.gov.pl\0edu.pt\0" +"nordre-land.no\0vadso.no\0" +"rnrt.tn\0" +"sport.hu\0!pref.gifu.jp\0voss.no\0targi.pl\0" +"flesberg.no\0" +"photography.museum\0" +"modena.it\0tonsberg.no\0" +"ac.at\0" +"ac.be\0coop.br\0" +"services.aero\0" +"nom.mg\0" +"wielun.pl\0" +"jefferson.museum\0wy.us\0" +"pd.it\0ot.it\0neues.museum\0slattum.no\0" +"vdonsk.ru\0" +"ar.com\0edu.sa\0" +"\xc3\xa5l.no\0edu.sb\0" +"edu.rs\0edu.sc\0" +"ac.ci\0int.is\0edu.sd\0!tsk.tr\0" +"br\xc3\xb8nn\xc3\xb8ysund.no\0and\xc3\xb8y.no\0edu.ru\0" +"pol.ht\0" +"edu.rw\0edu.sg\0" +"gyeongnam.kr\0olecko.pl\0" +"ac.cn\0" +"graz.museum\0" +"coldwar.museum\0edu.sl\0" +"ac.cr\0" +"edu.sn\0" +"hamar.no\0" +"histoire.museum\0" +"!city.shizuoka.jp\0" +"edu.st\0" +"oceanographic.museum\0nh.us\0" +"x.bg\0" +"surnadal.no\0" +"fc.it\0costume.museum\0stalowa-wola.pl\0" +"valer.ostfold.no\0edu.sy\0" +"edu.tj\0" +"arq.br\0" +"aeroclub.aero\0odo.br\0pe.ca\0\xe7\xb6\xb2\xe7\xb5\xa1.cn\0bronnoysund.no\0nom.pa\0" +"edu.to\0" +"paleo.museum\0nom.pe\0edu.ua\0" +"int.la\0trustee.museum\0forsand.no\0krasnoyarsk.ru\0" +"!pref.hyogo.jp\0" +"edu.tt\0" +"zarow.pl\0" +"edu.tw\0" +"nom.pl\0" +"community.museum\0kvitsoy.no\0" +"int.lk\0tychy.pl\0" +"k12.me.us\0" +"jondal.no\0edu.vc\0" +"illustration.museum\0" +"clinton.museum\0" +"tas.au\0es.kr\0" +"production.aero\0" +"rodoy.no\0" +"database.museum\0bodo.no\0" +"anthro.museum\0landes.museum\0edu.vn\0" +"nom.re\0" +"altai.ru\0" +"filatelia.museum\0" +"sk.ca\0lezajsk.pl\0" +"rockart.museum\0int.mv\0" +"int.mw\0herad.no\0" +"eti.br\0ac.gn\0" +"fedje.no\0nom.ro\0" +"money.museum\0" +"\xd9\x85\xd8\xb5\xd8\xb1\0" +"horten.no\0" +"gangaviika.no\0mielec.pl\0" +"uw.gov.pl\0" +"moma.museum\0" +"edu.ws\0" +"go.ci\0" +"tv.bo\0technology.museum\0" +"s\xc3\xb8ndre-land.no\0" +"tv.br\0" +"jor.br\0lib.dc.us\0" +"arboretum.museum\0" +"go.cr\0" +"artsandcrafts.museum\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"psc.br\0ac.id\0!city.chiba.jp\0" +"wa.au\0" +"rome.it\0" +"amli.no\0" +"ac.im\0lo.it\0" +"ac.in\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0durham.museum\0" +"ac.ir\0" +"torino.museum\0" +"loabat.no\0" +"com\0" +"nalchik.ru\0" +"yakutia.ru\0" +"settlers.museum\0" +"!promocion.ar\0int.pt\0" +"union.aero\0" +"utah.museum\0" +"giehtavuoatna.no\0" +"ac.jp\0" +"air-traffic-control.aero\0" +"silk.museum\0usantiques.museum\0" +"bn.it\0" +"kalisz.pl\0" +"perm.ru\0" +"aoste.it\0bindal.no\0" +"coloradoplateau.museum\0k12.gu.us\0" +"frosinone.it\0forde.no\0" +"epilepsy.museum\0" +"olbia-tempio.it\0" +"journalist.aero\0ac.kr\0*.sch.uk\0" +"nic.im\0sciencesnaturelles.museum\0bedzin.pl\0" +"nic.in\0pe.it\0" +"w.se\0" +"!pref.okayama.jp\0" +"urn.arpa\0" +"cinema.museum\0" +"monza.it\0versailles.museum\0int.ru\0" +"andasuolo.no\0skj\xc3\xa5k.no\0chernovtsy.ua\0" +"nyc.museum\0int.rw\0paroch.k12.ma.us\0" +"ringerike.no\0" +"ac.ma\0" +"org.ac\0civilaviation.aero\0" +"rakkestad.no\0" +"org.ae\0ac.me\0" +"org.af\0" +"org.ag\0" +"org.ai\0stokke.no\0" +"airport.aero\0" +"finnoy.no\0" +"org.al\0" +"org.an\0y.bg\0habmer.no\0" +"stadt.museum\0holtalen.no\0" +"int.tj\0" +"org.ba\0gjerdrum.no\0" +"org.bb\0ascoli-piceno.it\0molde.no\0r\xc3\xb8st.no\0tysfjord.no\0" +"pe.kr\0rybnik.pl\0" +"go.id\0" +"ac.mu\0" +"ac.mw\0ac.ng\0" +"org.bh\0\xc3\xa5mot.no\0rana.no\0" +"org.bi\0" +"org.az\0belgorod.ru\0int.tt\0" +"ae.org\0" +"group.aero\0posts-and-telecommunications.museum\0" +"org.bm\0salerno.it\0" +"etnedal.no\0" +"org.bo\0*.hokkaido.jp\0donetsk.ua\0" +"ostroda.pl\0" +"org.br\0" +"org.bs\0" +"go.it\0h\xc3\xb8ylandet.no\0" +"zgorzelec.pl\0" +"org.bw\0" +"org.ci\0" +"org.bz\0vicenza.it\0resistance.museum\0" +"missile.museum\0" +"org.cn\0" +"org.co\0assassination.museum\0" +"go.jp\0" +"tv.it\0austrheim.no\0ac.pa\0" +"verbania.it\0" +"palace.museum\0" +"tmp.br\0int.vn\0" +"org.cu\0" +"paris.museum\0" +"media.aero\0hokksund.no\0" +"arts.museum\0gemological.museum\0hammerfest.no\0" +"k12.ny.us\0" +"org.dm\0hemsedal.no\0ringsaker.no\0sklep.pl\0" +"h\xc3\xa5.no\0cc.nj.us\0" +"rzeszow.pl\0" +"go.kr\0gjesdal.no\0ac.pr\0" +"org.ec\0" +"org.ee\0" +"media.museum\0" +"terni.it\0touch.museum\0zakopane.pl\0" +"journal.aero\0org.dz\0" +"incheon.kr\0" +"b\xc3\xa1hcavuotna.no\0" +"leksvik.no\0ulvik.no\0" +"plantation.museum\0" +"org.es\0loyalist.museum\0" +"gildesk\xc3\xa5l.no\0bytom.pl\0" +"bo.nordland.no\0" +"ambulance.aero\0iglesiascarbonia.it\0" +"tw.cn\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" +"chocolate.museum\0" +"pittsburgh.museum\0" +"royrvik.no\0sor-odal.no\0ac.rs\0" +"kaluga.ru\0" +"org.ge\0erotica.hu\0ac.ru\0ac.se\0" +"org.gg\0leangaviika.no\0ac.rw\0" +"org.gh\0v\xc3\xa6r\xc3\xb8y.no\0" +"org.gi\0" +"jevnaker.no\0" +"org.gn\0tv.na\0leikanger.no\0" +"org.gp\0" +"ask\xc3\xb8y.no\0" +"org.gr\0wroc.pl\0" +"ad.jp\0" +"powiat.pl\0" +"tj\xc3\xb8me.no\0" +"coop.tt\0" +"ac.th\0" +"mragowo.pl\0ac.sz\0ac.tj\0" +"org.hk\0bo.it\0" +"philately.museum\0" +"org.hn\0" +"fet.no\0" +"axis.museum\0mansions.museum\0" +"wiki.br\0" +"org.ht\0" +"org.hu\0piacenza.it\0scotland.museum\0cpa.pro\0" +"ac.ug\0" +"coop.mv\0x.se\0" +"coop.mw\0ac.tz\0" +"bmd.br\0" +"org.im\0ralingen.no\0" +"org.in\0" +"cz.it\0lib.ia.us\0" +"org.iq\0" +"org.ir\0" +"org.is\0" +"nl.ca\0" +"org.je\0" +"childrensgarden.museum\0" +"kvits\xc3\xb8y.no\0go.pw\0" +"sokndal.no\0" +"ra.it\0grimstad.no\0" +"denmark.museum\0" +"ac.vn\0" +"ecn.br\0org.jo\0" +"bialystok.pl\0nj.us\0" +"z.bg\0bilbao.museum\0stargard.pl\0nic.tj\0" +"eisenbahn.museum\0" +"fe.it\0bryne.no\0vrn.ru\0" +"cc.wa.us\0" +"sex.hu\0skierva.no\0" +"org.kg\0" +"org.ki\0" +"org.km\0" +"org.kn\0khakassia.ru\0" +"org.kp\0" +"org.la\0" +"org.lb\0" +"org.lc\0" +"francaise.museum\0" +"panama.museum\0" +"rotorcraft.aero\0gateway.museum\0olkusz.pl\0" +"org.ky\0czeladz.pl\0ryazan.ru\0" +"org.kz\0" +"org.lk\0dyr\xc3\xb8y.no\0" +"raisa.no\0" +"dlugoleka.pl\0" +"org.ma\0" +"org.lr\0prochowice.pl\0" +"org.ls\0" +"org.me\0sandoy.no\0s\xc3\xb8r-varanger.no\0" +"org.lv\0" +"org.mg\0" +"tel\0go.th\0" +"org.ly\0" +"steam.museum\0go.tj\0" +"org.mk\0pasadena.museum\0jessheim.no\0lib.mn.us\0" +"org.ml\0" +"software.aero\0" +"org.mn\0" +"org.mo\0" +"*.fukui.jp\0decorativearts.museum\0" +"spy.museum\0org.na\0jorpeland.no\0" +"vads\xc3\xb8.no\0" +"org.mu\0building.museum\0gausdal.no\0" +"org.mv\0nannestad.no\0" +"org.mw\0org.ng\0go.ug\0" +"vr.it\0org.mx\0" +"org.my\0" +"go.tz\0" +"oppdal.no\0" +"uk.net\0" +"coop.km\0" +"*.kyoto.jp\0" +"sarpsborg.no\0org.nr\0" +"chernigov.ua\0" +"ha.cn\0no.com\0" +"space.museum\0" +"org.pa\0" +"*.ar\0" +"usgarden.museum\0" +"*.bd\0org.pe\0" +"*.au\0org.pf\0um.gov.pl\0" +"bio.br\0" +"org.ph\0" +"org.pk\0" +"fr\xc3\xa6na.no\0org.pl\0" +"nord-aurdal.no\0org.pn\0" +"*.bn\0handson.museum\0agrinet.tn\0" +"kviteseid.no\0" +"rel.ht\0virtuel.museum\0atm.pl\0org.pr\0" +"org.ps\0cherkassy.ua\0" +"org.pt\0wa.us\0" +"*.bt\0arendal.no\0magnitka.ru\0" +"depot.museum\0porsangu.no\0" +"laakesvuemie.no\0" +"sor-fron.no\0" +"heroy.more-og-romsdal.no\0" +"*.ck\0" +"!rakpetroleum.om\0" +"kr\xc3\xb8""dsherad.no\0mail.pl\0" +"mod.gi\0" +"gs.nl.no\0" +"mb.ca\0" +"pavia.it\0" +"civilisation.museum\0folldal.no\0" +"suli.hu\0" +"brumunddal.no\0" +"*.cy\0" +"pg.it\0troms\xc3\xb8.no\0" +"sex.pl\0y.se\0" +"org.ro\0" +"*.do\0" +"caserta.it\0org.sa\0" +"za.com\0halloffame.museum\0org.sb\0lviv.ua\0" +"mill.museum\0org.rs\0org.sc\0" +"org.sd\0" +"idv.hk\0!omanmobile.om\0org.ru\0org.se\0" +"langev\xc3\xa5g.no\0r\xc3\xa5holt.no\0starostwo.gov.pl\0" +"trani-andria-barletta.it\0org.sg\0" +"*.eg\0hvaler.no\0" +"*.ehime.jp\0" +"gmina.pl\0" +"bod\xc3\xb8.no\0org.sl\0" +"edu\0org.sn\0" +"org.so\0lib.wi.us\0" +"kommune.no\0" +"nome.pt\0" +"*.er\0namdalseid.no\0k12.wa.us\0" +"nm.cn\0org.st\0" +"*.et\0d\xc3\xb8nna.no\0" +"jewish.museum\0preservation.museum\0" +"slupsk.pl\0org.sy\0" +"art.br\0org.sz\0org.tj\0" +"ntr.br\0*.fj\0ski.no\0" +"*.fk\0rimini.it\0grajewo.pl\0" +"loppa.no\0" +"franziskaner.museum\0notteroy.no\0org.tn\0" +"org.to\0" +"nesoddtangen.no\0" +"org.ua\0" +"discovery.museum\0wloclawek.pl\0" +"lakas.hu\0org.tt\0" +"kurgan.ru\0" +"baltimore.museum\0nkz.ru\0org.tw\0" +"com.ac\0castle.museum\0" +"*.fukuoka.jp\0sandefjord.no\0varggat.no\0" +"com.af\0" +"com.ag\0" +"ato.br\0k12.nj.us\0" +"com.ai\0" +"city.hu\0oryol.ru\0" +"com.al\0nl.no\0mielno.pl\0cc.ma.us\0" +"org.vc\0" +"com.an\0g12.br\0" +"*.gt\0" +"*.gu\0" +"com.ba\0" +"com.bb\0americanart.museum\0" +"org.vi\0" +"kunstsammlung.museum\0" +"com.aw\0" +"flight.aero\0com.bh\0lib.mo.us\0org.vn\0" +"com.bi\0adygeya.ru\0" +"com.az\0" +"art.dz\0" +"com.bm\0" +"dr\xc3\xb8""bak.no\0" +"com.bo\0isla.pr\0" +"com.br\0" +"com.bs\0ustka.pl\0kuban.ru\0" +"press.aero\0" +"vs.it\0" +"meloy.no\0" +"*.il\0ulm.museum\0" +"com.by\0com.ci\0genoa.it\0" +"com.bz\0sn.cn\0" +"lib.or.us\0" +"santafe.museum\0org.ws\0" +}; + +#endif // QNETWORKCOOKIEJARTLD_P_H diff --git a/src/network/access/qnetworkcookiejartlds_p.h.INFO b/src/network/access/qnetworkcookiejartlds_p.h.INFO new file mode 100644 index 0000000..57a8d0e --- /dev/null +++ b/src/network/access/qnetworkcookiejartlds_p.h.INFO @@ -0,0 +1,17 @@ +The file qnetworkcookiejartlds_p.h is generated from the Public Suffix +List (see [1] and [2]), by the program residing at +util/network/cookiejar-generateTLDs in the Qt source tree. + +That program generates a character array and an index array from the +list to provide fast lookups of elements within C++. + +Those arrays in qnetworkcookiejartlds_p.h are derived from the Public +Suffix List ([2]), which was originally provided by +Jo Hermans . + +The file qnetworkcookiejartlds_p.h was last generated Friday, +November 19th 15:24 2010. + +---- +[1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 +[2] homepage: http://publicsuffix.org/ diff --git a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 01b9c0c..6548158 100644 --- a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -42,6 +42,7 @@ #include #include +#include "private/qnetworkcookiejar_p.h" class tst_QNetworkCookieJar: public QObject { @@ -53,6 +54,8 @@ private slots: void setCookiesFromUrl(); void cookiesForUrl_data(); void cookiesForUrl(); + void effectiveTLDs_data(); + void effectiveTLDs(); }; QT_BEGIN_NAMESPACE @@ -174,6 +177,31 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() result += cookie; QTest::newRow("security-path-1") << preset << cookie << "http://www.foo.tld" << result << true; + // check effective TLDs + // 1. co.uk is an effective TLD, should be denied + result.clear(); + preset.clear(); + cookie.setPath("/"); + cookie.setDomain(".co.uk"); + QTest::newRow("effective-tld1-denied") << preset << cookie << "http://something.co.uk" << result << false; + cookie.setDomain("co.uk"); + QTest::newRow("effective-tld1-denied2") << preset << cookie << "http://something.co.uk" << result << false; + cookie.setDomain(".something.co.uk"); + result += cookie; + QTest::newRow("effective-tld1-accepted") << preset << cookie << "http://something.co.uk" << result << true; + + // 2. anything .ar is an effective TLD ('*.ar'), but 'gobiernoelectronico.ar' is an exception + result.clear(); + preset.clear(); + cookie.setDomain(".farmacia.ar"); + QTest::newRow("effective-tld2-denied") << preset << cookie << "http://farmacia.ar" << result << false; + QTest::newRow("effective-tld2-denied2") << preset << cookie << "http://www.farmacia.ar" << result << false; + QTest::newRow("effective-tld2-denied3") << preset << cookie << "http://www.anything.farmacia.ar" << result << false; + cookie.setDomain(".gobiernoelectronico.ar"); + result += cookie; + QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.gobiernoelectronico.ar" << result << true; + + // setting the defaults: finalCookie = cookie; finalCookie.setPath("/something/"); @@ -334,6 +362,82 @@ void tst_QNetworkCookieJar::cookiesForUrl() QCOMPARE(result, expectedResult); } +void tst_QNetworkCookieJar::effectiveTLDs_data() +{ + QTest::addColumn("domain"); + QTest::addColumn("isTLD"); + + QTest::newRow("yes1") << "com" << true; + QTest::newRow("yes2") << "de" << true; + QTest::newRow("yes3") << "ulm.museum" << true; + QTest::newRow("yes4") << "krodsherad.no" << true; + QTest::newRow("yes5") << "1.bg" << true; + QTest::newRow("yes6") << "com.cn" << true; + QTest::newRow("yes7") << "org.ws" << true; + QTest::newRow("yes8") << "co.uk" << true; + QTest::newRow("yes9") << "wallonie.museum" << true; + + QTest::newRow("no1") << "anything.com" << false; + QTest::newRow("no2") << "anything.de" << false; + QTest::newRow("no3") << "eselsberg.ulm.museum" << false; + QTest::newRow("no4") << "noe.krodsherad.no" << false; + QTest::newRow("no5") << "2.1.bg" << false; + QTest::newRow("no6") << "foo.com.cn" << false; + QTest::newRow("no7") << "something.org.ws" << false; + QTest::newRow("no8") << "teatime.co.uk" << false; + QTest::newRow("no9") << "bla" << false; + QTest::newRow("no10") << "bla.bla" << false; + + const ushort s1[] = {0x74, 0x72, 0x61, 0x6e, 0xf8, 0x79, 0x2e, 0x6e, 0x6f, 0x00}; // xn--trany-yua.no + const ushort s2[] = {0x5d9, 0x5e8, 0x5d5, 0x5e9, 0x5dc, 0x5d9, 0x5dd, 0x2e, 0x6d, 0x75, 0x73, 0x65, 0x75, 0x6d, 0x00}; // xn--9dbhblg6di.museum + const ushort s3[] = {0x7ec4, 0x7e54, 0x2e, 0x68, 0x6b, 0x00}; // xn--mk0axi.hk + const ushort s4[] = {0x7f51, 0x7edc, 0x2e, 0x63, 0x6e, 0x00}; // xn--io0a7i.cn + const ushort s5[] = {0x72, 0xe1, 0x68, 0x6b, 0x6b, 0x65, 0x72, 0xe1, 0x76, 0x6a, 0x75, 0x2e, 0x6e, 0x6f, 0x00}; // xn--rhkkervju-01af.no + const ushort s6[] = {0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0x00}; // xn--clchc0ea0b2g2a9gcd + const ushort s7[] = {0x627, 0x644, 0x627, 0x631, 0x62f, 0x646, 0x00}; // xn--mgbayh7gpa + const ushort s8[] = {0x63, 0x6f, 0x72, 0x72, 0x65, 0x69, 0x6f, 0x73, 0x2d, 0x65, 0x2d, 0x74, 0x65, 0x6c, 0x65, + 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0xe7, 0xf5, 0x65, 0x73, 0x2e, 0x6d, 0x75, + 0x73, 0x65, 0x75, 0x6d, 0x00}; // xn--correios-e-telecomunicaes-ghc29a.museum + QTest::newRow("yes-specialchars1") << QString::fromUtf16(s1) << true; + QTest::newRow("yes-specialchars2") << QString::fromUtf16(s2) << true; + QTest::newRow("yes-specialchars3") << QString::fromUtf16(s3) << true; + QTest::newRow("yes-specialchars4") << QString::fromUtf16(s4) << true; + QTest::newRow("yes-specialchars5") << QString::fromUtf16(s5) << true; + QTest::newRow("yes-specialchars6") << QString::fromUtf16(s6) << true; + QTest::newRow("yes-specialchars7") << QString::fromUtf16(s7) << true; + QTest::newRow("yes-specialchars8") << QString::fromUtf16(s8) << true; + + QTest::newRow("no-specialchars1") << QString::fromUtf16(s1).prepend("something") << false; + QTest::newRow("no-specialchars2") << QString::fromUtf16(s2).prepend(QString::fromUtf16(s2)) << false; + QTest::newRow("no-specialchars2.5") << QString::fromUtf16(s2).prepend("whatever") << false; + QTest::newRow("no-specialchars3") << QString::fromUtf16(s3).prepend("foo") << false; + QTest::newRow("no-specialchars4") << QString::fromUtf16(s4).prepend("bar") << false; + QTest::newRow("no-specialchars5") << QString::fromUtf16(s5).prepend(QString::fromUtf16(s2)) << false; + QTest::newRow("no-specialchars6") << QString::fromUtf16(s6).prepend(QLatin1Char('.') + QString::fromUtf16(s6)) << false; + QTest::newRow("no-specialchars7") << QString::fromUtf16(s7).prepend("bla") << false; + QTest::newRow("no-specialchars8") << QString::fromUtf16(s8).append("foo") << false; + + QTest::newRow("exception1") << "pref.iwate.jp" << false; + QTest::newRow("exception2") << "omanpost.om" << false; + QTest::newRow("exception3") << "omantel.om" << false; + QTest::newRow("exception4") << "gobiernoelectronico.ar" << false; + QTest::newRow("exception5") << "pref.ishikawa.jp" << false; + + QTest::newRow("yes-wildcard1") << "*.jm" << true; + QTest::newRow("yes-wildcard1.5") << "anything.jm" << true; + QTest::newRow("yes-wildcard2") << "something.kh" << true; + QTest::newRow("yes-wildcard3") << "whatever.uk" << true; + QTest::newRow("yes-wildcard4") << "anything.shizuoka.jp" << true; + QTest::newRow("yes-wildcard5") << "foo.sch.uk" << true; +} + +void tst_QNetworkCookieJar::effectiveTLDs() +{ + QFETCH(QString, domain); + QFETCH(bool, isTLD); + QCOMPARE(QNetworkCookieJarPrivate::isEffectiveTLD(domain), isTLD); +} + QTEST_MAIN(tst_QNetworkCookieJar) #include "tst_qnetworkcookiejar.moc" diff --git a/util/network/cookiejar-generateTLDs/cookiejar-generateTLDs.pro b/util/network/cookiejar-generateTLDs/cookiejar-generateTLDs.pro new file mode 100644 index 0000000..9d5f1cf --- /dev/null +++ b/util/network/cookiejar-generateTLDs/cookiejar-generateTLDs.pro @@ -0,0 +1,9 @@ +TEMPLATE = app +TARGET = +DEPENDPATH += . +INCLUDEPATH += . + +QT = core + +# Input +SOURCES += main.cpp diff --git a/util/network/cookiejar-generateTLDs/main.cpp b/util/network/cookiejar-generateTLDs/main.cpp new file mode 100644 index 0000000..fad2c71 --- /dev/null +++ b/util/network/cookiejar-generateTLDs/main.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** 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 utils 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 + +static QString utf8encode(const QByteArray &array) // turns e.g. tranøy.no to tran\xc3\xb8y.no +{ + QString result; + result.reserve(array.length() + array.length() / 3); + for (int i = 0; i < array.length(); ++i) { + char c = array.at(i); + // if char is non-ascii, escape it + if (c < 0x20 || uchar(c) >= 0x7f) { + result += "\\x" + QString::number(uchar(c), 16); + } else { + // if previous char was escaped, we need to make sure the next char is not + // interpreted as part of the hex value, e.g. "äc.com" -> "\xabc.com"; this + // should be "\xab""c.com" + QRegExp hexEscape("\\\\x[a-fA-F0-9][a-fA-F0-9]$"); + bool isHexChar = ((c >= '0' && c <= '9') || + (c >= 'a' && c <= 'f') || + (c >= 'A' && c <= 'F')); + if (result.contains(hexEscape) && isHexChar) + result += "\"\""; + result += c; + } + } + return result; +} + +int main(int argc, char **argv) { + + QCoreApplication app(argc, argv); + if (argc < 3) { + printf("\nusage: %s inputFile outputFile\n\n", argv[0]); + printf("'inputFile' should be a list of effective TLDs, one per line,\n"); + printf("as obtained from http://publicsuffix.org . To create indices and data file\n"); + printf("file, do the following:\n\n"); + printf(" wget http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 -O effective_tld_names.dat\n"); + printf(" grep '^[^\\/\\/]' effective_tld_names.dat > effective_tld_names.dat.trimmed\n"); + printf(" %s effective_tld_names.dat.trimmed effective_tld_names.dat.qt\n\n", argv[0]); + printf("Now copy the data from effective_tld_names.dat.qt to the file src/network/access/qnetworkcookiejartlds_p.h in your Qt repo\n\n"); + exit(1); + } + QFile file(argv[1]); + QFile outFile(argv[2]); + file.open(QIODevice::ReadOnly); + outFile.open(QIODevice::WriteOnly); + + QByteArray outIndicesBufferBA; + QBuffer outIndicesBuffer(&outIndicesBufferBA); + outIndicesBuffer.open(QIODevice::WriteOnly); + + QByteArray outDataBufferBA; + QBuffer outDataBuffer(&outDataBufferBA); + outDataBuffer.open(QIODevice::WriteOnly); + + int lineCount = 0; + while (!file.atEnd()) { + file.readLine(); + lineCount++; + } + file.reset(); + QVector strings(lineCount); + while (!file.atEnd()) { + QString s = QString::fromUtf8(file.readLine()); + QString st = s.trimmed(); + int num = qHash(st) % lineCount; + + QString utf8String = utf8encode(st.toUtf8()); + + // for domain 1.com, we could get something like + // a.com\01.com, which would be interpreted as octal 01, + // so we need to separate those strings with quotes + QRegExp regexpOctalEscape(QLatin1String("^[0-9]")); + if (!strings.at(num).isEmpty() && st.contains(regexpOctalEscape)) + strings[num].append("\"\""); + + strings[num].append(utf8String); + strings[num].append("\\0"); + } + + outIndicesBuffer.write("static const quint16 tldCount = "); + outIndicesBuffer.write(QByteArray::number(lineCount)); + outIndicesBuffer.write(";\n"); + outIndicesBuffer.write("static const quint16 tldIndices["); +// outIndicesBuffer.write(QByteArray::number(lineCount+1)); // not needed + outIndicesBuffer.write("] = {\n"); + + int utf8Size = 0; +// int charSize = 0; + for (int a = 0; a < lineCount; a++) { + bool lineIsEmpty = strings.at(a).isEmpty(); + if (!lineIsEmpty) { + strings[a].prepend("\""); + strings[a].append("\""); + } + int zeroCount = strings.at(a).count(QLatin1String("\\0")); + int utf8CharsCount = strings.at(a).count(QLatin1String("\\x")); + int quoteCount = strings.at(a).count('"'); + outDataBuffer.write(strings.at(a).toUtf8()); + if (!lineIsEmpty) + outDataBuffer.write("\n"); + outIndicesBuffer.write(QByteArray::number(utf8Size)); + outIndicesBuffer.write(",\n"); + utf8Size += strings.at(a).count() - (zeroCount + quoteCount + utf8CharsCount * 3); +// charSize += strings.at(a).count(); + } + outIndicesBuffer.write(QByteArray::number(utf8Size)); + outIndicesBuffer.write("};\n"); + outIndicesBuffer.close(); + outFile.write(outIndicesBufferBA); + + outDataBuffer.close(); + outFile.write("\nstatic const char tldData["); +// outFile.write(QByteArray::number(charSize)); // not needed + outFile.write("] = {\n"); + outFile.write(outDataBufferBA); + outFile.write("};\n"); + outFile.close(); + printf("data generated to %s . Now copy the data from this file to src/network/access/qnetworkcookiejartlds_p.h in your Qt repo\n", argv[2]); + exit(0); +} -- cgit v0.12 From 16cc5a4de47c13e90a341356090dbccbc8c3fe07 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Wed, 5 Jan 2011 21:59:25 +0200 Subject: Updated DEF files for QtOpenGL for WINSCW and ARMV5 Marked QGLContextResource::value absent Reviewed-by: TrustMe --- src/s60installs/bwins/QtOpenGLu.def | 2 +- src/s60installs/eabi/QtOpenGLu.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 620fcb9..490eaf3 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -365,7 +365,7 @@ EXPORTS ?samples@QGLFramebufferObjectFormat@@QBEHXZ @ 364 NONAME ; int QGLFramebufferObjectFormat::samples(void) const ?setInactive@QGLCustomShaderStage@@QAEXXZ @ 365 NONAME ; void QGLCustomShaderStage::setInactive(void) ?extensionFuncs@QGLContextPrivate@@SAAAUQGLExtensionFuncs@@PBVQGLContext@@@Z @ 366 NONAME ; struct QGLExtensionFuncs & QGLContextPrivate::extensionFuncs(class QGLContext const *) - ?value@QGLContextResource@@QAEPAXPBVQGLContext@@@Z @ 367 NONAME ; void * QGLContextResource::value(class QGLContext const *) + ?value@QGLContextResource@@QAEPAXPBVQGLContext@@@Z @ 367 NONAME ABSENT ; void * QGLContextResource::value(class QGLContext const *) ?majorVersion@QGLFormat@@QBEHXZ @ 368 NONAME ; int QGLFormat::majorVersion(void) const ?rgba@QGLFormat@@QBE_NXZ @ 369 NONAME ; bool QGLFormat::rgba(void) const ?paintDevice@QGLWindowSurface@@UAEPAVQPaintDevice@@XZ @ 370 NONAME ; class QPaintDevice * QGLWindowSurface::paintDevice(void) diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index c92d99e..61e968c 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -293,7 +293,7 @@ EXPORTS _ZN17QGLContextPrivate14extensionFuncsEPK10QGLContext @ 292 NONAME _ZN17QGLGraphicsSystemC1Eb @ 293 NONAME _ZN17QGLGraphicsSystemC2Eb @ 294 NONAME - _ZN18QGLContextResource5valueEPK10QGLContext @ 295 NONAME + _ZN18QGLContextResource5valueEPK10QGLContext @ 295 NONAME ABSENT _ZN18QGLContextResource6insertEPK10QGLContextPv @ 296 NONAME _ZN18QGLContextResource7cleanupEPK10QGLContextPv @ 297 NONAME _ZN18QGLContextResourceC1EPFvPvE @ 298 NONAME -- cgit v0.12 From 57a3d4250ea438b2607d7f62ef26b8b83eb0f66c Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 6 Jan 2011 11:16:49 +1000 Subject: Doc fixes for introduction page and Item docs Moved 'Identity' and 'Property Change Signals' sections from Item docs to the intro page, which previously had a section on ids but this has been moved out of the 'Properties' section since an id isn't an ordinary property. --- doc/src/declarative/qdeclarativeintro.qdoc | 213 +++++++++++++-------- src/declarative/graphicsitems/qdeclarativeitem.cpp | 28 --- 2 files changed, 130 insertions(+), 111 deletions(-) diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc index 4e41fda..20db248 100644 --- a/doc/src/declarative/qdeclarativeintro.qdoc +++ b/doc/src/declarative/qdeclarativeintro.qdoc @@ -37,7 +37,7 @@ interface is specified as a tree of objects with properties. This introduction is meant for those with little or no programming experience. JavaScript is used as a scripting language in QML, so you may want -to learn a bit more about it (\l{Javascript Guide}) before diving +to learn a bit more about it (see the \l{Javascript Guide}) before diving deeper into QML. It's also helpful to have a basic understanding of other web technologies like HTML and CSS, but it's not required. @@ -60,13 +60,13 @@ Rectangle { } \endcode -Objects are specified by their type, followed by a pair of braces. Object -types always begin with a capital letter. In the above example, there are -two objects, a \l Rectangle, and an \l Image. Between the braces, we can specify -information about the object, such as its properties. +Here we create two objects, a \l Rectangle object and its child +\l Image object. Objects are specified by their type, followed by a pair of +braces in between which additional data can be defined for the object, such as +its property values and any child objects. -Properties are specified as \c {property: value}. In the above example, we -can see the Image has a property named \c source, which has been assigned the +Properties are specified with a \c {property: value} syntax. In the above example, we +can see the \l Image object has a property named \c source, which has been assigned the value \c "pics/logo.png". The property and its value are separated by a colon. Properties can be specified one-per-line: @@ -87,45 +87,13 @@ Rectangle { width: 100; height: 100 } When multiple property/value pairs are specified on a single line, they must be separated by a semicolon. -The \c import statement imports the \c Qt \l{QML Modules}{module}, which contains all of the +The \c import statement imports the \c QtQuick \l{QML Modules}{module}, which contains all of the standard \l {QML Elements}. Without this import statement, the \l Rectangle and \l Image elements would not be available. -\section1 Expressions - -In addition to assigning values to properties, you can also assign -expressions written in JavaScript. - -\code -Rotation { - angle: 360 * 3 -} -\endcode - -These expressions can include references to other objects and properties, in which case -a \e binding is established: when the value of the expression changes, the property the -expression has been assigned to is automatically updated to that value. - -\code -Item { - Text { - id: text1 - text: "Hello World" - } - Text { - id: text2 - text: text1.text - } -} -\endcode - -In the example above, the \c text2 object will display the same text as \c text1. If \c text1 is changed, -\c text2 is automatically changed to the same value. -Note that to refer to other objects, we use their \e id values. (See below for more -information on the \e id property.) -\section1 QML Comments +\section1 Comments Commenting in QML is similar to JavaScript. \list @@ -149,27 +117,95 @@ Text { } \endcode -In the above example, the Text object will have normal opacity, since the +In the above example, the \l Text object will have normal opacity, since the line opacity: 0.5 has been turned into a comment. -\section1 Properties -\target intro-properties -\section2 Property naming -Properties begin with a lowercase letter (with the exception of \l{Attached Properties}). +\section1 Object identifiers + +Each object can be given a special \e id value that allows the object to be identified +and referred to by other objects. + +For example, below we have two \l Text objects. The first \l Text object +has an \c id value of "text1". The second \l Text object can now set its own +\c text property value to be the same as that of the first object, by referring to +\c text1.text: + +\qml +import QtQuick 1.0 + +Row { + Text { + id: text1 + text: "Hello World" + } + + Text { text: text1.text } +} +\endqml + +An object can be referred to by its \c id from anywhere within the \l {QML Documents}{component} +in which it is declared. Therefore, an \c id value must always be unique within a single component. + +The \c id value is a special value for a QML object and should not be thought of as an +ordinary object property; for example, it is not possible to access \c text1.id in the +above example. Once an object is created, its \c id cannot be changed. + +Note that an \c id must begin with a lower-case letter or an underscore, and cannot contain +characters other than letters, numbers and underscores. + + + +\section1 Expressions + +JavaScript expressions can be used to assign property values. For example: + +\code +Item { + width: 100 * 3 + height: 50 + 22 +} +\endcode + +These expressions can include references to other objects and properties, in which case +a \l{Property Binding}{binding} is established: when the value of the expression changes, +the property to which the expression is assigned is automatically updated to the +new value. For example: + +\code +Item { + width: 300 + height: 300 + + Rectangle { + width: parent.width - 50 + height: 100 + color: "yellow" + } +} +\endcode + +Here, the \l Rectangle object's \c width property is set relative to the width +of its parent. Whenever the parent's width changes, the width of the \l Rectangle is +automatically updated. -\section2 Property types -QML supports properties of many types (see \l{QML Basic Types}). The basic types include int, -real, bool, string, color, and lists. + +\section1 Properties +\target intro-properties + +\section2 Basic property types + +QML supports properties of many types (see \l{QML Basic Types}). The basic types include \c int, +\c real, \c bool, \c string and \c color. \code Item { x: 10.5 // a 'real' property - ... state: "details" // a 'string' property focus: true // a 'bool' property + ... } \endcode @@ -183,31 +219,30 @@ Item { } \endcode -\section3 The \c id property +Note that with the exception of \l {Attached Properties}, properties always begin with a lowercase +letter. -Each object can be given a special unique property called an \e id. No other object within the -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 -own width by referring to \tt myRect.width, which means it will have the same \tt width -value as the first Rectangle element. +\section2 Property change notifications -\code -Item { - Rectangle { - id: myRect - width: 100 - height: 100 - } - Rectangle { - width: myRect.width - height: 200 - } +When a property changes value, it can send a signal to notify others of this change. + +To receive these signals, simply create a \e {signal handler} named with an \c onChanged +syntax. For example, the \l Rectangle element has \l {Item::}{width} and \l {Rectangle::}{color} +properties. Below, we have a \l Rectangle object that has defined two signal handlers, +\c onWidthChanged and \c onColorChanged, which will automaticallly be called whenever these +properties are modified: + +\qml +Rectangle { + width: 100; height: 100 + + onWidthChanged: console.log("Width has changed to:", width) + onColorChanged: console.log("Color has changed to:", color) } -\endcode +\endqml -Note that an \e id must begin with a lower-case letter or an underscore, and cannot contain characters other than letters, numbers and underscores. +Signal handlers are explained further \l {Signal Handlers}{below}. \section2 List properties @@ -293,7 +328,9 @@ Some objects attach properties to another object. Attached Properties are of the form \e {Type.property} where \e Type is the type of the element that attaches \e property. -For example: +For example, the \l ListView element attaches the \e ListView.isCurrentItem property +to each delegate it creates: + \code Component { id: myDelegate @@ -307,9 +344,6 @@ ListView { } \endcode -The \l ListView element attaches the \e ListView.isCurrentItem property -to each delegate it creates. - Another example of attached properties is the \l Keys element which attaches properties for handling key presses to any visual Item, for example: @@ -321,27 +355,40 @@ Item { } \endcode -\section2 Signal Handlers +\section1 Signal Handlers -Signal handlers allow actions to be taken in response to an event. For instance, -the \l MouseArea element has signal handlers to handle mouse press, release -and click: +Signal handlers allow JavaScript code to be executed in response to an event. For +example, the \l MouseArea element has an \l {MouseArea::}{onClicked} handler that can +be used to respond to a mouse click. Below, we use this handler to print a +message whenever the mouse is clicked: \code -MouseArea { - onPressed: console.log("mouse button pressed") +Item { + width: 100; height: 100 + + MouseArea { + anchors.fill: parent + onClicked: { + console.log("mouse button clicked") + } + } } \endcode All signal handlers begin with \e "on". -Some signal handlers include an optional parameter, for example -the MouseArea onPressed signal handler has a \e mouse parameter: +Some signal handlers include an optional parameter. For example +the MouseArea \l{MouseArea::}{onPressed} signal handler has a \c mouse parameter +that contains information about the mouse press. This parameter can be referred to in +the JavaScript code, as below: \code MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton - onPressed: if (mouse.button == Qt.RightButton) console.log("Right mouse button pressed") + onPressed: { + if (mouse.button == Qt.RightButton) + console.log("Right mouse button pressed") + } } \endcode diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index 24d9b03..922fa8f 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1333,23 +1333,6 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec } \endqml - \section1 Identity - - Each item has an "id" - the identifier of the Item. - - The identifier can be used in bindings and other expressions to - refer to the item. For example: - - \qml - Text { id: myText; ... } - Text { text: myText.text } - \endqml - - The identifier is available throughout to the \l {components}{component} - where it is declared. The identifier must be unique in the component. - - The id should not be thought of as a "property" - it makes no sense - to write \c myText.id, for example. \section1 Key Handling @@ -1376,17 +1359,6 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec \endqml See the \l {Keys}{Keys} attached property for detailed documentation. - - \section1 Property Change Signals - - Most properties on Item and Item derivatives have a signal - emitted when they change. By convention, the signals are - named Changed, e.g. xChanged will be emitted when an item's - x property changes. Note that these also have signal handers e.g. - the onXChanged signal handler will be called when an item's x property - changes. For many properties in Item or Item derivatives this can be used - to add a touch of imperative logic to your application (when absolutely - necessary). */ /*! -- cgit v0.12 From 1d7b672fd46abab51a0124ad19aad18e5d14f1a8 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Thu, 6 Jan 2011 14:10:35 +1000 Subject: Update docs - calling overloaded functions from QML is now supported --- doc/src/declarative/qtbinding.qdoc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/src/declarative/qtbinding.qdoc b/doc/src/declarative/qtbinding.qdoc index 04b8ca6..8ee7247 100644 --- a/doc/src/declarative/qtbinding.qdoc +++ b/doc/src/declarative/qtbinding.qdoc @@ -96,7 +96,7 @@ There are a number of ways to extend your QML application through C++. For examp \list \o Load a QML component and manipulate it (or its children) from C++ \o Embed a C++ object and its properties directly into a QML component (for example, to make a -particular C++ object callable from QML, or to replace a dummy list model data with a real data set) +particular C++ object callable from QML, or to replace a dummy list model with a real data set) \o Define new QML elements (through QObject-based C++ classes) and create them directly from your QML code \endlist @@ -297,17 +297,20 @@ methods on the \c myObject object, which has been set using QDeclarativeContext: \snippet doc/src/snippets/declarative/qtbinding/functions-cpp/main.cpp 0 \endtable -Note that QML does not support overloaded functions. If a C++ has more than one function with the -same name, there is no guarantee which overloaded function will be called from QML. +QML supports the calling of overloaded C++ functions. If there are multiple C++ functions with the +same name but different arguments, the correct function will be called according to the number and +the types of arguments that are provided. \section2 Receiving signals All QML signals are automatically available to C++, and can be connected to using QObject::connect() -like any ordinary Qt C++ signal. +like any ordinary Qt C++ signal. In return, any C++ signal can be received by a QML object using +\l {Signal Handlers}{signal handlers}. Here is a QML component with a signal named \c qmlSignal. This signal is connected to a C++ object's -slot using QObject::connect(): +slot using QObject::connect(), so that the \c cppSlot() method is called whenever the \c qmlSignal +is emitted: \table \row -- cgit v0.12 From 1ba3e41f09ea719249286fede5d3fe96621ccb61 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 6 Jan 2011 15:48:52 +1000 Subject: PathView: update modelCount before attempting to regenerate delegates. If the model is a VisualDataModel, the count will initally be zero and modelCount is not updated due to itemsInserted() before the component is completed. Task-number: QTBUG-16357 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativepathview.cpp | 4 +++- .../declarative/qdeclarativepathview/data/vdm.qml | 28 ++++++++++++++++++++++ .../tst_qdeclarativepathview.cpp | 14 +++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativepathview/data/vdm.qml diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp index e3987d0..74d3418 100644 --- a/src/declarative/graphicsitems/qdeclarativepathview.cpp +++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp @@ -1318,8 +1318,10 @@ void QDeclarativePathView::componentComplete() // It is possible that a refill has already happended to to Path // bindings being handled in the componentComplete(). If so // don't do it again. - if (d->items.count() == 0) + if (d->items.count() == 0 && d->model) { + d->modelCount = d->model->count(); d->regenerate(); + } d->updateHighlight(); } diff --git a/tests/auto/declarative/qdeclarativepathview/data/vdm.qml b/tests/auto/declarative/qdeclarativepathview/data/vdm.qml new file mode 100644 index 0000000..012db3f --- /dev/null +++ b/tests/auto/declarative/qdeclarativepathview/data/vdm.qml @@ -0,0 +1,28 @@ +import QtQuick 1.0 + +PathView { + id: pathView + width: 240; height: 320 + + pathItemCount: 4 + preferredHighlightBegin : 0.5 + preferredHighlightEnd : 0.5 + + path: Path { + startX: 120; startY: 20; + PathLine { x: 120; y: 300 } + } + + ListModel { + id: mo + ListElement { value: "one" } + ListElement { value: "two" } + ListElement { value: "three" } + } + + model: VisualDataModel { + delegate: Text { text: model.value } + model : mo + } +} + diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index 9193707..90b1056 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -87,6 +87,7 @@ private slots: void emptyModel(); void closed(); void pathUpdate(); + void visualDataModel(); private: QDeclarativeView *createView(); @@ -839,6 +840,19 @@ void tst_QDeclarativePathView::pathUpdate() delete canvas; } +void tst_QDeclarativePathView::visualDataModel() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/vdm.qml")); + + QDeclarativePathView *obj = qobject_cast(c.create()); + QVERIFY(obj != 0); + + QCOMPARE(obj->count(), 3); + + delete obj; +} + QDeclarativeView *tst_QDeclarativePathView::createView() { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From 05b9137fe1974aa123ce6d9c16b733e1f77d8269 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 6 Jan 2011 16:57:06 +1000 Subject: PathView crashed when the path is provided with undefined values. Task-number: QTBUG-16356 Reviewed-by: Bea Lam --- src/declarative/graphicsitems/qdeclarativepath.cpp | 8 +++++++- .../qdeclarativepathview/data/undefinedpath.qml | 17 +++++++++++++++++ .../qdeclarativepathview/tst_qdeclarativepathview.cpp | 14 ++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativepathview/data/undefinedpath.qml diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp index 966c51b..e63a2c3 100644 --- a/src/declarative/graphicsitems/qdeclarativepath.cpp +++ b/src/declarative/graphicsitems/qdeclarativepath.cpp @@ -46,6 +46,8 @@ #include #include +#include +#include QT_BEGIN_NAMESPACE @@ -367,9 +369,11 @@ void QDeclarativePath::createPointCache() const { Q_D(const QDeclarativePath); qreal pathLength = d->_path.length(); + if (pathLength <= 0 || qIsNaN(pathLength)) + return; // more points means less jitter between items as they move along the // path, but takes longer to generate - const int points = int(pathLength*5); + const int points = qCeil(pathLength*5); const int lastElement = d->_path.elementCount() - 1; d->_pointCache.resize(points+1); @@ -418,6 +422,8 @@ QPointF QDeclarativePath::pointAt(qreal p) const Q_D(const QDeclarativePath); if (d->_pointCache.isEmpty()) { createPointCache(); + if (d->_pointCache.isEmpty()) + return QPointF(); } int idx = qRound(p*d->_pointCache.size()); if (idx >= d->_pointCache.size()) diff --git a/tests/auto/declarative/qdeclarativepathview/data/undefinedpath.qml b/tests/auto/declarative/qdeclarativepathview/data/undefinedpath.qml new file mode 100644 index 0000000..5a647cb --- /dev/null +++ b/tests/auto/declarative/qdeclarativepathview/data/undefinedpath.qml @@ -0,0 +1,17 @@ +import QtQuick 1.0 + +PathView { + id: pathView + width: 240; height: 200 + path: Path { + startX: pathView.undef/2.0; startY: 0 + PathLine { x: pathView.undef/2.0; y: 0 } + } + + delegate: Text { text: value } + model: ListModel { + ListElement { value: "one" } + ListElement { value: "two" } + ListElement { value: "three" } + } +} diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp index 90b1056..bd8baab 100644 --- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp +++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp @@ -88,6 +88,7 @@ private slots: void closed(); void pathUpdate(); void visualDataModel(); + void undefinedPath(); private: QDeclarativeView *createView(); @@ -853,6 +854,19 @@ void tst_QDeclarativePathView::visualDataModel() delete obj; } +void tst_QDeclarativePathView::undefinedPath() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/undefinedpath.qml")); + + QDeclarativePathView *obj = qobject_cast(c.create()); + QVERIFY(obj != 0); + + QCOMPARE(obj->count(), 3); + + delete obj; +} + QDeclarativeView *tst_QDeclarativePathView::createView() { QDeclarativeView *canvas = new QDeclarativeView(0); -- cgit v0.12 From 70d96d5d17c62fb97ce15967012527dd8b292316 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Thu, 6 Jan 2011 09:51:29 +0100 Subject: fix build with namespaces in new cookie jar table forgot the QT_END_NAMESPACE macro. --- src/network/access/qnetworkcookiejartlds_p.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/network/access/qnetworkcookiejartlds_p.h b/src/network/access/qnetworkcookiejartlds_p.h index fc1c75f..b06d881 100644 --- a/src/network/access/qnetworkcookiejartlds_p.h +++ b/src/network/access/qnetworkcookiejartlds_p.h @@ -6476,4 +6476,6 @@ static const char tldData[] = { "santafe.museum\0org.ws\0" }; +QT_END_NAMESPACE + #endif // QNETWORKCOOKIEJARTLD_P_H -- cgit v0.12 From 574c5ae30b126f1b94d04f97d0605862e07f7860 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Thu, 6 Jan 2011 11:10:41 +0200 Subject: Updated QTOpenGL DEF files for WINSCW and ARMV5 Marked more functions absent Reviewed-by: TrustMe --- src/s60installs/bwins/QtOpenGLu.def | 157 ++++++++++++++++++++++++++++++++---- src/s60installs/eabi/QtOpenGLu.def | 44 +++++----- 2 files changed, 162 insertions(+), 39 deletions(-) diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 490eaf3..68dfe91 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -98,7 +98,7 @@ EXPORTS ?metaObject@QGLWindowSurface@@UBEPBUQMetaObject@@XZ @ 97 NONAME ; struct QMetaObject const * QGLWindowSurface::metaObject(void) const ?setAttributeBuffer@QGLShaderProgram@@QAEXHIHHH@Z @ 98 NONAME ; void QGLShaderProgram::setAttributeBuffer(int, unsigned int, int, int, int) ?getProcAddress@QGLContext@@QBEPAXABVQString@@@Z @ 99 NONAME ; void * QGLContext::getProcAddress(class QString const &) const - ?qt_metacall@QGLTextureGlyphCache@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 100 NONAME ; int QGLTextureGlyphCache::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QGLTextureGlyphCache@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 100 NONAME ABSENT ; int QGLTextureGlyphCache::qt_metacall(enum QMetaObject::Call, int, void * *) ??1QGLPixelBuffer@@UAE@XZ @ 101 NONAME ; QGLPixelBuffer::~QGLPixelBuffer(void) ?setUniformValueArray@QGLShaderProgram@@QAEXHPBVQVector4D@@H@Z @ 102 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QVector4D const *, int) ?releaseFromDynamicTexture@QGLPixelBuffer@@QAEXXZ @ 103 NONAME ; void QGLPixelBuffer::releaseFromDynamicTexture(void) @@ -115,7 +115,7 @@ EXPORTS ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$01$02M@@@Z @ 114 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<2, 3, float> const &) ?useCorrectShaderProg@QGLEngineShaderManager@@QAE_NXZ @ 115 NONAME ; bool QGLEngineShaderManager::useCorrectShaderProg(void) ?setAlphaBufferSize@QGLFormat@@QAEXH@Z @ 116 NONAME ; void QGLFormat::setAlphaBufferSize(int) - ??0QGLContextResource@@QAE@P6AXPAX@Z@Z @ 117 NONAME ; QGLContextResource::QGLContextResource(void (*)(void *)) + ??0QGLContextResource@@QAE@P6AXPAX@Z@Z @ 117 NONAME ABSENT ; QGLContextResource::QGLContextResource(void (*)(void *)) ?tr@QGLEngineShaderManager@@SA?AVQString@@PBD0H@Z @ 118 NONAME ; class QString QGLEngineShaderManager::tr(char const *, char const *, int) ?setUniformValue@QGLShaderProgram@@QAEXHABVQVector4D@@@Z @ 119 NONAME ; void QGLShaderProgram::setUniformValue(int, class QVector4D const &) ?d_func@QGLContext@@ABEPBVQGLContextPrivate@@XZ @ 120 NONAME ; class QGLContextPrivate const * QGLContext::d_func(void) const @@ -125,7 +125,7 @@ EXPORTS ?bindTexture@QGLWidget@@QAEIABVQImage@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 124 NONAME ; unsigned int QGLWidget::bindTexture(class QImage const &, unsigned int, int, class QFlags) ?ensureCreated@QGLPixmapData@@ABEXXZ @ 125 NONAME ; void QGLPixmapData::ensureCreated(void) const ?setSource@QGLCustomShaderStage@@IAEXABVQByteArray@@@Z @ 126 NONAME ; void QGLCustomShaderStage::setSource(class QByteArray const &) - ?trUtf8@QGLTextureGlyphCache@@SA?AVQString@@PBD0@Z @ 127 NONAME ; class QString QGLTextureGlyphCache::trUtf8(char const *, char const *) + ?trUtf8@QGLTextureGlyphCache@@SA?AVQString@@PBD0@Z @ 127 NONAME ABSENT ; class QString QGLTextureGlyphCache::trUtf8(char const *, char const *) ?removeFromPainter@QGLCustomShaderStage@@QAEXPAVQPainter@@@Z @ 128 NONAME ; void QGLCustomShaderStage::removeFromPainter(class QPainter *) ?qt_metacall@QGLWindowSurface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 129 NONAME ; int QGLWindowSurface::qt_metacall(enum QMetaObject::Call, int, void * *) ??0QGLBuffer@@QAE@W4Type@0@@Z @ 130 NONAME ; QGLBuffer::QGLBuffer(enum QGLBuffer::Type) @@ -207,7 +207,7 @@ EXPORTS ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$02$02M@@@Z @ 206 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<3, 3, float> const &) ?setUniformValue@QGLShaderProgram@@QAEXPBDMMMM@Z @ 207 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float, float, float, float) ?requestedFormat@QGLContext@@QBE?AVQGLFormat@@XZ @ 208 NONAME ; class QGLFormat QGLContext::requestedFormat(void) const - ?fillTexture@QGLTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@I@Z @ 209 NONAME ; void QGLTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int) + ?fillTexture@QGLTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@I@Z @ 209 NONAME ABSENT ; void QGLTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int) ?isNativePaintingActive@QGL2PaintEngineEx@@QBE_NXZ @ 210 NONAME ; bool QGL2PaintEngineEx::isNativePaintingActive(void) const ?accumBufferSize@QGLFormat@@QBEHXZ @ 211 NONAME ; int QGLFormat::accumBufferSize(void) const ?setAttributeValue@QGLShaderProgram@@QAEXHPBMHH@Z @ 212 NONAME ; void QGLShaderProgram::setAttributeValue(int, float const *, int, int) @@ -231,7 +231,7 @@ EXPORTS ??1QGLPaintDevice@@UAE@XZ @ 230 NONAME ; QGLPaintDevice::~QGLPaintDevice(void) ?setGeometryInputType@QGLShaderProgram@@QAEXI@Z @ 231 NONAME ; void QGLShaderProgram::setGeometryInputType(unsigned int) ?isValid@QGLPixmapData@@ABE_NXZ @ 232 NONAME ; bool QGLPixmapData::isValid(void) const - ?cleanup@QGLContextResource@@QAEXPBVQGLContext@@PAX@Z @ 233 NONAME ; void QGLContextResource::cleanup(class QGLContext const *, void *) + ?cleanup@QGLContextResource@@QAEXPBVQGLContext@@PAX@Z @ 233 NONAME ABSENT ; void QGLContextResource::cleanup(class QGLContext const *, void *) ?context@QGLWidget@@QBEPBVQGLContext@@XZ @ 234 NONAME ; class QGLContext const * QGLWidget::context(void) const ?tr@QGLShaderProgram@@SA?AVQString@@PBD0H@Z @ 235 NONAME ; class QString QGLShaderProgram::tr(char const *, char const *, int) ??0QGLPixelBuffer@@QAE@HHABVQGLFormat@@PAVQGLWidget@@@Z @ 236 NONAME ; QGLPixelBuffer::QGLPixelBuffer(int, int, class QGLFormat const &, class QGLWidget *) @@ -282,13 +282,13 @@ EXPORTS ??0QGLShaderProgram@@QAE@PBVQGLContext@@PAVQObject@@@Z @ 281 NONAME ; QGLShaderProgram::QGLShaderProgram(class QGLContext const *, class QObject *) ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$03$02M@@H@Z @ 282 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<4, 3, float> const *, int) ??0QGLShaderProgram@@QAE@PAVQObject@@@Z @ 283 NONAME ; QGLShaderProgram::QGLShaderProgram(class QObject *) - ?qt_metacast@QGLTextureGlyphCache@@UAEPAXPBD@Z @ 284 NONAME ; void * QGLTextureGlyphCache::qt_metacast(char const *) + ?qt_metacast@QGLTextureGlyphCache@@UAEPAXPBD@Z @ 284 NONAME ABSENT ; void * QGLTextureGlyphCache::qt_metacast(char const *) ?staticMetaObject@QGLEngineShaderManager@@2UQMetaObject@@B @ 285 NONAME ; struct QMetaObject const QGLEngineShaderManager::staticMetaObject ?setDevice@QGLContext@@IAEXPAVQPaintDevice@@@Z @ 286 NONAME ; void QGLContext::setDevice(class QPaintDevice *) ?setUniformValueArray@QGLShaderProgram@@QAEXHPBV?$QGenericMatrix@$02$01M@@H@Z @ 287 NONAME ; void QGLShaderProgram::setUniformValueArray(int, class QGenericMatrix<3, 2, float> const *, int) ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$03$02M@@@Z @ 288 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<4, 3, float> const &) ?setAttributeArray@QGLShaderProgram@@QAEXHIPBXHH@Z @ 289 NONAME ; void QGLShaderProgram::setAttributeArray(int, unsigned int, void const *, int, int) - ?tr@QGLTextureGlyphCache@@SA?AVQString@@PBD0H@Z @ 290 NONAME ; class QString QGLTextureGlyphCache::tr(char const *, char const *, int) + ?tr@QGLTextureGlyphCache@@SA?AVQString@@PBD0H@Z @ 290 NONAME ABSENT ; class QString QGLTextureGlyphCache::tr(char const *, char const *, int) ?setDefaultOverlayFormat@QGLFormat@@SAXABV1@@Z @ 291 NONAME ; void QGLFormat::setDefaultOverlayFormat(class QGLFormat const &) ?qt_gl_share_widget@@YAPAVQGLWidget@@XZ @ 292 NONAME ; class QGLWidget * qt_gl_share_widget(void) ?initializeOverlayGL@QGLWidget@@MAEXXZ @ 293 NONAME ; void QGLWidget::initializeOverlayGL(void) @@ -401,7 +401,7 @@ EXPORTS ?isValid@QGLWidget@@QBE_NXZ @ 400 NONAME ; bool QGLWidget::isValid(void) const ?shared_null@QGLColormap@@0UQGLColormapData@1@A @ 401 NONAME ; struct QGLColormap::QGLColormapData QGLColormap::shared_null ?setUniformValue@QGLShaderProgram@@QAEXPBDQAY01M@Z @ 402 NONAME ; void QGLShaderProgram::setUniformValue(char const *, float [2] * const) - ?insert@QGLContextResource@@QAEXPBVQGLContext@@PAX@Z @ 403 NONAME ; void QGLContextResource::insert(class QGLContext const *, void *) + ?insert@QGLContextResource@@QAEXPBVQGLContext@@PAX@Z @ 403 NONAME ABSENT ; void QGLContextResource::insert(class QGLContext const *, void *) ??0QGLCustomShaderStage@@QAE@XZ @ 404 NONAME ; QGLCustomShaderStage::QGLCustomShaderStage(void) ?setDefaultFormat@QGLFormat@@SAXABV1@@Z @ 405 NONAME ; void QGLFormat::setDefaultFormat(class QGLFormat const &) ?sourceCode@QGLShader@@QBE?AVQByteArray@@XZ @ 406 NONAME ; class QByteArray QGLShader::sourceCode(void) const @@ -421,7 +421,7 @@ EXPORTS ??_EQGLShaderProgram@@UAE@I@Z @ 420 NONAME ; QGLShaderProgram::~QGLShaderProgram(unsigned int) ?pixmapFilter@QGL2PaintEngineEx@@UAEPAVQPixmapFilter@@HPBV2@@Z @ 421 NONAME ; class QPixmapFilter * QGL2PaintEngineEx::pixmapFilter(int, class QPixmapFilter const *) ?scroll@QGLPixmapData@@UAE_NHHABVQRect@@@Z @ 422 NONAME ; bool QGLPixmapData::scroll(int, int, class QRect const &) - ?contextDestroyed@QGLTextureGlyphCache@@QAEXPBVQGLContext@@@Z @ 423 NONAME ; void QGLTextureGlyphCache::contextDestroyed(class QGLContext const *) + ?contextDestroyed@QGLTextureGlyphCache@@QAEXPBVQGLContext@@@Z @ 423 NONAME ABSENT ; void QGLTextureGlyphCache::contextDestroyed(class QGLContext const *) ??0QGLColormap@@QAE@XZ @ 424 NONAME ; QGLColormap::QGLColormap(void) ?metric@QGLFramebufferObject@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 425 NONAME ; int QGLFramebufferObject::metric(enum QPaintDevice::PaintDeviceMetric) const ?devType@QGLFramebufferObject@@MBEHXZ @ 426 NONAME ; int QGLFramebufferObject::devType(void) const @@ -468,7 +468,7 @@ EXPORTS ?d_func@QGL2PaintEngineEx@@AAEPAVQGL2PaintEngineExPrivate@@XZ @ 467 NONAME ; class QGL2PaintEngineExPrivate * QGL2PaintEngineEx::d_func(void) ?resize@QGLPixmapData@@UAEXHH@Z @ 468 NONAME ; void QGLPixmapData::resize(int, int) ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$01$01M@@@Z @ 469 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<2, 2, float> const &) - ?trUtf8@QGLTextureGlyphCache@@SA?AVQString@@PBD0H@Z @ 470 NONAME ; class QString QGLTextureGlyphCache::trUtf8(char const *, char const *, int) + ?trUtf8@QGLTextureGlyphCache@@SA?AVQString@@PBD0H@Z @ 470 NONAME ABSENT ; class QString QGLTextureGlyphCache::trUtf8(char const *, char const *, int) ?begin@QGL2PaintEngineEx@@UAE_NPAVQPaintDevice@@@Z @ 471 NONAME ; bool QGL2PaintEngineEx::begin(class QPaintDevice *) ?samples@QGLFormat@@QBEHXZ @ 472 NONAME ; int QGLFormat::samples(void) const ?setFormat@QGLContext@@QAEXABVQGLFormat@@@Z @ 473 NONAME ; void QGLContext::setFormat(class QGLFormat const &) @@ -495,7 +495,7 @@ EXPORTS ?setGeometryOutputVertexCount@QGLShaderProgram@@QAEXH@Z @ 494 NONAME ; void QGLShaderProgram::setGeometryOutputVertexCount(int) ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQSize@@@Z @ 495 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QSize const &) ?convertToGLFormat@QGLWidget@@SA?AVQImage@@ABV2@@Z @ 496 NONAME ; class QImage QGLWidget::convertToGLFormat(class QImage const &) - ?staticMetaObject@QGLTextureGlyphCache@@2UQMetaObject@@B @ 497 NONAME ; struct QMetaObject const QGLTextureGlyphCache::staticMetaObject + ?staticMetaObject@QGLTextureGlyphCache@@2UQMetaObject@@B @ 497 NONAME ABSENT ; struct QMetaObject const QGLTextureGlyphCache::staticMetaObject ??_EQGLContextResource@@QAE@I@Z @ 498 NONAME ABSENT ; QGLContextResource::~QGLContextResource(unsigned int) ?handle@QGLColormap@@IAEKXZ @ 499 NONAME ; unsigned long QGLColormap::handle(void) ?isCreated@QGLBuffer@@QBE_NXZ @ 500 NONAME ; bool QGLBuffer::isCreated(void) const @@ -549,7 +549,7 @@ EXPORTS ?setUniformValue@QGLShaderProgram@@QAEXPBDABVQPointF@@@Z @ 548 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QPointF const &) ?getDevice@QGLPaintDevice@@SAPAV1@PAVQPaintDevice@@@Z @ 549 NONAME ; class QGLPaintDevice * QGLPaintDevice::getDevice(class QPaintDevice *) ?setUniformValue@QGLShaderProgram@@QAEXHQAY02M@Z @ 550 NONAME ; void QGLShaderProgram::setUniformValue(int, float [3] * const) - ?getStaticMetaObject@QGLTextureGlyphCache@@SAABUQMetaObject@@XZ @ 551 NONAME ; struct QMetaObject const & QGLTextureGlyphCache::getStaticMetaObject(void) + ?getStaticMetaObject@QGLTextureGlyphCache@@SAABUQMetaObject@@XZ @ 551 NONAME ABSENT ; struct QMetaObject const & QGLTextureGlyphCache::getStaticMetaObject(void) ?swapBuffers@QGLContext@@UBEXXZ @ 552 NONAME ; void QGLContext::swapBuffers(void) const ?renderText@QGLWidget@@QAEXHHABVQString@@ABVQFont@@H@Z @ 553 NONAME ; void QGLWidget::renderText(int, int, class QString const &, class QFont const &, int) ?defaultFormat@QGLFormat@@SA?AV1@XZ @ 554 NONAME ; class QGLFormat QGLFormat::defaultFormat(void) @@ -558,7 +558,7 @@ EXPORTS ?bindTexture@QGLContext@@QAEIABVQImage@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 557 NONAME ; unsigned int QGLContext::bindTexture(class QImage const &, unsigned int, int, class QFlags) ?initialized@QGLContext@@IBE_NXZ @ 558 NONAME ; bool QGLContext::initialized(void) const ?cleanup@QGLColormap@@CAXPAUQGLColormapData@1@@Z @ 559 NONAME ; void QGLColormap::cleanup(struct QGLColormap::QGLColormapData *) - ??1QGLContextResource@@QAE@XZ @ 560 NONAME ; QGLContextResource::~QGLContextResource(void) + ??1QGLContextResource@@QAE@XZ @ 560 NONAME ABSENT ; QGLContextResource::~QGLContextResource(void) ?bindTexture@QGLWidget@@QAEIABVQPixmap@@IHV?$QFlags@W4BindOption@QGLContext@@@@@Z @ 561 NONAME ; unsigned int QGLWidget::bindTexture(class QPixmap const &, unsigned int, int, class QFlags) ?setUniformValue@QGLShaderProgram@@QAEXPBDABV?$QGenericMatrix@$02$01M@@@Z @ 562 NONAME ; void QGLShaderProgram::setUniformValue(char const *, class QGenericMatrix<3, 2, float> const &) ?setUniformValueArray@QGLShaderProgram@@QAEXHPBMHH@Z @ 563 NONAME ; void QGLShaderProgram::setUniformValueArray(int, float const *, int, int) @@ -589,7 +589,7 @@ EXPORTS ?setUniforms@QGraphicsShaderEffect@@MAEXPAVQGLShaderProgram@@@Z @ 588 NONAME ; void QGraphicsShaderEffect::setUniforms(class QGLShaderProgram *) ?drawImage@QGL2PaintEngineEx@@UAEXABVQRectF@@ABVQImage@@0V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 589 NONAME ; void QGL2PaintEngineEx::drawImage(class QRectF const &, class QImage const &, class QRectF const &, class QFlags) ?flush@QGLWindowSurface@@UAEXPAVQWidget@@ABVQRegion@@ABVQPoint@@@Z @ 590 NONAME ; void QGLWindowSurface::flush(class QWidget *, class QRegion const &, class QPoint const &) - ??0QGLTextureGlyphCache@@QAE@PAVQGLContext@@W4Type@QFontEngineGlyphCache@@ABVQTransform@@@Z @ 591 NONAME ; QGLTextureGlyphCache::QGLTextureGlyphCache(class QGLContext *, enum QFontEngineGlyphCache::Type, class QTransform const &) + ??0QGLTextureGlyphCache@@QAE@PAVQGLContext@@W4Type@QFontEngineGlyphCache@@ABVQTransform@@@Z @ 591 NONAME ABSENT ; QGLTextureGlyphCache::QGLTextureGlyphCache(class QGLContext *, enum QFontEngineGlyphCache::Type, class QTransform const &) ??_EQGLTextureGlyphCache@@UAE@I@Z @ 592 NONAME ; QGLTextureGlyphCache::~QGLTextureGlyphCache(unsigned int) ??1QGLShareContextScope@@QAE@XZ @ 593 NONAME ; QGLShareContextScope::~QGLShareContextScope(void) ?alpha@QGLFormat@@QBE_NXZ @ 594 NONAME ; bool QGLFormat::alpha(void) const @@ -633,8 +633,8 @@ EXPORTS ?qt_metacast@QGLEngineShaderManager@@UAEPAXPBD@Z @ 632 NONAME ; void * QGLEngineShaderManager::qt_metacast(char const *) ?sampleBuffers@QGLFormat@@QBE_NXZ @ 633 NONAME ; bool QGLFormat::sampleBuffers(void) const ?trUtf8@QGLWindowSurface@@SA?AVQString@@PBD0H@Z @ 634 NONAME ; class QString QGLWindowSurface::trUtf8(char const *, char const *, int) - ?shaderProgNeedsChangingSlot@QGLEngineShaderManager@@AAEXXZ @ 635 NONAME ; void QGLEngineShaderManager::shaderProgNeedsChangingSlot(void) - ?metaObject@QGLTextureGlyphCache@@UBEPBUQMetaObject@@XZ @ 636 NONAME ; struct QMetaObject const * QGLTextureGlyphCache::metaObject(void) const + ?shaderProgNeedsChangingSlot@QGLEngineShaderManager@@AAEXXZ @ 635 NONAME ABSENT ; void QGLEngineShaderManager::shaderProgNeedsChangingSlot(void) + ?metaObject@QGLTextureGlyphCache@@UBEPBUQMetaObject@@XZ @ 636 NONAME ABSENT ; struct QMetaObject const * QGLTextureGlyphCache::metaObject(void) const ?paintEvent@QGLWidget@@MAEXPAVQPaintEvent@@@Z @ 637 NONAME ; void QGLWidget::paintEvent(class QPaintEvent *) ?uniformLocation@QGLShaderProgram@@QBEHABVQByteArray@@@Z @ 638 NONAME ; int QGLShaderProgram::uniformLocation(class QByteArray const &) const ?currentContext@QGLContext@@SAPBV1@XZ @ 639 NONAME ; class QGLContext const * QGLContext::currentContext(void) @@ -643,7 +643,7 @@ EXPORTS ?setUniformValueArray@QGLShaderProgram@@QAEXPBDPBV?$QGenericMatrix@$01$01M@@H@Z @ 642 NONAME ; void QGLShaderProgram::setUniformValueArray(char const *, class QGenericMatrix<2, 2, float> const *, int) ?drawStaticTextItem@QGL2PaintEngineEx@@UAEXPAVQStaticTextItem@@@Z @ 643 NONAME ; void QGL2PaintEngineEx::drawStaticTextItem(class QStaticTextItem *) ?metaObject@QGLShader@@UBEPBUQMetaObject@@XZ @ 644 NONAME ; struct QMetaObject const * QGLShader::metaObject(void) const - ?tr@QGLTextureGlyphCache@@SA?AVQString@@PBD0@Z @ 645 NONAME ; class QString QGLTextureGlyphCache::tr(char const *, char const *) + ?tr@QGLTextureGlyphCache@@SA?AVQString@@PBD0@Z @ 645 NONAME ABSENT ; class QString QGLTextureGlyphCache::tr(char const *, char const *) ?drawTexture@QGLFramebufferObject@@QAEXABVQRectF@@II@Z @ 646 NONAME ; void QGLFramebufferObject::drawTexture(class QRectF const &, unsigned int, unsigned int) ?openGLVersionFlags@QGLFormat@@SA?AV?$QFlags@W4OpenGLVersionFlag@QGLFormat@@@@XZ @ 647 NONAME ; class QFlags QGLFormat::openGLVersionFlags(void) ?setRedBufferSize@QGLFormat@@QAEXH@Z @ 648 NONAME ; void QGLFormat::setRedBufferSize(int) @@ -703,4 +703,127 @@ EXPORTS ?maxTextureWidth@QGLTextureGlyphCache@@UBEHXZ @ 702 NONAME ; int QGLTextureGlyphCache::maxTextureWidth(void) const ?filterMode@QGLTextureGlyphCache@@QBE?AW4FilterMode@1@XZ @ 703 NONAME ; enum QGLTextureGlyphCache::FilterMode QGLTextureGlyphCache::filterMode(void) const ?setFilterMode@QGLTextureGlyphCache@@QAEXW4FilterMode@1@@Z @ 704 NONAME ; void QGLTextureGlyphCache::setFilterMode(enum QGLTextureGlyphCache::FilterMode) + ?glVertexAttrib3f@QGLFunctions@@QAEXIMMM@Z @ 705 NONAME ; void QGLFunctions::glVertexAttrib3f(unsigned int, float, float, float) + ?glVertexAttrib1fv@QGLFunctions@@QAEXIPBM@Z @ 706 NONAME ; void QGLFunctions::glVertexAttrib1fv(unsigned int, float const *) + ?glIsBuffer@QGLFunctions@@QAEEI@Z @ 707 NONAME ; unsigned char QGLFunctions::glIsBuffer(unsigned int) + ?glGetActiveAttrib@QGLFunctions@@QAEXIIHPAH0PAIPAD@Z @ 708 NONAME ; void QGLFunctions::glGetActiveAttrib(unsigned int, unsigned int, int, int *, int *, unsigned int *, char *) + ?glBindFramebuffer@QGLFunctions@@QAEXII@Z @ 709 NONAME ; void QGLFunctions::glBindFramebuffer(unsigned int, unsigned int) + ?glBufferData@QGLFunctions@@QAEXIHPBXI@Z @ 710 NONAME ; void QGLFunctions::glBufferData(unsigned int, int, void const *, unsigned int) + ?glValidateProgram@QGLFunctions@@QAEXI@Z @ 711 NONAME ; void QGLFunctions::glValidateProgram(unsigned int) + ?glUniform1f@QGLFunctions@@QAEXHM@Z @ 712 NONAME ; void QGLFunctions::glUniform1f(int, float) + ?glDetachShader@QGLFunctions@@QAEXII@Z @ 713 NONAME ; void QGLFunctions::glDetachShader(unsigned int, unsigned int) + ?glDeleteProgram@QGLFunctions@@QAEXI@Z @ 714 NONAME ; void QGLFunctions::glDeleteProgram(unsigned int) + ??_EQGLContextResourceBase@@UAE@I@Z @ 715 NONAME ; QGLContextResourceBase::~QGLContextResourceBase(unsigned int) + ?glUniform2f@QGLFunctions@@QAEXHMM@Z @ 716 NONAME ; void QGLFunctions::glUniform2f(int, float, float) + ?glIsProgram@QGLFunctions@@QAEEI@Z @ 717 NONAME ; unsigned char QGLFunctions::glIsProgram(unsigned int) + ?openGLFeatures@QGLFunctions@@QBE?AV?$QFlags@W4OpenGLFeature@QGLFunctions@@@@XZ @ 718 NONAME ; class QFlags QGLFunctions::openGLFeatures(void) const + ?glReleaseShaderCompiler@QGLFunctions@@QAEXXZ @ 719 NONAME ; void QGLFunctions::glReleaseShaderCompiler(void) + ??0QGLTextureGlyphCache@@QAE@PBVQGLContext@@W4Type@QFontEngineGlyphCache@@ABVQTransform@@@Z @ 720 NONAME ; QGLTextureGlyphCache::QGLTextureGlyphCache(class QGLContext const *, enum QFontEngineGlyphCache::Type, class QTransform const &) + ?context@QGLTextureGlyphCache@@QBEPBVQGLContext@@XZ @ 721 NONAME ; class QGLContext const * QGLTextureGlyphCache::context(void) const + ?glGenRenderbuffers@QGLFunctions@@QAEXHPAI@Z @ 722 NONAME ; void QGLFunctions::glGenRenderbuffers(int, unsigned int *) + ?glBindBuffer@QGLFunctions@@QAEXII@Z @ 723 NONAME ; void QGLFunctions::glBindBuffer(unsigned int, unsigned int) + ?glUniformMatrix3fv@QGLFunctions@@QAEXHHEPBM@Z @ 724 NONAME ; void QGLFunctions::glUniformMatrix3fv(int, int, unsigned char, float const *) + ?glGenerateMipmap@QGLFunctions@@QAEXI@Z @ 725 NONAME ; void QGLFunctions::glGenerateMipmap(unsigned int) + ?hasOpenGLFeature@QGLFunctions@@QBE_NW4OpenGLFeature@1@@Z @ 726 NONAME ; bool QGLFunctions::hasOpenGLFeature(enum QGLFunctions::OpenGLFeature) const + ?glGetAttachedShaders@QGLFunctions@@QAEXIHPAHPAI@Z @ 727 NONAME ; void QGLFunctions::glGetAttachedShaders(unsigned int, int, int *, unsigned int *) + ?glDeleteShader@QGLFunctions@@QAEXI@Z @ 728 NONAME ; void QGLFunctions::glDeleteShader(unsigned int) + ?glLinkProgram@QGLFunctions@@QAEXI@Z @ 729 NONAME ; void QGLFunctions::glLinkProgram(unsigned int) + ?glUseProgram@QGLFunctions@@QAEXI@Z @ 730 NONAME ; void QGLFunctions::glUseProgram(unsigned int) + ??0QGLFunctions@@QAE@PBVQGLContext@@@Z @ 731 NONAME ; QGLFunctions::QGLFunctions(class QGLContext const *) + ?glGetBufferParameteriv@QGLFunctions@@QAEXIIPAH@Z @ 732 NONAME ; void QGLFunctions::glGetBufferParameteriv(unsigned int, unsigned int, int *) + ?glGenBuffers@QGLFunctions@@QAEXHPAI@Z @ 733 NONAME ; void QGLFunctions::glGenBuffers(int, unsigned int *) + ?glGetShaderiv@QGLFunctions@@QAEXIIPAH@Z @ 734 NONAME ; void QGLFunctions::glGetShaderiv(unsigned int, unsigned int, int *) + ?fillTexture@QGLTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 735 NONAME ; void QGLTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed) + ?glUniform2fv@QGLFunctions@@QAEXHHPBM@Z @ 736 NONAME ; void QGLFunctions::glUniform2fv(int, int, float const *) + ??0QGLContextGroupResourceBase@@QAE@XZ @ 737 NONAME ; QGLContextGroupResourceBase::QGLContextGroupResourceBase(void) + ?glGetFramebufferAttachmentParameteriv@QGLFunctions@@QAEXIIIPAH@Z @ 738 NONAME ; void QGLFunctions::glGetFramebufferAttachmentParameteriv(unsigned int, unsigned int, unsigned int, int *) + ?cleanup@QGLContextGroupResourceBase@@QAEXPBVQGLContext@@PAX@Z @ 739 NONAME ; void QGLContextGroupResourceBase::cleanup(class QGLContext const *, void *) + ?glUniform2iv@QGLFunctions@@QAEXHHPBH@Z @ 740 NONAME ; void QGLFunctions::glUniform2iv(int, int, int const *) + ?glCompileShader@QGLFunctions@@QAEXI@Z @ 741 NONAME ; void QGLFunctions::glCompileShader(unsigned int) + ?glGetProgramiv@QGLFunctions@@QAEXIIPAH@Z @ 742 NONAME ; void QGLFunctions::glGetProgramiv(unsigned int, unsigned int, int *) + ?glClearDepthf@QGLFunctions@@QAEXM@Z @ 743 NONAME ; void QGLFunctions::glClearDepthf(float) + ?glIsFramebuffer@QGLFunctions@@QAEEI@Z @ 744 NONAME ; unsigned char QGLFunctions::glIsFramebuffer(unsigned int) + ?glUniform4f@QGLFunctions@@QAEXHMMMM@Z @ 745 NONAME ; void QGLFunctions::glUniform4f(int, float, float, float, float) + ?glUniform3f@QGLFunctions@@QAEXHMMM@Z @ 746 NONAME ; void QGLFunctions::glUniform3f(int, float, float, float) + ?glDeleteRenderbuffers@QGLFunctions@@QAEXHPBI@Z @ 747 NONAME ; void QGLFunctions::glDeleteRenderbuffers(int, unsigned int const *) + ?glVertexAttrib1f@QGLFunctions@@QAEXIM@Z @ 748 NONAME ; void QGLFunctions::glVertexAttrib1f(unsigned int, float) + ?glVertexAttrib4f@QGLFunctions@@QAEXIMMMM@Z @ 749 NONAME ; void QGLFunctions::glVertexAttrib4f(unsigned int, float, float, float, float) + ?glSampleCoverage@QGLFunctions@@QAEXME@Z @ 750 NONAME ; void QGLFunctions::glSampleCoverage(float, unsigned char) + ?glGetActiveUniform@QGLFunctions@@QAEXIIHPAH0PAIPAD@Z @ 751 NONAME ; void QGLFunctions::glGetActiveUniform(unsigned int, unsigned int, int, int *, int *, unsigned int *, char *) + ??_EQGLContextGroupResourceBase@@UAE@I@Z @ 752 NONAME ; QGLContextGroupResourceBase::~QGLContextGroupResourceBase(unsigned int) + ?glStencilOpSeparate@QGLFunctions@@QAEXIIII@Z @ 753 NONAME ; void QGLFunctions::glStencilOpSeparate(unsigned int, unsigned int, unsigned int, unsigned int) + ?glCheckFramebufferStatus@QGLFunctions@@QAEII@Z @ 754 NONAME ; unsigned int QGLFunctions::glCheckFramebufferStatus(unsigned int) + ?glDepthRangef@QGLFunctions@@QAEXMM@Z @ 755 NONAME ; void QGLFunctions::glDepthRangef(float, float) + ??1QGLFunctions@@QAE@XZ @ 756 NONAME ; QGLFunctions::~QGLFunctions(void) + ?glStencilMaskSeparate@QGLFunctions@@QAEXII@Z @ 757 NONAME ; void QGLFunctions::glStencilMaskSeparate(unsigned int, unsigned int) + ?glBlendColor@QGLFunctions@@QAEXMMMM@Z @ 758 NONAME ; void QGLFunctions::glBlendColor(float, float, float, float) + ?glUniform1fv@QGLFunctions@@QAEXHHPBM@Z @ 759 NONAME ; void QGLFunctions::glUniform1fv(int, int, float const *) + ??1QGLContextResourceBase@@UAE@XZ @ 760 NONAME ; QGLContextResourceBase::~QGLContextResourceBase(void) + ?glCreateProgram@QGLFunctions@@QAEIXZ @ 761 NONAME ; unsigned int QGLFunctions::glCreateProgram(void) + ?glVertexAttrib2f@QGLFunctions@@QAEXIMM@Z @ 762 NONAME ; void QGLFunctions::glVertexAttrib2f(unsigned int, float, float) + ?glUniformMatrix2fv@QGLFunctions@@QAEXHHEPBM@Z @ 763 NONAME ; void QGLFunctions::glUniformMatrix2fv(int, int, unsigned char, float const *) + ?glBufferSubData@QGLFunctions@@QAEXIHHPBX@Z @ 764 NONAME ; void QGLFunctions::glBufferSubData(unsigned int, int, int, void const *) + ?glUniform1iv@QGLFunctions@@QAEXHHPBH@Z @ 765 NONAME ; void QGLFunctions::glUniform1iv(int, int, int const *) + ?qt_resolve_buffer_extensions@@YA_NPAVQGLContext@@@Z @ 766 NONAME ; bool qt_resolve_buffer_extensions(class QGLContext *) + ?glUniform1i@QGLFunctions@@QAEXHH@Z @ 767 NONAME ; void QGLFunctions::glUniform1i(int, int) + ?glVertexAttrib4fv@QGLFunctions@@QAEXIPBM@Z @ 768 NONAME ; void QGLFunctions::glVertexAttrib4fv(unsigned int, float const *) + ?glDeleteFramebuffers@QGLFunctions@@QAEXHPBI@Z @ 769 NONAME ; void QGLFunctions::glDeleteFramebuffers(int, unsigned int const *) + ?glGetVertexAttribfv@QGLFunctions@@QAEXIIPAM@Z @ 770 NONAME ; void QGLFunctions::glGetVertexAttribfv(unsigned int, unsigned int, float *) + ?glGetProgramInfoLog@QGLFunctions@@QAEXIHPAHPAD@Z @ 771 NONAME ; void QGLFunctions::glGetProgramInfoLog(unsigned int, int, int *, char *) + ?glGetShaderInfoLog@QGLFunctions@@QAEXIHPAHPAD@Z @ 772 NONAME ; void QGLFunctions::glGetShaderInfoLog(unsigned int, int, int *, char *) + ?glEnableVertexAttribArray@QGLFunctions@@QAEXI@Z @ 773 NONAME ; void QGLFunctions::glEnableVertexAttribArray(unsigned int) + ?glGetVertexAttribiv@QGLFunctions@@QAEXIIPAH@Z @ 774 NONAME ; void QGLFunctions::glGetVertexAttribiv(unsigned int, unsigned int, int *) + ?glCompressedTexImage2D@QGLFunctions@@QAEXIHIHHHHPBX@Z @ 775 NONAME ; void QGLFunctions::glCompressedTexImage2D(unsigned int, int, unsigned int, int, int, int, int, void const *) + ?glGetAttribLocation@QGLFunctions@@QAEHIPBD@Z @ 776 NONAME ; int QGLFunctions::glGetAttribLocation(unsigned int, char const *) + ?glActiveTexture@QGLFunctions@@QAEXI@Z @ 777 NONAME ; void QGLFunctions::glActiveTexture(unsigned int) + ?glUniform4fv@QGLFunctions@@QAEXHHPBM@Z @ 778 NONAME ; void QGLFunctions::glUniform4fv(int, int, float const *) + ?glCreateShader@QGLFunctions@@QAEII@Z @ 779 NONAME ; unsigned int QGLFunctions::glCreateShader(unsigned int) + ?glAttachShader@QGLFunctions@@QAEXII@Z @ 780 NONAME ; void QGLFunctions::glAttachShader(unsigned int, unsigned int) + ?glRenderbufferStorage@QGLFunctions@@QAEXIIHH@Z @ 781 NONAME ; void QGLFunctions::glRenderbufferStorage(unsigned int, unsigned int, int, int) + ?glVertexAttribPointer@QGLFunctions@@QAEXIHIEHPBX@Z @ 782 NONAME ; void QGLFunctions::glVertexAttribPointer(unsigned int, int, unsigned int, unsigned char, int, void const *) + ?glUniform4iv@QGLFunctions@@QAEXHHPBH@Z @ 783 NONAME ; void QGLFunctions::glUniform4iv(int, int, int const *) + ?glDisableVertexAttribArray@QGLFunctions@@QAEXI@Z @ 784 NONAME ; void QGLFunctions::glDisableVertexAttribArray(unsigned int) + ?glIsShader@QGLFunctions@@QAEEI@Z @ 785 NONAME ; unsigned char QGLFunctions::glIsShader(unsigned int) + ?glShaderBinary@QGLFunctions@@QAEXHPBIIPBXH@Z @ 786 NONAME ; void QGLFunctions::glShaderBinary(int, unsigned int const *, unsigned int, void const *, int) + ?glGenFramebuffers@QGLFunctions@@QAEXHPAI@Z @ 787 NONAME ; void QGLFunctions::glGenFramebuffers(int, unsigned int *) + ?glVertexAttrib3fv@QGLFunctions@@QAEXIPBM@Z @ 788 NONAME ; void QGLFunctions::glVertexAttrib3fv(unsigned int, float const *) + ?glGetVertexAttribPointerv@QGLFunctions@@QAEXIIPAPAX@Z @ 789 NONAME ; void QGLFunctions::glGetVertexAttribPointerv(unsigned int, unsigned int, void * *) + ?glUniformMatrix4fv@QGLFunctions@@QAEXHHEPBM@Z @ 790 NONAME ; void QGLFunctions::glUniformMatrix4fv(int, int, unsigned char, float const *) + ?setContext@QGLTextureGlyphCache@@QAEXPBVQGLContext@@@Z @ 791 NONAME ; void QGLTextureGlyphCache::setContext(class QGLContext const *) + ?glDeleteBuffers@QGLFunctions@@QAEXHPBI@Z @ 792 NONAME ; void QGLFunctions::glDeleteBuffers(int, unsigned int const *) + ?glBindRenderbuffer@QGLFunctions@@QAEXII@Z @ 793 NONAME ; void QGLFunctions::glBindRenderbuffer(unsigned int, unsigned int) + ?glStencilFuncSeparate@QGLFunctions@@QAEXIIHI@Z @ 794 NONAME ; void QGLFunctions::glStencilFuncSeparate(unsigned int, unsigned int, int, unsigned int) + ?glGetUniformLocation@QGLFunctions@@QAEHIPBD@Z @ 795 NONAME ; int QGLFunctions::glGetUniformLocation(unsigned int, char const *) + ?glGetRenderbufferParameteriv@QGLFunctions@@QAEXIIPAH@Z @ 796 NONAME ; void QGLFunctions::glGetRenderbufferParameteriv(unsigned int, unsigned int, int *) + ?glBindAttribLocation@QGLFunctions@@QAEXIIPBD@Z @ 797 NONAME ; void QGLFunctions::glBindAttribLocation(unsigned int, unsigned int, char const *) + ?glGetShaderSource@QGLFunctions@@QAEXIHPAHPAD@Z @ 798 NONAME ; void QGLFunctions::glGetShaderSource(unsigned int, int, int *, char *) + ?setMipmap@QGLFramebufferObjectFormat@@QAEX_N@Z @ 799 NONAME ; void QGLFramebufferObjectFormat::setMipmap(bool) + ??1QGLContextGroupResourceBase@@UAE@XZ @ 800 NONAME ; QGLContextGroupResourceBase::~QGLContextGroupResourceBase(void) + ?glFramebufferTexture2D@QGLFunctions@@QAEXIIIIH@Z @ 801 NONAME ; void QGLFunctions::glFramebufferTexture2D(unsigned int, unsigned int, unsigned int, unsigned int, int) + ?glBlendEquationSeparate@QGLFunctions@@QAEXII@Z @ 802 NONAME ; void QGLFunctions::glBlendEquationSeparate(unsigned int, unsigned int) + ?insert@QGLContextResourceBase@@QAEXPBVQGLContext@@PAX@Z @ 803 NONAME ; void QGLContextResourceBase::insert(class QGLContext const *, void *) + ?glUniform2i@QGLFunctions@@QAEXHHH@Z @ 804 NONAME ; void QGLFunctions::glUniform2i(int, int, int) + ?glGetUniformfv@QGLFunctions@@QAEXIHPAM@Z @ 805 NONAME ; void QGLFunctions::glGetUniformfv(unsigned int, int, float *) + ?glUniform3i@QGLFunctions@@QAEXHHHH@Z @ 806 NONAME ; void QGLFunctions::glUniform3i(int, int, int, int) + ?glIsRenderbuffer@QGLFunctions@@QAEEI@Z @ 807 NONAME ; unsigned char QGLFunctions::glIsRenderbuffer(unsigned int) + ?initializeGLFunctions@QGLFunctions@@QAEXPBVQGLContext@@@Z @ 808 NONAME ; void QGLFunctions::initializeGLFunctions(class QGLContext const *) + ??0QGLFunctions@@QAE@XZ @ 809 NONAME ; QGLFunctions::QGLFunctions(void) + ?glVertexAttrib2fv@QGLFunctions@@QAEXIPBM@Z @ 810 NONAME ; void QGLFunctions::glVertexAttrib2fv(unsigned int, float const *) + ?isInitialized@QGLFunctions@@CA_NPBUQGLFunctionsPrivate@@@Z @ 811 NONAME ; bool QGLFunctions::isInitialized(struct QGLFunctionsPrivate const *) + ?glGetUniformiv@QGLFunctions@@QAEXIHPAH@Z @ 812 NONAME ; void QGLFunctions::glGetUniformiv(unsigned int, int, int *) + ?glBlendEquation@QGLFunctions@@QAEXI@Z @ 813 NONAME ; void QGLFunctions::glBlendEquation(unsigned int) + ?glFramebufferRenderbuffer@QGLFunctions@@QAEXIIII@Z @ 814 NONAME ; void QGLFunctions::glFramebufferRenderbuffer(unsigned int, unsigned int, unsigned int, unsigned int) + ?glUniform4i@QGLFunctions@@QAEXHHHHH@Z @ 815 NONAME ; void QGLFunctions::glUniform4i(int, int, int, int, int) + ?glUniform3fv@QGLFunctions@@QAEXHHPBM@Z @ 816 NONAME ; void QGLFunctions::glUniform3fv(int, int, float const *) + ?value@QGLContextResourceBase@@QAEPAXPBVQGLContext@@@Z @ 817 NONAME ; void * QGLContextResourceBase::value(class QGLContext const *) + ?glBlendFuncSeparate@QGLFunctions@@QAEXIIII@Z @ 818 NONAME ; void QGLFunctions::glBlendFuncSeparate(unsigned int, unsigned int, unsigned int, unsigned int) + ?glCompressedTexSubImage2D@QGLFunctions@@QAEXIHHHHHIHPBX@Z @ 819 NONAME ; void QGLFunctions::glCompressedTexSubImage2D(unsigned int, int, int, int, int, int, unsigned int, int, void const *) + ?freeResource@QGLTextureGlyphCache@@UAEXPAX@Z @ 820 NONAME ; void QGLTextureGlyphCache::freeResource(void *) + ?value@QGLContextGroupResourceBase@@QAEPAXPBVQGLContext@@@Z @ 821 NONAME ; void * QGLContextGroupResourceBase::value(class QGLContext const *) + ?glUniform3iv@QGLFunctions@@QAEXHHPBH@Z @ 822 NONAME ; void QGLFunctions::glUniform3iv(int, int, int const *) + ?mipmap@QGLFramebufferObjectFormat@@QBE_NXZ @ 823 NONAME ; bool QGLFramebufferObjectFormat::mipmap(void) const + ?qt_extensionFuncs@QGLContextPrivate@@2UQGLExtensionFuncs@@A @ 824 NONAME ; struct QGLExtensionFuncs QGLContextPrivate::qt_extensionFuncs + ?glShaderSource@QGLFunctions@@QAEXIHPAPBDPBH@Z @ 825 NONAME ; void QGLFunctions::glShaderSource(unsigned int, int, char const * *, int const *) + ?glGetShaderPrecisionFormat@QGLFunctions@@QAEXIIPAH0@Z @ 826 NONAME ; void QGLFunctions::glGetShaderPrecisionFormat(unsigned int, unsigned int, int *, int *) + ?insert@QGLContextGroupResourceBase@@QAEXPBVQGLContext@@PAX@Z @ 827 NONAME ; void QGLContextGroupResourceBase::insert(class QGLContext const *, void *) diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index 61e968c..794d43d 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -294,12 +294,12 @@ EXPORTS _ZN17QGLGraphicsSystemC1Eb @ 293 NONAME _ZN17QGLGraphicsSystemC2Eb @ 294 NONAME _ZN18QGLContextResource5valueEPK10QGLContext @ 295 NONAME ABSENT - _ZN18QGLContextResource6insertEPK10QGLContextPv @ 296 NONAME - _ZN18QGLContextResource7cleanupEPK10QGLContextPv @ 297 NONAME - _ZN18QGLContextResourceC1EPFvPvE @ 298 NONAME - _ZN18QGLContextResourceC2EPFvPvE @ 299 NONAME - _ZN18QGLContextResourceD1Ev @ 300 NONAME - _ZN18QGLContextResourceD2Ev @ 301 NONAME + _ZN18QGLContextResource6insertEPK10QGLContextPv @ 296 NONAME ABSENT + _ZN18QGLContextResource7cleanupEPK10QGLContextPv @ 297 NONAME ABSENT + _ZN18QGLContextResourceC1EPFvPvE @ 298 NONAME ABSENT + _ZN18QGLContextResourceC2EPFvPvE @ 299 NONAME ABSENT + _ZN18QGLContextResourceD1Ev @ 300 NONAME ABSENT + _ZN18QGLContextResourceD2Ev @ 301 NONAME ABSENT _ZN20QGLCustomShaderStage11setInactiveEv @ 302 NONAME _ZN20QGLCustomShaderStage12setOnPainterEP8QPainter @ 303 NONAME _ZN20QGLCustomShaderStage16setUniformsDirtyEv @ 304 NONAME @@ -333,15 +333,15 @@ EXPORTS _ZN20QGLFramebufferObjectD0Ev @ 332 NONAME _ZN20QGLFramebufferObjectD1Ev @ 333 NONAME _ZN20QGLFramebufferObjectD2Ev @ 334 NONAME - _ZN20QGLTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj @ 335 NONAME - _ZN20QGLTextureGlyphCache11qt_metacallEN11QMetaObject4CallEiPPv @ 336 NONAME - _ZN20QGLTextureGlyphCache11qt_metacastEPKc @ 337 NONAME - _ZN20QGLTextureGlyphCache16staticMetaObjectE @ 338 NONAME DATA 16 + _ZN20QGLTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj @ 335 NONAME ABSENT + _ZN20QGLTextureGlyphCache11qt_metacallEN11QMetaObject4CallEiPPv @ 336 NONAME ABSENT + _ZN20QGLTextureGlyphCache11qt_metacastEPKc @ 337 NONAME ABSENT + _ZN20QGLTextureGlyphCache16staticMetaObjectE @ 338 NONAME DATA 16 ABSENT _ZN20QGLTextureGlyphCache17createTextureDataEii @ 339 NONAME _ZN20QGLTextureGlyphCache17resizeTextureDataEii @ 340 NONAME - _ZN20QGLTextureGlyphCache19getStaticMetaObjectEv @ 341 NONAME - _ZN20QGLTextureGlyphCacheC1EP10QGLContextN21QFontEngineGlyphCache4TypeERK10QTransform @ 342 NONAME - _ZN20QGLTextureGlyphCacheC2EP10QGLContextN21QFontEngineGlyphCache4TypeERK10QTransform @ 343 NONAME + _ZN20QGLTextureGlyphCache19getStaticMetaObjectEv @ 341 NONAME ABSENT + _ZN20QGLTextureGlyphCacheC1EP10QGLContextN21QFontEngineGlyphCache4TypeERK10QTransform @ 342 NONAME ABSENT + _ZN20QGLTextureGlyphCacheC2EP10QGLContextN21QFontEngineGlyphCache4TypeERK10QTransform @ 343 NONAME ABSENT _ZN20QGLTextureGlyphCacheD0Ev @ 344 NONAME _ZN20QGLTextureGlyphCacheD1Ev @ 345 NONAME _ZN20QGLTextureGlyphCacheD2Ev @ 346 NONAME @@ -601,7 +601,7 @@ EXPORTS _ZNK20QGLFramebufferObject7isValidEv @ 600 NONAME _ZNK20QGLFramebufferObject7textureEv @ 601 NONAME _ZNK20QGLFramebufferObject7toImageEv @ 602 NONAME - _ZNK20QGLTextureGlyphCache10metaObjectEv @ 603 NONAME + _ZNK20QGLTextureGlyphCache10metaObjectEv @ 603 NONAME ABSENT _ZNK20QGLTextureGlyphCache12glyphPaddingEv @ 604 NONAME _ZNK21QGraphicsShaderEffect10metaObjectEv @ 605 NONAME _ZNK21QGraphicsShaderEffect19pixelShaderFragmentEv @ 606 NONAME @@ -690,14 +690,14 @@ EXPORTS _ZThn8_N16QGLWindowSurface8endPaintERK7QRegion @ 689 NONAME _ZThn8_N16QGLWindowSurfaceD0Ev @ 690 NONAME _ZThn8_N16QGLWindowSurfaceD1Ev @ 691 NONAME - _ZThn8_N20QGLTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj @ 692 NONAME - _ZThn8_N20QGLTextureGlyphCache17createTextureDataEii @ 693 NONAME - _ZThn8_N20QGLTextureGlyphCache17resizeTextureDataEii @ 694 NONAME - _ZThn8_N20QGLTextureGlyphCacheD0Ev @ 695 NONAME - _ZThn8_N20QGLTextureGlyphCacheD1Ev @ 696 NONAME + _ZThn8_N20QGLTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj @ 692 NONAME ABSENT + _ZThn8_N20QGLTextureGlyphCache17createTextureDataEii @ 693 NONAME ABSENT + _ZThn8_N20QGLTextureGlyphCache17resizeTextureDataEii @ 694 NONAME ABSENT + _ZThn8_N20QGLTextureGlyphCacheD0Ev @ 695 NONAME ABSENT + _ZThn8_N20QGLTextureGlyphCacheD1Ev @ 696 NONAME ABSENT _ZThn8_N9QGLWidgetD0Ev @ 697 NONAME _ZThn8_N9QGLWidgetD1Ev @ 698 NONAME - _ZThn8_NK20QGLTextureGlyphCache12glyphPaddingEv @ 699 NONAME + _ZThn8_NK20QGLTextureGlyphCache12glyphPaddingEv @ 699 NONAME ABSENT _ZThn8_NK9QGLWidget11paintEngineEv @ 700 NONAME _ZeqRK9QGLFormatS1_ @ 701 NONAME _Zls6QDebugRK9QGLFormat @ 702 NONAME @@ -705,6 +705,6 @@ EXPORTS _ZN16QGLWindowSurface26initializeOffscreenTextureERK5QSize @ 704 NONAME _ZNK20QGLTextureGlyphCache15maxTextureWidthEv @ 705 NONAME _ZNK20QGLTextureGlyphCache16maxTextureHeightEv @ 706 NONAME - _ZThn8_NK20QGLTextureGlyphCache15maxTextureWidthEv @ 707 NONAME - _ZThn8_NK20QGLTextureGlyphCache16maxTextureHeightEv @ 708 NONAME + _ZThn8_NK20QGLTextureGlyphCache15maxTextureWidthEv @ 707 NONAME ABSENT + _ZThn8_NK20QGLTextureGlyphCache16maxTextureHeightEv @ 708 NONAME ABSENT -- cgit v0.12 From 48fdd3facb4d67b29452281c2d43577a2f0cdac3 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Thu, 6 Jan 2011 09:44:22 +0100 Subject: Cocoa: add support for QEventLoop::ExcludeUserInputEvents Seems like this was just missing when used together with the DialogExec/EventLoopExec flags. This patch avoid using cocoas own run methods for dispatching events when we want to exclude user input events, and instead do it ourselves. This patch will only fix this issue when no modal windows are showing. For modal windows, a bit more research is needed. --- src/gui/kernel/qeventdispatcher_mac.mm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index dc926e0..62c22a5 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -588,7 +588,10 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags) // manually (rather than from a QEventLoop), we cannot enter a tight // loop and block this call, but instead we need to return after one flush: const bool canExec_3rdParty = d->nsAppRunCalledByQt || ![NSApp isRunning]; - const bool canExec_Qt = flags & QEventLoop::DialogExec || flags & QEventLoop::EventLoopExec; + const bool canExec_Qt = + (flags & QEventLoop::DialogExec || flags & QEventLoop::EventLoopExec) + && !(flags & QEventLoop::ExcludeUserInputEvents); + if (canExec_Qt && canExec_3rdParty) { // We can use exec-mode, meaning that we can stay in a tight loop until -- cgit v0.12 From 6b47f5586e172693defdf38a530604d111263332 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Thu, 6 Jan 2011 11:44:36 +0200 Subject: Remove unnecessarily frozen functions from QtOpenGL WINSCW DEF file Reviewed-by: TrustMe --- src/s60installs/bwins/QtOpenGLu.def | 124 ------------------------------------ 1 file changed, 124 deletions(-) diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 68dfe91..6ea8635 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -703,127 +703,3 @@ EXPORTS ?maxTextureWidth@QGLTextureGlyphCache@@UBEHXZ @ 702 NONAME ; int QGLTextureGlyphCache::maxTextureWidth(void) const ?filterMode@QGLTextureGlyphCache@@QBE?AW4FilterMode@1@XZ @ 703 NONAME ; enum QGLTextureGlyphCache::FilterMode QGLTextureGlyphCache::filterMode(void) const ?setFilterMode@QGLTextureGlyphCache@@QAEXW4FilterMode@1@@Z @ 704 NONAME ; void QGLTextureGlyphCache::setFilterMode(enum QGLTextureGlyphCache::FilterMode) - ?glVertexAttrib3f@QGLFunctions@@QAEXIMMM@Z @ 705 NONAME ; void QGLFunctions::glVertexAttrib3f(unsigned int, float, float, float) - ?glVertexAttrib1fv@QGLFunctions@@QAEXIPBM@Z @ 706 NONAME ; void QGLFunctions::glVertexAttrib1fv(unsigned int, float const *) - ?glIsBuffer@QGLFunctions@@QAEEI@Z @ 707 NONAME ; unsigned char QGLFunctions::glIsBuffer(unsigned int) - ?glGetActiveAttrib@QGLFunctions@@QAEXIIHPAH0PAIPAD@Z @ 708 NONAME ; void QGLFunctions::glGetActiveAttrib(unsigned int, unsigned int, int, int *, int *, unsigned int *, char *) - ?glBindFramebuffer@QGLFunctions@@QAEXII@Z @ 709 NONAME ; void QGLFunctions::glBindFramebuffer(unsigned int, unsigned int) - ?glBufferData@QGLFunctions@@QAEXIHPBXI@Z @ 710 NONAME ; void QGLFunctions::glBufferData(unsigned int, int, void const *, unsigned int) - ?glValidateProgram@QGLFunctions@@QAEXI@Z @ 711 NONAME ; void QGLFunctions::glValidateProgram(unsigned int) - ?glUniform1f@QGLFunctions@@QAEXHM@Z @ 712 NONAME ; void QGLFunctions::glUniform1f(int, float) - ?glDetachShader@QGLFunctions@@QAEXII@Z @ 713 NONAME ; void QGLFunctions::glDetachShader(unsigned int, unsigned int) - ?glDeleteProgram@QGLFunctions@@QAEXI@Z @ 714 NONAME ; void QGLFunctions::glDeleteProgram(unsigned int) - ??_EQGLContextResourceBase@@UAE@I@Z @ 715 NONAME ; QGLContextResourceBase::~QGLContextResourceBase(unsigned int) - ?glUniform2f@QGLFunctions@@QAEXHMM@Z @ 716 NONAME ; void QGLFunctions::glUniform2f(int, float, float) - ?glIsProgram@QGLFunctions@@QAEEI@Z @ 717 NONAME ; unsigned char QGLFunctions::glIsProgram(unsigned int) - ?openGLFeatures@QGLFunctions@@QBE?AV?$QFlags@W4OpenGLFeature@QGLFunctions@@@@XZ @ 718 NONAME ; class QFlags QGLFunctions::openGLFeatures(void) const - ?glReleaseShaderCompiler@QGLFunctions@@QAEXXZ @ 719 NONAME ; void QGLFunctions::glReleaseShaderCompiler(void) - ??0QGLTextureGlyphCache@@QAE@PBVQGLContext@@W4Type@QFontEngineGlyphCache@@ABVQTransform@@@Z @ 720 NONAME ; QGLTextureGlyphCache::QGLTextureGlyphCache(class QGLContext const *, enum QFontEngineGlyphCache::Type, class QTransform const &) - ?context@QGLTextureGlyphCache@@QBEPBVQGLContext@@XZ @ 721 NONAME ; class QGLContext const * QGLTextureGlyphCache::context(void) const - ?glGenRenderbuffers@QGLFunctions@@QAEXHPAI@Z @ 722 NONAME ; void QGLFunctions::glGenRenderbuffers(int, unsigned int *) - ?glBindBuffer@QGLFunctions@@QAEXII@Z @ 723 NONAME ; void QGLFunctions::glBindBuffer(unsigned int, unsigned int) - ?glUniformMatrix3fv@QGLFunctions@@QAEXHHEPBM@Z @ 724 NONAME ; void QGLFunctions::glUniformMatrix3fv(int, int, unsigned char, float const *) - ?glGenerateMipmap@QGLFunctions@@QAEXI@Z @ 725 NONAME ; void QGLFunctions::glGenerateMipmap(unsigned int) - ?hasOpenGLFeature@QGLFunctions@@QBE_NW4OpenGLFeature@1@@Z @ 726 NONAME ; bool QGLFunctions::hasOpenGLFeature(enum QGLFunctions::OpenGLFeature) const - ?glGetAttachedShaders@QGLFunctions@@QAEXIHPAHPAI@Z @ 727 NONAME ; void QGLFunctions::glGetAttachedShaders(unsigned int, int, int *, unsigned int *) - ?glDeleteShader@QGLFunctions@@QAEXI@Z @ 728 NONAME ; void QGLFunctions::glDeleteShader(unsigned int) - ?glLinkProgram@QGLFunctions@@QAEXI@Z @ 729 NONAME ; void QGLFunctions::glLinkProgram(unsigned int) - ?glUseProgram@QGLFunctions@@QAEXI@Z @ 730 NONAME ; void QGLFunctions::glUseProgram(unsigned int) - ??0QGLFunctions@@QAE@PBVQGLContext@@@Z @ 731 NONAME ; QGLFunctions::QGLFunctions(class QGLContext const *) - ?glGetBufferParameteriv@QGLFunctions@@QAEXIIPAH@Z @ 732 NONAME ; void QGLFunctions::glGetBufferParameteriv(unsigned int, unsigned int, int *) - ?glGenBuffers@QGLFunctions@@QAEXHPAI@Z @ 733 NONAME ; void QGLFunctions::glGenBuffers(int, unsigned int *) - ?glGetShaderiv@QGLFunctions@@QAEXIIPAH@Z @ 734 NONAME ; void QGLFunctions::glGetShaderiv(unsigned int, unsigned int, int *) - ?fillTexture@QGLTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 735 NONAME ; void QGLTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed) - ?glUniform2fv@QGLFunctions@@QAEXHHPBM@Z @ 736 NONAME ; void QGLFunctions::glUniform2fv(int, int, float const *) - ??0QGLContextGroupResourceBase@@QAE@XZ @ 737 NONAME ; QGLContextGroupResourceBase::QGLContextGroupResourceBase(void) - ?glGetFramebufferAttachmentParameteriv@QGLFunctions@@QAEXIIIPAH@Z @ 738 NONAME ; void QGLFunctions::glGetFramebufferAttachmentParameteriv(unsigned int, unsigned int, unsigned int, int *) - ?cleanup@QGLContextGroupResourceBase@@QAEXPBVQGLContext@@PAX@Z @ 739 NONAME ; void QGLContextGroupResourceBase::cleanup(class QGLContext const *, void *) - ?glUniform2iv@QGLFunctions@@QAEXHHPBH@Z @ 740 NONAME ; void QGLFunctions::glUniform2iv(int, int, int const *) - ?glCompileShader@QGLFunctions@@QAEXI@Z @ 741 NONAME ; void QGLFunctions::glCompileShader(unsigned int) - ?glGetProgramiv@QGLFunctions@@QAEXIIPAH@Z @ 742 NONAME ; void QGLFunctions::glGetProgramiv(unsigned int, unsigned int, int *) - ?glClearDepthf@QGLFunctions@@QAEXM@Z @ 743 NONAME ; void QGLFunctions::glClearDepthf(float) - ?glIsFramebuffer@QGLFunctions@@QAEEI@Z @ 744 NONAME ; unsigned char QGLFunctions::glIsFramebuffer(unsigned int) - ?glUniform4f@QGLFunctions@@QAEXHMMMM@Z @ 745 NONAME ; void QGLFunctions::glUniform4f(int, float, float, float, float) - ?glUniform3f@QGLFunctions@@QAEXHMMM@Z @ 746 NONAME ; void QGLFunctions::glUniform3f(int, float, float, float) - ?glDeleteRenderbuffers@QGLFunctions@@QAEXHPBI@Z @ 747 NONAME ; void QGLFunctions::glDeleteRenderbuffers(int, unsigned int const *) - ?glVertexAttrib1f@QGLFunctions@@QAEXIM@Z @ 748 NONAME ; void QGLFunctions::glVertexAttrib1f(unsigned int, float) - ?glVertexAttrib4f@QGLFunctions@@QAEXIMMMM@Z @ 749 NONAME ; void QGLFunctions::glVertexAttrib4f(unsigned int, float, float, float, float) - ?glSampleCoverage@QGLFunctions@@QAEXME@Z @ 750 NONAME ; void QGLFunctions::glSampleCoverage(float, unsigned char) - ?glGetActiveUniform@QGLFunctions@@QAEXIIHPAH0PAIPAD@Z @ 751 NONAME ; void QGLFunctions::glGetActiveUniform(unsigned int, unsigned int, int, int *, int *, unsigned int *, char *) - ??_EQGLContextGroupResourceBase@@UAE@I@Z @ 752 NONAME ; QGLContextGroupResourceBase::~QGLContextGroupResourceBase(unsigned int) - ?glStencilOpSeparate@QGLFunctions@@QAEXIIII@Z @ 753 NONAME ; void QGLFunctions::glStencilOpSeparate(unsigned int, unsigned int, unsigned int, unsigned int) - ?glCheckFramebufferStatus@QGLFunctions@@QAEII@Z @ 754 NONAME ; unsigned int QGLFunctions::glCheckFramebufferStatus(unsigned int) - ?glDepthRangef@QGLFunctions@@QAEXMM@Z @ 755 NONAME ; void QGLFunctions::glDepthRangef(float, float) - ??1QGLFunctions@@QAE@XZ @ 756 NONAME ; QGLFunctions::~QGLFunctions(void) - ?glStencilMaskSeparate@QGLFunctions@@QAEXII@Z @ 757 NONAME ; void QGLFunctions::glStencilMaskSeparate(unsigned int, unsigned int) - ?glBlendColor@QGLFunctions@@QAEXMMMM@Z @ 758 NONAME ; void QGLFunctions::glBlendColor(float, float, float, float) - ?glUniform1fv@QGLFunctions@@QAEXHHPBM@Z @ 759 NONAME ; void QGLFunctions::glUniform1fv(int, int, float const *) - ??1QGLContextResourceBase@@UAE@XZ @ 760 NONAME ; QGLContextResourceBase::~QGLContextResourceBase(void) - ?glCreateProgram@QGLFunctions@@QAEIXZ @ 761 NONAME ; unsigned int QGLFunctions::glCreateProgram(void) - ?glVertexAttrib2f@QGLFunctions@@QAEXIMM@Z @ 762 NONAME ; void QGLFunctions::glVertexAttrib2f(unsigned int, float, float) - ?glUniformMatrix2fv@QGLFunctions@@QAEXHHEPBM@Z @ 763 NONAME ; void QGLFunctions::glUniformMatrix2fv(int, int, unsigned char, float const *) - ?glBufferSubData@QGLFunctions@@QAEXIHHPBX@Z @ 764 NONAME ; void QGLFunctions::glBufferSubData(unsigned int, int, int, void const *) - ?glUniform1iv@QGLFunctions@@QAEXHHPBH@Z @ 765 NONAME ; void QGLFunctions::glUniform1iv(int, int, int const *) - ?qt_resolve_buffer_extensions@@YA_NPAVQGLContext@@@Z @ 766 NONAME ; bool qt_resolve_buffer_extensions(class QGLContext *) - ?glUniform1i@QGLFunctions@@QAEXHH@Z @ 767 NONAME ; void QGLFunctions::glUniform1i(int, int) - ?glVertexAttrib4fv@QGLFunctions@@QAEXIPBM@Z @ 768 NONAME ; void QGLFunctions::glVertexAttrib4fv(unsigned int, float const *) - ?glDeleteFramebuffers@QGLFunctions@@QAEXHPBI@Z @ 769 NONAME ; void QGLFunctions::glDeleteFramebuffers(int, unsigned int const *) - ?glGetVertexAttribfv@QGLFunctions@@QAEXIIPAM@Z @ 770 NONAME ; void QGLFunctions::glGetVertexAttribfv(unsigned int, unsigned int, float *) - ?glGetProgramInfoLog@QGLFunctions@@QAEXIHPAHPAD@Z @ 771 NONAME ; void QGLFunctions::glGetProgramInfoLog(unsigned int, int, int *, char *) - ?glGetShaderInfoLog@QGLFunctions@@QAEXIHPAHPAD@Z @ 772 NONAME ; void QGLFunctions::glGetShaderInfoLog(unsigned int, int, int *, char *) - ?glEnableVertexAttribArray@QGLFunctions@@QAEXI@Z @ 773 NONAME ; void QGLFunctions::glEnableVertexAttribArray(unsigned int) - ?glGetVertexAttribiv@QGLFunctions@@QAEXIIPAH@Z @ 774 NONAME ; void QGLFunctions::glGetVertexAttribiv(unsigned int, unsigned int, int *) - ?glCompressedTexImage2D@QGLFunctions@@QAEXIHIHHHHPBX@Z @ 775 NONAME ; void QGLFunctions::glCompressedTexImage2D(unsigned int, int, unsigned int, int, int, int, int, void const *) - ?glGetAttribLocation@QGLFunctions@@QAEHIPBD@Z @ 776 NONAME ; int QGLFunctions::glGetAttribLocation(unsigned int, char const *) - ?glActiveTexture@QGLFunctions@@QAEXI@Z @ 777 NONAME ; void QGLFunctions::glActiveTexture(unsigned int) - ?glUniform4fv@QGLFunctions@@QAEXHHPBM@Z @ 778 NONAME ; void QGLFunctions::glUniform4fv(int, int, float const *) - ?glCreateShader@QGLFunctions@@QAEII@Z @ 779 NONAME ; unsigned int QGLFunctions::glCreateShader(unsigned int) - ?glAttachShader@QGLFunctions@@QAEXII@Z @ 780 NONAME ; void QGLFunctions::glAttachShader(unsigned int, unsigned int) - ?glRenderbufferStorage@QGLFunctions@@QAEXIIHH@Z @ 781 NONAME ; void QGLFunctions::glRenderbufferStorage(unsigned int, unsigned int, int, int) - ?glVertexAttribPointer@QGLFunctions@@QAEXIHIEHPBX@Z @ 782 NONAME ; void QGLFunctions::glVertexAttribPointer(unsigned int, int, unsigned int, unsigned char, int, void const *) - ?glUniform4iv@QGLFunctions@@QAEXHHPBH@Z @ 783 NONAME ; void QGLFunctions::glUniform4iv(int, int, int const *) - ?glDisableVertexAttribArray@QGLFunctions@@QAEXI@Z @ 784 NONAME ; void QGLFunctions::glDisableVertexAttribArray(unsigned int) - ?glIsShader@QGLFunctions@@QAEEI@Z @ 785 NONAME ; unsigned char QGLFunctions::glIsShader(unsigned int) - ?glShaderBinary@QGLFunctions@@QAEXHPBIIPBXH@Z @ 786 NONAME ; void QGLFunctions::glShaderBinary(int, unsigned int const *, unsigned int, void const *, int) - ?glGenFramebuffers@QGLFunctions@@QAEXHPAI@Z @ 787 NONAME ; void QGLFunctions::glGenFramebuffers(int, unsigned int *) - ?glVertexAttrib3fv@QGLFunctions@@QAEXIPBM@Z @ 788 NONAME ; void QGLFunctions::glVertexAttrib3fv(unsigned int, float const *) - ?glGetVertexAttribPointerv@QGLFunctions@@QAEXIIPAPAX@Z @ 789 NONAME ; void QGLFunctions::glGetVertexAttribPointerv(unsigned int, unsigned int, void * *) - ?glUniformMatrix4fv@QGLFunctions@@QAEXHHEPBM@Z @ 790 NONAME ; void QGLFunctions::glUniformMatrix4fv(int, int, unsigned char, float const *) - ?setContext@QGLTextureGlyphCache@@QAEXPBVQGLContext@@@Z @ 791 NONAME ; void QGLTextureGlyphCache::setContext(class QGLContext const *) - ?glDeleteBuffers@QGLFunctions@@QAEXHPBI@Z @ 792 NONAME ; void QGLFunctions::glDeleteBuffers(int, unsigned int const *) - ?glBindRenderbuffer@QGLFunctions@@QAEXII@Z @ 793 NONAME ; void QGLFunctions::glBindRenderbuffer(unsigned int, unsigned int) - ?glStencilFuncSeparate@QGLFunctions@@QAEXIIHI@Z @ 794 NONAME ; void QGLFunctions::glStencilFuncSeparate(unsigned int, unsigned int, int, unsigned int) - ?glGetUniformLocation@QGLFunctions@@QAEHIPBD@Z @ 795 NONAME ; int QGLFunctions::glGetUniformLocation(unsigned int, char const *) - ?glGetRenderbufferParameteriv@QGLFunctions@@QAEXIIPAH@Z @ 796 NONAME ; void QGLFunctions::glGetRenderbufferParameteriv(unsigned int, unsigned int, int *) - ?glBindAttribLocation@QGLFunctions@@QAEXIIPBD@Z @ 797 NONAME ; void QGLFunctions::glBindAttribLocation(unsigned int, unsigned int, char const *) - ?glGetShaderSource@QGLFunctions@@QAEXIHPAHPAD@Z @ 798 NONAME ; void QGLFunctions::glGetShaderSource(unsigned int, int, int *, char *) - ?setMipmap@QGLFramebufferObjectFormat@@QAEX_N@Z @ 799 NONAME ; void QGLFramebufferObjectFormat::setMipmap(bool) - ??1QGLContextGroupResourceBase@@UAE@XZ @ 800 NONAME ; QGLContextGroupResourceBase::~QGLContextGroupResourceBase(void) - ?glFramebufferTexture2D@QGLFunctions@@QAEXIIIIH@Z @ 801 NONAME ; void QGLFunctions::glFramebufferTexture2D(unsigned int, unsigned int, unsigned int, unsigned int, int) - ?glBlendEquationSeparate@QGLFunctions@@QAEXII@Z @ 802 NONAME ; void QGLFunctions::glBlendEquationSeparate(unsigned int, unsigned int) - ?insert@QGLContextResourceBase@@QAEXPBVQGLContext@@PAX@Z @ 803 NONAME ; void QGLContextResourceBase::insert(class QGLContext const *, void *) - ?glUniform2i@QGLFunctions@@QAEXHHH@Z @ 804 NONAME ; void QGLFunctions::glUniform2i(int, int, int) - ?glGetUniformfv@QGLFunctions@@QAEXIHPAM@Z @ 805 NONAME ; void QGLFunctions::glGetUniformfv(unsigned int, int, float *) - ?glUniform3i@QGLFunctions@@QAEXHHHH@Z @ 806 NONAME ; void QGLFunctions::glUniform3i(int, int, int, int) - ?glIsRenderbuffer@QGLFunctions@@QAEEI@Z @ 807 NONAME ; unsigned char QGLFunctions::glIsRenderbuffer(unsigned int) - ?initializeGLFunctions@QGLFunctions@@QAEXPBVQGLContext@@@Z @ 808 NONAME ; void QGLFunctions::initializeGLFunctions(class QGLContext const *) - ??0QGLFunctions@@QAE@XZ @ 809 NONAME ; QGLFunctions::QGLFunctions(void) - ?glVertexAttrib2fv@QGLFunctions@@QAEXIPBM@Z @ 810 NONAME ; void QGLFunctions::glVertexAttrib2fv(unsigned int, float const *) - ?isInitialized@QGLFunctions@@CA_NPBUQGLFunctionsPrivate@@@Z @ 811 NONAME ; bool QGLFunctions::isInitialized(struct QGLFunctionsPrivate const *) - ?glGetUniformiv@QGLFunctions@@QAEXIHPAH@Z @ 812 NONAME ; void QGLFunctions::glGetUniformiv(unsigned int, int, int *) - ?glBlendEquation@QGLFunctions@@QAEXI@Z @ 813 NONAME ; void QGLFunctions::glBlendEquation(unsigned int) - ?glFramebufferRenderbuffer@QGLFunctions@@QAEXIIII@Z @ 814 NONAME ; void QGLFunctions::glFramebufferRenderbuffer(unsigned int, unsigned int, unsigned int, unsigned int) - ?glUniform4i@QGLFunctions@@QAEXHHHHH@Z @ 815 NONAME ; void QGLFunctions::glUniform4i(int, int, int, int, int) - ?glUniform3fv@QGLFunctions@@QAEXHHPBM@Z @ 816 NONAME ; void QGLFunctions::glUniform3fv(int, int, float const *) - ?value@QGLContextResourceBase@@QAEPAXPBVQGLContext@@@Z @ 817 NONAME ; void * QGLContextResourceBase::value(class QGLContext const *) - ?glBlendFuncSeparate@QGLFunctions@@QAEXIIII@Z @ 818 NONAME ; void QGLFunctions::glBlendFuncSeparate(unsigned int, unsigned int, unsigned int, unsigned int) - ?glCompressedTexSubImage2D@QGLFunctions@@QAEXIHHHHHIHPBX@Z @ 819 NONAME ; void QGLFunctions::glCompressedTexSubImage2D(unsigned int, int, int, int, int, int, unsigned int, int, void const *) - ?freeResource@QGLTextureGlyphCache@@UAEXPAX@Z @ 820 NONAME ; void QGLTextureGlyphCache::freeResource(void *) - ?value@QGLContextGroupResourceBase@@QAEPAXPBVQGLContext@@@Z @ 821 NONAME ; void * QGLContextGroupResourceBase::value(class QGLContext const *) - ?glUniform3iv@QGLFunctions@@QAEXHHPBH@Z @ 822 NONAME ; void QGLFunctions::glUniform3iv(int, int, int const *) - ?mipmap@QGLFramebufferObjectFormat@@QBE_NXZ @ 823 NONAME ; bool QGLFramebufferObjectFormat::mipmap(void) const - ?qt_extensionFuncs@QGLContextPrivate@@2UQGLExtensionFuncs@@A @ 824 NONAME ; struct QGLExtensionFuncs QGLContextPrivate::qt_extensionFuncs - ?glShaderSource@QGLFunctions@@QAEXIHPAPBDPBH@Z @ 825 NONAME ; void QGLFunctions::glShaderSource(unsigned int, int, char const * *, int const *) - ?glGetShaderPrecisionFormat@QGLFunctions@@QAEXIIPAH0@Z @ 826 NONAME ; void QGLFunctions::glGetShaderPrecisionFormat(unsigned int, unsigned int, int *, int *) - ?insert@QGLContextGroupResourceBase@@QAEXPBVQGLContext@@PAX@Z @ 827 NONAME ; void QGLContextGroupResourceBase::insert(class QGLContext const *, void *) - -- cgit v0.12 From bbf604d11d707f10337cab5b955388e95c180805 Mon Sep 17 00:00:00 2001 From: Niklas Kurkisuo Date: Thu, 6 Jan 2011 10:39:14 +0200 Subject: QHostInfoCache: Use QElapsedTime instead of QTime Use QElapsedTime instead of QTime for performance gain. See QT-2965 for more info. Task-number: QTBUG-16468 Reviewed-by: Markus Goetz --- src/network/kernel/qhostinfo.cpp | 2 +- src/network/kernel/qhostinfo_p.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index c8fc45e..0c734d5 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -720,7 +720,7 @@ void QHostInfoCache::put(const QString &name, const QHostInfo &info) QHostInfoCacheElement* element = new QHostInfoCacheElement(); element->info = info; - element->age = QTime(); + element->age = QElapsedTimer(); element->age.start(); QMutexLocker locker(&this->mutex); diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index 134335f..80d8e14 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -66,7 +66,7 @@ #include "QtCore/qrunnable.h" #include "QtCore/qlist.h" #include "QtCore/qqueue.h" -#include +#include #include @@ -132,7 +132,7 @@ private: bool enabled; struct QHostInfoCacheElement { QHostInfo info; - QTime age; + QElapsedTimer age; }; QCache cache; QMutex mutex; -- cgit v0.12 From c5efe77d3051424db631fc9aa54cee1f735bceb8 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 6 Jan 2011 13:16:37 +0100 Subject: tst_qscriptclass: backport test from the v8 branch From commit 4e39278225 Add test coverage to match 4.7 behaviour regarding original properties --- tests/auto/qscriptclass/tst_qscriptclass.cpp | 246 +++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) diff --git a/tests/auto/qscriptclass/tst_qscriptclass.cpp b/tests/auto/qscriptclass/tst_qscriptclass.cpp index 20d62b4..12ee178 100644 --- a/tests/auto/qscriptclass/tst_qscriptclass.cpp +++ b/tests/auto/qscriptclass/tst_qscriptclass.cpp @@ -69,6 +69,10 @@ private slots: void getProperty_invalidValue(); void enumerate(); void extension(); + void originalProperties1(); + void originalProperties2(); + void originalProperties3(); + void originalProperties4(); void defaultImplementations(); }; @@ -1050,6 +1054,248 @@ void tst_QScriptClass::extension() } } +// tests made to match Qt 4.7 (JSC) behaviour +void tst_QScriptClass::originalProperties1() +{ + QScriptEngine eng; + + QScriptString orig1 = eng.toStringHandle("orig1"); + QScriptString orig2 = eng.toStringHandle("orig2"); + QScriptString orig3 = eng.toStringHandle("orig3"); + QScriptString new1 = eng.toStringHandle("new1"); + QScriptString new2 = eng.toStringHandle("new2"); + + { + TestClass cls1(&eng); + cls1.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 89); + cls1.addCustomProperty(new1, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "hello"); + + TestClass cls2(&eng); + cls2.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 59); + cls2.addCustomProperty(new2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "world"); + + QScriptValue obj1 = eng.newObject(); + obj1.setProperty(orig1 , 42); + obj1.setProperty(orig2 , "foo"); + obj1.prototype().setProperty(orig3, "bar"); + + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("bar")); + QVERIFY(!obj1.property(new1).isValid()); + QVERIFY(!obj1.property(new2).isValid()); + + eng.globalObject().setProperty("obj" , obj1); + + obj1.setScriptClass(&cls1); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("bar")); + QCOMPARE(obj1.property(new1).toString(), QString::fromLatin1("hello")); + QVERIFY(!obj1.property(new2).isValid()); + + QScriptValue obj2 = eng.evaluate("obj"); + QCOMPARE(obj2.scriptClass(), &cls1); + QCOMPARE(obj2.property(orig1).toInt32(), 42); + QCOMPARE(obj2.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj2.property(orig3).toString(), QString::fromLatin1("bar")); + QCOMPARE(obj2.property(new1).toString(), QString::fromLatin1("hello")); + QVERIFY(!obj2.property(new2).isValid()); + + obj1.setScriptClass(&cls2); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("bar")); + QVERIFY(!obj1.property(new1).isValid()); + QCOMPARE(obj1.property(new2).toString(), QString::fromLatin1("world")); + + QCOMPARE(obj2.scriptClass(), &cls2); + QCOMPARE(obj2.property(orig1).toInt32(), 42); + QCOMPARE(obj2.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj2.property(orig3).toString(), QString::fromLatin1("bar")); + QVERIFY(!obj2.property(new1).isValid()); + QCOMPARE(obj2.property(new2).toString(), QString::fromLatin1("world")); + + obj1.setScriptClass(0); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("bar")); + QVERIFY(!obj1.property(new1).isValid()); + QVERIFY(!obj1.property(new2).isValid()); + } +} + +void tst_QScriptClass::originalProperties2() +{ + QScriptEngine eng; + + QScriptString orig1 = eng.toStringHandle("orig1"); + QScriptString orig2 = eng.toStringHandle("orig2"); + QScriptString orig3 = eng.toStringHandle("orig3"); + QScriptString new1 = eng.toStringHandle("new1"); + QScriptString new2 = eng.toStringHandle("new2"); + + { + TestClass cls1(&eng); + cls1.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 89); + cls1.addCustomProperty(new1, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "hello"); + + TestClass cls2(&eng); + cls2.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 59); + cls2.addCustomProperty(new2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "world"); + + QScriptValue obj1 = eng.newObject(); + obj1.setProperty(orig1 , 42); + obj1.setProperty(orig2 , "foo"); + obj1.prototype().setProperty(orig3, "bar"); + + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("bar")); + QVERIFY(!obj1.property(new1).isValid()); + QVERIFY(!obj1.property(new2).isValid()); + + obj1.setScriptClass(&cls1); + obj1.setProperty(orig1 , QScriptValue(&eng, 852)); + obj1.setProperty(orig2 , "oli"); + obj1.setProperty(orig3 , "fu*c"); + obj1.setProperty(new1 , "moo"); + obj1.setProperty(new2 , "allo?"); + QCOMPARE(obj1.property(orig1).toInt32(), 852); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("fu*c")); + QCOMPARE(obj1.property(new1).toString(), QString::fromLatin1("moo")); + QCOMPARE(obj1.property(new2).toString(), QString::fromLatin1("allo?")); + + obj1.setScriptClass(&cls2); + QCOMPARE(obj1.property(orig1).toInt32(), 852); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("fu*c")); + QVERIFY(!obj1.property(new1).isValid()); + QCOMPARE(obj1.property(new2).toString(), QString::fromLatin1("allo?")); + + obj1.setScriptClass(0); + QCOMPARE(obj1.property(orig1).toInt32(), 852); + QCOMPARE(obj1.property(orig2).toString(), QString::fromLatin1("foo")); + QCOMPARE(obj1.property(orig3).toString(), QString::fromLatin1("fu*c")); + QVERIFY(!obj1.property(new1).isValid()); + QCOMPARE(obj1.property(new2).toString(), QString::fromLatin1("allo?")); + } +} + +void tst_QScriptClass::originalProperties3() +{ + QScriptEngine eng; + + QScriptString orig1 = eng.toStringHandle("orig1"); + QScriptString orig2 = eng.toStringHandle("orig2"); + QScriptString orig3 = eng.toStringHandle("orig3"); + QScriptString new1 = eng.toStringHandle("new1"); + QScriptString new2 = eng.toStringHandle("new2"); + + { + TestClass cls1(&eng); + cls1.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 89); + cls1.addCustomProperty(new1, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "hello"); + + TestClass cls2(&eng); + cls2.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 59); + cls2.addCustomProperty(new2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "world"); + + QScriptValue obj1 = eng.newObject(&cls1); + QVERIFY(!obj1.property(orig1).isValid()); + QCOMPARE(obj1.property(orig2).toInt32(), 89); + QCOMPARE(obj1.property(new1).toString(), QString::fromLatin1("hello")); + QVERIFY(!obj1.property(new2).isValid()); + obj1.setProperty(orig1, 42); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + + eng.globalObject().setProperty("obj" , obj1); + obj1.setScriptClass(&cls2); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toInt32(), 59); + QVERIFY(!obj1.property(new1).isValid()); + QCOMPARE(obj1.property(new2).toString(), QString::fromLatin1("world")); + + QScriptValue obj2 = eng.evaluate("obj"); + QCOMPARE(obj2.scriptClass(), &cls2); + QCOMPARE(obj2.property(orig1).toInt32(), 42); + QCOMPARE(obj2.property(orig2).toInt32(), 59); + QVERIFY(!obj2.property(new1).isValid()); + QCOMPARE(obj2.property(new2).toString(), QString::fromLatin1("world")); + + obj1.setScriptClass(0); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QVERIFY(!obj1.property(orig2).isValid()); + QVERIFY(!obj1.property(new1).isValid()); + QVERIFY(!obj1.property(new2).isValid()); + + QCOMPARE(obj2.scriptClass(), (QScriptClass *)0); + QCOMPARE(obj2.property(orig1).toInt32(), 42); + QVERIFY(!obj2.property(orig2).isValid()); + QVERIFY(!obj2.property(new1).isValid()); + QVERIFY(!obj2.property(new2).isValid()); + } +} + +void tst_QScriptClass::originalProperties4() +{ + QScriptEngine eng; + + QScriptString orig1 = eng.toStringHandle("orig1"); + QScriptString orig2 = eng.toStringHandle("orig2"); + QScriptString orig3 = eng.toStringHandle("orig3"); + QScriptString new1 = eng.toStringHandle("new1"); + QScriptString new2 = eng.toStringHandle("new2"); + + { + TestClass cls1(&eng); + cls1.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 89); + cls1.addCustomProperty(new1, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "hello"); + + TestClass cls2(&eng); + cls2.addCustomProperty(orig2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, 59); + cls2.addCustomProperty(new2, QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess, 1, 0, "world"); + + QScriptValue obj1 = eng.newObject(&cls1); + QVERIFY(!obj1.property(orig1).isValid()); + QCOMPARE(obj1.property(orig2).toInt32(), 89); + QCOMPARE(obj1.property(new1).toString(), QString::fromLatin1("hello")); + QVERIFY(!obj1.property(new2).isValid()); + + eng.globalObject().setProperty("obj" , obj1); + + obj1.setScriptClass(0); + QVERIFY(obj1.isObject()); + QVERIFY(!obj1.property(orig1).isValid()); + QVERIFY(!obj1.property(orig2).isValid()); + QVERIFY(!obj1.property(new1).isValid()); + QVERIFY(!obj1.property(new2).isValid()); + obj1.setProperty(orig1, 42); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + + QScriptValue obj2 = eng.evaluate("obj"); + QCOMPARE(obj2.scriptClass(), (QScriptClass *)0); + QVERIFY(obj2.isObject()); + QCOMPARE(obj2.property(orig1).toInt32(), 42); + QVERIFY(!obj2.property(orig2).isValid()); + QVERIFY(!obj2.property(new1).isValid()); + QVERIFY(!obj2.property(new2).isValid()); + + obj1.setScriptClass(&cls2); + QCOMPARE(obj1.property(orig1).toInt32(), 42); + QCOMPARE(obj1.property(orig2).toInt32(), 59); + QVERIFY(!obj1.property(new1).isValid()); + QCOMPARE(obj1.property(new2).toString(), QString::fromLatin1("world")); + + QCOMPARE(obj2.scriptClass(), (QScriptClass *)(&cls2)); + QCOMPARE(obj2.property(orig1).toInt32(), 42); + QCOMPARE(obj2.property(orig2).toInt32(), 59); + QVERIFY(!obj2.property(new1).isValid()); + QCOMPARE(obj2.property(new2).toString(), QString::fromLatin1("world")); + } +} + void tst_QScriptClass::defaultImplementations() { QScriptEngine eng; -- cgit v0.12 From 18447df1d021cfed69472b867cb7593401be27a6 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 5 Jan 2011 19:39:00 +0100 Subject: Make application font family names locale sensitive in X11 So that they will match the family names returned by QFontDatabase::families. Because the family names returned by FcFreeTypeQueryFace are not sorted with locale as the names returned by FcFontList, we have to find out the family name matching the system language in the former case. Task-number: QTBUG-14269 Reviewed-by: Eskil --- src/gui/text/qfontdatabase.cpp | 3 +++ src/gui/text/qfontdatabase_x11.cpp | 23 +++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index bae2a20..ec94de9 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -664,6 +664,9 @@ public: } int count; +#if defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG) + QString systemLang; +#endif QtFontFamily **families; struct ApplicationFont { diff --git a/src/gui/text/qfontdatabase_x11.cpp b/src/gui/text/qfontdatabase_x11.cpp index 635d2cf..c67558b 100644 --- a/src/gui/text/qfontdatabase_x11.cpp +++ b/src/gui/text/qfontdatabase_x11.cpp @@ -1018,6 +1018,13 @@ static void loadFontConfig() QFontDatabasePrivate *db = privateDb(); FcFontSet *fonts; + FcPattern *pattern = FcPatternCreate(); + FcDefaultSubstitute(pattern); + FcChar8 *lang = 0; + if (FcPatternGetString(pattern, FC_LANG, 0, &lang) == FcResultMatch) + db->systemLang = QString::fromUtf8((const char *) lang); + FcPatternDestroy(pattern); + QString familyName; FcChar8 *value = 0; int weight_value; @@ -2037,6 +2044,7 @@ static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) int count = 0; QStringList families; + QFontDatabasePrivate *db = privateDb(); FcPattern *pattern = 0; do { @@ -2048,8 +2056,19 @@ static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) FcPatternDel(pattern, FC_FILE); FcPatternAddString(pattern, FC_FILE, (const FcChar8 *)fnt->fileName.toUtf8().constData()); - FcChar8 *fam = 0; - if (FcPatternGetString(pattern, FC_FAMILY, 0, &fam) == FcResultMatch) { + FcChar8 *fam = 0, *familylang = 0; + int i, n = 0; + for (i = 0; ; i++) { + if (FcPatternGetString(pattern, FC_FAMILYLANG, i, &familylang) != FcResultMatch) + break; + QString familyLang = QString::fromUtf8((const char *) familylang); + if (familyLang.compare(db->systemLang, Qt::CaseInsensitive) == 0) { + n = i; + break; + } + } + + if (FcPatternGetString(pattern, FC_FAMILY, n, &fam) == FcResultMatch) { QString family = QString::fromUtf8(reinterpret_cast(fam)); families << family; } -- cgit v0.12 From 7ee36ca4cf6359ade995e974abd2adfcf4dc7612 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Thu, 6 Jan 2011 13:51:55 +0100 Subject: fix include path In many situations building succeeds without explicity including this dir in the include path, probably due to a side-effect of calling uic on the form in this project. However, it is known to fail at least on mingw-cross-env. Anyway, it makes sense to explcitly add this dir to the include path since a needed header resides here. Merge-request: 1016 Reviewed-by: Oswald Buddenhagen --- examples/painting/svggenerator/svggenerator.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/painting/svggenerator/svggenerator.pro b/examples/painting/svggenerator/svggenerator.pro index e0e4895..2e67372 100644 --- a/examples/painting/svggenerator/svggenerator.pro +++ b/examples/painting/svggenerator/svggenerator.pro @@ -8,6 +8,8 @@ SOURCES = displaywidget.cpp \ QT += svg +INCLUDEPATH += $$PWD + # install target.path = $$[QT_INSTALL_EXAMPLES]/painting/svggenerator sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS svggenerator.pro -- cgit v0.12 From 5c3010cf467d437ccfc8a263bed167e979614504 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 6 Jan 2011 14:01:53 +0100 Subject: qkeymapper_x11.cpp: fix compilation with LSB and without XKB Task-number: QTBUG-16312 Reviewed-by: Marius Storm-Olsen --- src/gui/kernel/qkeymapper_x11.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp index 825edbc..e085d11 100644 --- a/src/gui/kernel/qkeymapper_x11.cpp +++ b/src/gui/kernel/qkeymapper_x11.cpp @@ -61,13 +61,6 @@ #include -QT_BEGIN_NAMESPACE - -#ifndef QT_NO_XKB - -// bring in the auto-generated xkbLayoutData -#include "qkeymapper_x11_p.cpp" - #ifdef QT_LINUXBASE // LSB's IsKeypadKey define is wrong - see // http://bugs.linuxbase.org/show_bug.cgi?id=2521 @@ -80,6 +73,13 @@ QT_BEGIN_NAMESPACE (((KeySym)(keysym) >= 0x11000000) && ((KeySym)(keysym) <= 0x1100FFFF)) #endif +QT_BEGIN_NAMESPACE + +#ifndef QT_NO_XKB + +// bring in the auto-generated xkbLayoutData +#include "qkeymapper_x11_p.cpp" + QLocale q_getKeyboardLocale(const QByteArray &layoutName, const QByteArray &variantName) { int i = 0; @@ -92,7 +92,6 @@ QLocale q_getKeyboardLocale(const QByteArray &layoutName, const QByteArray &vari } #endif // QT_NO_XKB - // from qapplication_x11.cpp extern uchar qt_alt_mask; extern uchar qt_meta_mask; -- cgit v0.12 From 91596c9c08208690894ec11a3a99eac57ad17f2b Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 6 Jan 2011 14:51:04 +0100 Subject: QUrl::setUrl should call detach Task-number: QTBUG-16425 Reviewed-by: Gabriel Reviewed-by: Markus Goetz --- src/corelib/io/qurl.cpp | 1 + tests/auto/qurl/tst_qurl.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 6a3037d..45f908d 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -4262,6 +4262,7 @@ void QUrl::setUrl(const QString &url) */ void QUrl::setUrl(const QString &url, ParsingMode parsingMode) { + detach(); // escape all reserved characters and delimiters // reserved = gen-delims / sub-delims if (parsingMode != TolerantMode) { diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index 63f9721..4354ffb 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -675,6 +675,14 @@ void tst_QUrl::setUrl() QCOMPARE(url.encodedPath().constData(), "text/javascript,d5%20%3D%20'five%5Cu0027s'%3B"); } + { //check it calls detach + QUrl u1("http://aaa.com"); + QUrl u2 = u1; + u2.setUrl("http://bbb.com"); + QCOMPARE(u1.host(), QString::fromLatin1("aaa.com")); + QCOMPARE(u2.host(), QString::fromLatin1("bbb.com")); + } + /* The tests below are copied from kdelibs/kdecore/tests/kurltest.cpp (an old version of) -- cgit v0.12 From 6d331b6ee7711cde2bf9adc1a584a45875c07983 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 6 Jan 2011 15:34:48 +0100 Subject: Designer: Block QEvent::WinIdChange. As it causes an obscure deletion crash related to the formeditor rubberband on Mac. Reviewed-by: con --- tools/designer/src/components/formeditor/formwindowmanager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/designer/src/components/formeditor/formwindowmanager.cpp b/tools/designer/src/components/formeditor/formwindowmanager.cpp index ce809ff..ed854cf 100644 --- a/tools/designer/src/components/formeditor/formwindowmanager.cpp +++ b/tools/designer/src/components/formeditor/formwindowmanager.cpp @@ -192,6 +192,7 @@ bool FormWindowManager::eventFilter(QObject *o, QEvent *e) case QEvent::ToolTip: case QEvent::WhatsThis: case QEvent::WhatsThisClicked: + case QEvent::WinIdChange: case QEvent::DynamicPropertyChange: case QEvent::HoverEnter: case QEvent::HoverLeave: -- cgit v0.12 From 66cfe2a776b7542fe1d8bae9c0d7bb5be79406fd Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 6 Jan 2011 15:16:03 +0000 Subject: Fix KERN-EXEC 0 panic on exit when bearer is searching for WLANs The access point scanner cancels itself in the destructor. This requires the handle to be valid, but it was closed in the symbian engine destructor immediately before deleting the AP scanner. Because of the way symbian active objects work, the crashing function is only called if there was an asynchronous request in progress. So it could be missed in cases where the scan completes faster than the test case. Task-number: QTBUG-16484 Reviewed-by: Markus Goetz --- src/plugins/bearer/symbian/symbianengine.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index f025d86..a370d78 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -144,6 +144,10 @@ SymbianEngine::~SymbianEngine() { Cancel(); + //The scanner may be using the connection monitor so it needs to be + //deleted first while the handle is still valid. + delete ipAccessPointsAvailabilityScanner; + iConnectionMonitor.CancelNotifications(); iConnectionMonitor.Close(); @@ -151,8 +155,6 @@ SymbianEngine::~SymbianEngine() iCmManager.Close(); #endif - delete ipAccessPointsAvailabilityScanner; - // CCommsDatabase destructor uses cleanup stack. Since QNetworkConfigurationManager // is a global static, but the time we are here, E32Main() has been exited already and // the thread's default cleanup stack has been deleted. Without this line, a -- cgit v0.12 From 273cc18e59af6b495462cbe101652a444a2cc8f4 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Thu, 6 Jan 2011 17:04:37 +0100 Subject: licensing: exclude generated cookie jar table from license check This file is generated from the Public Suffix List, and thus under a different license. Reviewed-by: Markus Goetz --- tests/auto/headers/tst_headers.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/auto/headers/tst_headers.cpp b/tests/auto/headers/tst_headers.cpp index 8c8bc2c..b889a37 100644 --- a/tests/auto/headers/tst_headers.cpp +++ b/tests/auto/headers/tst_headers.cpp @@ -176,7 +176,9 @@ void tst_Headers::allSourceFilesData() || sourceFile.endsWith(".ui.h") || sourceFile.endsWith("/src/corelib/global/qconfig.h") || sourceFile.endsWith("/src/corelib/global/qconfig.cpp") - || sourceFile.endsWith("/src/tools/uic/qclass_lib_map.h")) + || sourceFile.endsWith("/src/tools/uic/qclass_lib_map.h") + || sourceFile.endsWith("src/network/access/qnetworkcookiejartlds_p.h") + ) continue; QTest::newRow(qPrintable(sourceFile)) << sourceFile; -- cgit v0.12 From e185e5f008f6852bd7a79d74262717c8e377b918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 5 Jan 2011 08:25:56 +0100 Subject: Restored old flushing behavior in -graphicssystem opengl on desktop. Change 284211ccbd2cbd recently introduced a fix for EGL, to prevent flushing when nothing has been rendered into the back buffer. However, the skip should only be done when there's no partial update support in the window surface. If there is partial update support we can still flush as usual. Reviewed-by: Gunnar Sletta --- src/opengl/qwindowsurface_gl.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index b8716ce..7243f02 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -520,9 +520,10 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & // did_paint is set to true in ::beginPaint. ::beginPaint means that we // at least cleared the background (= painted something). In EGL API it's a - // mistakte to call swapBuffers if nothing was painted. This check protects - // the flush func from being executed if it's for nothing. - if (!d_ptr->did_paint) + // mistake to call swapBuffers if nothing was painted unless + // EGL_BUFFER_PRESERVED is set. This check protects the flush func from + // being executed if it's for nothing. + if (!hasPartialUpdateSupport() && !d_ptr->did_paint) return; QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); -- cgit v0.12 From 84658ec4e650b12dcea6f886b530e66a195465cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 6 Jan 2011 13:09:14 +0100 Subject: Fixed bug and performance problem in windowsstyle. QImage::fill(Qt::transparent) pre-4.8 is a bug, also using Format_ARGB32 is very unoptimal compared to Format_ARGB32_Premultiplied. Task-number: QTBUG-16439 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/styles/qwindowsstyle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 32a6d8d..4144b80 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -1395,8 +1395,8 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, if (!QPixmapCache::find(pixmapName, pixmap)) { int border = size/5; int sqsize = 2*(size/2); - QImage image(sqsize, sqsize, QImage::Format_ARGB32); - image.fill(Qt::transparent); + QImage image(sqsize, sqsize, QImage::Format_ARGB32_Premultiplied); + image.fill(0); QPainter imagePainter(&image); QPolygon a; -- cgit v0.12 From 5780ff75c1e63322f3edd6158c08f1d944919cce Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 7 Jan 2011 08:47:51 +0100 Subject: QmlViewer: Remove unused class variables --- tools/qml/qmlruntime.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index b43aa54..a70ffc9 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -188,8 +188,6 @@ private: ScriptOptions m_scriptOptions; QDeclarativeTester *tester; - QNetworkReply *wgtreply; - QString wgtdir; NetworkAccessManagerFactory *namFactory; bool useQmlFileBrowser; -- cgit v0.12 From ec46ec7d5d4783fb450ed75e2f6a2ae3edca918e Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 7 Jan 2011 11:26:52 +0100 Subject: Revert "QNAM HTTP: Fix missing error() signal" We don't think this is the right solution. This reverts commit de72670c620e1193fa875bf1a4adee553700bacb. --- src/network/access/qhttpnetworkconnectionchannel.cpp | 20 +------------------- src/network/access/qhttpnetworkconnectionchannel_p.h | 1 - 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index c4471eb..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,23 +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 AND that there are no http errors. - // In case there are both socket errors and http errors, the socket error is suppressed. - // Http errors are handled in the QNetworkAccessHttpBackend. - if(unhandledError != QNetworkReply::NoError && reply->statusCode() == 200) { - 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)); - } else { - QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection); - } - unhandledError = QNetworkReply::NoError; // Reset the value - } + 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; @@ -981,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 0d6eb2b59f626dbcb51209cc98ef74878fdf5437 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 7 Jan 2011 11:31:20 +0100 Subject: Revert "Fix QNetworkReply autotest cases for QT-3494" We don't think this is the right fix. This reverts commit 5d18d393808d7a4be56eb00ab9f1e9cda9e211c9. --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 6cd9d3c..cff0ae9 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -2585,19 +2585,17 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer() void tst_QNetworkReply::ioGetFromHttpStatus100_data() { QTest::addColumn("dataToSend"); - QTest::addColumn("expectedError"); - QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; - QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; - QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n") << QNetworkReply::RemoteHostClosedError; - QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n") << QNetworkReply::RemoteHostClosedError; - QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; - QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << QNetworkReply::NoError; + QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n"); + QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n"); + QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); } void tst_QNetworkReply::ioGetFromHttpStatus100() { QFETCH(QByteArray, dataToSend); - QFETCH(QNetworkReply::NetworkError, expectedError); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2609,7 +2607,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->error(), expectedError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); QVERIFY(reply->rawHeader("bla").isNull()); } @@ -2617,14 +2615,12 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() void tst_QNetworkReply::ioGetFromHttpNoHeaders_data() { QTest::addColumn("dataToSend"); - QTest::addColumn("expectedError"); - QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n") << QNetworkReply::RemoteHostClosedError; + QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n"); } void tst_QNetworkReply::ioGetFromHttpNoHeaders() { QFETCH(QByteArray, dataToSend); - QFETCH(QNetworkReply::NetworkError, expectedError); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2636,7 +2632,7 @@ void tst_QNetworkReply::ioGetFromHttpNoHeaders() QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); - QCOMPARE(reply->error(), expectedError); + QCOMPARE(reply->error(), QNetworkReply::NoError); QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); } -- cgit v0.12 From 2371b6570ee4fa6296bb05e577c160bbab92e0b1 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 7 Jan 2011 11:41:19 +0100 Subject: tst_qnetworkreply: Add EXPECT_FAIL for ioGetFromBuiltinHttp Reviewed-by: Peter Hartmann --- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index cff0ae9..5ac34ad 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -3795,6 +3795,8 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp() const int maxRate = rate * 1024 * (100+allowedDeviation) / 100; qDebug() << minRate << "<="<< server.transferRate << "<=" << maxRate << "?"; QVERIFY(server.transferRate >= minRate); + QEXPECT_FAIL("http+limited", "Limiting is broken right now", Continue); + QEXPECT_FAIL("https+limited", "Limiting is broken right now", Continue); QVERIFY(server.transferRate <= maxRate); } } -- cgit v0.12 From 67267842ce658d956f11d52194566b6de1f84f9a Mon Sep 17 00:00:00 2001 From: Sergio Ahumada Date: Fri, 7 Jan 2011 12:37:12 +0100 Subject: Doc: Fixing typo --- src/gui/painting/qdrawhelper_ssse3.cpp | 2 +- src/gui/painting/qdrawingprimitive_sse2_p.h | 4 ++-- src/gui/painting/qpaintengine.cpp | 2 +- src/gui/painting/qpaintengine_raster.cpp | 4 ++-- src/gui/painting/qpainter.cpp | 2 +- src/gui/painting/qprintengine_ps.cpp | 2 +- src/gui/text/qfontengine_p.h | 2 +- src/gui/text/qtextdocument_p.cpp | 2 +- src/gui/text/qtextdocumentlayout.cpp | 2 +- src/gui/text/qtextengine.cpp | 2 +- src/gui/text/qtextlist.cpp | 2 +- src/gui/text/qzip.cpp | 2 +- src/gui/widgets/qabstractscrollarea.cpp | 2 +- src/gui/widgets/qabstractslider.cpp | 2 +- src/gui/widgets/qdatetimeedit.cpp | 2 +- src/gui/widgets/qdockarealayout.cpp | 2 +- src/gui/widgets/qdockarealayout_p.h | 2 +- src/gui/widgets/qdockwidget_p.h | 2 +- src/gui/widgets/qlinecontrol_p.h | 2 +- src/gui/widgets/qscrollarea.cpp | 2 +- src/gui/widgets/qsplitter.cpp | 2 +- 21 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/gui/painting/qdrawhelper_ssse3.cpp b/src/gui/painting/qdrawhelper_ssse3.cpp index fb5602e..01e0ccf 100644 --- a/src/gui/painting/qdrawhelper_ssse3.cpp +++ b/src/gui/painting/qdrawhelper_ssse3.cpp @@ -80,7 +80,7 @@ inline static void blend_pixel(quint32 &dst, const quint32 src) // Basically blend src over dst with the const alpha defined as constAlphaVector. -// nullVector, half, one, colorMask are constant accross the whole image/texture, and should be defined as: +// nullVector, half, one, colorMask are constant across the whole image/texture, and should be defined as: //const __m128i nullVector = _mm_set1_epi32(0); //const __m128i half = _mm_set1_epi16(0x80); //const __m128i one = _mm_set1_epi16(0xff); diff --git a/src/gui/painting/qdrawingprimitive_sse2_p.h b/src/gui/painting/qdrawingprimitive_sse2_p.h index d8f6bf5..a4614ad 100644 --- a/src/gui/painting/qdrawingprimitive_sse2_p.h +++ b/src/gui/painting/qdrawingprimitive_sse2_p.h @@ -129,7 +129,7 @@ QT_BEGIN_NAMESPACE } // Basically blend src over dst with the const alpha defined as constAlphaVector. -// nullVector, half, one, colorMask are constant accross the whole image/texture, and should be defined as: +// nullVector, half, one, colorMask are constant across the whole image/texture, and should be defined as: //const __m128i nullVector = _mm_set1_epi32(0); //const __m128i half = _mm_set1_epi16(0x80); //const __m128i one = _mm_set1_epi16(0xff); @@ -186,7 +186,7 @@ QT_BEGIN_NAMESPACE } // Basically blend src over dst with the const alpha defined as constAlphaVector. -// nullVector, half, one, colorMask are constant accross the whole image/texture, and should be defined as: +// nullVector, half, one, colorMask are constant across the whole image/texture, and should be defined as: //const __m128i nullVector = _mm_set1_epi32(0); //const __m128i half = _mm_set1_epi16(0x80); //const __m128i one = _mm_set1_epi16(0xff); diff --git a/src/gui/painting/qpaintengine.cpp b/src/gui/painting/qpaintengine.cpp index a2d0337..58bba35 100644 --- a/src/gui/painting/qpaintengine.cpp +++ b/src/gui/painting/qpaintengine.cpp @@ -992,7 +992,7 @@ void QPaintEngine::setSystemRect(const QRect &rect) /*! \internal - Retreives the rect for drawing within the backing store. This + Retrieves the rect for drawing within the backing store. This function should ONLY be used by the backing store. */ QRect QPaintEngine::systemRect() const diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 4d06c9f..a5d647d 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -1815,7 +1815,7 @@ void QRasterPaintEngine::fill(const QVectorPath &path, const QBrush &brush) ensureState(); if (s->flags.tx_noshear) { d->initializeRasterizer(&s->brushData); - // ### Is normalizing really nessesary here? + // ### Is normalizing really necessary here? const qreal *p = path.points(); QRectF r = QRectF(p[0], p[1], p[2] - p[0], p[7] - p[1]).normalized(); if (!r.isEmpty()) { @@ -3193,7 +3193,7 @@ void QRasterPaintEngine::drawGlyphsS60(const QPointF &p, const QTextItemInt &ti) #endif // Q_OS_SYMBIAN && QT_NO_FREETYPE /*! - * Returns true if the rectangle is completly within the current clip + * Returns true if the rectangle is completely within the current clip * state of the paint engine. */ bool QRasterPaintEnginePrivate::isUnclipped_normalized(const QRect &r) const diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index ab9707d..3f6586d 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -9085,7 +9085,7 @@ void QPainter::drawPixmapFragments(const PixmapFragment *fragments, int fragment QPainter::drawPixmapFragments() function. The variables \a x, \a y, \a width and \a height are used to calculate the target rectangle that is drawn. \a x and \a y denotes the center of the target rectangle. The \a - width and \a heigth in the target rectangle is scaled by the \a scaleX and + width and \a height in the target rectangle is scaled by the \a scaleX and \a scaleY values. The resulting target rectangle is then rotated \a rotation degrees around the \a x, \a y center point. diff --git a/src/gui/painting/qprintengine_ps.cpp b/src/gui/painting/qprintengine_ps.cpp index ca694ae..6fb2db5 100644 --- a/src/gui/painting/qprintengine_ps.cpp +++ b/src/gui/painting/qprintengine_ps.cpp @@ -908,7 +908,7 @@ void QPSPrintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, con if (d->clipEnabled && d->allClipped) return; - // ### Optimise implementation! + // ### Optimize implementation! qreal yPos = r.y(); qreal yOff = p.y(); while(yPos < r.y() + r.height()) { diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index fc26eef..c9dd5bc 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -180,7 +180,7 @@ public: void addBitmapFontToPath(qreal x, qreal y, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags); /** * Create a qimage with the alpha values for the glyph. - * Returns an image indexed_8 with index values ranging from 0=fully transparant to 255=opaque + * Returns an image indexed_8 with index values ranging from 0=fully transparent to 255=opaque */ virtual QImage alphaMapForGlyph(glyph_t); virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t); diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index 0bdd20d..14d85b7 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -91,7 +91,7 @@ QT_BEGIN_NAMESPACE END_OF_PARA/START_OF_FRAME/END_OF_FRAME (see below). Lists are not in here, as they are treated specially. A list is just - a collection of (not neccessarily connected) blocks, that share the + a collection of (not necessarily connected) blocks, that share the same objectIndex() in the format that refers to the list format and object. diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index ff14490..a1bea12 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -327,7 +327,7 @@ static inline bool isLineSeparatorBlockAfterTable(const QTextBlock &block, const /* -Optimisation strategies: +Optimization strategies: HTML layout: diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 3bd6122..75dcf57 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1879,7 +1879,7 @@ void QTextEngine::justify(const QScriptLine &line) if (end == layoutData->string.length()) return; // no justification at end of paragraph if (end && layoutData->items[findItem(end-1)].analysis.flags == QScriptAnalysis::LineOrParagraphSeparator) - return; // no justification at the end of an explicitely separated line + return; // no justification at the end of an explicitly separated line } // justify line diff --git a/src/gui/text/qtextlist.cpp b/src/gui/text/qtextlist.cpp index a0ff520..b66766e 100644 --- a/src/gui/text/qtextlist.cpp +++ b/src/gui/text/qtextlist.cpp @@ -235,7 +235,7 @@ QString QTextList::itemText(const QTextBlock &blockIt) const if (i % 4) { // c[i] == 4|5|9|40|50|90|400|500|900 if ((i-2) % 4) { - // c[i] == 4|9|40|90|400|900 => with substraction (IV, IX, XL, XC, ...) + // c[i] == 4|9|40|90|400|900 => with subtraction (IV, IX, XL, XC, ...) numDigits = 2; } else { diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 6f099a9..c449588 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -825,7 +825,7 @@ int QZipReader::count() const /*! Returns a FileInfo of an entry in the zipfile. - The \a index is the index into the directoy listing of the zipfile. + The \a index is the index into the directory listing of the zipfile. Returns an invalid FileInfo if \a index is out of boundaries. \sa fileInfoList() diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp index 30ce23b..4edbf2d 100644 --- a/src/gui/widgets/qabstractscrollarea.cpp +++ b/src/gui/widgets/qabstractscrollarea.cpp @@ -1012,7 +1012,7 @@ bool QAbstractScrollArea::event(QEvent *e) You can reimplement this function in a subclass, but we recommend using one of the specialized event handlers instead. - Specialised handlers for viewport events are: paintEvent(), + Specialized handlers for viewport events are: paintEvent(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), wheelEvent(), dragEnterEvent(), dragMoveEvent(), dragLeaveEvent(), dropEvent(), contextMenuEvent(), and diff --git a/src/gui/widgets/qabstractslider.cpp b/src/gui/widgets/qabstractslider.cpp index a8b39f4..ee9a861 100644 --- a/src/gui/widgets/qabstractslider.cpp +++ b/src/gui/widgets/qabstractslider.cpp @@ -717,7 +717,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb offset_accumulated += stepsToScrollF; #ifndef Q_WS_MAC - // Dont't scroll more than one page in any case: + // Don't scroll more than one page in any case: stepsToScroll = qBound(-pageStep, int(offset_accumulated), pageStep); #else // Native UI-elements on Mac can scroll hundreds of lines at a time as diff --git a/src/gui/widgets/qdatetimeedit.cpp b/src/gui/widgets/qdatetimeedit.cpp index 8043747..4d52e38 100644 --- a/src/gui/widgets/qdatetimeedit.cpp +++ b/src/gui/widgets/qdatetimeedit.cpp @@ -902,7 +902,7 @@ void QDateTimeEdit::setDisplayFormat(const QString &format) /*! \property QDateTimeEdit::calendarPopup - \brief the current calender pop-up showing mode. + \brief the current calendar pop-up showing mode. \since 4.2 The calendar pop-up will be shown upon clicking the arrow button. diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp index b540e76..867e5a3 100644 --- a/src/gui/widgets/qdockarealayout.cpp +++ b/src/gui/widgets/qdockarealayout.cpp @@ -3163,7 +3163,7 @@ int QDockAreaLayout::separatorMove(const QList &separator, const QPoint &or } #ifndef QT_NO_TABBAR -// Sets the correct positions for the seperator widgets +// Sets the correct positions for the separator widgets // Allocates new sepearator widgets with getSeparatorWidget void QDockAreaLayout::updateSeparatorWidgets() const { diff --git a/src/gui/widgets/qdockarealayout_p.h b/src/gui/widgets/qdockarealayout_p.h index 9cb77ba..37f3783 100644 --- a/src/gui/widgets/qdockarealayout_p.h +++ b/src/gui/widgets/qdockarealayout_p.h @@ -83,7 +83,7 @@ class QTabBar; // which then has one QDockAreaLayoutInfo as a child. (QDockAreaLayoutItem::subInfo) or // a widgetItem if this is a node of the tree (QDockAreaLayoutItem::widgetItem) // -// A path indetifies uniquely one object in this tree, the first number beeing the side and all the following +// A path indetifies uniquely one object in this tree, the first number being the side and all the following // indexes into the QDockAreaLayoutInfo::item_list. struct QDockAreaLayoutItem diff --git a/src/gui/widgets/qdockwidget_p.h b/src/gui/widgets/qdockwidget_p.h index d272b2c..655e216 100644 --- a/src/gui/widgets/qdockwidget_p.h +++ b/src/gui/widgets/qdockwidget_p.h @@ -169,7 +169,7 @@ private: QRect _titleArea; }; -/* The size hints of a QDockWidget will depend on wether it is docked or not. +/* The size hints of a QDockWidget will depend on whether it is docked or not. This layout item always returns the size hints as if the dock widget was docked. */ class QDockWidgetItem : public QWidgetItem diff --git a/src/gui/widgets/qlinecontrol_p.h b/src/gui/widgets/qlinecontrol_p.h index d881acf..dd8fb97 100644 --- a/src/gui/widgets/qlinecontrol_p.h +++ b/src/gui/widgets/qlinecontrol_p.h @@ -239,7 +239,7 @@ public: #ifndef QT_NO_COMPLETER QCompleter *completer() const { return m_completer; } - /* Note that you must set the widget for the completer seperately */ + /* Note that you must set the widget for the completer separately */ void setCompleter(const QCompleter *c) { m_completer = const_cast(c); } void complete(int key); #endif diff --git a/src/gui/widgets/qscrollarea.cpp b/src/gui/widgets/qscrollarea.cpp index 38e799e..64a0049 100644 --- a/src/gui/widgets/qscrollarea.cpp +++ b/src/gui/widgets/qscrollarea.cpp @@ -121,7 +121,7 @@ QT_BEGIN_NAMESPACE If a scroll area is used to display the contents of a widget that contains child widgets arranged in a layout, it is important to - realise that the size policy of the layout will also determine the + realize that the size policy of the layout will also determine the size of the widget. This is especially useful to know if you intend to dynamically change the contents of the layout. In such cases, setting the layout's \l{QLayout::sizeConstraint}{size constraint} diff --git a/src/gui/widgets/qsplitter.cpp b/src/gui/widgets/qsplitter.cpp index 88b7517..7775f39 100644 --- a/src/gui/widgets/qsplitter.cpp +++ b/src/gui/widgets/qsplitter.cpp @@ -124,7 +124,7 @@ QSplitterHandle::QSplitterHandle(Qt::Orientation orientation, QSplitter *parent) /*! Sets the orientation of the splitter handle to \a orientation. - This is usually propogated from the QSplitter. + This is usually propagated from the QSplitter. \sa QSplitter::setOrientation() */ -- cgit v0.12 From dc11a951d30ce1c668550ab5e7b487f00cca7f1a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 7 Jan 2011 11:56:33 +0100 Subject: Assistant: Don't tabify "Open Pages" dock widget by default. The user is likely to always want to see it plus one of the others. --- tools/assistant/tools/assistant/mainwindow.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp index d7d01da..d6b9e24 100644 --- a/tools/assistant/tools/assistant/mainwindow.cpp +++ b/tools/assistant/tools/assistant/mainwindow.cpp @@ -106,7 +106,7 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent) TRACE_OBJ setToolButtonStyle(Qt::ToolButtonFollowStyle); - setDockOptions(ForceTabbedDocks); // Has no effect; Qt bug? + setDockOptions(dockOptions() | AllowNestedDocks); QString collectionFile; if (usesDefaultCollection()) { @@ -218,8 +218,7 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent) } else { tabifyDockWidget(contentDock, indexDock); tabifyDockWidget(indexDock, bookmarkDock); - tabifyDockWidget(bookmarkDock, openPagesDock); - tabifyDockWidget(openPagesDock, searchDock); + tabifyDockWidget(bookmarkDock, searchDock); contentDock->raise(); const QRect screen = QApplication::desktop()->screenGeometry(); resize(4*screen.width()/5, 4*screen.height()/5); -- cgit v0.12 From 9fd43b8bc40e3b7657dc7eba2dccff95f0d0077a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 7 Jan 2011 14:03:52 +0100 Subject: Assistant: Fix warnings. --- .../tools/assistant/bookmarkfiltermodel.cpp | 37 +++++++++++----------- tools/assistant/tools/assistant/mainwindow.cpp | 5 +-- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/tools/assistant/tools/assistant/bookmarkfiltermodel.cpp b/tools/assistant/tools/assistant/bookmarkfiltermodel.cpp index fe510a5..d60e537 100644 --- a/tools/assistant/tools/assistant/bookmarkfiltermodel.cpp +++ b/tools/assistant/tools/assistant/bookmarkfiltermodel.cpp @@ -54,25 +54,24 @@ void BookmarkFilterModel::setSourceModel(QAbstractItemModel *_sourceModel) { beginResetModel(); - disconnect(sourceModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, - SLOT(changed(QModelIndex, QModelIndex))); - - disconnect(sourceModel, SIGNAL(rowsInserted(QModelIndex, int, int)), - this, SLOT(rowsInserted(QModelIndex, int, int))); - - disconnect(sourceModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), - this, SLOT(rowsAboutToBeRemoved(QModelIndex, int, int))); - disconnect(sourceModel, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, - SLOT(rowsRemoved(QModelIndex, int, int))); - - disconnect(sourceModel, SIGNAL(layoutAboutToBeChanged()), this, - SLOT(layoutAboutToBeChanged())); - disconnect(sourceModel, SIGNAL(layoutChanged()), this, - SLOT(layoutChanged())); - - disconnect(sourceModel, SIGNAL(modelAboutToBeReset()), this, - SLOT(modelAboutToBeReset())); - disconnect(sourceModel, SIGNAL(modelReset()), this, SLOT(modelReset())); + if (sourceModel) { + disconnect(sourceModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), + this, SLOT(changed(QModelIndex, QModelIndex))); + disconnect(sourceModel, SIGNAL(rowsInserted(QModelIndex, int, int)), + this, SLOT(rowsInserted(QModelIndex, int, int))); + disconnect(sourceModel, + SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), this, + SLOT(rowsAboutToBeRemoved(QModelIndex, int, int))); + disconnect(sourceModel, SIGNAL(rowsRemoved(QModelIndex, int, int)), + this, SLOT(rowsRemoved(QModelIndex, int, int))); + disconnect(sourceModel, SIGNAL(layoutAboutToBeChanged()), this, + SLOT(layoutAboutToBeChanged())); + disconnect(sourceModel, SIGNAL(layoutChanged()), this, + SLOT(layoutChanged())); + disconnect(sourceModel, SIGNAL(modelAboutToBeReset()), this, + SLOT(modelAboutToBeReset())); + disconnect(sourceModel, SIGNAL(modelReset()), this, SLOT(modelReset())); + } QAbstractProxyModel::setSourceModel(sourceModel); sourceModel = qobject_cast (_sourceModel); diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp index d6b9e24..7852104 100644 --- a/tools/assistant/tools/assistant/mainwindow.cpp +++ b/tools/assistant/tools/assistant/mainwindow.cpp @@ -199,6 +199,7 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent) } QToolBar *toolBar = addToolBar(tr("Bookmark Toolbar")); + toolBar->setObjectName(QLatin1String("Bookmark Toolbar")); bookMarkManager->setBookmarksToolbar(toolBar); // Show the widget here, otherwise the restore geometry and state won't work @@ -459,10 +460,6 @@ void MainWindow::setupActions() menu->addAction(globalActions->printAction()); menu->addSeparator(); - m_closeTabAction = menu->addAction(tr("&Close Tab"), m_centralWidget, - SLOT(closeTab())); - m_closeTabAction->setShortcuts(QKeySequence::Close); - QIcon appExitIcon = QIcon::fromTheme("application-exit"); QAction *tmp; #ifdef Q_OS_WIN -- cgit v0.12 From 8ffb49a4ac68b1c243b25343053e6e99f97ec2e7 Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Fri, 7 Jan 2011 14:29:38 +0100 Subject: Fixes crash in QGraphicsItem's destructor. Crash introduced by 783a278f243c6411f5f32d11f2165b9eed9b6f8c. Autotest written by Niklas Kurkisuo Task-number: QTBUG-16374 Reviewed-by: TrustMe --- src/gui/graphicsview/qgraphicsitem.cpp | 4 +- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 53 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 94e1a72..e52c970 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -5589,9 +5589,11 @@ void QGraphicsItemPrivate::clearSubFocus(QGraphicsItem *rootItem, QGraphicsItem // Reset sub focus chain. QGraphicsItem *parent = rootItem ? rootItem : q_ptr; do { - if (parent->d_ptr->subFocusItem != q_ptr || parent == stopItem) + if (parent->d_ptr->subFocusItem != q_ptr) break; parent->d_ptr->subFocusItem = 0; + if (parent == stopItem) + break; parent->d_ptr->subFocusItemChange(); } while (!parent->isPanel() && (parent = parent->d_ptr->parent)); } diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 0b29410..5daafd8 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -65,6 +65,7 @@ #include #include #include +#include #include "../../shared/util.h" @@ -469,6 +470,7 @@ private slots: void itemDiesDuringDraggingOperation(); void QTBUG_12112_focusItem(); void QTBUG_13473_sceneposchange(); + void QTBUG_16374_crashInDestructor(); private: QList paintedItems; @@ -11077,5 +11079,56 @@ void tst_QGraphicsItem::QTBUG_13473_sceneposchange() QCOMPARE(child->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 2); } +class MyGraphicsWidget : public QGraphicsWidget { +Q_OBJECT +public: + MyGraphicsWidget() + : QGraphicsWidget(0) + { + QGraphicsLinearLayout *lay = new QGraphicsLinearLayout(Qt::Vertical); + QLatin1String wiseWords("AZ BUKI VEDI"); + QString sentence(wiseWords); + QStringList words = sentence.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < words.count(); ++i) { + QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(this); + QLabel *label = new QLabel(words.at(i)); + proxy->setWidget(label); + proxy->setFocusPolicy(Qt::StrongFocus); + proxy->setFlag(QGraphicsItem::ItemAcceptsInputMethod, true); + if (i%2 == 0) + proxy->setVisible(false); + proxy->setFocus(); + lay->addItem(proxy); + } + setLayout(lay); + } + +}; + +class MyWidgetWindow : public QGraphicsWidget +{ +public: + MyWidgetWindow() + : QGraphicsWidget(0, Qt::Window) + { + QGraphicsLinearLayout *lay = new QGraphicsLinearLayout(Qt::Vertical); + MyGraphicsWidget *widget = new MyGraphicsWidget(); + lay->addItem(widget); + setLayout(lay); + } +}; + +void tst_QGraphicsItem::QTBUG_16374_crashInDestructor() +{ + QGraphicsScene scene; + QGraphicsView view(&scene); + + MyWidgetWindow win; + scene.addItem(&win); + + view.show(); + QTest::qWaitForWindowShown(&view); +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" -- cgit v0.12 From 362a61cd821144141324d99cdbaf1ddd858076d9 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Fri, 7 Jan 2011 16:17:13 +0100 Subject: fix build with QT_NO_BEARERMANAGEMENT start() is only defined when using bearer management; that method calls open(), which we just call directly if not using bearer. Reviewed-by: Markus Goetz Task-number: QTBUG-16477 --- src/network/access/qnetworkaccessdatabackend.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/network/access/qnetworkaccessdatabackend.cpp b/src/network/access/qnetworkaccessdatabackend.cpp index 74aebdb..d2db2f2 100644 --- a/src/network/access/qnetworkaccessdatabackend.cpp +++ b/src/network/access/qnetworkaccessdatabackend.cpp @@ -124,7 +124,11 @@ bool QNetworkAccessDataBackend::waitForUpstreamBytesWritten(int) bool QNetworkAccessDataBackend::processRequestSynchronously() { +#ifndef QT_NO_BEARERMANAGEMENT start(); +#else + open(); +#endif return true; } -- cgit v0.12 From 64852122ba71bbb297b4f1e440f6fabee16ca2fe Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Fri, 7 Jan 2011 16:15:25 +0100 Subject: Fix crash in QTextBlock::next()/previous() We should check not just p but also n in next()/previous(), which is what isValid() does. Otherwise n == 0 will cause crash in QFragmentMap. Task-number: QTBUG-16279 Reviewed-by: Eskil --- src/gui/text/qtextobject.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index ea2ef2d..4b92379 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -1488,7 +1488,7 @@ QTextBlock::iterator QTextBlock::end() const */ QTextBlock QTextBlock::next() const { - if (!p) + if (!isValid()) return QTextBlock(); return QTextBlock(p, p->blockMap().next(n)); @@ -1504,7 +1504,7 @@ QTextBlock QTextBlock::next() const */ QTextBlock QTextBlock::previous() const { - if (!p) + if (!isValid()) return QTextBlock(); return QTextBlock(p, p->blockMap().previous(n)); -- cgit v0.12 From 55b0db65877ef5cfb6616f11988c990e2c207bd6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 7 Jan 2011 16:42:16 +0100 Subject: Examples: Fix compilation with namespace. --- examples/webkit/imageanalyzer/imageanalyzer.h | 6 +++--- examples/webkit/imageanalyzer/mainwindow.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/webkit/imageanalyzer/imageanalyzer.h b/examples/webkit/imageanalyzer/imageanalyzer.h index 1bb25dc..265a0c5 100644 --- a/examples/webkit/imageanalyzer/imageanalyzer.h +++ b/examples/webkit/imageanalyzer/imageanalyzer.h @@ -44,9 +44,9 @@ #include #include -class QNetworkAccessManager; -class QNetworkReply; -class QNetworkDiskCache; +QT_FORWARD_DECLARE_CLASS(QNetworkAccessManager) +QT_FORWARD_DECLARE_CLASS(QNetworkReply) +QT_FORWARD_DECLARE_CLASS(QNetworkDiskCache) //! [ ImageAnalyzer - public interface ] class ImageAnalyzer : public QObject diff --git a/examples/webkit/imageanalyzer/mainwindow.h b/examples/webkit/imageanalyzer/mainwindow.h index 076e586..dac7c56 100644 --- a/examples/webkit/imageanalyzer/mainwindow.h +++ b/examples/webkit/imageanalyzer/mainwindow.h @@ -45,7 +45,7 @@ #include class ImageAnalyzer; -class QNetworkDiskCache; +QT_FORWARD_DECLARE_CLASS(QNetworkDiskCache) class MainWin : public QWebView { -- cgit v0.12 From eab9b566d8e7cd98dd69cbcfc39393192a9e6efa Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 7 Jan 2011 16:43:46 +0100 Subject: CLucene: Use the right delete operator. Task-number: QTBUG-15787 Task-number: QTBUG-15788 --- tools/assistant/lib/fulltextsearch/qindexwriter.cpp | 2 +- tools/assistant/lib/fulltextsearch/qsort.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/assistant/lib/fulltextsearch/qindexwriter.cpp b/tools/assistant/lib/fulltextsearch/qindexwriter.cpp index 357569c..ee1c2dc 100644 --- a/tools/assistant/lib/fulltextsearch/qindexwriter.cpp +++ b/tools/assistant/lib/fulltextsearch/qindexwriter.cpp @@ -88,7 +88,7 @@ void QCLuceneIndexWriter::addIndexes(const QList &readers) readerArray[i] = (readers.at(i))->d->reader; d->writer->addIndexes(readerArray); - delete readerArray; + delete [] readerArray; } void QCLuceneIndexWriter::addDocument(QCLuceneDocument &doc, diff --git a/tools/assistant/lib/fulltextsearch/qsort.cpp b/tools/assistant/lib/fulltextsearch/qsort.cpp index d9375bf..3263195 100644 --- a/tools/assistant/lib/fulltextsearch/qsort.cpp +++ b/tools/assistant/lib/fulltextsearch/qsort.cpp @@ -84,7 +84,7 @@ void QCLuceneSort::setSort(const QStringList &fieldNames) for (int i = 0; i < fieldNames.count(); ++i) delete [] nameArray[i]; - delete nameArray; + delete [] nameArray; } void QCLuceneSort::setSort(const QString &field, bool reverse) -- cgit v0.12 From 33379f4a8b27ee37321c4e51f0d2f75f0eedd854 Mon Sep 17 00:00:00 2001 From: aavit Date: Fri, 7 Jan 2011 16:47:04 +0100 Subject: Added api for efficient data driven baseline testing --- tests/arthur/common/qbaselinetest.cpp | 133 ++++++++++++++++----- tests/arthur/common/qbaselinetest.h | 13 ++ tests/auto/baselineexample/tst_baselineexample.cpp | 50 +++----- 3 files changed, 133 insertions(+), 63 deletions(-) diff --git a/tests/arthur/common/qbaselinetest.cpp b/tests/arthur/common/qbaselinetest.cpp index e95b510..79241d5 100644 --- a/tests/arthur/common/qbaselinetest.cpp +++ b/tests/arthur/common/qbaselinetest.cpp @@ -44,56 +44,45 @@ namespace QBaselineTest { +BaselineProtocol proto; bool connected = false; bool triedConnecting = false; -BaselineProtocol proto; - -bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArray *msg, bool *error) -{ - QByteArray itemName; - bool hasName = qstrlen(name); - const char *tag = QTest::currentDataTag(); - if (qstrlen(tag)) { - itemName = tag; - if (hasName) - itemName.append('_').append(name); - } else { - itemName = hasName ? name : "default_name"; - } +QByteArray curFunction; +ImageItemList itemList; +bool gotBaselines; - *msg = "Baseline check of image '" + itemName + "': "; +bool connect(QByteArray *msg, bool *error) +{ if (!triedConnecting) { triedConnecting = true; if (!proto.connect(QTest::testObject()->metaObject()->className())) { *msg += "Failed to connect to baseline server: " + proto.errorMessage().toLatin1(); *error = true; - return true; + return false; } connected = true; } if (!connected) { *msg = "Not connected to baseline server."; *error = true; - return true; + return false; } + return true; +} - ImageItem item; - item.itemName = QLatin1String(itemName); - item.itemChecksum = checksum; - item.testFunction = QLatin1String(QTest::currentTestFunction()); - ImageItemList list; - list.append(item); - if (!proto.requestBaselineChecksums(QLatin1String(QTest::currentTestFunction()), &list) || list.isEmpty()) { - *msg = "Communication with baseline server failed: " + proto.errorMessage().toLatin1(); - *error = true; - return true; - } + +bool compareItem(const ImageItem &baseline, const QImage &img, QByteArray *msg, bool *error) +{ + ImageItem item = baseline; item.image = img; + item.imageChecksums.clear(); item.imageChecksums.prepend(ImageItem::computeChecksum(img)); QByteArray srvMsg; - switch (list.at(0).status) { + switch (baseline.status) { + case ImageItem::Ok: + break; case ImageItem::IgnoreItem : qDebug() << msg->constData() << "Ignored, blacklisted on server."; return true; @@ -105,8 +94,6 @@ bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArra qDebug() << msg->constData() << "Baseline not found on server. Uploading of new baseline failed:" << srvMsg; return true; break; - case ImageItem::Ok: - break; default: qWarning() << "Unexpected reply from baseline server."; return true; @@ -114,11 +101,93 @@ bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArra } *error = false; // The actual comparison of the given image with the baseline: - if (list.at(0).imageChecksums.contains(item.imageChecksums.at(0))) + if (baseline.imageChecksums.contains(item.imageChecksums.at(0))) return true; proto.submitMismatch(item, &srvMsg); *msg += "Mismatch. See report:\n " + srvMsg; return false; } +bool checkImage(const QImage &img, const char *name, quint16 checksum, QByteArray *msg, bool *error) +{ + if (!connected && !connect(msg, error)) + return true; + + QByteArray itemName; + bool hasName = qstrlen(name); + const char *tag = QTest::currentDataTag(); + if (qstrlen(tag)) { + itemName = tag; + if (hasName) + itemName.append('_').append(name); + } else { + itemName = hasName ? name : "default_name"; + } + + *msg = "Baseline check of image '" + itemName + "': "; + + + ImageItem item; + item.itemName = QString::fromLatin1(itemName); + item.itemChecksum = checksum; + item.testFunction = QString::fromLatin1(QTest::currentTestFunction()); + ImageItemList list; + list.append(item); + if (!proto.requestBaselineChecksums(QLatin1String(QTest::currentTestFunction()), &list) || list.isEmpty()) { + *msg = "Communication with baseline server failed: " + proto.errorMessage().toLatin1(); + *error = true; + return true; + } + + return compareItem(list.at(0), img, msg, error); +} + + +QTestData &newRow(const char *dataTag, quint16 checksum) +{ + if (QTest::currentTestFunction() != curFunction) { + curFunction = QTest::currentTestFunction(); + itemList.clear(); + gotBaselines = false; + } + ImageItem item; + item.itemName = QString::fromLatin1(dataTag); + item.itemChecksum = checksum; + item.testFunction = QString::fromLatin1(QTest::currentTestFunction()); + itemList.append(item); + + return QTest::newRow(dataTag); +} + + +bool testImage(const QImage& img, QByteArray *msg, bool *error) +{ + if (!connected && !connect(msg, error)) + return true; + + if (QTest::currentTestFunction() != curFunction || itemList.isEmpty()) { + qWarning() << "Usage error: QBASELINE_TEST used without corresponding QBaselineTest::newRow()"; + return true; + } + + if (!gotBaselines) { + if (!proto.requestBaselineChecksums(QString::fromLatin1(QTest::currentTestFunction()), &itemList) || itemList.isEmpty()) { + *msg = "Communication with baseline server failed: " + proto.errorMessage().toLatin1(); + *error = true; + return true; + } + gotBaselines = true; + } + + QString curTag = QString::fromLatin1(QTest::currentDataTag()); + ImageItemList::const_iterator it = itemList.constBegin(); + while (it != itemList.constEnd() && it->itemName != curTag) + ++it; + if (it == itemList.constEnd()) { + qWarning() << "Usage error: QBASELINE_TEST used without corresponding QBaselineTest::newRow() for row" << curTag; + return true; + } + return compareItem(*it, img, msg, error); +} + } diff --git a/tests/arthur/common/qbaselinetest.h b/tests/arthur/common/qbaselinetest.h index 3445c72..e27cda2 100644 --- a/tests/arthur/common/qbaselinetest.h +++ b/tests/arthur/common/qbaselinetest.h @@ -46,6 +46,8 @@ namespace QBaselineTest { bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArray *msg, bool *error); +bool testImage(const QImage& img, QByteArray *msg, bool *error); +QTestData &newRow(const char *dataTag, quint16 checksum = 0); } #define QBASELINE_CHECK_SUM(image, name, checksum)\ @@ -61,4 +63,15 @@ do {\ #define QBASELINE_CHECK(image, name) QBASELINE_CHECK_SUM(image, name, 0) +#define QBASELINE_TEST(image)\ +do {\ + QByteArray _msg;\ + bool _err = false;\ + if (!QBaselineTest::testImage((image), &_msg, &_err)) {\ + QFAIL(_msg.constData());\ + } else if (_err) {\ + QSKIP(_msg.constData(), SkipSingle);\ + }\ +} while (0) + #endif // BASELINETEST_H diff --git a/tests/auto/baselineexample/tst_baselineexample.cpp b/tests/auto/baselineexample/tst_baselineexample.cpp index 28cbec5..b97cc63 100644 --- a/tests/auto/baselineexample/tst_baselineexample.cpp +++ b/tests/auto/baselineexample/tst_baselineexample.cpp @@ -54,10 +54,8 @@ private Q_SLOTS: void testMultipleImages(); void testDataDriven_data(); void testDataDriven(); - void testDataDrivenMultiple_data(); - void testDataDrivenMultiple(); - void testChecksum_data(); - void testChecksum(); + void testDataDrivenChecksum_data(); + void testDataDrivenChecksum(); }; @@ -98,9 +96,11 @@ void tst_BaselineExample::testMultipleImages() void tst_BaselineExample::testDataDriven_data() { QTest::addColumn("label"); - QTest::newRow("short") << "Ok!"; - QTest::newRow("long") << "A really long button text that just does not seem to end"; - QTest::newRow("empty") << ""; + QBaselineTest::newRow("short") << "Ok!"; + QBaselineTest::newRow("long") << "A really long button text that just does not seem to end"; + QBaselineTest::newRow("empty") << ""; + QBaselineTest::newRow("signs") << "!@#$%^&*()_"; + QBaselineTest::newRow("html") << "BOLD"; } @@ -111,45 +111,33 @@ void tst_BaselineExample::testDataDriven() b.resize(100, 50); b.show(); QTest::qWaitForWindowShown(&b); - QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), 0); + QBASELINE_TEST(QPixmap::grabWidget(&b).toImage()); } -void tst_BaselineExample::testDataDrivenMultiple_data() +void tst_BaselineExample::testDataDrivenChecksum_data() { - testDataDriven_data(); -} - - -void tst_BaselineExample::testDataDrivenMultiple() -{ - QFETCH(QString, label); - QPushButton b(label); - b.resize(100, 50); - b.show(); - QTest::qWaitForWindowShown(&b); - QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), "normal"); - - b.setText(label.prepend('&')); - QTest::qWait(50); - QBASELINE_CHECK(QPixmap::grabWidget(&b).toImage(), "shortcut"); -} + QTest::addColumn("label"); + const int numItems = 5; + const char *tags[numItems] = {"short", "long", "empty", "signs", "html"}; + const char *labels[numItems] = {"Ok!", "A really long button text that just does not seem to end", "", "!@#$%^&*()_", "BOLD"}; -void tst_BaselineExample::testChecksum_data() -{ - testDataDriven_data(); + for (int i = 0; i Date: Wed, 5 Jan 2011 15:24:50 +0100 Subject: Check elapsed time only once Task-number: QTBUG-16262 Reviewed-by: Bradley T. Hughes --- src/corelib/thread/qsemaphore.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp index 8e8a88a..15f45b6 100644 --- a/src/corelib/thread/qsemaphore.cpp +++ b/src/corelib/thread/qsemaphore.cpp @@ -223,8 +223,9 @@ bool QSemaphore::tryAcquire(int n, int timeout) QElapsedTimer timer; timer.start(); while (n > d->avail) { - if (timer.hasExpired(timeout) - || !d->cond.wait(locker.mutex(), timeout - timer.elapsed())) + const qint64 elapsed = timer.elapsed(); + if (timeout - elapsed > 0 + || !d->cond.wait(locker.mutex(), timeout - elapsed)) return false; } } -- cgit v0.12 From 1638129ccbe9680a41859dc48d063a63ae103b1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Thu, 6 Jan 2011 17:16:20 +0100 Subject: Fix compilation error on Solaris d_type in dirent is a non-standard extension to POSIX available on some platforms (namely BSDs, Mac, Linux, Symbian). Taking the conservative approach and using this information only on platforms known to support it. Reviewed-by: Shane Kearns --- src/corelib/io/qfilesystemengine.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/corelib/io/qfilesystemengine.cpp b/src/corelib/io/qfilesystemengine.cpp index d9d802e..9446ebb 100644 --- a/src/corelib/io/qfilesystemengine.cpp +++ b/src/corelib/io/qfilesystemengine.cpp @@ -289,6 +289,9 @@ void QFileSystemMetaData::fillFromStatBuf(const QT_STATBUF &statBuffer) void QFileSystemMetaData::fillFromDirEnt(const QT_DIRENT &entry) { +#if defined(_DIRENT_HAVE_D_TYPE) || defined(Q_OS_BSD4) || defined(Q_OS_SYMBIAN) + // BSD4 includes Mac OS X + // ### This will clear all entry flags and knownFlagsMask switch (entry.d_type) { @@ -344,6 +347,9 @@ void QFileSystemMetaData::fillFromDirEnt(const QT_DIRENT &entry) default: clear(); } +#else + Q_UNUSED(entry) +#endif } #endif -- cgit v0.12 From 6e3ae781a7bd3b5ae2143ef60f969d89663508e3 Mon Sep 17 00:00:00 2001 From: miniak Date: Fri, 7 Jan 2011 19:16:33 +0100 Subject: Add /DYNAMICBASE /NXCOMPAT to linker options in Visual Studio 2005 and higher Native Win32 C++ projects created in Visual Studio have this enabled in the default configuration in order to increase security. Merge-request: 2539 Reviewed-by: Oswald Buddenhagen --- mkspecs/win32-msvc2005/qmake.conf | 2 +- mkspecs/win32-msvc2008/qmake.conf | 2 +- mkspecs/win32-msvc2010/qmake.conf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf index 0c79561..63bef80 100644 --- a/mkspecs/win32-msvc2005/qmake.conf +++ b/mkspecs/win32-msvc2005/qmake.conf @@ -53,7 +53,7 @@ QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $< QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<< QMAKE_LINK = link -QMAKE_LFLAGS = /NOLOGO \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" +QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF QMAKE_LFLAGS_DEBUG = /DEBUG diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf index 24a0486..9f9c919 100644 --- a/mkspecs/win32-msvc2008/qmake.conf +++ b/mkspecs/win32-msvc2008/qmake.conf @@ -55,7 +55,7 @@ QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $< QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<< QMAKE_LINK = link -QMAKE_LFLAGS = /NOLOGO \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" +QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF QMAKE_LFLAGS_DEBUG = /DEBUG diff --git a/mkspecs/win32-msvc2010/qmake.conf b/mkspecs/win32-msvc2010/qmake.conf index c08a74d..9471034 100644 --- a/mkspecs/win32-msvc2010/qmake.conf +++ b/mkspecs/win32-msvc2010/qmake.conf @@ -55,7 +55,7 @@ QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $< QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<< QMAKE_LINK = link -QMAKE_LFLAGS = /NOLOGO \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" +QMAKE_LFLAGS = /NOLOGO /DYNAMICBASE /NXCOMPAT \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\" QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF QMAKE_LFLAGS_DEBUG = /DEBUG -- cgit v0.12 From 272a144ed06a4c11e058404f872609f0b43b4dd6 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Fri, 31 Dec 2010 11:44:38 +1000 Subject: tst_networkselftest: add checks for echo, daytime --- tests/auto/networkselftest/tst_networkselftest.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/auto/networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp index 5e9c50e..90387d0 100644 --- a/tests/auto/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/networkselftest/tst_networkselftest.cpp @@ -398,6 +398,8 @@ void tst_NetworkSelfTest::serverReachability() void tst_NetworkSelfTest::remotePortsOpen_data() { QTest::addColumn("portNumber"); + QTest::newRow("echo") << 7; + QTest::newRow("daytime") << 13; QTest::newRow("ftp") << 21; QTest::newRow("ssh") << 22; QTest::newRow("imap") << 143; -- cgit v0.12 From e6286c54bd66c2db06687127fea69fcc398ffbde Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Tue, 4 Jan 2011 14:30:19 +1000 Subject: Remove garbage empty test. --- tests/auto/gui.pro | 1 - tests/auto/qtwidgets/.gitignore | 1 - tests/auto/qtwidgets/advanced.ui | 319 --------- tests/auto/qtwidgets/icons/big.png | Bin 1323 -> 0 bytes tests/auto/qtwidgets/icons/folder.png | Bin 4069 -> 0 bytes tests/auto/qtwidgets/icons/icon.bmp | Bin 246 -> 0 bytes tests/auto/qtwidgets/icons/icon.png | Bin 344 -> 0 bytes tests/auto/qtwidgets/mainwindow.cpp | 314 --------- tests/auto/qtwidgets/mainwindow.h | 80 --- tests/auto/qtwidgets/qtstyles.qrc | 8 - tests/auto/qtwidgets/qtwidgets.pro | 10 - tests/auto/qtwidgets/standard.ui | 1207 -------------------------------- tests/auto/qtwidgets/system.ui | 658 ----------------- tests/auto/qtwidgets/tst_qtwidgets.cpp | 112 --- 14 files changed, 2710 deletions(-) delete mode 100644 tests/auto/qtwidgets/.gitignore delete mode 100644 tests/auto/qtwidgets/advanced.ui delete mode 100644 tests/auto/qtwidgets/icons/big.png delete mode 100644 tests/auto/qtwidgets/icons/folder.png delete mode 100644 tests/auto/qtwidgets/icons/icon.bmp delete mode 100644 tests/auto/qtwidgets/icons/icon.png delete mode 100644 tests/auto/qtwidgets/mainwindow.cpp delete mode 100644 tests/auto/qtwidgets/mainwindow.h delete mode 100644 tests/auto/qtwidgets/qtstyles.qrc delete mode 100644 tests/auto/qtwidgets/qtwidgets.pro delete mode 100644 tests/auto/qtwidgets/standard.ui delete mode 100644 tests/auto/qtwidgets/system.ui delete mode 100644 tests/auto/qtwidgets/tst_qtwidgets.cpp diff --git a/tests/auto/gui.pro b/tests/auto/gui.pro index 2d9ea93..802e74a 100644 --- a/tests/auto/gui.pro +++ b/tests/auto/gui.pro @@ -197,7 +197,6 @@ SUBDIRS=\ qtreeview \ qtreewidget \ qtreewidgetitemiterator \ - qtwidgets \ qudpsocket \ qundogroup \ qundostack \ diff --git a/tests/auto/qtwidgets/.gitignore b/tests/auto/qtwidgets/.gitignore deleted file mode 100644 index d8e55c3..0000000 --- a/tests/auto/qtwidgets/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tst_qtwidgets diff --git a/tests/auto/qtwidgets/advanced.ui b/tests/auto/qtwidgets/advanced.ui deleted file mode 100644 index ce27374..0000000 --- a/tests/auto/qtwidgets/advanced.ui +++ /dev/null @@ -1,319 +0,0 @@ - - - - - Advanced - - - Advanced - - - - 0 - 0 - 400 - 300 - - - - - - - - 9 - - - 6 - - - - - - - - 1 - - - 6 - - - - - pushButton - - - - 1 - 1 - 80 - 23 - - - - - - - - - - - pushButton_2 - - - - 87 - 1 - 80 - 23 - - - - Text - - - - - - - checkBox - - - - 173 - 6 - 23 - 13 - - - - - - - - - - - - - - radioButton - - - - 202 - 6 - 22 - 12 - - - - - - - - - - - - - - checkBox_2 - - - - 230 - 3 - 44 - 18 - - - - Text - - - - - - - radioButton_2 - - - - 280 - 3 - 43 - 18 - - - - Text - - - - - - - - - - - - 1 - - - 6 - - - - - listWidget - - - - 1 - 1 - 186 - 91 - - - - - - - - listWidget_3 - - - - 193 - 96 - 188 - 60 - - - - - - - - treeWidget_2 - - - - 1 - 96 - 186 - 60 - - - - - - - - - - - 1 - - - 6 - - - - - listWidget_2 - - - - 1 - 1 - 186 - 43 - - - - - - - - treeWidget - - - - 1 - 48 - 186 - 43 - - - - - - - - - - - - tabWidget - - - - 9 - 201 - 382 - 90 - - - - - 0 - 90 - - - - QTabWidget::North - - - QTabWidget::Rounded - - - - widget - - - - 0 - 0 - 380 - 63 - - - - Tab Page 1 - - - - - widget - - - - 0 - 0 - 459 - 66 - - - - Tab Page 2 - - - - - - - - - diff --git a/tests/auto/qtwidgets/icons/big.png b/tests/auto/qtwidgets/icons/big.png deleted file mode 100644 index 6032804..0000000 Binary files a/tests/auto/qtwidgets/icons/big.png and /dev/null differ diff --git a/tests/auto/qtwidgets/icons/folder.png b/tests/auto/qtwidgets/icons/folder.png deleted file mode 100644 index 981a25d..0000000 Binary files a/tests/auto/qtwidgets/icons/folder.png and /dev/null differ diff --git a/tests/auto/qtwidgets/icons/icon.bmp b/tests/auto/qtwidgets/icons/icon.bmp deleted file mode 100644 index 196de6a..0000000 Binary files a/tests/auto/qtwidgets/icons/icon.bmp and /dev/null differ diff --git a/tests/auto/qtwidgets/icons/icon.png b/tests/auto/qtwidgets/icons/icon.png deleted file mode 100644 index 8f9c562..0000000 Binary files a/tests/auto/qtwidgets/icons/icon.png and /dev/null differ diff --git a/tests/auto/qtwidgets/mainwindow.cpp b/tests/auto/qtwidgets/mainwindow.cpp deleted file mode 100644 index 341c416..0000000 --- a/tests/auto/qtwidgets/mainwindow.cpp +++ /dev/null @@ -1,314 +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 test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "mainwindow.h" -#include -#include - -StyleWidget::StyleWidget(QWidget *parent, Qt::WFlags f) - : QWidget(parent, f) -{ - QHBoxLayout *hbox = new QHBoxLayout(this); - QSplitter *spl = new QSplitter(this); - - // standard widgets - QWidget *leftWidget = new QWidget(this); - m_staWidget.setupUi(leftWidget); - - // advanced/system widgets - QGroupBox *rightWidget = new QGroupBox("Advanced", this); - QVBoxLayout *vbox = new QVBoxLayout(rightWidget); - QWidget *adv = new QWidget(rightWidget); - m_advWidget.setupUi(adv); - QWidget *sys = new QWidget(rightWidget); - m_sysWidget.setupUi(sys); - vbox->addWidget(adv); - vbox->addWidget(sys); - - spl->addWidget(leftWidget); - spl->addWidget(rightWidget); - - hbox->setMargin(4); - hbox->addWidget(spl); - - m_small1 = QIcon(":/icons/icon.bmp"); - m_small2 = QIcon(":/icons/icon.png"); - m_big = QIcon(":/icons/big.png"); - - addComboBoxItems(); - addTreeItems(); - addTreeListItems(); - addListItems(); - addTextEdit(); - setupOtherWidgets(); - setupButtons(); - - foreach(QWidget *w, qFindChildren(parentWidget())) - w->setWhatsThis(w->metaObject()->className()); -} - -StyleWidget::~StyleWidget() -{ - -} - -void StyleWidget::addTextEdit() -{ - m_staWidget.textEdit->setPlainText( - "Some Text\nSome Text\nSome Text\nSome Text\nSome Text\nSome Text\nSome Text\nSome Text"); - m_staWidget.textEdit_2->setPlainText( - "Some Text, Some Text, Some Text, Some Text, Some Text, Some Text, Some Text, Some Text"); - m_staWidget.textEdit_3->setPlainText( - "Some Text, Some Text, Some Text, Some Text, Some Text, Some Text, Some Text, Some Text" \ - "Some Text\nSome Text\nSome Text\nSome Text\nSome Text\nSome Text\nSome Text\nSome Text\n"); -} - -void StyleWidget::addComboBoxItems() -{ - m_staWidget.comboBox->addItem("Item 1"); - m_staWidget.comboBox->addItem("Item 2"); - m_staWidget.comboBox->addItem("Item 3"); - m_staWidget.comboBox->addItem("Item 4"); - m_staWidget.comboBox->addItem("Item 5"); -} - -void StyleWidget::addListItems() -{ - m_staWidget.listWidget->addItem("Item 1"); - m_staWidget.listWidget->addItem("Item 2"); - m_staWidget.listWidget->addItem("Item 3"); - m_staWidget.listWidget->addItem("Item 4"); - m_staWidget.listWidget->addItem("Item 5"); - - QListWidgetItem *tmp = new QListWidgetItem("Item 1", m_staWidget.listWidget_2); - tmp->setCheckState(Qt::Checked); - tmp = new QListWidgetItem("Item 2", m_staWidget.listWidget_2); - tmp->setCheckState(Qt::Checked); - tmp = new QListWidgetItem("Item 3", m_staWidget.listWidget_2); - tmp->setCheckState(Qt::Checked); - tmp = new QListWidgetItem("Item 4", m_staWidget.listWidget_2); - tmp->setCheckState(Qt::Checked); - tmp = new QListWidgetItem("Item 5", m_staWidget.listWidget_2); - tmp->setCheckState(Qt::Checked); - - tmp = new QListWidgetItem("Item 1", m_advWidget.listWidget_3); - tmp->setCheckState(Qt::Checked); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 2", m_advWidget.listWidget_3); - tmp->setCheckState(Qt::Checked); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 3", m_advWidget.listWidget_3); - tmp->setCheckState(Qt::Checked); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 4", m_advWidget.listWidget_3); - tmp->setCheckState(Qt::Checked); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 5", m_advWidget.listWidget_3); - tmp->setCheckState(Qt::Checked); - tmp->setIcon(m_small1); - - m_advWidget.listWidget->setViewMode(QListView::IconMode); - QIcon folder(":/icons/folder.png"); - tmp = new QListWidgetItem("Item 1", m_advWidget.listWidget); - tmp->setIcon(folder); - tmp = new QListWidgetItem("Item 2", m_advWidget.listWidget); - tmp->setIcon(folder); - tmp = new QListWidgetItem("Item 3", m_advWidget.listWidget); - tmp->setIcon(folder); - tmp = new QListWidgetItem("Item 4", m_advWidget.listWidget); - tmp->setIcon(folder); - tmp = new QListWidgetItem("Item 5", m_advWidget.listWidget); - tmp->setIcon(folder); - - tmp = new QListWidgetItem("Item 1", m_advWidget.listWidget_2); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 2", m_advWidget.listWidget_2); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 3", m_advWidget.listWidget_2); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 4", m_advWidget.listWidget_2); - tmp->setIcon(m_small1); - tmp = new QListWidgetItem("Item 5", m_advWidget.listWidget_2); - tmp->setIcon(m_small1); -} - -void StyleWidget::setupOtherWidgets() -{ - m_sysWidget.tableWidget->setRowCount(100); - m_sysWidget.tableWidget->setColumnCount(100); -} - -void StyleWidget::addTreeItems() -{ - //standard tree - m_staWidget.treeWidget_2->setColumnCount(1); - m_staWidget.treeWidget_2->header()->hide(); - - QTreeWidgetItem *tmp; - QTreeWidgetItem *subtmp; - QTreeWidgetItem *root1 = new QTreeWidgetItem(m_staWidget.treeWidget_2); - root1->setText(0, "Root 1"); - QTreeWidgetItem *root2 = new QTreeWidgetItem(m_staWidget.treeWidget_2); - root2->setText(0, "Root 2"); - - for (int i=1; i<=10; ++i) - { - tmp = new QTreeWidgetItem(root1); - tmp->setText(0, QString("Item %1").arg(i)); - for (int j=1; j<=5; ++j) - { - subtmp = new QTreeWidgetItem(tmp); - subtmp->setText(0, QString("Sub Item %1").arg(j)); - } - } - - // standard checked tree - m_staWidget.treeWidget_4->setColumnCount(1); - m_staWidget.treeWidget_4->header()->hide(); - - root1 = new QTreeWidgetItem(m_staWidget.treeWidget_4); - root1->setText(0, "Root 1"); - root1->setCheckState(0, Qt::Checked); - root2 = new QTreeWidgetItem(m_staWidget.treeWidget_4); - root2->setText(0, "Root 2"); - root2->setCheckState(0, Qt::Checked); - - for (int i=1; i<=10; ++i) - { - tmp = new QTreeWidgetItem(root1); - tmp->setText(0, QString("Item %1").arg(i)); - tmp->setCheckState(0, Qt::Checked); - for (int j=1; j<=5; ++j) - { - subtmp = new QTreeWidgetItem(tmp); - subtmp->setText(0, QString("Sub Item %1").arg(j)); - subtmp->setCheckState(0, Qt::Checked); - } - } - - // advanced (images) tree - m_advWidget.treeWidget_2->setColumnCount(1); - m_advWidget.treeWidget_2->header()->hide(); - - root1 = new QTreeWidgetItem(m_advWidget.treeWidget_2); - root1->setText(0, "Root 1"); - root1->setIcon(0, m_small1); - root2 = new QTreeWidgetItem(m_advWidget.treeWidget_2); - root2->setText(0, "Root 2"); - root2->setIcon(0, m_small1); - - for (int i=1; i<=10; ++i) - { - tmp = new QTreeWidgetItem(root1); - tmp->setText(0, QString("Item %1").arg(i)); - tmp->setIcon(0, m_small2); - for (int j=1; j<=5; ++j) - { - subtmp = new QTreeWidgetItem(tmp); - subtmp->setText(0, QString("Sub Item %1").arg(j)); - tmp->setIcon(0, m_small1); - } - } - -} - -void StyleWidget::addTreeListItems() -{ - //standard list - QTreeWidgetItem *tmp; - m_staWidget.treeWidget->setColumnCount(3); - m_staWidget.treeWidget->headerItem()->setText(0, "Col1"); - m_staWidget.treeWidget->headerItem()->setText(1, "Col2"); - m_staWidget.treeWidget->headerItem()->setText(2, "Col3"); - - for (int i=1; i<10; ++i) - { - tmp = new QTreeWidgetItem(m_staWidget.treeWidget); - tmp->setText(0, QString("Item%1").arg(i)); - tmp->setText(1, QString("Item%11").arg(i)); - tmp->setText(2, QString("Item%12").arg(i)); - } - - //standard checked list - m_staWidget.treeWidget_3->setColumnCount(3); - m_staWidget.treeWidget_3->headerItem()->setText(0, "Col1"); - m_staWidget.treeWidget_3->headerItem()->setText(1, "Col2"); - m_staWidget.treeWidget_3->headerItem()->setText(2, "Col3"); - - for (int i=1; i<10; ++i) - { - tmp = new QTreeWidgetItem(m_staWidget.treeWidget_3); - tmp->setText(0, QString("Item%1").arg(i)); - tmp->setCheckState(0, Qt::Checked); - tmp->setText(1, QString("Item%11").arg(i)); - tmp->setText(2, QString("Item%12").arg(i)); - } - - //with images - m_advWidget.treeWidget->setColumnCount(2); - m_advWidget.treeWidget->headerItem()->setText(0, "Col1"); - m_advWidget.treeWidget->headerItem()->setIcon(0, m_small2); - m_advWidget.treeWidget->headerItem()->setText(1, "Col2"); - m_advWidget.treeWidget->headerItem()->setIcon(1, m_small2); - - for (int i=1; i<10; ++i) - { - tmp = new QTreeWidgetItem(m_advWidget.treeWidget); - tmp->setText(0, QString("Item%1").arg(i)); - tmp->setIcon(0, m_small1); - tmp->setText(1, QString("Item%11").arg(i)); - } -} - -void StyleWidget::setupButtons() -{ - m_advWidget.pushButton->setIcon(m_small1); - m_advWidget.pushButton_2->setIcon(m_small1); - m_advWidget.checkBox->setIcon(m_small2); - m_advWidget.checkBox_2->setIcon(m_small2); - m_advWidget.radioButton->setIcon(m_small2); - m_advWidget.radioButton_2->setIcon(m_small2); - - // tab page images - m_advWidget.tabWidget->setTabIcon(0, m_small2); - m_advWidget.tabWidget->setTabIcon(1, m_small2); -} diff --git a/tests/auto/qtwidgets/mainwindow.h b/tests/auto/qtwidgets/mainwindow.h deleted file mode 100644 index 8a4521a..0000000 --- a/tests/auto/qtwidgets/mainwindow.h +++ /dev/null @@ -1,80 +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 test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include -#include -#include "ui_standard.h" -#include "ui_advanced.h" -#include "ui_system.h" - -class StyleWidget : public QWidget -{ - Q_OBJECT - -public: - StyleWidget(QWidget *parent = 0, Qt::WFlags f = 0); - ~StyleWidget(); - -public slots: - void onWhatsThis() { QWhatsThis::enterWhatsThisMode(); } - -private: - void addComboBoxItems(); - void addListItems(); - void addTextEdit(); - void setupOtherWidgets(); - void setupButtons(); - void addTreeItems(); - void addTreeListItems(); - - Ui::Standard m_staWidget; - Ui::Advanced m_advWidget; - Ui::System m_sysWidget; - - QIcon m_small1; - QIcon m_small2; - QIcon m_big; -}; - -#endif //MAINWINDOW_H - diff --git a/tests/auto/qtwidgets/qtstyles.qrc b/tests/auto/qtwidgets/qtstyles.qrc deleted file mode 100644 index 772891d..0000000 --- a/tests/auto/qtwidgets/qtstyles.qrc +++ /dev/null @@ -1,8 +0,0 @@ - - - ./icons/icon.png - ./icons/icon.bmp - ./icons/big.png - ./icons/folder.png - - diff --git a/tests/auto/qtwidgets/qtwidgets.pro b/tests/auto/qtwidgets/qtwidgets.pro deleted file mode 100644 index 9c33cd1..0000000 --- a/tests/auto/qtwidgets/qtwidgets.pro +++ /dev/null @@ -1,10 +0,0 @@ -load(qttest_p4) -symbian:TARGET.EPOCHEAPSIZE=0x200000 0xa00000 - -SOURCES += tst_qtwidgets.cpp mainwindow.cpp -HEADERS += mainwindow.h -QT += network -RESOURCES = qtstyles.qrc -FORMS += advanced.ui system.ui standard.ui - - diff --git a/tests/auto/qtwidgets/standard.ui b/tests/auto/qtwidgets/standard.ui deleted file mode 100644 index 9764a66..0000000 --- a/tests/auto/qtwidgets/standard.ui +++ /dev/null @@ -1,1207 +0,0 @@ - - - - - Standard - - - Standard - - - - 0 - 0 - 400 - 300 - - - - - - - - 0 - - - 0 - - - - - groupBox - - - - 0 - 0 - 400 - 300 - - - - Standard - - - - - - - 9 - - - 6 - - - - - - - - 1 - - - 6 - - - - - - - - 1 - - - 6 - - - - - - - - 1 - - - 6 - - - - - checkBox - - - - 1 - 1 - 114 - 3 - - - - Enabled &CheckBox - - - - - - - checkBox_2 - - - false - - - - 121 - 1 - 116 - 3 - - - - Disabled Check&Box - - - - - - - - - - - 243 - 1 - 80 - 3 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 1 - - - 6 - - - - - comboBox - - - - 1 - 1 - 41 - 3 - - - - - - - - comboBox_2 - - - - 48 - 1 - 41 - 3 - - - - - - - - comboBox_3 - - - false - - - - 95 - 1 - 41 - 3 - - - - - - - - - - - - - 1 - - - 6 - - - - - pushButton - - - - 1 - 1 - 80 - 3 - - - - &Enabled - - - - - - - pushButton_2 - - - false - - - - 87 - 1 - 80 - 3 - - - - Di&sabled - - - - - - - - - - - 173 - 1 - 150 - 3 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 1 - - - 6 - - - - - label - - - - 1 - 1 - 99 - 3 - - - - QFrame::NoFrame - - - QFrame::Plain - - - Label with some text. - - - Qt::AutoText - - - - - - - label_2 - - - false - - - - 106 - 1 - 139 - 3 - - - - QFrame::NoFrame - - - QFrame::Plain - - - Disabled label with some text. - - - Qt::AutoText - - - - - - - - - - - 251 - 1 - 72 - 3 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 1 - - - 6 - - - - - lineEdit - - - - 1 - 1 - 135 - 3 - - - - Enabled - - - QLineEdit::Normal - - - - - - - lineEdit_2 - - - false - - - - 142 - 1 - 134 - 3 - - - - Disabled - - - QLineEdit::Normal - - - - - - - spinBox - - - - 282 - 1 - 41 - 3 - - - - QAbstractSpinBox::UpDownArrows - - - - - - - - - - - - 1 - - - 6 - - - - - radioButton - - - - 1 - 1 - 123 - 3 - - - - Enabled RadioButton - - - - - - - radioButton_2 - - - false - - - - 130 - 1 - 125 - 3 - - - - Disabled RadioButton - - - - - - - - - - - 261 - 1 - 62 - 3 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 1 - - - 6 - - - - - horizontalScrollBar - - - - 1 - 1 - 90 - 3 - - - - - 0 - 0 - 0 - 0 - - - - - 90 - 0 - - - - Qt::Horizontal - - - - - - - horizontalScrollBar_2 - - - - 97 - 1 - 30 - 3 - - - - Qt::Horizontal - - - - - - - - - - - verticalScrollBar - - - - 333 - 1 - 17 - 37 - - - - - 0 - 1 - 0 - 0 - - - - Qt::Vertical - - - - - - - slider - - - - 356 - 1 - 21 - 37 - - - - - 0 - 1 - 0 - 0 - - - - Qt::Vertical - - - QSlider::TicksBelow - - - 0 - - - - - - - - - - - - 1 - - - 6 - - - - - slider_2 - - - - 1 - 6 - 90 - 16 - - - - Qt::Horizontal - - - QSlider::NoTicks - - - - - - - slider_3 - - - - 97 - 3 - 89 - 21 - - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - slider_4 - - - - 192 - 3 - 90 - 21 - - - - Qt::Horizontal - - - QSlider::TicksAbove - - - - - - - slider_5 - - - - 288 - 1 - 89 - 26 - - - - Qt::Horizontal - - - QSlider::TicksBothSides - - - - - - - - - - - - 1 - - - 6 - - - - - textEdit - - - - 1 - 1 - 89 - 37 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAlwaysOn - - - Qt::ScrollBarAlwaysOff - - - - - - - textEdit_2 - - - - 96 - 1 - 90 - 37 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAlwaysOn - - - - - - - textEdit_3 - - - - 192 - 1 - 89 - 100 - - - - - 0 - 100 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAlwaysOn - - - Qt::ScrollBarAlwaysOn - - - - - - - textEdit_4 - - - - 287 - 1 - 90 - 37 - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAsNeeded - - - - - - - - - groupBox_2 - - - - 11 - 132 - 378 - 39 - - - - GroupBox - - - - - - - 9 - - - 6 - - - - - progressBar - - - - 11 - 20 - 356 - 8 - - - - 50 - - - false - - - - - - - - - - - - - 1 - - - 6 - - - - - listWidget - - - - 1 - 1 - 107 - 37 - - - - - - - - listWidget_2 - - - - 114 - 1 - 107 - 37 - - - - - - - - tabWidget - - - - 227 - 1 - 150 - 37 - - - - - 150 - 0 - - - - QTabWidget::North - - - QTabWidget::Rounded - - - - - - - - 0 - 0 - 148 - 10 - - - - Tab Page 1 - - - - - - - - - 0 - 0 - 116 - 56 - - - - Tab Page 2 - - - - - widget - - - - 0 - 0 - 116 - 56 - - - - Tab Page 3 - - - - - widget - - - - 0 - 0 - 146 - 36 - - - - Tab Page 4 - - - - - - - - - - tabWidget_2 - - - - 11 - 214 - 378 - 90 - - - - - 0 - 90 - - - - QTabWidget::North - - - QTabWidget::Rounded - - - - widget - - - - 0 - 0 - 376 - 63 - - - - Tab Page 1 - - - - - widget - - - - 0 - 0 - 424 - 66 - - - - Tab Page 2 - - - - - - - - - - - 1 - - - 6 - - - - - treeWidget_2 - - - - 192 - 1 - 185 - 18 - - - - - - - - treeWidget_3 - - - - 1 - 20 - 185 - 18 - - - - - - - - treeWidget - - - - 1 - 1 - 185 - 18 - - - - - - - - treeWidget_4 - - - - 192 - 20 - 185 - 18 - - - - - - - - - - - - - - diff --git a/tests/auto/qtwidgets/system.ui b/tests/auto/qtwidgets/system.ui deleted file mode 100644 index a641e0e..0000000 --- a/tests/auto/qtwidgets/system.ui +++ /dev/null @@ -1,658 +0,0 @@ - - - - - System - - - System - - - - 0 - 0 - 400 - 604 - - - - - - - - 9 - - - 6 - - - - - - - - 1 - - - 6 - - - - - toolButton - - - - 340 - 138 - 15 - 19 - - - - ... - - - - - - - horizontalLine - - - - 1 - 146 - 333 - 3 - - - - QFrame::HLine - - - QFrame::Sunken - - - - - - - verticalLine - - - - 361 - 1 - 3 - 131 - - - - QFrame::VLine - - - QFrame::Sunken - - - - - - - - - - 1 - - - 6 - - - - - dateTimeEdit_2 - - - false - - - - 1 - 108 - 113 - 20 - - - - QAbstractSpinBox::UpDownArrows - - - - - - - dateTimeEdit - - - - 1 - 41 - 113 - 20 - - - - QAbstractSpinBox::UpDownArrows - - - - - - - dial - - - - 120 - 1 - 114 - 100 - - - - Qt::Horizontal - - - - - - - lcdNumber - - - - 120 - 107 - 114 - 23 - - - - QFrame::Box - - - QFrame::Raised - - - QLCDNumber::Dec - - - QLCDNumber::Outline - - - - - - - lcdNumber_2 - - - false - - - - 240 - 107 - 113 - 23 - - - - QFrame::Box - - - QFrame::Raised - - - QLCDNumber::Dec - - - QLCDNumber::Outline - - - - - - - dial_2 - - - false - - - - 240 - 1 - 113 - 100 - - - - Qt::Horizontal - - - - - - - - - - - - - - 1 - - - 6 - - - - - tableWidget - - - - 1 - 1 - 256 - 193 - - - - - - - - toolBox - - - - 263 - 1 - 118 - 193 - - - - QFrame::Box - - - QFrame::Plain - - - 0 - - - - widget - - - - 0 - 0 - 98 - 119 - - - - Tool Page 1 - - - - - widget - - - - 0 - 0 - 115 - 56 - - - - Tool Page 2 - - - - - - - - - - tabWidget - - - - 9 - 375 - 382 - 220 - - - - QTabWidget::Rounded - - - - widget - - - - 0 - 0 - 378 - 196 - - - - Tab Page 1 - - - - - - - 9 - - - 6 - - - - - - - - 1 - - - 6 - - - - - comboBox_3 - - - - 1 - 1 - 332 - 20 - - - - - - - - - - - 1 - - - 6 - - - - - pushButton_5 - - - - 1 - 1 - 80 - 23 - - - - &Enabled - - - - - - - pushButton_6 - - - - 87 - 1 - 80 - 23 - - - - Di&sabled - - - - - - - - - - - 173 - 1 - 158 - 23 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 1 - - - 6 - - - - - radioButton_3 - - - - 1 - 2 - 123 - 18 - - - - Enabled RadioButton - - - - - - - radioButton_4 - - - - 130 - 2 - 125 - 18 - - - - Disabled RadioButton - - - - - - - - - - - 261 - 1 - 70 - 20 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - progressBar - - - - 1 - 86 - 332 - 22 - - - - 24 - - - - - - - horizontalScrollBar - - - - 1 - 114 - 332 - 17 - - - - Qt::Horizontal - - - - - - - - - verticalScrollBar - - - - 349 - 9 - 17 - 132 - - - - - 0 - 1 - 0 - 0 - - - - Qt::Vertical - - - - - - - - - - - 9 - 147 - 334 - 40 - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - widget - - - - 0 - 0 - 377 - 187 - - - - Tab Page 2 - - - - - - - - - diff --git a/tests/auto/qtwidgets/tst_qtwidgets.cpp b/tests/auto/qtwidgets/tst_qtwidgets.cpp deleted file mode 100644 index 501402b..0000000 --- a/tests/auto/qtwidgets/tst_qtwidgets.cpp +++ /dev/null @@ -1,112 +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 test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include -#include - -#include - - -#include "mainwindow.h" -#include "../network-settings.h" - -class tst_QtWidgets: public QObject -{ - Q_OBJECT - -public: - tst_QtWidgets(); - virtual ~tst_QtWidgets(); - -private slots: - void snapshot(); -}; - -tst_QtWidgets::tst_QtWidgets() -{ - Q_SET_DEFAULT_IAP -} - -tst_QtWidgets::~tst_QtWidgets() -{ -} - -void tst_QtWidgets::snapshot() -{ - QSKIP("Jesper will fix this test when he has time.", SkipAll); -#if 0 - StyleWidget widget(0, Qt::X11BypassWindowManagerHint); - widget.show(); - - QPixmap pix = QPixmap::grabWidget(&widget); - - QVERIFY(!pix.isNull()); - - QBuffer buf; - pix.save(&buf, "PNG"); - QVERIFY(buf.size() > 0); - - QString filename = "qtwidgets_" + QHostInfo::localHostName() + "_" + QDateTime::currentDateTime().toString("yyyy.MM.dd_hh.mm.ss") + ".png"; - - QFtp ftp; - ftp.connectToHost("qt-test-server.qt-test-net"); - ftp.login("ftptest", "password"); - ftp.cd("qtest/pics"); - ftp.put(buf.data(), filename, QFtp::Binary); - ftp.close(); - - int i = 0; - while (i < 100 && ftp.hasPendingCommands()) { - QCoreApplication::instance()->processEvents(); - QTest::qWait(250); - ++i; - } - QVERIFY2(ftp.error() == QFtp::NoError, ftp.errorString().toLocal8Bit().constData()); - QVERIFY(!ftp.hasPendingCommands()); -#endif -} - - - -QTEST_MAIN(tst_QtWidgets) - -#include "tst_qtwidgets.moc" -- cgit v0.12 From 026a24855ec16626ab101007719a836f5a4e3c47 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Thu, 6 Jan 2011 13:39:14 +1000 Subject: network tests: make IMAP, FTP testdata more flexible. Move all hardcoded IMAP/FTP fixtures into network-settings.h. Make it work with new and old network test server. Reviewed-by: Markus Goetz Task: QTBUG-15114 --- tests/auto/network-settings.h | 79 ++++++++++++++++---- .../qhttpsocketengine/tst_qhttpsocketengine.cpp | 10 +-- .../tst_qnativesocketengine.cpp | 2 +- .../tst_qsocks5socketengine.cpp | 12 +-- tests/auto/qsslsocket/tst_qsslsocket.cpp | 3 +- tests/auto/qtcpsocket/tst_qtcpsocket.cpp | 87 ++++++++++++++++------ 6 files changed, 142 insertions(+), 51 deletions(-) diff --git a/tests/auto/network-settings.h b/tests/auto/network-settings.h index 6730946..0cb8e3a 100644 --- a/tests/auto/network-settings.h +++ b/tests/auto/network-settings.h @@ -64,6 +64,7 @@ //#define SYMBIAN_WINSOCK_CONNECTIVITY #endif // Q_CC_NOKIAX86 +// FIXME: any reason we do this for symbian only, and not other platforms? class QtNetworkSettingsRecord { public: QtNetworkSettingsRecord() { } @@ -128,7 +129,6 @@ public: static QString wildcardServerName() { return "qt-test-server.wildcard.dev." + serverDomainName(); - //return "qttest.wildcard.dev." + serverDomainName(); } #ifdef QT_NETWORK_LIB @@ -149,8 +149,10 @@ public: } #endif - static QByteArray expectedReplyIMAP() + static bool compareReplyIMAP(QByteArray const& actual) { + QList expected; + #ifdef Q_OS_SYMBIAN loadTestSettings(); @@ -160,17 +162,35 @@ public: imapExpectedReply = entry->recordValue().toAscii(); imapExpectedReply.append('\r').append('\n'); } - return imapExpectedReply.data(); + expected << imapExpectedReply.data(); } #endif - QByteArray expected( "* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS LOGINDISABLED] " ); - expected = expected.append(QtNetworkSettings::serverName().toAscii()); - expected = expected.append(" Cyrus IMAP4 v2.3.11-Mandriva-RPM-2.3.11-6mdv2008.1 server ready\r\n"); - return expected; + + // Mandriva; old test server + expected << QByteArray( "* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS LOGINDISABLED] " ) + .append(QtNetworkSettings::serverName().toAscii()) + .append(" Cyrus IMAP4 v2.3.11-Mandriva-RPM-2.3.11-6mdv2008.1 server ready\r\n"); + + // Ubuntu 10.04; new test server + expected << QByteArray( "* OK " ) + .append(QtNetworkSettings::serverLocalName().toAscii()) + .append(" Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready\r\n"); + + // Feel free to add more as needed + + Q_FOREACH (QByteArray const& ba, expected) { + if (ba == actual) { + return true; + } + } + + return false; } - static QByteArray expectedReplySSL() + static bool compareReplyIMAPSSL(QByteArray const& actual) { + QList expected; + #ifdef Q_OS_SYMBIAN loadTestSettings(); @@ -180,19 +200,46 @@ public: imapExpectedReplySsl = entry->recordValue().toAscii(); imapExpectedReplySsl.append('\r').append('\n'); } - return imapExpectedReplySsl.data(); + expected << imapExpectedReplySsl.data(); } #endif - QByteArray expected( "* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=PLAIN SASL-IR] " ); - expected = expected.append(QtNetworkSettings::serverName().toAscii()); - expected = expected.append(" Cyrus IMAP4 v2.3.11-Mandriva-RPM-2.3.11-6mdv2008.1 server ready\r\n"); - return expected; + // Mandriva; old test server + expected << QByteArray( "* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=PLAIN SASL-IR] " ) + .append(QtNetworkSettings::serverName().toAscii()) + .append(" Cyrus IMAP4 v2.3.11-Mandriva-RPM-2.3.11-6mdv2008.1 server ready\r\n"); + + // Ubuntu 10.04; new test server + expected << QByteArray( "* OK " ) + .append(QtNetworkSettings::serverLocalName().toAscii()) + .append(" Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready\r\n"); + + // Feel free to add more as needed + + Q_FOREACH (QByteArray const& ba, expected) { + if (ba == actual) { + return true; + } + } + + return false; } - static QByteArray expectedReplyFtp() + static bool compareReplyFtp(QByteArray const& actual) { - QByteArray expected( "220 (vsFTPd 2.0.5)\r\n221 Goodbye.\r\n" ); - return expected; + QList expected; + + // A few different vsFTPd versions. + // Feel free to add more as needed + expected << QByteArray( "220 (vsFTPd 2.0.5)\r\n221 Goodbye.\r\n" ); + expected << QByteArray( "220 (vsFTPd 2.2.2)\r\n221 Goodbye.\r\n" ); + + Q_FOREACH (QByteArray const& ba, expected) { + if (ba == actual) { + return true; + } + } + + return false; } #ifdef Q_OS_SYMBIAN diff --git a/tests/auto/qhttpsocketengine/tst_qhttpsocketengine.cpp b/tests/auto/qhttpsocketengine/tst_qhttpsocketengine.cpp index f86ba63..972185b 100644 --- a/tests/auto/qhttpsocketengine/tst_qhttpsocketengine.cpp +++ b/tests/auto/qhttpsocketengine/tst_qhttpsocketengine.cpp @@ -325,7 +325,7 @@ void tst_QHttpSocketEngine::simpleConnectToIMAP() QVERIFY(socketDevice.read(array.data(), array.size()) == available); // Check that the greeting is what we expect it to be - QCOMPARE(array.constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(array), array.constData()); // Write a logout message @@ -455,7 +455,7 @@ void tst_QHttpSocketEngine::tcpSocketBlockingTest() // Read greeting QVERIFY(socket.waitForReadyRead(5000)); QString s = socket.readLine(); - QCOMPARE(s.toLatin1().constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(s.toLatin1()), qPrintable(s)); // Write NOOP QCOMPARE((int) socket.write("1 NOOP\r\n", 8), 8); @@ -530,8 +530,8 @@ void tst_QHttpSocketEngine::tcpSocketNonBlockingTest() // Read greeting QVERIFY(!tcpSocketNonBlocking_data.isEmpty()); - QCOMPARE(tcpSocketNonBlocking_data.at(0).toLatin1().constData(), - QtNetworkSettings::expectedReplyIMAP().constData()); + QByteArray data = tcpSocketNonBlocking_data.at(0).toLatin1(); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(data), data.constData()); tcpSocketNonBlocking_data.clear(); @@ -713,7 +713,7 @@ void tst_QHttpSocketEngine::passwordAuth() QVERIFY(socketDevice.read(array.data(), array.size()) == available); // Check that the greeting is what we expect it to be - QCOMPARE(array.constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(array), array.constData()); // Write a logout message diff --git a/tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp b/tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp index 2b0b632..782c2f0 100644 --- a/tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp +++ b/tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp @@ -173,7 +173,7 @@ void tst_QNativeSocketEngine::simpleConnectToIMAP() QVERIFY(socketDevice.read(array.data(), array.size()) == available); // Check that the greeting is what we expect it to be - QCOMPARE(array.constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(array), array.constData()); // Write a logout message QByteArray array2 = "ZZZ LOGOUT\r\n"; diff --git a/tests/auto/qsocks5socketengine/tst_qsocks5socketengine.cpp b/tests/auto/qsocks5socketengine/tst_qsocks5socketengine.cpp index 8f0cbc3..9da7197 100644 --- a/tests/auto/qsocks5socketengine/tst_qsocks5socketengine.cpp +++ b/tests/auto/qsocks5socketengine/tst_qsocks5socketengine.cpp @@ -336,7 +336,7 @@ void tst_QSocks5SocketEngine::simpleConnectToIMAP() QVERIFY(socketDevice.read(array.data(), array.size()) == available); // Check that the greeting is what we expect it to be - QCOMPARE(array.constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(array), array.constData()); // Write a logout message QByteArray array2 = "XXXX LOGOUT\r\n"; @@ -596,7 +596,7 @@ void tst_QSocks5SocketEngine::tcpSocketBlockingTest() // Read greeting QVERIFY(socket.waitForReadyRead(5000)); QString s = socket.readLine(); - QCOMPARE(s.toLatin1().constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(s.toLatin1()), s.toLatin1().constData()); // Write NOOP QCOMPARE((int) socket.write("1 NOOP\r\n", 8), 8); @@ -671,8 +671,8 @@ void tst_QSocks5SocketEngine::tcpSocketNonBlockingTest() // Read greeting QVERIFY(!tcpSocketNonBlocking_data.isEmpty()); - QCOMPARE(tcpSocketNonBlocking_data.at(0).toLatin1().constData(), - QtNetworkSettings::expectedReplyIMAP().constData()); + QByteArray data = tcpSocketNonBlocking_data.at(0).toLatin1(); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(data), data.constData()); tcpSocketNonBlocking_data.clear(); @@ -859,7 +859,7 @@ void tst_QSocks5SocketEngine::passwordAuth() QVERIFY(socketDevice.read(array.data(), array.size()) == available); // Check that the greeting is what we expect it to be - QCOMPARE(array.constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(array), array.constData()); // Write a logout message QByteArray array2 = "XXXX LOGOUT\r\n"; @@ -927,7 +927,7 @@ void tst_QSocks5SocketEngine::passwordAuth2() QVERIFY(socketDevice.read(array.data(), array.size()) == available); // Check that the greeting is what we expect it to be - QCOMPARE(array.constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(array), array.constData()); // Write a logout message QByteArray array2 = "XXXX LOGOUT\r\n"; diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index d6a7a01..3223006 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -502,8 +502,9 @@ void tst_QSslSocket::simpleConnectWithIgnore() if (!socket.canReadLine()) enterLoop(10); - QCOMPARE(socket.readAll(), QtNetworkSettings::expectedReplySSL()); + QByteArray data = socket.readAll(); socket.disconnectFromHost(); + QVERIFY2(QtNetworkSettings::compareReplyIMAPSSL(data), data.constData()); } void tst_QSslSocket::sslErrors_data() diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp index 2dbe5b7..86069cd 100644 --- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp @@ -95,6 +95,7 @@ #include "private/qhostinfo_p.h" #include "../network-settings.h" +#include "../../shared/util.h" Q_DECLARE_METATYPE(QAbstractSocket::SocketError) Q_DECLARE_METATYPE(QAbstractSocket::SocketState) @@ -222,6 +223,8 @@ protected slots: void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *auth); private: + QByteArray expectedReplyIMAP(); + void fetchExpectedReplyIMAP(); QTcpSocket *newSocket() const; QTcpSocket *nonBlockingIMAP_socket; QStringList nonBlockingIMAP_data; @@ -233,6 +236,8 @@ private: bool readingBody; QTime timer; + QByteArray expectedReplyIMAP_cached; + mutable int proxyAuthCalled; bool gotClosedSignal; @@ -658,8 +663,6 @@ void tst_QTcpSocket::nonBlockingIMAP() // Read greeting QVERIFY(!nonBlockingIMAP_data.isEmpty()); -// QCOMPARE(nonBlockingIMAP_data.at(0).toLatin1().constData(), -// "* OK fluke Cyrus IMAP4 v2.2.12 server ready\r\n"); QCOMPARE(nonBlockingIMAP_data.at(0).left(4).toLatin1().constData(), "* OK"); nonBlockingIMAP_data.clear(); @@ -787,6 +790,36 @@ void tst_QTcpSocket::delayedClose() delete socket; } + +//---------------------------------------------------------------------------------- + +QByteArray tst_QTcpSocket::expectedReplyIMAP() +{ + if (expectedReplyIMAP_cached.isEmpty()) { + fetchExpectedReplyIMAP(); + } + + return expectedReplyIMAP_cached; +} + +// Figure out how the current IMAP server responds +void tst_QTcpSocket::fetchExpectedReplyIMAP() +{ + QTcpSocket *socket = newSocket(); + socket->connectToHost(QtNetworkSettings::serverName(), 143); + QVERIFY2(socket->waitForConnected(10000), qPrintable(socket->errorString())); + QVERIFY2(socket->state() == QTcpSocket::ConnectedState, qPrintable(socket->errorString())); + + QTRY_VERIFY(socket->canReadLine()); + + QByteArray greeting = socket->readLine(); + delete socket; + + QVERIFY2(QtNetworkSettings::compareReplyIMAP(greeting), greeting.constData()); + + expectedReplyIMAP_cached = greeting; +} + //---------------------------------------------------------------------------------- void tst_QTcpSocket::partialRead() @@ -797,8 +830,8 @@ void tst_QTcpSocket::partialRead() QVERIFY(socket->state() == QTcpSocket::ConnectedState); char buf[512]; -// QByteArray greeting = "* OK fluke Cyrus IMAP4 v2.2.12 server ready"; - QByteArray greeting = "* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE"; + QByteArray greeting = expectedReplyIMAP(); + QVERIFY(!greeting.isEmpty()); for (int i = 0; i < 10; i += 2) { while (socket->bytesAvailable() < 2) @@ -821,8 +854,8 @@ void tst_QTcpSocket::unget() QVERIFY(socket->state() == QTcpSocket::ConnectedState); char buf[512]; -// QByteArray greeting = "* OK fluke Cyrus IMAP4 v2.2.12 server ready"; - QByteArray greeting = "* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE"; + QByteArray greeting = expectedReplyIMAP(); + QVERIFY(!greeting.isEmpty()); for (int i = 0; i < 10; i += 2) { while (socket->bytesAvailable() < 2) @@ -1244,13 +1277,17 @@ void tst_QTcpSocket::readLine() QVERIFY(socket->waitForReadyRead(10000)); char buffer[1024]; - int expectedReplySize = QtNetworkSettings::expectedReplyIMAP().size(); - Q_ASSERT(expectedReplySize >= 3); - QCOMPARE(socket->readLine(buffer, sizeof(buffer)), qint64(expectedReplySize)); - QCOMPARE((int) buffer[expectedReplySize-2], (int) '\r'); - QCOMPARE((int) buffer[expectedReplySize-1], (int) '\n'); - QCOMPARE((int) buffer[expectedReplySize], (int) '\0'); + qint64 linelen = socket->readLine(buffer, sizeof(buffer)); + QVERIFY(linelen >= 3); + QVERIFY(linelen < 1024); + + QByteArray reply = QByteArray::fromRawData(buffer, linelen); + QCOMPARE((int) buffer[linelen-2], (int) '\r'); + QCOMPARE((int) buffer[linelen-1], (int) '\n'); + QCOMPARE((int) buffer[linelen], (int) '\0'); + + QVERIFY2(QtNetworkSettings::compareReplyIMAP(reply), reply.constData()); QCOMPARE(socket->write("1 NOOP\r\n"), qint64(8)); @@ -1282,13 +1319,11 @@ void tst_QTcpSocket::readLine() void tst_QTcpSocket::readLineString() { QTcpSocket *socket = newSocket(); -// QByteArray expected("* OK fluke Cyrus IMAP4 v2.2.12 server ready\r\n"); - QByteArray expected("* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS LOGINDISABLED] qt-test-server.qt-test-net Cyrus IMAP4 v2.3.11-Mandriva-RPM-2.3.11-6mdv2008.1 server ready\r\n"); socket->connectToHost(QtNetworkSettings::serverName(), 143); QVERIFY(socket->waitForReadyRead(10000)); QByteArray arr = socket->readLine(); - QCOMPARE(arr, QtNetworkSettings::expectedReplyIMAP()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(arr), arr.constData()); delete socket; } @@ -1456,8 +1491,11 @@ void tst_QTcpSocket::atEnd() QVERIFY(!stream.atEnd()); QString greeting = stream.readLine(); QVERIFY(stream.atEnd()); -// QCOMPARE(greeting, QString("220 (vsFTPd 2.0.4)")); - QCOMPARE(greeting, QString("220 (vsFTPd 2.0.5)")); + + // Test server must use some vsFTPd 2.x.x version + QVERIFY2(greeting.length() == sizeof("220 (vsFTPd 2.x.x)")-1, qPrintable(greeting)); + QVERIFY2(greeting.startsWith("220 (vsFTPd 2."), qPrintable(greeting)); + QVERIFY2(greeting.endsWith(")"), qPrintable(greeting)); delete socket; } @@ -1522,7 +1560,8 @@ void tst_QTcpSocket::socketInAThread() TestThread thread; thread.start(); QVERIFY(thread.wait(15000)); - QCOMPARE(thread.data(), QtNetworkSettings::expectedReplyFtp()); + QByteArray data = thread.data(); + QVERIFY2(QtNetworkSettings::compareReplyFtp(data), data.constData()); } } @@ -1542,9 +1581,13 @@ void tst_QTcpSocket::socketsInThreads() QVERIFY(thread3.wait(15000)); QVERIFY(thread1.wait(15000)); - QCOMPARE(thread1.data(),QtNetworkSettings::expectedReplyFtp()); - QCOMPARE(thread2.data(),QtNetworkSettings::expectedReplyFtp()); - QCOMPARE(thread3.data(),QtNetworkSettings::expectedReplyFtp()); + QByteArray data1 = thread1.data(); + QByteArray data2 = thread2.data(); + QByteArray data3 = thread3.data(); + + QVERIFY2(QtNetworkSettings::compareReplyFtp(data1), data1.constData()); + QVERIFY2(QtNetworkSettings::compareReplyFtp(data2), data2.constData()); + QVERIFY2(QtNetworkSettings::compareReplyFtp(data3), data3.constData()); } } @@ -1846,7 +1889,7 @@ void tst_QTcpSocket::readyReadSignalsAfterWaitForReadyRead() QCOMPARE(readyReadSpy.count(), 1); QString s = socket->readLine(); - QCOMPARE(s.toLatin1().constData(), QtNetworkSettings::expectedReplyIMAP().constData()); + QVERIFY2(QtNetworkSettings::compareReplyIMAP(s.toLatin1()), s.toLatin1().constData()); QCOMPARE(socket->bytesAvailable(), qint64(0)); QCoreApplication::instance()->processEvents(); -- cgit v0.12 From 82ff3f484c7ec49e60b7fddf23794937974a6768 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Mon, 10 Jan 2011 12:13:00 +1000 Subject: Fix loaded() signal to be emitted only once Task-number: QTBUG-16319 Reviewed-by: Martin Jones --- .../graphicsitems/qdeclarativeloader.cpp | 60 +++++++------- .../graphicsitems/qdeclarativeloader_p_p.h | 2 + .../qdeclarativeloader/tst_qdeclarativeloader.cpp | 94 +++++++++++++--------- 3 files changed, 89 insertions(+), 67 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp index 1119b92..22ec019 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader.cpp +++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp @@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE QDeclarativeLoaderPrivate::QDeclarativeLoaderPrivate() - : item(0), component(0), ownComponent(false) + : item(0), component(0), ownComponent(false), isComponentComplete(false) { } @@ -262,6 +262,7 @@ void QDeclarativeLoader::setSource(const QUrl &url) d->clear(); d->source = url; + if (d->source.isEmpty()) { emit sourceChanged(); emit statusChanged(); @@ -272,18 +273,9 @@ void QDeclarativeLoader::setSource(const QUrl &url) d->component = new QDeclarativeComponent(qmlEngine(this), d->source, this); d->ownComponent = true; - if (!d->component->isLoading()) { - d->_q_sourceLoaded(); - } else { - connect(d->component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), - this, SLOT(_q_sourceLoaded())); - connect(d->component, SIGNAL(progressChanged(qreal)), - this, SIGNAL(progressChanged())); - emit statusChanged(); - emit progressChanged(); - emit sourceChanged(); - emit itemChanged(); - } + + if (d->isComponentComplete) + d->load(); } /*! @@ -324,6 +316,7 @@ void QDeclarativeLoader::setSourceComponent(QDeclarativeComponent *comp) d->component = comp; d->ownComponent = false; + if (!d->component) { emit sourceChanged(); emit statusChanged(); @@ -332,18 +325,8 @@ void QDeclarativeLoader::setSourceComponent(QDeclarativeComponent *comp) return; } - if (!d->component->isLoading()) { - d->_q_sourceLoaded(); - } else { - connect(d->component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), - this, SLOT(_q_sourceLoaded())); - connect(d->component, SIGNAL(progressChanged(qreal)), - this, SIGNAL(progressChanged())); - emit progressChanged(); - emit sourceChanged(); - emit statusChanged(); - emit itemChanged(); - } + if (d->isComponentComplete) + d->load(); } void QDeclarativeLoader::resetSourceComponent() @@ -351,6 +334,27 @@ void QDeclarativeLoader::resetSourceComponent() setSourceComponent(0); } +void QDeclarativeLoaderPrivate::load() +{ + Q_Q(QDeclarativeLoader); + + if (!isComponentComplete || !component) + return; + + if (!component->isLoading()) { + _q_sourceLoaded(); + } else { + QObject::connect(component, SIGNAL(statusChanged(QDeclarativeComponent::Status)), + q, SLOT(_q_sourceLoaded())); + QObject::connect(component, SIGNAL(progressChanged(qreal)), + q, SIGNAL(progressChanged())); + emit q->statusChanged(); + emit q->progressChanged(); + emit q->sourceChanged(); + emit q->itemChanged(); + } +} + void QDeclarativeLoaderPrivate::_q_sourceLoaded() { Q_Q(QDeclarativeLoader); @@ -465,9 +469,11 @@ QDeclarativeLoader::Status QDeclarativeLoader::status() const void QDeclarativeLoader::componentComplete() { + Q_D(QDeclarativeLoader); + QDeclarativeItem::componentComplete(); - if (status() == Ready) - emit loaded(); + d->isComponentComplete = true; + d->load(); } diff --git a/src/declarative/graphicsitems/qdeclarativeloader_p_p.h b/src/declarative/graphicsitems/qdeclarativeloader_p_p.h index 0d4c4d0..bc65781 100644 --- a/src/declarative/graphicsitems/qdeclarativeloader_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeloader_p_p.h @@ -72,11 +72,13 @@ public: void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry); void clear(); void initResize(); + void load(); QUrl source; QGraphicsObject *item; QDeclarativeComponent *component; bool ownComponent : 1; + bool isComponentComplete : 1; void _q_sourceLoaded(); void _q_updateSize(bool loaderGeometryChanged = true); diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp index 1bde55b..f6244e4 100644 --- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp +++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp @@ -69,9 +69,8 @@ public: tst_QDeclarativeLoader(); private slots: - void url(); - void invalidUrl(); - void component(); + void sourceOrComponent(); + void sourceOrComponent_data(); void clear(); void urlToComponent(); void componentToUrl(); @@ -100,56 +99,71 @@ tst_QDeclarativeLoader::tst_QDeclarativeLoader() { } -void tst_QDeclarativeLoader::url() +void tst_QDeclarativeLoader::sourceOrComponent() { + QFETCH(QString, sourceDefinition); + QFETCH(QUrl, sourceUrl); + QFETCH(QString, errorString); + + bool error = !errorString.isEmpty(); + if (error) + QTest::ignoreMessage(QtWarningMsg, errorString.toUtf8().constData()); + QDeclarativeComponent component(&engine); - component.setData(QByteArray("import QtQuick 1.0\nLoader { property int did_load: 0; onLoaded: did_load=123; source: \"Rect120x60.qml\" }"), TEST_FILE("")); + component.setData(QByteArray( + "import QtQuick 1.0\n" + "Loader {\n" + " property int onItemChangedCount: 0\n" + " property int onSourceChangedCount: 0\n" + " property int onStatusChangedCount: 0\n" + " property int onProgressChangedCount: 0\n" + " property int onLoadedCount: 0\n") + + sourceDefinition.toUtf8() + + QByteArray( + " onItemChanged: onItemChangedCount += 1\n" + " onSourceChanged: onSourceChangedCount += 1\n" + " onStatusChanged: onStatusChangedCount += 1\n" + " onProgressChanged: onProgressChangedCount += 1\n" + " onLoaded: onLoadedCount += 1\n" + "}") + , TEST_FILE("")); + QDeclarativeLoader *loader = qobject_cast(component.create()); QVERIFY(loader != 0); - QVERIFY(loader->item()); - QVERIFY(loader->source() == QUrl::fromLocalFile(SRCDIR "/data/Rect120x60.qml")); + QCOMPARE(loader->item() == 0, error); + QCOMPARE(loader->source(), sourceUrl); QCOMPARE(loader->progress(), 1.0); - QCOMPARE(loader->status(), QDeclarativeLoader::Ready); - QCOMPARE(loader->property("did_load").toInt(), 123); - QCOMPARE(static_cast(loader)->children().count(), 1); - delete loader; -} + QCOMPARE(loader->status(), error ? QDeclarativeLoader::Error : QDeclarativeLoader::Ready); + QCOMPARE(static_cast(loader)->children().count(), error ? 0: 1); -void tst_QDeclarativeLoader::component() -{ - QDeclarativeComponent component(&engine, TEST_FILE("/SetSourceComponent.qml")); - QDeclarativeItem *item = qobject_cast(component.create()); - QVERIFY(item); + if (!error) { + QDeclarativeComponent *c = qobject_cast(loader->QGraphicsObject::children().at(0)); + QVERIFY(c); + QCOMPARE(loader->sourceComponent(), c); + } - QDeclarativeLoader *loader = qobject_cast(item->QGraphicsObject::children().at(1)); - QVERIFY(loader); - QVERIFY(loader->item()); - QCOMPARE(loader->progress(), 1.0); - QCOMPARE(loader->status(), QDeclarativeLoader::Ready); - QCOMPARE(static_cast(loader)->children().count(), 1); + QCOMPARE(loader->property("onSourceChangedCount").toInt(), 1); + QCOMPARE(loader->property("onStatusChangedCount").toInt(), 1); + QCOMPARE(loader->property("onProgressChangedCount").toInt(), 1); - QDeclarativeComponent *c = qobject_cast(item->QGraphicsObject::children().at(0)); - QVERIFY(c); - QCOMPARE(loader->sourceComponent(), c); + QCOMPARE(loader->property("onItemChangedCount").toInt(), error ? 0 : 1); + QCOMPARE(loader->property("onLoadedCount").toInt(), error ? 0 : 1); - delete item; + delete loader; } -void tst_QDeclarativeLoader::invalidUrl() +void tst_QDeclarativeLoader::sourceOrComponent_data() { - QTest::ignoreMessage(QtWarningMsg, QString(QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString() + ": File not found").toUtf8().constData()); + QTest::addColumn("sourceDefinition"); + QTest::addColumn("sourceUrl"); + QTest::addColumn("errorString"); - QDeclarativeComponent component(&engine); - component.setData(QByteArray("import QtQuick 1.0\nLoader { source: \"IDontExist.qml\" }"), TEST_FILE("")); - QDeclarativeLoader *loader = qobject_cast(component.create()); - QVERIFY(loader != 0); - QVERIFY(loader->item() == 0); - QCOMPARE(loader->progress(), 1.0); - QCOMPARE(loader->status(), QDeclarativeLoader::Error); - QCOMPARE(static_cast(loader)->children().count(), 0); + QTest::newRow("source") << "source: 'Rect120x60.qml'\n" << QUrl::fromLocalFile(SRCDIR "/data/Rect120x60.qml") << ""; + QTest::newRow("sourceComponent") << "Component { id: comp; Rectangle { width: 100; height: 50 } }\n sourceComponent: comp\n" << QUrl() << ""; - delete loader; + QTest::newRow("invalid source") << "source: 'IDontExist.qml'\n" << QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml") + << QString(QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString() + ": File not found"); } void tst_QDeclarativeLoader::clear() @@ -446,7 +460,7 @@ void tst_QDeclarativeLoader::networkRequestUrl() server.serveDirectory(SRCDIR "/data"); QDeclarativeComponent component(&engine); - component.setData(QByteArray("import QtQuick 1.0\nLoader { property int did_load : 0; source: \"http://127.0.0.1:14450/Rect120x60.qml\"; onLoaded: did_load=123 }"), QUrl::fromLocalFile(SRCDIR "/dummy.qml")); + component.setData(QByteArray("import QtQuick 1.0\nLoader { property int signalCount : 0; source: \"http://127.0.0.1:14450/Rect120x60.qml\"; onLoaded: signalCount += 1 }"), QUrl::fromLocalFile(SRCDIR "/dummy.qml")); if (component.isError()) qDebug() << component.errors(); QDeclarativeLoader *loader = qobject_cast(component.create()); @@ -456,7 +470,7 @@ void tst_QDeclarativeLoader::networkRequestUrl() QVERIFY(loader->item()); QCOMPARE(loader->progress(), 1.0); - QCOMPARE(loader->property("did_load").toInt(), 123); + QCOMPARE(loader->property("signalCount").toInt(), 1); QCOMPARE(static_cast(loader)->children().count(), 1); delete loader; -- cgit v0.12 From 279f701c7fd988a5dec4abca8e9da01dc629672b Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Mon, 10 Jan 2011 14:32:41 +1000 Subject: Update pathview test This updates the tests to match the correct behaviour as of 1ba3e41f09ea719249286fede5d3fe96621ccb61 Task-number: QTBUG-16357 --- .../data/test-pathview-2.0.png | Bin 1114 -> 1114 bytes .../data/test-pathview-2.1.png | Bin 1119 -> 1119 bytes .../data/test-pathview-2.2.png | Bin 1102 -> 1102 bytes .../data/test-pathview-2.3.png | Bin 1092 -> 1092 bytes .../data/test-pathview-2.4.png | Bin 1143 -> 1140 bytes .../data/test-pathview-2.5.png | Bin 1143 -> 1140 bytes .../qdeclarativepathview/data/test-pathview-2.qml | 394 ++++++++++----------- .../qdeclarativepathview/data/test-pathview.0.png | Bin 1169 -> 1169 bytes .../qdeclarativepathview/data/test-pathview.1.png | Bin 1172 -> 1172 bytes .../qdeclarativepathview/data/test-pathview.2.png | Bin 1201 -> 1201 bytes .../qdeclarativepathview/data/test-pathview.3.png | Bin 1164 -> 1164 bytes .../qdeclarativepathview/data/test-pathview.4.png | Bin 1226 -> 1227 bytes .../qdeclarativepathview/data/test-pathview.5.png | Bin 1192 -> 1184 bytes .../qdeclarativepathview/data/test-pathview.6.png | Bin 1188 -> 1188 bytes .../qdeclarativepathview/data/test-pathview.qml | 242 ++++++------- 15 files changed, 318 insertions(+), 318 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png index 347e773..1b87edb 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png index 370ca80..4fc12d6 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png index 97e3906..d761a0c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png index 5fa3c67..e22464f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png index ce11c09..14f07be 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png index d155742..ba1ad34 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml index 304d5c7..9eaff18 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml @@ -10,171 +10,171 @@ VisualTest { } Frame { msec: 32 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 48 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 64 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 80 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 96 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 112 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 128 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 144 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 160 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 176 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 192 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 208 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 224 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 240 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 256 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 272 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 288 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 304 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 320 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 336 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 352 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 368 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 384 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 400 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 416 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 432 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 448 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 464 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 480 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 496 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 512 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 528 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 544 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 560 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 576 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 592 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 608 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 624 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 640 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 656 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 672 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 688 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Mouse { type: 2 @@ -186,11 +186,11 @@ VisualTest { } Frame { msec: 704 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Frame { msec: 720 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Mouse { type: 5 @@ -202,7 +202,7 @@ VisualTest { } Frame { msec: 736 - hash: "fe6d7d28dbeef3cfbac3ac3c3e909216" + hash: "cc72b488dcdfa7c251782cbcae7ab1d5" } Mouse { type: 5 @@ -222,7 +222,7 @@ VisualTest { } Frame { msec: 752 - hash: "d2dda5bec262721d653e88ec3eaeca57" + hash: "ae9028c15de8ba4b02c733212d521c29" } Mouse { type: 5 @@ -254,7 +254,7 @@ VisualTest { } Frame { msec: 784 - hash: "0a178235529d721529e8dc3b439a64c9" + hash: "6a6c5551e3a5a08f5505eb0f61d9df36" } Mouse { type: 5 @@ -294,11 +294,11 @@ VisualTest { } Frame { msec: 848 - hash: "1ba9bc8c2b941fd0ec82f211eb559682" + hash: "a1e475643d0871bb7d63f8cf2e0b780d" } Frame { msec: 864 - hash: "ee8680df3c58a48f3fff4a8fc221e38c" + hash: "ba429e0c1a7f1624973813ae8be6b090" } Frame { msec: 880 @@ -310,11 +310,11 @@ VisualTest { } Frame { msec: 912 - hash: "f2400819feb116ae3b327284bbb292ff" + hash: "1910f67eb9180a866924fa8567afbdf5" } Frame { msec: 928 - hash: "5d9a3458cb59ede36e7b51bac869785a" + hash: "68c60f1bc67a1d1117be7ed305b61ae1" } Frame { msec: 944 @@ -330,7 +330,7 @@ VisualTest { } Frame { msec: 992 - hash: "493e3c7b0de4a7b4b46678fe4ce9a763" + hash: "2bcde5c7b2e1aac1439b379ed729f6e1" } Frame { msec: 1008 @@ -342,11 +342,11 @@ VisualTest { } Frame { msec: 1040 - hash: "4b28ebf737b8c4228771122d844b8166" + hash: "e615b8648d5449535b1f47ab770db423" } Frame { msec: 1056 - hash: "b04155316770a1265e5dc431e1b9a9a1" + hash: "877e6357cc9a183a0288aa1551e26179" } Frame { msec: 1072 @@ -354,7 +354,7 @@ VisualTest { } Frame { msec: 1088 - hash: "b3e7cbc83c65ec61c768757798b17c58" + hash: "d15e299030bc08097c3b9b4bbaace558" } Frame { msec: 1104 @@ -362,7 +362,7 @@ VisualTest { } Frame { msec: 1120 - hash: "77c3bbb94471cfbfd23cc3914d796dfc" + hash: "937c7e346463c58c909795fa382761d9" } Frame { msec: 1136 @@ -374,7 +374,7 @@ VisualTest { } Frame { msec: 1168 - hash: "bf9c02945fdee4b06353f8f7f4fca2a3" + hash: "5872891af6953f07a635698581695c58" } Frame { msec: 1184 @@ -394,7 +394,7 @@ VisualTest { } Frame { msec: 1248 - hash: "b6bdf2f21c4137d4b5f25e0fe728bba5" + hash: "d8de3485eb7fb1f3675a25d7f807d08e" } Frame { msec: 1264 @@ -422,7 +422,7 @@ VisualTest { } Frame { msec: 1360 - hash: "44cd80041a1965c8c60fdffd9ae19395" + hash: "ee9ac101215923305fa75ab4c99c8f36" } Frame { msec: 1376 @@ -434,11 +434,11 @@ VisualTest { } Frame { msec: 1408 - hash: "8da4613759e9bcb926a0c84556213eb5" + hash: "a9012dc82230c791bda1a7e6b7741896" } Frame { msec: 1424 - hash: "1085fcc81f0aed8508817839ca748359" + hash: "78774bdff6cef175dcb7a190e5f1bcab" } Frame { msec: 1440 @@ -454,11 +454,11 @@ VisualTest { } Frame { msec: 1488 - hash: "832c857f2e05f2f82308cbf91f7bf401" + hash: "d74aa07d0b66a5f2be42b9868d3cd8f2" } Frame { msec: 1504 - hash: "ca3e50cd337a07ef07f063be28fa6dc2" + hash: "ea4c8f35367ee6f7631aa6e6d8aead03" } Frame { msec: 1520 @@ -470,11 +470,11 @@ VisualTest { } Frame { msec: 1552 - hash: "bfa62672ee7fcd9c3a75b63198a4c2bf" + hash: "5361d1f1100c4815dca1b49046b44593" } Frame { msec: 1568 - hash: "cdaafe7f622c18c2409ac539649de1cd" + hash: "5cd97dc8a237fa92373eb50de8a3bd7b" } Frame { msec: 1584 @@ -482,15 +482,15 @@ VisualTest { } Frame { msec: 1600 - hash: "925c55a8564f2318f9de4bd406cb5b13" + hash: "7b3cd8f583e6045d2e923a34abfc3aeb" } Frame { msec: 1616 - hash: "466208a8f6ecf45393be01a6dd7f2b0f" + hash: "2146e67d469f1eb2071a1f04d8e9fc4e" } Frame { msec: 1632 - hash: "35cff8c0f4b503ba4948966079484feb" + hash: "26839de649101c7b3bc6d9b1131325e6" } Frame { msec: 1648 @@ -498,7 +498,7 @@ VisualTest { } Frame { msec: 1664 - hash: "b699165e354bcadfd0d914d9ecb3d2aa" + hash: "30bc1d78a0cbd29813ad9504b1f0864b" } Frame { msec: 1680 @@ -518,7 +518,7 @@ VisualTest { } Frame { msec: 1744 - hash: "a9dda9ebaa97133c671917473721272c" + hash: "864a4d26e719dd9fc0e3ce5c28d7726a" } Mouse { type: 2 @@ -638,7 +638,7 @@ VisualTest { } Frame { msec: 1872 - hash: "d82969ef0f4baf3c51e112e049cb1334" + hash: "57d5b71d5ff16f986c7df8d8405822b6" } Mouse { type: 5 @@ -650,7 +650,7 @@ VisualTest { } Frame { msec: 1888 - hash: "e746a3eb8527036b09afb9cdd3d15648" + hash: "6fd4123cfc8998cfc7716f3d928fb03f" } Mouse { type: 5 @@ -738,7 +738,7 @@ VisualTest { } Frame { msec: 1984 - hash: "f500232133ec07a3b833b06425379484" + hash: "d823492036431e23d8b6876baccec263" } Mouse { type: 5 @@ -758,7 +758,7 @@ VisualTest { } Frame { msec: 2000 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Mouse { type: 5 @@ -770,7 +770,7 @@ VisualTest { } Frame { msec: 2016 - hash: "1754875ee6a5712ffb8ce1bbae6d4ed1" + hash: "f87df2e12dfe2ebb5b093e21970885b4" } Mouse { type: 5 @@ -794,7 +794,7 @@ VisualTest { } Frame { msec: 2048 - hash: "ab3a64b41c67a0b8a6c0830c0e0cb797" + hash: "ba9d1850c5c43c9aec5660601ba21d2f" } Mouse { type: 5 @@ -806,7 +806,7 @@ VisualTest { } Frame { msec: 2064 - hash: "d05f721f1d7d23d6e0cc67993bf1fa8f" + hash: "8eb1f2c8c02c2acf4262e05000045649" } Mouse { type: 5 @@ -838,7 +838,7 @@ VisualTest { } Frame { msec: 2096 - hash: "f0ae80ed5965d7531d6a653c80eed444" + hash: "c55a189b05d87e8937d272f32bdc2481" } Mouse { type: 5 @@ -858,7 +858,7 @@ VisualTest { } Frame { msec: 2112 - hash: "1419fe55cc28ce9690846d4c03275fe7" + hash: "bb1515904f9b299402d1141445154430" } Mouse { type: 5 @@ -870,7 +870,7 @@ VisualTest { } Frame { msec: 2128 - hash: "2e22df53697a599b0e44fb2a3986dcd0" + hash: "93363142c5a05c52c21e771b2bce71f6" } Mouse { type: 5 @@ -946,7 +946,7 @@ VisualTest { } Frame { msec: 2304 - hash: "1419fe55cc28ce9690846d4c03275fe7" + hash: "bb1515904f9b299402d1141445154430" } Mouse { type: 5 @@ -978,7 +978,7 @@ VisualTest { } Frame { msec: 2336 - hash: "ab3a64b41c67a0b8a6c0830c0e0cb797" + hash: "ba9d1850c5c43c9aec5660601ba21d2f" } Mouse { type: 5 @@ -1002,31 +1002,31 @@ VisualTest { } Frame { msec: 2368 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Frame { msec: 2384 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Frame { msec: 2400 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Frame { msec: 2416 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Frame { msec: 2432 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Frame { msec: 2448 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Frame { msec: 2464 - hash: "0a0cd0433e206dfc923ec0d3617e04a1" + hash: "11d77567aeff20d8f62f2e4100603de3" } Mouse { type: 5 @@ -1070,7 +1070,7 @@ VisualTest { } Frame { msec: 2512 - hash: "360a47795f7f9389f82f2f55fa1fe83f" + hash: "2234e44042daf277bd5307635155117f" } Mouse { type: 5 @@ -1158,7 +1158,7 @@ VisualTest { } Frame { msec: 2608 - hash: "44a30531642ada65c052afe30874d7ba" + hash: "398e4a0ebc812b779b38c4541d33424c" } Frame { msec: 2624 @@ -1166,7 +1166,7 @@ VisualTest { } Frame { msec: 2640 - hash: "645e43948279d528020070125b71c33b" + hash: "0d09a6a0cce6d22c14bc41b8465e8ba0" } Frame { msec: 2656 @@ -1174,7 +1174,7 @@ VisualTest { } Frame { msec: 2672 - hash: "fa3b12e9869bf4254c8cdf6e5b10bb2d" + hash: "5329441c12424e5aa69ee0c5cff5926d" } Frame { msec: 2688 @@ -1182,11 +1182,11 @@ VisualTest { } Frame { msec: 2704 - hash: "79d70563c7e139d9f9785565219133c7" + hash: "aa8b21cdea3d0ae6a2e59a1b318da842" } Frame { msec: 2720 - hash: "0dc70772aa50445c1cb7dbd8ee0092b0" + hash: "dd142875acafdc8591a29bcd9f871dab" } Frame { msec: 2736 @@ -1198,7 +1198,7 @@ VisualTest { } Frame { msec: 2768 - hash: "e3972b3244e4a98c9ee4df2d4b623c12" + hash: "36217f04f3b1b70a9cf3fa4881b2def7" } Frame { msec: 2784 @@ -1210,11 +1210,11 @@ VisualTest { } Frame { msec: 2816 - hash: "47d757dab5c72cad08cb8026631d67e6" + hash: "7313fc37802c462ddd324a13c8fcdc9c" } Frame { msec: 2832 - hash: "8522a3b6202b303a9e65a9e136423e27" + hash: "961e84cbb3591cebdb5b83c2aa83887c" } Frame { msec: 2848 @@ -1226,7 +1226,7 @@ VisualTest { } Frame { msec: 2880 - hash: "579688ff6ec910570c0c0c60fdf44cf6" + hash: "943dfcee3f04c77fba2cec289a288c4b" } Frame { msec: 2896 @@ -1234,7 +1234,7 @@ VisualTest { } Frame { msec: 2912 - hash: "7ab8cf0d0b650e8f994a9beed8be29fb" + hash: "36be9a0d4376ece0b279a118a3fab364" } Frame { msec: 2928 @@ -1250,11 +1250,11 @@ VisualTest { } Frame { msec: 2976 - hash: "f0267f59e247e24e4cf9c56f8931112b" + hash: "b17faafb59a9d182faf00495736a7fac" } Frame { msec: 2992 - hash: "ddbc73e2df4da11d5122539a00c126de" + hash: "549eb98193f0e81aee716239f872a21c" } Frame { msec: 3008 @@ -1286,7 +1286,7 @@ VisualTest { } Frame { msec: 3120 - hash: "2ad733363d239d9a3ea1c31427a3b3fe" + hash: "9506c95e1febf3d781e6b1dbbaf640d3" } Frame { msec: 3136 @@ -1294,7 +1294,7 @@ VisualTest { } Frame { msec: 3152 - hash: "53b05d8be52a74c3a24b88779d4927bf" + hash: "adef134dc735305b673c6fa47a3d1a34" } Frame { msec: 3168 @@ -1310,11 +1310,11 @@ VisualTest { } Frame { msec: 3216 - hash: "8a7ab6dc549b247f3b897e098d784dd8" + hash: "036d247dd83e0fbfe4f65cbd79e9ab57" } Frame { msec: 3232 - hash: "0a3144254f66a6b005b95a026496cd32" + hash: "959270d536187e6b669263a57b260e78" } Frame { msec: 3248 @@ -1322,7 +1322,7 @@ VisualTest { } Frame { msec: 3264 - hash: "c17922ca04f5ce9916e2907a6c28bf8b" + hash: "42a9b43e2c66a5ef32c8b6564235c623" } Frame { msec: 3280 @@ -1330,11 +1330,11 @@ VisualTest { } Frame { msec: 3296 - hash: "1f41a314699151771d7d1ca672aaba8f" + hash: "cf5c7868e399fadac1642f47a0b4dbd2" } Frame { msec: 3312 - hash: "de94c2ad2e74036d975e8402dd8b06e9" + hash: "9c689254f44a6ced1c4962400613d4da" } Frame { msec: 3328 @@ -1358,7 +1358,7 @@ VisualTest { } Frame { msec: 3408 - hash: "2f3e7040a4966e56858312f6534e9e77" + hash: "f65c57211997139ae1473951333d7b35" } Frame { msec: 3424 @@ -1370,7 +1370,7 @@ VisualTest { } Frame { msec: 3456 - hash: "6639a15d4d23540ccf63c9bea0e1689e" + hash: "191115950915abcb338c3f4c17595840" } Frame { msec: 3472 @@ -1402,7 +1402,7 @@ VisualTest { } Frame { msec: 3584 - hash: "4b2706d1215f2b5b08ac87e40ba8c21b" + hash: "e9de53c430f9de55146ac6606d55d427" } Frame { msec: 3600 @@ -1418,19 +1418,19 @@ VisualTest { } Frame { msec: 3648 - hash: "14bdec5663d1a81fa617d3b81e19f8b4" + hash: "a44936319089e2379de34edf58b453c1" } Frame { msec: 3664 - hash: "3430047eca214a217aca0bd71814f4db" + hash: "c894ceaf318dd1afe29dcfe171aadf0f" } Frame { msec: 3680 - hash: "974c431fe7030990389c7fc719655cfd" + hash: "deea3a520f3fe43bf92f05a25f791458" } Frame { msec: 3696 - hash: "d38f3153b3cf39a278dc6948ff9ef71d" + hash: "176381c4acfacecd0d203b7ad8fbd7d4" } Frame { msec: 3712 @@ -1438,35 +1438,35 @@ VisualTest { } Frame { msec: 3728 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3744 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3760 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3776 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3792 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3808 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3824 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3840 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Frame { msec: 3856 @@ -1474,7 +1474,7 @@ VisualTest { } Frame { msec: 3872 - hash: "bf2de49dc940043a955a075dcda1b52b" + hash: "21f2e0c3ba2142d1baae9406858f1cea" } Mouse { type: 2 @@ -1486,11 +1486,11 @@ VisualTest { } Frame { msec: 3888 - hash: "cf72e9ae81dcf833f7a48ffa348b8966" + hash: "e66b75e5644018aecd321e498de08ca1" } Frame { msec: 3904 - hash: "cf72e9ae81dcf833f7a48ffa348b8966" + hash: "e66b75e5644018aecd321e498de08ca1" } Mouse { type: 5 @@ -1502,7 +1502,7 @@ VisualTest { } Frame { msec: 3920 - hash: "cf72e9ae81dcf833f7a48ffa348b8966" + hash: "eb346d68bd5b51a31ee2f5d807970d96" } Mouse { type: 5 @@ -1522,7 +1522,7 @@ VisualTest { } Frame { msec: 3936 - hash: "1cea11ee435caa8515797ee5c4fb79cb" + hash: "ffd30479d99b19926072fa94cdec6195" } Mouse { type: 5 @@ -1534,7 +1534,7 @@ VisualTest { } Frame { msec: 3952 - hash: "0da1743b066a73dd19aff6b60ef76830" + hash: "207efe4cbcebaedca1d2fc6726d46543" } Mouse { type: 5 @@ -1554,7 +1554,7 @@ VisualTest { } Frame { msec: 3968 - hash: "ddace1df123421675bc9153c4017cdd0" + hash: "f011a043293362d5affcbcdfe3c93131" } Mouse { type: 5 @@ -1566,7 +1566,7 @@ VisualTest { } Frame { msec: 3984 - hash: "0c57fe8eef4e41e326dbc82f7b6ae87b" + hash: "934ed8956abae51fd19352f23ef9a16a" } Mouse { type: 5 @@ -1586,151 +1586,151 @@ VisualTest { } Frame { msec: 4000 - hash: "53968b4b57c09fe0b47e720031c1eed7" + hash: "0daf00b242485319f5c9050b9cdb6775" } Frame { msec: 4016 - hash: "2ab593b498892bf8bacef875e524284f" + hash: "8111f56ae5cfcf1d6c934e134602a8dc" } Frame { msec: 4032 - hash: "da77708f525ab9d1d3f760595a1f9efa" + hash: "6f3f6c2ae3c36401d1d96a37bbd62c52" } Frame { msec: 4048 - hash: "ce73ecb012139dda8e21cb0dce95582a" + hash: "11cde9b9369addaa5ff140e3a0bbf9ac" } Frame { msec: 4064 - hash: "086754b023addbbecf3b361382133279" + hash: "fefd7d44805c330c606fcc23b691832e" } Frame { msec: 4080 - hash: "adcb9881f246993ff35af24f8750ea2f" + hash: "b9eb8f8a78485deafc04a9bac39e5c31" } Frame { msec: 4096 - hash: "974b423c99316c9a5b2e097bb3a42fcc" + hash: "f0be22ea55a6a9621718cb5e1b55e6f7" } Frame { msec: 4112 - hash: "e37263abe79b203cfc4306aa7e5c4853" + hash: "cb0d62b8c16406a0ff35feea3ff074b9" } Frame { msec: 4128 - hash: "0136eaf2704a5af80f8ba26bbb7f51da" + hash: "15bf986b1e4072ce48ef40651e11a93a" } Frame { msec: 4144 - hash: "55fe0338e24aa91790f2cd466464acae" + hash: "d29f81f0c8468ea045f1c21adca8c0e6" } Frame { msec: 4160 - hash: "9fa5eaebd34e2af136a2894f360301a5" + hash: "577f27fd6212bbb7394b64b0872d7e6e" } Frame { msec: 4176 - hash: "c48822e620b788947d8a5ec850d6313b" + hash: "f26c83a4ede9e04ceabf276fd2eeaa4d" } Frame { msec: 4192 - hash: "ec763070f81e115a5e471923aa539683" + hash: "34f449f3c29c4b0bb0972e8d3510452c" } Frame { msec: 4208 - hash: "2aa84ad9ef88313a4c63e91bba959920" + hash: "5cf950b9f0bb8c851a2865718bd3e6ec" } Frame { msec: 4224 - hash: "14cf7ba825d704c4acc72670fd868d6c" + hash: "202b5c9cd1717dfef0d1f667ca115571" } Frame { msec: 4240 - hash: "987bf945cd9c1cfe5bbb17442daa4f26" + hash: "5d703db8af0eeba0327177f79b0fd85b" } Frame { msec: 4256 - hash: "5d4d80565bf4f522c79044d0df55a1fd" + hash: "69e4fdbaba2ad4983edcbaad0ccfa905" } Frame { msec: 4272 - hash: "d0a5ec7ff2c5b64c6691888412d0cc6d" + hash: "c91389bd9e9c7fce2a8e5ffca851cf89" } Frame { msec: 4288 - hash: "93750528b6f27df22423eb957a07b55f" + hash: "5e2b94dda5af845a368032cc85e3167f" } Frame { msec: 4304 - hash: "65fd0474f918bac61b46fde8ed8e3b59" + hash: "5946e2bd9a32130fed9612d6152b7ddd" } Frame { msec: 4320 - hash: "cd15f6499863ef84f0ad3b2ff48d6406" + hash: "74f13b9111005e610028ea252132c1fc" } Frame { msec: 4336 - hash: "65101124208b062de9718b34fb43425b" + hash: "ba2a587b26fd3d92a368e3b63513e145" } Frame { msec: 4352 - hash: "cb42d683dc5e4020891601afb0a77947" + hash: "2047ecb0be3173846b7c09b7054bad07" } Frame { msec: 4368 - hash: "88fdddbf2f766ffff7e77c7612d9cfee" + hash: "db6993dfaad694f812130c112e9c78b6" } Frame { msec: 4384 - hash: "776c63f1bbc40624d7fedd6141fbdd97" + hash: "aea54cad7368b8511412f4d9fd1e8b07" } Frame { msec: 4400 - hash: "24f11b5abb33d8f180a56fca6f15ef45" + hash: "431d140c8e9a61f6c1fe7a044900b4b7" } Frame { msec: 4416 - hash: "71d9ab083d15b57336ee278793815713" + hash: "ed80bccd69ebd4326b01fdf46b56dd52" } Frame { msec: 4432 - hash: "b48e64cb1b8b39e7001af4e7c7d22098" + hash: "edd82b44bd2813f2bf20bbf8be4ad10d" } Frame { msec: 4448 - hash: "587ef2440cd021038cc902a3b1839ff4" + hash: "527b3fb45d585f70ef2ef2e78d2fff05" } Frame { msec: 4464 - hash: "99e0485247c907c5b6e0f8d5dc7b8977" + hash: "00b68c12c6cef0b523eeef8c7556a26c" } Frame { msec: 4480 - hash: "3b2496d61eefaa413f0688afed150749" + hash: "37c62b1c2c3d70220b1d7b28a57de0a5" } Frame { msec: 4496 - hash: "0144d27095182c58e50ae1ccdbfaa05e" + hash: "e73843907eb7ee18c59b5fe98022f542" } Frame { msec: 4512 - hash: "06237be375826d2434dc564dd2eaf165" + hash: "139d84bfdefd825a89ddd4150a72fa9f" } Frame { msec: 4528 - hash: "7235d512503b134ac267b7128163eea2" + hash: "779690a2e5291b7d64ceed193bf8e572" } Frame { msec: 4544 - hash: "5d5f7ff9bd0a4aa316b764bec8524fe0" + hash: "4ffd9beb48bd769d9e3b8ad3aedff08b" } Frame { msec: 4560 - hash: "9be01e649140f950cd882af2e8e1e27c" + hash: "b1edf784de34b42bd74390836db976b9" } Frame { msec: 4576 - hash: "0773e5d219d6fc4f2d385fd1bcd17f93" + hash: "78327706741822e6ba8b0b88be469422" } Frame { msec: 4592 @@ -1738,55 +1738,55 @@ VisualTest { } Frame { msec: 4608 - hash: "6f87571a59aa358755d80e94894fe7a9" + hash: "8274a35f384478ca2f018c5d914d428d" } Frame { msec: 4624 - hash: "0e31c55386e8838f52024c49d4929710" + hash: "70f4b77c65450eddfa61ebdf2dc75985" } Frame { msec: 4640 - hash: "7d6c89f5fae7990643687512f2294449" + hash: "2f95623085afc48094f122c290566440" } Frame { msec: 4656 - hash: "f8542ff33dbad93ed51a0801bd8af778" + hash: "8f671bd7878b897593eb8ae0358c8a01" } Frame { msec: 4672 - hash: "8bed907fe5b04eec118ac4e7759386ae" + hash: "64cf5c749c85d0e42b6c99f31da955b8" } Frame { msec: 4688 - hash: "d84facac927215d8d83bd9e375fbace1" + hash: "22e3394e779e25cc0d6c05bd2c6159d5" } Frame { msec: 4704 - hash: "f1c8b7dc9897713487fcc62c697f41ff" + hash: "42bc5633692228e48aa3ce3e3d8a7bbe" } Frame { msec: 4720 - hash: "611c45384b2abd883a4e3ec3bb30ebd3" + hash: "4dd05fce6984dbc6b6764b5e4189fd94" } Frame { msec: 4736 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4752 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4768 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4784 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4800 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4816 @@ -1794,62 +1794,62 @@ VisualTest { } Frame { msec: 4832 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4848 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4864 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4880 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4896 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4912 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4928 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4944 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4960 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4976 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 4992 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 5008 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 5024 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 5040 - hash: "63e075c2cac3770e657217989cc7d80f" + hash: "ca7b9bc30c728268b338848230a5a859" } Frame { msec: 5056 - hash: "34967fb7248c860643bdc01e0135309f" + hash: "d30be31c0f9d92aeba83ce345551005a" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png index da688c7..af0e781 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png index 618d238..d3e98dc 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png index 0688ed1..9c6c1c3 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png index ec6e330..fc1574a 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png index 1692d17..f76ae14 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png index d70704d..f6b8e83 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png index f8f37c6..be041d8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml index 3828e76..32c2a15 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml @@ -226,7 +226,7 @@ VisualTest { } Frame { msec: 640 - hash: "6cdaa8ffc906ade671fe259711e76f24" + hash: "51c14d87d2cf89aaece5bd682008f67f" } Mouse { type: 5 @@ -258,7 +258,7 @@ VisualTest { } Frame { msec: 672 - hash: "76fdf4cb75376ec3a9e084d93765c5cb" + hash: "1bfd848a89a0477596b77903a173f728" } Mouse { type: 5 @@ -286,15 +286,15 @@ VisualTest { } Frame { msec: 688 - hash: "b12e86c13e012c5992930b3e559c337c" + hash: "f66f04b42b0db33b852a82030d647886" } Frame { msec: 704 - hash: "4056e78a59e8f1e030f3e3a51c436b46" + hash: "e1573c6fd92f0fc4e267a37f417d0bc0" } Frame { msec: 720 - hash: "c84781b7586943ef889b8911c23e91db" + hash: "017044987c781ad8bb4cd8242f9091ed" } Frame { msec: 736 @@ -306,7 +306,7 @@ VisualTest { } Frame { msec: 768 - hash: "ef6319b262fc299b14b40d1521f9c9c3" + hash: "cb9e1ef51c8367e0b8c71cfdb70906fa" } Frame { msec: 784 @@ -326,11 +326,11 @@ VisualTest { } Frame { msec: 848 - hash: "2e01e2e252ca9fb3e7107f04a3ba4031" + hash: "c684dc3153314fe3a73fa0dd09f27695" } Frame { msec: 864 - hash: "547a9f25404c2bf7737526faf67a459d" + hash: "f1d5e911a68f9922f29bb6ae14234da9" } Frame { msec: 880 @@ -490,7 +490,7 @@ VisualTest { } Frame { msec: 1248 - hash: "ac97616fc3c54711bb067cc72c15d4c5" + hash: "1cea77e58dbf1c9f321eab2f01f37be0" } Mouse { type: 5 @@ -554,7 +554,7 @@ VisualTest { } Frame { msec: 1312 - hash: "4e0a90dda433c1615ea367ec90917409" + hash: "11717eaf13ac83760984afa47bbd52f7" } Frame { msec: 1328 @@ -566,7 +566,7 @@ VisualTest { } Frame { msec: 1360 - hash: "0abbf36b5e3f2db9288bde05825dc111" + hash: "514d400cdc9c356a0de3c04649d885dc" } Frame { msec: 1376 @@ -574,11 +574,11 @@ VisualTest { } Frame { msec: 1392 - hash: "430d7719ebf3b5835af92683cff10e56" + hash: "ab04af0d0f0f0d4538ec58841306cea7" } Frame { msec: 1408 - hash: "411a8fe1ee3a0510574cbf6a69d23456" + hash: "5cbc813c467b453c3e8de177aaede5b6" } Frame { msec: 1424 @@ -602,7 +602,7 @@ VisualTest { } Frame { msec: 1504 - hash: "cf360de1c6649e45beb974ddbe436ea9" + hash: "24421668a7814c3db8b7d1e50d2e9137" } Frame { msec: 1520 @@ -626,11 +626,11 @@ VisualTest { } Frame { msec: 1600 - hash: "faf898388f87948fbacd74589cb18af0" + hash: "a4a436b32e96fe5f9c3309bd1cabe65a" } Frame { msec: 1616 - hash: "b818181b3fee6f5a35a0da6c0f8e240e" + hash: "cb801c9d2b7f04a0413898ea74c61f80" } Mouse { type: 2 @@ -694,7 +694,7 @@ VisualTest { } Frame { msec: 1680 - hash: "684a17820c3693d893f8199cd7c7076f" + hash: "38e396c6fa5754d0070e4fd17ab2dc8b" } Frame { msec: 1696 @@ -714,15 +714,15 @@ VisualTest { } Frame { msec: 1760 - hash: "c36b60f81e7de5c0e5a59655041adff2" + hash: "ba1a6b8e55d7c5d73b371c8821f8caa2" } Frame { msec: 1776 - hash: "297abbc6b38a1909324fcee6d8b1d908" + hash: "ec19910e0f7b3e218d5a1992a7d00c4a" } Frame { msec: 1792 - hash: "0af89e3bab7c517f375897239ea35153" + hash: "7ca87adb6f69c5530be9da6df6b1d9a9" } Frame { msec: 1808 @@ -730,27 +730,27 @@ VisualTest { } Frame { msec: 1824 - hash: "57e1e871cbbc627f2fb9bf5583c4f097" + hash: "3da4fe69c1d6904a36d95bcd43f52195" } Frame { msec: 1840 - hash: "5220aecdd1516d94f0698e79f17fee57" + hash: "3cdb89ceb3ee66349b8a19301cc58e3d" } Frame { msec: 1856 - hash: "f3d8c908e61e5d61bbeeb9c6b5e8a704" + hash: "98088442867a0f1ec90144c531c9c5fb" } Frame { msec: 1872 - hash: "f27867aeb39ef64ebd50b5d79b69337e" + hash: "22d87a7d6409e2ce659a869dce57eef8" } Frame { msec: 1888 - hash: "b807b4e74a0f008df3f4534901debe38" + hash: "c1466f188c724c889017db70e2d60153" } Frame { msec: 1904 - hash: "e19832a0a7fcd57efe46cb0102a8d418" + hash: "e5392d308078449277be8d2f57561551" } Frame { msec: 1920 @@ -762,15 +762,15 @@ VisualTest { } Frame { msec: 1952 - hash: "746c60e03c50dc2e28c62fe52a8dd9d2" + hash: "8d6a232f303e48c9366dbf265cedf958" } Frame { msec: 1968 - hash: "27d6da44b605cb38552147fdf451ef45" + hash: "c6bc2031a4c59eb7a5b34e663252e91c" } Frame { msec: 1984 - hash: "c41d5491c417531ee86ac6ec8571c6a8" + hash: "bf8be42cdcdcfd205c8cb7e937ff5d0d" } Frame { msec: 2000 @@ -782,11 +782,11 @@ VisualTest { } Frame { msec: 2032 - hash: "0850d4b73a664ee0f1ed6d6e0615ea80" + hash: "9a2c8dd1883824415f5825a2a5cf3d09" } Frame { msec: 2048 - hash: "ae6cb0bfda1cea70b3641251d0dc60c4" + hash: "78e31d9b30619ee5774d3cf10b5af762" } Frame { msec: 2064 @@ -798,7 +798,7 @@ VisualTest { } Frame { msec: 2096 - hash: "2081c1ffe35f20dd827b3d9f52be90b3" + hash: "6a2f7dde022d4044e8772b8fcc28b02e" } Frame { msec: 2112 @@ -806,11 +806,11 @@ VisualTest { } Frame { msec: 2128 - hash: "7f289e50f1bbd570b6bc2ca1998f8493" + hash: "662402cd180eb325c174b6935a9d3f0a" } Frame { msec: 2144 - hash: "8bb3a37f416032d40cb5f919abb42e30" + hash: "8eb192c9d01fe205ddcba2d5cadab65f" } Frame { msec: 2160 @@ -818,7 +818,7 @@ VisualTest { } Frame { msec: 2176 - hash: "d3e8aae08a2518c039d6bda80fc520a4" + hash: "bc0ee50215b6b31422ee423f7955770c" } Frame { msec: 2192 @@ -826,11 +826,11 @@ VisualTest { } Frame { msec: 2208 - hash: "8eebcff152288a4ab2a3e64fd7ba6f80" + hash: "0ce5216f041f657a96ae4693319bfad3" } Frame { msec: 2224 - hash: "85fe363271d480163fb7847a3501472f" + hash: "0370a09ab78439e9df487ea55853ef98" } Frame { msec: 2240 @@ -854,15 +854,15 @@ VisualTest { } Frame { msec: 2320 - hash: "029428301287e4c7cd2f8a1fa6a25381" + hash: "44ecad3423a36882755fad6fb79bc2c8" } Frame { msec: 2336 - hash: "aef25177af3511dc99004a1e37f7f5d3" + hash: "b3eaadeb9d3b008fcf21c58158e8b028" } Frame { msec: 2352 - hash: "f9e11fd7023a72366dacaaf19b2eb81c" + hash: "110b000fa3e122560480d466fe231b21" } Frame { msec: 2368 @@ -874,7 +874,7 @@ VisualTest { } Frame { msec: 2400 - hash: "39df3050c4100e8a4f6e648b4aa16ba7" + hash: "65c1f85d2086f5e6d95d9b99a84281a5" } Frame { msec: 2416 @@ -882,7 +882,7 @@ VisualTest { } Frame { msec: 2432 - hash: "54d50f6c980cb04a1634622a29a6f0e9" + hash: "f00ea591d697546b5afe4420b702db49" } Frame { msec: 2448 @@ -1274,7 +1274,7 @@ VisualTest { } Frame { msec: 3264 - hash: "849ffa1fdd718a48e9570b88987f9203" + hash: "dc7f5231d844b36e1429f1072080a60c" } Mouse { type: 5 @@ -1294,7 +1294,7 @@ VisualTest { } Frame { msec: 3280 - hash: "d497eff3c8879d30619630e7ffcbf5c9" + hash: "161410fe9eb458c717cfbb9ef0626535" } Mouse { type: 5 @@ -1314,7 +1314,7 @@ VisualTest { } Frame { msec: 3296 - hash: "b0679dfe2f631e41f5cc269bd16d742c" + hash: "91a884de3e19dc6ca7fcde32492b3ff1" } Mouse { type: 5 @@ -1354,7 +1354,7 @@ VisualTest { } Frame { msec: 3328 - hash: "ea3cff28ff3be273332b19a2b8acb95e" + hash: "ed299cd4ef2364ab1d7b702e2b0a7233" } Mouse { type: 5 @@ -1374,7 +1374,7 @@ VisualTest { } Frame { msec: 3344 - hash: "458decd62af57d333a07459c89e62393" + hash: "4346ad16720e853154bfc1a22d9e7f55" } Mouse { type: 5 @@ -1422,11 +1422,11 @@ VisualTest { } Frame { msec: 3408 - hash: "0f53231de64ac5b0503e92ad10155dea" + hash: "fb7b31720b9de8d820ce29d9861482dd" } Frame { msec: 3424 - hash: "f2be693c23ea0885d6e8180c3062ba76" + hash: "4bb82c8b498b41e0785bea6b2c52b5e6" } Frame { msec: 3440 @@ -1434,7 +1434,7 @@ VisualTest { } Frame { msec: 3456 - hash: "ba86efade16e8965f59f6257ae90d131" + hash: "04f3c7a5cb270405446cbb85da8c1c16" } Frame { msec: 3472 @@ -1446,23 +1446,23 @@ VisualTest { } Frame { msec: 3504 - hash: "c822447614f47b5e15ffad967964a061" + hash: "3b0dce0a781799bd24073a6dc9717f68" } Frame { msec: 3520 - hash: "5eb2e64f11847cc9360291e14e866611" + hash: "1f6fc9f37a02e54418d90307f06c5b6f" } Frame { msec: 3536 - hash: "545dcc2645b50d78c84c658880d0500c" + hash: "a1116c06874af67ff54d69009f78d4da" } Frame { msec: 3552 - hash: "9d984e07b99137b3cb57dd4df16b8237" + hash: "4717c402fc7ad0d3f44b9944672d2746" } Frame { msec: 3568 - hash: "da27085e7a3cccde7cc3db2d9c6cc2cd" + hash: "7a180273295e9a30f5e26cdb080b87f2" } Frame { msec: 3584 @@ -1470,7 +1470,7 @@ VisualTest { } Frame { msec: 3600 - hash: "bfb5ed7b65f36d80e3156560a0ec58b7" + hash: "3cee427f42e8ccd33e9fccd903ae6f1d" } Frame { msec: 3616 @@ -1478,7 +1478,7 @@ VisualTest { } Frame { msec: 3632 - hash: "1c36be8deb2079ed81f1718c92e44803" + hash: "25779cf68847c0a132ea4aed6a5ef4d3" } Frame { msec: 3648 @@ -1490,11 +1490,11 @@ VisualTest { } Frame { msec: 3680 - hash: "1551c4aae06a258bdadc9ef356724871" + hash: "9f3c20980b481806ce7c1b33c177a049" } Frame { msec: 3696 - hash: "526aec43f710e524d247f8a4b08c261c" + hash: "5fb403dc08f95fb0651dcd33d32ef6c0" } Mouse { type: 2 @@ -1514,7 +1514,7 @@ VisualTest { } Frame { msec: 3712 - hash: "b50ef7198c1831623ed2210e651ac618" + hash: "c6422e39ed268dd67846e55908bc6f21" } Mouse { type: 5 @@ -1586,7 +1586,7 @@ VisualTest { } Frame { msec: 3776 - hash: "ecf04273061af5f881925f3a33015fbb" + hash: "8c30751e1d1e443b5ad217151e8e8fc8" } Mouse { type: 5 @@ -1626,7 +1626,7 @@ VisualTest { } Frame { msec: 3808 - hash: "4a1dbbac65a3caac16b38c45be61003c" + hash: "e621e9486e10332d937417a0b6be6be7" } Mouse { type: 5 @@ -1706,7 +1706,7 @@ VisualTest { } Frame { msec: 3872 - hash: "fd2eab6b3a65713f057da22a412512c7" + hash: "f6495f86ae29c7a996b3302300e98f75" } Mouse { type: 5 @@ -1766,7 +1766,7 @@ VisualTest { } Frame { msec: 3920 - hash: "fd18bd5f8f09c995f122b8b4ecb80279" + hash: "3a303646ea0fd126ee00c847efa48d0c" } Mouse { type: 5 @@ -1854,7 +1854,7 @@ VisualTest { } Frame { msec: 4016 - hash: "b00b78122721ddcded2c7131cfe40d53" + hash: "3cc1355449b8ec7209537fedb0af43b1" } Frame { msec: 4032 @@ -1862,7 +1862,7 @@ VisualTest { } Frame { msec: 4048 - hash: "076fefc33455667af954dcc5a06017d3" + hash: "2f4e6b57c6a4fa1689e585214f35702a" } Frame { msec: 4064 @@ -1870,19 +1870,19 @@ VisualTest { } Frame { msec: 4080 - hash: "12e6711077da076b737aef1aaa336d42" + hash: "68165bd37b4cb1609d686a361ae54e06" } Frame { msec: 4096 - hash: "1e19329fb839a00faa3b95d13b7a9015" + hash: "436e81734e23502ef8604145d5892c41" } Frame { msec: 4112 - hash: "7469fb57ce0b7ea9a7cc6da14f6a245a" + hash: "93f005a5a6a989db3e1702fa4f11f6ee" } Frame { msec: 4128 - hash: "17e3aca0838e2ba75cc9b869bb969220" + hash: "7d00d2a606d92cb8c0726c14cba0f989" } Frame { msec: 4144 @@ -1994,7 +1994,7 @@ VisualTest { } Frame { msec: 4448 - hash: "a29d4b3fa16829823e63bf83e7b62aff" + hash: "96815da788d9968a173e7005d3ca8bff" } Mouse { type: 5 @@ -2014,7 +2014,7 @@ VisualTest { } Frame { msec: 4464 - hash: "d8f9d016318e0bd38d4654b4850da952" + hash: "6949c70729c3e43bc59cc12d4bb82d8f" } Mouse { type: 5 @@ -2034,7 +2034,7 @@ VisualTest { } Frame { msec: 4480 - hash: "13a2382e08ab10ecb40f9c24c682a797" + hash: "26ce66ebfa6eec9eab4d987ef4ec5d5f" } Mouse { type: 5 @@ -2054,7 +2054,7 @@ VisualTest { } Frame { msec: 4496 - hash: "cef145c5d105466f3913bb81bb2b58df" + hash: "46e206837a34ba4d418c4e1098b49fd8" } Mouse { type: 5 @@ -2074,7 +2074,7 @@ VisualTest { } Frame { msec: 4512 - hash: "9bc0a21266bebbf8fc3509e5f92dd77f" + hash: "ac7451dcd3f1359ca2850bd986c22994" } Mouse { type: 5 @@ -2086,7 +2086,7 @@ VisualTest { } Frame { msec: 4528 - hash: "e419dbe857667b014e4dd9b57b01bbe4" + hash: "f9179ba9c011bc1492daf0d22f7e85e0" } Mouse { type: 5 @@ -2098,7 +2098,7 @@ VisualTest { } Frame { msec: 4544 - hash: "411cb7a7f331161059faba4ae6549229" + hash: "8db5ba9548ecad76b889d9024f59b5cf" } Mouse { type: 5 @@ -2110,7 +2110,7 @@ VisualTest { } Frame { msec: 4560 - hash: "b008d6b2b444881c36521595f6b31539" + hash: "30375b9f69ca4ac1b67ff208fd18817f" } Mouse { type: 5 @@ -2122,7 +2122,7 @@ VisualTest { } Frame { msec: 4576 - hash: "77fcc3c74c3832ae6b80aec420cb06e0" + hash: "3ba2bd45231cdea3bd9f868c9d35f91e" } Mouse { type: 5 @@ -2142,59 +2142,59 @@ VisualTest { } Frame { msec: 4592 - hash: "41d1c54bc76caeae057fb1bdb3b93843" + hash: "50646478058ada031f29b5df661e734e" } Frame { msec: 4608 - hash: "03fdd91b352798b1ff958c23c0bc5f35" + hash: "ab6f2fb209650dbf83710f3299db8907" } Frame { msec: 4624 - hash: "2098ea8b55b54ca8dd648fb285c43ebf" + hash: "dbec24d44d19b834e9a4936c960c4295" } Frame { msec: 4640 - hash: "9929c509654819fd04da4e4b5c8e22b4" + hash: "09c41872193e4a6eab37b35ef4e90465" } Frame { msec: 4656 - hash: "c470d3a57c6b56f9f56b176823b27d53" + hash: "1778dc99de59e28a730a1439a7576abb" } Frame { msec: 4672 - hash: "37474b3a23f90dafee6b9e0043a702fa" + hash: "6dbbdb5b4e6c6870b5dd62b1b94f9dd3" } Frame { msec: 4688 - hash: "0fbb6a9fded011b010fa6f3a2819630c" + hash: "3b5cf826c12339c0c635ae1ffcd431e7" } Frame { msec: 4704 - hash: "6c5a7dad864999548257e4bf0ddc3687" + hash: "6d6068c26eea67214fd3529ab84ab5b5" } Frame { msec: 4720 - hash: "339bc42e559c66d07f37af5e06feacef" + hash: "54cbc4842acb46254746984936656c5b" } Frame { msec: 4736 - hash: "513dc773dc93275e32fa9ac61e6dcb46" + hash: "10707bae5274ad29ac3e4aea320a30bf" } Frame { msec: 4752 - hash: "b725c84435b1f387dc3f375280e39de6" + hash: "ad288c8afc21a87077bae47cbaed1a46" } Frame { msec: 4768 - hash: "f3d04b513df286aacb9ebdb107d7a0b4" + hash: "bc1c391b0d7a56276b7c082aa2882e47" } Frame { msec: 4784 - hash: "c22839005ed0cb6b2fa9c958d17fd948" + hash: "c62341687ca048da1551eb708c7e8a19" } Frame { msec: 4800 - hash: "2fb9a2d5d22a6d0ed567328ffaa512f0" + hash: "1a4e3bb688d6fcfe937f53f8179b21e0" } Frame { msec: 4816 @@ -2202,115 +2202,115 @@ VisualTest { } Frame { msec: 4832 - hash: "ba13b0b4790aec7084b5553fe0b0d72b" + hash: "0646877fe2f6935ca4b34495abed5919" } Frame { msec: 4848 - hash: "2bc983733d4004cc67a56d77e9f48e5d" + hash: "46899d9c0a188671d9b7ec01c827ad03" } Frame { msec: 4864 - hash: "0f729cbe41b155b6eef20a4be207b853" + hash: "85cd8aa6dfa28c5d2e10f1ff83644d8f" } Frame { msec: 4880 - hash: "c2ca47a7d70ef827029b32c11a052b83" + hash: "323711ddd10147f51d903f524195b9fe" } Frame { msec: 4896 - hash: "803aefca7f1cbd494d2d2f7e7eea9a3f" + hash: "ba6b46ac25a4f111c926522fc47d7367" } Frame { msec: 4912 - hash: "2641683e1fa9ed418ac89631be7922f1" + hash: "5dab5804d66b6aa8e4f73246c3b19557" } Frame { msec: 4928 - hash: "3d9370305ca147625828f7ee3b34ca33" + hash: "2cac21d8e33bc01431a6aedabba3ce18" } Frame { msec: 4944 - hash: "5cdfdd22a0dc1ed78035ae4b5e2e26a7" + hash: "e1edf4268e206a40543d1a6caa4d0b43" } Frame { msec: 4960 - hash: "2af663981b43dbe699849eff4731829a" + hash: "4989e920c0d173e68c3de730a5f4f877" } Frame { msec: 4976 - hash: "b159d3a09666327bd2d860bf56920734" + hash: "9840b722350840b56b096fda3a70f8e8" } Frame { msec: 4992 - hash: "a1ed6f686f4cda9aa59bfd49deb8a075" + hash: "261b7a66300ff2a9b761dd70d02ed490" } Frame { msec: 5008 - hash: "c5f1862e7cbb1dcd6b303e58c525ab5c" + hash: "7b6ffb01c050c31bfb433077c8336ed9" } Frame { msec: 5024 - hash: "3cc5e5d87067978961eee6e7b33ada06" + hash: "f8a20f8fe943b498dae9ba8fed113496" } Frame { msec: 5040 - hash: "74f3b0eae443bd9f171020fd973ca960" + hash: "e66b0f50bae2d0bba73f415af2c8dba1" } Frame { msec: 5056 - hash: "432037812ab1a09e0d0b32dfaf0f876e" + hash: "c82bb5035ff84c955f34f1189dcdbda4" } Frame { msec: 5072 - hash: "0eec7146b8df3b4892e89abd13b8bc9d" + hash: "8fce2628032b2a1f16373e721671ab8c" } Frame { msec: 5088 - hash: "a01dc5f4b4307aa66068d21159dd64d5" + hash: "e260e978d88301448eb56145e0fdfd07" } Frame { msec: 5104 - hash: "11eefdf5b1be8493a6ed9aaf519c7e17" + hash: "7c5d5bfdabf8b7f1d01fb1761ec976b3" } Frame { msec: 5120 - hash: "55ed797b82f5bca2ac2b5954c44c041e" + hash: "eeb8f15a4cbecf4013f48015ebb1840d" } Frame { msec: 5136 - hash: "498d4ca9faabf8b59e2359b60dc1aff2" + hash: "fb7bbed845f6fd5648c73431b0e4f65a" } Frame { msec: 5152 - hash: "78895368b141ab6d3a16f65f4389b2d5" + hash: "6e944ef5057031fc6a56ea27036c953a" } Frame { msec: 5168 - hash: "c73b27167bad79f3f3c5ebb64fa579c2" + hash: "0f96b7d876cb893081606ff93f7cf5c7" } Frame { msec: 5184 - hash: "fb05312d65155f0300f456d727698b80" + hash: "5904e4105e1108427a2826f24f82b293" } Frame { msec: 5200 - hash: "6e974736a0ecea6a71c1a7052a14fa20" + hash: "79a79fd11348a5a250d132a151446711" } Frame { msec: 5216 - hash: "f5daf5bec03d3e56c877e9b2dc5701b6" + hash: "edfed341f047b923aea434a3c31c8c27" } Frame { msec: 5232 - hash: "29793d2147563feb9ed0ebff18b303cd" + hash: "06e8e9e202b395dc3b230b1b7a982bf8" } Frame { msec: 5248 - hash: "5b63dfa3cb7ac0847f2e63f9d2a0b2b6" + hash: "d2ba2520683cdb64d366ab44a54b4668" } Frame { msec: 5264 - hash: "cf2f42dd9830d80f50df30e93a0b1ad2" + hash: "94b1e8a018f17f761de164a8acf4d68a" } Frame { msec: 5280 -- cgit v0.12 From 0faab4442040fdfe3790e3c02808fd45993f0265 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 10 Jan 2011 10:25:42 +0100 Subject: Compile when qreal != double Compile fix for devices where qreals are floats. Reviewed-by: Fabien Freling --- src/gui/text/qtextdocumentlayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 22c6b8c..c0f3fb4 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -2513,7 +2513,7 @@ static inline void getLineHeightParams(const QTextBlockFormat &blockFormat, cons if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight || blockFormat.lineHeightType() == QTextBlockFormat::MinimumHeight) { *lineBreakHeight = *lineHeight; if (blockFormat.lineHeightType() == QTextBlockFormat::FixedHeight) - *lineAdjustment = QFixed::fromReal(line.ascent() + qMax(line.leading(), 0.0)) - ((*lineHeight * 4) / 5); + *lineAdjustment = QFixed::fromReal(line.ascent() + qMax(line.leading(), qreal(0.0))) - ((*lineHeight * 4) / 5); else *lineAdjustment = QFixed::fromReal(line.height()) - *lineHeight; } -- cgit v0.12 From 963ada5805d61e318a04295b6d06e527b49cdb7a Mon Sep 17 00:00:00 2001 From: Jerome Pasion Date: Mon, 10 Jan 2011 11:06:48 +0100 Subject: Fix for qtdemo bug Task-number: QTBUG-15931 Reviewed-by: Kevin Wright --- tools/qdoc3/test/qt-html-templates.qdocconf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index 698164d..ff45451 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -74,8 +74,8 @@ HTML.postheader = "
\n" \ " \n" \ "
\n" \ " Close \n" \ - "

All | API | Articles | Examples

\n" \ - "

 results:

\n" \ + " \n" \ "
    \n" \ "
\n" \ "
\n" \ @@ -183,4 +183,4 @@ HTML.footer = "" \ " \n" \ "
\n" \ "
\n" \ - "
\n" \ No newline at end of file + " \n" -- cgit v0.12 From 2b1b617664bfc78f6e95e53dc0f9749bd1f2d27a Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Fri, 7 Jan 2011 15:57:28 +0000 Subject: Fix handle leak in symbian QTimer implementation The timer handle was only being closed when a timer was cancelled, which resulted in a leak for one shot timers that have completed normally. Instead the timer is now closed in a destructor (closing null handles is safe, so it doesn't matter if the handle was never created - e.g. in the case of a zero timer) Also added a handle check before creating a timer to prevent a leak in case the start function is called twice in the backend. Task-number: QTBUG-16380 Reviewed-by: mread --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 6 ++-- tests/auto/qtimer/tst_qtimer.cpp | 38 +++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index bb9bd01..99c4087 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -217,13 +217,13 @@ QTimerActiveObject::QTimerActiveObject(QEventDispatcherSymbian *dispatcher, Symb QTimerActiveObject::~QTimerActiveObject() { Cancel(); + m_rTimer.Close(); //close of null handle is safe } void QTimerActiveObject::DoCancel() { if (m_timerInfo->interval > 0) { m_rTimer.Cancel(); - m_rTimer.Close(); } else { if (iStatus.Int() == KRequestPending) { TRequestStatus *status = &iStatus; @@ -302,7 +302,9 @@ void QTimerActiveObject::Start() CActiveScheduler::Add(this); m_timerInfo->msLeft = m_timerInfo->interval; if (m_timerInfo->interval > 0) { - m_rTimer.CreateLocal(); + if (!m_rTimer.Handle()) { + qt_symbian_throwIfError(m_rTimer.CreateLocal()); + } StartTimer(); } else { iStatus = KRequestPending; diff --git a/tests/auto/qtimer/tst_qtimer.cpp b/tests/auto/qtimer/tst_qtimer.cpp index 102308e..e964728 100644 --- a/tests/auto/qtimer/tst_qtimer.cpp +++ b/tests/auto/qtimer/tst_qtimer.cpp @@ -90,6 +90,9 @@ private slots: void QTBUG13633_dontBlockEvents(); void postedEventsShouldNotStarveTimers(); +#ifdef Q_OS_SYMBIAN + void handleLeaks(); +#endif }; class TimerHelper : public QObject @@ -750,5 +753,40 @@ void tst_QTimer::postedEventsShouldNotStarveTimers() QVERIFY(timerHelper.count > 5); } +#ifdef Q_OS_SYMBIAN +void tst_QTimer::handleLeaks() +{ + const int timercount = 5; + int processhandles_start; + int threadhandles_start; + RThread().HandleCount(processhandles_start, threadhandles_start); + { + TimerHelper timerHelper; + QList timers; + for (int i=0;isetSingleShot(true); + timer->start(i); //test both zero and normal timeouts + } + int processhandles_mid; + int threadhandles_mid; + RThread().HandleCount(processhandles_mid, threadhandles_mid); + qDebug() << threadhandles_mid - threadhandles_start << "new thread owned handles"; + QTest::qWait(100); + QCOMPARE(timerHelper.count, timercount); + qDeleteAll(timers); + } + int processhandles_end; + int threadhandles_end; + RThread().HandleCount(processhandles_end, threadhandles_end); + QCOMPARE(threadhandles_end, threadhandles_start); //RTimer::CreateLocal creates a thread owned handle + //Can not verify process handles because QObject::connect may create up to 2 mutexes + //from a QMutexPool (4 process owned handles with open C imp.) + //QCOMPARE(processhandles_end, processhandles_start); +} +#endif + QTEST_MAIN(tst_QTimer) #include "tst_qtimer.moc" -- cgit v0.12 From 7471178137e6fcc193ba55acdfb2bbeed33f8e7a Mon Sep 17 00:00:00 2001 From: Niklas Kurkisuo Date: Mon, 10 Jan 2011 12:17:27 +0100 Subject: Change QHostInfoCache to use QElapsedTime instead of QTime. Use QElapsedTime instead of QTime for performance gain. See QT-2965 for more info. Task-number: QTBUG-16468 Reviewed-by: Markus Goetz --- src/network/kernel/qhostinfo.cpp | 2 +- src/network/kernel/qhostinfo_p.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index f984cf8..0c0e1cd 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -740,7 +740,7 @@ void QHostInfoCache::put(const QString &name, const QHostInfo &info) QHostInfoCacheElement* element = new QHostInfoCacheElement(); element->info = info; - element->age = QTime(); + element->age = QElapsedTimer(); element->age.start(); QMutexLocker locker(&this->mutex); diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index 85d14c2..8814bd8 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -68,7 +68,7 @@ #include "QtCore/qrunnable.h" #include "QtCore/qlist.h" #include "QtCore/qqueue.h" -#include +#include #include #endif @@ -135,7 +135,7 @@ private: bool enabled; struct QHostInfoCacheElement { QHostInfo info; - QTime age; + QElapsedTimer age; }; QCache cache; QMutex mutex; -- cgit v0.12 From 13370ead4e9184fd82c08c060dbb1ea29a51cc7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Mon, 10 Jan 2011 12:39:16 +0100 Subject: Fix reversed condition introduced in 9a6cfc07e5 Reviewed-by: Bradley T. Hughes --- src/corelib/thread/qsemaphore.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp index 15f45b6..5fa41f1 100644 --- a/src/corelib/thread/qsemaphore.cpp +++ b/src/corelib/thread/qsemaphore.cpp @@ -224,7 +224,7 @@ bool QSemaphore::tryAcquire(int n, int timeout) timer.start(); while (n > d->avail) { const qint64 elapsed = timer.elapsed(); - if (timeout - elapsed > 0 + if (timeout - elapsed <= 0 || !d->cond.wait(locker.mutex(), timeout - elapsed)) return false; } -- cgit v0.12 From 2c0f568061b3377ee55ff423c70d67a6341615ba Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 10 Jan 2011 14:00:59 +0100 Subject: tst_qhttpnetworkconnection: Compile fix --- .../qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index 4a32a5a..321b787 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -178,7 +178,7 @@ void tst_QHttpNetworkConnection::head() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); QHttpNetworkRequest request(protocol + host + path, QHttpNetworkRequest::Head); QHttpNetworkReply *reply = connection.sendRequest(request); @@ -236,7 +236,7 @@ void tst_QHttpNetworkConnection::get() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); QHttpNetworkRequest request(protocol + host + path); QHttpNetworkReply *reply = connection.sendRequest(request); @@ -314,7 +314,7 @@ void tst_QHttpNetworkConnection::put() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); QHttpNetworkRequest request(protocol + host + path, QHttpNetworkRequest::Put); @@ -402,7 +402,7 @@ void tst_QHttpNetworkConnection::post() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); QHttpNetworkRequest request(protocol + host + path, QHttpNetworkRequest::Post); @@ -539,7 +539,7 @@ void tst_QHttpNetworkConnection::get401() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); connection.setProperty("setCredentials", setCredentials); connection.setProperty("username", username); connection.setProperty("password", password); @@ -609,7 +609,7 @@ void tst_QHttpNetworkConnection::compression() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); QHttpNetworkRequest request(protocol + host + path); if (!autoCompress) @@ -701,7 +701,7 @@ void tst_QHttpNetworkConnection::ignoresslerror() QCOMPARE(connection.hostName(), host); if (ignoreInit) connection.ignoreSslErrors(); - QCOMPARE(connection.isEncrypted(), encrypt); + QCOMPARE(connection.isSsl(), encrypt); connection.setProperty("ignoreFromSignal", ignoreFromSignal); QHttpNetworkRequest request(protocol + host + path); -- cgit v0.12 From 7b49c37db01ca8f6308cead2b7209a7b480a5446 Mon Sep 17 00:00:00 2001 From: Adrian Constantin Date: Mon, 10 Jan 2011 12:27:35 +0200 Subject: For non-developer builds, skip test that requires private API Fix build break on harmattan. Reviewed-by: Lucian Varlan --- tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 6548158..0003eb6 100644 --- a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -433,6 +433,9 @@ void tst_QNetworkCookieJar::effectiveTLDs_data() void tst_QNetworkCookieJar::effectiveTLDs() { +#ifndef QT_BUILD_INTERNAL + QSKIP("Test requires private API", SkipAll); +#endif QFETCH(QString, domain); QFETCH(bool, isTLD); QCOMPARE(QNetworkCookieJarPrivate::isEffectiveTLD(domain), isTLD); -- cgit v