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 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 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 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 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 6f6d94acaefc202e2a922ff2ea672afa64490c4e Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 14 Oct 2011 12:56:53 +0300 Subject: Maximized dialogs are incorrectly positioned after layout switch The native side seems to return StaCon pane height as zero in Belle. If no StaCon pane height is available, try to fetch Status Pane height and use that one. Task-number: QTBUG-22022 Reviewed-by: Miikka Heikkinen --- src/gui/dialogs/qdialog.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index 2fb6c67..d2211af 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -909,6 +909,10 @@ bool QDialog::symbianAdjustedPosition() AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect); } else { AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStaconTop, statusPaneRect); + // In some native layouts, StaCon is not used. Try to fetch the status pane + // height from StatusPane component. + if (statusPaneRect.IsEmpty()) + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane, statusPaneRect); } p.setX(0); -- cgit v0.12 From 18afea90f84fdf44a2b3890716bf6d6a74b7446d Mon Sep 17 00:00:00 2001 From: mread Date: Fri, 14 Oct 2011 11:12:45 +0100 Subject: Early construction of status pane and softkeys for Symbian boosted apps QtAppBooster can partially start apps and hide them in the background before they are requested by the user. This gives an apparently faster start for these apps. Qt is now detecting these app starts and bringing the construction of the status pane and softkeys forward so that they happen in the background. This cuts their construction time off the time between the user clicking on the app and it being ready to use. On a Nokia E7, this gain was measured at an average of 127ms. Task-number: QT-4933 Reviewed-by: Sami Merila --- src/gui/kernel/qapplication.cpp | 4 ++ src/gui/kernel/qapplication_p.h | 1 + src/gui/kernel/qapplication_s60.cpp | 44 +++++++++++++++++++ src/gui/kernel/qt_s60_p.h | 3 ++ src/gui/kernel/qwidget_s60.cpp | 84 ++++++++++++++----------------------- 5 files changed, 83 insertions(+), 53 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 15d37c3..35a9559 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -874,6 +874,10 @@ void QApplicationPrivate::construct( if (qt_is_gui_used) qt_guiPlatformPlugin(); #endif + +#ifdef Q_OS_SYMBIAN + symbianHandleLiteModeStartup(); +#endif } #if defined(Q_WS_X11) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index e1252a9..0756d6c 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -561,6 +561,7 @@ public: int symbianProcessWsEvent(const QSymbianEvent *symbianEvent); int symbianHandleCommand(const QSymbianEvent *symbianEvent); int symbianResourceChange(const QSymbianEvent *symbianEvent); + void symbianHandleLiteModeStartup(); void _q_aboutToQuit(); #endif diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 03da630..7d198ce 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -201,6 +201,32 @@ bool QS60Data::setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStat } #endif +void QS60Data::createStatusPaneAndCBA() +{ + CEikAppUi *ui = static_cast(S60->appUi()); + MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory(); + QT_TRAP_THROWING( + factory->CreateResourceIndependentFurnitureL(ui); + CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, + CEikButtonGroupContainer::EHorizontal, ui, R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); + CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba); + Q_ASSERT(!oldCba); + S60->setButtonGroupContainer(cba); + CEikMenuBar *menuBar = new(ELeave) CEikMenuBar; + menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY); + menuBar->SetMenuType(CEikMenuBar::EMenuOptions); + S60->appUi()->AddToStackL(menuBar, ECoeStackPriorityMenu, ECoeStackFlagRefusesFocus); + CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar); + Q_ASSERT(!oldMenu); + ) + if (S60->statusPane()) { + // Use QDesktopWidget as the status pane observer to proxy for the AppUi. + // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver. + QSymbianControl *desktopControl = static_cast(QApplication::desktop()->winId()); + S60->statusPane()->SetObserver(desktopControl); + } +} + void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible) { if (QWidgetPrivate::mapper && QWidgetPrivate::mapper->contains(control)) { @@ -2580,6 +2606,24 @@ int QApplicationPrivate::symbianResourceChange(const QSymbianEvent *symbianEvent return ret; } +void QApplicationPrivate::symbianHandleLiteModeStartup() +{ + if (QCoreApplication::arguments().contains(QLatin1String("--startup-lite"))) { + if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) + && !S60->buttonGroupContainer() && !S60->statusPane()) { + // hide and force this app to the background before creating screen furniture to avoid flickers + CAknAppUi *appui = static_cast(CCoeEnv::Static()->AppUi()); + if (appui) + appui->HideApplicationFromFSW(ETrue); + CCoeEnv::Static()->RootWin().SetOrdinalPosition(-1); + S60->createStatusPaneAndCBA(); + if (S60->statusPane()) { + S60->setStatusPaneAndButtonGroupVisibility(false, false); + } + } + } +} + #ifndef QT_NO_WHEELEVENT int QApplication::wheelScrollLines() { diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 96b8141..5ad5b00 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -163,6 +163,7 @@ public: int partial_keyboardAutoTranslation : 1; int partialKeyboardOpen : 1; int handleStatusPaneResizeNotifications : 1; + int screenFurnitureFullyCreated : 1; QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type QPointer splitViewLastWidget; @@ -198,6 +199,7 @@ public: static inline void setButtonGroupContainer(CEikButtonGroupContainer* newCba); static void setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, bool buttonGroupVisible); static bool setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStates newState); + static void createStatusPaneAndCBA(); #endif static void controlVisibilityChanged(CCoeControl *control, bool visible); static TRect clientRect(); @@ -365,6 +367,7 @@ inline QS60Data::QS60Data() partial_keyboardAutoTranslation(1), partialKeyboardOpen(0), handleStatusPaneResizeNotifications(1), + screenFurnitureFullyCreated(0), s60ApplicationFactory(0) #ifdef Q_OS_SYMBIAN ,s60InstalledTrapHandler(0) diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 00661ae..396c306 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -505,63 +505,41 @@ void QWidgetPrivate::show_sys() #ifdef Q_WS_S60 // Lazily initialize the S60 screen furniture when the first window is shown. if (q->isWindow() && !QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) - && !S60->buttonGroupContainer() && !S60->statusPane()) { - - if (!q->testAttribute(Qt::WA_DontShowOnScreen)) { - - // Create the status pane and CBA here - CEikAppUi *ui = static_cast(S60->appUi()); - MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory(); - - QT_TRAP_THROWING( - factory->CreateResourceIndependentFurnitureL(ui); - - CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, - CEikButtonGroupContainer::EHorizontal,ui,R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); - if (isFullscreen && !cbaRequested) - cba->MakeVisible(false); - - CEikButtonGroupContainer *oldCba = factory->SwapButtonGroup(cba); - Q_ASSERT(!oldCba); - S60->setButtonGroupContainer(cba); - - // If the creation of the first widget is delayed, for example by doing it - // inside the event loop, S60 somehow "forgets" to set the visibility of the - // toolbar (the three middle softkeys) when you flip the phone over, so we - // need to do it ourselves to avoid a "hole" in the application, even though - // Qt itself does not use the toolbar directly.. - CAknAppUi *appui = dynamic_cast(CEikonEnv::Static()->AppUi()); - if (appui) { - CAknToolbar *toolbar = appui->PopupToolbar(); - if (toolbar && !toolbar->IsVisible()) - toolbar->SetToolbarVisibility(ETrue); - } + && !q->testAttribute(Qt::WA_DontShowOnScreen) && !S60->screenFurnitureFullyCreated) { + // Create the status pane and CBA here if not yet done. These could be created earlier + // if application was launched in "App-Lite" version + if (!S60->buttonGroupContainer() && !S60->statusPane()) + S60->createStatusPaneAndCBA(); + + if (S60->buttonGroupContainer()) { + if (isFullscreen && !cbaRequested) + S60->buttonGroupContainer()->MakeVisible(false); + } + + // If the creation of the first widget is delayed, for example by doing it + // inside the event loop, S60 somehow "forgets" to set the visibility of the + // toolbar (the three middle softkeys) when you flip the phone over, so we + // need to do it ourselves to avoid a "hole" in the application, even though + // Qt itself does not use the toolbar directly.. + CAknAppUi *appui = dynamic_cast(CEikonEnv::Static()->AppUi()); + if (appui) { + CAknToolbar *toolbar = appui->PopupToolbar(); + if (toolbar && !toolbar->IsVisible()) + toolbar->SetToolbarVisibility(ETrue); + } - CEikMenuBar *menuBar = new(ELeave) CEikMenuBar; - menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY); - menuBar->SetMenuType(CEikMenuBar::EMenuOptions); - S60->appUi()->AddToStackL(menuBar,ECoeStackPriorityMenu,ECoeStackFlagRefusesFocus); - - CEikMenuBar *oldMenu = factory->SwapMenuBar(menuBar); - Q_ASSERT(!oldMenu); - ) - - if (S60->statusPane()) { - // Use QDesktopWidget as the status pane observer to proxy for the AppUi. - // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver. - QSymbianControl *desktopControl = static_cast(QApplication::desktop()->winId()); - S60->statusPane()->SetObserver(desktopControl); - if (isFullscreen) { - const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible(); - S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible); - if (cbaVisible) { - // Fix window dimensions as without screen furniture they will have - // defaulted to full screen dimensions initially. - id->handleClientAreaChange(); - } + if (S60->statusPane()) { + if (isFullscreen) { + const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible(); + S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible); + if (cbaVisible) { + // Fix window dimensions as without screen furniture they will have + // defaulted to full screen dimensions initially. + id->handleClientAreaChange(); } } } + S60->screenFurnitureFullyCreated = true; } #endif -- cgit v0.12 From d704e61a8ac1fa9ff4aff05cc5d9bd94a777d04e Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 14 Oct 2011 13:58:16 +0300 Subject: Show SaxBookmarks as maximized in Symbian Previously, SaxBookmarks was always shown as fullscreen app to allow filedialog to show up properly(QFileDialog requires a lot screen space). However, lately Qt for symbian was changed to use native file dialogs as a default. Therefore, the example app can nowadays shown as maximized. Task-number: QTBUG-21776 Reviewed-by: TrustMe --- examples/xml/saxbookmarks/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/xml/saxbookmarks/main.cpp b/examples/xml/saxbookmarks/main.cpp index 5d70ec8..ba0e1db 100644 --- a/examples/xml/saxbookmarks/main.cpp +++ b/examples/xml/saxbookmarks/main.cpp @@ -47,7 +47,7 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); MainWindow mainWin; #if defined(Q_OS_SYMBIAN) - mainWin.showFullScreen(); + mainWin.showMaximized(); #else mainWin.show(); #endif -- cgit v0.12 From 5ad1d248aa02eb30dd4699b071f56fcef1412c94 Mon Sep 17 00:00:00 2001 From: mread Date: Fri, 14 Oct 2011 13:33:17 +0100 Subject: QtGui def file update For the addition of QApplicationPrivate::symbianHandleLiteModeStartup. Two other unfrozen functions also added. Task-number: QT-4933 Reviewed-by: TrustMe --- src/s60installs/bwins/QtGuiu.def | 3 +++ src/s60installs/eabi/QtGuiu.def | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 16de776..335b94f 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -13983,4 +13983,7 @@ EXPORTS ?qt_static_metacall@QShortcut@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13982 NONAME ; void QShortcut::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?endOfLine@QTextEngine@@AAEHH@Z @ 13983 NONAME ; int QTextEngine::endOfLine(int) ?queryKeyboardModifiers@QApplication@@SA?AV?$QFlags@W4KeyboardModifier@Qt@@@@XZ @ 13984 NONAME ; class QFlags QApplication::queryKeyboardModifiers(void) + ?resetFontEngineCache@QTextEngine@@QAEXXZ @ 13985 NONAME ; void QTextEngine::resetFontEngineCache(void) + ?symbianHandleLiteModeStartup@QApplicationPrivate@@QAEXXZ @ 13986 NONAME ; void QApplicationPrivate::symbianHandleLiteModeStartup(void) + ?_q_cleanupWinIds@QWidgetPrivate@@QAEXXZ @ 13987 NONAME ; void QWidgetPrivate::_q_cleanupWinIds(void) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 4133773..3606f9c 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12796,4 +12796,7 @@ EXPORTS _ZTV20QBlittablePixmapData @ 12795 NONAME _Zls6QDebugPK13QSymbianEvent @ 12796 NONAME _ZN12QApplication22queryKeyboardModifiersEv @ 12797 NONAME + _ZN11QTextEngine20resetFontEngineCacheEv @ 12798 NONAME + _ZN14QWidgetPrivate16_q_cleanupWinIdsEv @ 12799 NONAME + _ZN19QApplicationPrivate28symbianHandleLiteModeStartupEv @ 12800 NONAME -- cgit v0.12 From 001c01e91d9c6cc724a374fcb8371a0551b21958 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Mon, 17 Oct 2011 15:47:42 +0100 Subject: Symbian - Change working directory of applications in ROM Working directory (as opposed to applicationDirPath) was on the Z drive before, change it to be the same. Task-Number: QTBUG-22024 Reviewed-By: mread --- src/corelib/kernel/qcore_symbian_p.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/corelib/kernel/qcore_symbian_p.cpp b/src/corelib/kernel/qcore_symbian_p.cpp index 57ae2af..4f953a7 100644 --- a/src/corelib/kernel/qcore_symbian_p.cpp +++ b/src/corelib/kernel/qcore_symbian_p.cpp @@ -121,18 +121,17 @@ public: TInt err = iFs.CreatePrivatePath(sysdrive); if (err != KErrNone && err != KErrAlreadyExists) qWarning("Failed to create private path on system drive."); - //BC with 4.7: set working directory to same drive as application TFileName pfn = RProcess().FileName(); TInt drive; if (pfn.Length() > 0 && iFs.CharToDrive(pfn[0], drive) == KErrNone) { - // for system drive or rom based apps, leave the path on system drive + //BC with 4.7: create private path on application drive (except rom or system drive which is done above) if (drive != sysdrive && drive != EDriveZ) { err = iFs.CreatePrivatePath(drive); - if (err == KErrNone || err == KErrAlreadyExists) - iFs.SetSessionToPrivate(drive); - else + if (err != KErrNone && err != KErrAlreadyExists) qWarning("Failed to create private path on application drive."); } + //BC with 4.7: set working directory to same drive as application + iFs.SetSessionToPrivate(drive); } } -- 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 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 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 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