From 7d0e1bb75dcb8d6d4fa843f95610fd1adec803f0 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 13 Sep 2011 09:57:15 +1000 Subject: Backport imports directory caching performance optimization Backported from Qt5 change a6da3b26 Change-Id: Ib1715f3d5c144775e475426ce4471000b5ae0645 Task-number: QTBUG-15899 --- src/declarative/qml/qdeclarativedirparser.cpp | 29 +++++++ src/declarative/qml/qdeclarativedirparser_p.h | 4 + src/declarative/qml/qdeclarativeimport.cpp | 103 ++++++++++++------------- src/declarative/qml/qdeclarativeimport_p.h | 2 + src/declarative/qml/qdeclarativetypeloader.cpp | 99 +++++++++++++++++++++++- src/declarative/qml/qdeclarativetypeloader_p.h | 9 +++ 6 files changed, 190 insertions(+), 56 deletions(-) diff --git a/src/declarative/qml/qdeclarativedirparser.cpp b/src/declarative/qml/qdeclarativedirparser.cpp index 0a7a749..401eea9 100644 --- a/src/declarative/qml/qdeclarativedirparser.cpp +++ b/src/declarative/qml/qdeclarativedirparser.cpp @@ -41,8 +41,10 @@ #include "private/qdeclarativedirparser_p.h" #include "qdeclarativeerror.h" +#include #include +#include #include QT_BEGIN_NAMESPACE @@ -66,6 +68,16 @@ void QDeclarativeDirParser::setUrl(const QUrl &url) _url = url; } +QString QDeclarativeDirParser::fileSource() const +{ + return _filePathSouce; +} + +void QDeclarativeDirParser::setFileSource(const QString &filePath) +{ + _filePathSouce = filePath; +} + QString QDeclarativeDirParser::source() const { return _source; @@ -92,6 +104,23 @@ bool QDeclarativeDirParser::parse() _plugins.clear(); _components.clear(); + if (_source.isEmpty() && !_filePathSouce.isEmpty()) { + QFile file(_filePathSouce); + if (!QDeclarative_isFileCaseCorrect(_filePathSouce)) { + QDeclarativeError error; + error.setDescription(QString::fromUtf8("cannot load module \"%1\": File name case mismatch for \"%2\"").arg(_url.toString()).arg(_filePathSouce)); + _errors.prepend(error); + return false; + } else if (file.open(QFile::ReadOnly)) { + _source = QString::fromUtf8(file.readAll()); + } else { + QDeclarativeError error; + error.setDescription(QString::fromUtf8("module \"%1\" definition \"%2\" not readable").arg(_url.toString()).arg(_filePathSouce)); + _errors.prepend(error); + return false; + } + } + QTextStream stream(&_source); int lineNumber = 0; diff --git a/src/declarative/qml/qdeclarativedirparser_p.h b/src/declarative/qml/qdeclarativedirparser_p.h index 7db7d8c..347b229 100644 --- a/src/declarative/qml/qdeclarativedirparser_p.h +++ b/src/declarative/qml/qdeclarativedirparser_p.h @@ -73,6 +73,9 @@ public: QString source() const; void setSource(const QString &source); + QString fileSource() const; + void setFileSource(const QString &filePath); + bool isParsed() const; bool parse(); @@ -116,6 +119,7 @@ private: QList _errors; QUrl _url; QString _source; + QString _filePathSouce; QList _components; QList _plugins; unsigned _isParsed: 1; diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 6e0b348..44fc849 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -79,16 +79,16 @@ public: QList qmlDirComponents; - bool find_helper(int i, const QByteArray& type, int *vmajor, int *vminor, + bool find_helper(QDeclarativeTypeLoader *typeLoader, int i, const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, QUrl* url_return, QUrl *base = 0, bool *typeRecursionDetected = 0); - bool find(const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, + bool find(QDeclarativeTypeLoader *typeLoader, const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, QUrl* url_return, QUrl *base = 0, QString *errorString = 0); }; class QDeclarativeImportsPrivate { public: - QDeclarativeImportsPrivate(); + QDeclarativeImportsPrivate(QDeclarativeTypeLoader *loader); ~QDeclarativeImportsPrivate(); bool importExtension(const QString &absoluteFilePath, const QString &uri, @@ -111,6 +111,7 @@ public: QSet qmlDirFilesForWhichPluginsHaveBeenLoaded; QDeclarativeImportedNamespace unqualifiedset; QHash set; + QDeclarativeTypeLoader *typeLoader; }; /*! @@ -134,9 +135,12 @@ QDeclarativeImports::operator =(const QDeclarativeImports ©) return *this; } -QDeclarativeImports::QDeclarativeImports() -: d(new QDeclarativeImportsPrivate) -{ +QDeclarativeImports::QDeclarativeImports() + : d(new QDeclarativeImportsPrivate(0)){ +} + +QDeclarativeImports::QDeclarativeImports(QDeclarativeTypeLoader *typeLoader) + : d(new QDeclarativeImportsPrivate(typeLoader)){ } QDeclarativeImports::~QDeclarativeImports() @@ -268,10 +272,11 @@ bool QDeclarativeImports::resolveType(QDeclarativeImportedNamespace* ns, const Q QDeclarativeType** type_return, QUrl* url_return, int *vmaj, int *vmin) const { - return ns->find(type,vmaj,vmin,type_return,url_return); + Q_ASSERT(d->typeLoader); + return ns->find(d->typeLoader,type,vmaj,vmin,type_return,url_return); } -bool QDeclarativeImportedNamespace::find_helper(int i, const QByteArray& type, int *vmajor, int *vminor, +bool QDeclarativeImportedNamespace::find_helper(QDeclarativeTypeLoader *typeLoader, int i, const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, QUrl* url_return, QUrl *base, bool *typeRecursionDetected) { @@ -291,7 +296,6 @@ bool QDeclarativeImportedNamespace::find_helper(int i, const QByteArray& type, i return true; } - QUrl url = QUrl(urls.at(i) + QLatin1Char('/') + QString::fromUtf8(type) + QLatin1String(".qml")); QDeclarativeDirComponents qmldircomponents = qmlDirComponents.at(i); bool typeWasDeclaredInQmldir = false; @@ -303,6 +307,7 @@ bool QDeclarativeImportedNamespace::find_helper(int i, const QByteArray& type, i // importing version -1 means import ALL versions if ((vmaj == -1) || (c.majorVersion < vmaj || (c.majorVersion == vmaj && vmin >= c.minorVersion))) { + QUrl url = QUrl(urls.at(i) + QLatin1Char('/') + QString::fromUtf8(type) + QLatin1String(".qml")); QUrl candidate = url.resolved(QUrl(c.fileName)); if (c.internal && base) { if (base->resolved(QUrl(c.fileName)) != candidate) @@ -323,8 +328,9 @@ bool QDeclarativeImportedNamespace::find_helper(int i, const QByteArray& type, i if (!typeWasDeclaredInQmldir && !isLibrary.at(i)) { // XXX search non-files too! (eg. zip files, see QT-524) - QFileInfo f(QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url)); - if (f.exists()) { + QUrl url = QUrl(urls.at(i) + QLatin1Char('/') + QString::fromUtf8(type) + QLatin1String(".qml")); + QString file = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(url); + if (!typeLoader->absoluteFilePath(file).isEmpty()) { if (base && *base == url) { // no recursion if (typeRecursionDetected) *typeRecursionDetected = true; @@ -338,9 +344,8 @@ bool QDeclarativeImportedNamespace::find_helper(int i, const QByteArray& type, i return false; } -QDeclarativeImportsPrivate::QDeclarativeImportsPrivate() -: ref(1) -{ +QDeclarativeImportsPrivate::QDeclarativeImportsPrivate(QDeclarativeTypeLoader *loader) + : ref(1), typeLoader(loader){ } QDeclarativeImportsPrivate::~QDeclarativeImportsPrivate() @@ -353,33 +358,19 @@ bool QDeclarativeImportsPrivate::importExtension(const QString &absoluteFilePath QDeclarativeImportDatabase *database, QDeclarativeDirComponents* components, QString *errorString) { - QFile file(absoluteFilePath); - QString filecontent; - if (!QDeclarative_isFileCaseCorrect(absoluteFilePath)) { - if (errorString) - *errorString = QDeclarativeImportDatabase::tr("cannot load module \"%1\": File name case mismatch for \"%2\"").arg(uri).arg(absoluteFilePath); - return false; - } else if (file.open(QFile::ReadOnly)) { - filecontent = QString::fromUtf8(file.readAll()); - if (qmlImportTrace()) - qDebug().nospace() << "QDeclarativeImports(" << qPrintable(base.toString()) << "::importExtension: " - << "loaded " << absoluteFilePath; - } else { + Q_ASSERT(typeLoader); + const QDeclarativeDirParser *qmldirParser = typeLoader->qmlDirParser(absoluteFilePath); + if (qmldirParser->hasError()) { if (errorString) *errorString = QDeclarativeImportDatabase::tr("module \"%1\" definition \"%2\" not readable").arg(uri).arg(absoluteFilePath); return false; } - QDir dir = QFileInfo(file).dir(); - - QDeclarativeDirParser qmldirParser; - qmldirParser.setSource(filecontent); - qmldirParser.parse(); if (! qmlDirFilesForWhichPluginsHaveBeenLoaded.contains(absoluteFilePath)) { qmlDirFilesForWhichPluginsHaveBeenLoaded.insert(absoluteFilePath); - - foreach (const QDeclarativeDirParser::Plugin &plugin, qmldirParser.plugins()) { + QDir dir = QFileInfo(absoluteFilePath).dir(); + foreach (const QDeclarativeDirParser::Plugin &plugin, qmldirParser->plugins()) { QString resolvedFilePath = database->resolvePlugin(dir, plugin.path, plugin.name); #if defined(QT_LIBINFIX) && defined(Q_OS_SYMBIAN) @@ -404,7 +395,7 @@ bool QDeclarativeImportsPrivate::importExtension(const QString &absoluteFilePath } if (components) - *components = qmldirParser.components(); + *components = qmldirParser->components(); return true; } @@ -445,6 +436,7 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp QDeclarativeScriptParser::Import::Type importType, QDeclarativeImportDatabase *database, QString *errorString) { + Q_ASSERT(typeLoader); QDeclarativeDirComponents qmldircomponents = qmldircomponentsnetwork; QString uri = uri_arg; QDeclarativeImportedNamespace *s; @@ -462,20 +454,20 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp url.replace(QLatin1Char('.'), QLatin1Char('/')); bool found = false; QString dir; - + QString qmldir; // step 1: search for extension with fully encoded version number if (vmaj >= 0 && vmin >= 0) { foreach (const QString &p, database->fileImportPath) { dir = p+QLatin1Char('/')+url; + qmldir = dir+QString(QLatin1String(".%1.%2")).arg(vmaj).arg(vmin)+QLatin1String("/qmldir"); - QFileInfo fi(dir+QString(QLatin1String(".%1.%2")).arg(vmaj).arg(vmin)+QLatin1String("/qmldir")); - const QString absoluteFilePath = fi.absoluteFilePath(); - - if (fi.isFile()) { + QString absoluteFilePath = typeLoader->absoluteFilePath(qmldir); + if (!absoluteFilePath.isEmpty()) { found = true; - url = QUrl::fromLocalFile(fi.absolutePath()).toString(); + QString absolutePath = absoluteFilePath.left(absoluteFilePath.lastIndexOf(QLatin1Char('/'))); + url = QUrl::fromLocalFile(absolutePath).toString(); uri = resolvedUri(dir, database); if (!importExtension(absoluteFilePath, uri, database, &qmldircomponents, errorString)) return false; @@ -487,14 +479,14 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp if (vmaj >= 0 && vmin >= 0) { foreach (const QString &p, database->fileImportPath) { dir = p+QLatin1Char('/')+url; + qmldir = dir+QString(QLatin1String(".%1")).arg(vmaj)+QLatin1String("/qmldir"); - QFileInfo fi(dir+QString(QLatin1String(".%1")).arg(vmaj)+QLatin1String("/qmldir")); - const QString absoluteFilePath = fi.absoluteFilePath(); - - if (fi.isFile()) { + QString absoluteFilePath = typeLoader->absoluteFilePath(qmldir); + if (!absoluteFilePath.isEmpty()) { found = true; - url = QUrl::fromLocalFile(fi.absolutePath()).toString(); + QString absolutePath = absoluteFilePath.left(absoluteFilePath.lastIndexOf(QLatin1Char('/'))); + url = QUrl::fromLocalFile(absolutePath).toString(); uri = resolvedUri(dir, database); if (!importExtension(absoluteFilePath, uri, database, &qmldircomponents, errorString)) return false; @@ -507,14 +499,14 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp foreach (const QString &p, database->fileImportPath) { dir = p+QLatin1Char('/')+url; + qmldir = dir+QLatin1String("/qmldir"); - QFileInfo fi(dir+QLatin1String("/qmldir")); - const QString absoluteFilePath = fi.absoluteFilePath(); - - if (fi.isFile()) { + QString absoluteFilePath = typeLoader->absoluteFilePath(qmldir); + if (!absoluteFilePath.isEmpty()) { found = true; - url = QUrl::fromLocalFile(fi.absolutePath()).toString(); + QString absolutePath = absoluteFilePath.left(absoluteFilePath.lastIndexOf(QLatin1Char('/'))); + url = QUrl::fromLocalFile(absolutePath).toString(); uri = resolvedUri(dir, database); if (!importExtension(absoluteFilePath, uri, database, &qmldircomponents, errorString)) return false; @@ -552,7 +544,7 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp uri = resolvedUri(QDeclarativeEnginePrivate::urlToLocalFileOrQrc(base.resolved(QUrl(uri))), database); if (uri.endsWith(QLatin1Char('/'))) uri.chop(1); - if (QFile::exists(localFileOrQrc)) { + if (!typeLoader->absoluteFilePath(localFileOrQrc).isEmpty()) { if (!importExtension(localFileOrQrc,uri,database,&qmldircomponents,errorString)) return false; } @@ -615,6 +607,7 @@ bool QDeclarativeImportsPrivate::add(const QDeclarativeDirComponents &qmldircomp bool QDeclarativeImportsPrivate::find(const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, QUrl* url_return, QString *errorString) { + Q_ASSERT(typeLoader); QDeclarativeImportedNamespace *s = 0; int slash = type.indexOf('/'); if (slash >= 0) { @@ -636,7 +629,7 @@ bool QDeclarativeImportsPrivate::find(const QByteArray& type, int *vmajor, int * } QByteArray unqualifiedtype = slash < 0 ? type : type.mid(slash+1); // common-case opt (QString::mid works fine, but slower) if (s) { - if (s->find(unqualifiedtype,vmajor,vminor,type_return,url_return, &base, errorString)) + if (s->find(typeLoader, unqualifiedtype,vmajor,vminor,type_return,url_return, &base, errorString)) return true; if (s->urls.count() == 1 && !s->isLibrary[0] && url_return && s != &unqualifiedset) { // qualified, and only 1 url @@ -653,16 +646,16 @@ QDeclarativeImportedNamespace *QDeclarativeImportsPrivate::findNamespace(const Q return set.value(type); } -bool QDeclarativeImportedNamespace::find(const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, +bool QDeclarativeImportedNamespace::find(QDeclarativeTypeLoader *typeLoader, const QByteArray& type, int *vmajor, int *vminor, QDeclarativeType** type_return, QUrl* url_return, QUrl *base, QString *errorString) { bool typeRecursionDetected = false; for (int i=0; i #include #include +#include #include QT_BEGIN_NAMESPACE +/* +Returns the set of QML files in path (qmldir, *.qml, *.js). The caller +is responsible for deleting the returned data. +*/ +static QSet *qmlFilesInDirectory(const QString &path) +{ + QDirIterator dir(path, QDir::Files); + if (!dir.hasNext()) + return 0; + QSet *files = new QSet; + while (dir.hasNext()) { + dir.next(); + QString fileName = dir.fileName(); + if (fileName == QLatin1String("qmldir") + || fileName.endsWith(QLatin1String(".qml")) + || fileName.endsWith(QLatin1String(".js"))) { +#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_DARWIN) || defined(Q_OS_SYMBIAN) + fileName = fileName.toLower(); +#endif + files->insert(fileName); + } + } + return files; +} + + /*! \class QDeclarativeDataBlob \brief The QDeclarativeDataBlob encapsulates a data request that can be issued to a QDeclarativeDataLoader. @@ -715,6 +742,72 @@ QDeclarativeQmldirData *QDeclarativeTypeLoader::getQmldir(const QUrl &url) return qmldirData; } +/*! +Returns the absolute filename of path via a directory cache for files named +"qmldir", "*.qml", "*.js" +Returns a empty string if the path does not exist. +*/ +QString QDeclarativeTypeLoader::absoluteFilePath(const QString &path) +{ + if (path.isEmpty()) + return QString(); + if (path.at(0) == QLatin1Char(':')) { + // qrc resource + QFileInfo fileInfo(path); + return fileInfo.isFile() ? fileInfo.absoluteFilePath() : QString(); + } +#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_DARWIN) || defined(Q_OS_SYMBIAN) + QString lowPath(path.toLower()); +#else + QString lowPath(path); +#endif + int lastSlash = lowPath.lastIndexOf(QLatin1Char('/')); + QString dirPath = lowPath.left(lastSlash); + + StringSet *fileSet = 0; + QHash::const_iterator it = m_importDirCache.find(dirPath); + if (it == m_importDirCache.end()) { + StringSet *files = qmlFilesInDirectory(path.left(lastSlash)); + m_importDirCache.insert(dirPath, files); + fileSet = files; + } else { + fileSet = *it; + } + if (!fileSet) + return QString(); + + QString absoluteFilePath = fileSet->contains(QString(lowPath.constData()+lastSlash+1, lowPath.length()-lastSlash-1)) ? path : QString(); + if (absoluteFilePath.length() > 2 && absoluteFilePath.at(0) != QLatin1Char('/') && absoluteFilePath.at(1) != QLatin1Char(':')) + absoluteFilePath = QFileInfo(absoluteFilePath).absoluteFilePath(); + + return absoluteFilePath; +} + +/*! +Return a QDeclarativeDirParser for absoluteFilePath. The QDeclarativeDirParser may be cached. +*/ +const QDeclarativeDirParser *QDeclarativeTypeLoader::qmlDirParser(const QString &absoluteFilePath) +{ + QDeclarativeDirParser *qmldirParser; +#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_DARWIN) || defined(Q_OS_SYMBIAN) + QString lowPath(absoluteFilePath.toLower()); +#else + QString lowPath(absoluteFilePath); +#endif + QHash::const_iterator it = m_importQmlDirCache.find(lowPath); + if (it == m_importQmlDirCache.end()) { + qmldirParser = new QDeclarativeDirParser; + qmldirParser->setFileSource(absoluteFilePath); + qmldirParser->setUrl(QUrl::fromLocalFile(absoluteFilePath)); + qmldirParser->parse(); + m_importQmlDirCache.insert(lowPath, qmldirParser); + } else { + qmldirParser = *it; + } + + return qmldirParser; +} + void QDeclarativeTypeLoader::clearCache() { for (TypeCache::Iterator iter = m_typeCache.begin(); iter != m_typeCache.end(); ++iter) @@ -723,16 +816,20 @@ void QDeclarativeTypeLoader::clearCache() (*iter)->release(); for (QmldirCache::Iterator iter = m_qmldirCache.begin(); iter != m_qmldirCache.end(); ++iter) (*iter)->release(); + qDeleteAll(m_importDirCache); + qDeleteAll(m_importQmlDirCache); m_typeCache.clear(); m_scriptCache.clear(); m_qmldirCache.clear(); + m_importDirCache.clear(); + m_importQmlDirCache.clear(); } QDeclarativeTypeData::QDeclarativeTypeData(const QUrl &url, QDeclarativeTypeLoader::Options options, QDeclarativeTypeLoader *manager) -: QDeclarativeDataBlob(url, QmlFile), m_options(options), m_typesResolved(false), +: QDeclarativeDataBlob(url, QmlFile), m_options(options), m_imports(manager), m_typesResolved(false), m_compiledData(0), m_typeLoader(manager) { } diff --git a/src/declarative/qml/qdeclarativetypeloader_p.h b/src/declarative/qml/qdeclarativetypeloader_p.h index 56b6636..c0dce3e 100644 --- a/src/declarative/qml/qdeclarativetypeloader_p.h +++ b/src/declarative/qml/qdeclarativetypeloader_p.h @@ -198,14 +198,23 @@ public: QDeclarativeScriptData *getScript(const QUrl &); QDeclarativeQmldirData *getQmldir(const QUrl &); + + QString absoluteFilePath(const QString &path); + const QDeclarativeDirParser *qmlDirParser(const QString &absoluteFilePath); + private: typedef QHash TypeCache; typedef QHash ScriptCache; typedef QHash QmldirCache; + typedef QSet StringSet; + typedef QHash ImportDirCache; + typedef QHash ImportQmlDirCache; TypeCache m_typeCache; ScriptCache m_scriptCache; QmldirCache m_qmldirCache; + ImportDirCache m_importDirCache; + ImportQmlDirCache m_importQmlDirCache; }; Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeTypeLoader::Options) -- cgit v0.12 From 09cd2f818208a83489fae034b80e6497b7cc83af Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 14 Sep 2011 16:24:30 +1000 Subject: Fix StrictlyEnforceRange with snapOneItem/Row and header behavior, pt 2 Change cf23188de237009136fa1480ab8fd9e3ca364769 changed the positioning of a view with StrictlyEnforceRange, snapOneItem/Row, and a header, such that the view was positioned at the beginning of the header, rather than on the first item. Change f85819fe083ae7c6804c884de68e906d153a6d11 partially fixed the problem. This change handles the case of the header/footer being large enough to cause a snap item not to be found when the view is dragged beyond the first/last item. In this case snap to the currentItem. Change-Id: I08b7e61496a79f71c3b40fafaca985ae90f88503 Task-number: QTTH-1501 Reviewed-by: Bea Lam --- src/declarative/graphicsitems/qdeclarativegridview.cpp | 10 ++++++++++ src/declarative/graphicsitems/qdeclarativelistview.cpp | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 5a5b60e..ff88e31 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1081,7 +1081,17 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m tempPosition -= bias; } FxGridItem *topItem = snapItemAt(tempPosition+highlightStart); + if (!topItem && strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + topItem = currentItem; + } FxGridItem *bottomItem = snapItemAt(tempPosition+highlightEnd); + if (!bottomItem && strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + bottomItem = currentItem; + } qreal pos; if (topItem && bottomItem && strictHighlightRange) { qreal topPos = qMin(topItem->rowPos() - highlightStart, -maxExtent); diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 70be7a7..6c8e99b 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -1324,10 +1324,20 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m tempPosition -= bias; } FxListItem *topItem = snapItemAt(tempPosition+highlightStart); + if (!topItem && strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + topItem = currentItem; + } FxListItem *bottomItem = snapItemAt(tempPosition+highlightEnd); + if (!bottomItem && strictHighlightRange && currentItem) { + // StrictlyEnforceRange always keeps an item in range + updateHighlight(); + bottomItem = currentItem; + } qreal pos; bool isInBounds = -position() > maxExtent && -position() <= minExtent; - if (topItem && isInBounds) { + if (topItem && (isInBounds || strictHighlightRange)) { if (topItem->index == 0 && header && tempPosition+highlightStart < header->position()+header->size()/2 && !strictHighlightRange) { pos = isRightToLeft() ? - header->position() + highlightStart - size() : header->position() - highlightStart; } else { -- cgit v0.12 From 2c1e828af311bb103a6f02513cd339973e9582f6 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Wed, 28 Sep 2011 17:11:31 +0200 Subject: Fix typo when updating accessible treeview selection. Reviewed-by: Gabi --- src/gui/itemviews/qtableview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp index 6f532eb..356f187 100644 --- a/src/gui/itemviews/qtableview.cpp +++ b/src/gui/itemviews/qtableview.cpp @@ -3205,7 +3205,7 @@ void QTableView::selectionChanged(const QItemSelection &selected, QModelIndex desel = deselected.indexes().value(0); if (desel.isValid()) { #ifdef Q_WS_X11 - int entry = d->accessibleTable2Index(sel); + int entry = d->accessibleTable2Index(desel); QAccessible::updateAccessibility(this, entry, QAccessible::SelectionRemove); #else int entry = visualIndex(sel); -- cgit v0.12 From d63910575949106f84dacf04abaa14fc866aa66b Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 3 Dec 2010 11:34:09 +0100 Subject: Set missing flags in the option when rendering QTreeView drag pixmap QAbstractItemViewPrivate::renderToPixmap was not setting all the flags that the normal QTreeView painting sets: option.showDecorationSelected, option.viewItemPosition (so the drag pixmap looked wrong on Windows 7, with rects around each cell), and then the unittest also discovered that State_Children/State_Sibling wasn't set either. Task-number: QTBUG-15834 Merge-request: 2517 Reviewed-by: Gabriel --- src/gui/itemviews/qabstractitemview.cpp | 1 + src/gui/itemviews/qabstractitemview_p.h | 2 + src/gui/itemviews/qtreeview.cpp | 113 +++++++++++++++++++++----------- src/gui/itemviews/qtreeview_p.h | 5 ++ tests/auto/qtreeview/tst_qtreeview.cpp | 11 +++- 5 files changed, 92 insertions(+), 40 deletions(-) diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index ded4d63..1676c46 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -4238,6 +4238,7 @@ QPixmap QAbstractItemViewPrivate::renderToPixmap(const QModelIndexList &indexes, for (int j = 0; j < paintPairs.count(); ++j) { option.rect = paintPairs.at(j).first.translated(-r->topLeft()); const QModelIndex ¤t = paintPairs.at(j).second; + adjustViewOptionsForIndex(&option, current); delegateForIndex(current)->paint(&painter, option, current); } return pixmap; diff --git a/src/gui/itemviews/qabstractitemview_p.h b/src/gui/itemviews/qabstractitemview_p.h index 04babde..b742529 100644 --- a/src/gui/itemviews/qabstractitemview_p.h +++ b/src/gui/itemviews/qabstractitemview_p.h @@ -193,6 +193,8 @@ public: #endif virtual QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const; + // reimplemented in subclasses + virtual void adjustViewOptionsForIndex(QStyleOptionViewItemV4*, const QModelIndex&) const {} inline void releaseEditor(QWidget *editor) const { if (editor) { diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp index 9228ac8..868cd92 100644 --- a/src/gui/itemviews/qtreeview.cpp +++ b/src/gui/itemviews/qtreeview.cpp @@ -1378,6 +1378,23 @@ QItemViewPaintPairs QTreeViewPrivate::draggablePaintPairs(const QModelIndexList return ret; } +void QTreeViewPrivate::adjustViewOptionsForIndex(QStyleOptionViewItemV4 *option, const QModelIndex ¤t) const +{ + const int row = current.row(); + option->state = option->state | (viewItems.at(row).expanded ? QStyle::State_Open : QStyle::State_None) + | (viewItems.at(row).hasChildren ? QStyle::State_Children : QStyle::State_None) + | (viewItems.at(row).hasMoreSiblings ? QStyle::State_Sibling : QStyle::State_None); + + option->showDecorationSelected = (selectionBehavior & QTreeView::SelectRows) + || option->showDecorationSelected; + + QVector logicalIndices; + QVector viewItemPosList; // vector of left/middle/end for each logicalIndex + calcLogicalIndices(&logicalIndices, &viewItemPosList); + int logicalIndex = header->logicalIndex(current.column()); + option->viewItemPosition = viewItemPosList.at(logicalIndex); +} + /*! \since 4.2 @@ -1463,6 +1480,59 @@ static inline bool ancestorOf(QObject *widget, QObject *other) return false; } +void QTreeViewPrivate::calcLogicalIndices(QVector *logicalIndices, QVector *itemPositions) const +{ + const int left = (spanning ? header->visualIndex(0) : leftAndRight.first); + const int right = (spanning ? header->visualIndex(0) : leftAndRight.second); + const int columnCount = header->count(); + /* 'left' and 'right' are the left-most and right-most visible visual indices. + Compute the first visible logical indices before and after the left and right. + We will use these values to determine the QStyleOptionViewItemV4::viewItemPosition. */ + int logicalIndexBeforeLeft = -1, logicalIndexAfterRight = -1; + for (int visualIndex = left - 1; visualIndex >= 0; --visualIndex) { + int logicalIndex = header->logicalIndex(visualIndex); + if (!header->isSectionHidden(logicalIndex)) { + logicalIndexBeforeLeft = logicalIndex; + break; + } + } + + for (int visualIndex = left; visualIndex < columnCount; ++visualIndex) { + int logicalIndex = header->logicalIndex(visualIndex); + if (!header->isSectionHidden(logicalIndex)) { + if (visualIndex > right) { + logicalIndexAfterRight = logicalIndex; + break; + } + logicalIndices->append(logicalIndex); + } + } + + itemPositions->resize(logicalIndices->count()); + for (int currentLogicalSection = 0; currentLogicalSection < logicalIndices->count(); ++currentLogicalSection) { + const int headerSection = logicalIndices->at(currentLogicalSection); + // determine the viewItemPosition depending on the position of column 0 + int nextLogicalSection = currentLogicalSection + 1 >= logicalIndices->count() + ? logicalIndexAfterRight + : logicalIndices->at(currentLogicalSection + 1); + int prevLogicalSection = currentLogicalSection - 1 < 0 + ? logicalIndexBeforeLeft + : logicalIndices->at(currentLogicalSection - 1); + QStyleOptionViewItemV4::ViewItemPosition pos; + if (columnCount == 1 || (nextLogicalSection == 0 && prevLogicalSection == -1) + || (headerSection == 0 && nextLogicalSection == -1) || spanning) + pos = QStyleOptionViewItemV4::OnlyOne; + else if (headerSection == 0 || (nextLogicalSection != 0 && prevLogicalSection == -1)) + pos = QStyleOptionViewItemV4::Beginning; + else if (nextLogicalSection == 0 || nextLogicalSection == -1) + pos = QStyleOptionViewItemV4::End; + else + pos = QStyleOptionViewItemV4::Middle; + (*itemPositions)[currentLogicalSection] = pos; + } +} + + /*! Draws the row in the tree view that contains the model item \a index, using the \a painter given. The \a option control how the item is @@ -1531,33 +1601,13 @@ void QTreeView::drawRow(QPainter *painter, const QStyleOptionViewItem &option, int width, height = option.rect.height(); int position; QModelIndex modelIndex; - int columnCount = header->count(); const bool hoverRow = selectionBehavior() == QAbstractItemView::SelectRows && index.parent() == hover.parent() && index.row() == hover.row(); - /* 'left' and 'right' are the left-most and right-most visible visual indices. - Compute the first visible logical indices before and after the left and right. - We will use these values to determine the QStyleOptionViewItemV4::viewItemPosition. */ - int logicalIndexBeforeLeft = -1, logicalIndexAfterRight = -1; - for (int visualIndex = left - 1; visualIndex >= 0; --visualIndex) { - int logicalIndex = header->logicalIndex(visualIndex); - if (!header->isSectionHidden(logicalIndex)) { - logicalIndexBeforeLeft = logicalIndex; - break; - } - } - QVector logicalIndices; // vector of currently visibly logical indices - for (int visualIndex = left; visualIndex < columnCount; ++visualIndex) { - int logicalIndex = header->logicalIndex(visualIndex); - if (!header->isSectionHidden(logicalIndex)) { - if (visualIndex > right) { - logicalIndexAfterRight = logicalIndex; - break; - } - logicalIndices.append(logicalIndex); - } - } + QVector logicalIndices; + QVector viewItemPosList; // vector of left/middle/end for each logicalIndex + d->calcLogicalIndices(&logicalIndices, &viewItemPosList); for (int currentLogicalSection = 0; currentLogicalSection < logicalIndices.count(); ++currentLogicalSection) { int headerSection = logicalIndices.at(currentLogicalSection); @@ -1579,22 +1629,7 @@ void QTreeView::drawRow(QPainter *painter, const QStyleOptionViewItem &option, continue; opt.state = state; - // determine the viewItemPosition depending on the position of column 0 - int nextLogicalSection = currentLogicalSection + 1 >= logicalIndices.count() - ? logicalIndexAfterRight - : logicalIndices.at(currentLogicalSection + 1); - int prevLogicalSection = currentLogicalSection - 1 < 0 - ? logicalIndexBeforeLeft - : logicalIndices.at(currentLogicalSection - 1); - if (columnCount == 1 || (nextLogicalSection == 0 && prevLogicalSection == -1) - || (headerSection == 0 && nextLogicalSection == -1) || spanning) - opt.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; - else if (headerSection == 0 || (nextLogicalSection != 0 && prevLogicalSection == -1)) - opt.viewItemPosition = QStyleOptionViewItemV4::Beginning; - else if (nextLogicalSection == 0 || nextLogicalSection == -1) - opt.viewItemPosition = QStyleOptionViewItemV4::End; - else - opt.viewItemPosition = QStyleOptionViewItemV4::Middle; + opt.viewItemPosition = viewItemPosList.at(currentLogicalSection); // fake activeness when row editor has focus if (indexWidgetHasFocus) diff --git a/src/gui/itemviews/qtreeview_p.h b/src/gui/itemviews/qtreeview_p.h index a9dc452..ef8f11c 100644 --- a/src/gui/itemviews/qtreeview_p.h +++ b/src/gui/itemviews/qtreeview_p.h @@ -97,6 +97,7 @@ public: void initialize(); QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const; + void adjustViewOptionsForIndex(QStyleOptionViewItemV4 *option, const QModelIndex ¤t) const; #ifndef QT_NO_ANIMATION struct AnimatedOperation : public QVariantAnimation @@ -167,6 +168,10 @@ public: void paintAlternatingRowColors(QPainter *painter, QStyleOptionViewItemV4 *option, int y, int bottom) const; + // logicalIndices: vector of currently visibly logical indices + // itemPositions: vector of view item positions (beginning/middle/end/onlyone) + void calcLogicalIndices(QVector *logicalIndices, QVector *itemPositions) const; + QHeaderView *header; int indent; diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp index facb982..c37a4ea 100644 --- a/tests/auto/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/qtreeview/tst_qtreeview.cpp @@ -45,6 +45,7 @@ #include #include +#include #include "../../shared/util.h" //TESTED_CLASS= @@ -112,6 +113,8 @@ struct PublicView : public QTreeView inline QStyleOptionViewItem viewOptions() const { return QTreeView::viewOptions(); } inline int sizeHintForColumn(int column) const { return QTreeView::sizeHintForColumn(column); } + inline void startDrag(Qt::DropActions supportedActions) { QTreeView::startDrag(supportedActions); } + QAbstractItemViewPrivate* aiv_priv() { return static_cast(d_ptr.data()); } }; class tst_QTreeView : public QObject @@ -2947,7 +2950,7 @@ void tst_QTreeView::styleOptionViewItem() bool allCollapsed; }; - QTreeView view; + PublicView view; QStandardItemModel model; view.setModel(&model); MyDelegate delegate; @@ -3006,6 +3009,12 @@ void tst_QTreeView::styleOptionViewItem() QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 4); + // test that the rendering of drag pixmap sets the correct options too (QTBUG-15834) + delegate.count = 0; + QItemSelection sel(model.index(0,0), model.index(0,3)); + QRect rect; + view.aiv_priv()->renderToPixmap(sel.indexes(), &rect); + QTRY_VERIFY(delegate.count >= 4); //test dynamic models { -- cgit v0.12 From 7d9ac9659568f77d3acf70f304fa152d3ecadcb1 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Thu, 29 Sep 2011 14:36:33 +0200 Subject: don't assume the PATH envvar is latin1-encoded use Unicode getenv() version instead Merge-request: 1344 Reviewed-by: Jan-Arve Saether --- src/corelib/plugin/qsystemlibrary.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/plugin/qsystemlibrary.cpp b/src/corelib/plugin/qsystemlibrary.cpp index bb9c82a..c983f38 100644 --- a/src/corelib/plugin/qsystemlibrary.cpp +++ b/src/corelib/plugin/qsystemlibrary.cpp @@ -115,7 +115,7 @@ HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirect searchOrder << qSystemDirectory(); if (!onlySystemDirectory) { - const QString PATH(QLatin1String(qgetenv("PATH").constData())); + const QString PATH = QString::fromWCharArray((const wchar_t *)_wgetenv(L"PATH")); searchOrder << PATH.split(QLatin1Char(';'), QString::SkipEmptyParts); } QString fileName = QString::fromWCharArray(libraryName); -- cgit v0.12 From 569228bb5d7759025f06b1963f3d4a1fc4e05694 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Thu, 29 Sep 2011 14:36:44 +0200 Subject: nano-opts, styling fixes Merge-request: 1344 Reviewed-by: Jan-Arve Saether --- src/corelib/plugin/qsystemlibrary.cpp | 13 ++++++------- src/corelib/plugin/qsystemlibrary_p.h | 9 +++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/corelib/plugin/qsystemlibrary.cpp b/src/corelib/plugin/qsystemlibrary.cpp index c983f38..7296c5b 100644 --- a/src/corelib/plugin/qsystemlibrary.cpp +++ b/src/corelib/plugin/qsystemlibrary.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qsystemlibrary_p.h" + #include #include #include @@ -91,7 +92,7 @@ HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirect extern QString qAppFileName(); #endif -static QString qSystemDirectory() +static inline QString qSystemDirectory() { QVarLengthArray fullPath; @@ -118,24 +119,22 @@ HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirect const QString PATH = QString::fromWCharArray((const wchar_t *)_wgetenv(L"PATH")); searchOrder << PATH.split(QLatin1Char(';'), QString::SkipEmptyParts); } - QString fileName = QString::fromWCharArray(libraryName); - fileName.append(QLatin1String(".dll")); + const QString fileName = QString::fromWCharArray(libraryName) + QLatin1String(".dll"); // Start looking in the order specified for (int i = 0; i < searchOrder.count(); ++i) { QString fullPathAttempt = searchOrder.at(i); - if (!fullPathAttempt.endsWith(QLatin1Char('\\'))) { + if (!fullPathAttempt.endsWith(QLatin1Char('\\'))) fullPathAttempt.append(QLatin1Char('\\')); - } fullPathAttempt.append(fileName); HINSTANCE inst = ::LoadLibrary((const wchar_t *)fullPathAttempt.utf16()); if (inst != 0) return inst; } - return 0; + return 0; } -#endif //Q_OS_WINCE +#endif // !Q_OS_WINCE QT_END_NAMESPACE diff --git a/src/corelib/plugin/qsystemlibrary_p.h b/src/corelib/plugin/qsystemlibrary_p.h index f20d0b6..88ab82c 100644 --- a/src/corelib/plugin/qsystemlibrary_p.h +++ b/src/corelib/plugin/qsystemlibrary_p.h @@ -85,9 +85,9 @@ public: if (!m_handle) return 0; #ifdef Q_OS_WINCE - return (void*)GetProcAddress(m_handle, (const wchar_t*)QString::fromLatin1(symbol).utf16()); + return (void*)GetProcAddress(m_handle, (const wchar_t*)QString::fromLatin1(symbol).utf16()); #else - return (void*)GetProcAddress(m_handle, symbol); + return (void*)GetProcAddress(m_handle, symbol); #endif } @@ -97,6 +97,7 @@ public: } static Q_CORE_EXPORT HINSTANCE load(const wchar_t *lpFileName, bool onlySystemDirectory = true); + private: HINSTANCE m_handle; QString m_libraryName; @@ -105,6 +106,6 @@ private: QT_END_NAMESPACE -#endif //Q_OS_WIN +#endif // Q_OS_WIN -#endif //QSYSTEMLIBRARY_P_H +#endif // QSYSTEMLIBRARY_P_H -- cgit v0.12 From f3f65928525465e20f40e89d0855a1f32de6d8a4 Mon Sep 17 00:00:00 2001 From: Andreas Aardal Hanssen Date: Thu, 29 Sep 2011 14:54:15 +0200 Subject: Fix bug in QGraphicsItem::isVisibleTo(). Task-number: QTBUG-21612 Reviewed-by: James Perrett Reviewed-by: Magne Pettersen Zachrisen Merge-request: 1396 Reviewed-by: Jan-Arve Saether --- src/gui/graphicsview/qgraphicsitem.cpp | 20 ++--- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 108 +++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 9 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 9092593..f7ae045 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -2237,7 +2237,8 @@ bool QGraphicsItem::isVisible() const returned. \a parent can be 0, in which case this function will return whether the item is visible to the scene or not. - An item may not be visible to its ancestors even if isVisible() is true. If + An item may not be visible to its ancestors even if isVisible() is true. It + may also be visible to its ancestors even if isVisible() is false. If any ancestor is hidden, the item itself will be implicitly hidden, in which case this function will return false. @@ -2245,15 +2246,16 @@ bool QGraphicsItem::isVisible() const */ bool QGraphicsItem::isVisibleTo(const QGraphicsItem *parent) const { - if (!d_ptr->visible) + const QGraphicsItem *p = this; + if (d_ptr->explicitlyHidden) return false; - if (parent == this) - return true; - if (parentItem() && parentItem()->isVisibleTo(parent)) - return true; - if (!parent && !parentItem()) - return true; - return false; + do { + if (p == parent) + return true; + if (p->d_ptr->explicitlyHidden) + return false; + } while ((p = p->d_ptr->parent)); + return parent == 0; } /*! diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 9b834d5..b6a402e 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -306,6 +306,7 @@ private slots: void inputMethodHints(); void toolTip(); void visible(); + void isVisibleTo(); void explicitlyVisible(); void enabled(); void explicitlyEnabled(); @@ -1138,6 +1139,113 @@ void tst_QGraphicsItem::visible() QVERIFY(!item->hasFocus()); } +void tst_QGraphicsItem::isVisibleTo() +{ + QGraphicsScene scene; + QGraphicsItem *parent = scene.addRect(QRectF(0, 0, 100, 100)); + QGraphicsItem *child = scene.addRect(QRectF(25, 25, 50, 50)); + QGraphicsItem *grandChild = scene.addRect(QRectF(50, 50, 50, 50)); + QGraphicsItem *stranger = scene.addRect(100, 100, 100, 100); + + child->setParentItem(parent); + grandChild->setParentItem(child); + + QVERIFY(grandChild->isVisible()); + QVERIFY(grandChild->isVisibleTo(grandChild)); + QVERIFY(grandChild->isVisibleTo(child)); + QVERIFY(grandChild->isVisibleTo(parent)); + QVERIFY(grandChild->isVisibleTo(0)); + QVERIFY(child->isVisible()); + QVERIFY(child->isVisibleTo(child)); + QVERIFY(child->isVisibleTo(parent)); + QVERIFY(child->isVisibleTo(0)); + QVERIFY(parent->isVisible()); + QVERIFY(parent->isVisibleTo(parent)); + QVERIFY(parent->isVisibleTo(0)); + QVERIFY(!parent->isVisibleTo(child)); + QVERIFY(!child->isVisibleTo(grandChild)); + QVERIFY(!grandChild->isVisibleTo(stranger)); + QVERIFY(!child->isVisibleTo(stranger)); + QVERIFY(!parent->isVisibleTo(stranger)); + QVERIFY(!stranger->isVisibleTo(grandChild)); + QVERIFY(!stranger->isVisibleTo(child)); + QVERIFY(!stranger->isVisibleTo(parent)); + + // Case 1: only parent is explicitly hidden + parent->hide(); + + QVERIFY(!grandChild->isVisible()); + QVERIFY(grandChild->isVisibleTo(grandChild)); + QVERIFY(grandChild->isVisibleTo(child)); + QVERIFY(grandChild->isVisibleTo(parent)); + QVERIFY(!grandChild->isVisibleTo(0)); + QVERIFY(!child->isVisible()); + QVERIFY(child->isVisibleTo(child)); + QVERIFY(child->isVisibleTo(parent)); + QVERIFY(!child->isVisibleTo(0)); + QVERIFY(!parent->isVisible()); + QVERIFY(!parent->isVisibleTo(parent)); + QVERIFY(!parent->isVisibleTo(0)); + QVERIFY(!parent->isVisibleTo(child)); + QVERIFY(!child->isVisibleTo(grandChild)); + QVERIFY(!grandChild->isVisibleTo(stranger)); + QVERIFY(!child->isVisibleTo(stranger)); + QVERIFY(!parent->isVisibleTo(stranger)); + QVERIFY(!stranger->isVisibleTo(grandChild)); + QVERIFY(!stranger->isVisibleTo(child)); + QVERIFY(!stranger->isVisibleTo(parent)); + + // Case 2: only child is hidden + parent->show(); + child->hide(); + + QVERIFY(!grandChild->isVisible()); + QVERIFY(grandChild->isVisibleTo(grandChild)); + QVERIFY(grandChild->isVisibleTo(child)); + QVERIFY(!grandChild->isVisibleTo(parent)); + QVERIFY(!grandChild->isVisibleTo(0)); + QVERIFY(!child->isVisible()); + QVERIFY(!child->isVisibleTo(child)); + QVERIFY(!child->isVisibleTo(parent)); + QVERIFY(!child->isVisibleTo(0)); + QVERIFY(parent->isVisible()); + QVERIFY(parent->isVisibleTo(parent)); + QVERIFY(parent->isVisibleTo(0)); + QVERIFY(!parent->isVisibleTo(child)); + QVERIFY(!child->isVisibleTo(grandChild)); + QVERIFY(!grandChild->isVisibleTo(stranger)); + QVERIFY(!child->isVisibleTo(stranger)); + QVERIFY(!parent->isVisibleTo(stranger)); + QVERIFY(!stranger->isVisibleTo(grandChild)); + QVERIFY(!stranger->isVisibleTo(child)); + QVERIFY(!stranger->isVisibleTo(parent)); + + // Case 3: only grand child is hidden + child->show(); + grandChild->hide(); + + QVERIFY(!grandChild->isVisible()); + QVERIFY(!grandChild->isVisibleTo(grandChild)); + QVERIFY(!grandChild->isVisibleTo(child)); + QVERIFY(!grandChild->isVisibleTo(parent)); + QVERIFY(!grandChild->isVisibleTo(0)); + QVERIFY(child->isVisible()); + QVERIFY(child->isVisibleTo(child)); + QVERIFY(child->isVisibleTo(parent)); + QVERIFY(child->isVisibleTo(0)); + QVERIFY(parent->isVisible()); + QVERIFY(parent->isVisibleTo(parent)); + QVERIFY(parent->isVisibleTo(0)); + QVERIFY(!parent->isVisibleTo(child)); + QVERIFY(!child->isVisibleTo(grandChild)); + QVERIFY(!grandChild->isVisibleTo(stranger)); + QVERIFY(!child->isVisibleTo(stranger)); + QVERIFY(!parent->isVisibleTo(stranger)); + QVERIFY(!stranger->isVisibleTo(grandChild)); + QVERIFY(!stranger->isVisibleTo(child)); + QVERIFY(!stranger->isVisibleTo(parent)); +} + void tst_QGraphicsItem::explicitlyVisible() { QGraphicsScene scene; -- cgit v0.12 From 633e03367031ef6e36dddc27a85e7a5c05285d65 Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Tue, 4 Oct 2011 14:53:19 +1000 Subject: Fix deployment for declarative tests, examples on Symbian Task-number: QTBUG-21306 Reviewed-by: Rohan McGovern --- examples/declarative/cppextensions/imageprovider/imageprovider.pro | 2 +- examples/declarative/cppextensions/qwidgets/qwidgets.pro | 2 +- src/imports/folderlistmodel/folderlistmodel.pro | 4 ++-- src/imports/gestures/gestures.pro | 6 +++--- src/imports/particles/particles.pro | 6 +++--- src/imports/shaders/shaders.pro | 2 +- tests/auto/declarative/examples/examples.pro | 2 +- tests/auto/declarative/moduleqt47/moduleqt47.pro | 2 +- tests/auto/declarative/parserstress/parserstress.pro | 2 +- tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro | 2 +- .../qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro | 2 +- .../declarative/qdeclarativeanimations/qdeclarativeanimations.pro | 2 +- .../declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro | 2 +- tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro | 2 +- .../declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro | 2 +- .../declarative/qdeclarativeconnection/qdeclarativeconnection.pro | 2 +- tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro | 2 +- .../declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro | 2 +- .../declarative/qdeclarativeflickable/qdeclarativeflickable.pro | 2 +- .../auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro | 2 +- .../declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro | 2 +- .../qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro | 2 +- .../declarative/qdeclarativefontloader/qdeclarativefontloader.pro | 2 +- .../auto/declarative/qdeclarativegridview/qdeclarativegridview.pro | 2 +- tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro | 2 +- tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro | 2 +- tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro | 2 +- .../auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro | 2 +- .../declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro | 2 +- .../declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro | 2 +- .../auto/declarative/qdeclarativelistview/qdeclarativelistview.pro | 2 +- tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro | 2 +- .../declarative/qdeclarativemousearea/qdeclarativemousearea.pro | 2 +- .../declarative/qdeclarativeparticles/qdeclarativeparticles.pro | 2 +- .../auto/declarative/qdeclarativepathview/qdeclarativepathview.pro | 2 +- .../declarative/qdeclarativepincharea/qdeclarativepincharea.pro | 2 +- .../declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro | 2 +- .../declarative/qdeclarativepositioners/qdeclarativepositioners.pro | 2 +- .../auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro | 2 +- tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro | 2 +- .../auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro | 2 +- .../qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro | 2 +- .../qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro | 2 +- .../qdeclarativespringanimation/qdeclarativespringanimation.pro | 2 +- .../declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro | 2 +- tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro | 2 +- tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro | 2 +- .../auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro | 2 +- .../declarative/qdeclarativetextinput/qdeclarativetextinput.pro | 2 +- .../declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro | 2 +- tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro | 2 +- tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro | 2 +- .../qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro | 2 +- tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro | 2 +- .../qdeclarativeworkerscript/qdeclarativeworkerscript.pro | 2 +- .../qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro | 2 +- .../qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro | 2 +- tests/auto/declarative/qmlvisual/qmlvisual.pro | 2 +- tests/benchmarks/declarative/binding/binding.pro | 2 +- .../benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro | 2 +- tests/benchmarks/declarative/script/script.pro | 2 +- 61 files changed, 66 insertions(+), 66 deletions(-) diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider.pro b/examples/declarative/cppextensions/imageprovider/imageprovider.pro index 7149986..9797a3f 100644 --- a/examples/declarative/cppextensions/imageprovider/imageprovider.pro +++ b/examples/declarative/cppextensions/imageprovider/imageprovider.pro @@ -24,5 +24,5 @@ symbian:{ importFiles.sources = ImageProviderCore/qmlimageproviderplugin.dll ImageProviderCore/qmldir importFiles.path = ImageProviderCore - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } diff --git a/examples/declarative/cppextensions/qwidgets/qwidgets.pro b/examples/declarative/cppextensions/qwidgets/qwidgets.pro index 2e610f9..3353a8d 100644 --- a/examples/declarative/cppextensions/qwidgets/qwidgets.pro +++ b/examples/declarative/cppextensions/qwidgets/qwidgets.pro @@ -20,5 +20,5 @@ symbian:{ importFiles.sources = QWidgets/qmlqwidgetsplugin.dll QWidgets/qmldir importFiles.path = QWidgets - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } diff --git a/src/imports/folderlistmodel/folderlistmodel.pro b/src/imports/folderlistmodel/folderlistmodel.pro index 8964ab0..d369ed1 100644 --- a/src/imports/folderlistmodel/folderlistmodel.pro +++ b/src/imports/folderlistmodel/folderlistmodel.pro @@ -19,8 +19,8 @@ symbian:{ isEmpty(DESTDIR):importFiles.sources = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH - - DEPLOYMENT = importFiles + + DEPLOYMENT += importFiles } INSTALLS += target qmldir diff --git a/src/imports/gestures/gestures.pro b/src/imports/gestures/gestures.pro index a4c914d..f9e71fa 100644 --- a/src/imports/gestures/gestures.pro +++ b/src/imports/gestures/gestures.pro @@ -15,12 +15,12 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH symbian:{ TARGET.UID3 = 0x2002131F - + isEmpty(DESTDIR):importFiles.sources = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH - - DEPLOYMENT = importFiles + + DEPLOYMENT += importFiles } INSTALLS += target qmldir diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro index bb9da01..59cc16a 100644 --- a/src/imports/particles/particles.pro +++ b/src/imports/particles/particles.pro @@ -19,12 +19,12 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH symbian:{ TARGET.UID3 = 0x2002131E - + isEmpty(DESTDIR):importFiles.sources = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH - - DEPLOYMENT = importFiles + + DEPLOYMENT += importFiles } INSTALLS += target qmldir diff --git a/src/imports/shaders/shaders.pro b/src/imports/shaders/shaders.pro index d7a6275..51a9a91 100644 --- a/src/imports/shaders/shaders.pro +++ b/src/imports/shaders/shaders.pro @@ -32,7 +32,7 @@ symbian:{ isEmpty(DESTDIR):importFiles.sources = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } INSTALLS += target qmldir diff --git a/tests/auto/declarative/examples/examples.pro b/tests/auto/declarative/examples/examples.pro index 2e243b4..1a0dc55 100644 --- a/tests/auto/declarative/examples/examples.pro +++ b/tests/auto/declarative/examples/examples.pro @@ -9,7 +9,7 @@ include(../../../../tools/qml/qml.pri) symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/moduleqt47/moduleqt47.pro b/tests/auto/declarative/moduleqt47/moduleqt47.pro index 4ee634e..711e24c 100644 --- a/tests/auto/declarative/moduleqt47/moduleqt47.pro +++ b/tests/auto/declarative/moduleqt47/moduleqt47.pro @@ -7,7 +7,7 @@ SOURCES += tst_moduleqt47.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/parserstress/parserstress.pro b/tests/auto/declarative/parserstress/parserstress.pro index bb1d69f..17f297b 100644 --- a/tests/auto/declarative/parserstress/parserstress.pro +++ b/tests/auto/declarative/parserstress/parserstress.pro @@ -7,7 +7,7 @@ SOURCES += tst_parserstress.cpp symbian: { importFiles.sources = ..\\..\\qscriptjstestsuite\\tests importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro b/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro index 9798bb6..6295079 100644 --- a/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro +++ b/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro @@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro b/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro index 0a2f0f2..8c2259a 100644 --- a/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro +++ b/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro @@ -7,7 +7,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro b/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro index ed47dca..578f37b 100644 --- a/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro +++ b/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro @@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro b/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro index cfb59ef..7ba3a7d 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro +++ b/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro @@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro b/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro index a7ba2a8..0cdaada 100644 --- a/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro +++ b/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativebinding.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro b/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro index a21761b..0e41c13 100644 --- a/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro +++ b/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativeborderimage.cpp ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro b/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro index d06ce4f..33d81ba 100644 --- a/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro +++ b/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeconnection.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro b/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro index 415d4e2..1866a43 100644 --- a/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro +++ b/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativedom.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro b/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro index 58cad34..2eb333a 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro +++ b/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro @@ -15,7 +15,7 @@ INCLUDEPATH += ../shared symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro b/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro index be0ba6c..3f8b5e9 100644 --- a/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro +++ b/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeflickable.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro b/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro index 759e80b..cb42418 100644 --- a/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro +++ b/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeflipable.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro b/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro index 24749c6..3724a78 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro +++ b/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro @@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro b/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro index 91bf4a7..3299786 100644 --- a/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro +++ b/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativefolderlistmodel.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro b/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro index 01dca26..fbd2550 100644 --- a/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro +++ b/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativefontloader.cpp ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro b/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro index a99a1b9..4ea1e47 100644 --- a/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro +++ b/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativegridview.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro b/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro index 244a1e1..e5db298 100644 --- a/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro +++ b/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativeimage.cpp ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro b/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro index 2c20e7e..188ea23 100644 --- a/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro +++ b/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeinfo.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro b/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro index f4901c4..26bd624 100644 --- a/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro +++ b/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeitem.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro b/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro index 43c451f..d702082 100644 --- a/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro +++ b/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro @@ -14,7 +14,7 @@ SOURCES += ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro b/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro index 5076e51..b74ea98 100644 --- a/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro +++ b/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativelayoutitem.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro b/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro index e90db49..d1146b1 100644 --- a/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro +++ b/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativelistmodel.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro index 8c99f08..e3df2c3 100644 --- a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro +++ b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativelistview.cpp incrementalmodel.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro b/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro index b07bf9e..29b9eb9 100644 --- a/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro +++ b/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro @@ -10,7 +10,7 @@ SOURCES += tst_qdeclarativeloader.cpp \ symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro b/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro index 3d39aa8..fec73c5 100644 --- a/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro +++ b/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativemousearea.cpp ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro b/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro index f9ca90f..9762b7c 100644 --- a/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro +++ b/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeparticles.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro b/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro index 04fd26b..3270c5e 100644 --- a/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro +++ b/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativepathview.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativepincharea/qdeclarativepincharea.pro b/tests/auto/declarative/qdeclarativepincharea/qdeclarativepincharea.pro index 2c13644..3bdb3fc 100644 --- a/tests/auto/declarative/qdeclarativepincharea/qdeclarativepincharea.pro +++ b/tests/auto/declarative/qdeclarativepincharea/qdeclarativepincharea.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativepincharea.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro b/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro index 3130364..2e2c6bc 100644 --- a/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro +++ b/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro @@ -12,7 +12,7 @@ SOURCES += ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro b/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro index 5dc7bb8..f2c9eee 100644 --- a/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro +++ b/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro @@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro b/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro index 4121a33..504a371 100644 --- a/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro +++ b/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeproperty.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro b/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro index 9e698fe..a963140 100644 --- a/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro +++ b/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro @@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro b/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro index f3ff9ed..0f3773c 100644 --- a/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro +++ b/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativerepeater.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro index c2d30a0..8a63355 100644 --- a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro +++ b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro @@ -11,7 +11,7 @@ INCLUDEPATH += ../shared symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro b/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro index 872aeb9..e770d46 100644 --- a/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro +++ b/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativesmoothedanimation.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro index 213b262..07bcbe7 100644 --- a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro +++ b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativespringanimation.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro index 1462c9a..400512d 100644 --- a/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro +++ b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativesqldatabase.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro b/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro index 2bae041..cb3e0fe 100644 --- a/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro +++ b/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativestates.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro index c1a36fd..28a9fcd 100644 --- a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro +++ b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro @@ -12,7 +12,7 @@ SOURCES += ../shared/testhttpserver.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro b/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro index 4b6bd49..8606eb0 100644 --- a/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro +++ b/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro @@ -8,7 +8,7 @@ HEADERS += ../shared/testhttpserver.h symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro b/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro index 8f42448..7d178d7 100644 --- a/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro +++ b/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativetextinput.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro b/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro index 90e46d3..56c3cd4 100644 --- a/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro +++ b/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro @@ -10,7 +10,7 @@ SOURCES += tst_qdeclarativevaluetypes.cpp \ symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro index 21a9195..2f0a474 100644 --- a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro +++ b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeview.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro b/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro index 6189916..08adf26 100644 --- a/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro +++ b/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro @@ -9,7 +9,7 @@ SOURCES += tst_qdeclarativeviewer.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro index 92e5f60..d0d9b36 100644 --- a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativevisualdatamodel.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro b/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro index 562a9fb..2ab27a1 100644 --- a/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro +++ b/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro @@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativewebview.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro b/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro index 2f8f23d..9d4e0ed 100644 --- a/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro +++ b/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro @@ -7,7 +7,7 @@ SOURCES += tst_qdeclarativeworkerscript.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro b/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro index 619b239..bfd47c5 100644 --- a/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro +++ b/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro @@ -11,7 +11,7 @@ SOURCES += tst_qdeclarativexmlhttprequest.cpp \ symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro index efcea12..80c5711 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro +++ b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro @@ -11,7 +11,7 @@ SOURCES += tst_qdeclarativexmllistmodel.cpp symbian: { importFiles.sources = data importFiles.path = . - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/auto/declarative/qmlvisual/qmlvisual.pro b/tests/auto/declarative/qmlvisual/qmlvisual.pro index b2c5b4f..0977fe4 100644 --- a/tests/auto/declarative/qmlvisual/qmlvisual.pro +++ b/tests/auto/declarative/qmlvisual/qmlvisual.pro @@ -27,7 +27,7 @@ symbian: { repeater \ selftest_noimages \ webview - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += QT_TEST_SOURCE_DIR=\"\\\"$$PWD\\\"\" } diff --git a/tests/benchmarks/declarative/binding/binding.pro b/tests/benchmarks/declarative/binding/binding.pro index c1a8223..b93977a 100644 --- a/tests/benchmarks/declarative/binding/binding.pro +++ b/tests/benchmarks/declarative/binding/binding.pro @@ -10,7 +10,7 @@ HEADERS += testtypes.h symbian { data.sources = data data.path = . - DEPLOYMENT = data + DEPLOYMENT += data } else { # Define SRCDIR equal to test's source directory DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro b/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro index a68792b..313282b 100644 --- a/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro +++ b/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro @@ -10,7 +10,7 @@ SOURCES += tst_qdeclarativeimage.cpp symbian { importFiles.sources = image.png importFiles.path = - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } diff --git a/tests/benchmarks/declarative/script/script.pro b/tests/benchmarks/declarative/script/script.pro index 685ba03..759c6dd 100644 --- a/tests/benchmarks/declarative/script/script.pro +++ b/tests/benchmarks/declarative/script/script.pro @@ -10,7 +10,7 @@ SOURCES += tst_script.cpp symbian { importFiles.sources = data importFiles.path = - DEPLOYMENT = importFiles + DEPLOYMENT += importFiles } else { DEFINES += SRCDIR=\\\"$$PWD\\\" } -- cgit v0.12 From aefda8ce30695c5383860eab709acca345d290dc Mon Sep 17 00:00:00 2001 From: Mikko Knuutila Date: Tue, 4 Oct 2011 15:00:27 +0200 Subject: QTBUG-21058: Fix for possible crashes in QTextControl::setCursorWidth() Cursor's width is now queried from the style only when the user calls cursorWidth(). Earlier it was queried already in the ctor, which caused crashes if the application was guiless. Merge-request: 2697 Reviewed-by: Jan-Arve Saether --- src/gui/text/qtextcontrol.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp index aeeef85..5babbc2 100644 --- a/src/gui/text/qtextcontrol.cpp +++ b/src/gui/text/qtextcontrol.cpp @@ -408,7 +408,6 @@ void QTextControlPrivate::init(Qt::TextFormat format, const QString &text, QText setContent(format, text, document); doc->setUndoRedoEnabled(interactionFlags & Qt::TextEditable); - q->setCursorWidth(-1); } void QTextControlPrivate::setContent(Qt::TextFormat format, const QString &text, QTextDocument *document) @@ -2236,7 +2235,10 @@ int QTextControl::cursorWidth() const { #ifndef QT_NO_PROPERTIES Q_D(const QTextControl); - return d->doc->documentLayout()->property("cursorWidth").toInt(); + int width = d->doc->documentLayout()->property("cursorWidth").toInt(); + if (width == -1) + width = QApplication::style()->pixelMetric(QStyle::PM_TextCursorWidth); + return width; #else return 1; #endif @@ -2248,8 +2250,6 @@ void QTextControl::setCursorWidth(int width) #ifdef QT_NO_PROPERTIES Q_UNUSED(width); #else - if (width == -1) - width = QApplication::style()->pixelMetric(QStyle::PM_TextCursorWidth); d->doc->documentLayout()->setProperty("cursorWidth", width); #endif d->repaintCursor(); -- cgit v0.12 From ed430f5b82df464e8c144bd809eb82f441c0197d Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Wed, 5 Oct 2011 13:50:08 +1000 Subject: Fix more test DEPLOYMENT statements for Symbian Reviewed-by: Rohan McGovern --- tests/auto/qapplication/test/test.pro | 2 +- tests/auto/qaudioinput/qaudioinput.pro | 2 +- tests/auto/qaudiooutput/qaudiooutput.pro | 2 +- tests/auto/qchar/qchar.pro | 4 ++-- tests/auto/qclipboard/test/test.pro | 6 +++--- tests/auto/qfile/test/test.pro | 2 +- tests/auto/qfileinfo/qfileinfo.pro | 4 ++-- tests/auto/qhttp/qhttp.pro | 4 ++-- tests/auto/qlocalsocket/test/test.pro | 4 ++-- tests/auto/qsound/qsound.pro | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/auto/qapplication/test/test.pro b/tests/auto/qapplication/test/test.pro index d946e7e..e1193c2 100644 --- a/tests/auto/qapplication/test/test.pro +++ b/tests/auto/qapplication/test/test.pro @@ -8,7 +8,7 @@ wince* { additional.path = desktopsettingsaware someTest.sources = test.pro someTest.path = test - DEPLOYMENT = additional deploy someTest + DEPLOYMENT += additional deploy someTest } symbian: { diff --git a/tests/auto/qaudioinput/qaudioinput.pro b/tests/auto/qaudioinput/qaudioinput.pro index 5eb1613..0bbbb19 100644 --- a/tests/auto/qaudioinput/qaudioinput.pro +++ b/tests/auto/qaudioinput/qaudioinput.pro @@ -6,7 +6,7 @@ QT = core multimedia wince* { deploy.sources += 4.wav - DEPLOYMENT = deploy + DEPLOYMENT += deploy DEFINES += SRCDIR=\\\"\\\" QT += gui } else { diff --git a/tests/auto/qaudiooutput/qaudiooutput.pro b/tests/auto/qaudiooutput/qaudiooutput.pro index e1734e0..09d7ae3 100644 --- a/tests/auto/qaudiooutput/qaudiooutput.pro +++ b/tests/auto/qaudiooutput/qaudiooutput.pro @@ -6,7 +6,7 @@ QT = core multimedia wince*|symbian: { deploy.sources += 4.wav - DEPLOYMENT = deploy + DEPLOYMENT += deploy !symbian { DEFINES += SRCDIR=\\\"\\\" QT += gui diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro index 3813e4e..2cb5201 100644 --- a/tests/auto/qchar/qchar.pro +++ b/tests/auto/qchar/qchar.pro @@ -4,8 +4,8 @@ SOURCES += tst_qchar.cpp QT = core wince*|symbian: { -deploy.sources += NormalizationTest.txt -DEPLOYMENT = deploy + deploy.sources += NormalizationTest.txt + DEPLOYMENT += deploy } symbian: { diff --git a/tests/auto/qclipboard/test/test.pro b/tests/auto/qclipboard/test/test.pro index 97b0c9c..9043f69 100644 --- a/tests/auto/qclipboard/test/test.pro +++ b/tests/auto/qclipboard/test/test.pro @@ -15,7 +15,7 @@ wince*|symbian: { copier.path = copier paster.sources = ../paster/paster.exe paster.path = paster - + symbian: { LIBS += -lbafl -lestor -letext @@ -27,6 +27,6 @@ wince*|symbian: { reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/paster_reg.rsc reg_resource.path = $$REG_RESOURCE_IMPORT_DIR } - - DEPLOYMENT = copier paster rsc reg_resource + + DEPLOYMENT += copier paster rsc reg_resource } \ No newline at end of file diff --git a/tests/auto/qfile/test/test.pro b/tests/auto/qfile/test/test.pro index 70c93ce..9a2d847 100644 --- a/tests/auto/qfile/test/test.pro +++ b/tests/auto/qfile/test/test.pro @@ -10,7 +10,7 @@ wince*|symbian { resour.sources += ..\\resources\\file1.ext1 resour.path = resources - DEPLOYMENT = files resour + DEPLOYMENT += files resour } wince* { diff --git a/tests/auto/qfileinfo/qfileinfo.pro b/tests/auto/qfileinfo/qfileinfo.pro index 30656e2..8f04178 100644 --- a/tests/auto/qfileinfo/qfileinfo.pro +++ b/tests/auto/qfileinfo/qfileinfo.pro @@ -10,14 +10,14 @@ wince*:|symbian: { deploy.sources += qfileinfo.qrc tst_qfileinfo.cpp res.sources = resources\\file1 resources\\file1.ext1 resources\\file1.ext1.ext2 res.path = resources - DEPLOYMENT = deploy res + DEPLOYMENT += deploy res } symbian { TARGET.CAPABILITY=AllFiles LIBS *= -lefsrv INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs - } +} # support for running test from shadow build directory wince* { diff --git a/tests/auto/qhttp/qhttp.pro b/tests/auto/qhttp/qhttp.pro index c0be518..b7b78f1 100644 --- a/tests/auto/qhttp/qhttp.pro +++ b/tests/auto/qhttp/qhttp.pro @@ -11,7 +11,7 @@ wince*: { cgi.path = webserver/cgi-bin addFiles.sources = rfc3252.txt trolltech addFiles.path = . - DEPLOYMENT = addFiles webFiles cgi + DEPLOYMENT += addFiles webFiles cgi DEFINES += SRCDIR=\\\"\\\" } else:symbian { webFiles.sources = webserver/* @@ -20,7 +20,7 @@ wince*: { cgi.path = webserver/cgi-bin addFiles.sources = rfc3252.txt trolltech addFiles.path = . - DEPLOYMENT = addFiles webFiles cgi + DEPLOYMENT += addFiles webFiles cgi TARGET.CAPABILITY = NetworkServices } else:vxworks*: { DEFINES += SRCDIR=\\\"\\\" diff --git a/tests/auto/qlocalsocket/test/test.pro b/tests/auto/qlocalsocket/test/test.pro index 687aae2..ffdadd3 100644 --- a/tests/auto/qlocalsocket/test/test.pro +++ b/tests/auto/qlocalsocket/test/test.pro @@ -42,9 +42,9 @@ symbian { wince*|symbian { scriptFiles.sources = ../lackey/scripts/*.js scriptFiles.path = lackey/scripts - DEPLOYMENT = additionalFiles scriptFiles + DEPLOYMENT += additionalFiles scriptFiles QT += script # for easy deployment of QtScript - + requires(contains(QT_CONFIG,script)) } diff --git a/tests/auto/qsound/qsound.pro b/tests/auto/qsound/qsound.pro index bb1981c..e3279f3 100644 --- a/tests/auto/qsound/qsound.pro +++ b/tests/auto/qsound/qsound.pro @@ -3,7 +3,7 @@ SOURCES += tst_qsound.cpp wince*|symbian: { deploy.sources += 4.wav - DEPLOYMENT = deploy + DEPLOYMENT += deploy !symbian:DEFINES += SRCDIR=\\\"\\\" } else { DEFINES += SRCDIR=\\\"$$PWD/\\\" -- cgit v0.12 From 48a73353029104a4d2c5fda2c9fb007d1924c9ec Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 7 Oct 2011 14:45:12 +0200 Subject: make QElapsedTimer use QSystemLibrary on win we also need to ensure the counterFrequency was already set up, thus volatile (which fixes possible race condition) Merge-request: 2655 Reviewed-by: Jan-Arve Saether --- src/corelib/tools/qelapsedtimer_win.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/corelib/tools/qelapsedtimer_win.cpp b/src/corelib/tools/qelapsedtimer_win.cpp index d79dc5d..e6bce27 100644 --- a/src/corelib/tools/qelapsedtimer_win.cpp +++ b/src/corelib/tools/qelapsedtimer_win.cpp @@ -42,6 +42,8 @@ #include "qelapsedtimer.h" #include +#include + typedef ULONGLONG (WINAPI *PtrGetTickCount64)(void); static PtrGetTickCount64 ptrGetTickCount64 = 0; @@ -52,21 +54,17 @@ static quint64 counterFrequency = 0; static void resolveLibs() { - static bool done = false; + static volatile bool done = false; if (done) return; // try to get GetTickCount64 from the system - HMODULE kernel32 = GetModuleHandleW(L"kernel32"); - if (!kernel32) + QSystemLibrary kernel32(QLatin1String("kernel32")); + if (!kernel32.load()) return; -#if defined(Q_OS_WINCE) // does this function exist on WinCE, or will ever exist? - ptrGetTickCount64 = (PtrGetTickCount64)GetProcAddress(kernel32, L"GetTickCount64"); -#else - ptrGetTickCount64 = (PtrGetTickCount64)GetProcAddress(kernel32, "GetTickCount64"); -#endif + ptrGetTickCount64 = (PtrGetTickCount64)kernel32.resolve("GetTickCount64"); // Retrieve the number of high-resolution performance counter ticks per second LARGE_INTEGER frequency; -- cgit v0.12 From 80a8c4c8615da574b155b7624eab1c8323de3ee3 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 7 Oct 2011 14:45:19 +0200 Subject: nativewifi bearer plugin: prefer DLL Safe Search mode by using QSystemLibrary instead of QLibrary Merge-request: 2655 Reviewed-by: Jan-Arve Saether --- src/plugins/bearer/nativewifi/main.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/plugins/bearer/nativewifi/main.cpp b/src/plugins/bearer/nativewifi/main.cpp index ce7d906..cbdfd99 100644 --- a/src/plugins/bearer/nativewifi/main.cpp +++ b/src/plugins/bearer/nativewifi/main.cpp @@ -44,7 +44,7 @@ #include #include -#include +#include #include @@ -63,30 +63,33 @@ static void resolveLibrary() QMutexLocker locker(QMutexPool::globalInstanceGet(&local_WlanOpenHandle)); #endif - if (!triedResolve) { + if (triedResolve) + return; + + QSystemLibrary wlanapi(QLatin1String("wlanapi")); + if (wlanapi.load()) { local_WlanOpenHandle = (WlanOpenHandleProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanOpenHandle"); + wlanapi.resolve("WlanOpenHandle"); local_WlanRegisterNotification = (WlanRegisterNotificationProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanRegisterNotification"); + wlanapi.resolve("WlanRegisterNotification"); local_WlanEnumInterfaces = (WlanEnumInterfacesProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanEnumInterfaces"); + wlanapi.resolve("WlanEnumInterfaces"); local_WlanGetAvailableNetworkList = (WlanGetAvailableNetworkListProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanGetAvailableNetworkList"); + wlanapi.resolve("WlanGetAvailableNetworkList"); local_WlanQueryInterface = (WlanQueryInterfaceProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanQueryInterface"); + wlanapi.resolve("WlanQueryInterface"); local_WlanConnect = (WlanConnectProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanConnect"); + wlanapi.resolve("WlanConnect"); local_WlanDisconnect = (WlanDisconnectProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanDisconnect"); + wlanapi.resolve("WlanDisconnect"); local_WlanScan = (WlanScanProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanScan"); + wlanapi.resolve("WlanScan"); local_WlanFreeMemory = (WlanFreeMemoryProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanFreeMemory"); + wlanapi.resolve("WlanFreeMemory"); local_WlanCloseHandle = (WlanCloseHandleProto) - QLibrary::resolve(QLatin1String("wlanapi.dll"), "WlanCloseHandle"); - - triedResolve = true; + wlanapi.resolve("WlanCloseHandle"); } + triedResolve = true; } } -- cgit v0.12 From 1bfef526ef3d1deb7cf0f11dc1880f33937a85ac Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 7 Oct 2011 14:45:26 +0200 Subject: use QSystemLibrary::resolve() instead of GetProcAddress() win API calls this makes the code more consistent with similar parts and a bit more readable Merge-request: 2655 Reviewed-by: Jan-Arve Saether --- src/corelib/io/qfilesystemengine_win.cpp | 39 ++++++++++++++-------------- src/gui/dialogs/qfiledialog_win.cpp | 10 +++---- src/network/kernel/qnetworkinterface_win.cpp | 19 +++++--------- 3 files changed, 31 insertions(+), 37 deletions(-) diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 98404a5..8622121 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -188,12 +188,12 @@ static void resolveLibs() triedResolve = true; #if !defined(Q_OS_WINCE) - HINSTANCE advapiHnd = QSystemLibrary::load(L"advapi32"); - if (advapiHnd) { - ptrGetNamedSecurityInfoW = (PtrGetNamedSecurityInfoW)GetProcAddress(advapiHnd, "GetNamedSecurityInfoW"); - ptrLookupAccountSidW = (PtrLookupAccountSidW)GetProcAddress(advapiHnd, "LookupAccountSidW"); - ptrBuildTrusteeWithSidW = (PtrBuildTrusteeWithSidW)GetProcAddress(advapiHnd, "BuildTrusteeWithSidW"); - ptrGetEffectiveRightsFromAclW = (PtrGetEffectiveRightsFromAclW)GetProcAddress(advapiHnd, "GetEffectiveRightsFromAclW"); + QSystemLibrary advapi32(QLatin1String("advapi32")); + if (advapi32.load()) { + ptrGetNamedSecurityInfoW = (PtrGetNamedSecurityInfoW)advapi32.resolve("GetNamedSecurityInfoW"); + ptrLookupAccountSidW = (PtrLookupAccountSidW)advapi32.resolve("LookupAccountSidW"); + ptrBuildTrusteeWithSidW = (PtrBuildTrusteeWithSidW)advapi32.resolve("BuildTrusteeWithSidW"); + ptrGetEffectiveRightsFromAclW = (PtrGetEffectiveRightsFromAclW)advapi32.resolve("GetEffectiveRightsFromAclW"); } if (ptrBuildTrusteeWithSidW) { // Create TRUSTEE for current user @@ -208,9 +208,9 @@ static void resolveLibs() } typedef BOOL (WINAPI *PtrAllocateAndInitializeSid)(PSID_IDENTIFIER_AUTHORITY, BYTE, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*); - PtrAllocateAndInitializeSid ptrAllocateAndInitializeSid = (PtrAllocateAndInitializeSid)GetProcAddress(advapiHnd, "AllocateAndInitializeSid"); + PtrAllocateAndInitializeSid ptrAllocateAndInitializeSid = (PtrAllocateAndInitializeSid)advapi32.resolve("AllocateAndInitializeSid"); typedef PVOID (WINAPI *PtrFreeSid)(PSID); - PtrFreeSid ptrFreeSid = (PtrFreeSid)GetProcAddress(advapiHnd, "FreeSid"); + PtrFreeSid ptrFreeSid = (PtrFreeSid)advapi32.resolve("FreeSid"); if (ptrAllocateAndInitializeSid && ptrFreeSid) { // Create TRUSTEE for Everyone (World) SID_IDENTIFIER_AUTHORITY worldAuth = { SECURITY_WORLD_SID_AUTHORITY }; @@ -220,12 +220,14 @@ static void resolveLibs() ptrFreeSid(pWorld); } } - HINSTANCE userenvHnd = QSystemLibrary::load(L"userenv"); - if (userenvHnd) - ptrGetUserProfileDirectoryW = (PtrGetUserProfileDirectoryW)GetProcAddress(userenvHnd, "GetUserProfileDirectoryW"); - HINSTANCE kernel32 = LoadLibrary(L"kernel32"); - if(kernel32) - ptrGetVolumePathNamesForVolumeNameW = (PtrGetVolumePathNamesForVolumeNameW)GetProcAddress(kernel32, "GetVolumePathNamesForVolumeNameW"); + + QSystemLibrary userenv(QLatin1String("userenv")); + if (userenv.load()) + ptrGetUserProfileDirectoryW = (PtrGetUserProfileDirectoryW)userenv.resolve("GetUserProfileDirectoryW"); + + QSystemLibrary kernel32(QLatin1String("kernel32")); + if (kernel32.load()) + ptrGetVolumePathNamesForVolumeNameW = (PtrGetVolumePathNamesForVolumeNameW)kernel32.resolve("GetVolumePathNamesForVolumeNameW"); #endif } } @@ -254,11 +256,10 @@ static bool resolveUNCLibs() #endif triedResolve = true; #if !defined(Q_OS_WINCE) - HINSTANCE hLib = QSystemLibrary::load(L"Netapi32"); - if (hLib) { - ptrNetShareEnum = (PtrNetShareEnum)GetProcAddress(hLib, "NetShareEnum"); - if (ptrNetShareEnum) - ptrNetApiBufferFree = (PtrNetApiBufferFree)GetProcAddress(hLib, "NetApiBufferFree"); + QSystemLibrary netapi32(QLatin1String("kernel32")); + if (netapi32.load()) { + ptrNetShareEnum = (PtrNetShareEnum)netapi32.resolve("NetShareEnum"); + ptrNetApiBufferFree = (PtrNetApiBufferFree)netapi32.resolve("NetApiBufferFree"); } #endif } diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index de8e33d..30f5f18 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -99,16 +99,16 @@ static void qt_win_resolve_libs() triedResolve = true; #if !defined(Q_WS_WINCE) - QSystemLibrary lib(L"shell32"); + QSystemLibrary lib(QLatin1String("shell32")); ptrSHBrowseForFolder = (PtrSHBrowseForFolder)lib.resolve("SHBrowseForFolderW"); ptrSHGetPathFromIDList = (PtrSHGetPathFromIDList)lib.resolve("SHGetPathFromIDListW"); ptrSHGetMalloc = (PtrSHGetMalloc)lib.resolve("SHGetMalloc"); #else // CE stores them in a different lib and does not use unicode version - HINSTANCE handle = LoadLibrary(L"Ceshell"); - ptrSHBrowseForFolder = (PtrSHBrowseForFolder)GetProcAddress(handle, L"SHBrowseForFolder"); - ptrSHGetPathFromIDList = (PtrSHGetPathFromIDList)GetProcAddress(handle, L"SHGetPathFromIDList"); - ptrSHGetMalloc = (PtrSHGetMalloc)GetProcAddress(handle, L"SHGetMalloc"); + QSystemLibrary lib(QLatin1String("Ceshell")); + ptrSHBrowseForFolder = (PtrSHBrowseForFolder)lib.resolve("SHBrowseForFolder"); + ptrSHGetPathFromIDList = (PtrSHGetPathFromIDList)lib.resolve("SHGetPathFromIDList"); + ptrSHGetMalloc = (PtrSHGetMalloc)lib.resolve("SHGetMalloc"); if (ptrSHBrowseForFolder && ptrSHGetPathFromIDList && ptrSHGetMalloc) qt_priv_ptr_valid = true; #endif diff --git a/src/network/kernel/qnetworkinterface_win.cpp b/src/network/kernel/qnetworkinterface_win.cpp index e8b96f6..5f273d7 100644 --- a/src/network/kernel/qnetworkinterface_win.cpp +++ b/src/network/kernel/qnetworkinterface_win.cpp @@ -67,19 +67,12 @@ static void resolveLibs() if (!done) { done = true; - HINSTANCE iphlpapiHnd = QSystemLibrary::load(L"iphlpapi"); - if (iphlpapiHnd == NULL) - return; - -#if defined(Q_OS_WINCE) - ptrGetAdaptersInfo = (PtrGetAdaptersInfo)GetProcAddress(iphlpapiHnd, L"GetAdaptersInfo"); - ptrGetAdaptersAddresses = (PtrGetAdaptersAddresses)GetProcAddress(iphlpapiHnd, L"GetAdaptersAddresses"); - ptrGetNetworkParams = (PtrGetNetworkParams)GetProcAddress(iphlpapiHnd, L"GetNetworkParams"); -#else - ptrGetAdaptersInfo = (PtrGetAdaptersInfo)GetProcAddress(iphlpapiHnd, "GetAdaptersInfo"); - ptrGetAdaptersAddresses = (PtrGetAdaptersAddresses)GetProcAddress(iphlpapiHnd, "GetAdaptersAddresses"); - ptrGetNetworkParams = (PtrGetNetworkParams)GetProcAddress(iphlpapiHnd, "GetNetworkParams"); -#endif + QSystemLibrary iphlpapi(QLatin1String("iphlpapi")); + if (iphlpapi.load()) { + ptrGetAdaptersInfo = (PtrGetAdaptersInfo)iphlpapi.resolve("GetAdaptersInfo"); + ptrGetAdaptersAddresses = (PtrGetAdaptersAddresses)iphlpapi.resolve("GetAdaptersAddresses"); + ptrGetNetworkParams = (PtrGetNetworkParams)iphlpapi.resolve("GetNetworkParams"); + } } } -- cgit v0.12 From 74251fb0fc57b1e0f7db0b561e4aa4c0347f6f37 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 7 Oct 2011 14:45:33 +0200 Subject: simplify the code by using QSystemLibrary a bit smarter Merge-request: 2655 Reviewed-by: Jan-Arve Saether --- src/corelib/kernel/qeventdispatcher_win.cpp | 12 +++++---- src/gui/kernel/qapplication_win.cpp | 41 +++++++++-------------------- src/network/kernel/qhostinfo_win.cpp | 13 ++++----- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 84663fa..3e367b7 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -328,13 +328,15 @@ static void resolveTimerAPI() return; #endif triedResolve = true; -#if !defined(Q_OS_WINCE) - qtimeSetEvent = (ptimeSetEvent)QSystemLibrary::resolve(QLatin1String("winmm"), "timeSetEvent"); - qtimeKillEvent = (ptimeKillEvent)QSystemLibrary::resolve(QLatin1String("winmm"), "timeKillEvent"); +#ifndef Q_OS_WINCE + QSystemLibrary library(QLatin1String("Mmtimer")); #else - qtimeSetEvent = (ptimeSetEvent)QSystemLibrary::resolve(QLatin1String("Mmtimer"), "timeSetEvent"); - qtimeKillEvent = (ptimeKillEvent)QSystemLibrary::resolve(QLatin1String("Mmtimer"), "timeKillEvent"); + QSystemLibrary library(QLatin1String("winmm")); #endif + if (library.load()) { + qtimeSetEvent = (ptimeSetEvent)library.resolve("timeSetEvent"); + qtimeKillEvent = (ptimeKillEvent)library.resolve("timeKillEvent"); + } } } diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 756cb56..bca3acc 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -854,19 +854,15 @@ void qt_init(QApplicationPrivate *priv, int) qt_win_initialize_directdraw(); #ifndef Q_OS_WINCE - ptrUpdateLayeredWindowIndirect = - (PtrUpdateLayeredWindowIndirect) QSystemLibrary::resolve(QLatin1String("user32"), - "UpdateLayeredWindowIndirect"); - ptrUpdateLayeredWindow = - (PtrUpdateLayeredWindow) QSystemLibrary::resolve(QLatin1String("user32"), - "UpdateLayeredWindow"); + QSystemLibrary user32(QLatin1String("user32")); + ptrUpdateLayeredWindowIndirect = (PtrUpdateLayeredWindowIndirect)user32.resolve("UpdateLayeredWindowIndirect"); + ptrUpdateLayeredWindow = (PtrUpdateLayeredWindow)user32.resolve("UpdateLayeredWindow"); if (ptrUpdateLayeredWindow && !ptrUpdateLayeredWindowIndirect) ptrUpdateLayeredWindowIndirect = qt_updateLayeredWindowIndirect; // Notify Vista and Windows 7 that we support highter DPI settings - ptrSetProcessDPIAware = (PtrSetProcessDPIAware) - QSystemLibrary::resolve(QLatin1String("user32"), "SetProcessDPIAware"); + ptrSetProcessDPIAware = (PtrSetProcessDPIAware)user32.resolve("SetProcessDPIAware"); if (ptrSetProcessDPIAware) ptrSetProcessDPIAware(); #endif @@ -886,29 +882,16 @@ void qt_init(QApplicationPrivate *priv, int) priv->GetGestureExtraArgs = (PtrGetGestureExtraArgs) &TKGetGestureExtraArguments; #elif !defined(Q_WS_WINCE) #if !defined(QT_NO_NATIVE_GESTURES) - priv->GetGestureInfo = - (PtrGetGestureInfo)QSystemLibrary::resolve(QLatin1String("user32"), - "GetGestureInfo"); - priv->GetGestureExtraArgs = - (PtrGetGestureExtraArgs)QSystemLibrary::resolve(QLatin1String("user32"), - "GetGestureExtraArgs"); - priv->CloseGestureInfoHandle = - (PtrCloseGestureInfoHandle)QSystemLibrary::resolve(QLatin1String("user32"), - "CloseGestureInfoHandle"); - priv->SetGestureConfig = - (PtrSetGestureConfig)QSystemLibrary::resolve(QLatin1String("user32"), - "SetGestureConfig"); - priv->GetGestureConfig = - (PtrGetGestureConfig)QSystemLibrary::resolve(QLatin1String("user32"), - "GetGestureConfig"); + priv->GetGestureInfo = (PtrGetGestureInfo)user32.resolve("GetGestureInfo"); + priv->GetGestureExtraArgs = (PtrGetGestureExtraArgs)user32.resolve("GetGestureExtraArgs"); + priv->CloseGestureInfoHandle = (PtrCloseGestureInfoHandle)user32.resolve("CloseGestureInfoHandle"); + priv->SetGestureConfig = (PtrSetGestureConfig)user32.resolve("SetGestureConfig"); + priv->GetGestureConfig = (PtrGetGestureConfig)user32.resolve("GetGestureConfig"); #endif // QT_NO_NATIVE_GESTURES QSystemLibrary libTheme(QLatin1String("uxtheme")); - priv->BeginPanningFeedback = - (PtrBeginPanningFeedback)libTheme.resolve("BeginPanningFeedback"); - priv->UpdatePanningFeedback = - (PtrUpdatePanningFeedback)libTheme.resolve("UpdatePanningFeedback"); - priv->EndPanningFeedback = - (PtrEndPanningFeedback)libTheme.resolve("EndPanningFeedback"); + priv->BeginPanningFeedback = (PtrBeginPanningFeedback)libTheme.resolve("BeginPanningFeedback"); + priv->UpdatePanningFeedback = (PtrUpdatePanningFeedback)libTheme.resolve("UpdatePanningFeedback"); + priv->EndPanningFeedback = (PtrEndPanningFeedback)libTheme.resolve("EndPanningFeedback"); #endif #endif // QT_NO_GESTURES } diff --git a/src/network/kernel/qhostinfo_win.cpp b/src/network/kernel/qhostinfo_win.cpp index 6fc5b7b..03e72c4 100644 --- a/src/network/kernel/qhostinfo_win.cpp +++ b/src/network/kernel/qhostinfo_win.cpp @@ -85,14 +85,15 @@ static void resolveLibrary() // Attempt to resolve getaddrinfo(); without it we'll have to fall // back to gethostbyname(), which has no IPv6 support. #if !defined(Q_OS_WINCE) - local_getaddrinfo = (getaddrinfoProto) QSystemLibrary::resolve(QLatin1String("ws2_32"), "getaddrinfo"); - local_freeaddrinfo = (freeaddrinfoProto) QSystemLibrary::resolve(QLatin1String("ws2_32"), "freeaddrinfo"); - local_getnameinfo = (getnameinfoProto) QSystemLibrary::resolve(QLatin1String("ws2_32"), "getnameinfo"); + QSystemLibrary ws2lib(QLatin1String("ws2_32")); #else - local_getaddrinfo = (getaddrinfoProto) QSystemLibrary::resolve(QLatin1String("ws2"), "getaddrinfo"); - local_freeaddrinfo = (freeaddrinfoProto) QSystemLibrary::resolve(QLatin1String("ws2"), "freeaddrinfo"); - local_getnameinfo = (getnameinfoProto) QSystemLibrary::resolve(QLatin1String("ws2"), "getnameinfo"); + QSystemLibrary ws2lib(QLatin1String("ws2")); #endif + if (ws2lib.load()) { + local_getaddrinfo = (getaddrinfoProto)ws2lib.resolve("getaddrinfo"); + local_freeaddrinfo = (freeaddrinfoProto)ws2lib.resolve("freeaddrinfo"); + local_getnameinfo = (getnameinfoProto)ws2lib.resolve("getnameinfo"); + } } #if defined(Q_OS_WINCE) -- cgit v0.12 From a0feeef52efde872c6d6e458c8e15616da0bf74f Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 7 Oct 2011 14:45:40 +0200 Subject: fix possible race conditions the initialization guard must be set after the initialization is done; for the code assumed to be only executed in a single thread, this change was done just for consistency - in order to avoid similar issues by copy-pasting in future Merge-request: 2655 Reviewed-by: Jan-Arve Saether --- src/activeqt/shared/qaxtypes.cpp | 4 ++-- src/corelib/io/qfilesystemengine_win.cpp | 5 +++-- src/corelib/kernel/qeventdispatcher_win.cpp | 3 ++- src/gui/accessible/qaccessible_win.cpp | 2 +- src/gui/dialogs/qfiledialog_win.cpp | 3 ++- src/gui/dialogs/qwizard_win.cpp | 2 +- src/gui/image/qpixmap_mac.cpp | 4 +++- src/gui/kernel/qapplication_win.cpp | 12 ++++++------ src/gui/kernel/qguifunctions_wince.cpp | 5 ++--- src/gui/kernel/qmime_mac.cpp | 4 +++- src/gui/styles/qwindowsvistastyle.cpp | 2 +- src/gui/styles/qwindowsxpstyle.cpp | 2 +- src/gui/text/qfontengine_win.cpp | 5 ++++- src/gui/widgets/qmenu_wince.cpp | 2 +- src/network/kernel/qnetworkinterface_win.cpp | 4 +--- 15 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/activeqt/shared/qaxtypes.cpp b/src/activeqt/shared/qaxtypes.cpp index 8835caf..9452c6a 100644 --- a/src/activeqt/shared/qaxtypes.cpp +++ b/src/activeqt/shared/qaxtypes.cpp @@ -665,9 +665,9 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type static PGetRecordInfoFromTypeInfo pGetRecordInfoFromTypeInfo = 0; static bool resolved = false; if (!resolved) { + QSystemLibrary oleaut32(QLatin1String("oleaut32")); + pGetRecordInfoFromTypeInfo = (PGetRecordInfoFromTypeInfo)oleaut32.resolve("GetRecordInfoFromTypeInfo"); resolved = true; - pGetRecordInfoFromTypeInfo = (PGetRecordInfoFromTypeInfo)QSystemLibrary::resolve(QLatin1String("oleaut32"), - "GetRecordInfoFromTypeInfo"); } if (!pGetRecordInfoFromTypeInfo) break; diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 8622121..218cf20 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -186,7 +186,6 @@ static void resolveLibs() } #endif - triedResolve = true; #if !defined(Q_OS_WINCE) QSystemLibrary advapi32(QLatin1String("advapi32")); if (advapi32.load()) { @@ -229,6 +228,7 @@ static void resolveLibs() if (kernel32.load()) ptrGetVolumePathNamesForVolumeNameW = (PtrGetVolumePathNamesForVolumeNameW)kernel32.resolve("GetVolumePathNamesForVolumeNameW"); #endif + triedResolve = true; } } #endif // QT_NO_LIBRARY @@ -254,7 +254,7 @@ static bool resolveUNCLibs() return ptrNetShareEnum && ptrNetApiBufferFree; } #endif - triedResolve = true; + #if !defined(Q_OS_WINCE) QSystemLibrary netapi32(QLatin1String("kernel32")); if (netapi32.load()) { @@ -262,6 +262,7 @@ static bool resolveUNCLibs() ptrNetApiBufferFree = (PtrNetApiBufferFree)netapi32.resolve("NetApiBufferFree"); } #endif + triedResolve = true; } return ptrNetShareEnum && ptrNetApiBufferFree; } diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 3e367b7..365b28e 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -327,7 +327,6 @@ static void resolveTimerAPI() if (triedResolve) return; #endif - triedResolve = true; #ifndef Q_OS_WINCE QSystemLibrary library(QLatin1String("Mmtimer")); #else @@ -337,6 +336,8 @@ static void resolveTimerAPI() qtimeSetEvent = (ptimeSetEvent)library.resolve("timeSetEvent"); qtimeKillEvent = (ptimeKillEvent)library.resolve("timeKillEvent"); } + + triedResolve = true; } } diff --git a/src/gui/accessible/qaccessible_win.cpp b/src/gui/accessible/qaccessible_win.cpp index 1fd1bfd..c1bb54b 100644 --- a/src/gui/accessible/qaccessible_win.cpp +++ b/src/gui/accessible/qaccessible_win.cpp @@ -353,8 +353,8 @@ void QAccessible::updateAccessibility(QObject *o, int who, Event reason) static PtrNotifyWinEvent ptrNotifyWinEvent = 0; static bool resolvedNWE = false; if (!resolvedNWE) { - resolvedNWE = true; ptrNotifyWinEvent = (PtrNotifyWinEvent)QSystemLibrary::resolve(QLatin1String("user32"), "NotifyWinEvent"); + resolvedNWE = true; } if (!ptrNotifyWinEvent) return; diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index 30f5f18..45f6164 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -97,7 +97,6 @@ static void qt_win_resolve_libs() } #endif - triedResolve = true; #if !defined(Q_WS_WINCE) QSystemLibrary lib(QLatin1String("shell32")); ptrSHBrowseForFolder = (PtrSHBrowseForFolder)lib.resolve("SHBrowseForFolderW"); @@ -112,6 +111,8 @@ static void qt_win_resolve_libs() if (ptrSHBrowseForFolder && ptrSHGetPathFromIDList && ptrSHGetMalloc) qt_priv_ptr_valid = true; #endif + + triedResolve = true; } } diff --git a/src/gui/dialogs/qwizard_win.cpp b/src/gui/dialogs/qwizard_win.cpp index 9ea114c..00ebbfd 100644 --- a/src/gui/dialogs/qwizard_win.cpp +++ b/src/gui/dialogs/qwizard_win.cpp @@ -705,7 +705,6 @@ bool QVistaHelper::resolveSymbols() { static bool tried = false; if (!tried) { - tried = true; QSystemLibrary dwmLib(L"dwmapi"); pDwmIsCompositionEnabled = (PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled"); @@ -727,6 +726,7 @@ bool QVistaHelper::resolveSymbols() pDrawThemeTextEx = (PtrDrawThemeTextEx)themeLib.resolve("DrawThemeTextEx"); pSetWindowThemeAttribute = (PtrSetWindowThemeAttribute)themeLib.resolve("SetWindowThemeAttribute"); } + tried = true; } return ( diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 47b6eef..aa1571b 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -752,7 +752,8 @@ static PtrglReadPixels ptrglReadPixels = 0; static bool resolveOpenGLSymbols() { - if (ptrCGLChoosePixelFormat == 0) { + static bool triedResolve = false; + if (!triedResolve) { QLibrary library(QLatin1String("/System/Library/Frameworks/OpenGL.framework/OpenGL")); ptrCGLChoosePixelFormat = (PtrCGLChoosePixelFormat)(library.resolve("CGLChoosePixelFormat")); ptrCGLClearDrawable = (PtrCGLClearDrawable)(library.resolve("CGLClearDrawable")); @@ -765,6 +766,7 @@ static bool resolveOpenGLSymbols() ptrglPixelStorei = (PtrglPixelStorei)(library.resolve("glPixelStorei")); ptrglReadBuffer = (PtrglReadBuffer)(library.resolve("glReadBuffer")); ptrglReadPixels = (PtrglReadPixels)(library.resolve("glReadPixels")); + triedResolve = true; } return ptrCGLChoosePixelFormat && ptrCGLClearDrawable && ptrCGLCreateContext && ptrCGLDestroyContext && ptrCGLDestroyPixelFormat && ptrCGLSetCurrentContext diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index bca3acc..b84fe56 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -218,9 +218,9 @@ static bool aygResolved = false; static void resolveAygLibs() { if (!aygResolved) { - aygResolved = true; QSystemLibrary ayglib(QLatin1String("aygshell")); ptrRecognizeGesture = (AygRecognizeGesture) ayglib.resolve("SHRecognizeGesture"); + aygResolved = true; } } #endif // QT_NO_GESTURES @@ -2371,15 +2371,14 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa break; } +#if !defined(Q_OS_WINCE) typedef LRESULT (WINAPI *PtrLresultFromObject)(REFIID, WPARAM, LPUNKNOWN); static PtrLresultFromObject ptrLresultFromObject = 0; static bool oleaccChecked = false; - if (!oleaccChecked) { + QSystemLibrary oleacclib(QLatin1String("oleacc")); + ptrLresultFromObject = (PtrLresultFromObject)oleacclib.resolve("LresultFromObject"); oleaccChecked = true; -#if !defined(Q_OS_WINCE) - ptrLresultFromObject = (PtrLresultFromObject)QSystemLibrary::resolve(QLatin1String("oleacc"), "LresultFromObject"); -#endif } if (ptrLresultFromObject) { QAccessibleInterface *acc = QAccessible::queryAccessibleInterface(widget); @@ -2396,6 +2395,7 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa if (res > 0) RETURN(res); } +#endif } result = false; break; @@ -3181,8 +3181,8 @@ bool QETWidget::translateMouseEvent(const MSG &msg) if (curWin != 0) { if (!trackMouseEventLookup) { - trackMouseEventLookup = true; ptrTrackMouseEvent = (PtrTrackMouseEvent)QSystemLibrary::resolve(QLatin1String("comctl32"), "_TrackMouseEvent"); + trackMouseEventLookup = true; } if (ptrTrackMouseEvent && !qApp->d_func()->inPopupMode()) { // We always have to set the tracking, since diff --git a/src/gui/kernel/qguifunctions_wince.cpp b/src/gui/kernel/qguifunctions_wince.cpp index 78dc469..ae2ca04 100644 --- a/src/gui/kernel/qguifunctions_wince.cpp +++ b/src/gui/kernel/qguifunctions_wince.cpp @@ -125,17 +125,16 @@ static AygInitDialog ptrAygInitDialog = 0; static AygFullScreen ptrAygFullScreen = 0; static AygSHSipInfo ptrAygSHSipInfo = 0; static AygSHDoneButton ptrAygSHDoneButton = 0; -static bool aygResolved = false; - static void resolveAygLibs() { + static bool aygResolved = false; if (!aygResolved) { - aygResolved = true; QLibrary ayglib(QLatin1String("aygshell")); ptrAygInitDialog = (AygInitDialog) ayglib.resolve("SHInitDialog"); ptrAygFullScreen = (AygFullScreen) ayglib.resolve("SHFullScreen"); ptrAygSHSipInfo = (AygSHSipInfo) ayglib.resolve("SHSipInfo"); ptrAygSHDoneButton = (AygSHDoneButton) ayglib.resolve("SHDoneButton"); + aygResolved = true; } } diff --git a/src/gui/kernel/qmime_mac.cpp b/src/gui/kernel/qmime_mac.cpp index 8b47d8e..e92bd49 100644 --- a/src/gui/kernel/qmime_mac.cpp +++ b/src/gui/kernel/qmime_mac.cpp @@ -520,13 +520,15 @@ static PtrGraphicsExportDoExport ptrGraphicsExportDoExport = 0; static bool resolveMimeQuickTimeSymbols() { - if (ptrGraphicsImportSetDataHandle == 0) { + static bool triedResolve = false; + if (!triedResolve) { QLibrary library(QLatin1String("/System/Library/Frameworks/QuickTime.framework/QuickTime")); ptrGraphicsImportSetDataHandle = reinterpret_cast(library.resolve("GraphicsImportSetDataHandle")); ptrGraphicsImportCreateCGImage = reinterpret_cast(library.resolve("GraphicsImportCreateCGImage")); ptrGraphicsExportSetInputCGImage = reinterpret_cast(library.resolve("GraphicsExportSetInputCGImage")); ptrGraphicsExportSetOutputHandle = reinterpret_cast(library.resolve("GraphicsExportSetOutputHandle")); ptrGraphicsExportDoExport = reinterpret_cast(library.resolve("GraphicsExportDoExport")); + triedResolve = true; } return ptrGraphicsImportSetDataHandle != 0 diff --git a/src/gui/styles/qwindowsvistastyle.cpp b/src/gui/styles/qwindowsvistastyle.cpp index b894eb4..f991cbc 100644 --- a/src/gui/styles/qwindowsvistastyle.cpp +++ b/src/gui/styles/qwindowsvistastyle.cpp @@ -2586,7 +2586,6 @@ bool QWindowsVistaStylePrivate::resolveSymbols() { static bool tried = false; if (!tried) { - tried = true; QSystemLibrary themeLib(QLatin1String("uxtheme")); pSetWindowTheme = (PtrSetWindowTheme )themeLib.resolve("SetWindowTheme"); pIsThemePartDefined = (PtrIsThemePartDefined )themeLib.resolve("IsThemePartDefined"); @@ -2611,6 +2610,7 @@ bool QWindowsVistaStylePrivate::resolveSymbols() pGetThemeString = (PtrGetThemeString )themeLib.resolve("GetThemeString"); pGetThemeTransitionDuration = (PtrGetThemeTransitionDuration)themeLib.resolve("GetThemeTransitionDuration"); pGetThemePropertyOrigin = (PtrGetThemePropertyOrigin)themeLib.resolve("GetThemePropertyOrigin"); + tried = true; } return pGetThemeTransitionDuration != 0; } diff --git a/src/gui/styles/qwindowsxpstyle.cpp b/src/gui/styles/qwindowsxpstyle.cpp index 3c33df3..dd7f1f6 100644 --- a/src/gui/styles/qwindowsxpstyle.cpp +++ b/src/gui/styles/qwindowsxpstyle.cpp @@ -343,7 +343,6 @@ bool QWindowsXPStylePrivate::resolveSymbols() { static bool tried = false; if (!tried) { - tried = true; QSystemLibrary themeLib(QLatin1String("uxtheme")); pIsAppThemed = (PtrIsAppThemed)themeLib.resolve("IsAppThemed"); if (pIsAppThemed) { @@ -372,6 +371,7 @@ bool QWindowsXPStylePrivate::resolveSymbols() pGetThemeDocumentationProperty = (PtrGetThemeDocumentationProperty )themeLib.resolve("GetThemeDocumentationProperty"); pIsThemeBackgroundPartiallyTransparent = (PtrIsThemeBackgroundPartiallyTransparent)themeLib.resolve("IsThemeBackgroundPartiallyTransparent"); } + tried = true; } return pIsAppThemed != 0; diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index fc11387..bb5e041 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -138,8 +138,11 @@ static void resolveGetCharWidthI() { if (resolvedGetCharWidthI) return; + + QSystemLibrary gdi32(QLatin1String("gdi32")); + ptrGetCharWidthI = (PtrGetCharWidthI)gdi32.resolve("GetCharWidthI"); + resolvedGetCharWidthI = true; - ptrGetCharWidthI = (PtrGetCharWidthI)QSystemLibrary::resolve(QLatin1String("gdi32"), "GetCharWidthI"); } #endif // !defined(Q_WS_WINCE) diff --git a/src/gui/widgets/qmenu_wince.cpp b/src/gui/widgets/qmenu_wince.cpp index b0c6c1b..d45daf8 100644 --- a/src/gui/widgets/qmenu_wince.cpp +++ b/src/gui/widgets/qmenu_wince.cpp @@ -111,10 +111,10 @@ static AygEnableSoftKey ptrEnableSoftKey = 0; static void resolveAygLibs() { if (!aygResolved) { - aygResolved = true; QLibrary aygLib(QLatin1String("aygshell")); ptrCreateMenuBar = (AygCreateMenuBar) aygLib.resolve("SHCreateMenuBar"); ptrEnableSoftKey = (AygEnableSoftKey) aygLib.resolve("SHEnableSoftkey"); + aygResolved = true; } } diff --git a/src/network/kernel/qnetworkinterface_win.cpp b/src/network/kernel/qnetworkinterface_win.cpp index 5f273d7..a624468 100644 --- a/src/network/kernel/qnetworkinterface_win.cpp +++ b/src/network/kernel/qnetworkinterface_win.cpp @@ -63,16 +63,14 @@ static void resolveLibs() { // try to find the functions we need from Iphlpapi.dll static bool done = false; - if (!done) { - done = true; - QSystemLibrary iphlpapi(QLatin1String("iphlpapi")); if (iphlpapi.load()) { ptrGetAdaptersInfo = (PtrGetAdaptersInfo)iphlpapi.resolve("GetAdaptersInfo"); ptrGetAdaptersAddresses = (PtrGetAdaptersAddresses)iphlpapi.resolve("GetAdaptersAddresses"); ptrGetNetworkParams = (PtrGetNetworkParams)iphlpapi.resolve("GetNetworkParams"); } + done = true; } } -- cgit v0.12 From 1e8479b2aa781e6ce3fadf01294023fbc6ddbc22 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 7 Oct 2011 14:45:47 +0200 Subject: don't lock the global mutex if there is nothing to protect according to Thiago, setting the pointer with the same values *is* thread-safe Merge-request: 2655 Reviewed-by: Jan-Arve Saether --- src/corelib/kernel/qeventdispatcher_win.cpp | 6 ------ src/gui/dialogs/qfiledialog_win.cpp | 17 ----------------- src/network/kernel/qhostinfo_win.cpp | 20 ++++++++------------ src/plugins/bearer/nativewifi/main.cpp | 14 +------------- 4 files changed, 9 insertions(+), 48 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 365b28e..c135c4a 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -53,7 +53,6 @@ #include "qabstracteventdispatcher_p.h" #include "qcoreapplication_p.h" #include -#include QT_BEGIN_NAMESPACE @@ -322,11 +321,6 @@ static void resolveTimerAPI() { static bool triedResolve = false; if (!triedResolve) { -#ifndef QT_NO_THREAD - QMutexLocker locker(QMutexPool::globalInstanceGet(&triedResolve)); - if (triedResolve) - return; -#endif #ifndef Q_OS_WINCE QSystemLibrary library(QLatin1String("Mmtimer")); #else diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index 45f6164..32dbe4f 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -55,10 +55,6 @@ #include #include "qfiledialog_win_p.h" -#ifndef QT_NO_THREAD -# include -#endif - #ifdef Q_WS_WINCE #include bool qt_priv_ptr_valid = false; @@ -83,20 +79,7 @@ QT_BEGIN_NAMESPACE static void qt_win_resolve_libs() { static bool triedResolve = false; - if (!triedResolve) { -#ifndef QT_NO_THREAD - // protect initialization - QMutexLocker locker(QMutexPool::globalInstanceGet(&triedResolve)); - // check triedResolve again, since another thread may have already - // done the initialization - if (triedResolve) { - // another thread did initialize the security function pointers, - // so we shouldn't do it again. - return; - } -#endif - #if !defined(Q_WS_WINCE) QSystemLibrary lib(QLatin1String("shell32")); ptrSHBrowseForFolder = (PtrSHBrowseForFolder)lib.resolve("SHBrowseForFolderW"); diff --git a/src/network/kernel/qhostinfo_win.cpp b/src/network/kernel/qhostinfo_win.cpp index 03e72c4..1cbf350 100644 --- a/src/network/kernel/qhostinfo_win.cpp +++ b/src/network/kernel/qhostinfo_win.cpp @@ -45,9 +45,7 @@ #include "private/qnativesocketengine_p.h" #include #include -#include #include -#include QT_BEGIN_NAMESPACE @@ -84,6 +82,10 @@ static void resolveLibrary() { // Attempt to resolve getaddrinfo(); without it we'll have to fall // back to gethostbyname(), which has no IPv6 support. + static bool triedResolve = false; + if (triedResolve) + return; + #if !defined(Q_OS_WINCE) QSystemLibrary ws2lib(QLatin1String("ws2_32")); #else @@ -94,6 +96,8 @@ static void resolveLibrary() local_freeaddrinfo = (freeaddrinfoProto)ws2lib.resolve("freeaddrinfo"); local_getnameinfo = (getnameinfoProto)ws2lib.resolve("getnameinfo"); } + + triedResolve = true; } #if defined(Q_OS_WINCE) @@ -103,21 +107,13 @@ QMutex qPrivCEMutex; QHostInfo QHostInfoAgent::fromName(const QString &hostName) { + resolveLibrary(); + #if defined(Q_OS_WINCE) QMutexLocker locker(&qPrivCEMutex); #endif QWindowsSockInit winSock; - // Load res_init on demand. - static volatile bool triedResolve = false; - if (!triedResolve) { - QMutexLocker locker(QMutexPool::globalInstanceGet(&local_getaddrinfo)); - if (!triedResolve) { - resolveLibrary(); - triedResolve = true; - } - } - QHostInfo results; #if defined(QHOSTINFO_DEBUG) diff --git a/src/plugins/bearer/nativewifi/main.cpp b/src/plugins/bearer/nativewifi/main.cpp index cbdfd99..d279631 100644 --- a/src/plugins/bearer/nativewifi/main.cpp +++ b/src/plugins/bearer/nativewifi/main.cpp @@ -42,30 +42,18 @@ #include "qnativewifiengine.h" #include "platformdefs.h" -#include -#include #include #include -#include - #ifndef QT_NO_BEARERMANAGEMENT QT_BEGIN_NAMESPACE static void resolveLibrary() { - static volatile bool triedResolve = false; - + static bool triedResolve = false; if (!triedResolve) { -#ifndef QT_NO_THREAD - QMutexLocker locker(QMutexPool::globalInstanceGet(&local_WlanOpenHandle)); -#endif - - if (triedResolve) - return; - QSystemLibrary wlanapi(QLatin1String("wlanapi")); if (wlanapi.load()) { local_WlanOpenHandle = (WlanOpenHandleProto) -- cgit v0.12 From 919e75fb1bad3c3a399e072c52e850c0df5b2f71 Mon Sep 17 00:00:00 2001 From: Jan-Arve Saether Date: Mon, 10 Oct 2011 08:09:06 +0200 Subject: Fix regression introduced by 1bfef526ef3d1deb7cf0f11dc1880f33937a85ac Reviewed-by: Trustme --- src/corelib/io/qfilesystemengine_win.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp index 218cf20..338552c 100644 --- a/src/corelib/io/qfilesystemengine_win.cpp +++ b/src/corelib/io/qfilesystemengine_win.cpp @@ -256,7 +256,7 @@ static bool resolveUNCLibs() #endif #if !defined(Q_OS_WINCE) - QSystemLibrary netapi32(QLatin1String("kernel32")); + QSystemLibrary netapi32(QLatin1String("Netapi32")); if (netapi32.load()) { ptrNetShareEnum = (PtrNetShareEnum)netapi32.resolve("NetShareEnum"); ptrNetApiBufferFree = (PtrNetApiBufferFree)netapi32.resolve("NetApiBufferFree"); -- cgit v0.12 From ecd78168271cfe71715e074a50752712f4aa3229 Mon Sep 17 00:00:00 2001 From: Tero Ahola Date: Mon, 10 Oct 2011 17:02:33 +0200 Subject: Fixed resource leak when setting QProgressBar style sheet Task-number: QTBUG-19110 Merge-request: 2687 Reviewed-by: Frederik Gladhorn --- src/gui/styles/qwindowsstyle.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 342c4c6..2244c11 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -221,7 +221,8 @@ bool QWindowsStyle::eventFilter(QObject *o, QEvent *e) d->bars << bar; if (d->bars.size() == 1) { Q_ASSERT(d->animationFps> 0); - d->animateTimer = startTimer(1000 / d->animationFps); + if (d->animateTimer == 0) + d->animateTimer = startTimer(1000 / d->animationFps); } } } -- cgit v0.12 From c47cd8f01ea5d3f2a6d0ea73572d9735947919a0 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 11 Oct 2011 15:51:58 +0100 Subject: Symbian - fix deleteLater not working from RunL deleteLater stores the loop level in the deferred delete event to prevent the object being deleted by a nested event loop. However as symbian active object RunL functions are called directly from the active scheduler, the loop level is incorrect at that point. (It is normally set by QCoreApplication::notifyInternal) To solve this, the loop level is adjusted before calling RunIfReady so that it is correct during RunL functions. It is then adjusted back for the specific active objects in the event dispatcher that call into QCoreApplication - sendPostedEvents, sendEvent. Task-number: QTBUG-21928 Reviewed-by: mread --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 5e2bc4f..b796728 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -61,6 +61,24 @@ QT_BEGIN_NAMESPACE #define NULLTIMER_PRIORITY CActive::EPriorityLow #define COMPLETE_DEFERRED_ACTIVE_OBJECTS_PRIORITY CActive::EPriorityIdle +class Incrementer { + int &variable; +public: + inline Incrementer(int &variable) : variable(variable) + { ++variable; } + inline ~Incrementer() + { --variable; } +}; + +class Decrementer { + int &variable; +public: + inline Decrementer(int &variable) : variable(variable) + { --variable; } + inline ~Decrementer() + { ++variable; } +}; + static inline int qt_pipe_write(int socket, const char *data, qint64 len) { return ::write(socket, data, len); @@ -830,6 +848,8 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla #endif while (1) { + //native active object callbacks are logically part of the event loop, so inc nesting level + Incrementer inc(d->threadData->loopLevel); if (block) { // This is where Qt will spend most of its time. CActiveScheduler::Current()->WaitForAnyRequest(); @@ -894,6 +914,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla void QEventDispatcherSymbian::timerFired(int timerId) { + Q_D(QAbstractEventDispatcher); QHash::iterator i = m_timerList.find(timerId); if (i == m_timerList.end()) { // The timer has been deleted. Ignore this event. @@ -912,6 +933,8 @@ void QEventDispatcherSymbian::timerFired(int timerId) m_insideTimerEvent = true; QTimerEvent event(timerInfo->timerId); + //undo the added nesting level around RunIfReady, since Qt's event system also nests + Decrementer dec(d->threadData->loopLevel); QCoreApplication::sendEvent(timerInfo->receiver, &event); m_insideTimerEvent = oldInsideTimerEventValue; @@ -922,6 +945,7 @@ void QEventDispatcherSymbian::timerFired(int timerId) void QEventDispatcherSymbian::socketFired(QSocketActiveObject *socketAO) { + Q_D(QAbstractEventDispatcher); if (m_noSocketEvents) { m_deferredSocketEvents.append(socketAO); return; @@ -929,6 +953,8 @@ void QEventDispatcherSymbian::socketFired(QSocketActiveObject *socketAO) QEvent e(QEvent::SockAct); socketAO->m_inSocketEvent = true; + //undo the added nesting level around RunIfReady, since Qt's event system also nests + Decrementer dec(d->threadData->loopLevel); QCoreApplication::sendEvent(socketAO->m_notifier, &e); socketAO->m_inSocketEvent = false; @@ -943,6 +969,7 @@ void QEventDispatcherSymbian::socketFired(QSocketActiveObject *socketAO) void QEventDispatcherSymbian::wakeUpWasCalled() { + Q_D(QAbstractEventDispatcher); // The reactivation should happen in RunL, right before the call to this function. // This is because m_wakeUpDone is the "signal" that the object can be completed // once more. @@ -952,6 +979,8 @@ void QEventDispatcherSymbian::wakeUpWasCalled() // the sendPostedEvents was done, but before the object was ready to be completed // again. This could deadlock the application if there are no other posted events. m_wakeUpDone.fetchAndStoreOrdered(0); + //undo the added nesting level around RunIfReady, since Qt's event system also nests + Decrementer dec(d->threadData->loopLevel); sendPostedEvents(); } -- cgit v0.12 From 3f42986b357c5066adb9755454bc4bcc4915ab9f Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 12 Oct 2011 09:35:42 +1000 Subject: Backport more imports directory caching changes. Fixes error reporting on Windows. Change-Id: I49b559aa9d0c227be4e8e3d0fdc43c402273a302 Task-number: QTBUG-15899 Reviewed-by: Damian Jansen --- src/declarative/qml/qdeclarativedirparser.cpp | 15 +++++++++++---- src/declarative/qml/qdeclarativedirparser_p.h | 2 +- src/declarative/qml/qdeclarativeimport.cpp | 9 ++++++--- src/declarative/qml/qdeclarativetypeloader.cpp | 9 ++------- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/declarative/qml/qdeclarativedirparser.cpp b/src/declarative/qml/qdeclarativedirparser.cpp index 401eea9..fcc74da 100644 --- a/src/declarative/qml/qdeclarativedirparser.cpp +++ b/src/declarative/qml/qdeclarativedirparser.cpp @@ -108,14 +108,14 @@ bool QDeclarativeDirParser::parse() QFile file(_filePathSouce); if (!QDeclarative_isFileCaseCorrect(_filePathSouce)) { QDeclarativeError error; - error.setDescription(QString::fromUtf8("cannot load module \"%1\": File name case mismatch for \"%2\"").arg(_url.toString()).arg(_filePathSouce)); + error.setDescription(QString::fromUtf8("cannot load module \"$$URI$$\": File name case mismatch for \"%1\"").arg(_filePathSouce)); _errors.prepend(error); return false; } else if (file.open(QFile::ReadOnly)) { _source = QString::fromUtf8(file.readAll()); } else { QDeclarativeError error; - error.setDescription(QString::fromUtf8("module \"%1\" definition \"%2\" not readable").arg(_url.toString()).arg(_filePathSouce)); + error.setDescription(QString::fromUtf8("module \"$$URI$$\" definition \"%1\" not readable").arg(_filePathSouce)); _errors.prepend(error); return false; } @@ -243,9 +243,16 @@ bool QDeclarativeDirParser::hasError() const return false; } -QList QDeclarativeDirParser::errors() const +QList QDeclarativeDirParser::errors(const QString &uri) const { - return _errors; + QList errors = _errors; + for (int i = 0; i < errors.size(); ++i) { + QDeclarativeError &e = errors[i]; + QString description = e.description(); + description.replace(QLatin1String("$$URI$$"), uri); + e.setDescription(description); + } + return errors; } QList QDeclarativeDirParser::plugins() const diff --git a/src/declarative/qml/qdeclarativedirparser_p.h b/src/declarative/qml/qdeclarativedirparser_p.h index 347b229..bc84a42 100644 --- a/src/declarative/qml/qdeclarativedirparser_p.h +++ b/src/declarative/qml/qdeclarativedirparser_p.h @@ -80,7 +80,7 @@ public: bool parse(); bool hasError() const; - QList errors() const; + QList errors(const QString &uri) const; struct Plugin { diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp index 44fc849..734d63e 100644 --- a/src/declarative/qml/qdeclarativeimport.cpp +++ b/src/declarative/qml/qdeclarativeimport.cpp @@ -361,8 +361,11 @@ bool QDeclarativeImportsPrivate::importExtension(const QString &absoluteFilePath Q_ASSERT(typeLoader); const QDeclarativeDirParser *qmldirParser = typeLoader->qmlDirParser(absoluteFilePath); if (qmldirParser->hasError()) { - if (errorString) - *errorString = QDeclarativeImportDatabase::tr("module \"%1\" definition \"%2\" not readable").arg(uri).arg(absoluteFilePath); + if (errorString) { + const QList qmldirErrors = qmldirParser->errors(uri); + for (int i = 0; i < qmldirErrors.size(); ++i) + *errorString += qmldirErrors.at(i).description(); + } return false; } @@ -1022,7 +1025,7 @@ bool QDeclarativeImportDatabase::importPlugin(const QString &filePath, const QSt if (!engineInitialized || !typesRegistered) { if (!QDeclarative_isFileCaseCorrect(absoluteFilePath)) { if (errorString) - *errorString = tr("File name case mismatch for \"%2\"").arg(absoluteFilePath); + *errorString = tr("File name case mismatch for \"%1\"").arg(absoluteFilePath); return false; } QPluginLoader loader(absoluteFilePath); diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp index cd199ad..5e20617 100644 --- a/src/declarative/qml/qdeclarativetypeloader.cpp +++ b/src/declarative/qml/qdeclarativetypeloader.cpp @@ -789,18 +789,13 @@ Return a QDeclarativeDirParser for absoluteFilePath. The QDeclarativeDirParser const QDeclarativeDirParser *QDeclarativeTypeLoader::qmlDirParser(const QString &absoluteFilePath) { QDeclarativeDirParser *qmldirParser; -#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_DARWIN) || defined(Q_OS_SYMBIAN) - QString lowPath(absoluteFilePath.toLower()); -#else - QString lowPath(absoluteFilePath); -#endif - QHash::const_iterator it = m_importQmlDirCache.find(lowPath); + QHash::const_iterator it = m_importQmlDirCache.find(absoluteFilePath); if (it == m_importQmlDirCache.end()) { qmldirParser = new QDeclarativeDirParser; qmldirParser->setFileSource(absoluteFilePath); qmldirParser->setUrl(QUrl::fromLocalFile(absoluteFilePath)); qmldirParser->parse(); - m_importQmlDirCache.insert(lowPath, qmldirParser); + m_importQmlDirCache.insert(absoluteFilePath, qmldirParser); } else { qmldirParser = *it; } -- cgit v0.12 From 61f165239c4e87a8f6bcd594553b8fcea1a7f8d0 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 12 Oct 2011 17:02:12 +1000 Subject: Cannot flick to the end of a horizontal list view width LayoutMirroring minXExtent calculated the offset due to highlight range incorrectly (reversed) when mirroring enabled. Also us same algorithm for fixup() in GridView and ListView uses. Change-Id: Id7e7e540a894d6f520685b237d34b4186bc427b6 Task-number: QTBUG-21756 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativegridview.cpp | 23 +++++++++------------- .../graphicsitems/qdeclarativelistview.cpp | 2 +- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index ff88e31..03cc335 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -1093,23 +1093,17 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m bottomItem = currentItem; } qreal pos; - if (topItem && bottomItem && strictHighlightRange) { - qreal topPos = qMin(topItem->rowPos() - highlightStart, -maxExtent); - qreal bottomPos = qMax(bottomItem->rowPos() - highlightEnd, -minExtent); - pos = qAbs(data.move + topPos) < qAbs(data.move + bottomPos) ? topPos : bottomPos; - } else if (topItem) { - qreal headerPos = 0; - if (header) - headerPos = isRightToLeftTopToBottom() ? header->rowPos() + cellWidth - headerSize() : header->rowPos(); - if (topItem->index == 0 && header && tempPosition+highlightStart < headerPos+headerSize()/2 && !strictHighlightRange) { - pos = isRightToLeftTopToBottom() ? - headerPos + highlightStart - size() : headerPos - highlightStart; + bool isInBounds = -position() > maxExtent && -position() <= minExtent; + if (topItem && (isInBounds || strictHighlightRange)) { + if (topItem->index == 0 && header && tempPosition+highlightStart < header->rowPos()+headerSize()/2 && !strictHighlightRange) { + pos = isRightToLeftTopToBottom() ? - header->rowPos() + highlightStart - size() : header->rowPos() - highlightStart; } else { if (isRightToLeftTopToBottom()) pos = qMax(qMin(-topItem->rowPos() + highlightStart - size(), -maxExtent), -minExtent); else pos = qMax(qMin(topItem->rowPos() - highlightStart, -maxExtent), -minExtent); } - } else if (bottomItem) { + } else if (bottomItem && isInBounds) { if (isRightToLeftTopToBottom()) pos = qMax(qMin(-bottomItem->rowPos() + highlightEnd - size(), -maxExtent), -minExtent); else @@ -2255,9 +2249,10 @@ qreal QDeclarativeGridView::minXExtent() const qreal extent = -d->startPosition(); qreal highlightStart; qreal highlightEnd; - qreal endPositionFirstItem; + qreal endPositionFirstItem = 0; if (d->isRightToLeftTopToBottom()) { - endPositionFirstItem = d->rowPosAt(d->model->count()-1); + if (d->model && d->model->count()) + endPositionFirstItem = d->rowPosAt(d->model->count()-1); highlightStart = d->highlightRangeStartValid ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem) : d->size() - (d->lastPosition()-endPositionFirstItem); @@ -2272,7 +2267,7 @@ qreal QDeclarativeGridView::minXExtent() const extent += d->header->item->width(); } if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { - extent += highlightStart; + extent += d->isRightToLeftTopToBottom() ? -highlightStart : highlightStart; extent = qMax(extent, -(endPositionFirstItem - highlightEnd)); } return extent; diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 6c8e99b..2db29fe 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -2762,7 +2762,7 @@ qreal QDeclarativeListView::minXExtent() const d->minExtent += d->header->size(); } if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) { - d->minExtent += highlightStart; + d->minExtent += d->isRightToLeft() ? -highlightStart : highlightStart; d->minExtent = qMax(d->minExtent, -(endPositionFirstItem - highlightEnd + 1)); } d->minExtentDirty = false; -- cgit v0.12 From 4c64464ddf63ed89603ad759ffb68c6f298edd26 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Thu, 13 Oct 2011 14:37:36 +0200 Subject: Fix regression in ListView This reverts commit d91a8f3a5dbcf3e4c4c0afb28463b25e192b00e4 and introduces a minimal fix for the original crash report. Task-number: QTBUG-21433 Reviewed-by: gabriel --- src/gui/itemviews/qlistview.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp index a0955d2..01a9eec 100644 --- a/src/gui/itemviews/qlistview.cpp +++ b/src/gui/itemviews/qlistview.cpp @@ -1475,7 +1475,7 @@ void QListView::doItemsLayout() void QListView::updateGeometries() { Q_D(QListView); - if (d->model->rowCount(d->root) <= 0 || d->model->columnCount(d->root) <= 0) { + if (geometry().isEmpty() || d->model->rowCount(d->root) <= 0 || d->model->columnCount(d->root) <= 0) { horizontalScrollBar()->setRange(0, 0); verticalScrollBar()->setRange(0, 0); } else { @@ -1490,15 +1490,15 @@ void QListView::updateGeometries() // if the scroll bars are turned off, we resize the contents to the viewport if (d->movement == Static && !d->isWrapping()) { - const QSize maxSize = maximumViewportSize(); + d->layoutChildren(); // we need the viewport size to be updated if (d->flow == TopToBottom) { if (horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) { - d->setContentsSize(maxSize.width(), contentsSize().height()); + d->setContentsSize(viewport()->width(), contentsSize().height()); horizontalScrollBar()->setRange(0, 0); // we see all the contents anyway } } else { // LeftToRight if (verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) { - d->setContentsSize(contentsSize().width(), maxSize.height()); + d->setContentsSize(contentsSize().width(), viewport()->height()); verticalScrollBar()->setRange(0, 0); // we see all the contents anyway } } -- cgit v0.12 From 3ae56c0e4cfdd30579dbbff97fbf37af1da73a78 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 13 Oct 2011 15:45:47 +0100 Subject: symbian - search drives for translation files Qt may be installed on a different drive from the application, particularly the case when Qt is included in ROM (Z:) and the application is on C: With this change, if QTranslator::load() specifies an absolute directory in the filesystem (e.g. "/resource/qt/translations") without a drive letter, then the symbian search paths are used. Note that this example path is the one returned by QLibraryInfo so applications using the example code from http://doc.qt.nokia.com/latest/internationalization.html#produce-translations will work as expected. Task-number: QT-5246 Reviewed-by: mread --- src/corelib/kernel/qtranslator.cpp | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 3672846..1a9acbb 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -50,6 +50,7 @@ #include "qcoreapplication.h" #include "qcoreapplication_p.h" #include "qdatastream.h" +#include "qdir.h" #include "qfile.h" #include "qmap.h" #include "qalgorithms.h" @@ -61,6 +62,10 @@ #include "private/qcore_unix_p.h" #endif +#ifdef Q_OS_SYMBIAN +#include "private/qcore_symbian_p.h" +#endif + // most of the headers below are already included in qplatformdefs.h // also this lacks Large File support but that's probably irrelevant #if defined(QT_USE_MMAP) @@ -402,11 +407,24 @@ bool QTranslator::load(const QString & filename, const QString & directory, QString prefix; if (QFileInfo(filename).isRelative()) { +#ifdef Q_OS_SYMBIAN + if(directory.isEmpty()) + prefix = QCoreApplication::applicationDirPath(); + else + prefix = QFileInfo(directory).absoluteFilePath(); //TFindFile doesn't like dirty paths + if (prefix.length() > 2 && prefix.at(1) == QLatin1Char(':') && prefix.at(0).isLetter()) + prefix[0] = QLatin1Char('Y'); +#else prefix = directory; - if (prefix.length() && !prefix.endsWith(QLatin1Char('/'))) - prefix += QLatin1Char('/'); +#endif + if (prefix.length() && !prefix.endsWith(QLatin1Char('/'))) + prefix += QLatin1Char('/'); } +#ifdef Q_OS_SYMBIAN + QString nativePrefix = QDir::toNativeSeparators(prefix); +#endif + QString fname = filename; QString realname; QString delims; @@ -415,6 +433,24 @@ bool QTranslator::load(const QString & filename, const QString & directory, for (;;) { QFileInfo fi; +#ifdef Q_OS_SYMBIAN + //search for translations on other drives, e.g. Qt may be in Z, while app is in C + //note this uses symbian search rules, i.e. y:->a:, followed by z: + TFindFile finder(qt_s60GetRFs()); + QString fname2 = fname + (suffix.isNull() ? QString::fromLatin1(".qm") : suffix); + TInt err = finder.FindByDir( + qt_QString2TPtrC(fname2), + qt_QString2TPtrC(nativePrefix)); + if (err != KErrNone) + err = finder.FindByDir(qt_QString2TPtrC(fname), qt_QString2TPtrC(nativePrefix)); + if (err == KErrNone) { + fi.setFile(qt_TDesC2QString(finder.File())); + realname = fi.canonicalFilePath(); + if (fi.isReadable() && fi.isFile()) + break; + } +#endif + realname = prefix + fname + (suffix.isNull() ? QString::fromLatin1(".qm") : suffix); fi.setFile(realname); if (fi.isReadable() && fi.isFile()) -- cgit v0.12 From 5dec90ff13cd96ca4f341cf5e8360037edf5eeb3 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 13 Oct 2011 15:45:47 +0100 Subject: symbian - search drives for translation files Qt may be installed on a different drive from the application, particularly the case when Qt is included in ROM (Z:) and the application is on C: With this change, if QTranslator::load() specifies an absolute directory in the filesystem (e.g. "/resource/qt/translations") without a drive letter, then the symbian search paths are used. Note that this example path is the one returned by QLibraryInfo so applications using the example code from http://doc.qt.nokia.com/latest/internationalization.html#produce-translations will work as expected. Task-number: QT-5246 Reviewed-by: mread --- src/corelib/kernel/qtranslator.cpp | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 3672846..8c08760 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -50,6 +50,7 @@ #include "qcoreapplication.h" #include "qcoreapplication_p.h" #include "qdatastream.h" +#include "qdir.h" #include "qfile.h" #include "qmap.h" #include "qalgorithms.h" @@ -61,6 +62,10 @@ #include "private/qcore_unix_p.h" #endif +#ifdef Q_OS_SYMBIAN +#include "private/qcore_symbian_p.h" +#endif + // most of the headers below are already included in qplatformdefs.h // also this lacks Large File support but that's probably irrelevant #if defined(QT_USE_MMAP) @@ -402,11 +407,24 @@ bool QTranslator::load(const QString & filename, const QString & directory, QString prefix; if (QFileInfo(filename).isRelative()) { +#ifdef Q_OS_SYMBIAN + if (directory.isEmpty()) + prefix = QCoreApplication::applicationDirPath(); + else + prefix = QFileInfo(directory).absoluteFilePath(); //TFindFile doesn't like dirty paths + if (prefix.length() > 2 && prefix.at(1) == QLatin1Char(':') && prefix.at(0).isLetter()) + prefix[0] = QLatin1Char('Y'); +#else prefix = directory; - if (prefix.length() && !prefix.endsWith(QLatin1Char('/'))) - prefix += QLatin1Char('/'); +#endif + if (prefix.length() && !prefix.endsWith(QLatin1Char('/'))) + prefix += QLatin1Char('/'); } +#ifdef Q_OS_SYMBIAN + QString nativePrefix = QDir::toNativeSeparators(prefix); +#endif + QString fname = filename; QString realname; QString delims; @@ -415,6 +433,24 @@ bool QTranslator::load(const QString & filename, const QString & directory, for (;;) { QFileInfo fi; +#ifdef Q_OS_SYMBIAN + //search for translations on other drives, e.g. Qt may be in Z, while app is in C + //note this uses symbian search rules, i.e. y:->a:, followed by z: + TFindFile finder(qt_s60GetRFs()); + QString fname2 = fname + (suffix.isNull() ? QString::fromLatin1(".qm") : suffix); + TInt err = finder.FindByDir( + qt_QString2TPtrC(fname2), + qt_QString2TPtrC(nativePrefix)); + if (err != KErrNone) + err = finder.FindByDir(qt_QString2TPtrC(fname), qt_QString2TPtrC(nativePrefix)); + if (err == KErrNone) { + fi.setFile(qt_TDesC2QString(finder.File())); + realname = fi.canonicalFilePath(); + if (fi.isReadable() && fi.isFile()) + break; + } +#endif + realname = prefix + fname + (suffix.isNull() ? QString::fromLatin1(".qm") : suffix); fi.setFile(realname); if (fi.isReadable() && fi.isFile()) -- cgit v0.12 From b3eca5777543fb6fc97e025b03fe07ed9541c0a5 Mon Sep 17 00:00:00 2001 From: Jan-Arve Saether Date: Fri, 14 Oct 2011 11:47:58 +0200 Subject: Fix bug in QStringToBSTR. Use the same implementation as found in ActiveQt, which Volker suggested. Task-number: QTBUG-11083 --- src/gui/accessible/qaccessible_win.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/gui/accessible/qaccessible_win.cpp b/src/gui/accessible/qaccessible_win.cpp index c1bb54b..f404535 100644 --- a/src/gui/accessible/qaccessible_win.cpp +++ b/src/gui/accessible/qaccessible_win.cpp @@ -691,14 +691,7 @@ private: static inline BSTR QStringToBSTR(const QString &str) { - BSTR bstrVal; - - int wlen = str.length()+1; - bstrVal = SysAllocStringByteLen(0, wlen*2); - memcpy(bstrVal, str.unicode(), sizeof(QChar)*(wlen)); - bstrVal[wlen] = 0; - - return bstrVal; + return SysAllocStringLen((OLECHAR*)str.unicode(), str.length()); } /* -- cgit v0.12 From 2543ed5b1b18864797b3a11c9bd13887c7567e86 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Fri, 14 Oct 2011 13:00:15 +0300 Subject: Add new signals to indicate GPU resource usage. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QML elements that use GPU resources directly needs to know when Qt releases GPU resources and when they are available again. Task-number: QT-5310 Reviewed-by: Samuel Rødal --- src/gui/kernel/qapplication.cpp | 28 ++++++++++++++++++++++++++++ src/gui/kernel/qapplication.h | 4 ++++ src/gui/kernel/qapplication_p.h | 3 +++ src/gui/kernel/qapplication_s60.cpp | 24 ++++++++++++++++++++++++ src/s60installs/eabi/QtGuiu.def | 7 +++++++ 5 files changed, 66 insertions(+) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 34ce9a8..34decef 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -3389,7 +3389,35 @@ QString QApplication::sessionKey() const } #endif +/*! + \since 4.7.4 + \fn void QApplication::aboutToReleaseGpuResources() + + This signal is emitted when application is about to release all + GPU resources accociated to contexts owned by application. + + The signal is particularly useful if your application has allocated + GPU resources directly apart from Qt and needs to do some last-second + cleanup. + + \warning This signal is only emitted on Symbian. + + \sa aboutToUseGpuResources() +*/ +/*! + \since 4.7.4 + \fn void QApplication::aboutToUseGpuResources() + + This signal is emitted when application is about to use GPU resources. + + The signal is particularly useful if your application needs to know + when GPU resources are be available. + + \warning This signal is only emitted on Symbian. + + \sa aboutToFreeGpuResources() +*/ /*! \since 4.2 diff --git a/src/gui/kernel/qapplication.h b/src/gui/kernel/qapplication.h index cbf0117..32ff91b 100644 --- a/src/gui/kernel/qapplication.h +++ b/src/gui/kernel/qapplication.h @@ -298,6 +298,10 @@ Q_SIGNALS: void commitDataRequest(QSessionManager &sessionManager); void saveStateRequest(QSessionManager &sessionManager); #endif +#ifdef Q_OS_SYMBIAN + void aboutToReleaseGpuResources(); + void aboutToUseGpuResources(); +#endif public: QString styleSheet() const; diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 99822e2..abdee49 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -523,6 +523,9 @@ public: int symbianResourceChange(const QSymbianEvent *symbianEvent); void _q_aboutToQuit(); + + void emitAboutToReleaseGpuResources(); + void emitAboutToUseGpuResources(); #endif #if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) void sendSyntheticEnterLeave(QWidget *widget); diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index a53d273..5c657a4 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -207,6 +207,9 @@ void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible) if (QTLWExtra *topData = qt_widget_private(window)->maybeTopData()) { QWidgetBackingStoreTracker &backingStore = topData->backingStore; if (visible) { + QApplicationPrivate *d = QApplicationPrivate::instance(); + d->emitAboutToUseGpuResources(); + if (backingStore.data()) { backingStore.registerWidget(widget); } else { @@ -216,6 +219,9 @@ void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible) widget->repaint(); } } else { + QApplicationPrivate *d = QApplicationPrivate::instance(); + d->emitAboutToReleaseGpuResources(); + // In certain special scenarios we may get an ENotVisible event // without a previous EPartiallyVisible. The backingstore must // still be destroyed, hence the registerWidget() call below. @@ -2704,6 +2710,24 @@ void QApplicationPrivate::_q_aboutToQuit() #endif } +void QApplicationPrivate::emitAboutToReleaseGpuResources() +{ +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES + Q_Q(QApplication); + QPointer guard(q); + emit q->aboutToReleaseGpuResources(); +#endif +} + +void QApplicationPrivate::emitAboutToUseGpuResources() +{ +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES + Q_Q(QApplication); + QPointer guard(q); + emit q->aboutToUseGpuResources(); +#endif +} + QS60ThreadLocalData::QS60ThreadLocalData() { CCoeEnv *env = CCoeEnv::Static(); diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 6028a6d..723fcf6 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12198,4 +12198,11 @@ EXPORTS _ZNK11QPixmapData15toVolatileImageEv @ 12197 NONAME _ZNK14QVolatileImage13constImageRefEv @ 12198 NONAME _Z43qt_s60_setPartialScreenAutomaticTranslationb @ 12199 NONAME + _ZN11QTextEngine16getClusterLengthEPtPK17HB_CharAttributesiiiPi @ 12200 NONAME + _ZN11QTextEngine18positionInLigatureEPK11QScriptItemi6QFixedS3_ib @ 12201 NONAME + _ZN12QApplication22aboutToUseGpuResourcesEv @ 12202 NONAME + _ZN12QApplication26aboutToReleaseGpuResourcesEv @ 12203 NONAME + _ZN14QWidgetPrivate16_q_cleanupWinIdsEv @ 12204 NONAME + _ZN19QApplicationPrivate26emitAboutToUseGpuResourcesEv @ 12205 NONAME + _ZN19QApplicationPrivate30emitAboutToReleaseGpuResourcesEv @ 12206 NONAME -- cgit v0.12 From 968d4a3c2c01d6afdfeb2537b960169968942d9d Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Fri, 14 Oct 2011 19:36:08 +0300 Subject: Typo fix Reviewed-by: trustme --- src/gui/kernel/qapplication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 34decef..9d8b590 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -3394,7 +3394,7 @@ QString QApplication::sessionKey() const \fn void QApplication::aboutToReleaseGpuResources() This signal is emitted when application is about to release all - GPU resources accociated to contexts owned by application. + GPU resources associated to contexts owned by application. The signal is particularly useful if your application has allocated GPU resources directly apart from Qt and needs to do some last-second -- cgit v0.12 From 93c64e1be3a2d68eb504d7c4f7c60f66ce1ff650 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 30 Sep 2011 13:33:56 +1000 Subject: Fix crash on exit when overriding signal handlers in states. Change-Id: I0e73948f18aa1b78c7e92677167673b84a90a450 Task-number: QTBUG-21617 Reviewed-by: Martin Jones --- .../util/qdeclarativepropertychanges.cpp | 5 ++-- .../data/signalOverrideCrash3.qml | 27 ++++++++++++++++++++++ .../qdeclarativestates/tst_qdeclarativestates.cpp | 17 ++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativestates/data/signalOverrideCrash3.qml diff --git a/src/declarative/util/qdeclarativepropertychanges.cpp b/src/declarative/util/qdeclarativepropertychanges.cpp index 5cdf785..f86274f 100644 --- a/src/declarative/util/qdeclarativepropertychanges.cpp +++ b/src/declarative/util/qdeclarativepropertychanges.cpp @@ -171,7 +171,8 @@ public: reverseExpression = rewindExpression; } - /*virtual void copyOriginals(QDeclarativeActionEvent *other) + virtual bool needsCopy() { return true; } + virtual void copyOriginals(QDeclarativeActionEvent *other) { QDeclarativeReplaceSignalHandler *rsh = static_cast(other); saveCurrentValues(); @@ -182,7 +183,7 @@ public: ownedExpression = rsh->ownedExpression; rsh->ownedExpression = 0; } - }*/ + } virtual void rewind() { ownedExpression = QDeclarativePropertyPrivate::setSignalExpression(property, rewindExpression); diff --git a/tests/auto/declarative/qdeclarativestates/data/signalOverrideCrash3.qml b/tests/auto/declarative/qdeclarativestates/data/signalOverrideCrash3.qml new file mode 100644 index 0000000..ed1f22f --- /dev/null +++ b/tests/auto/declarative/qdeclarativestates/data/signalOverrideCrash3.qml @@ -0,0 +1,27 @@ +import QtQuick 1.0 + +Rectangle { + id: myRect + width: 400 + height: 400 + + onHeightChanged: console.log("base state") + + states: [ + State { + name: "state1" + PropertyChanges { + target: myRect + onHeightChanged: console.log("state1") + color: "green" + } + }, + State { + name: "state2"; + PropertyChanges { + target: myRect + onHeightChanged: console.log("state2") + color: "red" + } + }] +} diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 9fafa7d..e90e6fb 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -113,6 +113,7 @@ private slots: void signalOverride(); void signalOverrideCrash(); void signalOverrideCrash2(); + void signalOverrideCrash3(); void parentChange(); void parentChangeErrors(); void anchorChanges(); @@ -520,6 +521,22 @@ void tst_qdeclarativestates::signalOverrideCrash2() delete rect; } +void tst_qdeclarativestates::signalOverrideCrash3() +{ + QDeclarativeEngine engine; + + QDeclarativeComponent rectComponent(&engine, SRCDIR "/data/signalOverrideCrash3.qml"); + QDeclarativeRectangle *rect = qobject_cast(rectComponent.create()); + QVERIFY(rect != 0); + + QDeclarativeItemPrivate::get(rect)->setState("state1"); + QDeclarativeItemPrivate::get(rect)->setState(""); + QDeclarativeItemPrivate::get(rect)->setState("state2"); + QDeclarativeItemPrivate::get(rect)->setState(""); + + delete rect; +} + void tst_qdeclarativestates::parentChange() { QDeclarativeEngine engine; -- cgit v0.12 From 17e0607ef47e455f56894e134541c46b42e7cdd9 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Tue, 18 Oct 2011 12:52:30 +0300 Subject: Update def files Reviewed-by: TRUSTME --- src/s60installs/bwins/QtGuiu.def | 6 +++++- src/s60installs/eabi/QtGuiu.def | 11 ++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 40cdcde..c66bb89 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -13113,5 +13113,9 @@ EXPORTS ?hasBCM2727@QSymbianGraphicsSystemEx@@SA_NXZ @ 13112 NONAME ; bool QSymbianGraphicsSystemEx::hasBCM2727(void) ?constImageRef@QVolatileImage@@QBEABVQImage@@XZ @ 13113 NONAME ; class QImage const & QVolatileImage::constImageRef(void) const ?toVolatileImage@QPixmapData@@UBE?AVQVolatileImage@@XZ @ 13114 NONAME ; class QVolatileImage QPixmapData::toVolatileImage(void) const - ?qt_s60_setPartialScreenAutomaticTranslation@@YAX_N@Z @ 13115 NONAME ; void qt_s60_setPartialScreenAutomaticTranslation(bool) + ?qt_s60_setPartialScreenAutomaticTranslation@@YAX_N@Z @ 13115 NONAME ; void qt_s60_setPartialScreenAutomaticTranslation(bool) + ?aboutToUseGpuResources@QApplication@@IAEXXZ @ 13116 NONAME ; void QApplication::aboutToUseGpuResources(void) + ?aboutToReleaseGpuResources@QApplication@@IAEXXZ @ 13117 NONAME ; void QApplication::aboutToReleaseGpuResources(void) + ?emitAboutToUseGpuResources@QApplicationPrivate@@QAEXXZ @ 13118 NONAME ; void QApplicationPrivate::emitAboutToUseGpuResources(void) + ?emitAboutToReleaseGpuResources@QApplicationPrivate@@QAEXXZ @ 13119 NONAME ; void QApplicationPrivate::emitAboutToReleaseGpuResources(void) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 723fcf6..9d39b90 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12198,11 +12198,8 @@ EXPORTS _ZNK11QPixmapData15toVolatileImageEv @ 12197 NONAME _ZNK14QVolatileImage13constImageRefEv @ 12198 NONAME _Z43qt_s60_setPartialScreenAutomaticTranslationb @ 12199 NONAME - _ZN11QTextEngine16getClusterLengthEPtPK17HB_CharAttributesiiiPi @ 12200 NONAME - _ZN11QTextEngine18positionInLigatureEPK11QScriptItemi6QFixedS3_ib @ 12201 NONAME - _ZN12QApplication22aboutToUseGpuResourcesEv @ 12202 NONAME - _ZN12QApplication26aboutToReleaseGpuResourcesEv @ 12203 NONAME - _ZN14QWidgetPrivate16_q_cleanupWinIdsEv @ 12204 NONAME - _ZN19QApplicationPrivate26emitAboutToUseGpuResourcesEv @ 12205 NONAME - _ZN19QApplicationPrivate30emitAboutToReleaseGpuResourcesEv @ 12206 NONAME + _ZN12QApplication22aboutToUseGpuResourcesEv @ 12200 NONAME + _ZN12QApplication26aboutToReleaseGpuResourcesEv @ 12201 NONAME + _ZN19QApplicationPrivate26emitAboutToUseGpuResourcesEv @ 12202 NONAME + _ZN19QApplicationPrivate30emitAboutToReleaseGpuResourcesEv @ 12203 NONAME -- cgit v0.12 From e15d2359aa9f78ae4d6b427531001b907980a595 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Mon, 17 Oct 2011 15:57:31 +0100 Subject: Symbian - fix compile error when default configured New code assumed building with OpenGL/OpenVG, which is the production configuration, but not the default configuration Reviewed-By: Jani Hautakangas Task-Number: QTBUG-21996 --- src/gui/painting/qgraphicssystemex_symbian.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qgraphicssystemex_symbian.cpp b/src/gui/painting/qgraphicssystemex_symbian.cpp index 32e040f..5a182ff 100644 --- a/src/gui/painting/qgraphicssystemex_symbian.cpp +++ b/src/gui/painting/qgraphicssystemex_symbian.cpp @@ -46,7 +46,7 @@ #include -#ifdef Q_SYMBIAN_SUPPORTS_SURFACES +#if defined(Q_SYMBIAN_SUPPORTS_SURFACES) && !defined (QT_NO_EGL) #include "private/qegl_p.h" #endif @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE static bool bcm2727Initialized = false; static bool bcm2727 = false; -#ifdef Q_SYMBIAN_SUPPORTS_SURFACES +#if defined(Q_SYMBIAN_SUPPORTS_SURFACES) && !defined (QT_NO_EGL) typedef EGLBoolean (*NOK_resource_profiling)(EGLDisplay, EGLint, EGLint*, EGLint, EGLint*); #define EGL_PROF_TOTAL_MEMORY_NOK 0x3070 #endif @@ -69,7 +69,7 @@ bool QSymbianGraphicsSystemEx::hasBCM2727() if (bcm2727Initialized) return bcm2727; -#ifdef Q_SYMBIAN_SUPPORTS_SURFACES +#if defined(Q_SYMBIAN_SUPPORTS_SURFACES) && !defined (QT_NO_EGL) EGLDisplay display = QEgl::display(); #if 1 // Hacky but fast ~0ms. -- cgit v0.12 From b9a3d4bf7827aa631995d47233d47583917a5a7f Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Tue, 18 Oct 2011 13:04:21 +0300 Subject: Fix to QGLWidget crash QGLWidget crashed due to regression caused by fix to QTTH-1553. Crash only occurred if application was locked to landscape mode but started when device was in portrait mode. Task-number: QTTH-1597 Reviewed-by: Laszlo Agocs --- src/opengl/qgl.cpp | 7 +++++-- src/opengl/qgl_p.h | 2 ++ src/opengl/qgl_symbian.cpp | 18 +++++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index ca16cca..3b3da43 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -4297,7 +4297,7 @@ bool QGLWidget::event(QEvent *e) // if we've reparented a window that has the current context // bound, we need to rebind that context to the new window id if (d->glcx == QGLContext::currentContext()) - makeCurrent(); + makeCurrent(); // Shouldn't happen but keep it here just for sure if (testAttribute(Qt::WA_TranslucentBackground)) setContext(new QGLContext(d->glcx->requestedFormat(), this)); @@ -4305,8 +4305,11 @@ bool QGLWidget::event(QEvent *e) // A re-parent is likely to destroy the Symbian window and re-create it. It is important // that we free the EGL surface _before_ the winID changes - otherwise we can leak. - if (e->type() == QEvent::ParentAboutToChange) + if (e->type() == QEvent::ParentAboutToChange) { + if (d->glcx == QGLContext::currentContext()) + d->glcx->doneCurrent(); d->glcx->d_func()->destroyEglSurfaceForDevice(); + } if ((e->type() == QEvent::ParentChange) || (e->type() == QEvent::WindowStateChange)) { // The window may have been re-created during re-parent or state change - if so, the EGL diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 2ca8dc9..c56b2db 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -175,6 +175,7 @@ public: #endif #if defined(Q_OS_SYMBIAN) , eglSurfaceWindowId(0) + , surfaceSizeInitialized(false) #endif { isGLWidget = 1; @@ -220,6 +221,7 @@ public: #ifdef Q_OS_SYMBIAN void recreateEglSurface(); WId eglSurfaceWindowId; + bool surfaceSizeInitialized : 1; #endif }; diff --git a/src/opengl/qgl_symbian.cpp b/src/opengl/qgl_symbian.cpp index b8e5c22..94c63fc 100644 --- a/src/opengl/qgl_symbian.cpp +++ b/src/opengl/qgl_symbian.cpp @@ -259,7 +259,7 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) // almost same as return true; } -void QGLWidget::resizeEvent(QResizeEvent *) +void QGLWidget::resizeEvent(QResizeEvent *e) { Q_D(QGLWidget); if (!isValid()) @@ -270,17 +270,18 @@ void QGLWidget::resizeEvent(QResizeEvent *) if (this == qt_gl_share_widget()) return; - if (QGLContext::currentContext()) - doneCurrent(); - - // Symbian needs to recreate the surface on resize. - d->recreateEglSurface(); + if (!d->surfaceSizeInitialized || e->oldSize() != e->size()) { + // On Symbian we need to recreate the surface on resize. + d->recreateEglSurface(); + d->surfaceSizeInitialized = true; + } makeCurrent(); + if (!d->glcx->initialized()) glInit(); + resizeGL(width(), height()); - //handle overlay } const QGLContext* QGLWidget::overlayContext() const @@ -363,6 +364,9 @@ void QGLWidgetPrivate::recreateEglSurface() WId currentId = q->winId(); if (glcx->d_func()->eglSurface != EGL_NO_SURFACE) { + if (glcx == QGLContext::currentContext()) + glcx->doneCurrent(); + eglDestroySurface(glcx->d_func()->eglContext->display(), glcx->d_func()->eglSurface); } -- cgit v0.12 From 20b00a46fefcbfd75c6c8d758a42ad0d31ae9a84 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Tue, 18 Oct 2011 14:32:43 +0200 Subject: Fix the build for makefile build system of Symbian All includes for private headers should have private directory info. Reviewed-by: Shane Kearns --- src/gui/widgets/qlabel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qlabel.cpp b/src/gui/widgets/qlabel.cpp index c0be3e1..2b6eeb7 100644 --- a/src/gui/widgets/qlabel.cpp +++ b/src/gui/widgets/qlabel.cpp @@ -60,7 +60,7 @@ #endif #ifdef Q_OS_SYMBIAN -#include "qt_s60_p.h" +#include "private/qt_s60_p.h" #endif QT_BEGIN_NAMESPACE -- cgit v0.12 From b7179d6f284e277b84c54226be05832a25576387 Mon Sep 17 00:00:00 2001 From: mread Date: Tue, 18 Oct 2011 13:45:28 +0100 Subject: Fixed access to null threadData in ~QObjectPrivate If a class derived from QObjectPrivate throws an exception in its constructor, ~QObjectPrivate will be invoked with threadData being null. This change tests for null before accessing threadData. Task-number: QTBUG-4871 incidental finding Reviewed-by: Shane Kearns --- src/corelib/kernel/qobject.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 5d6e4d7..1f716bc 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -163,14 +163,15 @@ QObjectPrivate::~QObjectPrivate() { if (pendTimer) { // unregister pending timers - if (threadData->eventDispatcher) + if (threadData && threadData->eventDispatcher) threadData->eventDispatcher->unregisterTimers(q_ptr); } if (postedEvents) QCoreApplication::removePostedEvents(q_ptr, 0); - threadData->deref(); + if (threadData) + threadData->deref(); delete static_cast(metaObject); #ifdef QT_JAMBI_BUILD -- cgit v0.12 From c838a413ee15b5ee872769f914f76ed3925b2201 Mon Sep 17 00:00:00 2001 From: mread Date: Tue, 18 Oct 2011 13:51:56 +0100 Subject: Catch potential throw in ~QSymbianControl The call to topData() in ~QSymbianControl can create the required object if it does not already exist. This can then throw an exception if it fails, which is not allowed to escape the destructor. So it is caught and ignored. Task-number: QTBUG-4871 incidental finding Reviewed-by: Shane Kearns --- src/gui/kernel/qapplication_s60.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 7d198ce..f1221eb 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -584,7 +584,11 @@ QSymbianControl::~QSymbianControl() { // Ensure backing store is deleted before the top-level // window is destroyed - qt_widget_private(qwidget)->topData()->backingStore.destroy(); + QT_TRY { + qt_widget_private(qwidget)->topData()->backingStore.destroy(); + } QT_CATCH(const std::exception&) { + // ignore exceptions, nothing can be done + } if (S60->curWin == this) S60->curWin = 0; -- cgit v0.12 From c9ae5814eb40acdb683004277573a09c6b78aba9 Mon Sep 17 00:00:00 2001 From: mread Date: Tue, 18 Oct 2011 13:59:51 +0100 Subject: QS60StyleAnimation exception safety QS60StyleAnimation had a number of exception safety problems. - Exceptions from QS60StyleAnimation/V2 could panic a TRAP harness. - Pointers could be uninitialised on exception in constructor. Problems solved by switching to QScopedPointer and simplifying the code. Task-number: QTBUG-4871 incidental finding Reviewed-by: Sami Merila --- src/gui/styles/qs60style_p.h | 4 ++-- src/gui/styles/qs60style_s60.cpp | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 2fa8c7f..ad55761 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -473,8 +473,8 @@ public: private: //data members //TODO: consider changing these to non-pointers as the classes are rather small anyway - AnimationData *m_defaultData; - AnimationDataV2 *m_currentData; + QScopedPointer m_defaultData; + QScopedPointer m_currentData; }; #endif //Q_WS_S60 diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index cfb10fa..eb59115 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -132,14 +132,12 @@ AnimationDataV2::~AnimationDataV2() QS60StyleAnimation::QS60StyleAnimation(const QS60StyleEnums::SkinParts part, int frames, int interval) { - QT_TRAP_THROWING(m_defaultData = new (ELeave) AnimationData(part, frames, interval)); - QT_TRAP_THROWING(m_currentData = new (ELeave) AnimationDataV2(*m_defaultData)); + m_defaultData.reset(new AnimationData(part, frames, interval)); + m_currentData.reset(new AnimationDataV2(*m_defaultData)); } QS60StyleAnimation::~QS60StyleAnimation() { - delete m_currentData; - delete m_defaultData; } void QS60StyleAnimation::setAnimationObject(CAknBitmapAnimation* animation) @@ -152,9 +150,7 @@ void QS60StyleAnimation::setAnimationObject(CAknBitmapAnimation* animation) void QS60StyleAnimation::resetToDefaults() { - delete m_currentData; - m_currentData = 0; - QT_TRAP_THROWING(m_currentData = new (ELeave) AnimationDataV2(*m_defaultData)); + m_currentData.reset(new AnimationDataV2(*m_defaultData)); } class QS60StyleModeSpecifics -- cgit v0.12 From 72bf6105214bfc26cff33632f7f4bdeed9cdf362 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 18 Oct 2011 16:18:06 +0100 Subject: FTP - fix interoperability issues with SIZE command Certain FTP servers refuse the SIZE command in ASCII mode (proftpd) or refuse the SIZE command in ASCII mode for large files. This is a security feature, as the SIZE command requires reading the whole file and counting line ends which can cause denial of services. In binary mode, the file size on disc is reported, which is a relatively quick operation. Qt had two problems here: 1. when size command fails, the total size was reported as -1, whereas the documentation of QFtp::dataTransferProgress states it should be reported as 0 (so that QProgressDialog can display a wait note rather than progress bar) 2. SIZE command was sent before setting the type of the transfer to ASCII / Binary. This is a problem as the size reported by the server is incorrect. Also it usually means sending ASCII SIZE for Binary transfers, which results in the 550 error on FTP servers with DOS protection. Task-Number: QTTH-1428 Reviewed-By: Peter Hartmann --- src/network/access/qftp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index 50a3b1e..eccfea6 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -1851,11 +1851,11 @@ int QFtp::cd(const QString &dir) int QFtp::get(const QString &file, QIODevice *dev, TransferType type) { QStringList cmds; - cmds << QLatin1String("SIZE ") + file + QLatin1String("\r\n"); if (type == Binary) cmds << QLatin1String("TYPE I\r\n"); else cmds << QLatin1String("TYPE A\r\n"); + cmds << QLatin1String("SIZE ") + file + QLatin1String("\r\n"); cmds << QLatin1String(d_func()->transferMode == Passive ? "PASV\r\n" : "PORT\r\n"); cmds << QLatin1String("RETR ") + file + QLatin1String("\r\n"); return d_func()->addCommand(new QFtpCommand(Get, cmds, dev)); @@ -2336,7 +2336,7 @@ void QFtpPrivate::_q_piError(int errorCode, const QString &text) // non-fatal errors if (c->command == QFtp::Get && pi.currentCommand().startsWith(QLatin1String("SIZE "))) { - pi.dtp.setBytesTotal(-1); + pi.dtp.setBytesTotal(0); return; } else if (c->command==QFtp::Put && pi.currentCommand().startsWith(QLatin1String("ALLO "))) { return; -- cgit v0.12 From 20542f9546637bd649c928226249be0ffc91841b Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Wed, 19 Oct 2011 09:39:22 +0300 Subject: Workaround to VideoCore III scissor bug. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some versions of VideoCore III drivers seem to pollute and use stencil buffer when using glScissors. Workaround is to clear stencil buffer before disabling scissoring. Task-number: QT-5308 Reviewed-by: Samuel Rødal --- src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 2 ++ src/opengl/qgl.cpp | 2 ++ src/opengl/qgl_egl.cpp | 11 ++++++++++- src/opengl/qgl_p.h | 2 ++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 047d589..999a074 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -2059,6 +2059,8 @@ void QGL2PaintEngineExPrivate::updateClipScissorTest() currentScissorBounds = bounds; if (bounds == QRect(0, 0, width, height)) { + if (ctx->d_func()->workaround_brokenScissor) + clearClip(0); glDisable(GL_SCISSOR_TEST); } else { glEnable(GL_SCISSOR_TEST); diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 3b3da43..af160d8 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1716,6 +1716,8 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) workaround_brokenTextureFromPixmap = false; workaround_brokenTextureFromPixmap_init = false; + workaround_brokenScissor = false; + for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i) vertexAttributeArraysEnabledState[i] = false; } diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp index a589118..07134cf 100644 --- a/src/opengl/qgl_egl.cpp +++ b/src/opengl/qgl_egl.cpp @@ -192,7 +192,9 @@ void QGLContext::makeCurrent() if (!d->workaroundsCached) { d->workaroundsCached = true; const char *renderer = reinterpret_cast(glGetString(GL_RENDERER)); - if (renderer && (strstr(renderer, "SGX") || strstr(renderer, "MBX"))) { + if (!renderer) + return; + if ((strstr(renderer, "SGX") || strstr(renderer, "MBX"))) { // PowerVR MBX/SGX chips needs to clear all buffers when starting to render // a new frame, otherwise there will be a performance penalty to pay for // each frame. @@ -229,6 +231,13 @@ void QGLContext::makeCurrent() d->workaround_brokenFBOReadBack = true; } } + } else if (strstr(renderer, "VideoCore III")) { + // Some versions of VideoCore III drivers seem to pollute and use + // stencil buffer when using glScissors even if stencil test is disabled. + // Workaround is to clear stencil buffer before disabling scissoring. + + // qDebug() << "Found VideoCore III driver, enabling brokenDisableScissorTest"; + d->workaround_brokenScissor = true; } } } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index c56b2db..d76f0b0 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -415,6 +415,8 @@ public: uint workaround_brokenTextureFromPixmap : 1; uint workaround_brokenTextureFromPixmap_init : 1; + uint workaround_brokenScissor : 1; + QPaintDevice *paintDevice; QColor transpColor; QGLContext *q_ptr; -- cgit v0.12 From 29495592d27505feff024d574e1333809794c304 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 19 Oct 2011 11:07:40 +0100 Subject: Use QBasicAtomicInt as a static variable QAtomicInt has a constructor, so QBasicAtomicInt needs to be used instead to allow compile time initialisation. Task-Number: QTBUG-20343 Reviewed-By: Olivier Goffart --- src/network/access/qnetworkaccessbackend.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 88c45d1..1dc1268 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -72,10 +72,10 @@ public: QMutex mutex; //this is used to avoid (re)constructing factory data from destructors of other global classes - static QAtomicInt valid; + static QBasicAtomicInt valid; }; Q_GLOBAL_STATIC(QNetworkAccessBackendFactoryData, factoryData) -QAtomicInt QNetworkAccessBackendFactoryData::valid; +QBasicAtomicInt QNetworkAccessBackendFactoryData::valid = Q_BASIC_ATOMIC_INITIALIZER(0); QNetworkAccessBackendFactory::QNetworkAccessBackendFactory() { -- cgit v0.12 From 55c2ea18c522bd8700f43884124e02b460cdb5e2 Mon Sep 17 00:00:00 2001 From: aavit Date: Wed, 19 Oct 2011 14:02:24 +0200 Subject: Fixes: the png_handle_cHRM crash bug in bundled libpng 1.5.4 The PNG Development Group explains that libpng 1.5.4 (only) introduced a divide-by-zero bug in png_handle_cHRM(), which could lead to crashes (denial of service) for certain malformed PNGs. Ref. http://www.libpng.org/pub/png/libpng.html Task-number: QTBUG-22168 --- src/3rdparty/libpng/pngrutil.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/3rdparty/libpng/pngrutil.c b/src/3rdparty/libpng/pngrutil.c index 07e46e2..daf3c5e 100644 --- a/src/3rdparty/libpng/pngrutil.c +++ b/src/3rdparty/libpng/pngrutil.c @@ -1037,12 +1037,14 @@ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) */ png_uint_32 w = y_red + y_green + y_blue; - png_ptr->rgb_to_gray_red_coeff = (png_uint_16)(((png_uint_32)y_red * - 32768)/w); - png_ptr->rgb_to_gray_green_coeff = (png_uint_16)(((png_uint_32)y_green - * 32768)/w); - png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(((png_uint_32)y_blue * - 32768)/w); + if (w != 0) { + png_ptr->rgb_to_gray_red_coeff = (png_uint_16)(((png_uint_32)y_red * + 32768)/w); + png_ptr->rgb_to_gray_green_coeff = (png_uint_16)(((png_uint_32)y_green + * 32768)/w); + png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(((png_uint_32)y_blue * + 32768)/w); + } } } #endif -- cgit v0.12 From e5098123c12880d922923d1117f7b82995c6b5a0 Mon Sep 17 00:00:00 2001 From: aavit Date: Wed, 19 Oct 2011 14:02:24 +0200 Subject: Fixes: the png_handle_cHRM crash bug in bundled libpng 1.5.4 The PNG Development Group explains that libpng 1.5.4 (only) introduced a divide-by-zero bug in png_handle_cHRM(), which could lead to crashes (denial of service) for certain malformed PNGs. Ref. http://www.libpng.org/pub/png/libpng.html This commit contains the patch recommended by the PNG Development Group, ref. http://www.kb.cert.org/vuls/id/477046 Task-number: QTBUG-22168 (cherry picked from commit 55c2ea18c522bd8700f43884124e02b460cdb5e2) --- src/3rdparty/libpng/pngrutil.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/3rdparty/libpng/pngrutil.c b/src/3rdparty/libpng/pngrutil.c index 07e46e2..daf3c5e 100644 --- a/src/3rdparty/libpng/pngrutil.c +++ b/src/3rdparty/libpng/pngrutil.c @@ -1037,12 +1037,14 @@ png_handle_cHRM(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) */ png_uint_32 w = y_red + y_green + y_blue; - png_ptr->rgb_to_gray_red_coeff = (png_uint_16)(((png_uint_32)y_red * - 32768)/w); - png_ptr->rgb_to_gray_green_coeff = (png_uint_16)(((png_uint_32)y_green - * 32768)/w); - png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(((png_uint_32)y_blue * - 32768)/w); + if (w != 0) { + png_ptr->rgb_to_gray_red_coeff = (png_uint_16)(((png_uint_32)y_red * + 32768)/w); + png_ptr->rgb_to_gray_green_coeff = (png_uint_16)(((png_uint_32)y_green + * 32768)/w); + png_ptr->rgb_to_gray_blue_coeff = (png_uint_16)(((png_uint_32)y_blue * + 32768)/w); + } } } #endif -- cgit v0.12 From 104c22a68c422152ff3cf03eb3615e7826fefbd0 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 19 Oct 2011 14:00:28 +0100 Subject: Fix FTP example to handle failure to open network session The example code only dealt with successful opening of the session. If the session open failed, the application is stuck because the connect button is disabled. Moved the session open to be part of connection. Handled session open failure by puttin the UI back in the default state where connection button is enabled. Task-Number: QTBUG-9909 Reviewed-By: Miikka Heikkinen --- examples/network/qftp/ftpwindow.cpp | 56 +++++++++++++++++++++---------------- examples/network/qftp/ftpwindow.h | 3 ++ 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/examples/network/qftp/ftpwindow.cpp b/examples/network/qftp/ftpwindow.cpp index c0a2b73..fcdabe6 100644 --- a/examples/network/qftp/ftpwindow.cpp +++ b/examples/network/qftp/ftpwindow.cpp @@ -114,29 +114,6 @@ FtpWindow::FtpWindow(QWidget *parent) mainLayout->addWidget(buttonBox); setLayout(mainLayout); - QNetworkConfigurationManager manager; - if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { - // Get saved network configuration - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); - settings.beginGroup(QLatin1String("QtNetwork")); - const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); - settings.endGroup(); - - // If the saved network configuration is not currently discovered use the system default - QNetworkConfiguration config = manager.configurationFromIdentifier(id); - if ((config.state() & QNetworkConfiguration::Discovered) != - QNetworkConfiguration::Discovered) { - config = manager.defaultConfiguration(); - } - - networkSession = new QNetworkSession(config, this); - connect(networkSession, SIGNAL(opened()), this, SLOT(enableConnectButton())); - - connectButton->setEnabled(false); - statusLabel->setText(tr("Opening network session.")); - networkSession->open(); - } - setWindowTitle(tr("FTP")); } @@ -169,6 +146,37 @@ void FtpWindow::connectOrDisconnect() setCursor(Qt::WaitCursor); #endif + if (!networkSession || !networkSession->isOpen()) { + if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) { + if (!networkSession) { + // Get saved network configuration + QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + settings.beginGroup(QLatin1String("QtNetwork")); + const QString id = settings.value(QLatin1String("DefaultNetworkConfiguration")).toString(); + settings.endGroup(); + + // If the saved network configuration is not currently discovered use the system default + QNetworkConfiguration config = manager.configurationFromIdentifier(id); + if ((config.state() & QNetworkConfiguration::Discovered) != + QNetworkConfiguration::Discovered) { + config = manager.defaultConfiguration(); + } + + networkSession = new QNetworkSession(config, this); + connect(networkSession, SIGNAL(opened()), this, SLOT(connectToFtp())); + connect(networkSession, SIGNAL(error(QNetworkSession::SessionError)), this, SLOT(enableConnectButton())); + } + connectButton->setEnabled(false); + statusLabel->setText(tr("Opening network session.")); + networkSession->open(); + return; + } + } + connectToFtp(); +} + +void FtpWindow::connectToFtp() +{ //![1] ftp = new QFtp(this); connect(ftp, SIGNAL(commandFinished(int,bool)), @@ -407,7 +415,7 @@ void FtpWindow::enableConnectButton() settings.setValue(QLatin1String("DefaultNetworkConfiguration"), id); settings.endGroup(); - connectButton->setEnabled(networkSession->isOpen()); + connectButton->setEnabled(true); statusLabel->setText(tr("Please enter the name of an FTP server.")); } diff --git a/examples/network/qftp/ftpwindow.h b/examples/network/qftp/ftpwindow.h index a9df99d..f060bfc 100644 --- a/examples/network/qftp/ftpwindow.h +++ b/examples/network/qftp/ftpwindow.h @@ -43,6 +43,7 @@ #include #include +#include QT_BEGIN_NAMESPACE class QDialogButtonBox; @@ -71,6 +72,7 @@ private slots: void connectOrDisconnect(); void downloadFile(); void cancelDownload(); + void connectToFtp(); void ftpCommandFinished(int commandId, bool error); void addToList(const QUrlInfo &urlInfo); @@ -101,6 +103,7 @@ private: QFile *file; QNetworkSession *networkSession; + QNetworkConfigurationManager manager; //![1] }; -- cgit v0.12 From fc050e950734eaaf268c99f50310b8ec2312e089 Mon Sep 17 00:00:00 2001 From: Pasi Pentikainen Date: Wed, 19 Oct 2011 19:14:28 +0300 Subject: Symbian Linuxification building case changes Changes the libraries to match the case of files for building Symbian in linux. Reviewed-by: Miikka Heikkinen --- src/gui/dialogs/dialogs.pri | 6 +----- src/gui/styles/styles.pri | 6 +----- src/gui/util/util.pri | 6 +----- src/plugins/bearer/symbian/symbian.pri | 6 +----- src/plugins/phonon/mmf/mmf.pro | 12 ++---------- 5 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index 1dddb44..fc1ea9e 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -109,11 +109,7 @@ SOURCES += \ dialogs/qprintpreviewdialog.cpp symbian:contains(QT_CONFIG, s60) { - contains(CONFIG, is_using_gnupoc) { - LIBS += -lcommondialogs - } else { - LIBS += -lCommonDialogs - } + LIBS += -lcommondialogs SOURCES += dialogs/qfiledialog_symbian.cpp \ dialogs/qcolordialog_symbian.cpp } diff --git a/src/gui/styles/styles.pri b/src/gui/styles/styles.pri index b6eeec9..45ed8eb 100644 --- a/src/gui/styles/styles.pri +++ b/src/gui/styles/styles.pri @@ -172,11 +172,7 @@ contains( styles, s60 ):contains(QT_CONFIG, s60) { symbian { SOURCES += styles/qs60style_s60.cpp LIBS += -legul -lbmpanim - contains(CONFIG, is_using_gnupoc) { - LIBS += -laknicon -laknskins -laknskinsrv -lfontutils - } else { - LIBS += -lAknIcon -lAKNSKINS -lAKNSKINSRV -lFontUtils - } + LIBS += -laknicon -laknskins -laknskinsrv -lfontutils } else { SOURCES += styles/qs60style_simulated.cpp RESOURCES += styles/qstyle_s60_simulated.qrc diff --git a/src/gui/util/util.pri b/src/gui/util/util.pri index 7395604..7cf1a55 100644 --- a/src/gui/util/util.pri +++ b/src/gui/util/util.pri @@ -57,9 +57,5 @@ symbian { DEFINES += USE_SCHEMEHANDLER } - contains(CONFIG, is_using_gnupoc) { - LIBS += -ldirectorylocalizer - } else { - LIBS += -lDirectoryLocalizer - } + LIBS += -ldirectorylocalizer } diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri index 8d92f57..74dc4ee 100644 --- a/src/plugins/bearer/symbian/symbian.pri +++ b/src/plugins/bearer/symbian/symbian.pri @@ -21,11 +21,7 @@ LIBS += -lcommdb \ -lefsrv \ -lnetmeta -is_using_gnupoc { - LIBS += -lconnmon -} else { - LIBS += -lConnMon -} +LIBS += -lconnmon QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer target.path += $$[QT_INSTALL_PLUGINS]/bearer diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro index a84c5ac..5144f35 100644 --- a/src/plugins/phonon/mmf/mmf.pro +++ b/src/plugins/phonon/mmf/mmf.pro @@ -103,11 +103,7 @@ symbian { exists($${EPOCROOT}epoc32/include/mw/downloadmgrclient.h) { HEADERS += $$PHONON_MMF_DIR/download.h SOURCES += $$PHONON_MMF_DIR/download.cpp - contains(CONFIG, is_using_gnupoc) { - LIBS += -ldownloadmgr - } else { - LIBS += -lDownloadMgr - } + LIBS += -ldownloadmgr DEFINES += PHONON_MMF_PROGRESSIVE_DOWNLOAD } } @@ -129,11 +125,7 @@ symbian { LIBS += -lmediaclientaudiostream # For CMdaAudioOutputStream # These are for effects. - is_using_gnupoc { - LIBS += -laudioequalizereffect -lbassboosteffect -ldistanceattenuationeffect -ldopplerbase -leffectbase -lenvironmentalreverbeffect -llistenerdopplereffect -llistenerlocationeffect -llistenerorientationeffect -llocationbase -lloudnesseffect -lorientationbase -lsourcedopplereffect -lsourcelocationeffect -lsourceorientationeffect -lstereowideningeffect - } else { - LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerbase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect - } + LIBS += -laudioequalizereffect -lbassboosteffect -ldistanceattenuationeffect -ldopplerbase -leffectbase -lenvironmentalreverbeffect -llistenerdopplereffect -llistenerlocationeffect -llistenerorientationeffect -llocationbase -lloudnesseffect -lorientationbase -lsourcedopplereffect -lsourcelocationeffect -lsourceorientationeffect -lstereowideningeffect # This is to allow IAP to be specified LIBS += -lcommdb -- cgit v0.12 From 2be143ebb5246bb2f9b674bb09d23df5b2b6c504 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Thu, 20 Oct 2011 16:46:12 +0300 Subject: Accepting predicted text using hardware keyboard replaces unwanted part Current implementation of Symbian input context assumes that predicted word replacement happens so that the original typed text is at the end of the surrounded text. The logic fails, if to-be-predicted text is in the middle of, or in the beginning of another, already accepted word. As a fix, input context need to store the original cursor position, when reset() was called (this happens when word selection list appears). Input context is already storing a copy of a preedit string in this situation. Then, when word replacement happens, this stored cursor position is used instead of current cursor position (the native side might temporarily move the cursor to the end when word selection list opens or closes) to replace the typed word with one selected from suggested word list. Stored cursor position is dismissed immediately after used, or if cached preedit string is dismissed. Task-number: QTBUG-22147 Reviewed-by: Miikka Heikkinen --- src/gui/inputmethod/qcoefepinputcontext_p.h | 1 + src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 37 +++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index 8c30838..cefae5e 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -162,6 +162,7 @@ private: QBasicTimer m_tempPreeditStringTimeout; bool m_hasTempPreeditString; QString m_cachedPreeditString; + int m_cachedCursorAndAnchorPosition; int m_splitViewResizeBy; Qt::WindowStates m_splitViewPreviousWindowStates; diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 79005ce..66ab4c8 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -115,6 +115,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_formatRetriever(0), m_pointerHandler(0), m_hasTempPreeditString(false), + m_cachedCursorAndAnchorPosition(-1), m_splitViewResizeBy(0), m_splitViewPreviousWindowStates(Qt::WindowNoState) { @@ -158,9 +159,18 @@ void QCoeFepInputContext::reset() } // Store a copy of preedit text, if prediction is active and input context is reseted. // This is to ensure that we can replace preedit string after losing focus to FEP manager's - // internal sub-windows. - if (m_cachedPreeditString.isEmpty() && !(currentHints & Qt::ImhNoPredictiveText)) + // internal sub-windows. Additionally, store the cursor position if there is no selected text. + // This allows input context to replace preedit strings if they are not at the end of current + // text. + if (m_cachedPreeditString.isEmpty() && !(currentHints & Qt::ImhNoPredictiveText)) { m_cachedPreeditString = m_preeditString; + if (focusWidget()) { + int cursor = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt(); + int anchor = focusWidget()->inputMethodQuery(Qt::ImAnchorPosition).toInt(); + if (cursor == anchor) + m_cachedCursorAndAnchorPosition = cursor; + } + } commitCurrentString(true); } @@ -196,6 +206,7 @@ void QCoeFepInputContext::setFocusWidget(QWidget *w) void QCoeFepInputContext::widgetDestroyed(QWidget *w) { m_cachedPreeditString.clear(); + m_cachedCursorAndAnchorPosition = -1; // Make sure that the input capabilities of whatever new widget got focused are queried. CCoeControl *ctrl = w->effectiveWinId(); @@ -981,6 +992,7 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText, return; m_cachedPreeditString.clear(); + m_cachedCursorAndAnchorPosition = -1; commitTemporaryPreeditString(); @@ -1039,8 +1051,16 @@ void QCoeFepInputContext::UpdateFepInlineTextL(const TDesC& aNewInlineText, QString newPreeditString = qt_TDesC2QString(aNewInlineText); QInputMethodEvent event(newPreeditString, attributes); if (!m_cachedPreeditString.isEmpty()) { - event.setCommitString(QLatin1String(""), -m_cachedPreeditString.length(), m_cachedPreeditString.length()); + int cursorPos = w->inputMethodQuery(Qt::ImCursorPosition).toInt(); + // Predicted word is either replaced from the end of the word (normal case), + // or from stored location, if the predicted word is either in the beginning of, + // or in the middle of already committed word. + int diff = cursorPos - m_cachedCursorAndAnchorPosition; + int replaceLocation = (diff != m_cachedPreeditString.length()) ? diff : m_cachedPreeditString.length(); + + event.setCommitString(QLatin1String(""), -replaceLocation, m_cachedPreeditString.length()); m_cachedPreeditString.clear(); + m_cachedCursorAndAnchorPosition = -1; } else if (newPreeditString.isEmpty() && m_preeditString.isEmpty()) { // In Symbian world this means "erase last character". event.setCommitString(QLatin1String(""), -1, 1); @@ -1138,6 +1158,10 @@ void QCoeFepInputContext::SetCursorSelectionForFepL(const TCursorSelection& aCur int pos = aCursorSelection.iAnchorPos; int length = aCursorSelection.iCursorPos - pos; + if (m_cachedCursorAndAnchorPosition != -1) { + pos = m_cachedCursorAndAnchorPosition; + length = 0; + } QList attributes; attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, pos, length, QVariant()); @@ -1155,6 +1179,13 @@ void QCoeFepInputContext::GetCursorSelectionForFep(TCursorSelection& aCursorSele int cursor = w->inputMethodQuery(Qt::ImCursorPosition).toInt() + m_preeditString.size(); int anchor = w->inputMethodQuery(Qt::ImAnchorPosition).toInt() + m_preeditString.size(); + + // If the position is stored, use that value, so that word replacement from proposed word + // lists are added to the correct position. + if (m_cachedCursorAndAnchorPosition != -1) { + cursor = m_cachedCursorAndAnchorPosition; + anchor = m_cachedCursorAndAnchorPosition; + } QString text = w->inputMethodQuery(Qt::ImSurroundingText).value(); int combinedSize = text.size() + m_preeditString.size(); if (combinedSize < anchor || combinedSize < cursor) { -- cgit v0.12 From 0375fff2b077ddd20a97c1b1c8d34f22553abe0c Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 21 Oct 2011 09:59:54 +0200 Subject: Fix performance regression on Mac OS X when creating/destroying QMutex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cf17b743d2fe84ab259b7232ab07b58a1872e18e, which changed QMutex to use a Mach semaphore_t on Mac OS X. We now use pthread_mutex_t on Mac OS X as well. Contention performance is mostly unchanged, but the new constructionQMutex() benchmark added in this commit shows that creating/destroying a semaphore_t is about 20 times slower than pthread_mutex_t. Reviewed-by: Olivier Goffart Reviewed-by: João Abecasis --- src/corelib/thread/qmutex_p.h | 8 +--- src/corelib/thread/qmutex_unix.cpp | 50 +++------------------- .../corelib/thread/qmutex/tst_qmutex.cpp | 19 ++++++++ 3 files changed, 26 insertions(+), 51 deletions(-) diff --git a/src/corelib/thread/qmutex_p.h b/src/corelib/thread/qmutex_p.h index a9923c4..d2ffd28 100644 --- a/src/corelib/thread/qmutex_p.h +++ b/src/corelib/thread/qmutex_p.h @@ -58,10 +58,6 @@ #include #include -#if defined(Q_OS_MAC) -# include -#endif - #if defined(Q_OS_SYMBIAN) # include #endif @@ -83,9 +79,7 @@ public: Qt::HANDLE owner; uint count; -#if defined(Q_OS_MAC) - semaphore_t mach_semaphore; -#elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX) && !defined(Q_OS_SYMBIAN) +#if defined(Q_OS_UNIX) && !defined(Q_OS_LINUX) && !defined(Q_OS_SYMBIAN) volatile bool wakeup; pthread_mutex_t mutex; pthread_cond_t cond; diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp index 2a9d23c..790fad3 100644 --- a/src/corelib/thread/qmutex_unix.cpp +++ b/src/corelib/thread/qmutex_unix.cpp @@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE -#if !defined(Q_OS_MAC) && !defined(Q_OS_LINUX) +#if !defined(Q_OS_LINUX) static void report_error(int code, const char *where, const char *what) { if (code != 0) @@ -77,11 +77,7 @@ static void report_error(int code, const char *where, const char *what) QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) : QMutexData(mode), maximumSpinTime(MaximumSpinTimeThreshold), averageWaitTime(0), owner(0), count(0) { -#if defined(Q_OS_MAC) - kern_return_t r = semaphore_create(mach_task_self(), &mach_semaphore, SYNC_POLICY_FIFO, 0); - if (r != KERN_SUCCESS) - qWarning("QMutex: failed to create semaphore, error %d", r); -#elif !defined(Q_OS_LINUX) +#if !defined(Q_OS_LINUX) wakeup = false; report_error(pthread_mutex_init(&mutex, NULL), "QMutex", "mutex init"); report_error(pthread_cond_init(&cond, NULL), "QMutex", "cv init"); @@ -90,47 +86,13 @@ QMutexPrivate::QMutexPrivate(QMutex::RecursionMode mode) QMutexPrivate::~QMutexPrivate() { -#if defined(Q_OS_MAC) - kern_return_t r = semaphore_destroy(mach_task_self(), mach_semaphore); - if (r != KERN_SUCCESS) - qWarning("QMutex: failed to destroy semaphore, error %d", r); -#elif !defined(Q_OS_LINUX) +#if !defined(Q_OS_LINUX) report_error(pthread_cond_destroy(&cond), "QMutex", "cv destroy"); report_error(pthread_mutex_destroy(&mutex), "QMutex", "mutex destroy"); #endif } -#if defined(Q_OS_MAC) - -bool QMutexPrivate::wait(int timeout) -{ - if (contenders.fetchAndAddAcquire(1) == 0) { - // lock acquired without waiting - return true; - } - kern_return_t r; - if (timeout < 0) { - do { - r = semaphore_wait(mach_semaphore); - } while (r == KERN_ABORTED); - if (r != KERN_SUCCESS) - qWarning("QMutex: infinite wait failed, error %d", r); - } else { - mach_timespec_t ts; - ts.tv_nsec = ((timeout % 1000) * 1000) * 1000; - ts.tv_sec = (timeout / 1000); - r = semaphore_timedwait(mach_semaphore, ts); - } - contenders.deref(); - return r == KERN_SUCCESS; -} - -void QMutexPrivate::wakeUp() -{ - semaphore_signal(mach_semaphore); -} - -#elif defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) static inline int _q_futex(volatile int *addr, int op, int val, const struct timespec *timeout, int *addr2, int val2) { @@ -174,7 +136,7 @@ void QMutexPrivate::wakeUp() (void) _q_futex(&contenders._q_value, FUTEX_WAKE, 1, 0, 0, 0); } -#else // !Q_OS_MAC && !Q_OS_LINUX +#else // !Q_OS_LINUX bool QMutexPrivate::wait(int timeout) { @@ -221,7 +183,7 @@ void QMutexPrivate::wakeUp() report_error(pthread_mutex_unlock(&mutex), "QMutex::unlock", "mutex unlock"); } -#endif // !Q_OS_MAC && !Q_OS_LINUX +#endif // !Q_OS_LINUX QT_END_NAMESPACE diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp index 05a1575..eca38b6 100644 --- a/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp +++ b/tests/benchmarks/corelib/thread/qmutex/tst_qmutex.cpp @@ -128,7 +128,9 @@ private slots: void noThread_data(); void noThread(); + void constructionNative(); void uncontendedNative(); + void constructionQMutex(); void uncontendedQMutex(); void uncontendedQMutexLocker(); @@ -205,6 +207,15 @@ void tst_QMutex::noThread() QCOMPARE(int(count), N); } +void tst_QMutex::constructionNative() +{ + QBENCHMARK { + NativeMutexType mutex; + NativeMutexInitialize(&mutex); + NativeMutexDestroy(&mutex); + } +} + void tst_QMutex::uncontendedNative() { NativeMutexType mutex; @@ -216,6 +227,14 @@ void tst_QMutex::uncontendedNative() NativeMutexDestroy(&mutex); } +void tst_QMutex::constructionQMutex() +{ + QBENCHMARK { + QMutex mutex; + Q_UNUSED(mutex); + } +} + void tst_QMutex::uncontendedQMutex() { QMutex mutex; -- cgit v0.12 From 19bd31fc84cc4916aef4835429fc4a55e85d0c28 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Wed, 19 Oct 2011 11:40:57 +0200 Subject: Add the ability to enable various SSL bug workarounds. There are lots of buggy SSL servers around and to connect to them you need to disable various features. This commit adds the ability to disable the SSL ticket extension, the ability to disable the insertion of empty fragments, and the ability to disable compression. Task-number: QTBUG-21906 Change-Id: I3e1d0347a46e9030b889bbf15b2aad19b8513b73 Merge-request: 68 Reviewed-by: Peter Hartmann (cherry picked from commit 78d02e93aca5325fc5be9bfd275862795207abaa) (commit was cherry-picked from Qt 5 to 4.8 after agreeing with the author because the merge request was filed against Qt 5.) --- src/network/ssl/qssl.cpp | 30 +++++++++++ src/network/ssl/qssl.h | 11 ++++ src/network/ssl/qsslconfiguration.cpp | 29 +++++++++- src/network/ssl/qsslconfiguration.h | 4 ++ src/network/ssl/qsslconfiguration_p.h | 2 + src/network/ssl/qsslsocket.cpp | 2 + src/network/ssl/qsslsocket_openssl.cpp | 33 +++++++++--- tests/manual/qssloptions/main.cpp | 92 ++++++++++++++++++++++++++++++++ tests/manual/qssloptions/qssloptions.pro | 12 +++++ 9 files changed, 206 insertions(+), 9 deletions(-) create mode 100644 tests/manual/qssloptions/main.cpp create mode 100644 tests/manual/qssloptions/qssloptions.pro diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index 586c894..08a05ff 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -120,4 +120,34 @@ QT_BEGIN_NAMESPACE the correct setting for your protocol. */ +/*! + \enum QSsl::SslOption + + Describes the options that can be used to control the details of + SSL behaviour. These options are generally used to turn features off + to work around buggy servers. + + \value SslOptionDisableEmptyFragments Disables the insertion of empty + fragments into the data when using block ciphers. When enabled, this + prevents some attacks (such as the BEAST attack), however it is + incompatible with some servers. + \value SslOptionDisableTickets Disables the SSL session ticket + extension. This can cause slower connection setup, however some servers + are not compatible with the extension. + \value SslOptionDisableCompression Disables the SSL compression + extension. When enabled, this allows the data being passed over SSL to + be compressed, however some servers are not compatible with this + extension. + \value SslOptionDisableServerNameIndication Disables the SSL server + name indication extension. When enabled, this tells the server the virtual + host being accessed allowing it to respond with the correct certificate. + + By default, SslOptionDisableEmptyFragments is turned on since this causes + problems with a large number of servers, but the other options are disabled. + + Note: Availability of above options depends on the version of the SSL + backend in use. +*/ + + QT_END_NAMESPACE diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h index 2ecd1c3..453d4da 100644 --- a/src/network/ssl/qssl.h +++ b/src/network/ssl/qssl.h @@ -44,6 +44,7 @@ #define QSSL_H #include +#include QT_BEGIN_HEADER @@ -81,8 +82,18 @@ namespace QSsl { SecureProtocols, UnknownProtocol = -1 }; + + enum SslOption { + SslOptionDisableEmptyFragments = 0x01, + SslOptionDisableSessionTickets = 0x02, + SslOptionDisableCompression = 0x04, + SslOptionDisableServerNameIndication = 0x08 + }; + Q_DECLARE_FLAGS(SslOptions, SslOption) } +Q_DECLARE_OPERATORS_FOR_FLAGS(QSsl::SslOptions) + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index 69d3b66..e24076e 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -167,7 +167,8 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const d->caCertificates == other.d->caCertificates && d->protocol == other.d->protocol && d->peerVerifyMode == other.d->peerVerifyMode && - d->peerVerifyDepth == other.d->peerVerifyDepth; + d->peerVerifyDepth == other.d->peerVerifyDepth && + d->sslOptions == other.d->sslOptions; } /*! @@ -199,7 +200,8 @@ bool QSslConfiguration::isNull() const d->localCertificate.isNull() && d->privateKey.isNull() && d->peerCertificate.isNull() && - d->peerCertificateChain.count() == 0); + d->peerCertificateChain.count() == 0 && + d->sslOptions == 0); } /*! @@ -507,6 +509,29 @@ void QSslConfiguration::setCaCertificates(const QList &certific } /*! + Enables or disables an SSL compatibility option. + + \sa testSSlOption() +*/ +void QSslConfiguration::setSslOption(QSsl::SslOption option, bool on) +{ + if (on) + d->sslOptions |= option; + else + d->sslOptions &= ~option; +} + +/*! + Returns true if the specified SSL compatibility option is enabled. + + \sa testSSlOption() +*/ +bool QSslConfiguration::testSslOption(QSsl::SslOption option) const +{ + return d->sslOptions & option; +} + +/*! Returns the default SSL configuration to be used in new SSL connections. diff --git a/src/network/ssl/qsslconfiguration.h b/src/network/ssl/qsslconfiguration.h index 258b454..ff8c8fc 100644 --- a/src/network/ssl/qsslconfiguration.h +++ b/src/network/ssl/qsslconfiguration.h @@ -59,6 +59,7 @@ #include #include +#include QT_BEGIN_HEADER @@ -118,6 +119,9 @@ public: QList caCertificates() const; void setCaCertificates(const QList &certificates); + void setSslOption(QSsl::SslOption option, bool on); + bool testSslOption(QSsl::SslOption option) const; + static QSslConfiguration defaultConfiguration(); static void setDefaultConfiguration(const QSslConfiguration &configuration); diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h index af80e4c..b83edb9 100644 --- a/src/network/ssl/qsslconfiguration_p.h +++ b/src/network/ssl/qsslconfiguration_p.h @@ -98,6 +98,8 @@ public: QSslSocket::PeerVerifyMode peerVerifyMode; int peerVerifyDepth; + QSsl::SslOptions sslOptions; + // in qsslsocket.cpp: static QSslConfiguration defaultConfiguration(); static void setDefaultConfiguration(const QSslConfiguration &configuration); diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index df61fb6..3ac8f18 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -896,6 +896,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration) d->configuration.peerVerifyDepth = configuration.peerVerifyDepth(); d->configuration.peerVerifyMode = configuration.peerVerifyMode(); d->configuration.protocol = configuration.protocol(); + d->configuration.sslOptions = configuration.d->sslOptions; d->allowRootCertOnDemandLoading = false; } @@ -2027,6 +2028,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri ptr->protocol = global->protocol; ptr->peerVerifyMode = global->peerVerifyMode; ptr->peerVerifyDepth = global->peerVerifyDepth; + ptr->sslOptions = global->sslOptions; } /*! diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 8e53974..3942209 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -285,12 +285,29 @@ init_context: return false; } - // Enable all bug workarounds. - if (configuration.protocol == QSsl::TlsV1SslV3 || configuration.protocol == QSsl::SecureProtocols) { - q_SSL_CTX_set_options(ctx, SSL_OP_ALL|SSL_OP_NO_SSLv2); - } else { - q_SSL_CTX_set_options(ctx, SSL_OP_ALL); - } + // Enable bug workarounds. + long options; + if (configuration.protocol == QSsl::TlsV1SslV3 || configuration.protocol == QSsl::SecureProtocols) + options = SSL_OP_ALL|SSL_OP_NO_SSLv2; + else + options = SSL_OP_ALL; + + // This option is disabled by default, so we need to be able to clear it + if (configuration.sslOptions & QSsl::SslOptionDisableEmptyFragments) + options |= SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; + else + options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; + +#ifdef SSL_OP_NO_TICKET + if (configuration.sslOptions & QSsl::SslOptionDisableSessionTickets) + options |= SSL_OP_NO_TICKET; +#endif +#ifdef SSL_OP_NO_COMPRESSION + if (configuration.sslOptions & QSsl::SslOptionDisableCompression) + options |= SSL_OP_NO_COMPRESSION; +#endif + + q_SSL_CTX_set_options(ctx, options); // Initialize ciphers QByteArray cipherString; @@ -419,7 +436,9 @@ init_context: tlsHostName = hostName; QByteArray ace = QUrl::toAce(tlsHostName); // only send the SNI header if the URL is valid and not an IP - if (!ace.isEmpty() && !QHostAddress().setAddress(tlsHostName)) { + if (!ace.isEmpty() + && !QHostAddress().setAddress(tlsHostName) + && !(configuration.sslOptions & QSsl::SslOptionDisableServerNameIndication)) { #if OPENSSL_VERSION_NUMBER >= 0x10000000L if (!q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, ace.data())) #else diff --git a/tests/manual/qssloptions/main.cpp b/tests/manual/qssloptions/main.cpp new file mode 100644 index 0000000..6f2f361 --- /dev/null +++ b/tests/manual/qssloptions/main.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2011 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$ +** GNU Lesser General Public License Usage +** 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + if (argc < 3) { + QTextStream out(stdout); + out << "Usage: " << argv[0] << " host port [options]" << endl; + out << "The options can be one or more of the following:" << endl; + out << "enable_empty_fragments" << endl; + out << "disable_session_tickets" << endl; + out << "disable_compression" << endl; + out << "disable_sni" << endl; + return 1; + } + + QString host = QString::fromLocal8Bit(argv[1]); + int port = QString::fromLocal8Bit(argv[2]).toInt(); + + QSslConfiguration config = QSslConfiguration::defaultConfiguration(); + + for (int i=3; i < argc; i++) { + QString option = QString::fromLocal8Bit(argv[i]); + + if (option == QLatin1String("enable_empty_fragments")) + config.setSslOption(QSsl::SslOptionDisableEmptyFragments, false); + else if (option == QLatin1String("disable_session_tickets")) + config.setSslOption(QSsl::SslOptionDisableSessionTickets, true); + else if (option == QLatin1String("disable_compression")) + config.setSslOption(QSsl::SslOptionDisableCompression, true); + else if (option == QLatin1String("disable_sni")) + config.setSslOption(QSsl::SslOptionDisableServerNameIndication, true); + } + + QSslConfiguration::setDefaultConfiguration(config); + + QSslSocket socket; + //socket.setSslConfiguration(config); + socket.connectToHostEncrypted(host, port); + + if ( !socket.waitForEncrypted() ) { + qDebug() << socket.errorString(); + return 1; + } + + return 0; +} diff --git a/tests/manual/qssloptions/qssloptions.pro b/tests/manual/qssloptions/qssloptions.pro new file mode 100644 index 0000000..c1c8446 --- /dev/null +++ b/tests/manual/qssloptions/qssloptions.pro @@ -0,0 +1,12 @@ +load(qttest_p4) +TEMPLATE = app +TARGET = tst_qssloptions +DEPENDPATH += . +INCLUDEPATH += . + +QT -= gui +QT += network + +#CONFIG += release + +SOURCES += main.cpp -- cgit v0.12 From 5195c26208e9e2d80509c8308d590da2ef8a029b Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 21 Oct 2011 14:40:28 +0300 Subject: Regression caused by 2be143ebb5246bb2f9b674bb09d23df5b2b6c504 After 2be143ebb5246bb2f9b674bb09d23df5b2b6c504, if user opts to spell a word him/herself instead of using the suggested word list, the result is incorrect. The existing preedit string is committed, then cursor is moved to the beginning and user written word is added. E.g. user writes 'tadaa' then selects to spell it again and writes 'radar', in editor there is 'radartadaa'. Regression is caused due to storing the cursor pointer even in cases where there is no stored preedit string. Task-number: QTBUG-22147 Reviewed-by: Miikka Heikkinen --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 66ab4c8..eeec04b 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -164,7 +164,7 @@ void QCoeFepInputContext::reset() // text. if (m_cachedPreeditString.isEmpty() && !(currentHints & Qt::ImhNoPredictiveText)) { m_cachedPreeditString = m_preeditString; - if (focusWidget()) { + if (focusWidget() && !m_cachedPreeditString.isEmpty()) { int cursor = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt(); int anchor = focusWidget()->inputMethodQuery(Qt::ImAnchorPosition).toInt(); if (cursor == anchor) -- cgit v0.12 From 657b33557df8a997d7d440f33fd9fa34e97d1e0a Mon Sep 17 00:00:00 2001 From: Sergio Ahumada Date: Fri, 21 Oct 2011 23:15:05 +0200 Subject: Doc: Fix example code Task-number: QTWEBSITE-281 --- doc/src/getting-started/gettingstartedqt.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/getting-started/gettingstartedqt.qdoc b/doc/src/getting-started/gettingstartedqt.qdoc index fc9d799..eda5ee1 100644 --- a/doc/src/getting-started/gettingstartedqt.qdoc +++ b/doc/src/getting-started/gettingstartedqt.qdoc @@ -374,7 +374,7 @@ \code 25 Notepad::Notepad() 26 { -27 saveAction = new QAction(tr("&Open"), this); +27 openAction = new QAction(tr("&Open"), this); 28 saveAction = new QAction(tr("&Save"), this); 29 exitAction = new QAction(tr("E&xit"), this); 30 -- cgit v0.12 From 2a0908069f11ea28255d9f2c636f2a4c0f90125c Mon Sep 17 00:00:00 2001 From: Honglei Zhang Date: Mon, 24 Oct 2011 11:20:11 +0300 Subject: Update SQLite version mentioned in licence document SQLite version has been updated to 3.7.7.1 since Qt 4.8. The version number is corrected in licence document for 3rd party components. Reviewed-by: Trust Me --- doc/src/legal/3rdparty.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/legal/3rdparty.qdoc b/doc/src/legal/3rdparty.qdoc index ac1bc9d..2edfdd3 100644 --- a/doc/src/legal/3rdparty.qdoc +++ b/doc/src/legal/3rdparty.qdoc @@ -361,7 +361,7 @@ See \c src/3rdparty/sha1/sha1.cpp for more information about the terms and conditions under which the code is supplied. - \section1 SQLite (\c sqlite) version 3.5.9 + \section1 SQLite (\c sqlite) version 3.6.19 \e{SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.} -- cgit v0.12 From 417fb1565dc7b64a39c216a2daaa6208cec4a54a Mon Sep 17 00:00:00 2001 From: Sinan Tanilkan Date: Mon, 24 Oct 2011 15:47:12 +0200 Subject: Update changelog for Qt 4.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change recieved from Aurélien Gâteau --- dist/changes-4.8.0 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0 index 72d4230..d2c0807 100644 --- a/dist/changes-4.8.0 +++ b/dist/changes-4.8.0 @@ -208,6 +208,9 @@ Qt for Linux/X11 - Added experimental support for armCC - Experimental support for associating Wayland clients with PID or a token, to facilitate window management. + - Added plugin system for menubars, making it possible to provide + alternative menubar implementations. (eg, appmenu: + https://launchpad.net/appmenu-qt) Qt for Windows -------------- -- cgit v0.12 From eee1dfea9391ce0a163a241b26b3c2f069cbbe48 Mon Sep 17 00:00:00 2001 From: miniak Date: Mon, 24 Oct 2011 19:25:51 +0200 Subject: Update changelog for Qt 4.8 MR #1272: Fix QSysInfo::WindowsVersion checking (QSysInfo::WV_NT_based is a mask) MR #2616: QProgressBar: transparent background on Windows Vista (partId: PP_BAR -> PP_TRANSPARENTBAR) MR #2526: Fix comctl32 v6 dependency generation in Visual Studio 2005 and higher MR #2519: fix qFadeEffect windowOpacity issue on Windows MR #769: qt_reg_winclass(): use RegisterClassEx() to load the small IDI_ICON1 icon correctly Merge-request: 2708 Reviewed-by: Oswald Buddenhagen --- dist/changes-4.8.0 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0 index d2c0807..0d494ab 100644 --- a/dist/changes-4.8.0 +++ b/dist/changes-4.8.0 @@ -127,7 +127,8 @@ QtGui - QTextCursor optimization - QUndoGroup, QUndoStack: Allow using not only prefixes for undo command text [QTBUG-14442] - QUndoView: Allow different text for undo actions and items - - QCommonStyle: Fix overrides from the proxy style [QTBUG-20849] + - QCommonStyle: Fix overrides from the proxy style [QTBUG-20849] + - QWindowsVistaStyle: Draw CE_ProgressBarGroove correctly with PP_TRANSPARENTBAR. QtNetwork --------- @@ -220,6 +221,11 @@ Qt for Windows - MSVC runtime is bound to the runtime you're building with. This makes deployment on Windows easier. (QTBUG-8215) - QLocalSocket::isValid() has been fixed. (QTBUG-18204) + - qFadeEffect() issue fixed. The QSystemTrayIcon's popup menu no longer + stays transparent in rare circumstances after the animation has completed. + - The small 16x16 version of the default window icon is now being loaded + correctly from the IDI_ICON1 resource. + - Fixed version checking for untested versions of Windows. (QTBUG-20480) Qt for Mac OS X --------------- @@ -343,6 +349,8 @@ Qt for Windows CE * Implemented "aux" template that allows making use of the INSTALLS variable without building anything. Needed for projects with QML entry point. * MSVC now link with /DYNAMICBASE /NXCOMPAT in order to increase security. + * Add comctl32 v6 assembly dependency to both /SUBSYSTEM:WINDOWS and + /SUBSYSTEM:CONSOLE applications to get consistent look and behaviour. * Fix the language settings in generated Windows resource files. (QTBUG-12249) * Write and install pkg-config files for MinGW * Make PKGCONFIG referencing missing packages fatal; add packagesExist() for -- cgit v0.12 From bff34e5675f1f5a64e18d2848eafb817e519ef56 Mon Sep 17 00:00:00 2001 From: Markku Heikkila Date: Mon, 24 Oct 2011 19:28:45 +0200 Subject: Remove idc from mingw build. Mingw tool chain does not support com/idl so remove it. Task-number: QTBUG-22260 Merge-request: 2710 Reviewed-by: Oswald Buddenhagen --- src/tools/tools.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/tools.pro b/src/tools/tools.pro index 4736d09..32b920c 100644 --- a/src/tools/tools.pro +++ b/src/tools/tools.pro @@ -4,7 +4,7 @@ TOOLS_SUBDIRS = src_tools_bootstrap src_tools_moc src_tools_rcc !contains(QT_CONFIG, no-gui): TOOLS_SUBDIRS += src_tools_uic !cross_compile { contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_tools_uic3 - win32:!wince*: SRC_SUBDIRS += src_tools_idc + win32:!wince*:!win32-g++*: SRC_SUBDIRS += src_tools_idc } # Set subdir and respective target name -- cgit v0.12 From 5965fda95f61834e38204c4187ac27cf01a6033c Mon Sep 17 00:00:00 2001 From: Rimas Kudelis Date: Mon, 24 Oct 2011 19:34:54 +0200 Subject: Added Lithuanian translation of Qt. Merge-request: 2703 Reviewed-by: Oswald Buddenhagen --- translations/qt_lt.ts | 10247 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 10247 insertions(+) create mode 100644 translations/qt_lt.ts diff --git a/translations/qt_lt.ts b/translations/qt_lt.ts new file mode 100644 index 0000000..d484c0d --- /dev/null +++ b/translations/qt_lt.ts @@ -0,0 +1,10247 @@ + + + + + CloseButton + + Close Tab + Užverti kortelę + + + + Debugger::JSAgentWatchData + + [Array of length %1] + [masyvas, kurio ilgis %1] + + + <undefined> + <neapibrėžta> + + + + FakeReply + + Fake error ! + Fiktyvi klaida! + + + Fake error! + Fiktyvi klaida! + + + Invalid URL + Netinkamas URL adresas + + + + MAC_APPLICATION_MENU + + Services + Tarnybos + + + Hide %1 + Nerodyti „%1“ + + + Hide Others + Nerodyti kitų + + + Show All + Rodyti visas programas + + + Preferences... + Nuostatos… + + + Quit %1 + Baigti „%1“ darbą + + + About %1 + Apie „%1“ + + + + Phonon:: + + Notifications + Pranešimai + + + Music + Muzika + + + Video + Video + + + Communication + Komunikavimas + + + Games + Žaidimai + + + Accessibility + Prieiga neįgaliesiems + + + + Phonon::AudioOutput + + <html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html> + <html>Garso atkūrimo įrenginys <b>%1</b> neveikia.<br/>Bus naudojamas <b>%2</b>.</html> + + + <html>Switching to the audio playback device <b>%1</b><br/>which just became available and has higher preference.</html> + <html>Bus naudojamas garso atkūrimo įrenginys <b>%1</b>,<br/>ką tik tapęs prieinamu ir turintis aukštesnį prioritetą.</html> + + + Revert back to device '%1' + Toliau naudoti įrenginį „%1“ + + + <html>Switching to the audio playback device <b>%1</b><br/>which has higher preference or is specifically configured for this stream.</html> + <html>Bus naudojamas garso atkūrimo įrenginys <b>%1</b>,<br/>turintis aukštesnį prioritetą arba sukonfigūruotas būtent šiam srautui atkurti.</html> + + + + Phonon::Gstreamer::Backend + + Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. + Some video features have been disabled. + Dėmesio! Panašu, jog neįdiegtas „gstreamer0.10-plugins-good“ paketas. + Kai kurios vaizdo galimybės išjungtos. + + + Warning: You do not seem to have the base GStreamer plugins installed. + All audio and video support has been disabled + Dėmesio! Panašu, jog neįdiegti baziniai „GStreamer“ papildiniai. + Visas garso ir vaizdo palaikymas išjungtas. + + + + Phonon::Gstreamer::MediaObject + + Cannot start playback. + +Check your GStreamer installation and make sure you +have libgstreamer-plugins-base installed. + Nepavyko pradėti atkūrimo. + +Patikrinkite „GStreamer“ įdiegtį ir įsitikinkite, jog yra +įdiegtas paketas „libgstreamer-plugins-base“. + + + Missing codec helper script assistant. + Trūksta kodekų pagelbiklio scenarijaus. + + + Plugin codec installation failed for codec: %0 + Kodeko papildinio įdiegimas nepavyko kodekui: %0 + + + A required codec is missing. You need to install the following codec(s) to play this content: %0 + Trūksta būtino kodeko. Šiam turiniui atkurti būtina įdiegti šiuos kodekus: %0 + + + Could not open media source. + Nepavyko atverti medijos šaltinio. + + + Invalid source type. + Netinkamas šaltinio tipas. + + + Could not locate media source. + Nepavyko rasti medijos šaltinio. + + + Could not open audio device. The device is already in use. + Nepavyko atverti garso įrenginio. Įrenginys jau naudojamas. + + + Could not decode media source. + Nepavyko dekoduoti medijos šaltinio. + + + + Phonon::MMF + + Audio Output + Garso išvestis + + + The audio output device + Garso išvesties įrenginys + + + No error + Klaidų nėra + + + Not found + Nerastas + + + Out of memory + Pritrūko atminties + + + Not supported + Nepalaikomas + + + Overflow + Perpildymas + + + Underflow + Atvirkštinis perpildymas + + + Already exists + Jau yra + + + Path not found + Kelias nerastas + + + In use + Naudojamas + + + Not ready + Nepasiruošęs + + + Access denied + Prieiga uždrausta + + + Could not connect + Nepavyko užmegzti ryšio + + + Disconnected + Atsijungta + + + Permission denied + Nepakanka teisių + + + Insufficient bandwidth + Nepakankamas pralaidumas + + + Network unavailable + Tinklas nepasiekiamas + + + Network communication error + Tinklo ryšio klaida + + + Streaming not supported + Srautinis duomenų siuntimas nepalaikomas + + + Server alert + Serverio įspėjimas + + + Invalid protocol + Netinkamas protokolas + + + Invalid URL + Netinkamas URL adresas + + + Multicast error + Transliavimo grupiniu adresu klaida + + + Proxy server error + Įgaliotojo serverio klaida + + + Proxy server not supported + Įgaliotasis serveris nepalaikomas + + + Audio output error + Garso išvesties klaida + + + Video output error + Vaizdo išvesties klaida + + + Decoder error + Dekoderio klaida + + + Audio or video components could not be played + Nepavyko atkurti garso arba vaizdo komponentų + + + DRM error + Skaitmeninio teisių valdymo (DRM) klaida + + + Unknown error (%1) + Nežinoma klaida (%1) + + + + Phonon::MMF::AbstractMediaPlayer + + Not ready to play + Nepasiruošta atkūrimui + + + Error opening file + Klaida atveriant failą + + + Error opening URL + Klaida atveriant URL adresą + + + Error opening resource + Klaida atveriant išteklių + + + Error opening source: resource not opened + Klaida atveriant šaltinį: neatvertas išteklius + + + Setting volume failed + Nustatyti garsumo nepavyko + + + Loading clip failed + Įkelti įrašo nepavyko + + + Playback complete + Atkūrimas baigtas + + + Download error + Parsiuntimo klaida + + + + Phonon::MMF::AbstractVideoPlayer + + Pause failed + Pristabdyti nepavyko + + + Seek failed + Pereiti į kitą įrašo vietą nepavyko + + + Getting position failed + Gauti vietos nepavyko + + + Opening clip failed + Atverti įrašo nepavyko + + + + Phonon::MMF::AudioEqualizer + + %1 Hz + %1 Hz + + + + Phonon::MMF::AudioPlayer + + Getting position failed + Gauti vietos nepavyko + + + + Phonon::MMF::DsaVideoPlayer + + Video display error + Vaizdo atvaizdavimo klaida + + + + Phonon::MMF::EffectFactory + + Enabled + Įjungtas + + + + Phonon::MMF::EnvironmentalReverb + + Decay HF ratio (%) + DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime. + Slopimo AD santykis (%) + + + Decay time (ms) + DecayTime: Time over which reverberation is diminished. + Slopimo trukmė (ms) + + + Density (%) + Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value. + Tankis (%) + + + Diffusion (%) + Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value. + Difuzija (%) + + + Reflections delay (ms) + ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection. + Atspindžių vėlavimas (ms) + + + Reflections level (mB) + ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude. + Atspindžių lygis (mB) + + + Reverb delay (ms) + ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation. + Aido vėlavimas (ms) + + + Reverb level (mB) + ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude. + Aido lygis (mB) + + + Room HF level + RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound. + Kambario AD lygis + + + Room level (mB) + RoomLevel: Master volume control for all reflected sound. + Kambario lygis (mB) + + + + Phonon::MMF::MediaObject + + Error opening source: type not supported + Klaida atveriant šaltinį: tipas nepalaikomas + + + Error opening source: resource is compressed + Klaida atveriant šaltinį: išteklius suglaudintas + + + Error opening source: resource not valid + Klaida atveriant šaltinį: išteklius netinkamas + + + Error opening source: media type could not be determined + Klaida atveriant šaltinį: nepavyko nustatyti medijos tipo + + + Failed to set requested IAP + Nepavyko nustatyti prašomo interneto paslaugos teikėjo + + + + Phonon::MMF::StereoWidening + + Level (%) + Lygis (%) + + + + Phonon::MMF::SurfaceVideoPlayer + + Video display error + Vaizdo atvaizdavimo klaida + + + + Phonon::VolumeSlider + + Volume: %1% + Garsis: %1% + + + Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1% + Šio šliaužiklio pagalba galite keisti garsį. Kairiausioji pozicija lygi 0%, dešiniausioji – %1% + + + Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1% + Šio šliaužiklio pagalba galite keisti garsį. Kairiausioji pozicija lygi 0%, dešiniausioji – %1% + + + Muted + Nutildytas + + + + Q3Accel + + %1, %2 not defined + %1, %2 neapibrėžtas + + + Ambiguous %1 not handled + Nevienareikšmė kombinacija %1 neapdorota + + + + Q3DataTable + + True + Taip + + + False + Ne + + + Insert + Įterpti + + + Update + Atnaujinti + + + Delete + Pašalinti + + + + Q3FileDialog + + Copy or Move a File + Failo kopijavimas arba perkėlimas + + + Read: %1 + Skaitomas: %1 + + + Write: %1 + Rašomas: %1 + + + Cancel + Atsisakyti + + + All Files (*) + Visi failai (*) + + + Name + Vardas + + + Size + Dydis + + + Type + Tipas + + + Date + Data + + + Attributes + Atributai + + + &OK + &Gerai + + + Look &in: + &Vieta: + + + File &name: + &Failo vardas: + + + File &type: + Failo &tipas: + + + Back + Atgal + + + One directory up + Vienu lygiu aukščiau + + + Create New Folder + Kurti naują aplanką + + + List View + Rodyti sąrašą + + + Detail View + Rodyti išsamią informaciją + + + Preview File Info + Peržiūrėti failo savybes + + + Preview File Contents + Peržiūrėti failo turinį + + + Read-write + Skaitomas ir rašomas + + + Read-only + Tik skaitomas + + + Write-only + Tik rašomas + + + Inaccessible + Nepasiekiamas + + + Symlink to File + Simbolinė nuoroda į failą + + + Symlink to Directory + Simbolinė nuoroda į aplanką + + + Symlink to Special + Simbolinė nuoroda į spec. failą + + + File + Failas + + + Dir + Aplankas + + + Special + Spec. failas + + + Open + Atverti + + + Save As + Įrašyti kaip + + + &Open + At&verti + + + &Save + Į&rašyti + + + &Rename + Per&vardyti + + + &Delete + Pa&šalinti + + + R&eload + Įkelti iš &naujo + + + Sort by &Name + Rikiuoti pagal &vardą + + + Sort by &Size + Rikiuoti pagal &dydį + + + Sort by &Date + Rikiuoti pagal d&atą + + + &Unsorted + &Nerikiuoti + + + Sort + Rikiavimas + + + Show &hidden files + Rodyti pa&slėptus failus + + + the file + failą + + + the directory + aplanką + + + the symlink + simbolinę nuorodą + + + Delete %1 + Pašalinti %1 + + + <qt>Are you sure you wish to delete %1 "%2"?</qt> + <qt>Ar tikrai norite pašalinti %1 „%2“?</qt> + + + &Yes + &Taip + + + &No + &Ne + + + New Folder 1 + Naujas aplankas 1 + + + New Folder + Naujas aplankas + + + New Folder %1 + Naujas aplankas %1 + + + Find Directory + Ieškoti aplanko + + + Directories + Aplankai + + + Directory: + Aplankas: + + + Error + Klaida + + + %1 +File not found. +Check path and filename. + %1 +Failas nerastas. +Patikrinkite kelią ir failo vardą. + + + All Files (*.*) + Visi failai (*.*) + + + Open + Atverti + + + Select a Directory + Parinkite aplanką + + + + Q3LocalFs + + Could not read directory +%1 + Aplanko nuskaityti nepavyko +%1 + + + Could not create directory +%1 + Aplanko sukurti nepavyko +%1 + + + Could not remove file or directory +%1 + Failo ar aplanko pašalinti nepavyko +%1 + + + Could not rename +%1 +to +%2 + Nepavyko pervardyti +%1 +į +%2 + + + Could not open +%1 + Nepavyko atverti +%1 + + + Could not write +%1 + Nepavyko įrašyti +%1 + + + + Q3MainWindow + + Line up + Sulygiuoti + + + Customize... + Tinkinti… + + + + Q3NetworkProtocol + + Operation stopped by the user + Operaciją nutraukė naudotojas + + + + Q3ProgressDialog + + Cancel + Atsisakyti + + + + Q3TabDialog + + OK + Gerai + + + Apply + Pritaikyti + + + Help + Pagalba + + + Defaults + Numatytosios reikšmės + + + Cancel + Atsisakyti + + + + Q3TextEdit + + &Undo + &Atšaukti + + + &Redo + A&tstatyti + + + Cu&t + Iški&rpti + + + &Copy + &Kopijuoti + + + &Paste + Į&dėti + + + Clear + Išvalyti + + + Select All + Pažymėti viską + + + + Q3TitleBar + + System + Sistemos antraštė + + + Restore up + Atkurti langą + + + Minimize + Sumažinti + + + Restore down + Atkurti dydį + + + Maximize + Išdidinti + + + Close + Užverti + + + Contains commands to manipulate the window + Apima komandas darbui su langu + + + Puts a minimized window back to normal + Atstato sumažinto lango dydį + + + Moves the window out of the way + Paslepia langą + + + Puts a maximized window back to normal + Grąžina pradinį išdidinto lango dydį + + + Makes the window full screen + Išdidina langą per visą ekraną + + + Closes the window + Užveria langą + + + Displays the name of the window and contains controls to manipulate it + Rodo lango pavadinimą ir pateikia komandas darbui su juo + + + + Q3ToolBar + + More... + Daugiau… + + + + Q3UrlOperator + + The protocol `%1' is not supported + Protokolas „%1“ nepalaikomas + + + The protocol `%1' does not support listing directories + Protokole „%1“ katalogų sąrašų pateikimas nenumatytas + + + The protocol `%1' does not support creating new directories + Protokole „%1“ naujų katalogų kūrimas nepalaikomas + + + The protocol `%1' does not support removing files or directories + Protokole „%1“ failų ar aplankų šalinimas nenumatytas + + + The protocol `%1' does not support renaming files or directories + Protokole „%1“ failų ar aplankų pervardinimas nenumatytas + + + The protocol `%1' does not support getting files + Protokole „%1“ failų gavimas nenumatytas + + + The protocol `%1' does not support putting files + Protokole „%1“ failų įdėjimas nenumatytas + + + The protocol `%1' does not support copying or moving files or directories + Protokole „%1“ failų ar aplankų kopijavimas ar perkėlimas nenumatytas + + + (unknown) + (nežinoma) + + + + Q3Wizard + + &Cancel + &Atsisakyti + + + < &Back + < At&gal + + + &Next > + &Toliau > + + + &Finish + &Baigti + + + &Help + &Žinynas + + + + QAbstractSocket + + Socket operation timed out + Baigėsi operacijai su lizdu skirtas laikas + + + Operation on socket is not supported + Operacija su lizdu nepalaikoma + + + Host not found + Mazgas nerastas + + + Connection refused + Ryšys atmestas + + + Connection timed out + Baigėsi ryšiui skirtas laikas + + + Socket is not connected + Lizdas neprijungtas + + + Network unreachable + Tinklas nepasiekiamas + + + + QAbstractSpinBox + + &Select All + Pažymėti &viską + + + &Step up + &Padidinti + + + Step &down + Pa&mažinti + + + + QAccessibleButton + + Uncheck + Panaikinti žymėjimą + + + Check + Pažymėti + + + Press + Nuspausti + + + + QApplication + + Activate + Aktyvinti + + + Activates the program's main window + Suaktyvina pagrindinį programos langą + + + Executable '%1' requires Qt %2, found Qt %3. + Vykdomajam failui „%1“ reikalingos „Qt %2“ bibliotekos, tačiau aptiktos „Qt %3“. + + + Incompatible Qt Library Error + „Qt“ bibliotekos nesuderinamumo klaida + + + QT_LAYOUT_DIRECTION + Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout. + LTR + + + + QAxSelect + + Select ActiveX Control + Pasirinkite „ActiveX“ valdiklį + + + OK + Gerai + + + &Cancel + &Atsisakyti + + + COM &Object: + COM &objektas: + + + + QCheckBox + + Uncheck + Panaikinti žymėjimą + + + Check + Pažymėti + + + Toggle + Perjungti + + + + QColorDialog + + Hu&e: + &Atspalvis: + + + &Sat: + &Grynis: + + + &Val: + &Skaistis: + + + &Red: + &Raudona: + + + &Green: + &Žalia: + + + Bl&ue: + &Mėlyna: + + + A&lpha channel: + A&lfa kanalas: + + + Select Color + Parinkite spalvą + + + &Basic colors + &Bazinės spalvos + + + &Custom colors + &Naudotojo spalvos + + + &Add to Custom Colors + Į&traukti į naudotojo spalvas + + + + QComboBox + + False + Ne + + + True + Taip + + + Open + Atverti + + + Close + Užverti + + + + QCoreApplication + + %1: already exists + QSystemSemaphore + %1: jau egzistuoja + + + %1: does not exist + QSystemSemaphore + %1: neegzistuoja + + + %1: out of resources + QSystemSemaphore + %1: pritrūko išteklių + + + %1: permission denied + QSystemSemaphore + %1: nepakanka teisių + + + %1: unknown error %2 + QSystemSemaphore + %1: nežinoma klaida %2 + + + %1: key is empty + QSystemSemaphore + %1: raktas tuščias + + + %1: unable to make key + QSystemSemaphore + %1: rakto sukurti nepavyko + + + %1: ftok failed + QSystemSemaphore + %1: nepavyko ftok() + + + + QDB2Driver + + Unable to connect + Nepavyko užmegzti ryšio + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + Unable to set autocommit + Nepavyko įjungti automatinio transakcijų patvirtinimo + + + + QDB2Result + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + Unable to prepare statement + Nepavyko paruošti sakinio + + + Unable to bind variable + Nepavyko susieti kintamojo + + + Unable to fetch record %1 + Nepavyko gauti įrašo %1 + + + Unable to fetch next + Nepavyko gauti tolesnio įrašo + + + Unable to fetch first + Nepavyko gauti pirmojo įrašo + + + + QDateTimeEdit + + AM + Priešpiet + + + am + priešpiet + + + PM + Popiet + + + pm + popiet + + + + QDeclarativeAbstractAnimation + + Cannot animate non-existent property "%1" + Negalima animuoti neegzistuojančios savybės „%1“ + + + Cannot animate read-only property "%1" + Negalima animuoti tik skaitymui skirtos savybės „%1“ + + + Animation is an abstract class + „Animation“ yra abstrakčioji klasė + + + + QDeclarativeAnchorAnimation + + Cannot set a duration of < 0 + Negalima nustatyti neigiamos trukmės + + + + QDeclarativeAnchors + + Possible anchor loop detected on fill. + + + + Possible anchor loop detected on centerIn. + + + + Cannot anchor to an item that isn't a parent or sibling. + + + + Possible anchor loop detected on vertical anchor. + + + + Possible anchor loop detected on horizontal anchor. + + + + Cannot specify left, right, and hcenter anchors. + + + + Cannot anchor to a null item. + + + + Cannot anchor a horizontal edge to a vertical edge. + + + + Cannot anchor item to self. + + + + Cannot specify top, bottom, and vcenter anchors. + + + + Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors. + + + + Cannot anchor a vertical edge to a horizontal edge. + + + + + QDeclarativeAnimatedImage + + Qt was built without support for QMovie + „Qt“ sukompiliuota be „QMovie“ palaikymo + + + + QDeclarativeApplication + + Application is an abstract class + „Application“ yra abstrakčioji klasė + + + + QDeclarativeBehavior + + Cannot change the animation assigned to a Behavior. + Elgsenai priskirtos animacijos pakeisti negalima. + + + + QDeclarativeBinding + + Binding loop detected for property "%1" + Aptikta ciklinė savybės „%1“ susietis + + + + QDeclarativeCompiledBindings + + Binding loop detected for property "%1" + Aptikta ciklinė savybės „%1“ susietis + + + + QDeclarativeCompiler + + Invalid property assignment: "%1" is a read-only property + + + + Invalid property assignment: unknown enumeration + + + + Invalid property assignment: string expected + + + + Invalid property assignment: url expected + + + + Invalid property assignment: unsigned int expected + + + + Invalid property assignment: int expected + + + + Invalid property assignment: number expected + + + + Invalid property assignment: color expected + + + + Invalid property assignment: date expected + + + + Invalid property assignment: time expected + + + + Invalid property assignment: datetime expected + + + + Invalid property assignment: point expected + + + + Invalid property assignment: size expected + + + + Invalid property assignment: rect expected + + + + Invalid property assignment: boolean expected + + + + Invalid property assignment: 3D vector expected + + + + Invalid property assignment: unsupported type "%1" + + + + Element is not creatable. + + + + Component elements may not contain properties other than id + + + + Invalid component id specification + + + + id is not unique + + + + Invalid component body specification + + + + Component objects cannot declare new properties. + + + + Component objects cannot declare new signals. + + + + Component objects cannot declare new functions. + + + + Cannot create empty component specification + + + + "%1.%2" is not available in %3 %4.%5. + + + + "%1.%2" is not available due to component versioning. + + + + Incorrectly specified signal assignment + + + + Cannot assign a value to a signal (expecting a script to be run) + + + + Empty signal assignment + + + + Empty property assignment + + + + Attached properties cannot be used here + + + + Non-existent attached object + + + + Invalid attached object assignment + + + + Cannot assign to non-existent default property + + + + Cannot assign to non-existent property "%1" + Negalima priskirti neegzistuojančiai savybei „%1“ + + + Invalid use of namespace + + + + Not an attached property name + + + + Invalid use of id property + + + + Property has already been assigned a value + + + + Invalid grouped property access + + + + Cannot assign a value directly to a grouped property + + + + Invalid property use + + + + Property assignment expected + + + + Single property assignment expected + + + + Unexpected object assignment + + + + Cannot assign object to list + + + + Can only assign one binding to lists + + + + Cannot assign primitives to lists + + + + Cannot assign multiple values to a script property + + + + Invalid property assignment: script expected + + + + Cannot assign multiple values to a singular property + + + + Cannot assign object to property + + + + "%1" cannot operate on "%2" + + + + Duplicate default property + + + + Duplicate property name + + + + Property names cannot begin with an upper case letter + + + + Illegal property name + + + + Duplicate signal name + + + + Signal names cannot begin with an upper case letter + + + + Illegal signal name + + + + Duplicate method name + + + + Method names cannot begin with an upper case letter + + + + Illegal method name + + + + Property value set multiple times + + + + Invalid property nesting + + + + Cannot override FINAL property + + + + Invalid property type + + + + Invalid empty ID + + + + IDs cannot start with an uppercase letter + + + + IDs must start with a letter or underscore + + + + IDs must contain only letters, numbers, and underscores + + + + ID illegally masks global JavaScript property + + + + No property alias location + + + + Invalid alias location + + + + Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property> + + + + Invalid alias reference. Unable to find id "%1" + + + + Alias property exceeds alias bounds + + + + + QDeclarativeComponent + + Invalid empty URL + Negalimas tuščias URL adresas + + + createObject: value is not an object + createObject: reikšmė nėra objektas + + + + QDeclarativeConnections + + Cannot assign to non-existent property "%1" + Negalima priskirti neegzistuojančiai savybei „%1“ + + + Connections: nested objects not allowed + Connections: objektai objektuose neleidžiami + + + Connections: syntax error + Connections: sintaksės klaida + + + Connections: script expected + Connections: tikėtasi scenarijaus + + + + QDeclarativeEngine + + executeSql called outside transaction() + + + + Read-only Transaction + + + + Version mismatch: expected %1, found %2 + + + + SQL transaction failed + + + + transaction: missing callback + + + + SQL: database version mismatch + + + + + QDeclarativeFlipable + + front is a write-once property + „front“ yra tik kartą rašoma savybė + + + back is a write-once property + „back“ yra tik kartą rašoma savybė + + + + QDeclarativeImportDatabase + + cannot load module "%1": File name case mismatch for "%2" + + + + module "%1" definition "%2" not readable + + + + plugin cannot be loaded for module "%1": %2 + + + + module "%1" plugin "%2" not found + + + + module "%1" version %2.%3 is not installed + + + + module "%1" is not installed + + + + "%1": no such directory + + + + import "%1" has no qmldir and no namespace + + + + - %1 is not a namespace + + + + - nested namespaces not allowed + + + + local directory + + + + is ambiguous. Found in %1 and in %2 + + + + is ambiguous. Found in %1 in version %2.%3 and %4.%5 + + + + is instantiated recursively + + + + is not a type + + + + File name case mismatch for "%2" + + + + + QDeclarativeKeyNavigationAttached + + KeyNavigation is only available via attached properties + + + + + QDeclarativeKeysAttached + + Keys is only available via attached properties + + + + + QDeclarativeLayoutMirroringAttached + + LayoutDirection attached property only works with Items + + + + LayoutMirroring is only available via attached properties + + + + + QDeclarativeListModel + + remove: index %1 out of range + + + + insert: value is not an object + + + + insert: index %1 out of range + + + + move: out of range + + + + append: value is not an object + + + + set: value is not an object + + + + set: index %1 out of range + + + + ListElement: cannot contain nested elements + + + + ListElement: cannot use reserved "id" property + + + + ListElement: cannot use script for property value + + + + ListModel: undefined property '%1' + + + + + QDeclarativeLoader + + Loader does not support loading non-visual elements. + + + + + QDeclarativeParentAnimation + + Unable to preserve appearance under complex transform + + + + Unable to preserve appearance under non-uniform scale + + + + Unable to preserve appearance under scale of 0 + + + + + QDeclarativeParentChange + + Unable to preserve appearance under complex transform + + + + Unable to preserve appearance under non-uniform scale + + + + Unable to preserve appearance under scale of 0 + + + + + QDeclarativeParser + + Illegal unicode escape sequence + + + + Illegal character + + + + Unclosed string at end of line + + + + Illegal escape sequence + + + + Unclosed comment at end of file + + + + Illegal syntax for exponential number + + + + Identifier cannot start with numeric literal + + + + Unterminated regular expression literal + + + + Invalid regular expression flag '%0' + + + + Unterminated regular expression backslash sequence + + + + Unterminated regular expression class + + + + Syntax error + + + + Unexpected token `%1' + + + + Expected token `%1' + + + + Property value set multiple times + + + + Expected type name + + + + Invalid import qualifier ID + + + + Reserved name "Qt" cannot be used as an qualifier + + + + Script import qualifiers must be unique. + + + + Script import requires a qualifier + + + + Library import requires a version + + + + Expected parameter type + + + + Invalid property type modifier + + + + Unexpected property type modifier + + + + Expected property type + + + + Readonly not yet supported + + + + JavaScript declaration outside Script element + + + + + QDeclarativePauseAnimation + + Cannot set a duration of < 0 + Negalima nustatyti neigiamos trukmės + + + + QDeclarativePixmap + + Error decoding: %1: %2 + Dekodavimo klaida: %1: %2 + + + Failed to get image from provider: %1 + Nepavyko iš tiekėjo gauti paveikslo: %1 + + + Cannot open: %1 + Nepavyko atverti: %1 + + + + QDeclarativePropertyAnimation + + Cannot set a duration of < 0 + Negalima nustatyti neigiamos trukmės + + + + QDeclarativePropertyChanges + + PropertyChanges does not support creating state-specific objects. + + + + Cannot assign to non-existent property "%1" + Negalima priskirti neegzistuojančiai savybei „%1“ + + + Cannot assign to read-only property "%1" + + + + + QDeclarativeTextInput + + Could not load cursor delegate + + + + Could not instantiate cursor delegate + + + + + QDeclarativeTypeLoader + + Script %1 unavailable + Scenarijus „%1“ nepasiekiamas + + + Type %1 unavailable + Tipas %1 nepasiekiamas + + + Namespace %1 cannot be used as a type + Vardų erdvė „%1“ negali būti naudojama kaip tipas + + + %1 %2 + %1 %2 + + + + QDeclarativeVME + + Unable to create object of type %1 + + + + Cannot assign value %1 to property %2 + + + + Cannot assign object type %1 with no default method + + + + Cannot connect mismatched signal/slot %1 %vs. %2 + + + + Cannot assign an object to signal property %1 + + + + Cannot assign object to list + + + + Cannot assign object to interface property + + + + Unable to create attached object + + + + Cannot set properties on %1 as it is null + + + + + QDeclarativeVisualDataModel + + Delegate component must be Item type. + + + + + QDeclarativeXmlListModel + + Qt was built without support for xmlpatterns + „Qt“ sukompiliuota be „xmlpatterns“ palaikymo + + + + QDeclarativeXmlListModelRole + + An XmlRole query must not start with '/' + „XmlRole“ užklausa negali prasidėti simboliu „/“ + + + + QDeclarativeXmlRoleList + + An XmlListModel query must start with '/' or "//" + „XmlListModel“ užklausa negali prasidėti simboliu „/“ arba „//“ + + + + QDial + + QDial + QDial + + + SpeedoMeter + Spidometras + + + SliderHandle + Šliaužiklio rankenėlė + + + + QDialog + + Done + Baigta + + + What's This? + Kas tai? + + + + QDialogButtonBox + + OK + Gerai + + + &OK + &Gerai + + + &Save + Į&rašyti + + + Save + Įrašyti + + + Open + Atverti + + + &Cancel + &Atsisakyti + + + Cancel + Atsisakyti + + + &Close + &Užverti + + + Close + Užverti + + + Apply + Pritaikyti + + + Reset + Atkurti + + + Help + Žinynas + + + Don't Save + Neįrašyti + + + Close without Saving + Užverti neįrašius + + + Discard + Atmesti + + + &Yes + &Taip + + + Yes to &All + Taip &viskam + + + &No + &Ne + + + N&o to All + N&e viskam + + + Save All + Įrašyti visus + + + Abort + Nutraukti + + + Retry + Kartoti bandymą + + + Ignore + Nepaisyti + + + Restore Defaults + Atkurti numatytąsias reikšmes + + + + QDirModel + + Name + Vardas + + + Size + Dydis + + + Kind + Match OS X Finder + Tipas + + + Type + All other platforms + Tipas + + + Date Modified + Modifikavimo data + + + + QDockWidget + + Close + Užverti + + + Dock + Įsegti + + + Float + Išsegti + + + + QDoubleSpinBox + + More + Daugiau + + + Less + Mažiau + + + + QErrorMessage + + Debug Message: + Derinimo pranešimas: + + + Warning: + Įspėjimas: + + + Fatal Error: + Lemtingoji klaida: + + + &Show this message again + &Rodyti šį pranešimą vėl + + + &OK + &Gerai + + + + QFile + + Destination file exists + Paskirties failas jau egzistuoja + + + Will not rename sequential file using block copy + Nuosekliosios prieigos failas nebus pervardytas naudojant blokų kopijavimą + + + Cannot remove source file + Nepavyko pašalinti šaltinio failo + + + Cannot open %1 for input + Nepavyko skaitymui atverti failo %1 + + + Cannot open for output + Nepavyko rašymui atverti failo + + + Failure to write block + Nepavyko įrašyti bloko + + + Cannot create %1 for output + Nepavyko sukurti išvesties failo %1 + + + No file engine available or engine does not support UnMapExtension + + + + + QFileDialog + + Look in: + Vieta: + + + Back + Atgal + + + Go back + Grįžti atgal + + + Forward + Pirmyn + + + Go forward + Eiti pirmyn + + + Parent Directory + Vienu lygiu aukščiau + + + Go to the parent directory + Eiti į vienu lygiu aukštesnį aplanką + + + Create New Folder + Kurti naują aplanką + + + Create a New Folder + Sukurti naują aplanką + + + List View + Rodyti sąrašą + + + Change to list view mode + Aplanko turinį rodyti kaip paprastą sąrašą + + + Detail View + Rodyti išsamią informaciją + + + Change to detail view mode + Aplanko turinį rodyti kaip sąrašą su išsamia informacija + + + Files of type: + Failų tipas: + + + Find Directory + Ieškoti aplanko + + + Open + Atverti + + + Save As + Įrašyti kaip + + + All Files (*) + Visi failai (*) + + + Show + Rodyti + + + &Rename + Per&vardyti + + + &Delete + Pa&šalinti + + + Show &hidden files + Rodyti pa&slėptus failus + + + &New Folder + &Naujas aplankas + + + Directory: + Aplankas: + + + File &name: + &Failo vardas: + + + &Open + At&verti + + + &Save + Į&rašyti + + + Directories + Aplankai + + + &Choose + Pasi&rinkti + + + %1 +Directory not found. +Please verify the correct directory name was given. + %1 +Aplankas nerastas. +Įsitikinkite, jog nurodėte teisingą aplanko vardą. + + + %1 already exists. +Do you want to replace it? + %1 jau egzistuoja. +Ar norite jį pakeisti? + + + %1 +File not found. +Please verify the correct file name was given. + %1 +Failas nerastas. +Įsitikinkite, jog nurodėte teisingą failo vardą. + + + New Folder + Naujas aplankas + + + '%1' is write protected. +Do you want to delete it anyway? + „%1“ yra apsaugotas nuo rašymo. +Ar vis tiek norite jį pašalinti? + + + Are sure you want to delete '%1'? + Ar tikrai norite pašalinti „%1“? + + + Could not delete directory. + Nepavyko pašalinti aplanko. + + + Recent Places + Paskiausios vietos + + + All Files (*.*) + Visi failai (*.*) + + + Remove + Pašalinti + + + My Computer + Kompiuteris + + + Drive + Diskas + + + File + failas + + + File Folder + Match Windows Explorer + Failų aplankas + + + Folder + All other platforms + Aplankas + + + Alias + Mac OS X Finder + Nuoroda + + + Shortcut + All other platforms + Nuoroda + + + Unknown + Nežinomas + + + + QFileSystemModel + + %1 TB + %1 TB + + + %1 GB + %1 GB + + + %1 MB + %1 MB + + + %1 KB + %1 KB + + + %1 bytes + %1 B + + + Invalid filename + Neleistinas failo vardas + + + <b>The name "%1" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks. + <b>Vardas „%1“ neleistinas.</b><p>Pabandykite įvesti kitą vardą, pvz., sudarytą iš mažiau simbolių ar be skyrybos ženklų. + + + Name + Vardas + + + Size + Dydis + + + Kind + Match OS X Finder + Tipas + + + Type + All other platforms + Tipas + + + Date Modified + Modifikavimo data + + + My Computer + Kompiuteris + + + Computer + Kompiuteris + + + %1 byte(s) + %1 B + + + + QFontDatabase + + Normal + Normalusis + + + Bold + Pastorintas + + + Demi Bold + + + + Black + Ryškus + + + Demi + + + + Light + Lengvas + + + Italic + Kursyvas + + + Oblique + Pasvirasis + + + Any + Bet koks + + + Latin + Lotynų + + + Greek + Graikų + + + Cyrillic + Kirilica + + + Armenian + Armėnų + + + Hebrew + Hebrajų + + + Arabic + Arabų + + + Syriac + Sirų + + + Thaana + Tana + + + Devanagari + Devangarių + + + Bengali + Bengalų + + + Gurmukhi + Gurmukų + + + Gujarati + Gujaračių + + + Oriya + Orijų + + + Tamil + Tamilų + + + Telugu + Telugų + + + Kannada + Kanadų + + + Malayalam + Malajalamų + + + Sinhala + Singalų + + + Thai + Tajų + + + Lao + Laosiečių + + + Tibetan + Tibetiečių + + + Myanmar + Birmiečių + + + Georgian + Gruzinų + + + Khmer + Khmerų + + + Simplified Chinese + Supaprastintoji kinų + + + Traditional Chinese + Tradicinė kinų + + + Japanese + Japonų + + + Korean + Korėjiečių + + + Vietnamese + Vietnamiečių + + + Symbol + Spec. simboliai + + + Ogham + Ogamas + + + Runic + Runos + + + N'Ko + N'Ko + + + + QFontDialog + + Select Font + Parinkite šriftą + + + &Font + &Šriftas + + + Font st&yle + Šrifto &stilius + + + &Size + &Dydis + + + Effects + Efektai + + + Stri&keout + &Perbrauktas + + + &Underline + Pa&brauktas + + + Sample + Pavyzdys + + + Wr&iting System + &Rašto sistema + + + + QFtp + + Not connected + Neužmegztas ryšys + + + Host %1 not found + Mazgas %1 nerastas + + + Connection refused to host %1 + Mazgas %1 atmetė ryšį + + + Connection timed out to host %1 + Baigėsi ryšiui su mazgu %1 skirtas laikas + + + Connected to host %1 + Užmegztas ryšys su mazgu %1 + + + Connection refused for data connection + Užmegzti duomenų perdavimo ryšį atsisakyta + + + Unknown error + Nežinoma klaida + + + Connecting to host failed: +%1 + Nepavyko užmegzti ryšio su mazgu: +%1 + + + Login failed: +%1 + Registracija į seansą nepavyko: +%1 + + + Listing directory failed: +%1 + Nepavyko gauti katalogo turinio sąrašo: +%1 + + + Changing directory failed: +%1 + Pereiti į kitą katalogą nepavyko: +%1 + + + Downloading file failed: +%1 + Parsiųsti failo nepavyko: +%1 + + + Uploading file failed: +%1 + Nusiųsti failo nepavyko: +%1 + + + Removing file failed: +%1 + Pašalinti failo nepavyko: +%1 + + + Creating directory failed: +%1 + Sukurti katalogo nepavyko: +%1 + + + Removing directory failed: +%1 + Pašalinti katalogo nepavyko: +%1 + + + Connection closed + Ryšys baigtas + + + Host %1 found + Mazgas %1 nerastas + + + Connection to %1 closed + Ryšys su %1 baigtas + + + Host found + Mazgas surastas + + + Connected to host + Užmegztas ryšys su mazgu + + + + QHostInfo + + No host name given + Nepateiktas mazgo vardas + + + Unknown error + Nežinoma klaida + + + + QHostInfoAgent + + No host name given + Nepateiktas mazgo vardas + + + Invalid hostname + Netinkamas mazgo vardas + + + Unknown address type + Nežinomas adreso tipas + + + Host not found + Mazgas nerastas + + + Unknown error + Nežinoma klaida + + + + QHttp + + HTTPS connection requested but SSL support not compiled in + Pareikalauta HTTPS ryšio, tačiau SSL palaikymas nebuvo įkompiliuotas + + + Unknown error + Nežinoma klaida + + + Request aborted + Užklausos vykdymas nutrauktas + + + No server set to connect to + Nenurodytas serveris, prie kurio reikėtų jungtis + + + Wrong content length + Neteisinga turinio apimtis + + + Server closed connection unexpectedly + Serveris netikėtai užbaigė ryšį + + + Connection refused (or timed out) + Ryšys atmestas (arba baigėsi jam skirtas laikas) + + + Host %1 not found + Mazgas %1 nerastas + + + HTTP request failed + HTTP užlklausa nesėkminga + + + Invalid HTTP response header + Netinkama HTTP atsako antraštė + + + Unknown authentication method + Nežinomas tapatumo nustatymo metodas + + + Proxy authentication required + Būtinas tapatumo nustatymas įgaliotajame serveryje + + + Authentication required + Būtinas tapatumo nustatymas + + + Invalid HTTP chunked body + Neleistinai fragmentuoti HTTP duomenys + + + Error writing response to device + Klaida siunčiant atsakymą į įrenginį + + + Connection refused + Ryšys atmestas + + + Connection closed + Ryšys baigtas + + + Proxy requires authentication + Įgaliotasis serveris reikalauja nustatyti tapatybę + + + Host requires authentication + Mazgas reikalauja nustatyti tapatybę + + + Data corrupted + Duomenys sugadinti + + + Unknown protocol specified + Nurodytas nežinomas protokolas + + + SSL handshake failed + SSL pasisveikinimas nepavyko + + + Host %1 found + Mazgas %1 nerastas + + + Connected to host %1 + Užmegztas ryšys su mazgu %1 + + + Connection to %1 closed + Ryšys su %1 baigtas + + + Host found + Mazgas surastas + + + Connected to host + Užmegztas ryšys su mazgu + + + + QHttpSocketEngine + + Did not receive HTTP response from proxy + Iš įgaliotojo serverio negautas HTTP atsakas + + + Error parsing authentication request from proxy + Klaida analizuojant įgaliotojo serverio tapatumo nustatymo užklausą + + + Authentication required + Būtinas tapatumo nustatymas + + + Proxy denied connection + Įgaliotasis serveris nesuteikė ryšio + + + Error communicating with HTTP proxy + Komunikacijos su HTTP įgaliotuoju serveriu klaida + + + Proxy server not found + Įgaliotasis serveris nerastas + + + Proxy connection refused + Įgaliotasis serveris atmetė ryšį + + + Proxy server connection timed out + Baigėsi ryšiui su įgaliotuoju serveriu skirtas laikas + + + Proxy connection closed prematurely + Įgaliotasis serveris netikėtai užbaigė ryšį + + + + QIBaseDriver + + Error opening database + Klaida atveriant duomenų bazę + + + Could not start transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + + QIBaseResult + + Unable to create BLOB + + + + Unable to write BLOB + + + + Unable to open BLOB + + + + Unable to read BLOB + + + + Could not find array + + + + Could not get array data + + + + Could not get query info + + + + Could not start transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Could not allocate statement + + + + Could not prepare statement + Nepavyko paruošti sakinio + + + Could not describe input statement + + + + Could not describe statement + Nepavyko aprašyti sakinio + + + Unable to close statement + Nepavyko užverti sakinio + + + Unable to execute query + Nepavyko įvykdyti užklausos + + + Could not fetch next item + + + + Could not get statement info + + + + + QIODevice + + Permission denied + Nepakanka teisių + + + Too many open files + Per daug atvertų failų + + + No such file or directory + Nėra tokio failo ar katalogo + + + No space left on device + Įrenginyje neliko laisvos vietos + + + Unknown error + Nežinoma klaida + + + + QInputContext + + XIM + XIM + + + FEP + FEP + + + XIM input method + XIM įvesties būdas + + + Windows input method + „Windows“ įvesties būdas + + + Mac OS X input method + „Mac OS X“ įvesties būdas + + + S60 FEP input method + S60 FEP įvesties būdas + + + + QInputDialog + + Enter a value: + Įveskite reikšmę: + + + + QLibrary + + Plugin verification data mismatch in '%1' + + + + The shared library was not found. + Bendroji biblioteka nerasta. + + + The file '%1' is not a valid Qt plugin. + Failas „%1“ nėra teisingas „Qt“ papildinys. + + + The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5] + Papildinys „%1“ naudoja nesuderinamą „Qt“ bibliotekos versiją (%2.%3.%4) [%5] + + + The plugin '%1' uses incompatible Qt library. Expected build key "%2", got "%3" + Papildinys „%1“ naudoja nesuderinamą „Qt“. Tikėtasi darinio rakto „%2“, tačiau gautas „%3“ + + + The plugin '%1' uses incompatible Qt library. (Cannot mix debug and release libraries.) + Papildinys „%1“ naudoja nesuderinamą „Qt“ bibliotekos versiją (negalima maišyti derinimui ir galutinėms laidoms skirtų bibliotekų). + + + Unknown error + Nežinoma klaida + + + Cannot load library %1: %2 + Nepavyko įkelti bibliotekos %1: %2 + + + Cannot unload library %1: %2 + Nepavyko iškelti bibliotekos %1: %2 + + + Cannot resolve symbol "%1" in %2: %3 + Nepavyko rasti simbolio „%1“ bibliotekoje %2: %3 + + + '%1' is not an ELF object (%2) + + + + '%1' is not an ELF object + + + + '%1' is an invalid ELF object (%2) + + + + + QLineEdit + + &Undo + &Atšaukti + + + &Redo + A&tstatyti + + + Cu&t + Iški&rpti + + + &Copy + &Kopijuoti + + + &Paste + Į&dėti + + + Delete + Pašalinti + + + Select All + Pažymėti viską + + + + QLocalServer + + %1: Name error + %1: vardo klaida + + + %1: Permission denied + %1: nepakanka teisių + + + %1: Address in use + %1: adresas jau naudojamas + + + %1: Unknown error %2 + %1: nežinoma klaida %2 + + + + QLocalSocket + + %1: Connection refused + %1: ryšys atmestas + + + %1: Remote closed + %1: nutolęs mazgas užbaigė ryšį + + + %1: Invalid name + %1: netinkamas vardas + + + %1: Socket access error + %1: prieigos prie lizdo klaida + + + %1: Socket resource error + %1: lizdo ištekliaus klaida + + + %1: Socket operation timed out + %1: baigėsi operacijai su lizdu skirtas laikas + + + %1: Datagram too large + %1: duomenų paketas per didelis + + + %1: Connection error + %1: ryšio klaida + + + %1: The socket operation is not supported + %1: operacija su lizdu nepalaikoma + + + %1: Unknown error + %1: nežinoma klaida + + + %1: Unknown error %2 + %1: nežinoma klaida %2 + + + %1: Access denied + %1: prieiga uždrausta + + + + QMYSQLDriver + + Unable to open database ' + Nepavyko atverti duomenų bazės ' + + + Unable to connect + Nepavyko užmegzti ryšio + + + Unable to begin transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + + QMYSQLResult + + Unable to fetch data + Nepavyko gauti duomenų + + + Unable to execute query + Nepavyko įvykdyti užklausos + + + Unable to store result + Nepavyko išsaugoti rezultato + + + Unable to execute next query + + + + Unable to store next result + + + + Unable to prepare statement + Nepavyko paruošti sakinio + + + Unable to reset statement + + + + Unable to bind value + + + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + Unable to bind outvalues + + + + Unable to store statement results + Nepavyko išsaugoti sakinio rezultatų + + + + QMdiArea + + (Untitled) + (Be pavadinimo) + + + + QMdiSubWindow + + - [%1] + – [%1] + + + %1 - [%2] + %1 – [%2] + + + Minimize + Sumažinti + + + Maximize + Išdidinti + + + Unshade + Išvynioti + + + Shade + Suvynioti + + + Restore Down + Atkurti dydį + + + Restore + Atkurti langą + + + Close + Užverti + + + Help + Žinynas + + + Menu + Meniu + + + &Restore + &Atkurti + + + &Move + &Perkelti + + + &Size + &Keisti dydį + + + Mi&nimize + Su&mažinti + + + Ma&ximize + Iš&didinti + + + Stay on &Top + &Visada viršuje + + + &Close + &Užverti + + + + QMenu + + Close + Užverti + + + Open + Atverti + + + Execute + Vykdyti + + + + QMenuBar + + Actions + Veiksmai + + + Corner Toolbar + + + + + QMessageBox + + Show Details... + Išsamiau… + + + Hide Details... + Glausčiau… + + + OK + Gerai + + + Help + Žinynas + + + <h3>About Qt</h3><p>This program uses Qt version %1.</p> + <h3>Apie „Qt“</h3><p>Ši programa naudoja „Qt %1“.</p> + + + <p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p><p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p> + <p>„Qt“ yra C++ priemonių komplektas, skirtas daugiaplatformėms programoms kurti.</p><p>Naudojant „Qt“, galima kurti perkeliamas tarp „Microsoft Windows“, „Mac&nbsp;OS&nbsp;X“, „Linux“ ir visų kitų pagrindinių UNIX variantų programas, naudojant tuos pačius pradinius tekstus. Taip pat Qt veikia integruotuose įrenginiuose, naudojančiuose „Embedded Linux“ ir „Windows CE“ operacines sistemas.</p><p>„Qt“ priemonių komplektas yra licencijuojamas trimis skirtingais būdais, tuo siekiant patenkinti visų naudotojų poreikius.</p><p>Mūsų komercinė licencinė sutartis skirta tiems atvejams, kai Jūs norite kurti nuosavybinę (komercinę) programinę įrangą, tačiau nenorite su niekuo dalintis jos pradiniais tekstais ar jų ištraukomis, arba kai Jūsų kuriamas produktas yra dėl kitų priežasčių nesuderinamas su GNU LGPL 2.1 versijos ar GNU GPL 3.0 versijos licencijomis.</p><p>GNU LGPL 2.1 versijos licenciją galite pasirinkti, jeigu kuriate „Qt“ programas (tiek laisvąsias, tiek nuosavybines) ir galite patenkinti šios licencijos reikalavimus.</p><p>GNU GPL 3.0 versijos licencijavimo būdas tinka tiems atvejams, kai Jūsų kuriamoje „Qt“ programoje bus naudojama pagal GNU GPL 3.0 versijos licenciją platinama programinė įranga arba kai Jūs norite ir galite patenkinti šios licencijos reikalavimus dėl kitų priežasčių.</p><p>Susipažinti su „Qt“ licencijavimo galimybėmis galite tinklalapyje <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a>.</p><p>© 2011 Nokia Corporation and/or its subsidiary(-ies).</p><p>„Qt“ yra kompanijos „Nokia“ produktas. Daugiau informacijos apie jį rasite adresu <a href="http://qt.nokia.com/">qt.nokia.com</a>.</p> + + + About Qt + Apie „Qt“ + + + + QMultiInputContext + + Select IM + Įvesties būdo pasirinkimas + + + + QMultiInputContextPlugin + + Multiple input method switcher + Skirtingų įvesties būtų perjungiklis + + + Multiple input method switcher that uses the context menu of the text widgets + Skirtingų įvesties būdų perjungiklis, esantis teksto laukų kontekstiniame meniu + + + + QNativeSocketEngine + + Unable to initialize non-blocking socket + Nepavyko inicijuoti neblokuojamo lizdo + + + Unable to initialize broadcast socket + Nepavyko inicijuoti lizdo transliavimui + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Bandoma naudoti IPv6 lizdą platformoje, kurioje IPv6 protokolas nepalaikomas + + + The remote host closed the connection + Nutolęs mazgas užbaigė ryšį + + + Network operation timed out + Baigėsi tinklo operacijai skirtas laikas + + + Out of resources + Pritrūko išteklių + + + Unsupported socket operation + Nepalaikoma operacija su lizdu + + + Protocol type not supported + Nepalaikomas protokolo tipas + + + Invalid socket descriptor + Netinkamas lizdo deskriptorius + + + Host unreachable + Mazgas nepasiekiamas + + + Network unreachable + Tinklas nepasiekiamas + + + Permission denied + Nepakanka teisių + + + Connection timed out + Baigėsi ryšiui skirtas laikas + + + Connection refused + Ryšys atmestas + + + The bound address is already in use + Bandomas naudoti adresas jau yra naudojamas + + + The address is not available + Adresas neleidžiamas + + + The address is protected + Adresas apsaugotas + + + Datagram was too large to send + Duomenų paketas per didelis, kad galėtų būti išsiųstas + + + Unable to send a message + Nepavyko išsiųsti pranešimo + + + Unable to receive a message + Nepavyko gauti pranešimo + + + Unable to write + Rašymas nepavyko + + + Network error + Tinklo klaida + + + Another socket is already listening on the same port + Tą patį prievadą klausymui jau naudoja kitas lizdas + + + Operation on non-socket + Operacija ne su lizdu + + + The proxy type is invalid for this operation + Įgaliotojo serverio tipas netinkamas šiai operacijai + + + Unknown error + Nežinoma klaida + + + + QNetworkAccessCacheBackend + + Error opening %1 + Klaida atveriant %1 + + + + QNetworkAccessDataBackend + + Operation not supported on %1 + Operacija nepalaikoma su %1 + + + Invalid URI: %1 + Netinkamas universalusis ištekliaus identifikatorius (URI): %1 + + + + QNetworkAccessDebugPipeBackend + + Write error writing to %1: %2 + Rašymo klaida rašant į %1: %2 + + + Socket error on %1: %2 + Lizdo %1 klaida: %2 + + + Remote host closed the connection prematurely on %1 + Nutolęs mazgas netikėtai užbaigė ryšį lizde %1 + + + + QNetworkAccessFileBackend + + Request for opening non-local file %1 + Prašoma atverti nevietinį failą %1 + + + Cannot open %1: Path is a directory + Nepavyko atverti %1: tai katalogo kelias + + + Error opening %1: %2 + Klaida atveriant %1: %2 + + + Write error writing to %1: %2 + Rašymo klaida rašant %1: %2 + + + Read error reading from %1: %2 + Skaitymo klaida skaitant %1: %2 + + + + QNetworkAccessFtpBackend + + No suitable proxy found + Nerastas tinkamas įgaliotasis serveris + + + Cannot open %1: is a directory + Nepavyko atverti %1: tai yra katalogas + + + Logging in to %1 failed: authentication required + Registracija į seansą su %1 nepavyko: būtinas tapatumo nustatymas + + + Error while downloading %1: %2 + Klaida parsiunčiant %1: %2 + + + Error while uploading %1: %2 + Klaida nusiunčiant %1: %2 + + + + QNetworkAccessHttpBackend + + No suitable proxy found + Nerastas tinkamas įgaliotasis serveris + + + + QNetworkAccessManager + + Network access is disabled. + Prieiga prie tinklo išjungta. + + + + QNetworkReply + + Error downloading %1 - server replied: %2 + Klaida parsiunčiant %1. Serveris atsakė: %2 + + + Protocol "%1" is unknown + Protokolas „%1“ nežinomas + + + Network session error. + Tinklo seanso klaida. + + + backend start error. + + + + Temporary network failure. + Laikina problema su tinklu. + + + + QNetworkReplyImpl + + Operation canceled + Operacija atšaukta + + + + QNetworkSession + + Invalid configuration. + Neleistina sąranka. + + + + QNetworkSessionPrivateImpl + + Roaming error + + + + Session aborted by user or system + Seansą nutraukė naudotojas arba sistema + + + The specified configuration cannot be used. + Nurodyta konfigūracija negali būti naudojama. + + + Unidentified Error + Neidentifikuota klaida + + + Unknown session error. + Nežinoma seanso klaida. + + + The session was aborted by the user or system. + Seansą nutraukė naudotojas arba sistema. + + + The requested operation is not supported by the system. + Norima atlikti operacija yra nepalaikoma sistemos. + + + Roaming was aborted or is not possible. + + + + + QOCIDriver + + Unable to initialize + QOCIDriver + Inicijavimas nepavyko + + + Unable to logon + Nepavyko registruotis į seansą + + + Unable to begin transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + + QOCIResult + + Unable to bind column for batch execute + + + + Unable to execute batch statement + Nepavyko įvykdyti paketinio sakinio + + + Unable to goto next + + + + Unable to alloc statement + + + + Unable to prepare statement + Nepavyko paruošti sakinio + + + Unable to get statement type + Nepavyko gauti sakinio tipo + + + Unable to bind value + + + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + + QODBCDriver + + Unable to connect + Nepavyko užmegzti ryšio + + + Unable to connect - Driver doesn't support all functionality required + Nepavyko užmegzti ryšio: tvarkyklėje nepalaikomas visas reikiamas funkcionalumas + + + Unable to disable autocommit + Nepavyko išjungti automatinio transakcijų patvirtinimo + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + Unable to enable autocommit + Nepavyko įjungti automatinio transakcijų patvirtinimo + + + + QODBCResult + + QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration + QODBCResult::reset: nepavyko nustatyti sakinio atributo „SQL_CURSOR_STATIC“. Patikrinkite ODBC tvarkyklės sąranką + + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + Unable to fetch + Nepavyko gauti įrašo + + + Unable to fetch next + Nepavyko gauti tolesnio įrašo + + + Unable to fetch first + Nepavyko gauti pirmojo įrašo + + + Unable to fetch previous + Nepavyko gauti ankstesnio įrašo + + + Unable to prepare statement + Nepavyko paruošti sakinio + + + Unable to bind variable + Nepavyko susieti kintamojo + + + Unable to fetch last + Nepavyko gauti paskutinio įrašo + + + + QObject + + PulseAudio Sound Server + „PulseAudio“ garso serveris + + + "%1" duplicates a previous role name and will be disabled. + „%1“ dubliuoja ankstesnės rolės vardą, todėl bus išjungtas. + + + invalid query: "%1" + netinkama užklausa: „%1“ + + + Host not found + Mazgas nerastas + + + + QPPDOptionsModel + + Name + Vardas + + + Value + Reikšmė + + + + QPSQLDriver + + Unable to connect + Nepavyko užmegzti ryšio + + + Could not begin transaction + Nepavyko pradėti transakcijos + + + Could not commit transaction + Nepavyko užbaigti transakcijos + + + Could not rollback transaction + Nepavyko anuliuoti transakcijos + + + Unable to subscribe + Nepavyko prenumeruoti + + + Unable to unsubscribe + Nepavyko atsisakyti prenumeratos + + + + QPSQLResult + + Unable to create query + Nepavyko sukurti užklausos + + + Unable to prepare statement + Nepavyko paruošti sakinio + + + + QPageSetupWidget + + Form + Forma + + + Paper + Popierius + + + Page size: + Popieriaus dydis: + + + Width: + Plotis: + + + Height: + Aukštis: + + + Paper source: + Popieriaus šaltinis: + + + Orientation + Orientacija + + + Portrait + Stačias + + + Landscape + Gulsčias + + + Reverse landscape + Apverstas gulsčias + + + Reverse portrait + Apverstas stačias + + + Margins + Paraštės + + + top margin + viršutinė paraštė + + + left margin + kairioji paraštė + + + right margin + dešinioji paraštė + + + bottom margin + apatinė paraštė + + + Centimeters (cm) + Centimetrai (cm) + + + Millimeters (mm) + Milimetrai (mm) + + + Inches (in) + Coliai (in) + + + Points (pt) + Taškai (pt) + + + + QPluginLoader + + The plugin was not loaded. + Papildinys neįkeltas. + + + Unknown error + Nežinoma klaida + + + + QPrintDialog + + Print + Spausdinimas + + + A0 + A0 + + + A1 + A1 + + + A2 + A2 + + + A3 + A3 + + + A4 + A4 + + + A5 + A5 + + + A6 + A6 + + + A7 + A7 + + + A8 + A8 + + + A9 + A9 + + + B0 + B0 + + + B1 + B1 + + + B2 + B2 + + + B3 + B3 + + + B4 + B4 + + + B5 + B5 + + + B6 + B6 + + + B7 + B7 + + + B8 + B8 + + + B9 + B9 + + + B10 + B10 + + + C5E + C5E + + + DLE + DLE + + + Executive + Executive + + + Folio + Folio + + + Ledger + Ledger + + + Legal + Legal + + + Letter + Letter + + + Tabloid + Tabloid + + + US Common #10 Envelope + JAV įprastas #10 vokas + + + Custom + Pasirinktinis + + + File exists + Toks failas jau yra + + + <qt>Do you want to overwrite it?</qt> + <qt>Ar norite jį perrašyti?</qt> + + + A0 (841 x 1189 mm) + A0 (841 × 1189 mm) + + + A1 (594 x 841 mm) + A1 (594 × 841 mm) + + + A2 (420 x 594 mm) + A2 (420 × 594 mm) + + + A3 (297 x 420 mm) + A3 (297 × 420 mm) + + + A4 (210 x 297 mm, 8.26 x 11.7 inches) + A4 (210 × 297 mm; 8,26 × 11,7 colio) + + + A5 (148 x 210 mm) + A5 (148 × 210 mm) + + + A6 (105 x 148 mm) + A6 (105 × 148 mm) + + + A7 (74 x 105 mm) + A7 (74 × 105 mm) + + + A8 (52 x 74 mm) + A8 (52 × 74 mm) + + + A9 (37 x 52 mm) + A9 (37 × 52 mm) + + + B0 (1000 x 1414 mm) + B0 (1000 × 1414 mm) + + + B1 (707 x 1000 mm) + B1 (707 × 1000 mm) + + + B2 (500 x 707 mm) + B2 (500 × 707 mm) + + + B3 (353 x 500 mm) + B3 (353 × 500 mm) + + + B4 (250 x 353 mm) + B4 (250 × 353 mm) + + + B5 (176 x 250 mm, 6.93 x 9.84 inches) + B5 (176 × 250 mm; 6,93 × 9,84 colio) + + + B6 (125 x 176 mm) + B6 (125 × 176 mm) + + + B7 (88 x 125 mm) + B7 (88 × 125 mm) + + + B8 (62 x 88 mm) + B8 (62 × 88 mm) + + + B9 (44 x 62 mm) + B9 (44 × 62 mm) + + + B10 (31 x 44 mm) + B10 (31 × 44 mm) + + + C5E (163 x 229 mm) + C5E (163 × 229 mm) + + + DLE (110 x 220 mm) + DLE (110 × 220 mm) + + + Executive (7.5 x 10 inches, 191 x 254 mm) + Executive (7,5 × 10 colių; 191 × 254 mm) + + + Folio (210 x 330 mm) + Folio (210 × 330 mm) + + + Ledger (432 x 279 mm) + Ledger (432 × 279 mm) + + + Legal (8.5 x 14 inches, 216 x 356 mm) + Legal (8,5 × 14 colių; 216 × 356 mm) + + + Letter (8.5 x 11 inches, 216 x 279 mm) + Letter (8,5 × 11 colių; 216 × 279 mm) + + + Tabloid (279 x 432 mm) + Tabloid (279 × 432 mm) + + + US Common #10 Envelope (105 x 241 mm) + JAV įprastas #10 vokas (105 × 241 mm) + + + Print all + Spausdinti viską + + + Print selection + Spausdinti pažymėtą sritį + + + Print range + Spausdinti rėžį + + + Print current page + Spausdinti šį puslapį + + + &Options >> + &Parinktys >> + + + &Print + &Spausdinti + + + &Options << + &Parinktys << + + + Print to File (PDF) + Spausdinti į failą (PDF) + + + Print to File (Postscript) + Spausdinti į failą (PostScript) + + + Local file + vietinis failas + + + Write %1 file + įrašyti %1 failą + + + Print To File ... + Parinkite failą, į kurį norite spausdinti + + + %1 is a directory. +Please choose a different file name. + „%1“ yra katalogas. +Pasirinkite kitą failo vardą. + + + File %1 is not writable. +Please choose a different file name. + Į failą „%1“ rašyti neleidžiama. +Pasirinkite kitą failo vardą. + + + %1 already exists. +Do you want to overwrite it? + Failas „%1“ jau yra. +Ar norite jį perrašyti? + + + The 'From' value cannot be greater than the 'To' value. + Reikšmė „nuo“ negali būti didesnė už reikšmę „iki“. + + + OK + Gerai + + + locally connected + prijungtas prie šio įrenginio + + + Aliases: %1 + Alternatyvieji vardai: %1 + + + unknown + nežinomas + + + + QPrintPreviewDialog + + Page Setup + Puslapio parinktys + + + %1% + %1% + + + Print Preview + Spaudinio peržiūra + + + Next page + Kitas puslapis + + + Previous page + Ankstesnis puslapis + + + First page + Pirmas puslapis + + + Last page + Paskutinis puslapis + + + Fit width + Priderinti mastelį prie lapo pločio + + + Fit page + Priderinti mastelį prie lapo dydžio + + + Zoom in + Pritraukti + + + Zoom out + Atitraukti + + + Portrait + Stačias lapas + + + Landscape + Gulsčias lapas + + + Show single page + Rodyti vieną puslapį + + + Show facing pages + Rodyti kaip knygą + + + Show overview of all pages + Rodyti visų puslapių apžvalgą + + + Print + Spausdinti + + + Page setup + Puslapio parinktys + + + Close + Užverti + + + Export to PDF + Eksportuoti PDF formatu + + + Export to PostScript + Eksportuoti „PostScript“ formatu + + + + QPrintPropertiesWidget + + Form + Forma + + + Page + Puslapis + + + Advanced + Kita + + + + QPrintSettingsOutput + + Form + Forma + + + Copies + Kopijos + + + Print range + Spaudinio apimtis + + + Print all + Spausdinti viską + + + Pages from + Puslapius nuo + + + to + iki + + + Current Page + Tik šį puslapį + + + Selection + Pažymėtą sritį + + + Output Settings + Išvesties parinktys + + + Copies: + Kopijos: + + + Collate + Sugrupuoti + + + Reverse + Sp. atvirkštine tvarka + + + Options + Parinktys + + + Color Mode + Spalvų pateikimas + + + Color + Spausdinti spalvotai + + + Grayscale + Spausdinti nespalvotai + + + Duplex Printing + Dvipusis spausdinimas + + + None + Nenaudoti + + + Long side + Versti per ilgąją kraštinę + + + Short side + Versti per trumpąją kraštinę + + + + QPrintWidget + + Form + Forma + + + Printer + Spausdintuvas + + + &Name: + &Vardas: + + + P&roperties + &Nuostatos + + + Location: + Vieta: + + + Preview + Peržiūra + + + Type: + Tipas: + + + Output &file: + Išvesties &failas: + + + ... + + + + + QProcess + + Error reading from process + Klaida skaitant iš proceso + + + Error writing to process + Klaida rašant į procesą + + + Process crashed + Procesas užstrigo + + + No program defined + Nenurodyta programa + + + Could not open input redirection for reading + Nepavyko skaitymui atverti įvesties peradresavimo + + + Could not open output redirection for writing + Nepavyko rašymui atverti išvesties peradresavimo + + + Resource error (fork failure): %1 + Ištekliaus klaida kuriant vaikinį procesą: %1 + + + Process operation timed out + Baigėsi operacijai su procesu skirtas laikas + + + Process failed to start: %1 + Proceso paleisti nepavyko: %1 + + + + QProgressDialog + + Cancel + Atsisakyti + + + + QPushButton + + Open + Atverti + + + + QRadioButton + + Check + Pažymėti + + + + QRegExp + + no error occurred + klaidų neaptikta + + + disabled feature used + naudojama išjungta galimybė + + + bad char class syntax + bloga simbolių klasės sintaksė + + + bad lookahead syntax + bloga apžvalgos į priekį sintaksė + + + bad repetition syntax + bloga kartojimo sintaksė + + + invalid octal value + negalima aštuntainė reikšmė + + + missing left delim + trūksta kairiojo skirtuko + + + unexpected end + netikėta pabaiga + + + met internal limit + pasiekta vidinė riba + + + invalid interval + negalimas intervalas + + + invalid category + negalima kategorija + + + + QSQLite2Driver + + Error opening database + Klaida atveriant duomenų bazę + + + Unable to begin transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + + QSQLite2Result + + Unable to fetch results + Nepavyko gauti rezultatų + + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + + QSQLiteDriver + + Error opening database + Klaida atveriant duomenų bazę + + + Error closing database + Klaida užveriant duomenų bazę + + + Unable to begin transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + + QSQLiteResult + + Unable to fetch row + Nepavyko gauti eilutės + + + No query + Nėra užklausos + + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + Unable to reset statement + + + + Unable to bind parameters + + + + Parameter count mismatch + Nesutampa parametrų skaičius + + + + QScriptBreakpointsModel + + ID + ID + + + Location + Vieta + + + Condition + Sąlyga + + + Ignore-count + + + + Single-shot + + + + Hit-count + + + + + QScriptBreakpointsWidget + + New + Naujas + + + Delete + Pašalinti + + + + QScriptDebugger + + Go to Line + Eiti į eilutę + + + Line: + Eilutė: + + + Interrupt + Pertraukti + + + Shift+F5 + Shift+F5 + + + Continue + Tęsti + + + F5 + F5 + + + Step Into + Įžengti + + + F11 + F11 + + + Step Over + Peržengti + + + F10 + F10 + + + Step Out + Išžengti + + + Shift+F11 + Shift+F11 + + + Run to Cursor + Vykdyti iki žymeklio + + + Ctrl+F10 + Ctrl+F10 + + + Run to New Script + Vykdyti iki naujo scenarijaus + + + Toggle Breakpoint + Įjungti / išjungti stabdos tašką + + + F9 + F9 + + + Clear Debug Output + Išvalyti derinimo išvestį + + + Clear Error Log + Išvalyti klaidų žurnalą + + + Clear Console + Išvalyti pultą + + + &Find in Script... + &Ieškoti scenarijuje… + + + Ctrl+F + Ctrl+F + + + Find &Next + Ieškoti &toliau + + + F3 + F3 + + + Find &Previous + Ieškoti &atgal + + + Shift+F3 + Shift+F3 + + + Ctrl+G + Ctrl+G + + + Debug + Derinimas + + + + QScriptDebuggerCodeFinderWidget + + Close + Užverti + + + Previous + Ankstesnis + + + Next + Tolesnis + + + Case Sensitive + Skirti didžiąsias ir mažąsias raides + + + Whole words + Ieškoti tik pilnų žodžių + + + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Search wrapped + <img src=":/qt/scripttools/debugging/images/wrap.png">&nbsp;Ieškoti laužyto teksto + + + + QScriptDebuggerLocalsModel + + Name + Vardas + + + Value + Reikšmė + + + + QScriptDebuggerStackModel + + Level + Lygmuo + + + Name + Vardas + + + Location + Vieta + + + + QScriptEdit + + Toggle Breakpoint + Įjungti / išjungti stabdos tašką + + + Disable Breakpoint + Išjungti stabdos tašką + + + Enable Breakpoint + Įjungti stabdos tašką + + + Breakpoint Condition: + Stabdos taško sąlyga: + + + + QScriptEngineDebugger + + Loaded Scripts + Įkelti scenarijai + + + Breakpoints + Stabdos taškai + + + Stack + Dėklas + + + Locals + Vietiniai kintamieji + + + Console + Pultas + + + Debug Output + Derinimo išvestis + + + Error Log + Klaidų žurnalas + + + Search + Paieška + + + View + Rodymas + + + Qt Script Debugger + „Qt“ scenarijų derintuvė + + + + QScriptNewBreakpointWidget + + Close + Užverti + + + + QScrollBar + + Scroll here + Slinkti į čia + + + Left edge + Kairysis kraštas + + + Top + Viršus + + + Right edge + Dešinysis kraštas + + + Bottom + Apačia + + + Page left + Puslapis kairėn + + + Page up + Puslapis aukštyn + + + Page right + Puslapis dešinėn + + + Page down + Puslapis žemyn + + + Scroll left + Slinkti kairėn + + + Scroll up + Slinkti aukštyn + + + Scroll right + Slinkti dešinėn + + + Scroll down + Slinkti žemyn + + + Line up + Eilutė aukštyn + + + Position + Padėtis + + + Line down + Eilutė žemyn + + + + QSharedMemory + + %1: unable to set key on lock + %1: užrakinant nepavyko nustatyti rakto + + + %1: create size is less then 0 + %1: bandomo kurti objekto dydis neigiamas + + + %1: unable to lock + %1: nepavyko užrakinti + + + %1: unable to unlock + %1: nepavyko atrakinti + + + %1: already exists + %1: jau egzistuoja + + + %1: doesn't exists + %1: neegzistuoja + + + %1: invalid size + %1: neleistinas dydis + + + %1: out of resources + %1: pritrūko išteklių + + + %1: permission denied + %1: nepakanka teisių + + + %1: unknown error %2 + %1: nežinoma klaida %2 + + + %1: key error + %1: rakto klaida + + + %1: unable to make key + %1: rakto sukurti nepavyko + + + %1: doesn't exist + %1: neegzistuoja + + + %1: key is empty + %1: raktas tuščias + + + %1: UNIX key file doesn't exist + %1: UNIX rakto failas neegzistuoja + + + %1: ftok failed + %1: nepavyko ftok() + + + %1: system-imposed size restrictions + %1: dydį ribojama sistema + + + %1: bad name + %1: netinkamas pavadinimas + + + %1: not attached + %1: nesusieta + + + %1: size query failed + %1: dydžio užklausa nepavyko + + + + QShortcut + + Space + This and all following "incomprehensible" strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used. + Tarpas + + + Esc + Gr + + + Tab + Tab + + + Backtab + + + + Backspace + Naikinti iš kairės + + + Return + Įvesti + + + Enter + Įvesti + + + Ins + Įterpti + + + Del + Šal + + + Pause + Pauzė + + + Print + Sp + + + SysReq + Sist. + + + Home + Prad + + + End + Pab + + + Left + Kairėn + + + Up + Aukštyn + + + Right + Dešinėn + + + Down + Žemyn + + + PgUp + Psl. aukštyn + + + PgDown + Psl. žemyn + + + CapsLock + Didž + + + NumLock + Skaitm + + + ScrollLock + Slinkti + + + Menu + Meniu + + + Help + Pagalba + + + Back + Atgal + + + Forward + Pirmyn + + + Stop + Stabdyti + + + Refresh + Atsiųsti iš naujo + + + Volume Down + Tyliau + + + Volume Mute + Nutildyti + + + Volume Up + Garsiau + + + Bass Boost + + + + Bass Up + + + + Bass Down + + + + Treble Up + + + + Treble Down + + + + Media Play + + + + Media Stop + + + + Media Previous + + + + Media Next + + + + Media Record + + + + Media Pause + Media player pause button + + + + Toggle Media Play/Pause + Media player button to toggle between playing and paused + + + + Home Page + Pradžios tinklalapis + + + Favorites + Adresynas + + + Search + Ieškoti + + + Standby + + + + Open URL + Atverti URL + + + Launch Mail + Atverti el. paštą + + + Launch Media + Atverti medijos leistuvę + + + Launch (0) + + + + Launch (1) + + + + Launch (2) + + + + Launch (3) + + + + Launch (4) + + + + Launch (5) + + + + Launch (6) + + + + Launch (7) + + + + Launch (8) + + + + Launch (9) + + + + Launch (A) + + + + Launch (B) + + + + Launch (C) + + + + Launch (D) + + + + Launch (E) + + + + Launch (F) + + + + Monitor Brightness Up + + + + Monitor Brightness Down + + + + Keyboard Light On/Off + + + + Keyboard Brightness Up + + + + Keyboard Brightness Down + + + + Power Off + Išjungti + + + Wake Up + Prikelti + + + Eject + Išstumti + + + Screensaver + Ekrano užsklanda + + + WWW + Saitynas + + + Sleep + Užmigdyti + + + LightBulb + Lemputė + + + Shop + Apsipirkti + + + History + Žurnalas + + + Add Favorite + Įtraukti į adresyną + + + Hot Links + + + + Adjust Brightness + + + + Finance + + + + Community + + + + Audio Rewind + + + + Back Forward + + + + Application Left + + + + Application Right + + + + Book + + + + CD + CD + + + Calculator + Skaičiuotuvas + + + Clear + Išvalyti + + + Clear Grab + + + + Close + Užverti + + + Copy + Kopijuoti + + + Cut + Iškirpti + + + Display + + + + DOS + DOS + + + Documents + Dokumentų rengyklė + + + Spreadsheet + Skaičiuoklė + + + Browser + Naršyklė + + + Game + Žaidimas + + + Go + + + + iTouch + + + + Logoff + + + + Market + + + + Meeting + + + + Keyboard Menu + + + + Menu PB + + + + My Sites + + + + News + + + + Home Office + + + + Option + + + + Paste + Įdėti + + + Phone + + + + Reply + + + + Reload + Atsiųsti iš naujo + + + Rotate Windows + + + + Rotation PB + + + + Rotation KB + + + + Save + Įrašyti + + + Send + + + + Spellchecker + + + + Split Screen + + + + Support + + + + Task Panel + + + + Terminal + + + + Tools + + + + Travel + + + + Video + Video + + + Word Processor + Tekstų rengyklė + + + XFer + + + + Zoom In + + + + Zoom Out + + + + Away + + + + Messenger + + + + WebCam + + + + Mail Forward + + + + Pictures + + + + Music + Muzika + + + Battery + Baterija + + + Bluetooth + Bluetooth + + + Wireless + + + + Ultra Wide Band + + + + Audio Forward + + + + Audio Repeat + + + + Audio Random Play + + + + Subtitle + + + + Audio Cycle Track + + + + Time + + + + Select + Rinktis + + + View + Rodymas + + + Top Menu + + + + Suspend + + + + Hibernate + + + + Print Screen + Ekrano spausdinimas + + + Page Up + Ankstesnis puslapis + + + Page Down + Kitas puslapis + + + Caps Lock + Didžiosios raidės + + + Num Lock + Skaitmenys + + + Number Lock + Skaitmenys + + + Scroll Lock + Ekrano slinkimas + + + Insert + Įterpimas + + + Delete + Šalinimas + + + Escape + Grįžimas + + + System Request + Sisteminė užklausa + + + Yes + Taip + + + No + Ne + + + Context1 + + + + Context2 + + + + Context3 + + + + Context4 + + + + Call + Button to start a call (note: a separate button is used to end the call) + Skambinti + + + Hangup + Button to end a call (note: a separate button is used to start the call) + Užbaigti skambutį + + + Toggle Call/Hangup + Button that will hang up if we're in call, or make a call if we're not. + Skambinti/ užbaigti skambutį + + + Flip + + + + Voice Dial + Button to trigger voice dialing + Skambinti balsu + + + Last Number Redial + Button to redial the last number called + Pakartoti paskiausią skambutį + + + Camera Shutter + Button to trigger the camera shutter (take a picture) + + + + Camera Focus + Button to focus the camera + + + + Kanji + + + + Muhenkan + + + + Henkan + + + + Romaji + + + + Hiragana + + + + Katakana + + + + Hiragana Katakana + + + + Zenkaku + + + + Hankaku + + + + Zenkaku Hankaku + + + + Touroku + + + + Massyo + + + + Kana Lock + + + + Kana Shift + + + + Eisu Shift + + + + Eisu toggle + + + + Code input + + + + Multiple Candidate + + + + Previous Candidate + + + + Hangul + + + + Hangul Start + + + + Hangul End + + + + Hangul Hanja + + + + Hangul Jamo + + + + Hangul Romaja + + + + Hangul Jeonja + + + + Hangul Banja + + + + Hangul PreHanja + + + + Hangul PostHanja + + + + Hangul Special + + + + Ctrl + Vald + + + Shift + Lyg2 + + + Alt + Alt + + + Meta + Meta + + + + + + + + + F%1 + F%1 + + + + QSlider + + Page left + Puslapis kairėn + + + Page up + Puslapis aukštyn + + + Position + Padėtis + + + Page right + Puslapis dešinėn + + + Page down + Puslapis žemyn + + + + QSocks5SocketEngine + + Connection to proxy refused + Ryšys su įgaliotuoju serveriu atmestas + + + Connection to proxy closed prematurely + Ryšys su įgaliotuoju serveriu netikėtai užbaigtas + + + Proxy host not found + Įgaliotasis serveris nerastas + + + Connection to proxy timed out + Baigėsi ryšiui su įgaliotuoju serveriu skirtas laikas + + + Proxy authentication failed + Tapatumo nustatymas įgaliotajame serveryje nepavyko + + + Proxy authentication failed: %1 + Tapatumo nustatymas įgaliotajame serveryje nepavyko: %1 + + + SOCKS version 5 protocol error + SOCKSv5 protokolo klaida + + + General SOCKSv5 server failure + Bendrinė SOCKSv5 serverio klaida + + + Connection not allowed by SOCKSv5 server + Ryšį uždraudė SOCKSv5 serveris + + + TTL expired + Baigėsi paketo galiojimo laikas (TTL) + + + SOCKSv5 command not supported + SOCKSv5 komanda nepalaikoma + + + Address type not supported + Adreso tipas nepalaikomas + + + Unknown SOCKSv5 proxy error code 0x%1 + Nežinomas SOCKSv5 įgaliotojo serverio klaidos kodas 0x%1 + + + Network operation timed out + Baigėsi tinklo operacijai skirtas laikas + + + + QSoftKeyManager + + Ok + Gerai + + + OK + Gerai + + + Select + Rinktis + + + Done + Baigta + + + Options + Parinktys + + + Cancel + Atsisakyti + + + Exit + Baigti + + + + QSpinBox + + More + Daugiau + + + Less + Mažiau + + + + QSql + + Delete + Šalinimas + + + Delete this record? + Pašalinti šį įrašą? + + + Yes + Taip + + + No + Ne + + + Insert + Įterpimas + + + Update + Atnaujinimas + + + Save edits? + Įrašyti pakeitimus? + + + Cancel + Atsisakyti + + + Confirm + Patvirtinimas + + + Cancel your edits? + Atsisakyti atliktų pakeitimų? + + + + QSslSocket + + No error + Klaidų nėra + + + The issuer certificate could not be found + Liudijimo išdavėjo liudijimas nerastas + + + The certificate signature could not be decrypted + Liudijimo parašo iššifruoti nepavyko + + + The public key in the certificate could not be read + Liudijime esančio viešojo rakto nepavyko perskaityti + + + The signature of the certificate is invalid + Liudijimo parašas negaliojantis + + + The certificate is not yet valid + Liudijimas dar negalioja + + + The certificate has expired + Liudijimo galiojimo laikas pasibaigęs + + + The certificate's notBefore field contains an invalid time + Liudijimo „notBefore“ lauke nurodytas negalimas laikas + + + The certificate's notAfter field contains an invalid time + Liudijimo „notAfter“ lauke nurodytas negalimas laikas + + + The certificate is self-signed, and untrusted + Liudijimas pasirašytas pačiu savimi, todėl juo nepasitikima + + + The root certificate of the certificate chain is self-signed, and untrusted + Liudijimų grandinės šakninis liudijimas pasirašytas pačiu savimi, todėl juo nepasitikima + + + The issuer certificate of a locally looked up certificate could not be found + Lokaliai rasto liudijimo išdavėjo liudijimo nepavyko rasti + + + No certificates could be verified + Liudijimų patikrinti nepavyko + + + One of the CA certificates is invalid + Vienas liudijimų įstaigos liudijimų yra negaliojantis + + + The basicConstraints path length parameter has been exceeded + Viršytas „basicConstraints“ kelio ilgio parametras + + + The supplied certificate is unsuitable for this purpose + Pateikto liudijimo paskirtis netinkama + + + The root CA certificate is not trusted for this purpose + Liudijimų įstaigos šakninio liudijimo paskirtis netinkama + + + The root CA certificate is marked to reject the specified purpose + Liudijimų įstaigos šakniniame liudijime nurodyta atmesti šią paskirtį + + + The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate + Potencialus išdavėjo liudijimas atmestas, nes jo subjekto pavadinimas nesutampa su tikrinamo liudijimo išdavėjo pavadinimu + + + The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate + Potencialus išdavėjo liudijimas atmestas, nes jame nurodytas išdavėjo pavadinimas ir serijinis numeris, kurie nesutampa su tikrinamo liudijimo autoriteto rakto identifikatoriumi + + + The peer did not present any certificate + Partnerinis kompiuteris nepateikė jokio liudijimo + + + The host name did not match any of the valid hosts for this certificate + Mazgo vardas nesutampa su nė vienu šiam liudijimui tinkamu mazgo vardu + + + Unknown error + Nežinoma klaida + + + Error creating SSL context (%1) + Klaida sukuriant SSL kontekstą (%1) + + + Invalid or empty cipher list (%1) + Netinkamas arba tuščias šifrų sąrašas (%1) + + + Cannot provide a certificate with no key, %1 + Negalima pateikti liudijimo, neturint rakto; %1 + + + Error loading local certificate, %1 + Klaida įkeliant vietinį liudijimą; %1 + + + Error loading private key, %1 + Klaida įkeliant privatų raktą; %1 + + + Private key does not certify public key, %1 + Privatusis raktas netinkamas viešąjam raktui; %1 + + + Error creating SSL session, %1 + Klaida kuriant SSL sesiją; %1 + + + Error creating SSL session: %1 + Klaida kuriant SSL sesiją: %1 + + + Unable to write data: %1 + Nepavyko rašyti duomenų: %1 + + + Unable to decrypt data: %1 + Nepavyko iššifruoti duomenų: %1 + + + Error while reading: %1 + Klaida skaitant: %1 + + + Error during SSL handshake: %1 + Klaida SSL pasisveikinimo metu: %1 + + + The peer certificate is blacklisted + Partnerinio kompiuterio liudijimas įtrauktas į juodąjį sąrašą + + + + QStateMachine + + Missing initial state in compound state '%1' + Sudėtinėje būsenoje „%1“ trūksta pradinės būsenos + + + Missing default state in history state '%1' + Žurnalinėje būsenoje „%1“ trūksta numatytosios būsenos + + + No common ancestor for targets and source of transition from state '%1' + Perėjimo iš būsenos „%1“ šaltinis ir paskirtis neturi bendrų protėvių + + + Unknown error + Nežinoma klaida + + + + QSymSQLDriver + + Invalid option: + + + + Error opening database + Klaida atveriant duomenų bazę + + + POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used + + + + Unable to begin transaction + Nepavyko pradėti transakcijos + + + Unable to commit transaction + Nepavyko užbaigti transakcijos + + + Unable to rollback transaction + Nepavyko anuliuoti transakcijos + + + + QSymSQLResult + + Error retrieving column count + + + + Error retrieving column name + + + + Error retrieving column type + + + + Unable to fetch row + Nepavyko gauti eilutės + + + Unable to execute statement + Nepavyko įvykdyti sakinio + + + Statement is not prepared + + + + Unable to reset statement + + + + Unable to bind parameters + + + + Parameter count mismatch + Nesutampa parametrų skaičius + + + + QSymbianSocketEngine + + Unable to initialize non-blocking socket + Nepavyko inicijuoti neblokuojamo lizdo + + + Unable to initialize broadcast socket + Nepavyko inicijuoti lizdo transliavimui + + + Attempt to use IPv6 socket on a platform with no IPv6 support + Bandoma naudoti IPv6 lizdą platformoje, kurioje IPv6 protokolas nepalaikomas + + + The remote host closed the connection + Nutolęs mazgas užbaigė ryšį + + + Network operation timed out + Baigėsi tinklo operacijai skirtas laikas + + + Out of resources + Pritrūko išteklių + + + Unsupported socket operation + Nepalaikoma operacija su lizdu + + + Protocol type not supported + Nepalaikomas protokolo tipas + + + Invalid socket descriptor + Netinkamas lizdo deskriptorius + + + Host unreachable + Mazgas nepasiekiamas + + + Network unreachable + Tinklas nepasiekiamas + + + Permission denied + Nepakanka teisių + + + Connection timed out + Baigėsi ryšiui skirtas laikas + + + Connection refused + Ryšys atmestas + + + The bound address is already in use + Bandomas naudoti adresas jau yra naudojamas + + + The address is not available + Adresas neleidžiamas + + + The address is protected + Adresas apsaugotas + + + Datagram was too large to send + Duomenų paketas per didelis, kad galėtų būti išsiųstas + + + Unable to send a message + Nepavyko išsiųsti pranešimo + + + Unable to receive a message + Nepavyko gauti pranešimo + + + Unable to write + Rašymas nepavyko + + + Network error + Tinklo klaida + + + Another socket is already listening on the same port + Tą patį prievadą klausymui jau naudoja kitas lizdas + + + Operation on non-socket + Operacija ne su lizdu + + + The proxy type is invalid for this operation + Įgaliotojo serverio tipas netinkamas šiai operacijai + + + The address is invalid for this operation + Adresas šiai operacijai netinkamas + + + The specified network session is not opened + Nurodytas tinklo seansas neatvertas + + + Unknown error + Nežinoma klaida + + + + QSystemSemaphore + + %1: permission denied + %1: nepakanka teisių + + + %1: already exists + %1: jau egzistuoja + + + %1: does not exist + %1: neegzistuoja + + + %1: out of resources + %1: pritrūko išteklių + + + %1: name error + %1: vardo klaida + + + %1: unknown error %2 + %1: nežinoma klaida %2 + + + + QTDSDriver + + Unable to open connection + Nepavyko atverti ryšio + + + Unable to use database + Nepavyko naudoti duomenų bazės + + + + QTabBar + + Scroll Left + Slinkti kairėn + + + Scroll Right + Slinkti dešinėn + + + + QTcpServer + + Operation on socket is not supported + Operacija su lizdu nepalaikoma + + + + QTextControl + + &Undo + &Atšaukti + + + &Redo + A&tstatyti + + + Cu&t + Iški&rpti + + + &Copy + &Kopijuoti + + + Copy &Link Location + Kopijuoti &saito adresą + + + &Paste + Į&dėti + + + Delete + Pašalinti + + + Select All + Pažymėti viską + + + + QToolButton + + Press + Nuspausti + + + Open + Atverti + + + + QUdpSocket + + This platform does not support IPv6 + Šioje platformoje IPv6 protokolas nepalaikomas + + + + QUndoGroup + + Undo + Atšaukti + + + Redo + Atstatyti + + + Undo %1 + Atšaukti „%1“ + + + Undo + Default text for undo action + Atšaukti + + + Redo %1 + Atstatyti „%1“ + + + Redo + Default text for redo action + Atstatyti + + + + QUndoModel + + <empty> + <tuščia> + + + + QUndoStack + + Undo + Atšaukti + + + Redo + Atstatyti + + + Undo %1 + Atšaukti „%1“ + + + Undo + Default text for undo action + Atšaukti + + + Redo %1 + Atstatyti „%1“ + + + Redo + Default text for redo action + Atstatyti + + + + QUnicodeControlCharacterMenu + + LRM Left-to-right mark + LRM Krypties iš kairės į dešinę ženklas + + + RLM Right-to-left mark + RLM Krypties iš dešinės į kairę ženklas + + + ZWJ Zero width joiner + ZWJ Nulinio pločio jungimo ženklas + + + ZWNJ Zero width non-joiner + ZWNJ Nulinio pločio nejungimo ženklas + + + ZWSP Zero width space + ZWSP Nulinio pločio tarpas + + + LRE Start of left-to-right embedding + LRE Įterpties iš kairės į dešinę pradžia + + + RLE Start of right-to-left embedding + RLE Įterpties iš dešinės į kairę pradžia + + + LRO Start of left-to-right override + LRO Perdengiantis iš kairės į dešinę pradžia + + + RLO Start of right-to-left override + RLO Perdengimo iš dešinės į kairę pradžia + + + PDF Pop directional formatting + PDF Ankstesnės krypties ženklas + + + Insert Unicode control character + Įterpti unikodo valdymo ženklą + + + + QWebFrame + + Request cancelled + Užklausos atsisakyta + + + Request canceled + Užklausos atsisakyta + + + Request blocked + Užklausa uždrausta + + + Cannot show URL + URL parodyti nepavyko + + + Frame load interrupted by policy change + Kadro įkėlimas nutrauktas dėl politikos pakeitimo + + + Cannot show mimetype + Šio MIME tipo parodyti negalima + + + File does not exist + Failas neegzistuoja + + + Loading is handled by the media engine + Įkėlimą vykdo mediją apdorojantis komponentas + + + + QWebPage + + Redirection limit reached + Pasiekta peradresavimų kiekio riba + + + Bad HTTP request + Bloga HTTP užklausa + + + %n file(s) + number of chosen file + + %n failas + %n failai + %n failų + + + + Submit + default label for Submit buttons in forms on web pages + Pateikti + + + Submit + Submit (input element) alt text for <input> elements with no alt, title, or value + Pateikti + + + Reset + default label for Reset buttons in forms on web pages + Atstatyti + + + This is a searchable index. Enter search keywords: + text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index' + Tai – sąrašas, kuriame galite vykdyti paiešką. Įveskite reikšminius paieškos žodžius: + + + Choose File + title for file button used in HTML forms + Parinkti failą + + + No file selected + text to display in file button used in HTML forms when no file is selected + Failas nepasirinktas + + + Details + text to display in <details> tag when it has no <summary> child + Išsamiau + + + Open in New Window + Open in New Window context menu item + Atverti naujame lange + + + Save Link... + Download Linked File context menu item + Įrašyti saistomą objektą kaip… + + + Copy Link + Copy Link context menu item + Kopijuoti saito adresą + + + Open Image + Open Image in New Window context menu item + Atverti paveikslą + + + Save Image + Download Image context menu item + Įrašyti paveikslą + + + Copy Image + Copy Link context menu item + Kopijuoti paveikslą + + + Copy Image Address + Copy Image Address menu item + Kopijuoti paveikslo adresą + + + Open Video + Open Video in New Window + Atverti vaizdo įrašą + + + Open Audio + Open Audio in New Window + Atverti garso įrašą + + + Copy Video + Copy Video Link Location + Kopijuoti vaizdo įrašą + + + Copy Audio + Copy Audio Link Location + Kopijuoti garso įrašą + + + Toggle Controls + Toggle Media Controls + Rodyti / nerodyti mygtukus + + + Toggle Loop + Toggle Media Loop Playback + Įjungti / išjungti kartojimą + + + Enter Fullscreen + Switch Video to Fullscreen + Rodyti visame ekrane + + + Play + Play + Groti + + + Pause + Pause + Pristabdyti + + + Mute + Mute + Išjungti garsą + + + Open Frame + Open Frame in New Window context menu item + Atverti kadrą + + + Copy + Copy context menu item + Kopijuoti + + + Go Back + Back context menu item + Grįžti atgal + + + Go Forward + Forward context menu item + Eiti pirmyn + + + Stop + Stop context menu item + Stabdyti + + + Reload + Reload context menu item + Atsiųsti iš naujo + + + Cut + Cut context menu item + Iškirpti + + + Paste + Paste context menu item + Įdėti + + + Select All + Select All context menu item + Pažymėti viską + + + No Guesses Found + No Guesses Found context menu item + Pasiūlymų nėra + + + Ignore + Ignore Spelling context menu item + Nepaisyti + + + Add To Dictionary + Learn Spelling context menu item + Įtraukti į žodyną + + + Search The Web + Search The Web context menu item + Ieškoti saityne + + + Look Up In Dictionary + Look Up in Dictionary context menu item + Ieškoti žodyne + + + Open Link + Open Link context menu item + Atverti saistomą objektą + + + Ignore + Ignore Grammar context menu item + Nepaisyti + + + Spelling + Spelling and Grammar context sub-menu item + Rašyba + + + Show Spelling and Grammar + menu item title + Rodyti rašybą ir gramatiką + + + Hide Spelling and Grammar + menu item title + Nerodyti rašybos ir gramatikos + + + Check Spelling + Check spelling context menu item + Patikrinti rašybą + + + Check Spelling While Typing + Check spelling while typing context menu item + Tikrinti rašybą rašant tekstą + + + Check Grammar With Spelling + Check grammar with spelling context menu item + Tikrinti gramatiką kartu su rašyba + + + Fonts + Font context sub-menu item + Šriftai + + + Bold + Bold context menu item + Pastorintas + + + Italic + Italic context menu item + Kursyvas + + + Underline + Underline context menu item + Pabrauktas + + + Outline + Outline context menu item + Kontūrinis + + + Direction + Writing direction context sub-menu item + Kryptis + + + Text Direction + Text direction context sub-menu item + Teksto kryptis + + + Default + Default writing direction context menu item + Numatytoji + + + Left to Right + Left to Right context menu item + Iš kairės į dešinę + + + Right to Left + Right to Left context menu item + Iš dešinės į kairę + + + Inspect + Inspect Element context menu item + Tirti + + + No recent searches + Label for only item in menu that appears when clicking on the search field image, when no searches have been performed + Paskiausių paieškų nėra + + + Recent searches + label for first item in the menu that appears when clicking on the search field image, used as embedded menu title + Paskiausios paieškos + + + Clear recent searches + menu item in Recent Searches menu that empties menu's contents + Išvalyti paskiausių paieškų sąrašą + + + Missing Plug-in + Label text to be used when a plug-in is missing + Trūksta papildinio + + + Unknown + Unknown filesize FTP directory listing item + Nežinomas + + + %1 (%2x%3 pixels) + Title string for images + %1 (%2×%3 taškų) + + + Loading... + Media controller status message when the media is loading + Įkeliama… + + + Live Broadcast + Media controller status message when watching a live broadcast + Tiesioginė transliacija + + + Audio Element + Media controller element + Audio elementas + + + Video Element + Media controller element + Video elementas + + + Mute Button + Media controller element + Mygtukas „Išjungti garsą“ + + + Unmute Button + Media controller element + Mygtukas „Įjungti garsą“ + + + Play Button + Media controller element + Mygtukas „Leisti“ + + + Pause Button + Media controller element + Mygtukas „Pristabdyti“ + + + Slider + Media controller element + Šliaužiklis + + + Slider Thumb + Media controller element + Šliaužiklio rankenėlė + + + Rewind Button + Media controller element + Mygtukas „Atsukti atgal“ + + + Return to Real-time Button + Media controller element + Mygtukas „Grįžti į esamą laiką“ + + + Elapsed Time + Media controller element + Praėjęs laikas + + + Remaining Time + Media controller element + Likęs laikas + + + Status Display + Media controller element + Būsenos indikatorius + + + Fullscreen Button + Media controller element + Mygtukas „Visas ekranas“ + + + Seek Forward Button + Media controller element + Mygtukas „Ieškoti pirmyn“ + + + Seek Back Button + Media controller element + Mygtukas „Ieškoti atgal“ + + + Audio element playback controls and status display + Media controller element + Audio elemento perklausos valdikliai ir būsenos indikatorius + + + Video element playback controls and status display + Media controller element + Video elemento peržiūros valdikliai ir būsenos indikatorius + + + Mute audio tracks + Media controller element + Išjungti audio takelių garsą + + + Unmute audio tracks + Media controller element + Įjungti audio takelių garsą + + + Begin playback + Media controller element + Pradėti perklausą + + + Pause playback + Media controller element + Pristabdyti perklausą + + + Movie time scrubber + Media controller element + Įrašo peržiūros eigos juosta + + + Movie time scrubber thumb + Media controller element + Įrašo peržiūros eigos juostos rankenėlė + + + Rewind movie + Media controller element + Atsukti įrašą atgal + + + Return streaming movie to real-time + Media controller element + Grąžinti transliaciją į esamą laiką + + + Current movie time + Media controller element + Praėjęs įrašo laikas + + + Remaining movie time + Media controller element + Likęs įrašo laikas + + + Current movie status + Media controller element + Dabartinė įrašo būsena + + + Play movie in full-screen mode + Media controller element + Rodyti vaizdo įrašą per visą ekraną + + + Seek quickly back + Media controller element + Ieškoti atgal + + + Seek quickly forward + Media controller element + Ieškoti pirmyn + + + Indefinite time + Media time description + Laikas neapibrėžtas + + + %1 days %2 hours %3 minutes %4 seconds + Media time description + %1 d. %2 val. %3 min. %4 sek. + + + %1 hours %2 minutes %3 seconds + Media time description + %1 val. %2 min. %3 sek. + + + %1 minutes %2 seconds + Media time description + %1 min. %2 sek. + + + %1 seconds + Media time description + %1 sek. + + + Scroll here + Slinkti čia + + + Left edge + Kairysis kraštas + + + Top + Viršus + + + Right edge + Dešinysis kraštas + + + Bottom + Apačia + + + Page left + Puslapis kairėn + + + Page up + Puslapis aukštyn + + + Page right + Puslapis dešinėn + + + Page down + Puslapis žemyn + + + Scroll left + Slinkti kairėn + + + Scroll up + Slinkti aukštyn + + + Scroll right + Slinkti dešinėn + + + Scroll down + Slinkti žemyn + + + JavaScript Alert - %1 + „JavaScript“ įspėjimas – %1 + + + JavaScript Confirm - %1 + „JavaScript“ patvirtinimas – %1 + + + JavaScript Prompt - %1 + „JavaScript“ užklausa – %1 + + + JavaScript Problem - %1 + „JavaScript“ problema – %1 + + + The script on this page appears to have a problem. Do you want to stop the script? + Panašu, jog šiame tinklalapyje veikiantis scenarijus susidūrė su problema. Ar norite nutraukti scenarijaus vykdymą? + + + Move the cursor to the next character + Perkelti žymeklį ties tolesniu simboliu + + + Move the cursor to the previous character + Perkelti žymeklį ties ankstesniu simboliu + + + Move the cursor to the next word + Perkelti žymeklį ties tolesniu žodžiu + + + Move the cursor to the previous word + Perkelti žymeklį ties ankstesniu žodžiu + + + Move the cursor to the next line + Perkelti žymeklį į tolesnę eilutę + + + Move the cursor to the previous line + Perkelti žymeklį į ankstesnę eilutę + + + Move the cursor to the start of the line + Perkelti žymeklį į eilutės pradžią + + + Move the cursor to the end of the line + Perkelti žymeklį į eilutės pabaigą + + + Move the cursor to the start of the block + Perkelti žymeklį į bloko pradžią + + + Move the cursor to the end of the block + Perkelti žymeklį į bloko pabaigą + + + Move the cursor to the start of the document + Perkelti žymeklį į dokumento pradžią + + + Move the cursor to the end of the document + Perkelti žymeklį į dokumento pabaigą + + + Select all + Pažymėti viską + + + Select to the next character + Pažymėti iki tolesnio simbolio + + + Select to the previous character + Pažymėti iki ankstesnio simbolio + + + Select to the next word + Pažymėti iki tolesnio žodžio + + + Select to the previous word + Pažymėti iki ankstesnio žodžio + + + Select to the next line + Pažymėti iki tolesnės eilutės + + + Select to the previous line + Pažymėti iki ankstesnės eilutės + + + Select to the start of the line + Pažymėti iki eilutės pradžios + + + Select to the end of the line + Pažymėti iki eilutės pabaigos + + + Select to the start of the block + Pažymėti iki bloko pradžios + + + Select to the end of the block + Pažymėti iki bloko pabaigos + + + Select to the start of the document + Pažymėti iki dokumento pradžios + + + Select to the end of the document + Pažymėti iki dokumento pabaigos + + + Delete to the start of the word + Pašalinti iki žodžio pradžios + + + Delete to the end of the word + Pašalinti iki žodžio pabaigos + + + Insert a new paragraph + Įterpti naują pastraipą + + + Insert a new line + Įterpti naują eilutę + + + Paste and Match Style + Įdėti ir priderinti stilių + + + Remove formatting + Pašalinti formatavimo požymius + + + Strikethrough + Perbraukti + + + Subscript + Apatinis indeksas + + + Superscript + Viršutinis indeksas + + + Insert Bulleted List + Įterpti suženklintąjį sąrašą + + + Insert Numbered List + Įterpti numeruotąjį sąrašą + + + Indent + Didinti įtrauką + + + Outdent + Mažinti įtrauką + + + Center + Centruoti + + + Justify + Lygiuoti abu kraštus + + + Align Left + Lygiuoti dešinįjį kraštą + + + Align Right + Lygiuoti kairįjį kraštą + + + Web Inspector - %2 + Saityno tyriklis – %2 + + + + QWhatsThisAction + + What's This? + Kas tai? + + + + QWidget + + * + * + + + + QWizard + + Go Back + Grįžti atgal + + + < &Back + < At&gal + + + Continue + Tęsti + + + &Next + &Toliau + + + &Next > + &Toliau > + + + Commit + Pritaikyti + + + Done + Baigta + + + &Finish + &Baigti + + + Cancel + Atsisakyti + + + Help + Žinynas + + + &Help + &Žinynas + + + + QWorkspace + + Close + Užverti + + + Minimize + Sumažinti + + + Restore Down + Atkurti dydį + + + &Restore + &Atkurti + + + &Move + &Perkelti + + + &Size + &Keisti dydį + + + Mi&nimize + Su&mažinti + + + Ma&ximize + Iš&didinti + + + &Close + &Užverti + + + Stay on &Top + &Visada viršuje + + + Sh&ade + &Suvynioti + + + %1 - [%2] + %1 – [%2] + + + &Unshade + I&švynioti + + + + QXml + + no error occurred + klaidų neaptikta + + + error triggered by consumer + vartotojo iššaukta klaida + + + unexpected end of file + netikėta failo pabaiga + + + more than one document type definition + daugiau nei viena dokumento tipo apibrėžtis + + + error occurred while parsing element + analizuojant elementą, įvyko klaida + + + tag mismatch + nesutampančios gairės + + + error occurred while parsing content + analizuojant turinį, įvyko klaida + + + unexpected character + netikėtas simbolis + + + invalid name for processing instruction + netinkamas apdorojimo komandos vardas + + + version expected while reading the XML declaration + skaitant XML aprašą, tikėtasi versijos + + + wrong value for standalone declaration + netinkama „standalone“ deklaracijos reikšmė + + + encoding declaration or standalone declaration expected while reading the XML declaration + skaitant XML aprašą, tikėtasi koduotės aprašo arba „standalone“ deklaracijos + + + standalone declaration expected while reading the XML declaration + skaitant XML aprašą, tikėtasi „standalone“ deklaracijos + + + error occurred while parsing document type definition + analizuojant dokumento tipo apibrėžtį, įvyko klaida + + + letter is expected + tikėtasi raidės + + + error occurred while parsing comment + analizuojant komentarą, įvyko klaida + + + error occurred while parsing reference + analizuojant rodyklę, įvyko klaida + + + internal general entity reference not allowed in DTD + nuorodos į vidines bendrines esybes DTD apibrėžtyse neleidžiamos + + + external parsed general entity reference not allowed in attribute value + nuorodos į išorines išanalizuotas bendrines esybes atributų reikšmėse neleidžiamos + + + external parsed general entity reference not allowed in DTD + nuorodos į išorines išanalizuotas bendrines esybes DTD apibrėžtyse neleidžiamos + + + unparsed entity reference in wrong context + nuoroda į neišanalizuotą esybę netinkamame kontekste + + + recursive entities + rekusyvios esybės + + + error in the text declaration of an external entity + klaida išorinės esybės tekstinėje deklaracijoje + + + + QXmlPatternistCLI + + Warning in %1, at line %2, column %3: %4 + Įspėjimas ties failo „%1“ %2 eilutės %3 simboliu: %4 + + + Warning in %1: %2 + Įspėjimas faile „%1“: %2 + + + Unknown location + Nežinoma vieta + + + Error %1 in %2, at line %3, column %4: %5 + Klaida %1 ties failo „%2“ %3 eilutės %4 simboliu: %5 + + + Error %1 in %2: %3 + Klaida %1 faile „%2“: %3 + + + + QXmlStream + + Extra content at end of document. + Papildomas turinys dokumento pabaigoje. + + + Invalid entity value. + Netinkama esybės reikšmė. + + + Invalid XML character. + Neleistinas XML simbolis. + + + Sequence ']]>' not allowed in content. + Simbolių seka „]]>“ turinyje neleidžiama. + + + Encountered incorrectly encoded content. + Aptikta neteisingai užkioduoto turinio. + + + Namespace prefix '%1' not declared + Vardų erdvės prefiksas „%1“ nebuvo deklaruotas + + + Illegal namespace declaration. + Neleistinos vardų erdvės deklaracija. + + + Attribute redefined. + Atributas apibrėžiamas pakartotinai. + + + Unexpected character '%1' in public id literal. + + + + Invalid XML version string. + Neleistina XML versijos eilutė. + + + Unsupported XML version. + Nepalaikoma XML versija. + + + The standalone pseudo attribute must appear after the encoding. + Pseudoatributas „standalone“ turi būti įrašomas po koduotės aprašo. + + + %1 is an invalid encoding name. + Koduotės pavadinimas „%1“ yra netinkamas. + + + Encoding %1 is unsupported + Koduotė „%1“ nepalaikoma + + + Standalone accepts only yes or no. + „standalone“ deklaracijos reikšmė gali būti tik „yes“ arba „no“. + + + Invalid attribute in XML declaration. + Neleistinas atributas XML deklaracijoje. + + + Premature end of document. + Netikėta dokumento pabaiga. + + + Invalid document. + Neteisingas dokumentas. + + + Expected + Laukta + + + , but got ' + , bet gauta ' + + + Unexpected ' + Netikėta ' + + + Expected character data. + Laukta simbolinių duomenų. + + + Recursive entity detected. + Aptikta rekursyvi esybė. + + + Start tag expected. + Laukta atveriančiosios gairės. + + + NDATA in parameter entity declaration. + NDATA parametro esybės deklaracijoje. + + + XML declaration not at start of document. + XML aprašas ne dokumento pradžioje. + + + %1 is an invalid processing instruction name. + Apdorojimo komandos vardas „%1“ yra netinkamas. + + + Invalid processing instruction name. + Neleistinas apdorojimo komandos vardas. + + + %1 is an invalid PUBLIC identifier. + PUBLIC identifikatorius „%1“ yra netinkamas. + + + Invalid XML name. + Neleistinas XML vardas. + + + Opening and ending tag mismatch. + Nesutampa atveriančioji ir užveriančioji gairės. + + + Entity '%1' not declared. + Esybė „%1“ nedeklaruota. + + + Reference to unparsed entity '%1'. + Nuoroda į neišanalizuotą esybę „%1“. + + + Reference to external entity '%1' in attribute value. + Nuoroda į išorinę esybę „%1“ atributo reikšmėje. + + + Invalid character reference. + Netinkama nuoroda į simbolį. + + + + QmlJSDebugger::LiveSelectionTool + + Items + Elementai + + + + QmlJSDebugger::QmlToolBar + + Inspector Mode + Tyrimo veiksena + + + Play/Pause Animations + Pristabdyti / leisti animacijas + + + Select + Žymėti + + + Select (Marquee) + Žymėti (stačiakampį) + + + Zoom + Mastelis + + + Color Picker + Spalvų parinkiklis + + + Apply Changes to QML Viewer + Pritaikyti paketimus QML žiūryklei + + + Apply Changes to Document + Pritaikyti pakeitimus dokumentui + + + Tools + Priemonės + + + 1x + 1x + + + 0.5x + 0,5x + + + 0.25x + 0,25x + + + 0.125x + 0,125x + + + 0.1x + 0,1x + + + + QmlJSDebugger::ToolBarColorBox + + Copy Color + Kopijuoti spalvą + + + + QmlJSDebugger::ZoomTool + + Zoom to &100% + &Atstatyti mastelį + + + Zoom In + Padidinti + + + Zoom Out + Sumažinti + + + + QtXmlPatterns + + %1 is an unsupported encoding. + + + + %1 contains octets which are disallowed in the requested encoding %2. + + + + The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character. + + + + Network timeout. + + + + Element %1 can't be serialized because it appears outside the document element. + + + + Attribute %1 can't be serialized because it appears at the top level. + + + + Year %1 is invalid because it begins with %2. + + + + Day %1 is outside the range %2..%3. + + + + Month %1 is outside the range %2..%3. + + + + Overflow: Can't represent date %1. + + + + Day %1 is invalid for month %2. + + + + Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; + + + + Time %1:%2:%3.%4 is invalid. + + + + Overflow: Date can't be represented. + + + + At least one component must be present. + + + + At least one time component must appear after the %1-delimiter. + + + + %1 is not a valid value of type %2. + + + + When casting to %1 from %2, the source value cannot be %3. + + + + Integer division (%1) by zero (%2) is undefined. + + + + Division (%1) by zero (%2) is undefined. + + + + Modulus division (%1) by zero (%2) is undefined. + + + + Dividing a value of type %1 by %2 (not-a-number) is not allowed. + + + + Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed. + + + + Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed. + + + + A value of type %1 cannot have an Effective Boolean Value. + + + + Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values. + + + + Value %1 of type %2 exceeds maximum (%3). + + + + Value %1 of type %2 is below minimum (%3). + + + + A value of type %1 must contain an even number of digits. The value %2 does not. + + + + %1 is not valid as a value of type %2. + + + + Ambiguous rule match. + + + + Operator %1 cannot be used on type %2. + + + + Operator %1 cannot be used on atomic values of type %2 and %3. + + + + The namespace URI in the name for a computed attribute cannot be %1. + + + + The name for a computed attribute cannot have the namespace URI %1 with the local name %2. + + + + Type error in cast, expected %1, received %2. + + + + When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed. + + + + A comment cannot contain %1 + + + + A comment cannot end with a %1. + + + + In a namespace constructor, the value for a namespace cannot be an empty string. + + + + The prefix must be a valid %1, which %2 is not. + + + + The prefix %1 cannot be bound. + + + + Only the prefix %1 can be bound to %2 and vice versa. + + + + An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place. + + + + A library module cannot be evaluated directly. It must be imported from a main module. + + + + No template by name %1 exists. + + + + A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type. + + + + A positional predicate must evaluate to a single numeric value. + + + + The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid. + + + + %1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3. + + + + The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two. + + + + The data of a processing instruction cannot contain the string %1 + + + + No namespace binding exists for the prefix %1 + + + + No namespace binding exists for the prefix %1 in %2 + + + + %1 is an invalid %2 + + + + The parameter %1 is passed, but no corresponding %2 exists. + + + + The parameter %1 is required, but no corresponding %2 is supplied. + + + + %1 takes at most %n argument(s). %2 is therefore invalid. + + + + + + + + %1 requires at least %n argument(s). %2 is therefore invalid. + + + + + + + + The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration. + + + + The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + + The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5. + + + + %1 is not a valid XML 1.0 character. + + + + The root node of the second argument to function %1 must be a document node. %2 is not a document node. + + + + If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same. + + + + %1 was called. + + + + %1 must be followed by %2 or %3, not at the end of the replacement string. + + + + In the replacement string, %1 must be followed by at least one digit when not escaped. + + + + In the replacement string, %1 can only be used to escape itself or %2, not %3 + + + + %1 matches newline characters + + + + %1 and %2 match the start and end of a line. + + + + Matches are case insensitive + + + + Whitespace characters are removed, except when they appear in character classes + + + + %1 is an invalid regular expression pattern: %2 + + + + %1 is an invalid flag for regular expressions. Valid flags are: + + + + If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified. + + + + It will not be possible to retrieve %1. + + + + The default collection is undefined + + + + %1 cannot be retrieved + + + + The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization). + + + + A zone offset must be in the range %1..%2 inclusive. %3 is out of range. + + + + %1 is not a whole number of minutes. + + + + The URI cannot have a fragment + + + + Required cardinality is %1; got cardinality %2. + + + + The item %1 did not match the required type %2. + + + + The variable %1 is unused + + + + W3C XML Schema identity constraint selector + + + + W3C XML Schema identity constraint field + + + + A construct was encountered which is disallowed in the current language(%1). + + + + %1 is an unknown schema type. + + + + A template with name %1 has already been declared. + + + + %1 is not a valid numeric literal. + + + + Only one %1 declaration can occur in the query prolog. + + + + The initialization of variable %1 depends on itself + + + + No variable with name %1 exists + + + + Version %1 is not supported. The supported XQuery version is 1.0. + + + + The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2. + + + + No function with signature %1 is available + + + + A default namespace declaration must occur before function, variable, and option declarations. + + + + Namespace declarations must occur before function, variable, and option declarations. + + + + Module imports must occur before function, variable, and option declarations. + + + + The keyword %1 cannot occur with any other mode name. + + + + The value of attribute %1 must be of type %2, which %3 isn't. + + + + It is not possible to redeclare prefix %1. + + + + The prefix %1 cannot be bound. By default, it is already bound to the namespace %2. + + + + Prefix %1 is already declared in the prolog. + + + + The name of an option must have a prefix. There is no default namespace for options. + + + + The Schema Import feature is not supported, and therefore %1 declarations cannot occur. + + + + The target namespace of a %1 cannot be empty. + + + + The module import feature is not supported + + + + A variable with name %1 has already been declared. + + + + No value is available for the external variable with name %1. + + + + A stylesheet function must have a prefixed name. + + + + The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this) + + + + The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases. + + + + The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2 + + + + A function already exists with the signature %1. + + + + No external functions are supported. All supported functions can be used directly, without first declaring them as external + + + + An argument with name %1 has already been declared. Every argument name must be unique. + + + + When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal. + + + + In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching. + + + + In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching. + + + + In an XSL-T pattern, function %1 cannot have a third argument. + + + + In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching. + + + + In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can. + + + + %1 is an invalid template mode name. + + + + The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide. + + + + The Schema Validation Feature is not supported. Hence, %1-expressions may not be used. + + + + None of the pragma expressions are supported. Therefore, a fallback expression must be present + + + + Each name of a template parameter must be unique; %1 is duplicated. + + + + The %1-axis is unsupported in XQuery + + + + No function with name %1 is available. + + + + The namespace URI cannot be the empty string when binding to a prefix, %1. + + + + %1 is an invalid namespace URI. + + + + It is not possible to bind to the prefix %1 + + + + Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + + Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared). + + + + Two namespace declaration attributes have the same name: %1. + + + + The namespace URI must be a constant and cannot use enclosed expressions. + + + + An attribute with name %1 has already appeared on this element. + + + + A direct element constructor is not well-formed. %1 is ended with %2. + + + + The name %1 does not refer to any schema type. + + + + %1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works. + + + + %1 is not an atomic type. Casting is only possible to atomic types. + + + + %1 is not a valid name for a processing-instruction. + + + + %1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported. + + + + The name of an extension expression must be in a namespace. + + + + Element %1 is not allowed at this location. + + + + Text nodes are not allowed at this location. + + + + Parse error: %1 + + + + The value of the XSL-T version attribute must be a value of type %1, which %2 isn't. + + + + Running an XSL-T 1.0 stylesheet with a 2.0 processor. + + + + Unknown XSL-T attribute %1. + + + + Attribute %1 and %2 are mutually exclusive. + + + + In a simplified stylesheet module, attribute %1 must be present. + + + + If element %1 has no attribute %2, it cannot have attribute %3 or %4. + + + + Element %1 must have at least one of the attributes %2 or %3. + + + + At least one mode must be specified in the %1-attribute on element %2. + + + + Element %1 must come last. + + + + At least one %1-element must occur before %2. + + + + Only one %1-element can appear. + + + + At least one %1-element must occur inside %2. + + + + When attribute %1 is present on %2, a sequence constructor cannot be used. + + + + Element %1 must have either a %2-attribute or a sequence constructor. + + + + When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor. + + + + Element %1 cannot have children. + + + + Element %1 cannot have a sequence constructor. + + + + The attribute %1 cannot appear on %2, when it is a child of %3. + + + + A parameter in a function cannot be declared to be a tunnel. + + + + This processor is not Schema-aware and therefore %1 cannot be used. + + + + Top level stylesheet elements must be in a non-null namespace, which %1 isn't. + + + + The value for attribute %1 on element %2 must either be %3 or %4, not %5. + + + + Attribute %1 cannot have the value %2. + + + + The attribute %1 can only appear on the first %2 element. + + + + At least one %1 element must appear as child of %2. + + + + Empty particle cannot be derived from non-empty particle. + + + + Derived particle is missing element %1. + + + + Derived element %1 is missing value constraint as defined in base particle. + + + + Derived element %1 has weaker value constraint than base particle. + + + + Fixed value constraint of element %1 differs from value constraint in base particle. + + + + Derived element %1 cannot be nillable as base element is not nillable. + + + + Block constraints of derived element %1 must not be more weaker than in the base element. + + + + Simple type of derived element %1 cannot be validly derived from base element. + + + + Complex type of derived element %1 cannot be validly derived from base element. + + + + Element %1 is missing in derived particle. + + + + Element %1 does not match namespace constraint of wildcard in base particle. + + + + Wildcard in derived particle is not a valid subset of wildcard in base particle. + + + + processContent of wildcard in derived particle is weaker than wildcard in base particle. + + + + Derived particle allows content that is not allowed in the base particle. + + + + %1 has inheritance loop in its base type %2. + + + + Circular inheritance of base type %1. + + + + Circular inheritance of union %1. + + + + %1 is not allowed to derive from %2 by restriction as the latter defines it as final. + + + + %1 is not allowed to derive from %2 by extension as the latter defines it as final. + + + + Base type of simple type %1 cannot be complex type %2. + + + + Simple type %1 cannot have direct base type %2. + + + + Simple type %1 is not allowed to have base type %2. + + + + Simple type %1 can only have simple atomic type as base type. + + + + Simple type %1 cannot derive from %2 as the latter defines restriction as final. + + + + Variety of item type of %1 must be either atomic or union. + + + + Variety of member types of %1 must be atomic. + + + + %1 is not allowed to derive from %2 by list as the latter defines it as final. + + + + Simple type %1 is only allowed to have %2 facet. + + + + Base type of simple type %1 must have variety of type list. + + + + Base type of simple type %1 has defined derivation by restriction as final. + + + + Item type of base type does not match item type of %1. + + + + Simple type %1 contains not allowed facet type %2. + + + + %1 is not allowed to derive from %2 by union as the latter defines it as final. + + + + %1 is not allowed to have any facets. + + + + Base type %1 of simple type %2 must have variety of union. + + + + Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute. + + + + Member type %1 cannot be derived from member type %2 of %3's base type %4. + + + + Derivation method of %1 must be extension because the base type %2 is a simple type. + + + + Complex type %1 has duplicated element %2 in its content model. + + + + Complex type %1 has non-deterministic content. + + + + Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3. + + + + Content model of complex type %1 is not a valid extension of content model of %2. + + + + Complex type %1 must have simple content. + + + + Complex type %1 must have the same simple type as its base class %2. + + + + Complex type %1 cannot be derived from base type %2%3. + + + + Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3. + + + + Complex type %1 with simple content cannot be derived from complex base type %2. + + + + Item type of simple type %1 cannot be a complex type. + + + + Member type of simple type %1 cannot be a complex type. + + + + %1 is not allowed to have a member type with the same name as itself. + + + + %1 facet collides with %2 facet. + + + + %1 facet must have the same value as %2 facet of base type. + + + + %1 facet must be equal or greater than %2 facet of base type. + + + + %1 facet must be less than or equal to %2 facet of base type. + + + + %1 facet contains invalid regular expression + + + + Unknown notation %1 used in %2 facet. + + + + %1 facet contains invalid value %2: %3. + + + + %1 facet cannot be %2 or %3 if %4 facet of base type is %5. + + + + %1 facet cannot be %2 if %3 facet of base type is %4. + + + + %1 facet must be less than or equal to %2 facet. + + + + %1 facet must be less than %2 facet of base type. + + + + %1 facet and %2 facet cannot appear together. + + + + %1 facet must be greater than %2 facet of base type. + + + + %1 facet must be less than %2 facet. + + + + %1 facet must be greater than or equal to %2 facet of base type. + + + + Simple type contains not allowed facet %1. + + + + %1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list. + + + + Only %1 and %2 facets are allowed when derived by union. + + + + %1 contains %2 facet with invalid data: %3. + + + + Attribute group %1 contains attribute %2 twice. + + + + Attribute group %1 contains two different attributes that both have types derived from %2. + + + + Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Complex type %1 contains attribute %2 twice. + + + + Complex type %1 contains two different attributes that both have types derived from %2. + + + + Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3. + + + + Element %1 is not allowed to have a value constraint if its base type is complex. + + + + Element %1 is not allowed to have a value constraint if its type is derived from %2. + + + + Value constraint of element %1 is not of elements type: %2. + + + + Element %1 is not allowed to have substitution group affiliation as it is no global element. + + + + Type of element %1 cannot be derived from type of substitution group affiliation. + + + + Value constraint of attribute %1 is not of attributes type: %2. + + + + Attribute %1 has value constraint but has type derived from %2. + + + + %1 attribute in derived complex type must be %2 like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have the same %2 value constraint like in base type. + + + + Attribute %1 in derived complex type must have %2 value constraint. + + + + processContent of base wildcard must be weaker than derived wildcard. + + + + Element %1 exists twice with different types. + + + + Particle contains non-deterministic wildcards. + + + + Base attribute %1 is required but derived attribute is not. + + + + Type of derived attribute %1 cannot be validly derived from type of base attribute. + + + + Value constraint of derived attribute %1 does not match value constraint of base attribute. + + + + Derived attribute %1 does not exist in the base definition. + + + + Derived attribute %1 does not match the wildcard in the base definition. + + + + Base attribute %1 is required but missing in derived definition. + + + + Derived definition contains an %1 element that does not exists in the base definition + + + + Derived wildcard is not a subset of the base wildcard. + + + + %1 of derived wildcard is not a valid restriction of %2 of base wildcard + + + + Attribute %1 from base type is missing in derived type. + + + + Type of derived attribute %1 differs from type of base attribute. + + + + Base definition contains an %1 element that is missing in the derived definition + + + + Can not process unknown element %1, expected elements are: %2. + + + + Element %1 is not allowed in this scope, possible elements are: %2. + + + + Child element is missing in that scope, possible child elements are: %1. + + + + Document is not a XML schema. + + + + %1 attribute of %2 element contains invalid content: {%3} is not a value of type %4. + + + + %1 attribute of %2 element contains invalid content: {%3}. + + + + Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema. + + + + Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema. + + + + %1 element is not allowed to have the same %2 attribute value as the target namespace %3. + + + + %1 element without %2 attribute is not allowed inside schema without target namespace. + + + + %1 element is not allowed inside %2 element if %3 attribute is present. + + + + %1 element has neither %2 attribute nor %3 child element. + + + + %1 element with %2 child element must not have a %3 attribute. + + + + %1 attribute of %2 element must be %3 or %4. + + + + %1 attribute of %2 element must have a value of %3. + + + + %1 attribute of %2 element must have a value of %3 or %4. + + + + %1 element must not have %2 and %3 attribute together. + + + + Content of %1 attribute of %2 element must not be from namespace %3. + + + + %1 attribute of %2 element must not be %3. + + + + %1 attribute of %2 element must have the value %3 because the %4 attribute is set. + + + + Specifying use='prohibited' inside an attribute group has no effect. + + + + %1 element must have either %2 or %3 attribute. + + + + %1 element must have either %2 attribute or %3 or %4 as child element. + + + + %1 element requires either %2 or %3 attribute. + + + + Text or entity references not allowed inside %1 element + + + + %1 attribute of %2 element must contain %3, %4 or a list of URIs. + + + + %1 element is not allowed in this context. + + + + %1 attribute of %2 element has larger value than %3 attribute. + + + + Prefix of qualified name %1 is not defined. + + + + %1 attribute of %2 element must either contain %3 or the other values. + + + + Component with ID %1 has been defined previously. + + + + Element %1 already defined. + + + + Attribute %1 already defined. + + + + Type %1 already defined. + + + + Attribute group %1 already defined. + + + + Element group %1 already defined. + + + + Notation %1 already defined. + + + + Identity constraint %1 already defined. + + + + Duplicated facets in simple type %1. + + + + %1 references unknown %2 or %3 element %4. + + + + %1 references identity constraint %2 that is no %3 or %4 element. + + + + %1 has a different number of fields from the identity constraint %2 that it references. + + + + Base type %1 of %2 element cannot be resolved. + + + + Item type %1 of %2 element cannot be resolved. + + + + Member type %1 of %2 element cannot be resolved. + + + + Type %1 of %2 element cannot be resolved. + + + + Base type %1 of complex type cannot be resolved. + + + + %1 cannot have complex base type that has a %2. + + + + Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type. + + + + Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model. + + + + Type of %1 element must be a simple type, %2 is not. + + + + Substitution group %1 of %2 element cannot be resolved. + + + + Substitution group %1 has circular definition. + + + + Duplicated element names %1 in %2 element. + + + + Reference %1 of %2 element cannot be resolved. + + + + Circular group reference for %1. + + + + %1 element is not allowed in this scope + + + + %1 element cannot have %2 attribute with value other than %3. + + + + %1 element cannot have %2 attribute with value other than %3 or %4. + + + + %1 or %2 attribute of reference %3 does not match with the attribute declaration %4. + + + + Attribute group %1 has circular reference. + + + + %1 attribute in %2 must have %3 use like in base type %4. + + + + Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2. + + + + %1 has attribute wildcard but its base type %2 has not. + + + + Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible. + + + + Enumeration facet contains invalid content: {%1} is not a value of type %2. + + + + Namespace prefix of qualified name %1 is not defined. + + + + %1 element %2 is not a valid restriction of the %3 element it redefines: %4. + + + + %1 is not valid according to %2. + + + + String content does not match the length facet. + + + + String content does not match the minLength facet. + + + + String content does not match the maxLength facet. + + + + String content does not match pattern facet. + + + + String content is not listed in the enumeration facet. + + + + Signed integer content does not match the maxInclusive facet. + + + + Signed integer content does not match the maxExclusive facet. + + + + Signed integer content does not match the minInclusive facet. + + + + Signed integer content does not match the minExclusive facet. + + + + Signed integer content is not listed in the enumeration facet. + + + + Signed integer content does not match pattern facet. + + + + Signed integer content does not match in the totalDigits facet. + + + + Unsigned integer content does not match the maxInclusive facet. + + + + Unsigned integer content does not match the maxExclusive facet. + + + + Unsigned integer content does not match the minInclusive facet. + + + + Unsigned integer content does not match the minExclusive facet. + + + + Unsigned integer content is not listed in the enumeration facet. + + + + Unsigned integer content does not match pattern facet. + + + + Unsigned integer content does not match in the totalDigits facet. + + + + Double content does not match the maxInclusive facet. + + + + Double content does not match the maxExclusive facet. + + + + Double content does not match the minInclusive facet. + + + + Double content does not match the minExclusive facet. + + + + Double content is not listed in the enumeration facet. + + + + Double content does not match pattern facet. + + + + Decimal content does not match in the fractionDigits facet. + + + + Decimal content does not match in the totalDigits facet. + + + + Date time content does not match the maxInclusive facet. + + + + Date time content does not match the maxExclusive facet. + + + + Date time content does not match the minInclusive facet. + + + + Date time content does not match the minExclusive facet. + + + + Date time content is not listed in the enumeration facet. + + + + Date time content does not match pattern facet. + + + + Duration content does not match the maxInclusive facet. + + + + Duration content does not match the maxExclusive facet. + + + + Duration content does not match the minInclusive facet. + + + + Duration content does not match the minExclusive facet. + + + + Duration content is not listed in the enumeration facet. + + + + Duration content does not match pattern facet. + + + + Boolean content does not match pattern facet. + + + + Binary content does not match the length facet. + + + + Binary content does not match the minLength facet. + + + + Binary content does not match the maxLength facet. + + + + Binary content is not listed in the enumeration facet. + + + + Invalid QName content: %1. + + + + QName content is not listed in the enumeration facet. + + + + QName content does not match pattern facet. + + + + Notation content is not listed in the enumeration facet. + + + + List content does not match length facet. + + + + List content does not match minLength facet. + + + + List content does not match maxLength facet. + + + + List content is not listed in the enumeration facet. + + + + List content does not match pattern facet. + + + + Union content is not listed in the enumeration facet. + + + + Union content does not match pattern facet. + + + + Data of type %1 are not allowed to be empty. + + + + Element %1 is missing child element. + + + + There is one IDREF value with no corresponding ID: %1. + + + + Loaded schema file is invalid. + + + + %1 contains invalid data. + + + + xsi:schemaLocation namespace %1 has already appeared earlier in the instance document. + + + + xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute. + + + + No schema defined for validation. + + + + No definition for element %1 available. + + + + Specified type %1 is not known to the schema. + + + + Element %1 is not defined in this scope. + + + + Declaration for element %1 does not exist. + + + + Element %1 contains invalid content. + + + + Element %1 is declared as abstract. + + + + Element %1 is not nillable. + + + + Attribute %1 contains invalid data: %2 + + + + Element contains content although it is nillable. + + + + Fixed value constraint not allowed if element is nillable. + + + + Specified type %1 is not validly substitutable with element type %2. + + + + Complex type %1 is not allowed to be abstract. + + + + Element %1 contains not allowed attributes. + + + + Element %1 contains not allowed child element. + + + + Content of element %1 does not match its type definition: %2. + + + + Content of element %1 does not match defined value constraint. + + + + Element %1 contains not allowed child content. + + + + Element %1 contains not allowed text content. + + + + Element %1 cannot contain other elements, as it has fixed content. + + + + Element %1 is missing required attribute %2. + + + + Attribute %1 does not match the attribute wildcard. + + + + Declaration for attribute %1 does not exist. + + + + Element %1 contains two attributes of type %2. + + + + Attribute %1 contains invalid content. + + + + Element %1 contains unknown attribute %2. + + + + Content of attribute %1 does not match its type definition: %2. + + + + Content of attribute %1 does not match defined value constraint. + + + + Non-unique value found for constraint %1. + + + + Key constraint %1 contains absent fields. + + + + Key constraint %1 contains references nillable element %2. + + + + No referenced value found for key reference %1. + + + + More than one value found for field %1. + + + + Field %1 has no simple type. + + + + ID value '%1' is not unique. + + + + '%1' attribute contains invalid QName content: %2. + + + + empty + + + + zero or one + + + + exactly one + + + + one or more + + + + zero or more + + + + Required type is %1, but %2 was found. + + + + Promoting %1 to %2 may cause loss of precision. + + + + The focus is undefined. + + + + It's not possible to add attributes after any other kind of node. + + + + An attribute by name %1 has already been created. + + + + Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported. + + + + -- cgit v0.12 From d0c62604036518375ed3390437c4923abc9985e1 Mon Sep 17 00:00:00 2001 From: Honglei Zhang Date: Tue, 25 Oct 2011 13:10:06 +0300 Subject: Update SQLite version number in legal document SQLite version in Qt 4.8 is upcated to 3.7.7.1. Reviewed-by: Trust Me --- doc/src/legal/3rdparty.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/legal/3rdparty.qdoc b/doc/src/legal/3rdparty.qdoc index 2edfdd3..d8276b3 100644 --- a/doc/src/legal/3rdparty.qdoc +++ b/doc/src/legal/3rdparty.qdoc @@ -361,7 +361,7 @@ See \c src/3rdparty/sha1/sha1.cpp for more information about the terms and conditions under which the code is supplied. - \section1 SQLite (\c sqlite) version 3.6.19 + \section1 SQLite (\c sqlite) version 3.7.7.1 \e{SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.} -- cgit v0.12 From 6750461b408f7ffa768ba9507dcd64640010fff5 Mon Sep 17 00:00:00 2001 From: Honglei Zhang Date: Tue, 25 Oct 2011 13:16:30 +0300 Subject: Fix QtSql autotest server addresses Fix QtSql autotest server addresses. Old server which are located in Oslo shall not be used. New servers are located in Brisbane. Reviewed-by: Trust Me --- tests/auto/qsqldatabase/tst_databases.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/auto/qsqldatabase/tst_databases.h b/tests/auto/qsqldatabase/tst_databases.h index 497f5a4..95ead61 100644 --- a/tests/auto/qsqldatabase/tst_databases.h +++ b/tests/auto/qsqldatabase/tst_databases.h @@ -246,7 +246,8 @@ public: // addDb( "QMYSQL3", "testdb", "troll", "trond", "horsehead.nokia.troll.no", 3308, "CLIENT_COMPRESS=1;CLIENT_SSL=1" ); // MySQL 4.1.1 // addDb( "QMYSQL3", "testdb", "troll", "trond", "horsehead.nokia.troll.no", 3309, "CLIENT_COMPRESS=1;CLIENT_SSL=1" ); // MySQL 5.0.18 Linux // addDb( "QMYSQL3", "testdb", "troll", "trond", "silence.nokia.troll.no" ); // MySQL 5.1.36 Windows -// addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "mysql4-nokia.trolltech.com.au" ); // MySQL 4.1.22-2.el4 linux + +// addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "bq-mysql41.apac.nokia.com" ); // MySQL 4.1.22-2.el4 linux // addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "bq-mysql50.apac.nokia.com" ); // MySQL 5.0.45-7.el5 linux // addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "bq-mysql51.apac.nokia.com" ); // MySQL 5.1.36-6.7.2.i586 linux @@ -256,13 +257,15 @@ public: // addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.nokia.troll.no", 5436 ); // V7.4 // addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.nokia.troll.no", 5437 ); // V8.0.3 // addDb( "QPSQL7", "testdb", "troll", "trond", "silence.nokia.troll.no" ); // V8.2.1, UTF-8 -// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "postgres74-nokia.trolltech.com.au" ); // Version 7.4.19-1.el4_6.1 + +// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-postgres74.apac.nokia.com" ); // Version 7.4.19-1.el4_6.1 // addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql81.apac.nokia.com" ); // Version 8.1.11-1.el5_1.1 // addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql84.apac.nokia.com" ); // Version 8.4.1-2.1.i586 // addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql90.apac.nokia.com" ); // Version 9.0.0 // addDb( "QDB2", "testdb", "troll", "trond", "silence.nokia.troll.no" ); // DB2 v9.1 on silence +// addDb( "QDB2", "testdb", "testuser", "Ee4Gabf6_", "bq-db2-972.apac.nokia.com" ); // DB2 // yes - interbase really wants the physical path on the host machine. // addDb( "QIBASE", "/opt/interbase/qttest.gdb", "SYSDBA", "masterkey", "horsehead.nokia.troll.no" ); @@ -271,6 +274,9 @@ public: // addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "firebird1-nokia.trolltech.com.au" ); // Firebird 1.5.5 // addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "firebird2-nokia.trolltech.com.au" ); // Firebird 2.1.1 +// addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "bq-firebird1.apac.nokia.com" ); // Firebird 1.5.5 +// addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "bq-firebird2.apac.nokia.com" ); // Firebird 2.1.1 + // use in-memory database to prevent local files // addDb("QSQLITE", ":memory:"); addDb( "QSQLITE", QDir::toNativeSeparators(QDir::tempPath()+"/foo.db") ); -- cgit v0.12 From 207fb45ce7bac66ab53a0770d2bfb50d8d1997d8 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 25 Oct 2011 15:58:49 +0200 Subject: Fix possible crash in glyph cache when deleting and creating contexts The freeResource(), used in the glyph cache as a notifier of when the owner context of the cache disappears, is never called if the context is in a group with other contexts that share its resources. This implements a second notifier function instead which can be used to invalidate the glyph cache when its context is destroyed. Task-number: QTBUG-22324 Reviewed-by: Samuel --- src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h | 4 ++++ src/opengl/qgl.cpp | 11 ++++++++++- src/opengl/qgl_p.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h index 83ca06d..1a8bb0b 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h @@ -144,6 +144,10 @@ public: void clear(); + void contextDeleted(const QGLContext *context) { + if (ctx == context) + ctx = 0; + } void freeResource(void *) { ctx = 0; } private: diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 423fa08..eaaf9a8 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -5722,6 +5722,11 @@ void QGLContextGroupResourceBase::cleanup(const QGLContext *ctx) } } +void QGLContextGroupResourceBase::contextDeleted(const QGLContext *ctx) +{ + Q_UNUSED(ctx); +} + void QGLContextGroupResourceBase::cleanup(const QGLContext *ctx, void *value) { #ifdef QT_GL_CONTEXT_RESOURCE_DEBUG @@ -5737,12 +5742,16 @@ void QGLContextGroupResourceBase::cleanup(const QGLContext *ctx, void *value) void QGLContextGroup::cleanupResources(const QGLContext *context) { + // Notify all resources that a context has been deleted + QHash::ConstIterator it; + for (it = m_resources.begin(); it != m_resources.end(); ++it) + it.key()->contextDeleted(context); + // If there are still shares, then no cleanup to be done yet. if (m_shares.size() > 1) return; // Iterate over all resources and free each in turn. - QHash::ConstIterator it; for (it = m_resources.begin(); it != m_resources.end(); ++it) it.key()->cleanup(context, it.value()); } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index de349a7..b6fc96a 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -725,6 +725,7 @@ public: void cleanup(const QGLContext *context); void cleanup(const QGLContext *context, void *value); virtual void freeResource(void *value) = 0; + virtual void contextDeleted(const QGLContext *ctx); protected: QList m_groups; -- cgit v0.12 From b31ec8e879761decfda70069262f06b5aa08aa82 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 25 Oct 2011 16:37:45 +0300 Subject: Improve patch_capabilities script output. Now prefix any actual patching errors with "ERROR:" so that they will be obvious also in QtCreator builds. Task-number: QTBUG-22267 Reviewed-by: Sami Merila --- bin/patch_capabilities.pl | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index 0ba8bc5..a6345e0 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -49,6 +49,7 @@ # # Note: Please make sure to output all changes done to the pkg file in a print statements # starting with "Patching: " to ease integration into IDEs! +# Similarly, any actual error messages should start with "ERROR:" # use File::Copy; @@ -103,13 +104,16 @@ if (@ARGV) # Parse the first given script argument as a ".pkg" file name. my $pkgFileName = shift(@ARGV); my $justCheck = ""; + my $errorPrefix = "ERROR:"; my $msgPrefix = "Patching:"; my $tempPatchPath = ""; if ($pkgFileName eq "-c") { $pkgFileName = shift(@ARGV); $justCheck = true; + # All messages are simply warnings, as no actual patching is attempted. $msgPrefix = "Warning:"; + $errorPrefix = "Warning:"; } if ($pkgFileName eq "-t") { @@ -302,7 +306,7 @@ if (@ARGV) if ($binaryBaseName =~ /\.exe$/) { # Installer refuses to install protected executables in a self signed package, so abort if one is detected. # We can't simply just patch the executable SID, as any registration resources executable uses will be linked to it via SID. - print ("$msgPrefix Executable with SID in the protected range (0x$exeSid) detected: \"$binaryBaseName\". A self-signed sis with protected executables is not supported.\n\n"); + print ("$errorPrefix Executable with SID in the protected range (0x$exeSid) detected: \"$binaryBaseName\". A self-signed sis with protected executables is not supported.\n\n"); $checkFailed = true; } } @@ -315,9 +319,6 @@ if (@ARGV) $_ = trim($_); if ($capabilitiesToAllow =~ /$_/) { push(@capabilitiesToSet, $_); - if (Location =~ /$_/i) { - print ("$msgPrefix \"Location\" capability detected for binary: \"$binaryBaseName\". This capability is not self-signable for S60 3rd edition feature pack 1 devices, so installing this package on those devices will most likely not work.\n\n"); - } } else { push(@capabilitiesToDrop, $_); } @@ -345,7 +346,7 @@ if (@ARGV) if ($binaryBaseName =~ /\.exe$/) { # While libraries often have capabilities they do not themselves need just to enable them to be loaded by wider variety of processes, # executables are more likely to need every capability they have been assigned or they won't function correctly. - print ("$msgPrefix Executable with capabilities incompatible with self-signing detected: \"$binaryBaseName\". (Incompatible capabilities: \"$capsToDropStr\".) Reducing capabilities is only supported for libraries.\n"); + print ("$errorPrefix Executable with capabilities incompatible with self-signing detected: \"$binaryBaseName\". (Incompatible capabilities: \"$capsToDropStr\".) Reducing capabilities is only supported for libraries.\n"); $checkFailed = true; } else { print ("$msgPrefix The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package and will be removed: \"$capsToDropStr\".\n"); @@ -368,9 +369,9 @@ if (@ARGV) if ($checkFailed) { print ("\n"); if ($justCheck) { - print ("$msgPrefix The package is not compatible with self-signing.\n"); + print ("$msgPrefix The package is not compatible with self-signing. "); } else { - print ("$msgPrefix Unable to patch the package for self-singing.\n"); + print ("$errorPrefix Unable to patch the package for self-singing. "); } print ("Use a proper developer certificate for signing this package.\n\n"); exit(1); -- cgit v0.12 From c47b2e9c5fc43ef9c55c8ee884e83a33da00ae0b Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Wed, 26 Oct 2011 12:59:31 +0200 Subject: Update changelog for Qt 4.8 --- dist/changes-4.8.0 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0 index 0d494ab..17caec6 100644 --- a/dist/changes-4.8.0 +++ b/dist/changes-4.8.0 @@ -129,6 +129,7 @@ QtGui - QUndoView: Allow different text for undo actions and items - QCommonStyle: Fix overrides from the proxy style [QTBUG-20849] - QWindowsVistaStyle: Draw CE_ProgressBarGroove correctly with PP_TRANSPARENTBAR. + - Removed obsolete -qt-gif configure option. QtNetwork --------- @@ -175,6 +176,11 @@ QtWebKit QtSql ----- - Update sqlite to 3.7.7.1 + - QSqlField now initializes the type of its QVariant value to its own type. + - QSqlField's generated flag now controls generation of SQL insert/update/delete + in QSqlDriver::sqlStatement(). QSqlTableModel initializes the flag to false in + new edit records and sets it to true when a value is set. Applications can still + manipulate generated flags directly to control SQL generation. [QTBUG-13211] QtSvg ----- @@ -226,6 +232,7 @@ Qt for Windows - The small 16x16 version of the default window icon is now being loaded correctly from the IDI_ICON1 resource. - Fixed version checking for untested versions of Windows. (QTBUG-20480) + - Qt libs on MinGW now come with pkg-config .pc files. Qt for Mac OS X --------------- -- cgit v0.12 From e392f641e569be04a7f6a9336b52c77a9ec0c627 Mon Sep 17 00:00:00 2001 From: Pasi Pentikainen Date: Tue, 25 Oct 2011 17:50:02 +0300 Subject: Symbian configuration parameter change for linux building Symbian configuration changed to use opengl es2 parameter which works both with configure.exe (symbian windows building) and configure sh-script (symbian linux building). Reviewed-by: Miikka Heikkinen --- config.profiles/symbian/bld.inf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.profiles/symbian/bld.inf b/config.profiles/symbian/bld.inf index 21b3614..814e4b2 100644 --- a/config.profiles/symbian/bld.inf +++ b/config.profiles/symbian/bld.inf @@ -81,5 +81,5 @@ translations/qt_zh_tw_symbian.ts /epoc32/include/platform/qt/translations/qt_zh_ PRJ_EXTENSIONS START EXTENSION qt/qtconfig OPTION QT_ROOT .. -OPTION OPTIONS -opensource -confirm-license -openvg -opengl-es-2 -script -no-scripttools -no-webkit -make make -graphicssystem openvg -phonon -phonon-backend -usedeffiles -dont-process -nomake examples -nomake demos -nomake tools -audio-backend -fpu softvfp+vfpv2 -END \ No newline at end of file +OPTION OPTIONS -opensource -confirm-license -openvg -opengl es2 -script -no-scripttools -no-webkit -make make -graphicssystem openvg -phonon -phonon-backend -usedeffiles -dont-process -nomake examples -nomake demos -nomake tools -audio-backend -fpu softvfp+vfpv2 +END -- cgit v0.12 From e5df3b4eeaf5943f5170dda781c3c589fa35a15a Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Thu, 20 Oct 2011 16:55:02 +0100 Subject: QIODevice - disallow setTextMode when not open MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calling setTextMode() before open() would make the device appear to be already open and cause later errors. Added a qWarning and documentation update to prevent this API misuse Task-number: QTBUG-20905 Change-Id: I2e06cd8e79f4afcf27417ac0eae6ebef980a17aa Reviewed-by: Thiago Macieira (Intel) Reviewed-by: João Abecasis (cherry picked from commit 29c30a20bab4c4ea892b95c08c71bb5f136bb82c) --- src/corelib/io/qiodevice.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index dae4e82..56fff90 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -468,11 +468,17 @@ void QIODevice::setOpenMode(OpenMode openMode) otherwise the \l Text flag is removed. This feature is useful for classes that provide custom end-of-line handling on a QIODevice. + The IO device should be opened before calling this function. + \sa open(), setOpenMode() */ void QIODevice::setTextModeEnabled(bool enabled) { Q_D(QIODevice); + if (!isOpen()) { + qWarning("QIODevice::setTextModeEnabled: The device is not open"); + return; + } if (enabled) d->openMode |= Text; else -- cgit v0.12 From 1b928f5e41888150c4d85ff4df8a9fcab9b06d90 Mon Sep 17 00:00:00 2001 From: John Tapsell Date: Thu, 27 Oct 2011 20:52:03 +0200 Subject: Harfbuzz shaper: kerning adjustment does not need to be modified by RTL Merge-request: 1435 Reviewed-by: Oswald Buddenhagen --- src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index 3410782..7f4bb0c 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -1293,7 +1293,7 @@ HB_Bool HB_OpenTypePosition(HB_ShaperItem *item, int availableGlyphs, HB_Bool do // (int)(positions[i].x_pos >> 6), (int)(positions[i].y_pos >> 6), // positions[i].back, positions[i].new_advance); - HB_Fixed adjustment = (item->item.bidiLevel % 2) ? -positions[i].x_advance : positions[i].x_advance; + HB_Fixed adjustment = positions[i].x_advance; if (!(face->current_flags & HB_ShaperFlag_UseDesignMetrics)) adjustment = HB_FIXED_ROUND(adjustment); -- cgit v0.12 From 7fe7ec7201891b6dc9e918edfa86ab9bf4ee6e80 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 28 Oct 2011 11:32:26 +0200 Subject: Revert "Fixed deployment problems with MSVC 2005 and 2008 SP1" This reverts commit ec41d27565ed0b4d517f30563def135d0b4c7a8d. Adding the define _BIND_TO_CURRENT_VCLIBS_VERSION led to linking problems for several people. Also, this leads to problems when using the binary installer for development. Reviewed-by: Andy Shaw --- mkspecs/win32-msvc2005/qmake.conf | 2 +- mkspecs/win32-msvc2008/qmake.conf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf index a9f725c..5b717e7 100644 --- a/mkspecs/win32-msvc2005/qmake.conf +++ b/mkspecs/win32-msvc2005/qmake.conf @@ -8,7 +8,7 @@ MAKEFILE_GENERATOR = MSVC.NET TEMPLATE = app CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe QT += core gui -DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT _BIND_TO_CURRENT_VCLIBS_VERSION=1 +DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT QMAKE_COMPILER_DEFINES += _MSC_VER=1400 WIN32 QMAKE_CC = cl diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf index fd115e7..c765562 100644 --- a/mkspecs/win32-msvc2008/qmake.conf +++ b/mkspecs/win32-msvc2008/qmake.conf @@ -8,7 +8,7 @@ MAKEFILE_GENERATOR = MSVC.NET TEMPLATE = app CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe QT += core gui -DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT _BIND_TO_CURRENT_VCLIBS_VERSION=1 +DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT QMAKE_COMPILER_DEFINES += _MSC_VER=1500 WIN32 QMAKE_CC = cl -- cgit v0.12