From bff683416c73329eb91bdb0bc282f4022c9fec7e Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Fri, 8 Jul 2016 14:41:49 +0200 Subject: [PATCH 001/196] QDateTimeEditPrivate:: only ask for fieldInfo() if section index is real On construction, currentSectionIndex has the fake value FirstSectionIndex, which upsets fieldInfo(), leading to a qWarning(). Make interpret(), when deciding whether to delegate to base or handle the value itself, treat fake index value as an invalid state. Task-number: QTBUG-54654 Change-Id: I6d0f71874839abfafcbfaaa0018362288f32a3cd Reviewed-by: Andy Shaw --- src/widgets/widgets/qdatetimeedit.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 96a37197e9..98b0489dfc 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -2344,7 +2344,9 @@ void QDateTimeEditPrivate::interpret(EmitPolicy ep) const QValidator::State state = q->validate(tmp, pos); if (state != QValidator::Acceptable && correctionMode == QAbstractSpinBox::CorrectToPreviousValue - && (state == QValidator::Invalid || !(fieldInfo(currentSectionIndex) & AllowPartial))) { + && (state == QValidator::Invalid + || currentSectionIndex < 0 + || !(fieldInfo(currentSectionIndex) & AllowPartial))) { setValue(value, ep); updateTimeSpec(); } else { From 8356caea45cfd24bb11ab673f16f6761768e6811 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 10 Oct 2016 14:20:43 +0200 Subject: [PATCH 002/196] Fix QPixelFormat::typeInterpretation() for Format_RGB888 RGB888 is byte oriented like the RGBA8888 formats. Task-number: QTBUG-56250 Change-Id: Idbd496e4913e5d168decdd41557e28a71574a85b Reviewed-by: Laszlo Agocs --- src/gui/image/qimage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 17d3c02e36..856ba64204 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -5008,7 +5008,7 @@ static Q_CONSTEXPR QPixelFormat pixelformats[] = { /*ALPHA USAGE*/ QPixelFormat::IgnoresAlpha, /*ALPHA POSITION*/ QPixelFormat::AtBeginning, /*PREMULTIPLIED*/ QPixelFormat::NotPremultiplied, - /*INTERPRETATION*/ QPixelFormat::UnsignedInteger, + /*INTERPRETATION*/ QPixelFormat::UnsignedByte, /*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian), //QImage::Format_RGB444: QPixelFormat(QPixelFormat::RGB, From 940ea856f0b5796b43d1053bc7549d50f9afd31c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 6 Oct 2016 18:58:23 +0200 Subject: [PATCH 003/196] QtSql: compile with GCC 7 GCC 7 warns about implicit fall-throughs now. Fix by adding the missing comments. Change-Id: I7383f47e690b6334ef69c9df745c2205247ca7d0 Reviewed-by: Thiago Macieira Reviewed-by: Mark Brand --- src/sql/kernel/qsqldriver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index adaeb8c846..7ff89cd5dc 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -654,6 +654,7 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const break; } } + // fall through default: r = field.value().toString(); break; From 6d6074e04fa55a0e42c7d8970f6db1cc3913a26e Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 9 Oct 2016 19:29:25 +0200 Subject: [PATCH 004/196] Plug leaks in tst_QXmlSimpleReader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The QXmlInputSource objects were allocated on the heap, but never deleted. Fix by allocating them on the stack instead. Change-Id: Ifd8bd41d778c0634b7a426bbd22a367dfce511c9 Reviewed-by: David Faure Reviewed-by: Jędrzej Nowacki --- .../sax/qxmlsimplereader/tst_qxmlsimplereader.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp index dc5d776f6d..5fe693dd14 100644 --- a/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp +++ b/tests/auto/xml/sax/qxmlsimplereader/tst_qxmlsimplereader.cpp @@ -765,22 +765,22 @@ void tst_QXmlSimpleReader::dtdRecursionLimit() QVERIFY(file.open(QIODevice::ReadOnly)); QXmlSimpleReader xmlReader; { - QXmlInputSource *source = new QXmlInputSource(&file); + QXmlInputSource source(&file); TestHandler handler; xmlReader.setDeclHandler(&handler); xmlReader.setErrorHandler(&handler); - QVERIFY(!xmlReader.parse(source)); + QVERIFY(!xmlReader.parse(&source)); } file.close(); file.setFileName("xmldocs/1-levels-nested-dtd.xml"); QVERIFY(file.open(QIODevice::ReadOnly)); { - QXmlInputSource *source = new QXmlInputSource(&file); + QXmlInputSource source(&file); TestHandler handler; xmlReader.setDeclHandler(&handler); xmlReader.setErrorHandler(&handler); - QVERIFY(!xmlReader.parse(source)); + QVERIFY(!xmlReader.parse(&source)); // The error wasn't because of the recursion limit being reached, // it was because the document is not valid. QVERIFY(handler.recursionCount < 2); @@ -790,11 +790,11 @@ void tst_QXmlSimpleReader::dtdRecursionLimit() file.setFileName("xmldocs/internal-entity-polynomial-attribute.xml"); QVERIFY(file.open(QIODevice::ReadOnly)); { - QXmlInputSource *source = new QXmlInputSource(&file); + QXmlInputSource source(&file); TestHandler handler; xmlReader.setDeclHandler(&handler); xmlReader.setErrorHandler(&handler); - QVERIFY(!xmlReader.parse(source)); + QVERIFY(!xmlReader.parse(&source)); QCOMPARE(handler.recursionCount, 2); } } From 4e13abb9ebea4fda4af47124983b8600b5bf6a76 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 5 Oct 2016 15:45:24 +0200 Subject: [PATCH 005/196] Doc: Mention context menu related API in QWidget overview Change-Id: I357e3468694cc7e2af2f5e8d6dd28c16d2772192 Reviewed-by: Leena Miettinen --- src/widgets/kernel/qwidget.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index b2973349e5..a2920a6a8b 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -809,6 +809,10 @@ void QWidget::setAutoFillBackground(bool enabled) parentWidget(), window(), setParent(), winId(), find(), metric(). + \row \li Context menu \li + contextMenuPolicy, contextMenuEvent(), + customContextMenuRequested(), actions() + \row \li Interactive help \li setToolTip(), setWhatsThis() From f6498fd6776b08b6bd33395e3f716b6d5d79a8b8 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 30 Sep 2016 22:21:37 +0200 Subject: [PATCH 006/196] Plug more than 4k leaks in tst_QGraphicsView The vast majority is due to leaking styles in a data-driven test with almost 100 rows (scrollBarRanges()). Fix by creating the style into a QScopedPointer. The remaining ~500 leaks were due to leaked QGraphicsScenes. They had no parent, and QGraphicsView::addScene() does not adopt them. Fix those by passing the resp. view as their (QObject) parent. Change-Id: I4316798019114ea3d7504d72cd83d534a21149c0 Reviewed-by: Allan Sandfeld Jensen --- .../qgraphicsview/tst_qgraphicsview.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index f5083795c7..da2606c160 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -2938,6 +2938,9 @@ void tst_QGraphicsView::scrollBarRanges() if (useStyledPanel && style == QStringLiteral("Macintosh") && platformName == QStringLiteral("cocoa")) QSKIP("Insignificant on OSX"); + + QScopedPointer stylePtr; + QGraphicsScene scene; QGraphicsView view(&scene); view.setRenderHint(QPainter::Antialiasing); @@ -2945,9 +2948,10 @@ void tst_QGraphicsView::scrollBarRanges() view.setFrameStyle(useStyledPanel ? QFrame::StyledPanel : QFrame::NoFrame); if (style == QString("motif")) - view.setStyle(new FauxMotifStyle); + stylePtr.reset(new FauxMotifStyle); else - view.setStyle(QStyleFactory::create(style)); + stylePtr.reset(QStyleFactory::create(style)); + view.setStyle(stylePtr.data()); view.setStyleSheet(" "); // enables style propagation ;-) int adjust = 0; @@ -3514,7 +3518,7 @@ void tst_QGraphicsView::task245469_itemsAtPointWithClip() static QGraphicsView *createSimpleViewAndScene() { QGraphicsView *view = new QGraphicsView; - QGraphicsScene *scene = new QGraphicsScene; + QGraphicsScene *scene = new QGraphicsScene(view); view->setScene(scene); view->setBackgroundBrush(Qt::blue); @@ -3642,7 +3646,7 @@ void tst_QGraphicsView::moveItemWhileScrolling() MoveItemScrollView() { setWindowFlags(Qt::X11BypassWindowManagerHint); - setScene(new QGraphicsScene(0, 0, 1000, 1000)); + setScene(new QGraphicsScene(0, 0, 1000, 1000, this)); rect = scene()->addRect(0, 0, 10, 10); rect->setPos(50, 50); rect->setPen(QPen(Qt::black, 0)); @@ -3708,7 +3712,7 @@ void tst_QGraphicsView::centerOnDirtyItem() toplevel.setWindowFlags(view.windowFlags() | Qt::WindowStaysOnTopHint); view.resize(200, 200); - QGraphicsScene *scene = new QGraphicsScene; + QGraphicsScene *scene = new QGraphicsScene(&view); view.setScene(scene); view.setSceneRect(-1000, -1000, 2000, 2000); From 9ad4157530e86a1bac7ab8ca50ba3ee9f839f536 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 10 Oct 2016 11:30:51 +0200 Subject: [PATCH 007/196] Fix gradient race condition / read-after-free A gradient table may be deallocated while in use because we don't keep track of references. To fix it we now reference count the cache entries. Task-number: QTBUG-14614 Change-Id: I772ebf565ccf41d476811ca9a51b721f10de8aeb Reviewed-by: Marc Mutz --- src/gui/painting/qdrawhelper_p.h | 2 + src/gui/painting/qpaintengine_raster.cpp | 51 ++++++++++++------------ 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index d636eabe3f..1c6cd5db8a 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -329,6 +329,8 @@ struct QSpanData QGradientData gradient; QTextureData texture; }; + QExplicitlySharedDataPointer cachedGradient; + void init(QRasterBuffer *rb, const QRasterPaintEngine *pe); void setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode); diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 278d7bb99e..f87b052df2 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -4137,7 +4137,8 @@ void QRasterBuffer::flushToARGBImage(QImage *target) const class QGradientCache { - struct CacheInfo +public: + struct CacheInfo : public QSharedData { inline CacheInfo(QGradientStops s, int op, QGradient::InterpolationMode mode) : stops(qMove(s)), opacity(op), interpolationMode(mode) {} @@ -4148,12 +4149,9 @@ class QGradientCache QGradient::InterpolationMode interpolationMode; }; - typedef QMultiHash QGradientColorTableHash; + typedef QMultiHash > QGradientColorTableHash; -public: - typedef QPair ColorBufferPair; - - inline ColorBufferPair getBuffer(const QGradient &gradient, int opacity) { + inline QExplicitlySharedDataPointer getBuffer(const QGradient &gradient, int opacity) { quint64 hash_val = 0; const QGradientStops stops = gradient.stops(); @@ -4167,10 +4165,9 @@ public: return addCacheElement(hash_val, gradient, opacity); else { do { - const CacheInfo &cache_info = it.value(); - if (cache_info.stops == stops && cache_info.opacity == opacity && cache_info.interpolationMode == gradient.interpolationMode()) - return qMakePair(reinterpret_cast(cache_info.buffer32), - reinterpret_cast(cache_info.buffer64)); + const QExplicitlySharedDataPointer &cache_info = it.value(); + if (cache_info->stops == stops && cache_info->opacity == opacity && cache_info->interpolationMode == gradient.interpolationMode()) + return cache_info; ++it; } while (it != cache.constEnd() && it.key() == hash_val); // an exact match for these stops and opacity was not found, create new cache @@ -4184,18 +4181,16 @@ protected: inline void generateGradientColorTable(const QGradient& g, QRgba64 *colorTable, int size, int opacity) const; - ColorBufferPair addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) { + QExplicitlySharedDataPointer addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) { if (cache.size() == maxCacheSize()) { // may remove more than 1, but OK cache.erase(cache.begin() + (qrand() % maxCacheSize())); } - CacheInfo cache_entry(gradient.stops(), opacity, gradient.interpolationMode()); - generateGradientColorTable(gradient, cache_entry.buffer64, paletteSize(), opacity); + QExplicitlySharedDataPointer cache_entry(new CacheInfo (gradient.stops(), opacity, gradient.interpolationMode())); + generateGradientColorTable(gradient, cache_entry->buffer64, paletteSize(), opacity); for (int i = 0; i < GRADIENT_STOPTABLE_SIZE; ++i) - cache_entry.buffer32[i] = cache_entry.buffer64[i].toArgb32(); - CacheInfo &cache_value = cache.insert(hash_val, cache_entry).value(); - return qMakePair(reinterpret_cast(cache_value.buffer32), - reinterpret_cast(cache_value.buffer64)); + cache_entry->buffer32[i] = cache_entry->buffer64[i].toArgb32(); + return cache.insert(hash_val, cache_entry).value(); } QGradientColorTableHash cache; @@ -4414,6 +4409,7 @@ Q_GUI_EXPORT extern QImage qt_imageForBrush(int brushStyle, bool invert); void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode compositionMode) { Qt::BrushStyle brushStyle = qbrush_style(brush); + cachedGradient.reset(); switch (brushStyle) { case Qt::SolidPattern: { type = Solid; @@ -4430,9 +4426,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode const QLinearGradient *g = static_cast(brush.gradient()); gradient.alphaColor = !brush.isOpaque() || alpha != 256; - QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); - gradient.colorTable64 = colorBuffers.second; - gradient.colorTable32 = colorBuffers.first; + QExplicitlySharedDataPointer cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha); + cachedGradient = cacheInfo; + gradient.colorTable32 = cacheInfo->buffer32; + gradient.colorTable64 = cacheInfo->buffer64; gradient.spread = g->spread(); @@ -4451,9 +4448,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode const QRadialGradient *g = static_cast(brush.gradient()); gradient.alphaColor = !brush.isOpaque() || alpha != 256; - QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); - gradient.colorTable64 = colorBuffers.second; - gradient.colorTable32 = colorBuffers.first; + QExplicitlySharedDataPointer cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha); + cachedGradient = cacheInfo; + gradient.colorTable32 = cacheInfo->buffer32; + gradient.colorTable64 = cacheInfo->buffer64; gradient.spread = g->spread(); @@ -4476,9 +4474,10 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode const QConicalGradient *g = static_cast(brush.gradient()); gradient.alphaColor = !brush.isOpaque() || alpha != 256; - QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); - gradient.colorTable64 = colorBuffers.second; - gradient.colorTable32 = colorBuffers.first; + QExplicitlySharedDataPointer cacheInfo = qt_gradient_cache()->getBuffer(*g, alpha); + cachedGradient = cacheInfo; + gradient.colorTable32 = cacheInfo->buffer32; + gradient.colorTable64 = cacheInfo->buffer64; gradient.spread = QGradient::RepeatSpread; From dafa7cc7b5bc35f06f63a78b8f29a7d71fc93f5d Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 10 Oct 2016 20:34:54 +0200 Subject: [PATCH 008/196] QFileDialog: add missing break statements in switch in labelText() It is of course wrong to potentially return the text of the Cancel button if the text of the Accept role button was asked for. Found independently by GCC 7 and Coverity. Coverity-Id: 11150 Change-Id: Ie30f7875daee16a78eeff4b314ce17cbd7cd3aa8 Reviewed-by: Edward Welbourne --- src/widgets/dialogs/qfiledialog.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 3aa9052917..61f5f7b0d2 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -2042,10 +2042,12 @@ QString QFileDialog::labelText(DialogLabel label) const button = d->qFileDialogUi->buttonBox->button(QDialogButtonBox::Save); if (button) return button->text(); + break; case Reject: button = d->qFileDialogUi->buttonBox->button(QDialogButtonBox::Cancel); if (button) return button->text(); + break; } return QString(); } From eec2d5e68af7b65342e4e5a95e47481a483be67e Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 8 Oct 2016 00:48:02 +0200 Subject: [PATCH 009/196] QCalendarWidget: fix a missing break statement GCC 7 warns about implicit fall-throughs, and here it looks like a break was indeed missing. It surely isn't catastrophic that the other update code is executed, too, but it's also useless. Turns out Coverity knew it all along... Coverity-Id: 11162 Change-Id: I88fc0174a66ec337b2d93c006e70be8d5f3bbc33 Reviewed-by: Edward Welbourne --- src/widgets/widgets/qcalendarwidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index 89cde851e5..3823b9c10f 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -2994,6 +2994,7 @@ bool QCalendarWidget::event(QEvent *event) switch (event->type()) { case QEvent::LayoutDirectionChange: d->updateButtonIcons(); + break; case QEvent::LocaleChange: d->m_model->setFirstColumnDay(locale().firstDayOfWeek()); d->cachedSizeHint = QSize(); From 2ecd95bbe907cc9199773bb7930f781058735e1c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 10 Oct 2016 20:47:40 +0200 Subject: [PATCH 010/196] QCalendarWidget: fix misleading if-else cascade in QCalendarDayValidator::text() By the time we hit the last else, its if condition is trivially true, so don't check it (but leave it as a comment). Consequently, remove the trailing (dead) return of a default- constructed QString. Coverity-Id: 62766 Change-Id: I47e1a49f40e6ec95d29c5052c78bfadb63af3b84 Reviewed-by: Edward Welbourne --- src/widgets/widgets/qcalendarwidget.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index 3823b9c10f..7895dc04d9 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -205,10 +205,9 @@ QString QCalendarDayValidator::text(const QDate &date, int repeat) const return formatNumber(date.day(), 2); } else if (repeat == 3) { return m_locale.dayName(date.dayOfWeek(), QLocale::ShortFormat); - } else if (repeat >= 4) { + } else /* repeat >= 4 */ { return m_locale.dayName(date.dayOfWeek(), QLocale::LongFormat); } - return QString(); } ////////////////////////////////// From 1ab521e7f46ad4e3c925d4eececdf3a2ff8b493b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 11 Oct 2016 00:56:59 +0200 Subject: [PATCH 011/196] QFusionStyle: add missing break in switch in drawControl() The old code fell through into from the CE_RubberBand case into the CE_SizeGrip case if the cast of the the QStyleOption to a QStyleOptionRubberBand failed. Quite obviously, the drawing of a rubber band was requested by the caller, drawing a size grip instead must be considered a bug, regardless of any additional guards employed by the size grip case. So, fix by removing the conditional return in the success case and adding an unconditional break. The function ends after the switch, and all other cases also break instead of return, so consider the switch from return to break a contribution to the internal consistency of the function. Discovered independently by GCC 7 and Coverity. Coverity-Id: 11182 Change-Id: I2158f03b9eb018b952716ffa5e615c7b3cc49132 Reviewed-by: Friedemann Kleint Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/widgets/styles/qfusionstyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index e9e1f349c5..dcc99496e3 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -1077,8 +1077,8 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio painter->setPen(innerLine); painter->drawRoundedRect(option->rect.adjusted(1, 1, -2, -2), 1, 1); painter->restore(); - return; } + break; case CE_SizeGrip: painter->save(); { From c34c8a564ef029144db6d2be256de7e46f91199a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 10 Oct 2016 21:43:05 +0200 Subject: [PATCH 012/196] QComboBox: add missing break in switch in keyPressEvent() If the Key_Space case falls through, it does because !d->lineEdit, which makes the following case dead code, because it is guarded by the same condition. Fix by adding the break, which ensures that if those two cases ever diverge, the code stays working by intention, not chance. Independently discovered by GCC 7 and Coverity. Coverity-Id: 11157 Change-Id: Id14114b4157549d0f6fa036e8aa2bf0fa5a863cf Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/widgets/widgets/qcombobox.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 181671c493..450c27d573 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -3160,6 +3160,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) showPopup(); return; } + break; case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Escape: From afe5bcdbd1dbf8c8a229d75d16b614f5e645d32f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 27 Sep 2016 11:25:10 +0200 Subject: [PATCH 013/196] tst_QWidget: Fix UB (invalid member access) in EnterTestMainDialog::eventFilter() Found by UBSan: tst_qwidget.cpp:10207:29: runtime error: member access within address 0x6060000e8880 which does not point to an object of type 'EnterTestModalDialog' 0x6060000e8880: note: object is of type 'QWidget' eb 00 80 45 10 4b 32 ab 11 2b 00 00 80 df 08 00 60 61 00 00 c0 4c 32 ab 11 2b 00 00 00 00 be be ^~~~~~~~~~~~~~~~~~~~~~~ vptr for 'QWidget' #0 0x6ca13f in EnterTestMainDialog::eventFilter(QObject*, QEvent*) tst_qwidget.cpp:10207 #1 0x2b11b8bc90c3 in QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject*, QEvent*) qcoreapplication.cpp:1081 #2 0x2b11a3c49b4a in QApplicationPrivate::notify_helper(QObject*, QEvent*) qapplication.cpp:3716 #3 0x2b11a3c8ec72 in QApplication::notify(QObject*, QEvent*) qapplication.cpp:3704 #4 0x2b11b8bccd0f in QCoreApplication::notifyInternal2(QObject*, QEvent*) qcoreapplication.cpp:988 #5 0x2b11aea5c34d in QCoreApplication::sendEvent(QObject*, QEvent*) qcoreapplication.h:231 #6 0x2b11aea5c34d in QGuiApplicationPrivate::_q_updateFocusObject(QObject*) qguiapplication.cpp:3690 #7 0x2b11aea61360 in QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) .moc/moc_qguiapplication.cpp:177 #8 0x2b11b8d1dc86 in QMetaObject::activate(QObject*, int, int, void**) qobject.cpp:3787 #9 0x2b11aea784a3 in QWindow::focusObjectChanged(QObject*) .moc/moc_qwindow.cpp:760 #10 0x2b11a3fb24f2 in QWidget::clearFocus() qwidget.cpp:6705 #11 0x2b11a3fc87b1 in QWidget::~QWidget() qwidget.cpp:1608 #12 0x2b11a526688c in QDialog::~QDialog() qdialog.cpp:352 #13 0x6c43e2 in EnterTestModalDialog::~EnterTestModalDialog() tst_qwidget.cpp:10160 #14 0x6c43e2 in EnterTestModalDialog::~EnterTestModalDialog() tst_qwidget.cpp:10160 #15 0x492be3 in EnterTestMainDialog::buttonPressed() tst_qwidget.cpp:10188 #16 0x492be3 in EnterTestMainDialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) .moc/tst_qwidget.moc:2056 #17 0x2b11b8d1dc86 in QMetaObject::activate(QObject*, int, int, void**) qobject.cpp:3787 #18 0x2b11a45cb833 in QAbstractButton::clicked(bool) .moc/moc_qabstractbutton.cpp:307 #19 0x2b11a45cd54b in QAbstractButtonPrivate::emitClicked() qabstractbutton.cpp:411 #20 0x2b11a45df73a in QAbstractButtonPrivate::click() qabstractbutton.cpp:404 [...] #41 0x6bb2cf in tst_QWidget::taskQTBUG_27643_enterEvents() tst_qwidget.cpp:10249 [...] Fix by checking the event type first, and accessing modal->button only if it's QEvent::Enter. Change-Id: I2c7df3a1f43ecbfe14741b5861729078a91a32d6 Reviewed-by: Friedemann Kleint --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index e00e575c36..cc1aaa7d51 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -10430,14 +10430,13 @@ public slots: bool eventFilter(QObject *o, QEvent *e) { - if (modal && modal->button && o == modal->button) { - switch (e->type()) { - case QEvent::Enter: + switch (e->type()) { + case QEvent::Enter: + if (modal && modal->button && o == modal->button) enters++; - break; - default: - break; - } + break; + default: + break; } return QDialog::eventFilter(o, e); } From eade394e993bb190bb71152ea0bd805beade6f59 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 6 Oct 2016 18:58:23 +0200 Subject: [PATCH 014/196] QtDBus: compile with GCC 7 GCC 7 warns about implicit fall-throughs now. Fix by adding the missing comments. Change-Id: I629fb3aced9296c81496f19f6ff78c7a5a12e991 Reviewed-by: Thiago Macieira --- src/dbus/qdbusabstractinterface.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp index d63a317612..d12a7d127e 100644 --- a/src/dbus/qdbusabstractinterface.cpp +++ b/src/dbus/qdbusabstractinterface.cpp @@ -755,18 +755,25 @@ QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &m switch (count) { case 8: argList.prepend(arg8); + // fall through case 7: argList.prepend(arg7); + // fall through case 6: argList.prepend(arg6); + // fall through case 5: argList.prepend(arg5); + // fall through case 4: argList.prepend(arg4); + // fall through case 3: argList.prepend(arg3); + // fall through case 2: argList.prepend(arg2); + // fall through case 1: argList.prepend(arg1); } @@ -813,18 +820,25 @@ QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, const switch (count) { case 8: argList.prepend(arg8); + // fall through case 7: argList.prepend(arg7); + // fall through case 6: argList.prepend(arg6); + // fall through case 5: argList.prepend(arg5); + // fall through case 4: argList.prepend(arg4); + // fall through case 3: argList.prepend(arg3); + // fall through case 2: argList.prepend(arg2); + // fall through case 1: argList.prepend(arg1); } From 0c8b5b9a0446fdd881bbceddbbe2afc9ec9f1a0b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 6 Oct 2016 18:58:23 +0200 Subject: [PATCH 015/196] QtOpenGl: compile with GCC 7 GCC 7 warns about implicit fall-throughs now. Fix by adding the missing comments. Change-Id: I081d4db07c7f2b30ee6344a166aaec34ac639ee5 Reviewed-by: Edward Welbourne Reviewed-by: Sean Harmer --- src/opengl/qgl.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 652a498930..071c8d63cb 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1287,14 +1287,19 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co switch (versionString[2].toLatin1()) { case '5': versionFlags |= QGLFormat::OpenGL_Version_1_5; + // fall through case '4': versionFlags |= QGLFormat::OpenGL_Version_1_4; + // fall through case '3': versionFlags |= QGLFormat::OpenGL_Version_1_3; + // fall through case '2': versionFlags |= QGLFormat::OpenGL_Version_1_2; + // fall through case '1': versionFlags |= QGLFormat::OpenGL_Version_1_1; + // fall through default: break; } @@ -1319,10 +1324,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co switch (versionString[2].toLatin1()) { case '3': versionFlags |= QGLFormat::OpenGL_Version_3_3; + // fall through case '2': versionFlags |= QGLFormat::OpenGL_Version_3_2; + // fall through case '1': versionFlags |= QGLFormat::OpenGL_Version_3_1; + // fall through case '0': break; default: @@ -1347,10 +1355,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co switch (versionString[2].toLatin1()) { case '3': versionFlags |= QGLFormat::OpenGL_Version_4_3; + // fall through case '2': versionFlags |= QGLFormat::OpenGL_Version_4_2; + // fall through case '1': versionFlags |= QGLFormat::OpenGL_Version_4_1; + // fall through case '0': break; default: From 77372e0b66393c1f9673e41418683c96a361dfe4 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 6 Oct 2016 18:58:23 +0200 Subject: [PATCH 016/196] harfbuzz: compile with GCC 7 GCC 7 warns about implicit fall-throughs now. Fix by adding the missing comment. Didn't send a patch to upstream, because upstream harfbuzz-old hasn't seen a commit in four years, and this code is no longer in harfbuzz-ng. Change-Id: Ic97efbe01edd37738dcdf43528e82511197d7fb2 Reviewed-by: Konstantin Ritt --- src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp index f7a4195308..c234f19918 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp +++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp @@ -156,12 +156,14 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast) // ### wrong in rtl context! case HB_Combining_BelowLeft: p.y += offset; + // fall through case HB_Combining_BelowLeftAttached: p.x += attachmentRect.x - markMetrics.x; p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y; break; case HB_Combining_Below: p.y += offset; + // fall through case HB_Combining_BelowAttached: p.x += attachmentRect.x - markMetrics.x; p.y += (attachmentRect.y + attachmentRect.height) - markMetrics.y; @@ -170,28 +172,33 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast) break; case HB_Combining_BelowRight: p.y += offset; + // fall through case HB_Combining_BelowRightAttached: p.x += attachmentRect.x + attachmentRect.width - markMetrics.width - markMetrics.x; p.y += attachmentRect.y + attachmentRect.height - markMetrics.y; break; case HB_Combining_Left: p.x -= offset; + // fall through case HB_Combining_LeftAttached: break; case HB_Combining_Right: p.x += offset; + // fall through case HB_Combining_RightAttached: break; case HB_Combining_DoubleAbove: // ### wrong in RTL context! case HB_Combining_AboveLeft: p.y -= offset; + // fall through case HB_Combining_AboveLeftAttached: p.x += attachmentRect.x - markMetrics.x; p.y += attachmentRect.y - markMetrics.y - markMetrics.height; break; case HB_Combining_Above: p.y -= offset; + // fall through case HB_Combining_AboveAttached: p.x += attachmentRect.x - markMetrics.x; p.y += attachmentRect.y - markMetrics.y - markMetrics.height; @@ -200,6 +207,7 @@ static inline void positionCluster(HB_ShaperItem *item, int gfrom, int glast) break; case HB_Combining_AboveRight: p.y -= offset; + // fall through case HB_Combining_AboveRightAttached: p.x += attachmentRect.x + attachmentRect.width - markMetrics.x - markMetrics.width; p.y += attachmentRect.y - markMetrics.y - markMetrics.height; From 00304a3d57b9ba33b6a253b8736cf7e15aeac5c3 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 12 Oct 2016 09:50:42 +0200 Subject: [PATCH 017/196] Blacklist tst_MacNativeEvents::testMouseEnter It is already blacklisted for 10.8 and 10.9, and is now failing on 10.11 blocking integration. Change-Id: I71b8119ab32ec64096bfc53d5e521714ad4ae11b Reviewed-by: Lars Knoll --- tests/auto/other/macnativeevents/BLACKLIST | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/auto/other/macnativeevents/BLACKLIST b/tests/auto/other/macnativeevents/BLACKLIST index 4129868022..3e68ba0cf0 100644 --- a/tests/auto/other/macnativeevents/BLACKLIST +++ b/tests/auto/other/macnativeevents/BLACKLIST @@ -2,8 +2,7 @@ [testDragWindow] osx [testMouseEnter] -osx-10.9 -osx-10.8 +osx [testChildDialogInFrontOfModalParent] osx [testChildWindowInFrontOfStaysOnTopParentWindow] From de48fd192b7973c4849ec79bce4cd491b5e8550f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 10 Oct 2016 21:02:16 +0200 Subject: [PATCH 018/196] QToolBarAreaLayoutInfo: add missing break statements in switch in distance() A fall-through here is logically non-sensical, because of symmetry (or lack thereof). Thus, a break must have been intended. Add it. While we're at it, also replace the default case label with the non-functional enum value QInternal::DockCount, so that -Wswitch can warn us if ever there should be a new DockPosition. Found independently by both GCC 7 and Coverity. Coverity-Id: 11145 Coverity-Id: 11146 Coverity-Id: 11147 Change-Id: I6bb31c1517e40f0cb06ceaee5aeb6fa78b84a523 Reviewed-by: Edward Welbourne --- src/widgets/widgets/qtoolbararealayout.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/widgets/widgets/qtoolbararealayout.cpp b/src/widgets/widgets/qtoolbararealayout.cpp index 16b1115dd6..f42c1f0ed9 100644 --- a/src/widgets/widgets/qtoolbararealayout.cpp +++ b/src/widgets/widgets/qtoolbararealayout.cpp @@ -598,16 +598,21 @@ int QToolBarAreaLayoutInfo::distance(const QPoint &pos) const case QInternal::LeftDock: if (pos.y() < rect.bottom()) return pos.x() - rect.right(); + break; case QInternal::RightDock: if (pos.y() < rect.bottom()) return rect.left() - pos.x(); + break; case QInternal::TopDock: if (pos.x() < rect.right()) return pos.y() - rect.bottom(); + break; case QInternal::BottomDock: if (pos.x() < rect.right()) return rect.top() - pos.y(); - default: + break; + + case QInternal::DockCount: break; } return -1; From f4fff02cbb1f9399f407c15a27741c6cd1a17133 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 10 Oct 2016 16:09:32 +0200 Subject: [PATCH 019/196] QXcbShmImage: don't use shmget()'s return unless it succeeds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When shmget() failed, we didn't set m_shm_info.shmid (not even to the -1 failure id) but did pass it (i.e. uninitialized noise) to shmat(), among other related functions. Guard against this; handle failure gracefully. Task-number: QTBUG-56419 Change-Id: Ie823c36c2ede03af6cb5d94ce7b4b5cd543c1008 Reviewed-by: Timur Pocheptsov Reviewed-by: Błażej Szczygieł Reviewed-by: Shawn Rutledge Reviewed-by: Joni Poikelin Reviewed-by: Laszlo Agocs --- src/plugins/platforms/xcb/qxcbbackingstore.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp index 3b04c59e28..0b76830d8e 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp +++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp @@ -150,12 +150,13 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI return; int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0600); - if (id == -1) + if (id == -1) { qWarning("QXcbShmImage: shmget() failed (%d: %s) for size %d (%dx%d)", errno, strerror(errno), segmentSize, size.width(), size.height()); - else - m_shm_info.shmid = id; - m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat (m_shm_info.shmid, 0, 0); + } else { + m_shm_info.shmaddr = m_xcb_image->data = (quint8 *)shmat(id, 0, 0); + } + m_shm_info.shmid = id; m_shm_info.shmseg = xcb_generate_id(xcb_connection()); const xcb_query_extension_reply_t *shm_reply = xcb_get_extension_data(xcb_connection(), &xcb_shm_id); @@ -166,9 +167,10 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI if (!shm_present || error || id == -1) { free(error); - shmdt(m_shm_info.shmaddr); - shmctl(m_shm_info.shmid, IPC_RMID, 0); - + if (id != -1) { + shmdt(m_shm_info.shmaddr); + shmctl(m_shm_info.shmid, IPC_RMID, 0); + } m_shm_info.shmaddr = 0; m_xcb_image->data = (uint8_t *)malloc(segmentSize); From f12006e64405de72ac09f364ef25ee9701c9b755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Thu, 6 Oct 2016 17:49:52 +0200 Subject: [PATCH 020/196] Don't resize windows that aren't attached to a platform window QWindows that aren't created, and therefore don't have a platform window attached, should not be treated as "normal" windows. The expectation, in our code, is that these windows won't get their geometry updated by the platform plugin, and that the geometry is only changed by the owner. In QQuickWidget's case this was causing the scene to be rendered incorrectly. Task-number: QTBUG-50973 Change-Id: Iea62dfb7fa90cbe450a662c5792c7c4f49c991fd Reviewed-by: Laszlo Agocs --- src/gui/kernel/qplatformscreen.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/kernel/qplatformscreen.cpp b/src/gui/kernel/qplatformscreen.cpp index 8e9767d69e..3ec7a4cf3f 100644 --- a/src/gui/kernel/qplatformscreen.cpp +++ b/src/gui/kernel/qplatformscreen.cpp @@ -335,6 +335,10 @@ void QPlatformScreen::resizeMaximizedWindows() for (int i = 0; i < windows.size(); ++i) { QWindow *w = windows.at(i); + // Skip non-platform windows, e.g., offscreen windows. + if (!w->handle()) + continue; + if (platformScreenForWindow(w) != this) continue; From dde86ebb9b020811a731a180c4f4d98f3b60728b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Thu, 6 Oct 2016 18:34:10 +0200 Subject: [PATCH 021/196] Android: Don't update offscreen windows Offscreen windows should not be handle by the platform plugin. Task-number: QTBUG-50973 Change-Id: I719a24b9bbcaad460d78fdc4095e86d615357cd2 Reviewed-by: Laszlo Agocs --- src/plugins/platforms/android/androidjnimain.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index fe2401f561..69c590940f 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -621,7 +621,12 @@ static void updateWindow(JNIEnv */*env*/, jobject /*thiz*/) if (QGuiApplication::instance() != nullptr) { foreach (QWindow *w, QGuiApplication::topLevelWindows()) { - QRect availableGeometry = w->screen()->availableGeometry(); + + // Skip non-platform windows, e.g., offscreen windows. + if (!w->handle()) + continue; + + QRect availableGeometry = w->screen()->availableGeometry(); if (w->geometry().width() > 0 && w->geometry().height() > 0 && availableGeometry.width() > 0 && availableGeometry.height() > 0) QWindowSystemInterface::handleExposeEvent(w, QRegion(QRect(QPoint(), w->geometry().size()))); } From cc62c3002231d74cbee8cb0105adf6372d37e7d9 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 12 Oct 2016 14:13:36 +0300 Subject: [PATCH 022/196] Android: Ministro updates - bump minimum required Qt version - use market://details instead which opens Ministro's page directly Change-Id: I3d879503625fe29e7b23149402217337fee6a863 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../src/org/qtproject/qt5/android/bindings/QtActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java index 9fc903af8e..faa5765709 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java @@ -101,7 +101,7 @@ public class QtActivity extends Activity private final static int MINISTRO_INSTALL_REQUEST_CODE = 0xf3ee; // request code used to know when Ministro instalation is finished private static final int MINISTRO_API_LEVEL = 5; // Ministro api level (check IMinistro.aidl file) private static final int NECESSITAS_API_LEVEL = 2; // Necessitas api level used by platform plugin - private static final int QT_VERSION = 0x050100; // This app requires at least Qt version 5.1.0 + private static final int QT_VERSION = 0x050600; // This app requires at least Qt version 5.6.0 private static final String ERROR_CODE_KEY = "error.code"; private static final String ERROR_MESSAGE_KEY = "error.message"; @@ -333,7 +333,7 @@ public class QtActivity extends Activity @Override public void onClick(DialogInterface dialogInterface, int i) { try { - Uri uri = Uri.parse("market://search?q=pname:org.kde.necessitas.ministro"); + Uri uri = Uri.parse("market://details?id=org.kde.necessitas.ministro"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivityForResult(intent, MINISTRO_INSTALL_REQUEST_CODE); } catch (Exception e) { From e732e432ab3b6741917cafa93117b8a9a04d6387 Mon Sep 17 00:00:00 2001 From: Alexander Volkov Date: Mon, 10 Oct 2016 01:13:23 +0300 Subject: [PATCH 023/196] Remove unused static member QIconLoaderEngineEntry::count It was introduced in Qt 4 by the commit 13a31fe82845f8b1f4d86919080d3b2a87c4d061 and was unused even there. Change-Id: I5f3861918ea1f443f7e13439fafa067f2b28a91a Reviewed-by: Marc Mutz --- src/gui/image/qiconloader_p.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h index ccf0a9d438..4d31a5d898 100644 --- a/src/gui/image/qiconloader_p.h +++ b/src/gui/image/qiconloader_p.h @@ -89,7 +89,6 @@ public: QIcon::State state) = 0; QString filename; QIconDirInfo dir; - static int count; }; struct ScalableEntry : public QIconLoaderEngineEntry From f3ce959de6c682bdb7e71f7b82742f28a5be1e9c Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 5 Oct 2016 15:45:55 +0200 Subject: [PATCH 024/196] Fix illegal memory access on simple image rotates Clip the transformed and rounded sourceClip to the source rectangle, so we don't try to rotate pixels outside the source. Task-number: QTBUG-56252 Change-Id: Ib9cb80f9856724118867aea37ead0b02a6c71495 Reviewed-by: Shawn Rutledge Reviewed-by: Gunnar Sletta --- src/gui/painting/qpaintengine_raster.cpp | 2 ++ .../gui/painting/qpainter/tst_qpainter.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index f87b052df2..83370be33f 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2273,6 +2273,8 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe = QRectF(sr.x() + clippedTargetRect.x() - r.x(), sr.y() + clippedTargetRect.y() - r.y(), clippedTargetRect.width(), clippedTargetRect.height()).toRect(); + clippedSourceRect = clippedSourceRect.intersected(img.rect()); + uint dbpl = d->rasterBuffer->bytesPerLine(); uint sbpl = img.bytesPerLine(); diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 8c72532122..2c0012497d 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -307,6 +307,8 @@ private slots: void QTBUG50153_drawImage_assert(); + void QTBUG56252(); + private: void fillData(); void setPenColor(QPainter& p); @@ -5078,6 +5080,23 @@ void tst_QPainter::QTBUG50153_drawImage_assert() } } +void tst_QPainter::QTBUG56252() +{ + QImage sourceImage(1770, 1477, QImage::Format_RGB32); + QImage rotatedImage(1478, 1771, QImage::Format_RGB32); + QTransform transformCenter; + transformCenter.translate(739.0, 885.5); + transformCenter.rotate(270.0); + transformCenter.translate(-885.0, -738.5); + QPainter painter; + painter.begin(&rotatedImage); + painter.setTransform(transformCenter); + painter.drawImage(QPoint(0, 0),sourceImage); + painter.end(); + + // If no crash or illegal memory read, all is fine +} + QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" From ef416e0faaa83cd122038db397dd24d949c9cafe Mon Sep 17 00:00:00 2001 From: Alexander Volkov Date: Wed, 12 Oct 2016 17:18:18 +0300 Subject: [PATCH 025/196] QIconLoaderEngine: add missing Q_DECL_OVERRIDEs Change-Id: I7671b05f2e3c218870dca04f3ed52c231dbe4a9d Reviewed-by: Marc Mutz --- src/gui/image/qiconloader_p.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h index 4d31a5d898..57ab60b7a5 100644 --- a/src/gui/image/qiconloader_p.h +++ b/src/gui/image/qiconloader_p.h @@ -117,18 +117,18 @@ public: QIconLoaderEngine(const QString& iconName = QString()); ~QIconLoaderEngine(); - void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state); - QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); - QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); - QIconEngine *clone() const; - bool read(QDataStream &in); - bool write(QDataStream &out) const; + void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; + QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; + QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; + QIconEngine *clone() const Q_DECL_OVERRIDE; + bool read(QDataStream &in) Q_DECL_OVERRIDE; + bool write(QDataStream &out) const Q_DECL_OVERRIDE; private: - QString key() const; + QString key() const Q_DECL_OVERRIDE; bool hasIcon() const; void ensureLoaded(); - void virtual_hook(int id, void *data); + void virtual_hook(int id, void *data) Q_DECL_OVERRIDE; QIconLoaderEngineEntry *entryForSize(const QSize &size); QIconLoaderEngine(const QIconLoaderEngine &other); QThemeIconInfo m_info; From b9a32351c8582ede87b6c63967f5c832c0622645 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 8 Sep 2016 13:54:44 -0700 Subject: [PATCH 026/196] findclasslist.pl: namespaces can be exported too You can place the export macros in the namespace declarations on ELF systems and that will apply to all declarations inside that scope. If a namespace is exported like that, then we should mark it for versioning too. Note that the exporting doesn't happen for declarations in other scopes of the same namespace, even though the findclasslist.pl script will mark everything in that namespace. This should not be a problem. Task-number: QTBUG-55897 Change-Id: I371f5b01e24a4d56b304fffd147274778b980ad2 Reviewed-by: Dmitry Shachnev Reviewed-by: Oswald Buddenhagen Reviewed-by: Frederik Gladhorn --- mkspecs/features/data/unix/findclasslist.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/data/unix/findclasslist.pl b/mkspecs/features/data/unix/findclasslist.pl index fb4357d0d4..b74b8b6a58 100644 --- a/mkspecs/features/data/unix/findclasslist.pl +++ b/mkspecs/features/data/unix/findclasslist.pl @@ -55,7 +55,7 @@ while () { my $comment = " /* $1 */"; while (my $line = ) { # Match a struct or class declaration, but not a forward declaration - $line =~ /^(?:struct|class) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next; + $line =~ /^(?:struct|class|namespace) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next; print $comment if $comment; printf " *%d%s*;\n", length $1, $1; $comment = 0; From 8796c69480a6e5e331d19edf24d4dabb180bc4d2 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 10 Oct 2016 03:55:35 +0200 Subject: [PATCH 027/196] QNetworkSession: make sure that "interface" isn't #defined Depending on #include order isn't a good idea. Change-Id: Ief935e1fcc5d40ecb510fffd147c08dffe6cba2d Reviewed-by: Edward Welbourne --- src/network/bearer/qnetworksession.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp index 6f83fd25ca..1b939bab01 100644 --- a/src/network/bearer/qnetworksession.cpp +++ b/src/network/bearer/qnetworksession.cpp @@ -42,6 +42,11 @@ #include "qnetworkconfigmanager_p.h" +// for QNetworkSession::interface +#ifdef interface +# undef interface +#endif + #ifndef QT_NO_BEARERMANAGEMENT QT_BEGIN_NAMESPACE From d023b300b26a9db3cf4dbbe31c1cc5726fe277d7 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 1 Sep 2016 13:29:46 +0200 Subject: [PATCH 028/196] Document that am/pm in QDateTime::toString are locale-specific Change-Id: I28382b25ac94cbfbad4acff1308ddd8baf5ca693 Task-number: QTBUG-55632 Reviewed-by: Edward Welbourne --- src/corelib/tools/qdatetime.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 6b09b4107c..3e29b55666 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -1623,9 +1623,11 @@ QString QTime::toString(Qt::DateFormat format) const \row \li z \li the milliseconds without leading zeroes (0 to 999) \row \li zzz \li the milliseconds with leading zeroes (000 to 999) \row \li AP or A - \li use AM/PM display. \e A/AP will be replaced by either "AM" or "PM". + \li use AM/PM display. \e A/AP will be replaced by either + QLocale::amText() or QLocale::pmText(). \row \li ap or a - \li use am/pm display. \e a/ap will be replaced by either "am" or "pm". + \li use am/pm display. \e a/ap will be replaced by a lower-case version of + QLocale::amText() or QLocale::pmText(). \row \li t \li the timezone (for example "CEST") \endtable @@ -1634,7 +1636,8 @@ QString QTime::toString(Qt::DateFormat format) const expression. Two consecutive single quotes ("''") are replaced by a singlequote in the output. Formats without separators (e.g. "HHmm") are currently not supported. - Example format strings (assuming that the QTime is 14:13:09.042) + Example format strings (assuming that the QTime is 14:13:09.042 and the system + locale is \c{en_US}) \table \header \li Format \li Result From 51767affb380eea5961637f07a2e881b93b6fea5 Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Thu, 11 Feb 2016 16:28:57 +0100 Subject: [PATCH 029/196] Show warning when setting new default QSurfaceFormat If a global shared context is created, and afterwards a new default QSurfaceFormat with a different version or profile is set, it can lead to issues with context sharing. The documentation for QSurfaceFormat::setDefaultFormat mentions this. It would be helpful to actually show a warning in case it happens. Change-Id: I71f7ce95496e1ecbfc6a0c7d7bed146ef8dc351e Reviewed-by: Laszlo Agocs --- src/gui/kernel/qsurfaceformat.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/kernel/qsurfaceformat.cpp b/src/gui/kernel/qsurfaceformat.cpp index d078336d73..18fde5716b 100644 --- a/src/gui/kernel/qsurfaceformat.cpp +++ b/src/gui/kernel/qsurfaceformat.cpp @@ -35,6 +35,7 @@ #include #include +#include #ifdef major #undef major @@ -758,6 +759,11 @@ Q_GLOBAL_STATIC(QSurfaceFormat, qt_default_surface_format) */ void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format) { + QOpenGLContext *globalContext = QOpenGLContext::globalShareContext(); + if (globalContext && globalContext->isValid()) { + qWarning("Warning: Setting a new default format with a different version or profile after " + "the global shared context is created may cause issues with context sharing."); + } *qt_default_surface_format() = format; } From cd1d11414021288729cd85a32a7a1160756aeeab Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Fri, 30 Sep 2016 18:36:15 +0200 Subject: [PATCH 030/196] Unset qgl_current_fbo when the default FBO is bound Previously when a new QOpenGLFramebufferObject was bound, the QOpenGLContextPrivate::qgl_current_fbo member was also updated to point to this new object. But if a user called QOpenGLFramebufferObject::bindDefault(), qgl_current_fbo was not unset, meaning that if the FBO object would be deleted at some point, qgl_current_fbo would be a dangling pointer. This patch makes sure to clear the value of qgl_current_fbo when bindDefault() is called. It is cleared, and not set to point to another object because the default platform OpenGL FBO is not backed by a QOpenGLFramebufferObject. Task-number: QTBUG-56296 Change-Id: I68b53d8b446660accdf5841df3d168ee2f133a90 Reviewed-by: Simon Hausmann Reviewed-by: Laszlo Agocs --- src/gui/opengl/qopenglframebufferobject.cpp | 1 + tests/auto/gui/qopengl/tst_qopengl.cpp | 28 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index 56e04c09d8..b1b580f85b 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -1490,6 +1490,7 @@ bool QOpenGLFramebufferObject::bindDefault() if (ctx) { ctx->functions()->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); QOpenGLContextPrivate::get(ctx)->qgl_current_fbo_invalid = true; + QOpenGLContextPrivate::get(ctx)->qgl_current_fbo = Q_NULLPTR; } #ifdef QT_DEBUG else diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp index e2ad502a52..00b5da92a8 100644 --- a/tests/auto/gui/qopengl/tst_qopengl.cpp +++ b/tests/auto/gui/qopengl/tst_qopengl.cpp @@ -114,6 +114,7 @@ private slots: void vaoCreate(); void bufferCreate(); void bufferMapRange(); + void defaultQGLCurrentBuffer(); }; struct SharedResourceTracker @@ -1525,6 +1526,33 @@ void tst_QOpenGL::bufferMapRange() ctx->doneCurrent(); } +void tst_QOpenGL::defaultQGLCurrentBuffer() +{ + QScopedPointer surface(createSurface(QSurface::Window)); + QScopedPointer ctx(new QOpenGLContext); + ctx->create(); + ctx->makeCurrent(surface.data()); + + // Bind default FBO on the current context, and record what's the current QGL FBO. It should + // be Q_NULLPTR because the default platform OpenGL FBO is not backed by a + // QOpenGLFramebufferObject. + QOpenGLFramebufferObject::bindDefault(); + QOpenGLFramebufferObject *defaultQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo; + + // Create new FBO, bind it, and see that the QGL FBO points to the newly created FBO. + QScopedPointer obj(new QOpenGLFramebufferObject(128, 128)); + obj->bind(); + QOpenGLFramebufferObject *customQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo; + QVERIFY(defaultQFBO != customQFBO); + + // Bind the default FBO, and check that the QGL FBO points to the original FBO object. + QOpenGLFramebufferObject::bindDefault(); + QOpenGLFramebufferObject *finalQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo; + QCOMPARE(defaultQFBO, finalQFBO); + + ctx->doneCurrent(); +} + void tst_QOpenGL::nullTextureInitializtion() { QScopedPointer surface(createSurface(QSurface::Window)); From 23c7816f44cfe02e1e056ab4bb40e618992a0e2b Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Wed, 5 Oct 2016 14:27:16 +0200 Subject: [PATCH 031/196] Doc: add notes about validator and completer in QComboBox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When setting the editable property to false, we delete the internal QLineEdit used by QComboBox. Add comments that this results in the loss of validator and completer. Task-number: QTBUG-56035 Change-Id: Ife04ac2b9bb3f32fae5328f1ec73b1d5d769d52c Reviewed-by: Topi Reiniö Reviewed-by: Nico Vertriest --- src/widgets/widgets/qcombobox.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 450c27d573..0ef76b95f0 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -1678,6 +1678,9 @@ void QComboBox::setIconSize(const QSize &size) By default, this property is \c false. The effect of editing depends on the insert policy. + \note When disabling the \a editable state, the validator and + completer are removed. + \sa InsertPolicy */ bool QComboBox::isEditable() const @@ -1829,6 +1832,8 @@ QLineEdit *QComboBox::lineEdit() const \fn void QComboBox::setValidator(const QValidator *validator) Sets the \a validator to use instead of the current validator. + + \note The validator is removed when the editable property becomes \c false. */ void QComboBox::setValidator(const QValidator *v) @@ -1862,6 +1867,8 @@ const QValidator *QComboBox::validator() const By default, for an editable combo box, a QCompleter that performs case insensitive inline completion is automatically created. + + \note The completer is removed when the \a editable property becomes \c false. */ void QComboBox::setCompleter(QCompleter *c) { From 7740f5e98b2f3ab5d9c1f512d1a89e9e1b64434d Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 13 Oct 2016 13:04:33 +0200 Subject: [PATCH 032/196] QMimeXMLProvider: add missing out-of-line destructor Fixes build with the latest GCC 7. Change-Id: I4900a256ed1c6cb177d7f94d54e5b07c06ddad08 Task-number: QTBUG-56514 Reviewed-by: Marc Mutz --- src/corelib/mimetypes/qmimeprovider.cpp | 4 ++++ src/corelib/mimetypes/qmimeprovider_p.h | 1 + 2 files changed, 5 insertions(+) diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index fbd14e2d5d..aa8d8c9b08 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -706,6 +706,10 @@ QMimeXMLProvider::QMimeXMLProvider(QMimeDatabasePrivate *db) initResources(); } +QMimeXMLProvider::~QMimeXMLProvider() +{ +} + bool QMimeXMLProvider::isValid() { return true; diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h index c0517d69a4..8eba71eddd 100644 --- a/src/corelib/mimetypes/qmimeprovider_p.h +++ b/src/corelib/mimetypes/qmimeprovider_p.h @@ -132,6 +132,7 @@ class QMimeXMLProvider : public QMimeProviderBase { public: QMimeXMLProvider(QMimeDatabasePrivate *db); + ~QMimeXMLProvider(); virtual bool isValid() Q_DECL_OVERRIDE; virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE; From 815341dbec1fd4f04fe76fc438cc9b3308ffafe9 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 11 Oct 2016 16:42:11 +0200 Subject: [PATCH 033/196] eglfs: Fix deformed mouse cursor image In 5.8 cr got changed to QRect from QRectF. This is incorrect without adjusting the calculations based on it since QRect and QRectF's right() and bottom() differs by 1. Switch back to QRectF. Task-number: QTBUG-56478 Change-Id: I5bde4ee59ca9bbf62f65493c66f42707032bfc80 Reviewed-by: Andy Nichols --- src/plugins/platforms/eglfs/api/qeglfscursor.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp index 1b3446c4ac..2b54251a06 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscursor.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfscursor.cpp @@ -341,14 +341,16 @@ void QEglFSCursor::paintOnScreen() if (!m_visible) return; - QRect cr = cursorRect(); // hotspot included + // cr must be a QRectF, otherwise cr.right() and bottom() would be off by + // one in the calculations below. + QRectF cr = cursorRect(); // hotspot included // Support virtual desktop too. Backends with multi-screen support (e.g. all // variants of KMS/DRM) will enable this by default. In this case all // screens are siblings of each other. When not enabled, the sibling list // only contains m_screen itself. for (QPlatformScreen *screen : m_screen->virtualSiblings()) { - if (screen->geometry().contains(cr.topLeft() + m_cursor.hotSpot) + if (screen->geometry().contains(cr.topLeft().toPoint() + m_cursor.hotSpot) && QOpenGLContext::currentContext()->screen() == screen->screen()) { cr.translate(-screen->geometry().topLeft()); From d8c72f41548a01bf39f82e77da01a2be57a06d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 11 Oct 2016 16:43:42 +0200 Subject: [PATCH 034/196] iOS: Take advantage of new synchronous API for QPA event delivery By using the SynchronousDelivery specialization instead of flushing all window system events, we remove the risk of flushing an event that was added without our knowledge. For example, QGuiApplicationPrivate::processMouseEvent() used to prepend a mouse move event to the QPA queue, which is why we had a check for QWidgetWindow when flushing geometry changes. processMouseEvent no longer sends the move event via the QPA queue, so that's no longer an issue, but if it were to be reintroduced, we wouldn't need to check for QWidgetWindow, as we're not flushing all events anymore. Change-Id: Ib346ea9501cd88ddda6c2137981d3eb0922192a0 Reviewed-by: Richard Moe Gustavsen Reviewed-by: Simon Hausmann Reviewed-by: Laszlo Agocs --- src/gui/kernel/qwindowsysteminterface.cpp | 47 +++++++++++------------ src/gui/kernel/qwindowsysteminterface.h | 12 ++++-- src/plugins/platforms/ios/quiview.mm | 35 ++++++----------- 3 files changed, 43 insertions(+), 51 deletions(-) diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index b799f75090..5dd525f315 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -165,11 +165,11 @@ void QWindowSystemInterface::handleEnterLeaveEvent(QWindow *enter, QWindow *leav handleEnterEvent(enter, local, global); } -void QWindowSystemInterface::handleWindowActivated(QWindow *tlw, Qt::FocusReason r) +QT_DEFINE_QPA_EVENT_HANDLER(void, handleWindowActivated, QWindow *tlw, Qt::FocusReason r) { QWindowSystemInterfacePrivate::ActivatedWindowEvent *e = new QWindowSystemInterfacePrivate::ActivatedWindowEvent(tlw, r); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } void QWindowSystemInterface::handleWindowStateChanged(QWindow *tlw, Qt::WindowState newState) @@ -197,10 +197,25 @@ void QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState /*! If \a oldRect is null, Qt will use the previously reported geometry instead. */ -void QWindowSystemInterface::handleGeometryChange(QWindow *tlw, const QRect &newRect, const QRect &oldRect) +QT_DEFINE_QPA_EVENT_HANDLER(void, handleGeometryChange, QWindow *tlw, const QRect &newRect, const QRect &oldRect) { QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw, QHighDpi::fromNativePixels(newRect, tlw), QHighDpi::fromNativePixels(oldRect, tlw)); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); +} + +QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const QRegion ®ion) + : WindowSystemEvent(Expose) + , window(window) + , isExposed(window && window->handle() ? window->handle()->isExposed() : false) + , region(region) +{ +} + +QT_DEFINE_QPA_EVENT_HANDLER(void, handleExposeEvent, QWindow *tlw, const QRegion ®ion) +{ + QWindowSystemInterfacePrivate::ExposeEvent *e = + new QWindowSystemInterfacePrivate::ExposeEvent(tlw, QHighDpi::fromNativeLocalExposedRegion(region, tlw)); + QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } void QWindowSystemInterface::handleCloseEvent(QWindow *tlw, bool *accepted) @@ -405,15 +420,6 @@ void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, con QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } - -QWindowSystemInterfacePrivate::ExposeEvent::ExposeEvent(QWindow *window, const QRegion ®ion) - : WindowSystemEvent(Expose) - , window(window) - , isExposed(window && window->handle() ? window->handle()->isExposed() : false) - , region(region) -{ -} - int QWindowSystemInterfacePrivate::windowSystemEventsQueued() { return windowSystemEventQueue.count(); @@ -596,20 +602,20 @@ QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchEvent, QWindow *tlw, ulong timestam QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } -void QWindowSystemInterface::handleTouchCancelEvent(QWindow *w, QTouchDevice *device, +QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchCancelEvent, QWindow *w, QTouchDevice *device, Qt::KeyboardModifiers mods) { unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); - handleTouchCancelEvent(w, time, device, mods); + handleTouchCancelEvent(w, time, device, mods); } -void QWindowSystemInterface::handleTouchCancelEvent(QWindow *w, ulong timestamp, QTouchDevice *device, +QT_DEFINE_QPA_EVENT_HANDLER(void, handleTouchCancelEvent, QWindow *w, ulong timestamp, QTouchDevice *device, Qt::KeyboardModifiers mods) { QWindowSystemInterfacePrivate::TouchEvent *e = new QWindowSystemInterfacePrivate::TouchEvent(w, timestamp, QEvent::TouchCancel, device, QList(), mods); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } void QWindowSystemInterface::handleScreenOrientationChange(QScreen *screen, Qt::ScreenOrientation orientation) @@ -646,13 +652,6 @@ void QWindowSystemInterface::handleThemeChange(QWindow *tlw) QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } -void QWindowSystemInterface::handleExposeEvent(QWindow *tlw, const QRegion ®ion) -{ - QWindowSystemInterfacePrivate::ExposeEvent *e = - new QWindowSystemInterfacePrivate::ExposeEvent(tlw, QHighDpi::fromNativeLocalExposedRegion(region, tlw)); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); -} - void QWindowSystemInterface::deferredFlushWindowSystemEvents(QEventLoop::ProcessEventsFlags flags) { Q_ASSERT(QThread::currentThread() == QGuiApplication::instance()->thread()); diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index 6fade3cc4c..3be3c3188c 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -150,11 +150,19 @@ public: template static void handleTouchEvent(QWindow *w, ulong timestamp, QTouchDevice *device, const QList &points, Qt::KeyboardModifiers mods = Qt::NoModifier); + template static void handleTouchCancelEvent(QWindow *w, QTouchDevice *device, Qt::KeyboardModifiers mods = Qt::NoModifier); + template static void handleTouchCancelEvent(QWindow *w, ulong timestamp, QTouchDevice *device, Qt::KeyboardModifiers mods = Qt::NoModifier); // rect is relative to parent + template static void handleGeometryChange(QWindow *w, const QRect &newRect, const QRect &oldRect = QRect()); + + // region is in local coordinates, do not confuse with geometry which is parent-relative + template + static void handleExposeEvent(QWindow *tlw, const QRegion ®ion); + static void handleCloseEvent(QWindow *w, bool *accepted = Q_NULLPTR); template @@ -162,6 +170,7 @@ public: template static void handleLeaveEvent(QWindow *w); static void handleEnterLeaveEvent(QWindow *enter, QWindow *leave, const QPointF &local = QPointF(), const QPointF& global = QPointF()); + template static void handleWindowActivated(QWindow *w, Qt::FocusReason r = Qt::OtherFocusReason); static void handleWindowStateChanged(QWindow *w, Qt::WindowState newState); @@ -169,9 +178,6 @@ public: static void handleApplicationStateChanged(Qt::ApplicationState newState, bool forcePropagate = false); - // region is in local coordinates, do not confuse with geometry which is parent-relative - static void handleExposeEvent(QWindow *tlw, const QRegion ®ion); - #ifndef QT_NO_DRAGANDDROP // Drag and drop. These events are sent immediately. static QPlatformDragQtResponse handleDrag(QWindow *w, const QMimeData *dropData, const QPoint &p, Qt::DropActions supportedActions); diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index 5c493617b1..2a1444e9e5 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -164,8 +164,7 @@ requestedGeometry : qt_window_private(m_qioswindow->window())->geometry; QWindow *window = m_qioswindow->window(); - QWindowSystemInterface::handleGeometryChange(window, actualGeometry, previousGeometry); - QWindowSystemInterface::flushWindowSystemEvents(window->inherits("QWidgetWindow") ? QEventLoop::ExcludeUserInputEvents : QEventLoop::AllEvents); + QWindowSystemInterface::handleGeometryChange(window, actualGeometry, previousGeometry); if (actualGeometry.size() != previousGeometry.size()) { // Trigger expose event on resize @@ -197,8 +196,7 @@ region = QRect(QPoint(), bounds); } - QWindowSystemInterface::handleExposeEvent(m_qioswindow->window(), region); - QWindowSystemInterface::flushWindowSystemEvents(); + QWindowSystemInterface::handleExposeEvent(m_qioswindow->window(), region); } // ------------------------------------------------------------------------- @@ -223,13 +221,10 @@ qImDebug() << m_qioswindow->window() << "became first responder"; - if (qGuiApp->focusWindow() != m_qioswindow->window()) { - QWindowSystemInterface::handleWindowActivated(m_qioswindow->window()); - QWindowSystemInterface::flushWindowSystemEvents(); - } else { - qImDebug() << m_qioswindow->window() - << "already active, not sending window activation"; - } + if (qGuiApp->focusWindow() != m_qioswindow->window()) + QWindowSystemInterface::handleWindowActivated(m_qioswindow->window()); + else + qImDebug() << m_qioswindow->window() << "already active, not sending window activation"; return YES; } @@ -264,10 +259,8 @@ qImDebug() << m_qioswindow->window() << "resigned first responder"; UIResponder *newResponder = FirstResponderCandidate::currentCandidate(); - if ([self responderShouldTriggerWindowDeactivation:newResponder]) { - QWindowSystemInterface::handleWindowActivated(0); - QWindowSystemInterface::flushWindowSystemEvents(); - } + if ([self responderShouldTriggerWindowDeactivation:newResponder]) + QWindowSystemInterface::handleWindowActivated(0); return YES; } @@ -357,10 +350,8 @@ - (void)sendTouchEventWithTimestamp:(ulong)timeStamp { - // Send touch event synchronously QIOSIntegration *iosIntegration = QIOSIntegration::instance(); - QWindowSystemInterface::handleTouchEvent(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values()); - QWindowSystemInterface::flushWindowSystemEvents(); + QWindowSystemInterface::handleTouchEvent(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values()); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event @@ -438,10 +429,8 @@ NSTimeInterval timestamp = event ? event.timestamp : [[NSProcessInfo processInfo] systemUptime]; - // Send cancel touch event synchronously QIOSIntegration *iosIntegration = static_cast(QGuiApplicationPrivate::platformIntegration()); - QWindowSystemInterface::handleTouchCancelEvent(m_qioswindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice()); - QWindowSystemInterface::flushWindowSystemEvents(); + QWindowSystemInterface::handleTouchCancelEvent(m_qioswindow->window(), ulong(timestamp * 1000), iosIntegration->touchDevice()); } - (int)mapPressTypeToKey:(UIPress*)press @@ -464,14 +453,12 @@ // When handling the event (for example, as a back button), both press and // release events must be handled accordingly. - QScopedValueRollback syncRollback(QWindowSystemInterfacePrivate::synchronousWindowSystemEvents, true); - bool handled = false; for (UIPress* press in presses) { int key = [self mapPressTypeToKey:press]; if (key == Qt::Key_unknown) continue; - if (QWindowSystemInterface::handleKeyEvent(m_qioswindow->window(), type, key, Qt::NoModifier)) + if (QWindowSystemInterface::handleKeyEvent(m_qioswindow->window(), type, key, Qt::NoModifier)) handled = true; } From dcf7da7c93c0d974bfb72ffa677a1d26fb9be5e0 Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 10 Oct 2016 14:35:19 +0200 Subject: [PATCH 035/196] winrt: Do not lose initial data for TCP connections When a client connects and sends data immediately it was possible that initial data was lost as the state was set too late. If the callback was called before the state was set the socket engine just discarded the data. So the state has to be set before the callback is registered. The new implementation needs a list of pending read operations. It can happen that the "readyRead" callback is triggered directly while "put_Completed" is called. The callback reassigns readOp which causes a "function not implemented" exception when it jumps back to the "put_Completed" call in "initialize" Task-number: QTBUG-55889 Change-Id: I5f52e3377b6176f1f90f227ac0bf52b60ee2d95a Reviewed-by: Maurice Kalinowski --- .../socket/qnativesocketengine_winrt.cpp | 34 ++++++++++++++----- .../socket/qnativesocketengine_winrt_p.h | 2 +- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index bd9b443602..2ff028d2c5 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -317,26 +317,31 @@ bool QNativeSocketEngine::initialize(qintptr socketDescriptor, QAbstractSocket:: // Start processing incoming data if (d->socketType == QAbstractSocket::TcpSocket) { HRESULT hr; - QEventDispatcherWinRT::runOnXamlThread([d, &hr, socket, this]() { + QEventDispatcherWinRT::runOnXamlThread([&hr, socket, socketState, this]() { + Q_D(QNativeSocketEngine); ComPtr buffer; HRESULT hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer); RETURN_OK_IF_FAILED("initialize(): Could not create buffer"); ComPtr stream; hr = socket->get_InputStream(&stream); RETURN_OK_IF_FAILED("initialize(): Could not obtain input stream"); - hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, d->readOp.GetAddressOf()); + ComPtr readOp; + hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, readOp.GetAddressOf()); RETURN_OK_IF_FAILED_WITH_ARGS("initialize(): Failed to read from the socket buffer (%s).", socketDescription(this).constData()); - hr = d->readOp->put_Completed(Callback(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); + d->pendingReadOps.append(readOp); + d->socketState = socketState; + hr = readOp->put_Completed(Callback(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); RETURN_OK_IF_FAILED_WITH_ARGS("initialize(): Failed to set socket read callback (%s).", socketDescription(this).constData()); return S_OK; }); if (FAILED(hr)) return false; + } else { + d->socketState = socketState; } - d->socketState = socketState; return true; } @@ -567,9 +572,9 @@ void QNativeSocketEngine::close() } #endif // _MSC_VER >= 1900 - if (d->readOp) { + for (ComPtr readOp : d->pendingReadOps) { ComPtr info; - hr = d->readOp.As(&info); + hr = readOp.As(&info); Q_ASSERT_SUCCEEDED(hr); if (info) { hr = info->Cancel(); @@ -933,9 +938,11 @@ void QNativeSocketEngine::establishRead() hr = g->bufferFactory->Create(READ_BUFFER_SIZE, &buffer); RETURN_HR_IF_FAILED("establishRead(): Failed to create buffer"); - hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, &d->readOp); + ComPtr readOp; + hr = stream->ReadAsync(buffer.Get(), READ_BUFFER_SIZE, InputStreamOptions_Partial, readOp.GetAddressOf()); RETURN_HR_IF_FAILED("establishRead(): Failed to initiate socket read"); - hr = d->readOp->put_Completed(Callback(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); + d->pendingReadOps.append(readOp); + hr = readOp->put_Completed(Callback(d, &QNativeSocketEnginePrivate::handleReadyRead).Get()); RETURN_HR_IF_FAILED("establishRead(): Failed to register read callback"); return S_OK; }); @@ -1410,7 +1417,15 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async } Q_Q(QNativeSocketEngine); + for (int i = 0; i < pendingReadOps.count(); ++i) { + if (pendingReadOps.at(i).Get() == asyncInfo) { + pendingReadOps.takeAt(i); + break; + } + } + static QMutex mutex; + mutex.lock(); // A read in UnconnectedState will close the socket and return -1 and thus tell the caller, // that the connection was closed. The socket cannot be closed here, as the subsequent read // might fail then. @@ -1463,6 +1478,7 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async if (notifyOnRead) emit q->readReady(); + mutex.unlock(); hr = QEventDispatcherWinRT::runOnXamlThread([buffer, q, this]() { UINT32 readBufferLength; @@ -1476,12 +1492,14 @@ HRESULT QNativeSocketEnginePrivate::handleReadyRead(IAsyncBufferOperation *async hr = buffer->put_Length(0); RETURN_HR_IF_FAILED("handleReadyRead(): Could not set buffer length"); + ComPtr readOp; hr = stream->ReadAsync(buffer.Get(), readBufferLength, InputStreamOptions_Partial, &readOp); if (FAILED(hr)) { qErrnoWarning(hr, "handleReadyRead(): Could not read into socket stream buffer (%s).", socketDescription(q).constData()); return S_OK; } + pendingReadOps.append(readOp); hr = readOp->put_Completed(Callback(this, &QNativeSocketEnginePrivate::handleReadyRead).Get()); if (FAILED(hr)) { qErrnoWarning(hr, "handleReadyRead(): Failed to set socket read callback (%s).", diff --git a/src/network/socket/qnativesocketengine_winrt_p.h b/src/network/socket/qnativesocketengine_winrt_p.h index 605f3631b9..79530d57f1 100644 --- a/src/network/socket/qnativesocketengine_winrt_p.h +++ b/src/network/socket/qnativesocketengine_winrt_p.h @@ -214,7 +214,7 @@ private: { return reinterpret_cast(socketDescriptor); } Microsoft::WRL::ComPtr tcpListener; Microsoft::WRL::ComPtr connectOp; - Microsoft::WRL::ComPtr> readOp; + QVector>> pendingReadOps; QBuffer readBytes; QMutex readMutex; bool emitOnNewDatagram; From 6a35e77ef3f4eae80ca49937c680836eb4acdbe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 13 Oct 2016 15:54:23 +0200 Subject: [PATCH 036/196] Change confusing Q_DEAD_CODE_FROM_QT4_FOO define Commit c5db8fc74 changed all instances of Q_WS_FOO to have the prefix Q_DEAD_CODE_FROM_QT4 instead, to make it clearer when reading the code that the code in question was a left-over from Qt4, when we used Q_WS_ defines instead of Q_OS_ defines. This worked well for cases of #ifdef Q_DEAD_CODE_FROM_QT4, but less so for cases of #ifndef Q_DEAD_CODE_FROM_QT4, where the code was actually unconditionally included. To make this even clearer, the defines have been replaced by checks for 1 or 0, with a comment describing how the code used to look in Qt4. The use of constants in the check also makes it easier for editors to parse the condition and show visually that the code is defined out. Change-Id: I152070d87334df7259b417cd5e17d7b7950379b7 Reviewed-by: Lars Knoll --- doc/global/qt-cpp-defines.qdocconf | 1 - examples/widgets/graphicsview/boxes/scene.cpp | 2 +- .../widgets/tools/i18n/languagechooser.cpp | 4 +- src/printsupport/dialogs/qpagesetupdialog.cpp | 2 +- .../doc/snippets/code/doc_src_styles.cpp | 2 +- src/widgets/doc/snippets/macmainwindow.mm | 4 +- src/widgets/graphicsview/qgraphicsitem.cpp | 2 +- src/widgets/graphicsview/qgraphicsscene.cpp | 4 +- src/widgets/graphicsview/qgraphicsview.cpp | 4 +- src/widgets/graphicsview/qgraphicsview_p.h | 4 +- src/widgets/graphicsview/qgraphicswidget.cpp | 2 +- .../graphicsview/qgraphicswidget_p.cpp | 4 +- src/widgets/itemviews/qabstractitemview.cpp | 2 +- src/widgets/itemviews/qheaderview.cpp | 2 +- src/widgets/itemviews/qtreeview.cpp | 2 +- src/widgets/kernel/qapplication_p.h | 20 +-- src/widgets/kernel/qgesturemanager.cpp | 4 +- src/widgets/kernel/qt_widgets_pch.h | 2 +- src/widgets/kernel/qtooltip.cpp | 16 +- src/widgets/kernel/qwhatsthis.cpp | 6 +- src/widgets/kernel/qwidget.cpp | 158 +++++++++--------- src/widgets/kernel/qwidget.h | 4 +- src/widgets/kernel/qwidget_p.h | 18 +- src/widgets/kernel/qwidgetbackingstore.cpp | 4 +- src/widgets/styles/qmacstyle_mac_p.h | 2 +- src/widgets/styles/qpixmapstyle.cpp | 4 +- src/widgets/styles/qstylefactory.cpp | 4 +- src/widgets/styles/qstyleoption.cpp | 2 +- src/widgets/styles/qstylesheetstyle.cpp | 2 +- src/widgets/util/qflickgesture.cpp | 2 +- src/widgets/util/qscroller.cpp | 6 +- src/widgets/util/qscroller_mac.mm | 2 +- src/widgets/util/qscrollerproperties.cpp | 4 +- src/widgets/util/qsystemtrayicon.cpp | 2 +- src/widgets/widgets/qabstractscrollarea.cpp | 28 ++-- src/widgets/widgets/qabstractscrollarea_p.h | 4 +- src/widgets/widgets/qabstractslider.cpp | 2 +- src/widgets/widgets/qcalendarwidget.cpp | 2 +- src/widgets/widgets/qcombobox.cpp | 4 +- src/widgets/widgets/qdatetimeedit.cpp | 2 +- src/widgets/widgets/qdialogbuttonbox.cpp | 2 +- src/widgets/widgets/qdockarealayout.cpp | 10 +- src/widgets/widgets/qdockwidget.cpp | 8 +- src/widgets/widgets/qlineedit.cpp | 8 +- src/widgets/widgets/qmainwindow.cpp | 16 +- src/widgets/widgets/qmainwindowlayout.cpp | 24 +-- src/widgets/widgets/qmainwindowlayout_p.h | 4 +- src/widgets/widgets/qmdiarea.cpp | 8 +- src/widgets/widgets/qmdisubwindow.cpp | 6 +- src/widgets/widgets/qplaintextedit.cpp | 2 +- src/widgets/widgets/qpushbutton.cpp | 8 +- src/widgets/widgets/qpushbutton.h | 4 +- src/widgets/widgets/qpushbutton_p.h | 2 +- src/widgets/widgets/qrubberband.cpp | 8 +- src/widgets/widgets/qsizegrip.cpp | 18 +- src/widgets/widgets/qstatusbar.cpp | 4 +- src/widgets/widgets/qtabbar.cpp | 8 +- src/widgets/widgets/qtabbar_p.h | 4 +- src/widgets/widgets/qtextedit.cpp | 2 +- src/widgets/widgets/qtoolbar.cpp | 2 +- src/widgets/widgets/qwidgetlinecontrol.cpp | 2 +- src/widgets/widgets/qwidgetlinecontrol_p.h | 8 +- src/widgets/widgets/qwidgetresizehandler.cpp | 4 +- tests/auto/gui/image/qpixmap/tst_qpixmap.cpp | 6 +- tests/auto/gui/painting/qcolor/tst_qcolor.cpp | 4 +- .../gui/painting/qpainter/tst_qpainter.cpp | 2 +- .../auto/gui/painting/qregion/tst_qregion.cpp | 6 +- .../auto/opengl/qglthreads/tst_qglthreads.cpp | 2 +- tests/auto/other/lancelot/paintcommands.cpp | 4 +- .../tst_qgraphicsproxywidget.cpp | 2 +- .../tst_qabstractitemview.cpp | 2 +- .../widgets/widgets/qmdiarea/tst_qmdiarea.cpp | 2 +- .../qmdisubwindow/tst_qmdisubwindow.cpp | 2 +- .../qgraphicsview/benchapps/chipTest/view.cpp | 2 +- .../benchapps/moveItems/main.cpp | 6 +- .../benchapps/scrolltest/main.cpp | 2 +- tests/manual/lance/main.cpp | 2 +- .../textrendering/glyphshaping/main.cpp | 2 +- 78 files changed, 276 insertions(+), 277 deletions(-) diff --git a/doc/global/qt-cpp-defines.qdocconf b/doc/global/qt-cpp-defines.qdocconf index 13e523411a..fe8b7fb87e 100644 --- a/doc/global/qt-cpp-defines.qdocconf +++ b/doc/global/qt-cpp-defines.qdocconf @@ -7,7 +7,6 @@ defines += Q_QDOC \ QT_KEYPAD_NAVIGATION \ QT_NO_EGL \ QT3_SUPPORT \ - Q_DEAD_CODE_FROM_QT4_.* \ Q_OS_.* \ Q_BYTE_ORDER \ QT_DEPRECATED \ diff --git a/examples/widgets/graphicsview/boxes/scene.cpp b/examples/widgets/graphicsview/boxes/scene.cpp index a22ab5082f..9ac429c667 100644 --- a/examples/widgets/graphicsview/boxes/scene.cpp +++ b/examples/widgets/graphicsview/boxes/scene.cpp @@ -128,7 +128,7 @@ void ColorEdit::mousePressEvent(QMouseEvent *event) QColorDialog dialog(color, 0); dialog.setOption(QColorDialog::ShowAlphaChannel, true); // The ifdef block is a workaround for the beta, TODO: remove when bug 238525 is fixed -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC dialog.setOption(QColorDialog::DontUseNativeDialog, true); #endif dialog.move(280, 120); diff --git a/examples/widgets/tools/i18n/languagechooser.cpp b/examples/widgets/tools/i18n/languagechooser.cpp index 9bdeec6613..83aafe6b8a 100644 --- a/examples/widgets/tools/i18n/languagechooser.cpp +++ b/examples/widgets/tools/i18n/languagechooser.cpp @@ -53,7 +53,7 @@ #include "languagechooser.h" #include "mainwindow.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QT_BEGIN_NAMESPACE extern void qt_mac_set_menubar_merge(bool merge); QT_END_NAMESPACE @@ -92,7 +92,7 @@ LanguageChooser::LanguageChooser(const QString& defaultLang, QWidget *parent) mainLayout->addWidget(buttonBox); setLayout(mainLayout); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC qt_mac_set_menubar_merge(false); #endif diff --git a/src/printsupport/dialogs/qpagesetupdialog.cpp b/src/printsupport/dialogs/qpagesetupdialog.cpp index 81cbf87777..911c0ecdf7 100644 --- a/src/printsupport/dialogs/qpagesetupdialog.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog.cpp @@ -116,7 +116,7 @@ void QPageSetupDialogPrivate::setPrinter(QPrinter *newPrinter) printer = new QPrinter; ownsPrinter = true; } -#ifndef Q_DEAD_CODE_FROM_QT4_X11 +#if 1 // Used to be excluded in Qt4 for Q_WS_X11 if (printer->outputFormat() != QPrinter::NativeFormat) qWarning("QPageSetupDialog: Cannot be used on non-native printers"); #endif diff --git a/src/widgets/doc/snippets/code/doc_src_styles.cpp b/src/widgets/doc/snippets/code/doc_src_styles.cpp index b10c875111..a70ed6b11d 100644 --- a/src/widgets/doc/snippets/code/doc_src_styles.cpp +++ b/src/widgets/doc/snippets/code/doc_src_styles.cpp @@ -81,7 +81,7 @@ state |= QStyle::State_MouseOver; if (widget->window()->isActiveWindow()) state |= QStyle::State_Active; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QWidget *w); //qwidget_mac.cpp if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) state &= ~QStyle::State_Enabled; diff --git a/src/widgets/doc/snippets/macmainwindow.mm b/src/widgets/doc/snippets/macmainwindow.mm index f74f8453c7..d848e6442d 100644 --- a/src/widgets/doc/snippets/macmainwindow.mm +++ b/src/widgets/doc/snippets/macmainwindow.mm @@ -41,7 +41,7 @@ #include -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include @@ -289,4 +289,4 @@ QAbstractItemModel *MacMainWindow::createDocumentModel() return model; } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index 5492862287..6124796073 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -7492,7 +7492,7 @@ void QGraphicsItem::setInputMethodHints(Qt::InputMethodHints hints) */ void QGraphicsItem::updateMicroFocus() { -#if !defined(QT_NO_IM) && defined(Q_DEAD_CODE_FROM_QT4_X11) +#if !defined(QT_NO_IM) && 0 /* Used to be included in Qt4 for Q_WS_X11 */ if (QWidget *fw = QApplication::focusWidget()) { if (scene()) { for (int i = 0 ; i < scene()->views().count() ; ++i) { diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index 5b46eb35be..e6726285d9 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -4160,7 +4160,7 @@ void QGraphicsScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent) wheelEvent->scenePos(), wheelEvent->widget()); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // On Mac, ignore the event if the first item under the mouse is not the last opened // popup (or one of its descendant) if (!d->popupWidgets.isEmpty() && !wheelCandidates.isEmpty() && wheelCandidates.first() != d->popupWidgets.back() && !d->popupWidgets.back()->isAncestorOf(wheelCandidates.first())) { @@ -4399,7 +4399,7 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte // Render directly, using no cache. if (cacheMode == QGraphicsItem::NoCache -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 || !X11->use_xrender #endif ) { diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 3f7d2d1cd1..41f5eddd99 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -3490,7 +3490,7 @@ void QGraphicsView::paintEvent(QPaintEvent *event) // Draw background if ((d->cacheMode & CacheBackground) -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 && X11->use_xrender #endif ) { @@ -3689,7 +3689,7 @@ void QGraphicsView::scrollContentsBy(int dx, int dy) d->updateLastCenterPoint(); if ((d->cacheMode & CacheBackground) -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 && X11->use_xrender #endif ) { diff --git a/src/widgets/graphicsview/qgraphicsview_p.h b/src/widgets/graphicsview/qgraphicsview_p.h index 9065650216..10103a1809 100644 --- a/src/widgets/graphicsview/qgraphicsview_p.h +++ b/src/widgets/graphicsview/qgraphicsview_p.h @@ -184,7 +184,7 @@ public: inline void dispatchPendingUpdateRequests() { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // QWidget::update() works slightly different on the Mac without the raster engine; // it's not part of our backing store so it needs special threatment. if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) { @@ -195,7 +195,7 @@ public: extern void qt_mac_dispatchPendingUpdateRequests(QWidget *); qt_mac_dispatchPendingUpdateRequests(viewport->window()); } else -#endif // !Q_DEAD_CODE_FROM_QT4_MAC +#endif { if (qt_widget_private(viewport)->paintOnScreen()) QCoreApplication::sendPostedEvents(viewport, QEvent::UpdateRequest); diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp index e1ba3759e0..d153915ae6 100644 --- a/src/widgets/graphicsview/qgraphicswidget.cpp +++ b/src/widgets/graphicsview/qgraphicswidget.cpp @@ -708,7 +708,7 @@ void QGraphicsWidget::initStyleOption(QStyleOption *option) const option->state |= QStyle::State_Window; /* ### -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QGraphicsWidget *w); //qwidget_mac.cpp if (!(option->state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) option->state &= ~QStyle::State_Enabled; diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp index faf1a4c49a..4beb64a254 100644 --- a/src/widgets/graphicsview/qgraphicswidget_p.cpp +++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp @@ -52,7 +52,7 @@ #include #include #include -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) # include #endif @@ -704,7 +704,7 @@ void QGraphicsWidgetPrivate::windowFrameHoverMoveEvent(QGraphicsSceneHoverEvent case Qt::TitleBarArea: windowData->buttonRect = q->style()->subControlRect( QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarCloseButton, 0); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // On mac we should hover if we are in the 'area' of the buttons windowData->buttonRect |= q->style()->subControlRect( QStyle::CC_TitleBar, &bar, QStyle::SC_TitleBarMinButton, 0); diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index fff09b46d0..6ecf5a664f 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -3698,7 +3698,7 @@ QStyleOptionViewItem QAbstractItemView::viewOptions() const option.state &= ~QStyle::State_MouseOver; option.font = font(); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // On mac the focus appearance follows window activation // not widget activation if (!hasFocus()) diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 85bd3003e1..837383f016 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2450,7 +2450,7 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e) if (pos < 0 && d->state != QHeaderViewPrivate::SelectSections) return; if (e->buttons() == Qt::NoButton) { -#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // Under Cocoa, when the mouse button is released, may include an extra // simulated mouse moved event. The state of the buttons when this event // is generated is already "no button" and the code below gets executed diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index cfe68d6b6a..2d1d1f43d0 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2194,7 +2194,7 @@ QModelIndex QTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie return QModelIndex(); } int vi = -1; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) // Selection behavior is slightly different on the Mac. if (d->selectionMode == QAbstractItemView::ExtendedSelection && d->selectionModel diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index dd0edc7c80..3bef773187 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -118,7 +118,7 @@ public: virtual bool shouldQuit() Q_DECL_OVERRIDE; bool tryCloseAllWindows() Q_DECL_OVERRIDE; -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 #ifndef QT_NO_SETTINGS static bool x11_apply_settings(); #endif @@ -138,7 +138,7 @@ public: static bool isBlockedByModal(QWidget *widget); static bool modalState(); static bool tryModalHelper(QWidget *widget, QWidget **rettop = 0); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC static QWidget *tryModalHelper_sys(QWidget *top); bool canQuit(); #endif @@ -152,14 +152,14 @@ public: bool notify_helper(QObject *receiver, QEvent * e); void init( -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 Display *dpy = 0, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0 #endif ); void initialize(); void process_cmdline(); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 static void x11_initialize_style(); #endif @@ -214,7 +214,7 @@ public: static void initializeWidgetFontHash(); static void setSystemFont(const QFont &font); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 static void applyX11SpecificCommandLineArguments(QWidget *main_widget); #endif @@ -225,7 +225,7 @@ public: static Qt::NavigationMode navigationMode; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) || defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ void _q_alertTimeOut(); QHash alertTimerHash; #endif @@ -265,12 +265,12 @@ public: QGestureManager *gestureManager; QWidget *gestureWidget; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ || 0 /* Used to be included in Qt4 for Q_WS_WIN */ QPixmap *move_cursor; QPixmap *copy_cursor; QPixmap *link_cursor; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN QPixmap *ignore_cursor; #endif @@ -301,9 +301,9 @@ private: static bool isAlien(QWidget *); }; -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN extern void qt_win_set_cursor(QWidget *, bool); -#elif defined(Q_DEAD_CODE_FROM_QT4_X11) +#elif 0 // Used to be included in Qt4 for Q_WS_X11 extern void qt_x11_enforce_cursor(QWidget *, bool); extern void qt_x11_enforce_cursor(QWidget *); #else diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp index c901285d1a..2e5c2c53bd 100644 --- a/src/widgets/kernel/qgesturemanager.cpp +++ b/src/widgets/kernel/qgesturemanager.cpp @@ -52,7 +52,7 @@ #ifdef Q_OS_OSX #include "qmacgesturerecognizer_p.h" #endif -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_NATIVE_GESTURES) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ && !defined(QT_NO_NATIVE_GESTURES) #include "qwinnativepangesturerecognizer_win_p.h" #endif @@ -100,7 +100,7 @@ QGestureManager::QGestureManager(QObject *parent) registerGestureRecognizer(new QSwipeGestureRecognizer); registerGestureRecognizer(new QTapGestureRecognizer); #endif -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN #if !defined(QT_NO_NATIVE_GESTURES) if (QApplicationPrivate::HasTouchSupport) registerGestureRecognizer(new QWinNativePanGestureRecognizer); diff --git a/src/widgets/kernel/qt_widgets_pch.h b/src/widgets/kernel/qt_widgets_pch.h index f30202d89e..924a68d62e 100644 --- a/src/widgets/kernel/qt_widgets_pch.h +++ b/src/widgets/kernel/qt_widgets_pch.h @@ -50,7 +50,7 @@ #include -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN # define _POSIX_ # include # undef _POSIX_ diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp index 78929d8cd5..a92dc2cbf7 100644 --- a/src/widgets/kernel/qtooltip.cpp +++ b/src/widgets/kernel/qtooltip.cpp @@ -36,7 +36,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include #endif @@ -56,7 +56,7 @@ #include #ifndef QT_NO_TOOLTIP -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include #include #endif @@ -284,7 +284,7 @@ void QTipLabel::timerEvent(QTimerEvent *e) || e->timerId() == expireTimer.timerId()){ hideTimer.stop(); expireTimer.stop(); -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_EFFECTS) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip)){ // Fade out tip on mac (makes it invisible). // The tip will not be deleted until a new tip is shown. @@ -304,7 +304,7 @@ void QTipLabel::timerEvent(QTimerEvent *e) bool QTipLabel::eventFilter(QObject *o, QEvent *e) { switch (e->type()) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::KeyPress: case QEvent::KeyRelease: { int key = static_cast(e)->key(); @@ -386,7 +386,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w) #endif //QT_NO_STYLE_STYLESHEET -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // When in full screen mode, there is no Dock nor Menu so we can use // the whole screen for displaying the tooltip. However when not in // full screen mode we need to save space for the dock, so we use @@ -403,7 +403,7 @@ void QTipLabel::placeTip(const QPoint &pos, QWidget *w) QPoint p = pos; p += QPoint(2, -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN 21 #else 16 @@ -492,7 +492,7 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons } if (!text.isEmpty()){ // no tip can be reused, create new tip: -#ifndef Q_DEAD_CODE_FROM_QT4_WIN +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN new QTipLabel(text, w, msecDisplayTime); // sets QTipLabel::instance to itself #else // On windows, we can't use the widget as parent otherwise the window will be @@ -504,7 +504,7 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons QTipLabel::instance->setObjectName(QLatin1String("qtooltip_label")); -#if !defined(QT_NO_EFFECTS) && !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if !defined(QT_NO_EFFECTS) && !0 /* Used to be included in Qt4 for Q_WS_MAC */ if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip)) qFadeEffect(QTipLabel::instance); else if (QApplication::isEffectEnabled(Qt::UI_AnimateTooltip)) diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp index 32fe5f5e64..6061af5f38 100644 --- a/src/widgets/kernel/qwhatsthis.cpp +++ b/src/widgets/kernel/qwhatsthis.cpp @@ -570,7 +570,7 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y) // make a fresh widget, and set it up QWhatsThat *whatsThat = new QWhatsThat( text, -#if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_CURSOR) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR) QApplication::desktop()->screen(widget ? widget->x11Info().screen() : QCursor::x11Screen()), #else 0, @@ -583,11 +583,11 @@ void QWhatsThisPrivate::say(QWidget * widget, const QString &text, int x, int y) int scr = (widget ? QApplication::desktop()->screenNumber(widget) : -#if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_CURSOR) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_CURSOR) QCursor::x11Screen() #else QApplication::desktop()->screenNumber(QPoint(x,y)) -#endif // Q_DEAD_CODE_FROM_QT4_X11 +#endif ); QRect screen = QApplication::desktop()->screenGeometry(scr); diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 51e1ef9aaf..cf52a21716 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -59,7 +59,7 @@ #ifndef QT_NO_ACCESSIBILITY # include "qaccessible.h" #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include "qt_mac_p.h" # include "qt_cocoa_helpers_mac_p.h" # include "qmainwindow.h" @@ -85,7 +85,7 @@ #include #include #include -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include #endif #include @@ -118,7 +118,7 @@ QT_BEGIN_NAMESPACE static bool qt_enable_backingstore = true; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 // for compatibility with Qt 4.0 Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) { @@ -126,7 +126,7 @@ Q_WIDGETS_EXPORT void qt_x11_set_global_double_buffer(bool enable) } #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool qt_mac_clearDirtyOnWidgetInsideDrawWidget = false; #endif @@ -141,7 +141,7 @@ static inline bool hasBackingStoreSupport() return true; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # define QT_NO_PAINT_DEBUG #endif @@ -288,13 +288,13 @@ QWidgetPrivate::QWidgetPrivate(int version) #if defined(Q_OS_WIN) , noPaintOnScreen(0) #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 , picture(0) -#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) +#elif 0 // Used to be included in Qt4 for Q_WS_WIN #ifndef QT_NO_GESTURES , nativeGesturePanEnabled(0) #endif -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) +#elif 0 // Used to be included in Qt4 for Q_WS_MAC , needWindowChange(0) , window_event(0) , qd_hd(0) @@ -317,7 +317,7 @@ QWidgetPrivate::QWidgetPrivate(int version) isWidget = true; memset(high_attributes, 0, sizeof(high_attributes)); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC drawRectOriginalAdded = false; originalDrawMethod = true; changeMethods = false; @@ -326,7 +326,7 @@ QWidgetPrivate::QWidgetPrivate(int version) toolbar_ancestor = 0; flushRequested = false; touchEventsEnabled = false; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "widgets" << ++count; @@ -1087,7 +1087,7 @@ void QWidgetPrivate::adjustFlags(Qt::WindowFlags &flags, QWidget *w) // Only enable this on non-Mac platforms. Since the old way of doing this would // interpret WindowSystemMenuHint as a close button and we can't change that behavior // we can't just add this in. -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC if ((flags & (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint)) # ifdef Q_OS_WIN && type != Qt::Dialog // QTBUG-2027, allow for menu-less dialogs. @@ -1147,7 +1147,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) } #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (desktopWidget) { // make sure the widget is created on the same screen as the // programmer specified desktop widget @@ -1181,7 +1181,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) mustHaveWindowHandle = 1; q->setAttribute(Qt::WA_NativeWindow); } -//#ifdef Q_DEAD_CODE_FROM_QT4_MAC +//#if 0 // Used to be included in Qt4 for Q_WS_MAC // q->setAttribute(Qt::WA_NativeWindow); //#endif @@ -1206,9 +1206,9 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) setOpaque(q->isWindow() && background.style() != Qt::NoBrush && background.isOpaque()); } data.fnt = QFont(data.fnt, q); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 data.fnt.x11SetScreen(xinfo.screen()); -#endif // Q_DEAD_CODE_FROM_QT4_X11 +#endif q->setAttribute(Qt::WA_PendingMoveEvent); q->setAttribute(Qt::WA_PendingResizeEvent); @@ -1225,7 +1225,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) extraPaintEngine = 0; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If we add a child to the unified toolbar, we have to redirect the painting. if (parentWidget && parentWidget->d_func() && parentWidget->d_func()->isInUnifiedToolbar) { if (parentWidget->d_func()->unifiedSurface) { @@ -1233,7 +1233,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) parentWidget->d_func()->unifiedSurface->recursiveRedirect(toolbar, toolbar, toolbar->d_func()->toolbar_offset); } } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif } @@ -1323,14 +1323,14 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) << "Alien?" << !testAttribute(Qt::WA_NativeWindow); #endif -#if defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ && !defined(QT_NO_DRAGANDDROP) // Unregister the dropsite (if already registered) before we // re-create the widget with a native window. if (testAttribute(Qt::WA_WState_Created) && !internalWinId() && testAttribute(Qt::WA_NativeWindow) && d->extra && d->extra->dropTarget) { d->registerDropSite(false); } -#endif // defined (Q_DEAD_CODE_FROM_QT4_WIN) && !defined(QT_NO_DRAGANDDROP) +#endif d->updateIsOpaque(); @@ -1630,7 +1630,7 @@ QWidget::~QWidget() } } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11)|| defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */|| 0 /* Used to be included in Qt4 for Q_WS_MAC */ else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); } @@ -1677,7 +1677,7 @@ QWidget::~QWidget() d->blockSig = blocked; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // QCocoaView holds a pointer back to this widget. Clear it now // to make sure it's not followed later on. The lifetime of the // QCocoaView might exceed the lifetime of this widget in cases @@ -1728,7 +1728,7 @@ void QWidgetPrivate::setWinId(WId id) // set widget identifier const WId oldWinId = data.winid; data.winid = id; -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 hd = id; // X11: hd == ident #endif if (mapper && id && !userDesktopWidget) { @@ -1764,9 +1764,9 @@ void QWidgetPrivate::createTLExtra() x->window = 0; x->shareContext = 0; x->initialScreenIndex = -1; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC x->wasMaximized = false; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "tlextra" << ++count; @@ -2191,10 +2191,10 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt if (disableSubtractOpaqueSiblings || q->isWindow()) return; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (q->d_func()->isInUnifiedToolbar) return; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QRect clipBoundingRect; bool dirtyClipBoundingRect = true; @@ -2328,7 +2328,7 @@ void QWidgetPrivate::updateIsOpaque() #endif //QT_NO_GRAPHICSEFFECT Q_Q(QWidget); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (q->testAttribute(Qt::WA_X11OpenGLOverlay)) { setOpaque(false); return; @@ -2387,7 +2387,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus Q_ASSERT(painter); if (brush.style() == Qt::TexturePattern) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Optimize pattern filling on mac by using HITheme directly // when filling with the standard widget background. // Defined in qmacstyle_mac.cpp @@ -2399,7 +2399,7 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrus painter->setClipRegion(rgn); painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft()); } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif } else if (brush.gradient() && brush.gradient()->coordinateMode() == QGradient::ObjectBoundingMode) { @@ -2470,7 +2470,7 @@ void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, int visible widgets. */ -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern QPointer qt_button_down; #else extern QWidget *qt_button_down; @@ -2750,7 +2750,7 @@ void QWidget::setStyle(QStyle *style) } void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC metalHack #endif ) @@ -2761,7 +2761,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool QPointer origStyle; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // the metalhack boolean allows Qt/Mac to do a proper re-polish depending // on how the Qt::WA_MacBrushedMetal attribute is set. It is only ever // set when changing that attribute and passes the widget's CURRENT style. @@ -2781,12 +2781,12 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool if (q->windowType() != Qt::Desktop) { if (polished) { oldStyle->unpolish(q); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (metalHack) macUpdateMetalAttribute(); #endif q->style()->polish(q); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC } else if (metalHack) { macUpdateMetalAttribute(); #endif @@ -3151,7 +3151,7 @@ bool QWidget::isFullScreen() const */ void QWidget::showFullScreen() { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If the unified toolbar is enabled, we have to disable it before going fullscreen. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow && mainWindow->unifiedTitleAndToolBarOnMac()) { @@ -3159,7 +3159,7 @@ void QWidget::showFullScreen() QMainWindowLayout *mainLayout = qobject_cast(mainWindow->layout()); mainLayout->activateUnifiedToolbarAfterFullScreen = true; } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif ensurePolished(); setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized)) @@ -3187,7 +3187,7 @@ void QWidget::showMaximized() setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowMaximized); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow) @@ -3198,7 +3198,7 @@ void QWidget::showMaximized() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif setVisible(true); } @@ -3216,7 +3216,7 @@ void QWidget::showNormal() setWindowState(windowState() & ~(Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen)); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // If the unified toolbar was enabled before going fullscreen, we have to enable it back. QMainWindow *mainWindow = qobject_cast(this); if (mainWindow) @@ -3227,7 +3227,7 @@ void QWidget::showNormal() mainLayout->activateUnifiedToolbarAfterFullScreen = false; } } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif setVisible(true); } @@ -3443,7 +3443,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) if (w && !w->testAttribute(attribute)) w->d_func()->setEnabled_helper(enable); } -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (q->testAttribute(Qt::WA_SetCursor) || q->isWindow()) { // enforce the windows behavior of clearing the cursor on // disabled widgets @@ -3457,7 +3457,7 @@ void QWidgetPrivate::setEnabled_helper(bool enable) qt_qpa_set_cursor(q, false); } #endif -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC setEnabled_helper_sys(enable); #endif #ifndef QT_NO_IM @@ -4561,7 +4561,7 @@ const QPalette &QWidget::palette() const ) { data->pal.setCurrentColorGroup(QPalette::Active); } else { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QWidget *); //qwidget_mac.cpp if (qt_mac_can_clickThrough(this)) data->pal.setCurrentColorGroup(QPalette::Active); @@ -4819,7 +4819,7 @@ void QWidgetPrivate::updateFont(const QFont &font) #endif data.fnt = QFont(font, q); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 // make sure the font set on this widget is associated with the correct screen data.fnt.x11SetScreen(xinfo.screen()); #endif @@ -4992,7 +4992,7 @@ void QWidget::setCursor(const QCursor &cursor) { Q_D(QWidget); // On Mac we must set the cursor even if it is the ArrowCursor. -#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC if (cursor.shape() != Qt::ArrowCursor || (d->extra && d->extra->curs)) #endif @@ -5424,7 +5424,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset Q_ASSERT(!toBePainted.isEmpty()); Q_Q(QWidget); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC const QTransform originalTransform = painter->worldTransform(); const bool useDeviceCoordinates = originalTransform.isScaling(); if (!useDeviceCoordinates) { @@ -5451,7 +5451,7 @@ void QWidgetPrivate::render_helper(QPainter *painter, const QPoint &targetOffset if (restore) painter->setRenderHints(QPainter::SmoothPixmapTransform, false); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC } else { // Render via a pixmap in device coordinates (to avoid pixmap scaling). QTransform transform = originalTransform; @@ -5560,7 +5560,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP if (paintEngine) { setRedirected(pdev, -offset); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // (Alien support) Special case for Mac when redirecting: If the paint device // is of the Widget type we need to set WA_WState_InPaintEvent since painting // outside the paint event is not supported on QWidgets. The attributeis @@ -5646,7 +5646,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP //restore if (paintEngine) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (pdev->devType() == QInternal::Widget) static_cast(pdev)->setAttribute(Qt::WA_WState_InPaintEvent, false); #endif @@ -5720,7 +5720,7 @@ void QWidgetPrivate::render(QPaintDevice *target, const QPoint &targetOffset, if (paintRegion.isEmpty()) return; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC QPainter *oldSharedPainter = inRenderWithPainter ? sharedPainter() : 0; // Use the target's shared painter if set (typically set when doing @@ -6501,7 +6501,7 @@ void QWidget::setFocus(Qt::FocusReason reason) f = f->d_func()->extra->focus_proxy; if (QApplication::focusWidget() == f -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN && GetFocus() == f->internalWinId() #endif ) @@ -6686,7 +6686,7 @@ void QWidget::clearFocus() if (hasFocus()) { // Update proxy state QApplicationPrivate::setFocusWidget(0, Qt::OtherFocusReason); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN if (!(windowType() == Qt::Popup) && GetFocus() == internalWinId()) SetFocus(0); else @@ -7318,7 +7318,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) */ QByteArray QWidget::saveGeometry() const { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // We check if the window was maximized during this invocation. If so, we need to record the // starting position as 0,0. Q_D(const QWidget); @@ -7329,7 +7329,7 @@ QByteArray QWidget::saveGeometry() const newFramePosition.moveTo(0, 0); newNormalPosition.moveTo(0, 0); } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QByteArray array; QDataStream stream(&array, QIODevice::WriteOnly); stream.setVersion(QDataStream::Qt_4_0); @@ -7343,13 +7343,13 @@ QByteArray QWidget::saveGeometry() const stream << magicNumber << majorVersion << minorVersion -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC << newFramePosition << newNormalPosition #else << frameGeometry() << normalGeometry() -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif << qint32(screenNumber) << quint8(windowState() & Qt::WindowMaximized) << quint8(windowState() & Qt::WindowFullScreen) @@ -7457,7 +7457,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) // - The title bar is outside the available geometry. // - (Mac only) The window is higher than the available geometry. It must // be possible to bring the size grip on screen by moving the window. -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC restoredFrameGeometry.setHeight(qMin(restoredFrameGeometry.height(), availableGeometry.height())); restoredNormalGeometry.setHeight(qMin(restoredNormalGeometry.height(), availableGeometry.height() - frameHeight)); #endif @@ -7506,7 +7506,7 @@ bool QWidget::restoreGeometry(const QByteArray &geometry) d_func()->topData()->normalGeometry = restoredNormalGeometry; } else { QPoint offset; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (isFullScreen()) offset = d_func()->topData()->fullScreenOffset; #endif @@ -7904,7 +7904,7 @@ void QWidgetPrivate::show_helper() // On Windows, show the popup now so that our own focus handling // stores the correct old focus widget even if it's stolen in the // showevent -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */ if (!isEmbedded && q->windowType() == Qt::Popup) qApp->d_func()->openPopup(q); #endif @@ -8033,7 +8033,7 @@ void QWidgetPrivate::hide_helper() if (!isEmbedded && (q->windowType() == Qt::Popup)) qApp->d_func()->closePopup(q); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN if (q->isWindow() && !(q->windowType() == Qt::Popup) && q->parentWidget() && !q->parentWidget()->isHidden() && q->isActiveWindow()) q->parentWidget()->activateWindow(); // Activate parent @@ -8217,7 +8217,7 @@ void QWidget::setVisible(bool visible) } else { // hide if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden)) return; -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN // reset WS_DISABLED style in a Blocked window if(isWindow() && testAttribute(Qt::WA_WState_Created) && QApplicationPrivate::isBlockedByModal(this)) @@ -8302,7 +8302,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) QWidget *widget = qobject_cast(childList.at(i)); if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden)) continue; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Before doing anything we need to make sure that we don't leave anything in a non-consistent state. // When hiding a widget we need to make sure that no mouse_down events are active, because // the mouse_up event will never be received by a hidden widget or one of its descendants. @@ -8318,7 +8318,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) // supposed to trigger because it is not visible. if(widget == qt_button_down) qt_button_down = 0; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif if (spontaneous) widget->setAttribute(Qt::WA_Mapped, false); else @@ -8553,7 +8553,7 @@ QSize QWidgetPrivate::adjustedSize() const s.setWidth(qMax(s.width(), 200)); if (exp & Qt::Vertical) s.setHeight(qMax(s.height(), 100)); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 QRect screen = QApplication::desktop()->screenGeometry(q->x11Info().screen()); #else // all others QRect screen = QApplication::desktop()->screenGeometry(q->pos()); @@ -8682,7 +8682,7 @@ bool QWidget::isAncestorOf(const QWidget *child) const return false; } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN inline void setDisabledStyle(QWidget *w, bool setStyle) { // set/reset WS_DISABLED style. @@ -9114,7 +9114,7 @@ bool QWidget::event(QEvent *event) } } } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN setDisabledStyle(this, (event->type() == QEvent::WindowBlocked)); #endif break; @@ -9141,7 +9141,7 @@ bool QWidget::event(QEvent *event) case QEvent::EmbeddingControl: d->topData()->frameStrut.setCoords(0 ,0, 0, 0); data->fstrut_dirty = false; -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ d->topData()->embedded = 1; #endif break; @@ -9166,7 +9166,7 @@ bool QWidget::event(QEvent *event) } break; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::MacGLWindowChange: d->needWindowChange = false; break; @@ -9280,7 +9280,7 @@ void QWidget::changeEvent(QEvent * event) case QEvent::MacSizeChange: updateGeometry(); break; -#elif defined Q_DEAD_CODE_FROM_QT4_MAC +#elif 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::ToolTipChange: case QEvent::MouseTrackingChange: qt_mac_update_mouseTracking(this); @@ -10561,7 +10561,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) // (f & Qt::MSWindowsOwnDC) clause (which is set on QGLWidgets on all // platforms). if (newParent -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(QT_OPENGL_ES) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || defined(QT_OPENGL_ES) || (f & Qt::MSWindowsOwnDC) #endif ) { @@ -10581,7 +10581,7 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) } //### already hidden above ---> must probably do something smart on the mac -// #ifdef Q_DEAD_CODE_FROM_QT4_MAC +// #if 0 // Used to be included in Qt4 for Q_WS_MAC // extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp // if(!qt_mac_is_macdrawer(q)) //special case // q->setAttribute(Qt::WA_WState_Hidden); @@ -11109,7 +11109,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->receiveChildEvents = !on; break; case Qt::WA_MacBrushedMetal: -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->setStyle_helper(style(), false, true); // Make sure things get unpolished/polished correctly. // fall through since changing the metal attribute affects the opaque size grip. case Qt::WA_MacOpaqueSizeGrip: @@ -11126,7 +11126,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; #endif case Qt::WA_MacAlwaysShowToolWindow: -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->macUpdateHideOnSuspend(); #endif break; @@ -11203,7 +11203,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) } case Qt::WA_PaintOnScreen: d->updateIsOpaque(); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_X11) || defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_X11 */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */ // Recreate the widget if it's already created as an alien widget and // WA_PaintOnScreen is enabled. Paint on screen widgets must have win id. // So must their children. @@ -11223,7 +11223,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->updateSystemBackground(); break; case Qt::WA_TransparentForMouseEvents: -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->macUpdateIgnoreMouseEvents(); #endif break; @@ -11242,7 +11242,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) d->resolveFont(); d->resolveLocale(); break; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 case Qt::WA_NoX11EventCompression: if (!d->extra) d->createExtra(); @@ -11299,7 +11299,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; case Qt::WA_AcceptTouchEvents: -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) || defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ || 0 /* Used to be included in Qt4 for Q_WS_MAC */ if (on) d->registerTouchWindow(); #endif @@ -11918,7 +11918,7 @@ QRect QWidgetPrivate::frameStrut() const } if (data.fstrut_dirty -#ifndef Q_DEAD_CODE_FROM_QT4_WIN +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN // ### Fix properly for 4.3 && q->isVisible() #endif @@ -12854,7 +12854,7 @@ void QWidget::setMask(const QRegion &newMask) d->extra->mask = newMask; d->extra->hasMask = !newMask.isEmpty(); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC if (!testAttribute(Qt::WA_WState_Created)) return; #endif diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index bca89fe2c5..5edf2c62da 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -570,12 +570,12 @@ public: inline QWidget *childAt(int x, int y) const; QWidget *childAt(const QPoint &p) const; -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 const QX11Info &x11Info() const; Qt::HANDLE x11PictureHandle() const; #endif -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC Qt::HANDLE macQDHandle() const; Qt::HANDLE macCGHandle() const; #endif diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 3e57f9de41..2720c0dc31 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -189,7 +189,7 @@ struct QTLWExtra { uint embedded : 1; // *************************** Platform specific values (bit fields first) ********** -#if defined(Q_DEAD_CODE_FROM_QT4_X11) // <----------------------------------------------------------- X11 +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <----------------------------------------------------------- X11 uint spont_unmapped: 1; // window was spontaneously unmapped uint dnd : 1; // DND properties installed uint validWMState : 1; // is WM_STATE valid? @@ -203,11 +203,11 @@ struct QTLWExtra { qint32 newCounterValueHi; quint32 newCounterValueLo; #endif -#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) // <--------------------------------------------------------- WIN +#elif 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <--------------------------------------------------------- WIN uint hotkeyRegistered: 1; // Hot key from the STARTUPINFO has been registered. HICON winIconBig; // internal big Windows icon HICON winIconSmall; // internal small Windows icon -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <--------------------------------------------------------- MAC +#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <--------------------------------------------------------- MAC uint resizer : 4; uint isSetGeometry : 1; uint isMove : 1; @@ -262,15 +262,15 @@ struct QWExtra { uint hasWindowContainer : 1; // *************************** Platform specific values (bit fields first) ********** -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) // <----------------------------------------------------------- WIN +#if 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <----------------------------------------------------------- WIN #ifndef QT_NO_DRAGANDDROP QOleDropTarget *dropTarget; // drop target QList > oleDropWidgets; #endif -#elif defined(Q_DEAD_CODE_FROM_QT4_X11) // <--------------------------------------------------------- X11 +#elif 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <--------------------------------------------------------- X11 uint compress_events : 1; WId xDndProxy; // XDND forwarding to embedded windows -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <------------------------------------------------------ MAC +#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <------------------------------------------------------ MAC // Cocoa Mask stuff QImage maskBits; CGImageRef imageMask; @@ -761,7 +761,7 @@ public: #if defined(Q_OS_WIN) uint noPaintOnScreen : 1; // see qwidget.cpp ::paintEngine() #endif -#if defined(Q_DEAD_CODE_FROM_QT4_X11) // <----------------------------------------------------------- X11 +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ // <----------------------------------------------------------- X11 Qt::HANDLE picture; static QWidget *mouseGrabber; static QWidget *keyboardGrabber; @@ -773,7 +773,7 @@ public: void updateX11AcceptFocus(); QPoint mapToGlobal(const QPoint &pos) const; QPoint mapFromGlobal(const QPoint &pos) const; -#elif defined(Q_DEAD_CODE_FROM_QT4_WIN) // <--------------------------------------------------------- WIN +#elif 0 /* Used to be included in Qt4 for Q_WS_WIN */ // <--------------------------------------------------------- WIN #ifndef QT_NO_GESTURES uint nativeGesturePanEnabled : 1; #endif @@ -789,7 +789,7 @@ public: void winSetupGestures(); #elif defined(Q_OS_MAC) // <--------------------------------------------------------- MAC void macUpdateSizeAttribute(); -#elif defined(Q_DEAD_CODE_FROM_QT4_MAC) // <--------------------------------------------------------- MAC (old stuff) +#elif 0 /* Used to be included in Qt4 for Q_WS_MAC */ // <--------------------------------------------------------- MAC (old stuff) // This is new stuff uint needWindowChange : 1; diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 81fbe49a43..a10c88308c 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -699,7 +699,7 @@ void QWidgetBackingStore::markDirtyOnScreen(const QRegion ®ion, QWidget *widg if (!widget || widget->d_func()->paintOnScreen() || region.isEmpty()) return; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (!widget->testAttribute(Qt::WA_WState_InPaintEvent)) dirtyOnScreen += region.translated(topLevelOffset); return; @@ -1624,7 +1624,7 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn) && (usesDoubleBufferedGLContext || q->autoFillBackground()); QRegion toBePainted(noPartialUpdateSupport ? q->rect() : rgn); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // No difference between update() and repaint() on the Mac. update_sys(toBePainted); return; diff --git a/src/widgets/styles/qmacstyle_mac_p.h b/src/widgets/styles/qmacstyle_mac_p.h index fdc22794b4..459784c538 100644 --- a/src/widgets/styles/qmacstyle_mac_p.h +++ b/src/widgets/styles/qmacstyle_mac_p.h @@ -134,7 +134,7 @@ private: friend bool qt_mac_buttonIsRenderedFlat(const QPushButton *pushButton, const QStyleOptionButton *option); }; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QT_END_NAMESPACE diff --git a/src/widgets/styles/qpixmapstyle.cpp b/src/widgets/styles/qpixmapstyle.cpp index ee5fd704dc..b51860045d 100644 --- a/src/widgets/styles/qpixmapstyle.cpp +++ b/src/widgets/styles/qpixmapstyle.cpp @@ -108,7 +108,7 @@ QPixmapStyle::~QPixmapStyle() void QPixmapStyle::polish(QApplication *application) { QCommonStyle::polish(application); -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false); #endif } @@ -170,7 +170,7 @@ void QPixmapStyle::polish(QWidget *widget) frame->setContentsMargins(pix.margins.left(), desc.margins.top(), pix.margins.right(), desc.margins.bottom()); frame->setAttribute(Qt::WA_TranslucentBackground); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN // FramelessWindowHint is needed on windows to make // WA_TranslucentBackground work properly frame->setWindowFlags(widget->windowFlags() | Qt::FramelessWindowHint); diff --git a/src/widgets/styles/qstylefactory.cpp b/src/widgets/styles/qstylefactory.cpp index bb849c148f..09cccff4e8 100644 --- a/src/widgets/styles/qstylefactory.cpp +++ b/src/widgets/styles/qstylefactory.cpp @@ -131,7 +131,7 @@ QStyle *QStyleFactory::create(const QString& key) #ifndef QT_NO_STYLE_MAC if (style.startsWith(QLatin1String("macintosh"))) { ret = new QMacStyle; -# ifdef Q_DEAD_CODE_FROM_QT4_MAC +# if 0 // Used to be included in Qt4 for Q_WS_MAC if (style == QLatin1String("macintosh")) style += QLatin1String(" (aqua)"); # endif @@ -184,7 +184,7 @@ QStringList QStyleFactory::keys() #endif #ifndef QT_NO_STYLE_MAC QString mstyle = QLatin1String("Macintosh"); -# ifdef Q_DEAD_CODE_FROM_QT4_MAC +# if 0 // Used to be included in Qt4 for Q_WS_MAC mstyle += QLatin1String(" (aqua)"); # endif if (!list.contains(mstyle)) diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 71cf2fb267..83739655af 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -199,7 +199,7 @@ void QStyleOption::init(const QWidget *widget) state |= QStyle::State_Active; if (widget->isWindow()) state |= QStyle::State_Window; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern bool qt_mac_can_clickThrough(const QWidget *w); //qwidget_mac.cpp if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) state &= ~QStyle::State_Enabled; diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index b214dae154..8e77ae0e44 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -5045,7 +5045,7 @@ QSize QStyleSheetStyle::sizeFromContents(ContentsType ct, const QStyleOption *op sz = csz + QSize(vertical ? 0 : spaceForIcon, vertical ? spaceForIcon : 0); return subRule.boxSize(subRule.adjustSize(sz)); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (baseStyle()->inherits("QMacStyle")) { //adjust the size after the call to the style because the mac style ignore the size arguments anyway. //this might cause the (max-){width,height} property to include the native style border while they should not. diff --git a/src/widgets/util/qflickgesture.cpp b/src/widgets/util/qflickgesture.cpp index 57db9ff7fc..10e92e04e1 100644 --- a/src/widgets/util/qflickgesture.cpp +++ b/src/widgets/util/qflickgesture.cpp @@ -460,7 +460,7 @@ QGestureRecognizer::Result QFlickGestureRecognizer::recognize(QGesture *state, } break; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC // the only way to distinguish between real mouse wheels and wheel // events generated by the native 2 finger swipe gesture is to listen // for these events (according to Apple's Cocoa Event-Handling Guide) diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp index 9973940c16..a348327c92 100644 --- a/src/widgets/util/qscroller.cpp +++ b/src/widgets/util/qscroller.cpp @@ -1011,12 +1011,12 @@ bool QScroller::handleInput(Input input, const QPointF &position, qint64 timesta return false; } -#if !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // the Mac version is implemented in qscroller_mac.mm QPointF QScrollerPrivate::realDpi(int screen) const { -# if defined(Q_DEAD_CODE_FROM_QT4_X11) && !defined(QT_NO_XRANDR) +# if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_XRANDR) if (X11 && X11->use_xrandr && X11->ptrXRRSizes && X11->ptrXRRRootToScreen) { int nsizes = 0; // QDesktopWidget is based on Xinerama screens, which do not always @@ -1042,7 +1042,7 @@ QPointF QScrollerPrivate::realDpi(int screen) const return QPointF(w->physicalDpiX(), w->physicalDpiY()); } -#endif // !Q_DEAD_CODE_FROM_QT4_MAC +#endif /*! \internal diff --git a/src/widgets/util/qscroller_mac.mm b/src/widgets/util/qscroller_mac.mm index 31316f5518..6dbb483089 100644 --- a/src/widgets/util/qscroller_mac.mm +++ b/src/widgets/util/qscroller_mac.mm @@ -39,7 +39,7 @@ #include -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #import diff --git a/src/widgets/util/qscrollerproperties.cpp b/src/widgets/util/qscrollerproperties.cpp index 35e1be15db..c26fba2cd3 100644 --- a/src/widgets/util/qscrollerproperties.cpp +++ b/src/widgets/util/qscrollerproperties.cpp @@ -40,7 +40,7 @@ #include #include #include -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN # include #endif @@ -73,7 +73,7 @@ QScrollerPropertiesPrivate *QScrollerPropertiesPrivate::defaults() spp.overshootDragDistanceFactor = qreal(1); spp.overshootScrollDistanceFactor = qreal(0.5); spp.overshootScrollTime = qreal(0.7); -# ifdef Q_DEAD_CODE_FROM_QT4_WIN +# if 0 // Used to be included in Qt4 for Q_WS_WIN if (QLibrary::resolve(QLatin1String("UxTheme"), "BeginPanningFeedback")) spp.overshootScrollTime = qreal(0.35); # endif diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp index 2a418167f1..224ffeb6e2 100644 --- a/src/widgets/util/qsystemtrayicon.cpp +++ b/src/widgets/util/qsystemtrayicon.cpp @@ -565,7 +565,7 @@ void QBalloonTip::balloon(const QPoint& pos, int msecs, bool showArrow) } QPainterPath path; -#if defined(QT_NO_XSHAPE) && defined(Q_DEAD_CODE_FROM_QT4_X11) +#if defined(QT_NO_XSHAPE) && 0 /* Used to be included in Qt4 for Q_WS_X11 */ // XShape is required for setting the mask, so we just // draw an ugly square when its not available path.moveTo(0, 0); diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index 2587a7a03b..5b31e4467f 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -60,7 +60,7 @@ #include -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include #include #endif @@ -168,7 +168,7 @@ QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate() shownOnce(false), inResize(false), sizeAdjustPolicy(QAbstractScrollArea::AdjustIgnored), viewport(0), cornerWidget(0), left(0), top(0), right(0), bottom(0), xoffset(0), yoffset(0), viewportFilter(0) -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN , singleFingerPanEnabled(false) #endif { @@ -321,7 +321,7 @@ void QAbstractScrollAreaPrivate::init() #endif } -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on) { singleFingerPanEnabled = on; @@ -329,7 +329,7 @@ void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on) if (dd) dd->winSetupGestures(); } -#endif // Q_DEAD_CODE_FROM_QT4_WIN +#endif void QAbstractScrollAreaPrivate::layoutChildren() { @@ -350,7 +350,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() const int hscrollOverlap = hbar->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarOverlap, &opt, hbar); const int vscrollOverlap = vbar->style()->pixelMetric(QStyle::PM_ScrollView_ScrollBarOverlap, &opt, vbar); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QWidget * const window = q->window(); // Use small scroll bars for tool windows, to match the native size grip. @@ -393,7 +393,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() // If the scroll bars are at the very right and bottom of the window we // move their positions to be aligned with the size grip. -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Check if a native sizegrip is present. bool hasMacReverseSizeGrip = false; bool hasMacSizeGrip = false; @@ -446,7 +446,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() if (hasCornerWidget && ((needv && vscrollOverlap == 0) || (needh && hscrollOverlap == 0))) cornerOffset = extPoint; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Also move the scroll bars if they are covered by the native Mac size grip. if (hasMacSizeGrip) cornerOffset = extPoint; @@ -463,7 +463,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() else cornerPaintingRect = QRect(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (hasMacReverseSizeGrip) reverseCornerPaintingRect = QRect(controlsRect.bottomRight() + QPoint(1, 1) - extPoint, extSize); else @@ -488,7 +488,7 @@ void QAbstractScrollAreaPrivate::layoutChildren() if (needh) { QRect horizontalScrollBarRect(QPoint(controlsRect.left() + vHeaderRight, cornerPoint.y()), QPoint(cornerPoint.x() - 1, controlsRect.bottom())); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (hasMacReverseSizeGrip) horizontalScrollBarRect.adjust(vsbExt, 0, 0, 0); #endif @@ -602,7 +602,7 @@ void QAbstractScrollArea::setViewport(QWidget *widget) d->viewport->setParent(this); d->viewport->setFocusProxy(this); d->viewport->installEventFilter(d->viewportFilter.data()); -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC #ifndef QT_NO_GESTURES d->viewport->grabGesture(Qt::PanGesture); #endif @@ -1029,7 +1029,7 @@ bool QAbstractScrollArea::event(QEvent *e) QPainter p(this); style()->drawPrimitive(QStyle::PE_PanelScrollAreaCorner, &option, &p, this); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (d->reverseCornerPaintingRect.isValid()) { option.rect = d->reverseCornerPaintingRect; QPainter p(this); @@ -1108,7 +1108,7 @@ bool QAbstractScrollArea::event(QEvent *e) hBar->setValue(se->contentPos().x()); vBar->setValue(se->contentPos().y()); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN typedef BOOL (*PtrBeginPanningFeedback)(HWND); typedef BOOL (*PtrUpdatePanningFeedback)(HWND, LONG, LONG, BOOL); typedef BOOL (*PtrEndPanningFeedback)(HWND, BOOL); @@ -1532,13 +1532,13 @@ void QAbstractScrollAreaPrivate::_q_vslide(int y) void QAbstractScrollAreaPrivate::_q_showOrHideScrollBars() { layoutChildren(); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN // Need to re-subscribe to gestures as the content changes to make sure we // enable/disable panning when needed. QWidgetPrivate *dd = static_cast(QObjectPrivate::get(viewport)); if (dd) dd->winSetupGestures(); -#endif // Q_DEAD_CODE_FROM_QT4_WIN +#endif } QPoint QAbstractScrollAreaPrivate::contentsOffset() const diff --git a/src/widgets/widgets/qabstractscrollarea_p.h b/src/widgets/widgets/qabstractscrollarea_p.h index 600c834c29..a3af77b11b 100644 --- a/src/widgets/widgets/qabstractscrollarea_p.h +++ b/src/widgets/widgets/qabstractscrollarea_p.h @@ -85,7 +85,7 @@ public: QWidget *viewport; QWidget *cornerWidget; QRect cornerPaintingRect; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QRect reverseCornerPaintingRect; #endif int left, top, right, bottom; // viewport margin @@ -112,7 +112,7 @@ public: { return q_func()->viewportEvent(event); } QScopedPointer viewportFilter; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN bool singleFingerPanEnabled; void setSingleFingerPanEnabled(bool on = true); #endif diff --git a/src/widgets/widgets/qabstractslider.cpp b/src/widgets/widgets/qabstractslider.cpp index e85d82edb8..cc6a407bf8 100644 --- a/src/widgets/widgets/qabstractslider.cpp +++ b/src/widgets/widgets/qabstractslider.cpp @@ -721,7 +721,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb offset_accumulated = 0; offset_accumulated += stepsToScrollF; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC // Don't scroll more than one page in any case: stepsToScroll = qBound(-pageStep, int(offset_accumulated), pageStep); #else diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index caeabb660b..12071e2cf0 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -1579,7 +1579,7 @@ protected: { Q_UNUSED(e) -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC QStyleOptionToolButton opt; initStyleOption(&opt); diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 693d5f9e93..a30e5db405 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -66,7 +66,7 @@ #include #include #include -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_EFFECTS) && !defined(QT_NO_STYLE_MAC) #include #include #include @@ -415,7 +415,7 @@ void QComboBoxPrivateContainer::leaveEvent(QEvent *) { // On Mac using the Mac style we want to clear the selection // when the mouse moves outside the popup. -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QStyleOptionComboBox opt = comboStyleOption(); if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo)) view->clearSelection(); diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 54094de765..da370b4a19 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -1125,7 +1125,7 @@ void QDateTimeEdit::keyPressEvent(QKeyEvent *event) select = false; break; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC else #ifdef QT_KEYPAD_NAVIGATION if (!QApplication::keypadNavigationEnabled()) diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp index 657eda3c68..23158cf82f 100644 --- a/src/widgets/widgets/qdialogbuttonbox.cpp +++ b/src/widgets/widgets/qdialogbuttonbox.cpp @@ -411,7 +411,7 @@ QPushButton *QDialogButtonBoxPrivate::createButton(QDialogButtonBox::StandardBut else addButton(button, static_cast(role), doLayout); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC // Since mnemonics is off by default on Mac, we add a Cmd-D // shortcut here to e.g. make the "Don't Save" button work nativly: if (sbutton == QDialogButtonBox::Discard) diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index a7e865ff05..63f8172bf6 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -1935,7 +1935,7 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList QDockAreaLayoutItem item(new QDockWidgetItem(widget)); if (flags & StateFlagFloating) { bool drawer = false; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC // drawer support +#if 0 // Used to be included in Qt4 for Q_WS_MAC // drawer support extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp extern bool qt_mac_set_drawer_preferred_edge(QWidget *, Qt::DockWidgetArea); //qwidget_mac.cpp drawer = qt_mac_is_macdrawer(widget); @@ -1950,7 +1950,7 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList int x, y, w, h; stream >> x >> y >> w >> h; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC // drawer support +#if 0 // Used to be included in Qt4 for Q_WS_MAC // drawer support if (drawer) { mainWindow->window()->createWinId(); widget->window()->createWinId(); @@ -2050,7 +2050,7 @@ void QDockAreaLayoutInfo::updateSeparatorWidgets() const } j++; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sepWidget->raise(); #endif QRect sepRect = separatorRect(i).adjusted(-2, -2, 2, 2); @@ -3085,7 +3085,7 @@ bool QDockAreaLayout::restoreDockWidget(QDockWidget *dockWidget) dockWidget->d_func()->setWindowState(true, true, r); } dockWidget->setVisible(!placeHolder->hidden); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (placeHolder->window) // gets rid of the X11BypassWindowManager window flag dockWidget->d_func()->setWindowState(true); #endif @@ -3316,7 +3316,7 @@ void QDockAreaLayout::updateSeparatorWidgets() const } j++; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sepWidget->raise(); #endif QRect sepRect = separatorRect(i).adjusted(-2, -2, 2, 2); diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 5059616870..1df7259aba 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -58,7 +58,7 @@ #include "qdockwidget_p.h" #include "qmainwindowlayout_p.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include #include #include @@ -916,7 +916,7 @@ bool QDockWidgetPrivate::mouseMoveEvent(QMouseEvent *event) && (event->pos() - state->pressPos).manhattanLength() > QApplication::startDragDistance()) { startDrag(); -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN grabMouseWhileInWindow(); #else q->grabMouse(); @@ -966,7 +966,7 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event) QWidget *tl = q->topLevelWidget(); QRect geo = tl->geometry(); QRect titleRect = tl->frameGeometry(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if ((features & QDockWidget::DockWidgetVerticalTitleBar)) { titleRect.setTop(geo.top()); titleRect.setBottom(geo.bottom()); @@ -1508,7 +1508,7 @@ bool QDockWidget::event(QEvent *event) if (d->mouseMoveEvent(static_cast(event))) return true; break; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN case QEvent::Leave: if (d->state != 0 && d->state->dragging && !d->state->nca) { // This is a workaround for loosing the mouse on Vista. diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 2bc715724d..dd5f5325b1 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -87,7 +87,7 @@ QT_BEGIN_NAMESPACE -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC extern void qt_mac_secure_keyboard(bool); //qapplication_mac.cpp #endif @@ -573,7 +573,7 @@ void QLineEdit::setEchoMode(EchoMode mode) setInputMethodHints(imHints); d->control->setEchoMode(mode); update(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (hasFocus()) qt_mac_secure_keyboard(mode == Password || mode == NoEcho); #endif @@ -1810,7 +1810,7 @@ void QLineEdit::focusInEvent(QFocusEvent *e) if((!hasSelectedText() && d->control->preeditAreaText().isEmpty()) || style()->styleHint(QStyle::SH_BlinkCursorWhenTextSelected, &opt, this)) d->setCursorVisible(true); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (d->control->echoMode() == Password || d->control->echoMode() == NoEcho) qt_mac_secure_keyboard(true); #endif @@ -1858,7 +1858,7 @@ void QLineEdit::focusOutEvent(QFocusEvent *e) if (hasAcceptableInput() || d->control->fixup()) emit editingFinished(); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (d->control->echoMode() == Password || d->control->echoMode() == NoEcho) qt_mac_secure_keyboard(false); #endif diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 2477510520..5c79c64793 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -61,7 +61,7 @@ #ifdef Q_OS_OSX #include #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include #include QT_BEGIN_NAMESPACE @@ -80,7 +80,7 @@ public: #ifdef Q_OS_OSX , useUnifiedToolBar(false) #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC , useHIToolBar(false) , activateUnifiedToolbarAfterFullScreen(false) #endif @@ -95,7 +95,7 @@ public: #ifdef Q_OS_OSX bool useUnifiedToolBar; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool useHIToolBar; bool activateUnifiedToolbarAfterFullScreen; #endif @@ -1110,7 +1110,7 @@ void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget d_func()->layout->removeWidget(dockwidget); // in case it was already in here addDockWidget(area, dockwidget, orientation); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC //drawer support +#if 0 // Used to be included in Qt4 for Q_WS_MAC //drawer support QMacAutoReleasePool pool; extern bool qt_mac_is_macdrawer(const QWidget *); //qwidget_mac.cpp if (qt_mac_is_macdrawer(dockwidget)) { @@ -1514,7 +1514,7 @@ bool QMainWindow::event(QEvent *event) if (!d->explicitIconSize) setIconSize(QSize()); break; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case QEvent::Show: if (unifiedTitleAndToolBarOnMac()) d->layout->syncUnifiedToolbarVisibility(); @@ -1533,7 +1533,7 @@ bool QMainWindow::event(QEvent *event) } } break; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR) case QEvent::CursorChange: // CursorChange events are triggered as mouse moves to new widgets even @@ -1589,7 +1589,7 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set) } #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC Q_D(QMainWindow); if (!isWindow() || d->useHIToolBar == set || QSysInfo::MacintoshVersion < QSysInfo::MV_10_3) return; @@ -1624,7 +1624,7 @@ bool QMainWindow::unifiedTitleAndToolBarOnMac() const #ifdef Q_OS_OSX return d_func()->useUnifiedToolBar; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC return d_func()->useHIToolBar && !testAttribute(Qt::WA_MacBrushedMetal) && !(windowFlags() & Qt::FramelessWindowHint); #endif return false; diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 939453473a..8df197e05c 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -70,7 +70,7 @@ #include #include #include -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include # include #endif @@ -1129,11 +1129,11 @@ void QMainWindowLayout::removeToolBar(QToolBar *toolbar) QObject::disconnect(parentWidget(), SIGNAL(toolButtonStyleChanged(Qt::ToolButtonStyle)), toolbar, SLOT(_q_updateToolButtonStyle(Qt::ToolButtonStyle))); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (usesHIToolBar(toolbar)) { removeFromMacToolbar(toolbar); } else -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif { removeWidget(toolbar); } @@ -1148,7 +1148,7 @@ void QMainWindowLayout::addToolBar(Qt::ToolBarArea area, bool) { validateToolBarArea(area); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if ((area == Qt::TopToolBarArea) && layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) { insertIntoMacToolbar(0, toolbar); @@ -1174,11 +1174,11 @@ void QMainWindowLayout::addToolBar(Qt::ToolBarArea area, */ void QMainWindowLayout::insertToolBar(QToolBar *before, QToolBar *toolbar) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (usesHIToolBar(before)) { insertIntoMacToolbar(before, toolbar); } else -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif { addChildWidget(toolbar); QLayoutItem * item = layoutState.toolBarAreaLayout.insertToolBar(before, toolbar); @@ -1207,7 +1207,7 @@ Qt::ToolBarArea QMainWindowLayout::toolBarArea(QToolBar *toolbar) const case QInternal::BottomDock: return Qt::BottomToolBarArea; default: break; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (pos == QInternal::DockCount) { if (qtoolbarsInUnifiedToolbarList.contains(toolbar)) return Qt::TopToolBarArea; @@ -1230,7 +1230,7 @@ void QMainWindowLayout::getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar void QMainWindowLayout::toggleToolBarsVisible() { bool updateNonUnifiedParts = true; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (layoutState.mainWindow->unifiedTitleAndToolBarOnMac()) { // If we hit this case, someone has pressed the "toolbar button" which will // toggle the unified toolbar visibility, because that's what the user wants. @@ -1876,7 +1876,7 @@ QSize QMainWindowLayout::minimumSize() const const QSize sbMin = statusbar ? statusbar->minimumSize() : QSize(0, 0); minSize = QSize(qMax(sbMin.width(), minSize.width()), sbMin.height() + minSize.height()); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC const QSize storedSize = minSize; int minWidth = 0; foreach (QToolBar *toolbar, qtoolbarsInUnifiedToolbarList) { @@ -2186,7 +2186,7 @@ QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLay #endif // QT_NO_DOCKWIDGET , widgetAnimator(this) , pluggingWidget(0) -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC , blockVisiblityCheck(false) #endif { @@ -2213,7 +2213,7 @@ QMainWindowLayout::~QMainWindowLayout() layoutState.deleteAllLayoutItems(); layoutState.deleteCentralWidgetItem(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC cleanUpMacToolbarItems(); #endif @@ -2581,7 +2581,7 @@ bool QMainWindowLayout::restoreState(QDataStream &stream) // HIToolbar. bool QMainWindowLayout::usesHIToolBar(QToolBar *toolbar) const { -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC Q_UNUSED(toolbar); return false; #else diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h index c06122b9c7..6e8b965431 100644 --- a/src/widgets/widgets/qmainwindowlayout_p.h +++ b/src/widgets/widgets/qmainwindowlayout_p.h @@ -325,7 +325,7 @@ private: #ifndef QT_NO_TABBAR void updateTabBarShapes(); #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC static OSStatus qtmacToolbarDelegate(EventHandlerCallRef, EventRef , void *); static OSStatus qtoolbarInHIToolbarHandler(EventHandlerCallRef inCallRef, EventRef event, void *data); @@ -358,7 +358,7 @@ public: QUnifiedToolbarSurface *unifiedSurface; void updateUnifiedToolbarOffset(); -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif }; #if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_DEBUG_STREAM) diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index 5f3aff5e10..183f1c2848 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -160,7 +160,7 @@ #include #include -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) && !defined(QT_NO_STYLE_MAC) +#if 0 /* Used to be included in Qt4 for Q_WS_MAC */ && !defined(QT_NO_STYLE_MAC) #include #endif #include @@ -2493,7 +2493,7 @@ bool QMdiArea::event(QEvent *event) { Q_D(QMdiArea); switch (event->type()) { -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN // QWidgetPrivate::hide_helper activates another sub-window when closing a // modal dialog on Windows (see activateWindow() inside the ifdef). case QEvent::WindowUnblocked: @@ -2557,7 +2557,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event) QKeyEvent *keyEvent = static_cast(event); // Ingore key events without a Ctrl modifier (except for press/release on the modifier itself). -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (!(keyEvent->modifiers() & Qt::MetaModifier) && keyEvent->key() != Qt::Key_Meta) #else if (!(keyEvent->modifiers() & Qt::ControlModifier) && keyEvent->key() != Qt::Key_Control) @@ -2576,7 +2576,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event) // 3) Ctrl-Shift-Tab (Tab, Tab, ...) -> iterate through all windows in the opposite // direction (activatePreviousSubWindow()) switch (keyEvent->key()) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC case Qt::Key_Meta: #else case Qt::Key_Control: diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp index afe87c6af9..2fff2fc729 100644 --- a/src/widgets/widgets/qmdisubwindow.cpp +++ b/src/widgets/widgets/qmdisubwindow.cpp @@ -280,7 +280,7 @@ static inline bool isHoverControl(QStyle::SubControl control) return control != QStyle::SC_None && control != QStyle::SC_TitleBarLabel; } -#if defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN static inline QRgb colorref2qrgb(COLORREF col) { return qRgb(GetRValue(col),GetGValue(col),GetBValue(col)); @@ -1932,7 +1932,7 @@ QPalette QMdiSubWindowPrivate::desktopPalette() const QPalette newPalette = q->palette(); bool colorsInitialized = false; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN // ask system properties on windows +#if 0 // Used to be included in Qt4 for Q_WS_WIN // ask system properties on windows #ifndef SPI_GETGRADIENTCAPTIONS #define SPI_GETGRADIENTCAPTIONS 0x1008 #endif @@ -1968,7 +1968,7 @@ QPalette QMdiSubWindowPrivate::desktopPalette() const newPalette.color(QPalette::Inactive, QPalette::Highlight)); } } -#endif // Q_DEAD_CODE_FROM_QT4_WIN +#endif if (!colorsInitialized) { newPalette.setColor(QPalette::Active, QPalette::Highlight, newPalette.color(QPalette::Active, QPalette::Highlight)); diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 27f1b16f60..7e01f6f3d5 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -811,7 +811,7 @@ void QPlainTextEditPrivate::init(const QString &txt) viewport->setCursor(Qt::IBeamCursor); #endif originalOffsetY = 0; -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN setSingleFingerPanEnabled(true); #endif } diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index bf10b9fb75..3b1440edb6 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -56,10 +56,10 @@ #include "qdebug.h" #include "qlayoutitem.h" #include "qdialogbuttonbox.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include "private/qmacstyle_mac_p.h" #include "private/qmacstyle_mac_p_p.h" -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif #ifndef QT_NO_ACCESSIBILITY #include "qaccessible.h" @@ -675,7 +675,7 @@ bool QPushButton::event(QEvent *e) return QAbstractButton::event(e); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC /*! \reimp */ bool QPushButton::hitButton(const QPoint &pos) const { @@ -704,7 +704,7 @@ bool QPushButtonPrivate::hitButton(const QPoint &pos) q->rect().height() - QMacStylePrivate::PushButtonBottomOffset); return roundedRect.contains(pos); } -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif QT_END_NAMESPACE diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h index 56d4d1de20..859ac247fb 100644 --- a/src/widgets/widgets/qpushbutton.h +++ b/src/widgets/widgets/qpushbutton.h @@ -87,9 +87,9 @@ public Q_SLOTS: protected: bool event(QEvent *e) Q_DECL_OVERRIDE; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool hitButton(const QPoint &pos) const; -#endif // Q_DEAD_CODE_FROM_QT4_MAC +#endif void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE; void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE; diff --git a/src/widgets/widgets/qpushbutton_p.h b/src/widgets/widgets/qpushbutton_p.h index cd453a1339..ee41c345c8 100644 --- a/src/widgets/widgets/qpushbutton_p.h +++ b/src/widgets/widgets/qpushbutton_p.h @@ -71,7 +71,7 @@ public: inline void init() { resetLayoutItemMargins(); } static QPushButtonPrivate* get(QPushButton *b) { return b->d_func(); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool hitButton(const QPoint &pos); #endif #ifndef QT_NO_MENU diff --git a/src/widgets/widgets/qrubberband.cpp b/src/widgets/widgets/qrubberband.cpp index 123c955684..c91f837093 100644 --- a/src/widgets/widgets/qrubberband.cpp +++ b/src/widgets/widgets/qrubberband.cpp @@ -47,7 +47,7 @@ #include "qstyle.h" #include "qstyleoption.h" -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC # include # include #endif @@ -142,12 +142,12 @@ QRubberBand::QRubberBand(Shape s, QWidget *p) Q_D(QRubberBand); d->shape = s; setAttribute(Qt::WA_TransparentForMouseEvents); -#ifndef Q_DEAD_CODE_FROM_QT4_WIN +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN setAttribute(Qt::WA_NoSystemBackground); -#endif //Q_DEAD_CODE_FROM_QT4_WIN +#endif setAttribute(Qt::WA_WState_ExplicitShowHide); setVisible(false); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (isWindow()) { createWinId(); extern OSWindowRef qt_mac_window_for(const QWidget *); //qwidget_mac.cpp diff --git a/src/widgets/widgets/qsizegrip.cpp b/src/widgets/widgets/qsizegrip.cpp index dd0b383d2b..5150601366 100644 --- a/src/widgets/widgets/qsizegrip.cpp +++ b/src/widgets/widgets/qsizegrip.cpp @@ -52,7 +52,7 @@ #include "qdebug.h" #include -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include #endif @@ -82,7 +82,7 @@ public: Qt::Corner m_corner; bool gotMousePress; QPointer tlw; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC void updateMacSizer(bool hide) const; #endif Qt::Corner corner() const; @@ -120,7 +120,7 @@ public: updateTopLevelWidget(); if (tlw && showSizeGrip) { Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sizeGripNotVisibleState |= Qt::WindowMaximized; #endif // Don't show the size grip if the tlw is maximized or in full screen mode. @@ -142,7 +142,7 @@ QSizeGripPrivate::QSizeGripPrivate() { } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC void QSizeGripPrivate::updateMacSizer(bool hide) const { Q_Q(const QSizeGrip); @@ -225,7 +225,7 @@ void QSizeGripPrivate::init() Q_Q(QSizeGrip); m_corner = q->isLeftToRight() ? Qt::BottomRightCorner : Qt::BottomLeftCorner; -#if !defined(QT_NO_CURSOR) && !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if !defined(QT_NO_CURSOR) && !0 /* Used to be included in Qt4 for Q_WS_MAC */ q->setCursor(m_corner == Qt::TopLeftCorner || m_corner == Qt::BottomRightCorner ? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor); #endif @@ -438,7 +438,7 @@ void QSizeGrip::moveEvent(QMoveEvent * /*moveEvent*/) return; d->m_corner = d->corner(); -#if !defined(QT_NO_CURSOR) && !defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if !defined(QT_NO_CURSOR) && !0 /* Used to be included in Qt4 for Q_WS_MAC */ setCursor(d->m_corner == Qt::TopLeftCorner || d->m_corner == Qt::BottomRightCorner ? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor); #endif @@ -449,7 +449,7 @@ void QSizeGrip::moveEvent(QMoveEvent * /*moveEvent*/) */ void QSizeGrip::showEvent(QShowEvent *showEvent) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d_func()->updateMacSizer(false); #endif QWidget::showEvent(showEvent); @@ -460,7 +460,7 @@ void QSizeGrip::showEvent(QShowEvent *showEvent) */ void QSizeGrip::hideEvent(QHideEvent *hideEvent) { -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d_func()->updateMacSizer(true); #endif QWidget::hideEvent(hideEvent); @@ -484,7 +484,7 @@ bool QSizeGrip::eventFilter(QObject *o, QEvent *e) return QWidget::eventFilter(o, e); } Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen; -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC sizeGripNotVisibleState |= Qt::WindowMaximized; #endif // Don't show the size grip if the tlw is maximized or in full screen mode. diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp index 5f1c373bb1..bdf728ead2 100644 --- a/src/widgets/widgets/qstatusbar.cpp +++ b/src/widgets/widgets/qstatusbar.cpp @@ -87,7 +87,7 @@ public: int savedStrut; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC QPoint dragStart; #endif @@ -746,7 +746,7 @@ bool QStatusBar::event(QEvent *e) // On Mac OS X Leopard it is possible to drag the window by clicking // on the tool bar on most applications. -#ifndef Q_DEAD_CODE_FROM_QT4_MAC +#if 1 // Used to be excluded in Qt4 for Q_WS_MAC return QWidget::event(e); #else // Enable drag-click only if the status bar is the status bar for a diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index b6a3ef7eb8..8aa06e9a4d 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -63,7 +63,7 @@ #ifndef QT_NO_TABBAR -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC #include #include #endif @@ -1922,7 +1922,7 @@ void QTabBar::mousePressEvent(QMouseEvent *event) d->moveTabFinished(d->pressedIndex); d->pressedIndex = d->indexAtPos(event->pos()); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->previousPressedIndex = d->pressedIndex; #endif if (d->validIndex(d->pressedIndex)) { @@ -2004,7 +2004,7 @@ void QTabBar::mouseMoveEvent(QMouseEvent *event) update(); } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC } else if (!d->documentMode && event->buttons() == Qt::LeftButton && d->previousPressedIndex != -1) { int newPressedIndex = d->indexAtPos(event->pos()); if (d->pressedIndex == -1 && d->previousPressedIndex == newPressedIndex) { @@ -2102,7 +2102,7 @@ void QTabBar::mouseReleaseEvent(QMouseEvent *event) event->ignore(); return; } -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC d->previousPressedIndex = -1; #endif if (d->movable && d->dragInProgress && d->validIndex(d->pressedIndex)) { diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h index 0e9dce84b3..e8d5503fdf 100644 --- a/src/widgets/widgets/qtabbar_p.h +++ b/src/widgets/widgets/qtabbar_p.h @@ -91,7 +91,7 @@ public: selectionBehaviorOnRemove(QTabBar::SelectRightTab), paintWithOffsets(true), movable(false), dragInProgress(false), documentMode(false), autoHide(false), changeCurrentOnDrag(false), switchTabCurrentIndex(-1), switchTabTimerId(0), movingTab(0) -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC , previousPressedIndex(-1) #endif {} @@ -228,7 +228,7 @@ public: int switchTabTimerId; QMovableTabWidget *movingTab; -#ifdef Q_DEAD_CODE_FROM_QT4_MAC +#if 0 // Used to be included in Qt4 for Q_WS_MAC int previousPressedIndex; #endif // shared by tabwidget and qtabbar diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index f354495e70..66bf2919eb 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -184,7 +184,7 @@ void QTextEditPrivate::init(const QString &html) #ifndef QT_NO_CURSOR viewport->setCursor(Qt::IBeamCursor); #endif -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN setSingleFingerPanEnabled(true); #endif } diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp index 61bc6d19cf..2a0912df0a 100644 --- a/src/widgets/widgets/qtoolbar.cpp +++ b/src/widgets/widgets/qtoolbar.cpp @@ -322,7 +322,7 @@ bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event) startDrag(moving); if (!moving && !wasDragging) { -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN grabMouseWhileInWindow(); #else q->grabMouse(); diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index 66f17dbe33..9b65dc43d1 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -72,7 +72,7 @@ int QWidgetLineControl::redoTextLayout() const QTextLine l = m_textLayout.createLine(); m_textLayout.endLayout(); -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (m_threadChecks) m_textLayoutThread = QThread::currentThread(); #endif diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h index db9039e302..d4a4534fb5 100644 --- a/src/widgets/widgets/qwidgetlinecontrol_p.h +++ b/src/widgets/widgets/qwidgetlinecontrol_p.h @@ -91,7 +91,7 @@ public: m_selstart(0), m_selend(0), m_passwordEchoEditing(false) , m_passwordEchoTimer(0) , m_passwordMaskDelay(-1) -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC , m_threadChecks(false) , m_textLayoutThread(0) #endif @@ -382,14 +382,14 @@ public: QTextLayout *textLayout() const { -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC if (m_threadChecks && QThread::currentThread() != m_textLayoutThread) redoTextLayout(); #endif return &m_textLayout; } -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC void setThreadChecks(bool threadChecks) { m_threadChecks = threadChecks; @@ -512,7 +512,7 @@ private: } int redoTextLayout() const; -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) +#if 0 // Used to be included in Qt4 for Q_WS_MAC bool m_threadChecks; mutable QThread *m_textLayoutThread; #endif diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp index 2a7b1eeecc..016598849b 100644 --- a/src/widgets/widgets/qwidgetresizehandler.cpp +++ b/src/widgets/widgets/qwidgetresizehandler.cpp @@ -120,7 +120,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) if (!widget->rect().contains(widget->mapFromGlobal(e->globalPos()))) return false; if (e->button() == Qt::LeftButton) { -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 /* Implicit grabs do not stop the X server from changing the cursor in children, which looks *really* bad when @@ -134,7 +134,7 @@ bool QWidgetResizeHandler::eventFilter(QObject *o, QEvent *ee) # else widget->grabMouse(); # endif // QT_NO_CURSOR -#endif // Q_DEAD_CODE_FROM_QT4_X11 +#endif buttonDown = false; emit activate(); bool me = movingEnabled; diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp index c349d0df09..895f68bbd7 100644 --- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp @@ -262,7 +262,7 @@ void tst_QPixmap::fromImage() image.fill(0x7f7f7f7f); const QPixmap pixmap = QPixmap::fromImage(image); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle()) QSKIP("Requires XRender support"); #endif @@ -486,7 +486,7 @@ void tst_QPixmap::fill() else pm = QPixmap(400, 400); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (!bitmap && pm.handle()->classId() == QPlatformPixmap::X11Class && !pm.x11PictureHandle()) QSKIP("Requires XRender support"); #endif @@ -516,7 +516,7 @@ void tst_QPixmap::fill() void tst_QPixmap::fill_transparent() { QPixmap pixmap(10, 10); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (pixmap.handle()->classId() == QPlatformPixmap::X11Class && !pixmap.x11PictureHandle()) QSKIP("Requires XRender support"); #endif diff --git a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp index ab893385e3..9dd9ab05e8 100644 --- a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp +++ b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp @@ -107,7 +107,7 @@ private slots: void qrgba64Premultiply(); void qrgba64Equivalence(); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 void setallowX11ColorNames(); #endif }; @@ -1403,7 +1403,7 @@ void tst_QColor::achromaticHslHue() QCOMPARE(hsl.hslHue(), -1); } -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 void tst_QColor::setallowX11ColorNames() { #if defined(Q_OS_IRIX) diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 1bd7f67810..8a9c4ca84e 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -497,7 +497,7 @@ void tst_QPainter::drawPixmap_comp() destPm.fill(c1); srcPm.fill(c2); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) +#if 0 // Used to be included in Qt4 for Q_WS_X11 if (!destPm.x11PictureHandle()) QSKIP("Requires XRender support"); #endif diff --git a/tests/auto/gui/painting/qregion/tst_qregion.cpp b/tests/auto/gui/painting/qregion/tst_qregion.cpp index 6a297dbfc2..b20ad0f33c 100644 --- a/tests/auto/gui/painting/qregion/tst_qregion.cpp +++ b/tests/auto/gui/painting/qregion/tst_qregion.cpp @@ -33,7 +33,7 @@ #include #include #include -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 #include #endif @@ -79,7 +79,7 @@ private slots: void isEmpty_data(); void isEmpty(); -#if defined(Q_DEAD_CODE_FROM_QT4_X11) && defined(QT_BUILD_INTERNAL) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && defined(QT_BUILD_INTERNAL) void clipRectangles(); #endif @@ -893,7 +893,7 @@ void tst_QRegion::isEmpty() QVERIFY(region.rects().isEmpty()); } -#if defined(Q_DEAD_CODE_FROM_QT4_X11) && defined(QT_BUILD_INTERNAL) +#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && defined(QT_BUILD_INTERNAL) void tst_QRegion::clipRectangles() { QRegion region(30, 30, 30, 30); diff --git a/tests/auto/opengl/qglthreads/tst_qglthreads.cpp b/tests/auto/opengl/qglthreads/tst_qglthreads.cpp index b60be15754..ce895f734a 100644 --- a/tests/auto/opengl/qglthreads/tst_qglthreads.cpp +++ b/tests/auto/opengl/qglthreads/tst_qglthreads.cpp @@ -726,7 +726,7 @@ void tst_QGLThreads::painterOnPixmapInThread() if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedOpenGL) || !QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ThreadedPixmaps)) QSKIP("No platformsupport for ThreadedOpenGL or ThreadedPixmaps"); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 QSKIP("Drawing text in threads onto X11 drawables currently crashes on some X11 servers."); #endif PaintThreadManager painterThreads(5); diff --git a/tests/auto/other/lancelot/paintcommands.cpp b/tests/auto/other/lancelot/paintcommands.cpp index 8d6886a6c6..2e6cb09aa5 100644 --- a/tests/auto/other/lancelot/paintcommands.cpp +++ b/tests/auto/other/lancelot/paintcommands.cpp @@ -2393,7 +2393,7 @@ void PaintCommands::command_surface_begin(QRegExp re) m_painter->fillRect(QRect(0, 0, qRound(w), qRound(h)), Qt::transparent); m_painter->restore(); #endif -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 } else if (m_type == WidgetType) { m_surface_pixmap = QPixmap(qRound(w), qRound(h)); m_surface_pixmap.fill(Qt::transparent); @@ -2444,7 +2444,7 @@ void PaintCommands::command_surface_end(QRegExp) m_painter->beginNativePainting(); m_painter->endNativePainting(); #endif -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 } else if (m_type == WidgetType) { m_painter->drawPixmap(m_surface_rect.topLeft(), m_surface_pixmap); m_surface_pixmap = QPixmap(); diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 01708d526c..d99c056abe 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -2775,7 +2775,7 @@ void tst_QGraphicsProxyWidget::windowOpacity() // disabled on platforms without alpha channel support in QPixmap (e.g., // X11 without XRender). int paints = 0; -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 paints = !X11->use_xrender; #endif QTRY_COMPARE(eventSpy.counts[QEvent::UpdateRequest], 0); diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index 30c1b9c44b..5567641dde 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -1000,7 +1000,7 @@ void tst_QAbstractItemView::setItemDelegate() centerOnScreen(&v); moveCursorAway(&v); v.show(); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 QCursor::setPos(v.geometry().center()); #endif QApplication::setActiveWindow(&v); diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp index 2b8f3032bf..52d7a39406 100644 --- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp @@ -474,7 +474,7 @@ void tst_QMdiArea::subWindowActivated2() // Check that we only emit _one_ signal and the active window // is unchanged after hide/show. mdiArea.hide(); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 qt_x11_wait_for_window_manager(&mdiArea); #endif QTest::qWait(100); diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp index 76c3ac4143..a9d8c48d63 100644 --- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp +++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp @@ -49,7 +49,7 @@ #include QT_BEGIN_NAMESPACE -#if !defined(Q_DEAD_CODE_FROM_QT4_WIN) +#if 1 // Used to be excluded in Qt4 for Q_WS_WIN extern bool qt_tab_all_widgets(); #endif QT_END_NAMESPACE diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp index 70b9134718..de4e9e5ad7 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp @@ -30,7 +30,7 @@ #include -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN #define CALLGRIND_START_INSTRUMENTATION {} #define CALLGRIND_STOP_INSTRUMENTATION {} #else diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp index 957ad06783..6c97f94683 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp @@ -27,14 +27,14 @@ ****************************************************************************/ #include -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN #define CALLGRIND_START_INSTRUMENTATION {} #define CALLGRIND_STOP_INSTRUMENTATION {} #else #include "valgrind/callgrind.h" #endif -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 extern void qt_x11_wait_for_window_manager(QWidget *); #endif @@ -89,7 +89,7 @@ int main(int argc, char *argv[]) View view(&scene, item); view.resize(300, 300); view.show(); -#ifdef Q_DEAD_CODE_FROM_QT4_X11 +#if 0 // Used to be included in Qt4 for Q_WS_X11 qt_x11_wait_for_window_manager(&view); #endif diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp index 5b6083d5ac..1fbb229cd8 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp @@ -27,7 +27,7 @@ ****************************************************************************/ #include -#ifdef Q_DEAD_CODE_FROM_QT4_WIN +#if 0 // Used to be included in Qt4 for Q_WS_WIN #define CALLGRIND_START_INSTRUMENTATION {} #define CALLGRIND_STOP_INSTRUMENTATION {} #else diff --git a/tests/manual/lance/main.cpp b/tests/manual/lance/main.cpp index 5d7edc0a99..c1ace138f9 100644 --- a/tests/manual/lance/main.cpp +++ b/tests/manual/lance/main.cpp @@ -327,7 +327,7 @@ int main(int argc, char **argv) checkers_background = false; } } else { -#if defined (Q_DEAD_CODE_FROM_QT4_WIN) +#if 0 // Used to be included in Qt4 for Q_WS_WIN QString input = QString::fromLocal8Bit(argv[i]); if (input.indexOf('*') >= 0) { QFileInfo info(input); diff --git a/tests/manual/textrendering/glyphshaping/main.cpp b/tests/manual/textrendering/glyphshaping/main.cpp index 62d2475462..c3acda953d 100644 --- a/tests/manual/textrendering/glyphshaping/main.cpp +++ b/tests/manual/textrendering/glyphshaping/main.cpp @@ -160,7 +160,7 @@ bool dumpHtml(const QString &pathName) QString platformName = QString::fromLatin1( #if defined(Q_OS_WIN) "Win32" -#elif defined(Q_DEAD_CODE_FROM_QT4_X11) +#elif 0 // Used to be included in Qt4 for Q_WS_X11 "X11" #else "" From fca0aa676e5288d2b867f24263059233253510b5 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 12 Oct 2016 16:56:20 +0300 Subject: [PATCH 037/196] QPathClipper: remove homebrew 'qRemoveDuplicates' algorithm Use std::unique Change-Id: Iae2e80d16b5a443ee5023224f48c325197c23029 Reviewed-by: Marc Mutz Reviewed-by: Edward Welbourne --- src/gui/painting/qpathclipper.cpp | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp index f92a681eca..addd9c0c2c 100644 --- a/src/gui/painting/qpathclipper.cpp +++ b/src/gui/painting/qpathclipper.cpp @@ -1458,25 +1458,6 @@ QPathClipper::QPathClipper(const QPainterPath &subject, bMask = clipPath.fillRule() == Qt::WindingFill ? ~0x0 : 0x1; } -template -Iterator qRemoveDuplicates(Iterator begin, Iterator end, Equality eq) -{ - if (begin == end) - return end; - - Iterator last = begin; - ++begin; - Iterator insert = begin; - for (Iterator it = begin; it != end; ++it) { - if (!eq(*it, *last)) { - *insert++ = *it; - last = it; - } - } - - return insert; -} - static void clear(QWingedEdge& list, int edge, QPathEdge::Traversal traversal) { QWingedEdge::TraversalStatus status; @@ -1643,7 +1624,7 @@ bool QPathClipper::doClip(QWingedEdge &list, ClipperMode mode) y_coords << list.vertex(i)->y; std::sort(y_coords.begin(), y_coords.end()); - y_coords.resize(qRemoveDuplicates(y_coords.begin(), y_coords.end(), fuzzyCompare) - y_coords.begin()); + y_coords.erase(std::unique(y_coords.begin(), y_coords.end(), fuzzyCompare), y_coords.end()); #ifdef QDEBUG_CLIPPER printf("sorted y coords:\n"); From 9ebfacb6883a5ed0095b1c816f3441eab8b675aa Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 4 Oct 2016 16:58:47 +0200 Subject: [PATCH 038/196] Android: Re-enable asset extraction for styling When the new configure system was introduced, it accidentally disabled automatic extraction of style assets on Android. This patch puts it back in. Note that the style extraction is not specific to Qt Widgets, but rather Qt Gui, like other QPA options. Task-number: QTBUG-56328 Change-Id: Ica33c3562c6dd6483050075f5c8ed5d28cd621a4 Reviewed-by: Lars Knoll Reviewed-by: Oswald Buddenhagen --- src/gui/configure.json | 6 ++++++ src/plugins/platforms/android/android.pro | 2 +- src/widgets/configure.json | 6 ------ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/configure.json b/src/gui/configure.json index 318efe5401..b361679101 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -7,6 +7,7 @@ "commandline": { "options": { + "android-style-assets": "boolean", "angle": "boolean", "directfb": "boolean", "directwrite": "boolean", @@ -414,6 +415,11 @@ "condition": "features.accessibility && features.xcb && features.dbus", "output": [ "privateFeature", "feature" ] }, + "android-style-assets": { + "label": "Android Style Assets", + "condition": "config.android", + "output": [ "privateFeature" ] + }, "angle": { "label": "ANGLE", "autoDetect": "features.opengles2 || features.opengl-dynamic", diff --git a/src/plugins/platforms/android/android.pro b/src/plugins/platforms/android/android.pro index 045e55ec65..544b2ca63a 100644 --- a/src/plugins/platforms/android/android.pro +++ b/src/plugins/platforms/android/android.pro @@ -72,7 +72,7 @@ HEADERS += $$PWD/qandroidplatformintegration.h \ $$PWD/qandroidplatformforeignwindow.h \ $$PWD/qandroideventdispatcher.h -android-style-assets: SOURCES += $$PWD/extract.cpp +qtConfig(android-style-assets): SOURCES += $$PWD/extract.cpp else: SOURCES += $$PWD/extract-dummy.cpp PLUGIN_TYPE = platforms diff --git a/src/widgets/configure.json b/src/widgets/configure.json index c1931d9d80..b241fcdf11 100644 --- a/src/widgets/configure.json +++ b/src/widgets/configure.json @@ -8,7 +8,6 @@ "commandline": { "options": { - "android-style-assets": "boolean", "gtk": { "type": "boolean", "name": "gtk3" }, "style-windows": "boolean", "style-windowsxp": "boolean", @@ -78,11 +77,6 @@ "condition": "features.style-windows && features.properties && features.cssparser", "output": [ "publicFeature", "feature" ] }, - "android-style-assets": { - "label": "Android Style Assets", - "condition": "features.style-android", - "output": [ "privateConfig" ] - }, "effects": { "label": "Effects", "purpose": "Provides special widget effects (e.g. fading and scrolling).", From 2b9fe7d42d3e143edf8879c7af7725713611b0d3 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 4 Oct 2016 10:32:20 +0200 Subject: [PATCH 039/196] eglfs: clean up includes in the shared kms code Avoid unnecessary EGL and eglfs-specific includes in order to have a clearer view of the dependencies. Change-Id: Ifbd7dc4bd64024cc1ee48cd9f2607d1b5cdda1a2 Reviewed-by: Andy Nichols --- .../eglfs_kms_support/qeglfskmsintegration.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp index 6c30e8f930..5368a6d031 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp @@ -42,15 +42,12 @@ #include "qeglfskmsintegration.h" #include "qeglfskmsdevice.h" #include "qeglfskmsscreen.h" -#include "private/qeglfswindow_p.h" -#include "private/qeglfscursor_p.h" -#include #include #include #include +#include #include -#include #include #include From f71aa48138e939ccb687ffab6afca734b1b13973 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 12 Oct 2016 09:19:11 +0200 Subject: [PATCH 040/196] Fix resolution of OPENSSL_LIBS in ssl.pri Task-number: QTBUG-55530 Change-Id: Icc5ae9849e41479732eb44d01d9ea37aa3da16f8 Reviewed-by: Oswald Buddenhagen --- src/network/ssl/ssl.pri | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri index 8139af50af..79351017a6 100644 --- a/src/network/ssl/ssl.pri +++ b/src/network/ssl/ssl.pri @@ -79,6 +79,8 @@ qtConfig(ssl) { # - libs in \lib\VC\static # - configure: -openssl -openssl-linked -I \include -L \lib\VC\static OPENSSL_LIBS="-lUser32 -lAdvapi32 -lGdi32" OPENSSL_LIBS_DEBUG="-lssleay32MDd -llibeay32MDd" OPENSSL_LIBS_RELEASE="-lssleay32MD -llibeay32MD" + include($$OUT_PWD/qtnetwork-config.pri) + CONFIG(debug, debug|release) { LIBS_PRIVATE += $$OPENSSL_LIBS_DEBUG } else { From aec9cebf8c1ef4b9d497f76337d7af0b8b5f8d46 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 12 Oct 2016 16:36:50 +0200 Subject: [PATCH 041/196] make setting OPENSSL_LIBS_{DEBUG,RELEASE} work with dynamic builds while it's probably not really necessary (which is why it wasn't implemented before), just ignoring the options is somewhat inconsistent and a deviation from historical behavior. Task-number: QTBUG-55530 Change-Id: I9441bf7be50ab5c997bb745e2525048ca23e4cd5 Reviewed-by: Jake Petroules Reviewed-by: Kai Koehne --- src/network/configure.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/network/configure.json b/src/network/configure.json index 97bf92167d..124fa1718f 100644 --- a/src/network/configure.json +++ b/src/network/configure.json @@ -60,7 +60,14 @@ }, "condition": "config.win32 && !features.shared" }, - { "libs": "-lssleay32 -llibeay32", "condition": "config.win32 && features.shared" }, + { + "libs": "-lssleay32 -llibeay32", + "builds": { + "debug": "", + "release": "" + }, + "condition": "config.win32 && features.shared" + }, { "libs": "-lssl -lcrypto", "condition": "!config.win32" } ] } From 9a1163c7aef3aec360d7a3bf95861ee61f5888f2 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 7 Oct 2016 17:18:50 +0200 Subject: [PATCH 042/196] exclude injected headers from headersclean check it makes no sense to check them, as they contain only #defines anyway. Change-Id: I8b36139ee19471de0654c5eb3af262d0389a72f7 Reviewed-by: Lars Knoll --- bin/syncqt.pl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/syncqt.pl b/bin/syncqt.pl index 8a49da3891..9f5553281b 100755 --- a/bin/syncqt.pl +++ b/bin/syncqt.pl @@ -217,8 +217,6 @@ sub classNames { $$requires = ""; my $ihdrbase = basename($iheader); - my $classname = $classnames{$ihdrbase}; - push @ret, split(/,/, $classname) if ($classname); my $parsable = ""; if(open(F, "<$iheader")) { @@ -1042,7 +1040,11 @@ foreach my $lib (@modules_to_sync) { && $header =~ /_p\.h$/ && $subdir !~ /3rdparty/; check_header($lib, $header, $iheader, $public_header, $private_header); } - my @classes = $public_header && (!$minimal && $is_qt) ? classNames($iheader, \$clean_header, \$requires) : (); + my @classes = (); + push @classes, classNames($iheader, \$clean_header, \$requires) + if (!$shadow && $public_header && !$minimal && $is_qt); + my $classname = $classnames{$header}; + push @classes, split(/,/, $classname) if ($classname); if($showonly) { print "$header [$lib]\n"; foreach(@classes) { From 5c571055651b92315632b5a6ff8da6f9bddeea2a Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 10 Oct 2016 19:29:54 +0200 Subject: [PATCH 043/196] don't include injected headers into linker version script it makes no sense to version them, as they contain only #defines anyway. it also removes the need to special-case their location in shadow builds with pre-synced headers, which we actually failed to do anyway. Task-number: QTBUG-56286 Change-Id: I4ea717f7be56494cfea0572389bea173d7470b6e Reviewed-by: Lars Knoll --- bin/syncqt.pl | 5 +++++ mkspecs/features/qt_installs.prf | 2 +- mkspecs/features/qt_module.prf | 2 +- mkspecs/features/qt_module_headers.prf | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bin/syncqt.pl b/bin/syncqt.pl index 9f5553281b..372aa2b331 100755 --- a/bin/syncqt.pl +++ b/bin/syncqt.pl @@ -926,6 +926,7 @@ foreach my $lib (@modules_to_sync) { my $pri_install_classes = ""; my $pri_install_files = ""; my $pri_install_pfiles = ""; + my $pri_install_ipfiles = ""; my $pri_install_qpafiles = ""; my $pri_injections = ""; my $pri_clean_files = ""; @@ -1098,6 +1099,9 @@ foreach my $lib (@modules_to_sync) { elsif ($qpa_header) { $pri_install_qpafiles.= "$pri_install_iheader ";; } + elsif ($shadow) { + $pri_install_ipfiles .= "$pri_install_iheader "; + } else { $pri_install_pfiles.= "$pri_install_iheader ";; } @@ -1242,6 +1246,7 @@ foreach my $lib (@modules_to_sync) { $headers_pri_contents .= "SYNCQT.HEADER_FILES = $pri_install_files\n"; $headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n"; $headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n"; + $headers_pri_contents .= "SYNCQT.INJECTED_PRIVATE_HEADER_FILES = $pri_install_ipfiles\n"; $headers_pri_contents .= "SYNCQT.QPA_HEADER_FILES = $pri_install_qpafiles\n"; $headers_pri_contents .= "SYNCQT.CLEAN_HEADER_FILES = $pri_clean_files\n"; $headers_pri_contents .= "SYNCQT.INJECTIONS = $pri_injections\n"; diff --git a/mkspecs/features/qt_installs.prf b/mkspecs/features/qt_installs.prf index 3a5dbb6274..0d3dfb6b93 100644 --- a/mkspecs/features/qt_installs.prf +++ b/mkspecs/features/qt_installs.prf @@ -36,7 +36,7 @@ qt_install_headers { targ_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME INSTALLS += targ_headers - private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES + private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES private_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private INSTALLS += private_headers diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 46ec6bc4bf..27b1655296 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -114,7 +114,7 @@ lib_bundle { FRAMEWORK_HEADERS.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES FRAMEWORK_HEADERS.path = Headers FRAMEWORK_PRIVATE_HEADERS.version = Versions - FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES + FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES FRAMEWORK_PRIVATE_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/private FRAMEWORK_QPA_HEADERS.version = Versions FRAMEWORK_QPA_HEADERS.files = $$SYNCQT.QPA_HEADER_FILES diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf index 5a45007820..790a4ee29e 100644 --- a/mkspecs/features/qt_module_headers.prf +++ b/mkspecs/features/qt_module_headers.prf @@ -113,7 +113,7 @@ exists($$OUT_PWD/qt$${MODULE}-config.h) { $$fwd_rel/qt$${MODULE}-config_p.h:$$MODULE_VERSION/$$MODULE_INCNAME/private/qt$${MODULE}-config_p.h inst_rel = $$relative_path($$OUT_PWD, $$_PRO_FILE_PWD_) SYNCQT.HEADER_FILES += $$inst_rel/qt$${MODULE}-config.h - SYNCQT.PRIVATE_HEADER_FILES += $$inst_rel/qt$${MODULE}-config_p.h + SYNCQT.INJECTED_PRIVATE_HEADER_FILES += $$inst_rel/qt$${MODULE}-config_p.h } for (injection, SYNCQT.INJECTIONS) { From a89734360154cb9bf2aebf05c5d115b970d79871 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 11 Oct 2016 11:26:49 +0200 Subject: [PATCH 044/196] fix shadow builds with pre-synced headers, part 3 with the new configure system, all modules which have a configure.json also produce a private config header. the forwarding module pri needs to reflect that. Change-Id: If79e10a2643d55ad9aa9815f20297d36d9b9feec Reviewed-by: Kai Koehne Reviewed-by: Oswald Buddenhagen --- mkspecs/features/qt_module.prf | 5 +++++ mkspecs/features/qt_module_pris.prf | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 27b1655296..a89df18f3a 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -13,6 +13,11 @@ isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0) isEmpty(VERSION): VERSION = $$MODULE_VERSION isEmpty(VERSION): error("Module does not define version.") +exists($$OUT_PWD/qt$${MODULE}-config.pri) { + include($$OUT_PWD/qt$${MODULE}-config.pri) + CONFIG += generated_privates +} + # Compile as shared/DLL or static according to the option given to configure # unless overridden. Host builds are always static host_build|staticlib: CONFIG += static diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 9542a362d0..379f8cdf17 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -35,9 +35,6 @@ else: \ MODULE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE_ID}.pri MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri -exists($$OUT_PWD/qt$${MODULE}-config.pri): \ - include($$OUT_PWD/qt$${MODULE}-config.pri) - defineReplace(qtGetFeaturesForModule) { enabled = $$unique(QT.$${1}.enabled_features) disabled = $$unique(QT.$${1}.disabled_features) From 936e13212248e32f92f24765b4dd919610253d6f Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Fri, 7 Oct 2016 10:59:11 +0200 Subject: [PATCH 045/196] Add optimize-for-size case to ucstrncmp The SSE code had a case where tail-loop unrolling was disabled when optimizing for size. What would be even shorter, is to just do a straight-forward loop over the arrays and compare them. For anything else, we can just go for speed. Change-Id: Ifb31650e10e41409972a38014067dbd2927674c9 Reviewed-by: Thiago Macieira --- src/corelib/tools/qstring.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index bf1bc3e650..26bb0de278 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -446,6 +446,16 @@ extern "C" int qt_ucstrncmp_mips_dsp_asm(const ushort *a, // Unicode case-sensitive compare two same-sized strings static int ucstrncmp(const QChar *a, const QChar *b, int l) { +#ifdef __OPTIMIZE_SIZE__ + const QChar *end = a + l; + while (a < end) { + if (int diff = (int)a->unicode() - (int)b->unicode()) + return diff; + ++a; + ++b; + } + return 0; +#else #if defined(__mips_dsp) if (l >= 8) { return qt_ucstrncmp_mips_dsp_asm(reinterpret_cast(a), @@ -473,7 +483,7 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l) - reinterpret_cast(ptr + distance + idx)->unicode(); } } -# if defined(Q_COMPILER_LAMBDA) && !defined(__OPTIMIZE_SIZE__) +# if defined(Q_COMPILER_LAMBDA) const auto &lambda = [=](int i) -> int { return reinterpret_cast(ptr)[i].unicode() - reinterpret_cast(ptr + distance)[i].unicode(); @@ -529,6 +539,7 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l) } } return 0; +#endif } static int ucstrncmp(const QChar *a, const uchar *c, int l) From adbafab4ef921b2336511a21cb4300eafa1f4cad Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Thu, 8 Sep 2016 12:33:41 +0200 Subject: [PATCH 046/196] Specify timeout is in milliseconds Change-Id: I465b343b6fe64c8d1ce17e34be5f864e8556d374 Reviewed-by: Edward Welbourne --- src/testlib/qtestcase.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 876c573196..80aeff7bd1 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -244,7 +244,7 @@ static void stackTrace() \relates QTest The QTRY_VERIFY_WITH_TIMEOUT() macro is similar to QVERIFY(), but checks the \a condition - repeatedly, until either the condition becomes true or the \a timeout is + repeatedly, until either the condition becomes true or the \a timeout (in milliseconds) is reached. Between each evaluation, events will be processed. If the timeout is reached, a failure is recorded in the test log and the test won't be executed further. @@ -276,7 +276,7 @@ static void stackTrace() The QTRY_VERIFY2_WITH_TIMEOUT macro is similar to QTRY_VERIFY_WITH_TIMEOUT() except that it outputs a verbose \a message when \a condition is still false - after the specified \a timeout. The \a message is a plain C string. + after the specified \a timeout (in milliseconds). The \a message is a plain C string. Example: \code @@ -316,7 +316,7 @@ static void stackTrace() The QTRY_COMPARE_WITH_TIMEOUT() macro is similar to QCOMPARE(), but performs the comparison of the \a actual and \a expected values repeatedly, until either the two values - are equal or the \a timeout is reached. Between each comparison, events + are equal or the \a timeout (in milliseconds) is reached. Between each comparison, events will be processed. If the timeout is reached, a failure is recorded in the test log and the test won't be executed further. From b884fc00f4cb4b1ebe307374433b90448d413cf4 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 10 Oct 2016 13:57:33 +0200 Subject: [PATCH 047/196] configure.exe: Detect MSVC version with environment variable CL cleared The variable may contain the option /nologo, suppressing the output. Change-Id: I63eedde10aa7264cf56807a0844cadf6293a1d8c Task-number: QTBUG-56388 Reviewed-by: Laszlo Agocs Reviewed-by: Oswald Buddenhagen --- tools/configure/environment.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp index 10cf5ace2a..562c5db7a7 100644 --- a/tools/configure/environment.cpp +++ b/tools/configure/environment.cpp @@ -176,6 +176,7 @@ QString Environment::msvcVersion() const QString command = QFile::decodeName(qgetenv("ComSpec")) + QLatin1String(" /c ") + QLatin1String(compilerInfo(CC_MSVC2015)->executable) + QLatin1String(" /? 2>&1"); + SetEnvironmentVariable(L"CL", NULL); // May contain /nologo, which suppresses the version. QString version = execute(command, &returnValue); if (returnValue != 0) { cout << "Could not get cl version" << returnValue << qPrintable(version) << '\n';; From 3189313f226f550892a8bd4993ed52b44abea13a Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 11 Oct 2016 09:59:03 +0200 Subject: [PATCH 048/196] Doc: Fix typo in QtStyledItemDelegate::paint() docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-56399 Change-Id: Iaace0ed05098ab6d880b06a40d8e13aa9288c5ec Reviewed-by: Topi Reiniö Reviewed-by: Frederik Gladhorn --- src/widgets/itemviews/qstyleditemdelegate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index 483cfbdc36..7de3ca4b0c 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -360,7 +360,7 @@ void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, if it is enabled or selected. After painting, you should ensure that the painter is returned to - its the state it was supplied in when this function was called. + the state it was supplied in when this function was called. For example, it may be useful to call QPainter::save() before painting and QPainter::restore() afterwards. From 6851cf52afe188e94344ce22074af97e054f5896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Br=C3=BCning?= Date: Wed, 5 Oct 2016 16:34:38 +0200 Subject: [PATCH 049/196] Match MSVC version strings in other languages than English 5971b88ecd08a81720c3556029cecd35b0cf2cb5 introduced a regular expression to parse the Visual C++ compiler version that failed to match non-English output (e.g. German), which is produced by default on many systems. Task-number: QTBUG-56388 Change-Id: Id0408ce31e827e7aa087d8e3dd83024cf09dac23 Reviewed-by: Qt CI Bot Reviewed-by: Oswald Buddenhagen --- tools/configure/environment.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp index 562c5db7a7..60616f35e7 100644 --- a/tools/configure/environment.cpp +++ b/tools/configure/environment.cpp @@ -182,7 +182,7 @@ QString Environment::msvcVersion() cout << "Could not get cl version" << returnValue << qPrintable(version) << '\n';; version.clear(); } else { - QRegExp versionRegexp(QStringLiteral("^.*Compiler Version ([0-9.]+) for.*$")); + QRegExp versionRegexp(QStringLiteral("^.*\\b(\\d{2,2}\\.\\d{2,2}\\.\\d{5,5})\\b.*$")); Q_ASSERT(versionRegexp.isValid()); if (versionRegexp.exactMatch(version)) { version = versionRegexp.cap(1); From 59985b3c291f769cfc24cf361367757fce229397 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 7 Oct 2016 20:16:58 +0200 Subject: [PATCH 050/196] fix xcodebuilds without -sdk iphonesimulator the order of the arguments passed to addExclusiveBuilds() determines the name of the CONFIG flag which actually enables the mode. that is historically fixed to iphonesimulator_and_iphoneos and we cannot just change the order. to get around this, add a new "overload" of the function which allows specifying the flag independently from the order of the builds, and make use of it in ios' resolve_config.prf. amends d2b4a789c. Change-Id: Ia3fabea0c0c30beae680b57e75bdcdf35ef6503d Reviewed-by: Jake Petroules --- mkspecs/features/exclusive_builds.prf | 18 +++++++++++------- .../macx-ios-clang/features/resolve_config.prf | 4 ++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf index 5d06198ae4..f40cc99172 100644 --- a/mkspecs/features/exclusive_builds.prf +++ b/mkspecs/features/exclusive_builds.prf @@ -1,12 +1,9 @@ -defineTest(addExclusiveBuilds) { - lessThan(ARGC, 2): \ - error("addExclusiveBuilds() requires at least two arguments") - - !$$join(ARGS, _and_):!fix_output_dirs: \ +defineTest(addExclusiveBuildsProper) { + !$$1:!fix_output_dirs: \ return(true) - for(build, ARGS) { + for(build, 2) { isEmpty($${build}.name) { $${build}.name = $$title($$build) export($${build}.name) @@ -20,7 +17,7 @@ defineTest(addExclusiveBuilds) { export($${build}.dir_affix) } - $${build}.exclusive = $$ARGS + $${build}.exclusive = $$2 export($${build}.exclusive) QMAKE_EXCLUSIVE_BUILDS += $$build @@ -33,6 +30,13 @@ defineTest(addExclusiveBuilds) { return(true) } +defineTest(addExclusiveBuilds) { + lessThan(ARGC, 2): \ + error("addExclusiveBuilds() requires at least two arguments") + + addExclusiveBuildsProper($$join(ARGS, _and_), $$ARGS) +} + # Default directories to process QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR QMAKE_DIR_REPLACE_SANE += QGLTF_DIR diff --git a/mkspecs/macx-ios-clang/features/resolve_config.prf b/mkspecs/macx-ios-clang/features/resolve_config.prf index 64db2252cb..904296aea6 100644 --- a/mkspecs/macx-ios-clang/features/resolve_config.prf +++ b/mkspecs/macx-ios-clang/features/resolve_config.prf @@ -29,9 +29,9 @@ macx-xcode { # Switch the order to make sure that the first Makefile target is the right one !contains(QT_CONFIG, simulator_and_device):contains(QMAKE_MAC_SDK, ^iphonesimulator.*): \ - addExclusiveBuilds(iphonesimulator, iphoneos) + addExclusiveBuildsProper(iphonesimulator_and_iphoneos, iphonesimulator iphoneos) else: \ - addExclusiveBuilds(iphoneos, iphonesimulator) + addExclusiveBuildsProper(iphonesimulator_and_iphoneos, iphoneos iphonesimulator) } equals(TEMPLATE, subdirs) { From e9110b162cad1c07341fa3ed424484a58f9c642a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 14 Oct 2016 16:44:47 +0200 Subject: [PATCH 051/196] iOS: Report correct physical DPI for iPhone 7 Plus Task-number: QTBUG-56509 Change-Id: Ibae94262c2a4c917aeca00cb1a1c28e5ae60f0c4 Reviewed-by: Jake Petroules --- src/plugins/platforms/ios/qiosscreen.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm index 4018a02f8d..7d1c01f36b 100644 --- a/src/plugins/platforms/ios/qiosscreen.mm +++ b/src/plugins/platforms/ios/qiosscreen.mm @@ -201,8 +201,8 @@ QIOSScreen::QIOSScreen(UIScreen *screen) else m_depth = 24; - if (deviceIdentifier.contains(QRegularExpression("^iPhone(7,1|8,2)$"))) { - // iPhone 6 Plus or iPhone 6S Plus + if (deviceIdentifier.contains(QRegularExpression("^iPhone(7,1|8,2|9,2|9,4)$"))) { + // iPhone Plus models m_physicalDpi = 401; } else if (deviceIdentifier.contains(QRegularExpression("^iPad(1,1|2,[1-4]|3,[1-6]|4,[1-3]|5,[3-4]|6,[7-8])$"))) { // All iPads except the iPad Mini series From 81755e96230753fc70cecf3c6be28237015cdf9b Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 12 Oct 2016 10:35:55 +0200 Subject: [PATCH 052/196] get rid of Q_FONTCONFIGDATABASE define use fontconfig feature directly instead. easier to understand data flow, and less noisy compiler command lines. Change-Id: If80af4b08933049d553df685b41422d15e1e4f5c Reviewed-by: Jake Petroules --- mkspecs/features/qpa/genericunixfontdatabase.prf | 1 - .../fontdatabases/genericunix/qgenericunixfontdatabase_p.h | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf index ef8384a245..3b34eb0624 100644 --- a/mkspecs/features/qpa/genericunixfontdatabase.prf +++ b/mkspecs/features/qpa/genericunixfontdatabase.prf @@ -1,6 +1,5 @@ CONFIG += qpa/basicunixfontdatabase qtConfig(fontconfig) { - DEFINES += Q_FONTCONFIGDATABASE QMAKE_USE_PRIVATE += fontconfig/linkonly } diff --git a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h index 043f831530..267ef5e3f2 100644 --- a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h @@ -51,9 +51,9 @@ // We mean it. // -#include +#include -#ifdef Q_FONTCONFIGDATABASE +#if QT_CONFIG(fontconfig) #include typedef QFontconfigDatabase QGenericUnixFontDatabase; #else From 9a088e78690a3052f9c2d7e388e37957c2470ab1 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 30 Sep 2016 20:53:53 +0200 Subject: [PATCH 053/196] use helper libs via QMAKE_USE for that, qt_help_lib.prf gains the ability to write "external module pri" files that contain suitable information for QMAKE_USE. these files have a bunch of limitations: - they are not installed, because a) they are not relocatable and b) the helper libs' headers are not installed, either - it won't work with qmake -r, which is ok, as qt5 does not build with qmake -r anyway - deps are not transitive, neither at build nor at use time the freetype, harfbuzz-ng, pcre, and png helper libs have been adjusted accordingly, and their uses replaced with QMAKE_USE instances. this also allowed inlining the now trivial {harfbuzz,pcrc,png}_dependency.pri files. freetype_dependency.pri remains due to its funkiness. Change-Id: I16890eecb122e34ec49f3d3e68380d1ea71a198a Reviewed-by: Jake Petroules --- mkspecs/features/qt_helper_lib.prf | 25 +++++++++++++++++++ src/3rdparty/freetype/freetype.pro | 8 +++--- src/3rdparty/freetype_dependency.pri | 3 +-- src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro | 6 ++--- src/3rdparty/harfbuzz_dependency.pri | 6 ----- src/3rdparty/libpng/libpng.pro | 4 ++- src/3rdparty/pcre/pcre.pro | 4 ++- src/3rdparty/pcre_dependency.pri | 7 ------ src/3rdparty/png_dependency.pri | 6 ----- src/angle/src/libEGL/libEGL.pro | 3 ++- src/corelib/tools/tools.pri | 2 +- src/gui/image/image.pri | 2 +- src/gui/text/text.pri | 2 +- .../gl_integrations_plugin_base.pri | 5 +--- .../platforms/xcb/xcb-static/xcb-static.pro | 6 +++-- src/plugins/platforms/xcb/xcb_qpa_lib.pro | 5 +--- 16 files changed, 49 insertions(+), 45 deletions(-) delete mode 100644 src/3rdparty/harfbuzz_dependency.pri delete mode 100644 src/3rdparty/pcre_dependency.pri delete mode 100644 src/3rdparty/png_dependency.pri diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf index 8890866c64..f0072f82db 100644 --- a/mkspecs/features/qt_helper_lib.prf +++ b/mkspecs/features/qt_helper_lib.prf @@ -15,6 +15,9 @@ TEMPLATE = lib CONFIG -= qt QT = # In case qt is re-added. +INCLUDEPATH += $$MODULE_INCLUDEPATH +DEFINES += $$MODULE_DEFINES + CONFIG -= warning_clean # Don't presume 3rd party code to be clean load(qt_common) @@ -25,6 +28,28 @@ qtConfig(build_all): CONFIG += build_all DESTDIR = $$MODULE_BASE_OUTDIR/lib DLLDESTDIR = $$MODULE_BASE_OUTDIR/bin +!build_pass { + MODULE = $$replace(TARGET, ^qt, ) + MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_ext_$${MODULE}.pri + ucmodule = $$upper($$MODULE) + + MODULE_PRI_CONT = \ + "QMAKE_INCDIR_$${ucmodule} = $$val_escape(MODULE_INCLUDEPATH)" \ + "QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)" + MODULE_LIBS = -L$$DESTDIR -l$$TARGET + debug_and_release { + win32: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}d + darwin: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}_debug + MODULE_PRI_CONT += \ + "QMAKE_LIBS_$${ucmodule}_DEBUG = $$val_escape(MODULE_DEBUG_LIBS)" \ + "QMAKE_LIBS_$${ucmodule}_RELEASE = $$val_escape(MODULE_LIBS)" + } else { + MODULE_PRI_CONT += \ + "QMAKE_LIBS_$${ucmodule} = $$val_escape(MODULE_LIBS)" + } + write_file($$MODULE_PRI, MODULE_PRI_CONT)|error() +} + # In static builds of Qt, convenience libraries must be installed, # as in this case they are not linked to the final library/plugin. installed|if(!not_installed:qtConfig(static)): load(qt_installs) diff --git a/src/3rdparty/freetype/freetype.pro b/src/3rdparty/freetype/freetype.pro index 6d630d4190..5b1eb92e32 100644 --- a/src/3rdparty/freetype/freetype.pro +++ b/src/3rdparty/freetype/freetype.pro @@ -6,6 +6,8 @@ CONFIG += \ exceptions_off rtti_off warn_off \ installed +MODULE_INCLUDEPATH += $$PWD/include + load(qt_helper_lib) SOURCES += \ @@ -61,16 +63,12 @@ win32 { INCLUDEPATH += $$PWD/builds/unix } -INCLUDEPATH += $$PWD/include - DEFINES += FT2_BUILD_LIBRARY DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB include(../zlib_dependency.pri) -QT_FOR_CONFIG += gui-private -include($$OUT_PWD/../../gui/qtgui-config.pri) DEFINES += FT_CONFIG_OPTION_USE_PNG -include($$PWD/../png_dependency.pri) +QMAKE_USE_PRIVATE += libpng DEFINES += TT_CONFIG_OPTION_SUBPIXEL_HINTING diff --git a/src/3rdparty/freetype_dependency.pri b/src/3rdparty/freetype_dependency.pri index cf86b66efd..ca871a92d7 100644 --- a/src/3rdparty/freetype_dependency.pri +++ b/src/3rdparty/freetype_dependency.pri @@ -1,6 +1,5 @@ qtConfig(system-freetype) { QMAKE_USE_PRIVATE += freetype/nolink } else: qtConfig(freetype) { - INCLUDEPATH += $$PWD/freetype/include - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtfreetype$$qtPlatformTargetSuffix() + QMAKE_USE_PRIVATE += freetype } diff --git a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro index 1bfeabb8c4..4ba2ee3ec4 100644 --- a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro +++ b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro @@ -1,10 +1,12 @@ -TARGET = qtharfbuzzng +TARGET = qtharfbuzz CONFIG += \ static \ hide_symbols \ exceptions_off rtti_off warn_off +MODULE_INCLUDEPATH += $$PWD/include + load(qt_helper_lib) # built-in shapers list configuration: @@ -24,8 +26,6 @@ win32: DEFINES += HB_NO_WIN1256 #Workaround https://code.google.com/p/android/issues/detail?id=194631 android: DEFINES += _POSIX_C_SOURCE=200112L -INCLUDEPATH += $$PWD/include - # Harfbuzz-NG inside Qt uses the Qt atomics (inline code only) INCLUDEPATH += $$QT.core.includes DEFINES += QT_NO_VERSION_TAGGING diff --git a/src/3rdparty/harfbuzz_dependency.pri b/src/3rdparty/harfbuzz_dependency.pri deleted file mode 100644 index 5946f403c5..0000000000 --- a/src/3rdparty/harfbuzz_dependency.pri +++ /dev/null @@ -1,6 +0,0 @@ -qtConfig(system-harfbuzz) { - QMAKE_USE_PRIVATE += harfbuzz -} else: qtConfig(harfbuzz) { - INCLUDEPATH += $$PWD/harfbuzz-ng/include - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtharfbuzzng$$qtPlatformTargetSuffix() -} diff --git a/src/3rdparty/libpng/libpng.pro b/src/3rdparty/libpng/libpng.pro index ab6dd51e2b..577b61d833 100644 --- a/src/3rdparty/libpng/libpng.pro +++ b/src/3rdparty/libpng/libpng.pro @@ -1,4 +1,4 @@ -TARGET = qtpng +TARGET = qtlibpng CONFIG += \ static \ @@ -6,6 +6,8 @@ CONFIG += \ exceptions_off rtti_off warn_off \ installed +MODULE_INCLUDEPATH = $$PWD + load(qt_helper_lib) DEFINES += PNG_ARM_NEON_OPT=0 diff --git a/src/3rdparty/pcre/pcre.pro b/src/3rdparty/pcre/pcre.pro index fad82b80b1..add4a932b3 100644 --- a/src/3rdparty/pcre/pcre.pro +++ b/src/3rdparty/pcre/pcre.pro @@ -5,12 +5,14 @@ CONFIG += \ hide_symbols \ exceptions_off rtti_off warn_off +win32: MODULE_DEFINES += PCRE_STATIC +MODULE_INCLUDEPATH += $$PWD + load(qt_helper_lib) DEFINES += HAVE_CONFIG_H # platform/compiler specific definitions -win32: DEFINES += PCRE_STATIC uikit|qnx|winrt: DEFINES += PCRE_DISABLE_JIT SOURCES += \ diff --git a/src/3rdparty/pcre_dependency.pri b/src/3rdparty/pcre_dependency.pri deleted file mode 100644 index f1355eabe6..0000000000 --- a/src/3rdparty/pcre_dependency.pri +++ /dev/null @@ -1,7 +0,0 @@ -qtConfig(system-pcre) { - QMAKE_USE_PRIVATE += pcre -} else { - win32: DEFINES += PCRE_STATIC - INCLUDEPATH += $$PWD/pcre - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtpcre$$qtPlatformTargetSuffix() -} diff --git a/src/3rdparty/png_dependency.pri b/src/3rdparty/png_dependency.pri deleted file mode 100644 index 50711358a0..0000000000 --- a/src/3rdparty/png_dependency.pri +++ /dev/null @@ -1,6 +0,0 @@ -qtConfig(system-png) { - QMAKE_USE_PRIVATE += libpng -} else: qtConfig(png) { - INCLUDEPATH += $$PWD/libpng - LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtpng$$qtPlatformTargetSuffix() -} diff --git a/src/angle/src/libEGL/libEGL.pro b/src/angle/src/libEGL/libEGL.pro index 860b60735e..3b2d516ecb 100644 --- a/src/angle/src/libEGL/libEGL.pro +++ b/src/angle/src/libEGL/libEGL.pro @@ -3,7 +3,8 @@ DEF_FILE_TARGET=$${TARGET} TARGET=$$qtLibraryTarget($${LIBEGL_NAME}) winrt: LIBS_PRIVATE += -ld3d11 -LIBS_PRIVATE += -ldxguid -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME}) +LIBS_PRIVATE += -ldxguid +QMAKE_USE_PRIVATE += $${LIBGLESV2_NAME} DEFINES += GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI= LIBEGL_IMPLEMENTATION diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 47b0b2d4be..fb80bbd6b8 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -174,7 +174,7 @@ qtConfig(timezone) { } qtConfig(regularexpression) { - include($$PWD/../../3rdparty/pcre_dependency.pri) + QMAKE_USE_PRIVATE += pcre HEADERS += tools/qregularexpression.h SOURCES += tools/qregularexpression.cpp diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 3c4d2c0bbf..bac00f7e95 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -74,7 +74,7 @@ SOURCES += \ qtConfig(png) { HEADERS += image/qpnghandler_p.h SOURCES += image/qpnghandler.cpp - include($$PWD/../../3rdparty/png_dependency.pri) + QMAKE_USE_PRIVATE += libpng } # SIMD diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index 3fe47a6645..c1c52f2d1a 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -88,7 +88,7 @@ HEADERS += \ qtConfig(harfbuzz)|qtConfig(system-harfbuzz) { DEFINES += QT_ENABLE_HARFBUZZ_NG - include($$PWD/../../3rdparty/harfbuzz_dependency.pri) + QMAKE_USE_PRIVATE += harfbuzz SOURCES += text/qharfbuzzng.cpp HEADERS += text/qharfbuzzng_p.h diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri index a3813ef993..a94815dfbd 100644 --- a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri +++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri @@ -22,10 +22,7 @@ CONFIG += qpa/genericunixfontdatabase !qtConfig(system-xcb) { DEFINES += XCB_USE_RENDER - XCB_DIR = $$clean_path($$PWD/../../../../3rdparty/xcb) - INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude - LIBS += -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix() - QMAKE_USE += xcb + QMAKE_USE += xcb-static xcb } else { qtConfig(xkb): QMAKE_USE += xcb_xkb # to support custom cursors with depth > 1 diff --git a/src/plugins/platforms/xcb/xcb-static/xcb-static.pro b/src/plugins/platforms/xcb/xcb-static/xcb-static.pro index a1dec2b0b5..f3e54813ee 100644 --- a/src/plugins/platforms/xcb/xcb-static/xcb-static.pro +++ b/src/plugins/platforms/xcb/xcb-static/xcb-static.pro @@ -5,11 +5,11 @@ # libxcb-xinerama # CONFIG += static -load(qt_helper_lib) XCB_DIR = ../../../../3rdparty/xcb -INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude +MODULE_INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude +INCLUDEPATH += $$XCB_DIR/include/xcb QMAKE_USE += xcb/nolink @@ -75,3 +75,5 @@ SOURCES += \ OTHER_FILES = $$XCB_DIR/README TR_EXCLUDE += $$XCB_DIR/* + +load(qt_helper_lib) diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro index 246bb1f118..69d2e35606 100644 --- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro +++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro @@ -68,10 +68,7 @@ CONFIG += qpa/genericunixfontdatabase !qtConfig(system-xcb) { DEFINES += XCB_USE_RENDER - XCB_DIR = ../../../3rdparty/xcb - INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude - LIBS += -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix() - QMAKE_USE += xcb + QMAKE_USE += xcb-static xcb } else { LIBS += -lxcb-xinerama ### there is no configure test for this! qtConfig(xkb): QMAKE_USE += xcb_xkb From cd62d2810ba89243a0f6da43befcd0ebd557c4d8 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 12 Oct 2016 11:30:58 +0200 Subject: [PATCH 054/196] make users of qt modules inherit the modules' public QMAKE_USE when a module makes an external dependency part of its api, the users of that module need to know the include paths (and possibly defines) of that dependency, and also need to link to it explicitly if they want to access symbols from it directly. this patch implements this via the usual qt module pri mechanism. limitation: the external library definitions are in the private pris, so technically a public module is not allowed to make its external dependencies public. we don't have (and don't anticipate) such a case. Change-Id: I2dbbdcfcfc1b200acae151a969976cd668e24f89 Reviewed-by: Jake Petroules --- mkspecs/features/qt.prf | 2 ++ mkspecs/features/qt_module.prf | 2 ++ mkspecs/features/qt_module_pris.prf | 2 ++ 3 files changed, 6 insertions(+) diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index bd54565e01..fb814b547f 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -71,6 +71,7 @@ for(ever) { MODULE_INCLUDES = $$eval(QT.$${QTLIB}.includes) MODULE_LIBS = $$eval(QT.$${QTLIB}.libs) MODULE_FRAMEWORKS = $$eval(QT.$${QTLIB}.frameworks) + MODULE_USES = $$eval(QT.$${QTLIB}.uses) MODULE_CONFIG = $$eval(QT.$${QTLIB}.module_config) isEmpty(MODULE_NAME) { @@ -141,6 +142,7 @@ for(ever) { } } } + QMAKE_USE$$var_sfx += $$MODULE_USES # Add capabilities as defined by modules used in the project winrt { MODULE_WINRT_CAPABILITIES = $$eval(QT.$${QTLIB}.winrt_capabilities) diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index a89df18f3a..1df41065af 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -93,6 +93,8 @@ QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF QT += $$QT_FOR_PRIVATE unset(QT_FOR_PRIVATE) +QMAKE_USE_PRIVATE += $$QMAKE_USE_FOR_PRIVATE +unset(QMAKE_USE_FOR_PRIVATE) !internal_module:CONFIG += create_cmake diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 379f8cdf17..640281b9a9 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -131,6 +131,7 @@ defineReplace(qtExportLibsForModule) { MODULE_PRI_CONT += \ "QT.$${MODULE_ID}.depends =$$join(MODULE_DEPENDS, " ", " ")" \ $$module_rundep \ + "QT.$${MODULE_ID}.uses =$$join(QMAKE_USE, " ", " ")" \ "QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \ $$module_config \ "QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \ @@ -161,6 +162,7 @@ defineReplace(qtExportLibsForModule) { "QT.$${MODULE}_private.includes = $$MODULE_PRIVATE_INCLUDES" \ "QT.$${MODULE}_private.frameworks =" \ "QT.$${MODULE}_private.depends = $$private_deps" \ + "QT.$${MODULE}_private.uses =$$join(QMAKE_USE_FOR_PRIVATE, " ", " ")" \ "QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" \ $$qtGetFeaturesForModule($${MODULE}_private) \ "" \ From ec774500fb964f039bc47abce67e655699d374f7 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 12 Oct 2016 11:39:26 +0200 Subject: [PATCH 055/196] cleanup related to transitive dependencies public uses of external libraries are automatically transitive now, so we can remove some parts which were only meant to pull in transitive dependencies manually. this is particularly good for includes() of parts of QtPlatformSupport, which actually redundantly pulled in the library's sources. this required making the freetype and fontconfig dependencies public, which is ok, as in the end, they are used only by platform plugins, so there is no point in making them private, as plugins are not linked against anyway (except statically, but there public vs. private doesn't apply anyway). Change-Id: Ia2a32f50dc0f8472285675a0903e6ecd142a03b2 Reviewed-by: Jake Petroules --- mkspecs/features/qpa/basicunixfontdatabase.prf | 2 +- mkspecs/features/qpa/genericunixfontdatabase.prf | 2 +- src/3rdparty/freetype_dependency.pri | 4 ++-- src/plugins/platforms/haiku/haiku.pro | 2 -- src/plugins/platforms/qnx/qnx.pro | 5 ----- src/plugins/platforms/windows/windows.pri | 5 ----- src/plugins/platforms/winrt/winrt.pro | 1 - 7 files changed, 4 insertions(+), 17 deletions(-) diff --git a/mkspecs/features/qpa/basicunixfontdatabase.prf b/mkspecs/features/qpa/basicunixfontdatabase.prf index 72449c8f6b..327cd927d8 100644 --- a/mkspecs/features/qpa/basicunixfontdatabase.prf +++ b/mkspecs/features/qpa/basicunixfontdatabase.prf @@ -1,3 +1,3 @@ qtConfig(system-freetype) { - QMAKE_USE_PRIVATE += freetype/linkonly + QMAKE_USE += freetype/linkonly } diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf index 3b34eb0624..f5e54618aa 100644 --- a/mkspecs/features/qpa/genericunixfontdatabase.prf +++ b/mkspecs/features/qpa/genericunixfontdatabase.prf @@ -1,5 +1,5 @@ CONFIG += qpa/basicunixfontdatabase qtConfig(fontconfig) { - QMAKE_USE_PRIVATE += fontconfig/linkonly + QMAKE_USE += fontconfig/linkonly } diff --git a/src/3rdparty/freetype_dependency.pri b/src/3rdparty/freetype_dependency.pri index ca871a92d7..c477e6fdea 100644 --- a/src/3rdparty/freetype_dependency.pri +++ b/src/3rdparty/freetype_dependency.pri @@ -1,5 +1,5 @@ qtConfig(system-freetype) { - QMAKE_USE_PRIVATE += freetype/nolink + QMAKE_USE += freetype/nolink } else: qtConfig(freetype) { - QMAKE_USE_PRIVATE += freetype + QMAKE_USE += freetype } diff --git a/src/plugins/platforms/haiku/haiku.pro b/src/plugins/platforms/haiku/haiku.pro index ea5bb632db..931dfb28a8 100644 --- a/src/plugins/platforms/haiku/haiku.pro +++ b/src/plugins/platforms/haiku/haiku.pro @@ -36,8 +36,6 @@ LIBS += -lbe OTHER_FILES += haiku.json -include (../../../platformsupport/fontdatabases/fontdatabases.pri) - PLUGIN_TYPE = platforms PLUGIN_CLASS_NAME = QHaikuIntegrationPlugin load(qt_plugin) diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro index e47731476f..a726980f5b 100644 --- a/src/plugins/platforms/qnx/qnx.pro +++ b/src/plugins/platforms/qnx/qnx.pro @@ -121,11 +121,6 @@ lgmon { OTHER_FILES += qnx.json -QMAKE_CXXFLAGS += -I./private - -include (../../../platformsupport/eglconvenience/eglconvenience.pri) -include (../../../platformsupport/fontdatabases/fontdatabases.pri) - PLUGIN_TYPE = platforms PLUGIN_CLASS_NAME = QQnxIntegrationPlugin !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri index 6929f7365f..411c9e032b 100644 --- a/src/plugins/platforms/windows/windows.pri +++ b/src/plugins/platforms/windows/windows.pri @@ -114,11 +114,6 @@ RESOURCES += $$PWD/openglblacklists.qrc qtConfig(freetype) { HEADERS += $$PWD/qwindowsfontdatabase_ft.h SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp - qtConfig(system-freetype) { - include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri) - } else { - include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) - } } qtConfig(accessibility): include($$PWD/accessible/accessible.pri) diff --git a/src/plugins/platforms/winrt/winrt.pro b/src/plugins/platforms/winrt/winrt.pro index 28456f66ec..174b0362b4 100644 --- a/src/plugins/platforms/winrt/winrt.pro +++ b/src/plugins/platforms/winrt/winrt.pro @@ -7,7 +7,6 @@ QT += core-private gui-private platformsupport-private DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__ LIBS += $$QMAKE_LIBS_CORE -ldwrite -ld3d11 -INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/freetype/include SOURCES = \ main.cpp \ From ea913750b8793e1e518bd0eabc338e557df5ee6c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 12 Oct 2016 11:55:52 +0200 Subject: [PATCH 056/196] create modularized version of qtplatformsupport module lumping together all kinds of unrelated stuff has caused problems with spurious dependencies from the beginning. as the modularization infra is now in a state which supports many small private libraries just fine, take advantage of it. Change-Id: Ic40f47ce76a308bbfd32deae281f6f064fe1ef4c Reviewed-by: Jake Petroules --- .../nativecontexts/qeglnativecontext.h | 2 +- .../accessibility/accessibility.pri | 9 --- .../accessibility/accessibility.pro | 16 +++++ .../cglconvenience/cglconvenience.pri | 11 ---- .../cglconvenience/cglconvenience.pro | 18 ++++++ src/platformsupport/clipboard/clipboard.pri | 7 -- src/platformsupport/clipboard/clipboard.pro | 15 +++++ .../devicediscovery/devicediscovery.pri | 13 ---- .../devicediscovery/devicediscovery.pro | 25 ++++++++ .../eglconvenience/eglconvenience.pri | 32 ---------- .../eglconvenience/eglconvenience.pro | 43 +++++++++++++ .../eglconvenience/qeglconvenience_p.h | 2 +- .../eglconvenience/qeglpbuffer_p.h | 2 +- .../eglconvenience/qeglplatformcontext_p.h | 2 +- .../eglconvenience/qeglstreamconvenience_p.h | 2 +- .../eventdispatchers/eventdispatchers.pri | 21 ------ .../eventdispatchers/eventdispatchers.pro | 32 ++++++++++ .../fbconvenience/fbconvenience.pri | 11 ---- .../fbconvenience/fbconvenience.pro | 24 +++++++ .../fontconfig/qfontconfigdatabase_p.h | 2 +- .../{fontdatabases.pri => fontdatabases.pro} | 11 ++++ .../genericunix/qgenericunixfontdatabase_p.h | 4 +- .../glxconvenience/glxconvenience.pri | 8 --- .../glxconvenience/glxconvenience.pro | 16 +++++ src/platformsupport/graphics/graphics.pri | 2 - src/platformsupport/graphics/graphics.pro | 13 ++++ .../evdevkeyboard/qevdevkeyboardmanager_p.h | 2 +- .../input/evdevmouse/qevdevmousemanager.cpp | 2 +- .../input/evdevtablet/qevdevtabletmanager.cpp | 2 +- .../input/evdevtouch/qevdevtouchmanager.cpp | 2 +- .../input/{input.pri => input.pro} | 11 ++++ src/platformsupport/legacy.cpp | 48 ++++++++++++++ src/platformsupport/legacy.pro | 32 ++++++++++ .../linuxaccessibility/atspiadaptor.cpp | 2 +- .../linuxaccessibility/linuxaccessibility.pri | 25 -------- .../linuxaccessibility/linuxaccessibility.pro | 30 +++++++++ .../platformcompositor/platformcompositor.pri | 7 -- .../platformcompositor/platformcompositor.pro | 18 ++++++ src/platformsupport/platformsupport.pro | 64 ++++++++++++------- src/platformsupport/services/services.pri | 3 - src/platformsupport/services/services.pro | 13 ++++ .../themes/genericunix/qgenericunixthemes.cpp | 7 +- src/platformsupport/themes/themes.pri | 9 --- src/platformsupport/themes/themes.pro | 19 ++++++ sync.profile | 15 +++++ .../qaccessibilitylinux.pro | 7 +- 46 files changed, 458 insertions(+), 203 deletions(-) delete mode 100644 src/platformsupport/accessibility/accessibility.pri create mode 100644 src/platformsupport/accessibility/accessibility.pro delete mode 100644 src/platformsupport/cglconvenience/cglconvenience.pri create mode 100644 src/platformsupport/cglconvenience/cglconvenience.pro delete mode 100644 src/platformsupport/clipboard/clipboard.pri create mode 100644 src/platformsupport/clipboard/clipboard.pro delete mode 100644 src/platformsupport/devicediscovery/devicediscovery.pri create mode 100644 src/platformsupport/devicediscovery/devicediscovery.pro delete mode 100644 src/platformsupport/eglconvenience/eglconvenience.pri create mode 100644 src/platformsupport/eglconvenience/eglconvenience.pro delete mode 100644 src/platformsupport/eventdispatchers/eventdispatchers.pri create mode 100644 src/platformsupport/eventdispatchers/eventdispatchers.pro delete mode 100644 src/platformsupport/fbconvenience/fbconvenience.pri create mode 100644 src/platformsupport/fbconvenience/fbconvenience.pro rename src/platformsupport/fontdatabases/{fontdatabases.pri => fontdatabases.pro} (62%) delete mode 100644 src/platformsupport/glxconvenience/glxconvenience.pri create mode 100644 src/platformsupport/glxconvenience/glxconvenience.pro delete mode 100644 src/platformsupport/graphics/graphics.pri create mode 100644 src/platformsupport/graphics/graphics.pro rename src/platformsupport/input/{input.pri => input.pro} (62%) create mode 100644 src/platformsupport/legacy.cpp create mode 100644 src/platformsupport/legacy.pro delete mode 100644 src/platformsupport/linuxaccessibility/linuxaccessibility.pri create mode 100644 src/platformsupport/linuxaccessibility/linuxaccessibility.pro delete mode 100644 src/platformsupport/platformcompositor/platformcompositor.pri create mode 100644 src/platformsupport/platformcompositor/platformcompositor.pro delete mode 100644 src/platformsupport/services/services.pri create mode 100644 src/platformsupport/services/services.pro delete mode 100644 src/platformsupport/themes/themes.pri create mode 100644 src/platformsupport/themes/themes.pro diff --git a/src/platformheaders/nativecontexts/qeglnativecontext.h b/src/platformheaders/nativecontexts/qeglnativecontext.h index 67a6d2b808..697b3ef3fd 100644 --- a/src/platformheaders/nativecontexts/qeglnativecontext.h +++ b/src/platformheaders/nativecontexts/qeglnativecontext.h @@ -41,7 +41,7 @@ #define QEGLNATIVECONTEXT_H #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/accessibility/accessibility.pri b/src/platformsupport/accessibility/accessibility.pri deleted file mode 100644 index 924f6a512f..0000000000 --- a/src/platformsupport/accessibility/accessibility.pri +++ /dev/null @@ -1,9 +0,0 @@ -qtConfig(accessibility) { - INCLUDEPATH += $$PWD - - HEADERS += \ - $$PWD/qaccessiblebridgeutils_p.h - - SOURCES += \ - $$PWD/qaccessiblebridgeutils.cpp -} diff --git a/src/platformsupport/accessibility/accessibility.pro b/src/platformsupport/accessibility/accessibility.pro new file mode 100644 index 0000000000..49be899b08 --- /dev/null +++ b/src/platformsupport/accessibility/accessibility.pro @@ -0,0 +1,16 @@ +TARGET = QtAccessibilitySupport +MODULE = accessibility_support + +QT = core-private gui +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += \ + qaccessiblebridgeutils_p.h + +SOURCES += \ + qaccessiblebridgeutils.cpp + +load(qt_module) diff --git a/src/platformsupport/cglconvenience/cglconvenience.pri b/src/platformsupport/cglconvenience/cglconvenience.pri deleted file mode 100644 index 1de38bbd08..0000000000 --- a/src/platformsupport/cglconvenience/cglconvenience.pri +++ /dev/null @@ -1,11 +0,0 @@ -osx { - INCLUDEPATH += $$PWD - - HEADERS += \ - $$PWD/cglconvenience_p.h - - OBJECTIVE_SOURCES += \ - $$PWD/cglconvenience.mm - - LIBS_PRIVATE += -framework AppKit -framework OpenGL -} diff --git a/src/platformsupport/cglconvenience/cglconvenience.pro b/src/platformsupport/cglconvenience/cglconvenience.pro new file mode 100644 index 0000000000..0422a844aa --- /dev/null +++ b/src/platformsupport/cglconvenience/cglconvenience.pro @@ -0,0 +1,18 @@ +TARGET = QtCglSupport +MODULE = cgl_support + +QT = core-private gui +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += \ + cglconvenience_p.h + +OBJECTIVE_SOURCES += \ + cglconvenience.mm + +LIBS_PRIVATE += -framework AppKit -framework OpenGL + +load(qt_module) diff --git a/src/platformsupport/clipboard/clipboard.pri b/src/platformsupport/clipboard/clipboard.pri deleted file mode 100644 index cb8315d003..0000000000 --- a/src/platformsupport/clipboard/clipboard.pri +++ /dev/null @@ -1,7 +0,0 @@ -mac { - HEADERS += $$PWD/qmacmime_p.h - OBJECTIVE_SOURCES += $$PWD/qmacmime.mm - - osx: LIBS_PRIVATE += -framework AppKit -} - diff --git a/src/platformsupport/clipboard/clipboard.pro b/src/platformsupport/clipboard/clipboard.pro new file mode 100644 index 0000000000..336d81fe46 --- /dev/null +++ b/src/platformsupport/clipboard/clipboard.pro @@ -0,0 +1,15 @@ +TARGET = QtClipboardSupport +MODULE = clipboard_support + +QT = core-private gui +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += qmacmime_p.h +SOURCES += qmacmime.mm + +macos: LIBS_PRIVATE += -framework AppKit + +load(qt_module) diff --git a/src/platformsupport/devicediscovery/devicediscovery.pri b/src/platformsupport/devicediscovery/devicediscovery.pri deleted file mode 100644 index f4e9103130..0000000000 --- a/src/platformsupport/devicediscovery/devicediscovery.pri +++ /dev/null @@ -1,13 +0,0 @@ -HEADERS += $$PWD/qdevicediscovery_p.h - -qtConfig(libudev) { - SOURCES += $$PWD/qdevicediscovery_udev.cpp - HEADERS += $$PWD/qdevicediscovery_udev_p.h - QMAKE_USE_PRIVATE += libudev -} else: qtConfig(evdev) { - SOURCES += $$PWD/qdevicediscovery_static.cpp - HEADERS += $$PWD/qdevicediscovery_static_p.h -} else { - SOURCES += $$PWD/qdevicediscovery_dummy.cpp - HEADERS += $$PWD/qdevicediscovery_dummy_p.h -} diff --git a/src/platformsupport/devicediscovery/devicediscovery.pro b/src/platformsupport/devicediscovery/devicediscovery.pro new file mode 100644 index 0000000000..b429b8b97e --- /dev/null +++ b/src/platformsupport/devicediscovery/devicediscovery.pro @@ -0,0 +1,25 @@ +TARGET = QtDeviceDiscoverySupport +MODULE = devicediscovery_support + +QT = core-private +QT_FOR_CONFIG += gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += qdevicediscovery_p.h + +qtConfig(libudev) { + SOURCES += qdevicediscovery_udev.cpp + HEADERS += qdevicediscovery_udev_p.h + QMAKE_USE_PRIVATE += libudev +} else: qtConfig(evdev) { + SOURCES += qdevicediscovery_static.cpp + HEADERS += qdevicediscovery_static_p.h +} else { + SOURCES += qdevicediscovery_dummy.cpp + HEADERS += qdevicediscovery_dummy_p.h +} + +load(qt_module) diff --git a/src/platformsupport/eglconvenience/eglconvenience.pri b/src/platformsupport/eglconvenience/eglconvenience.pri deleted file mode 100644 index 4a93d997fb..0000000000 --- a/src/platformsupport/eglconvenience/eglconvenience.pri +++ /dev/null @@ -1,32 +0,0 @@ -qtConfig(egl) { - HEADERS += \ - $$PWD/qeglconvenience_p.h \ - $$PWD/qeglstreamconvenience_p.h \ - $$PWD/qt_egl_p.h - - SOURCES += \ - $$PWD/qeglconvenience.cpp \ - $$PWD/qeglstreamconvenience.cpp - - qtConfig(opengl) { - HEADERS += $$PWD/qeglplatformcontext_p.h \ - $$PWD/qeglpbuffer_p.h - - SOURCES += $$PWD/qeglplatformcontext.cpp \ - $$PWD/qeglpbuffer.cpp - } - - # Avoid X11 header collision, use generic EGL native types - DEFINES += QT_EGL_NO_X11 - - qtConfig(xlib) { - HEADERS += \ - $$PWD/qxlibeglintegration_p.h - SOURCES += \ - $$PWD/qxlibeglintegration.cpp - LIBS_PRIVATE += $$QMAKE_LIBS_X11 - } - CONFIG += egl - - LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD -} diff --git a/src/platformsupport/eglconvenience/eglconvenience.pro b/src/platformsupport/eglconvenience/eglconvenience.pro new file mode 100644 index 0000000000..d364a42b3b --- /dev/null +++ b/src/platformsupport/eglconvenience/eglconvenience.pro @@ -0,0 +1,43 @@ +TARGET = QtEglSupport +MODULE = egl_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += \ + qeglconvenience_p.h \ + qeglstreamconvenience_p.h \ + qt_egl_p.h + +SOURCES += \ + qeglconvenience.cpp \ + qeglstreamconvenience.cpp + +qtConfig(opengl) { + HEADERS += \ + qeglplatformcontext_p.h \ + qeglpbuffer_p.h + + SOURCES += \ + qeglplatformcontext.cpp \ + qeglpbuffer.cpp +} + +# Avoid X11 header collision, use generic EGL native types +DEFINES += QT_EGL_NO_X11 + +qtConfig(xlib) { + HEADERS += \ + qxlibeglintegration_p.h + SOURCES += \ + qxlibeglintegration.cpp + LIBS_PRIVATE += $$QMAKE_LIBS_X11 +} +CONFIG += egl + +LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD + +load(qt_module) diff --git a/src/platformsupport/eglconvenience/qeglconvenience_p.h b/src/platformsupport/eglconvenience/qeglconvenience_p.h index fdd21b8f19..ab2b813515 100644 --- a/src/platformsupport/eglconvenience/qeglconvenience_p.h +++ b/src/platformsupport/eglconvenience/qeglconvenience_p.h @@ -54,7 +54,7 @@ #include #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglpbuffer_p.h b/src/platformsupport/eglconvenience/qeglpbuffer_p.h index 4f9ea9d5f3..38370c0e62 100644 --- a/src/platformsupport/eglconvenience/qeglpbuffer_p.h +++ b/src/platformsupport/eglconvenience/qeglpbuffer_p.h @@ -52,7 +52,7 @@ // #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h index f6b2b876f7..9d41eecd99 100644 --- a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h +++ b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h @@ -55,7 +55,7 @@ #include #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h index a4c8245280..6c84f29613 100644 --- a/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h +++ b/src/platformsupport/eglconvenience/qeglstreamconvenience_p.h @@ -52,7 +52,7 @@ // #include -#include +#include // This provides runtime EGLDevice/Output/Stream support even when eglext.h in // the sysroot is not up-to-date. diff --git a/src/platformsupport/eventdispatchers/eventdispatchers.pri b/src/platformsupport/eventdispatchers/eventdispatchers.pri deleted file mode 100644 index fb0f3b3827..0000000000 --- a/src/platformsupport/eventdispatchers/eventdispatchers.pri +++ /dev/null @@ -1,21 +0,0 @@ -unix { -SOURCES +=\ - $$PWD/qunixeventdispatcher.cpp\ - $$PWD/qgenericunixeventdispatcher.cpp\ - -HEADERS +=\ - $$PWD/qunixeventdispatcher_qpa_p.h\ - $$PWD/qgenericunixeventdispatcher_p.h\ -} else: win32 { -SOURCES +=\ - $$PWD/qwindowsguieventdispatcher.cpp - -HEADERS +=\ - $$PWD/qwindowsguieventdispatcher_p.h -} - -qtConfig(glib) { - SOURCES +=$$PWD/qeventdispatcher_glib.cpp - HEADERS +=$$PWD/qeventdispatcher_glib_p.h - QMAKE_USE_PRIVATE += glib -} diff --git a/src/platformsupport/eventdispatchers/eventdispatchers.pro b/src/platformsupport/eventdispatchers/eventdispatchers.pro new file mode 100644 index 0000000000..9d3ac4bbc6 --- /dev/null +++ b/src/platformsupport/eventdispatchers/eventdispatchers.pro @@ -0,0 +1,32 @@ +TARGET = QtEventDispatcherSupport +MODULE = eventdispatcher_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +unix { + SOURCES += \ + qunixeventdispatcher.cpp \ + qgenericunixeventdispatcher.cpp + + HEADERS += \ + qunixeventdispatcher_qpa_p.h \ + qgenericunixeventdispatcher_p.h +} else { + SOURCES += \ + qwindowsguieventdispatcher.cpp + + HEADERS += \ + qwindowsguieventdispatcher_p.h +} + +qtConfig(glib) { + SOURCES += qeventdispatcher_glib.cpp + HEADERS += qeventdispatcher_glib_p.h + QMAKE_USE_PRIVATE += glib +} + +load(qt_module) diff --git a/src/platformsupport/fbconvenience/fbconvenience.pri b/src/platformsupport/fbconvenience/fbconvenience.pri deleted file mode 100644 index 4634f57fb4..0000000000 --- a/src/platformsupport/fbconvenience/fbconvenience.pri +++ /dev/null @@ -1,11 +0,0 @@ -SOURCES += $$PWD/qfbscreen.cpp \ - $$PWD/qfbbackingstore.cpp \ - $$PWD/qfbwindow.cpp \ - $$PWD/qfbcursor.cpp \ - $$PWD/qfbvthandler.cpp - -HEADERS += $$PWD/qfbscreen_p.h \ - $$PWD/qfbbackingstore_p.h \ - $$PWD/qfbwindow_p.h \ - $$PWD/qfbcursor_p.h \ - $$PWD/qfbvthandler_p.h diff --git a/src/platformsupport/fbconvenience/fbconvenience.pro b/src/platformsupport/fbconvenience/fbconvenience.pro new file mode 100644 index 0000000000..3775906470 --- /dev/null +++ b/src/platformsupport/fbconvenience/fbconvenience.pro @@ -0,0 +1,24 @@ +TARGET = QtFbSupport +MODULE = fb_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +SOURCES += \ + qfbscreen.cpp \ + qfbbackingstore.cpp \ + qfbwindow.cpp \ + qfbcursor.cpp \ + qfbvthandler.cpp + +HEADERS += \ + qfbscreen_p.h \ + qfbbackingstore_p.h \ + qfbwindow_p.h \ + qfbcursor_p.h \ + qfbvthandler_p.h + +load(qt_module) diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h index 244558b910..f7e3172b65 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h @@ -52,7 +52,7 @@ // #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/fontdatabases/fontdatabases.pri b/src/platformsupport/fontdatabases/fontdatabases.pro similarity index 62% rename from src/platformsupport/fontdatabases/fontdatabases.pri rename to src/platformsupport/fontdatabases/fontdatabases.pro index 5bf73566d8..fdfe3f59ea 100644 --- a/src/platformsupport/fontdatabases/fontdatabases.pri +++ b/src/platformsupport/fontdatabases/fontdatabases.pro @@ -1,3 +1,12 @@ +TARGET = QtFontDatabaseSupport +MODULE = fontdatabase_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + darwin:!if(watchos:CONFIG(simulator, simulator|device)) { include($$PWD/mac/coretext.pri) } else { @@ -13,3 +22,5 @@ darwin:!if(watchos:CONFIG(simulator, simulator|device)) { } } } + +load(qt_module) diff --git a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h index 267ef5e3f2..37c667eeb3 100644 --- a/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/genericunix/qgenericunixfontdatabase_p.h @@ -54,10 +54,10 @@ #include #if QT_CONFIG(fontconfig) -#include +#include typedef QFontconfigDatabase QGenericUnixFontDatabase; #else -#include +#include typedef QBasicFontDatabase QGenericUnixFontDatabase; #endif //Q_FONTCONFIGDATABASE diff --git a/src/platformsupport/glxconvenience/glxconvenience.pri b/src/platformsupport/glxconvenience/glxconvenience.pri deleted file mode 100644 index 80e79ee663..0000000000 --- a/src/platformsupport/glxconvenience/glxconvenience.pri +++ /dev/null @@ -1,8 +0,0 @@ -qtConfig(xlib) { - qtConfig(opengl):!qtConfig(opengles2) { - qtConfig(xrender): QMAKE_USE_PRIVATE += xrender - LIBS_PRIVATE += $$QMAKE_LIBS_X11 - HEADERS += $$PWD/qglxconvenience_p.h - SOURCES += $$PWD/qglxconvenience.cpp - } -} diff --git a/src/platformsupport/glxconvenience/glxconvenience.pro b/src/platformsupport/glxconvenience/glxconvenience.pro new file mode 100644 index 0000000000..185d6b0364 --- /dev/null +++ b/src/platformsupport/glxconvenience/glxconvenience.pro @@ -0,0 +1,16 @@ +TARGET = QtGlxSupport +MODULE = glx_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +qtConfig(xrender): QMAKE_USE_PRIVATE += xrender +LIBS_PRIVATE += $$QMAKE_LIBS_X11 + +HEADERS += qglxconvenience_p.h +SOURCES += qglxconvenience.cpp + +load(qt_module) diff --git a/src/platformsupport/graphics/graphics.pri b/src/platformsupport/graphics/graphics.pri deleted file mode 100644 index 43062682aa..0000000000 --- a/src/platformsupport/graphics/graphics.pri +++ /dev/null @@ -1,2 +0,0 @@ -HEADERS += $$PWD/qrasterbackingstore_p.h -SOURCES += $$PWD/qrasterbackingstore.cpp diff --git a/src/platformsupport/graphics/graphics.pro b/src/platformsupport/graphics/graphics.pro new file mode 100644 index 0000000000..878fca7f49 --- /dev/null +++ b/src/platformsupport/graphics/graphics.pro @@ -0,0 +1,13 @@ +TARGET = QtGraphicsSupport +MODULE = graphics_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +HEADERS += $$PWD/qrasterbackingstore_p.h +SOURCES += $$PWD/qrasterbackingstore.cpp + +load(qt_module) diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h index 01f23f2542..d2e34fead3 100644 --- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h +++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager_p.h @@ -53,7 +53,7 @@ #include "qevdevkeyboardhandler_p.h" -#include +#include #include #include diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp index 2d96691b09..b2f3fe5787 100644 --- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp +++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp index 89a60df98d..4b00424e92 100644 --- a/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp +++ b/src/platformsupport/input/evdevtablet/qevdevtabletmanager.cpp @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp index d0c6c10224..ab71d08fb1 100644 --- a/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp +++ b/src/platformsupport/input/evdevtouch/qevdevtouchmanager.cpp @@ -43,7 +43,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/platformsupport/input/input.pri b/src/platformsupport/input/input.pro similarity index 62% rename from src/platformsupport/input/input.pri rename to src/platformsupport/input/input.pro index eb4d8a983d..2c2ace6780 100644 --- a/src/platformsupport/input/input.pri +++ b/src/platformsupport/input/input.pro @@ -1,3 +1,12 @@ +TARGET = QtInputSupport +MODULE = input_support + +QT = core-private gui-private devicediscovery_support-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + qtConfig(evdev) { include($$PWD/evdevmouse/evdevmouse.pri) include($$PWD/evdevkeyboard/evdevkeyboard.pri) @@ -16,3 +25,5 @@ qtConfig(libinput) { qtConfig(evdev)|qtConfig(libinput) { include($$PWD/shared/shared.pri) } + +load(qt_module) diff --git a/src/platformsupport/legacy.cpp b/src/platformsupport/legacy.cpp new file mode 100644 index 0000000000..49def2ecca --- /dev/null +++ b/src/platformsupport/legacy.cpp @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QT_BEGIN_NAMESPACE + +void dummy() +{ +} + +QT_END_NAMESPACE diff --git a/src/platformsupport/legacy.pro b/src/platformsupport/legacy.pro new file mode 100644 index 0000000000..042f16301d --- /dev/null +++ b/src/platformsupport/legacy.pro @@ -0,0 +1,32 @@ +TARGET = QtPlatformSupport +MODULE = platformsupport + +QT_FOR_CONFIG += gui-private +CONFIG += static internal_module + +SOURCES += legacy.cpp + +mods = \ + accessibility \ + cgl \ + clipboard \ + devicediscovery \ + egl \ + eventdispatcher \ + fb \ + fontdatabase \ + glx \ + graphics \ + input \ + linuxaccessibility \ + platformcompositor \ + service \ + theme + +for (mod, mods) { + mod = $${mod}_support-private + qtHaveModule($$mod): \ + QT += $$mod +} + +load(qt_module) diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp index f6c126a771..70c4aa563c 100644 --- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp +++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp @@ -50,7 +50,7 @@ #ifndef QT_NO_ACCESSIBILITY #include "socket_interface.h" #include "constant_mappings_p.h" -#include "../accessibility/qaccessiblebridgeutils_p.h" +#include #include "application_p.h" /*! diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri b/src/platformsupport/linuxaccessibility/linuxaccessibility.pri deleted file mode 100644 index 1f36b815cf..0000000000 --- a/src/platformsupport/linuxaccessibility/linuxaccessibility.pri +++ /dev/null @@ -1,25 +0,0 @@ -qtConfig(accessibility-atspi-bridge) { - - QT_FOR_PRIVATE += dbus - include(../../3rdparty/atspi2/atspi2.pri) - - INCLUDEPATH += $$PWD - - HEADERS += \ - $$PWD/application_p.h \ - $$PWD/bridge_p.h \ - $$PWD/cache_p.h \ - $$PWD/struct_marshallers_p.h \ - $$PWD/constant_mappings_p.h \ - $$PWD/dbusconnection_p.h \ - $$PWD/atspiadaptor_p.h - - SOURCES += \ - $$PWD/application.cpp \ - $$PWD/bridge.cpp \ - $$PWD/cache.cpp \ - $$PWD/struct_marshallers.cpp \ - $$PWD/constant_mappings.cpp \ - $$PWD/dbusconnection.cpp \ - $$PWD/atspiadaptor.cpp -} diff --git a/src/platformsupport/linuxaccessibility/linuxaccessibility.pro b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro new file mode 100644 index 0000000000..6d68909047 --- /dev/null +++ b/src/platformsupport/linuxaccessibility/linuxaccessibility.pro @@ -0,0 +1,30 @@ +TARGET = QtLinuxAccessibilitySupport +MODULE = linuxaccessibility_support + +QT = core-private dbus gui-private accessibility_support-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +include(../../3rdparty/atspi2/atspi2.pri) + +HEADERS += \ + application_p.h \ + bridge_p.h \ + cache_p.h \ + struct_marshallers_p.h \ + constant_mappings_p.h \ + dbusconnection_p.h \ + atspiadaptor_p.h + +SOURCES += \ + application.cpp \ + bridge.cpp \ + cache.cpp \ + struct_marshallers.cpp \ + constant_mappings.cpp \ + dbusconnection.cpp \ + atspiadaptor.cpp + +load(qt_module) diff --git a/src/platformsupport/platformcompositor/platformcompositor.pri b/src/platformsupport/platformcompositor/platformcompositor.pri deleted file mode 100644 index 1e908c9998..0000000000 --- a/src/platformsupport/platformcompositor/platformcompositor.pri +++ /dev/null @@ -1,7 +0,0 @@ -qtConfig(opengl) { - SOURCES += $$PWD/qopenglcompositor.cpp \ - $$PWD/qopenglcompositorbackingstore.cpp - - HEADERS += $$PWD/qopenglcompositor_p.h \ - $$PWD/qopenglcompositorbackingstore_p.h -} diff --git a/src/platformsupport/platformcompositor/platformcompositor.pro b/src/platformsupport/platformcompositor/platformcompositor.pro new file mode 100644 index 0000000000..633e71fb9d --- /dev/null +++ b/src/platformsupport/platformcompositor/platformcompositor.pro @@ -0,0 +1,18 @@ +TARGET = QtPlatformCompositorSupport +MODULE = platformcompositor_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +SOURCES += \ + qopenglcompositor.cpp \ + qopenglcompositorbackingstore.cpp + +HEADERS += \ + qopenglcompositor_p.h \ + qopenglcompositorbackingstore_p.h + +load(qt_module) diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro index f9b57acaa8..5161ce3520 100644 --- a/src/platformsupport/platformsupport.pro +++ b/src/platformsupport/platformsupport.pro @@ -1,27 +1,47 @@ -TARGET = QtPlatformSupport -QT = core-private gui-private +TEMPLATE = subdirs +QT_FOR_CONFIG += gui-private -CONFIG += static internal_module -mac:LIBS_PRIVATE += -lz +SUBDIRS = \ + eventdispatchers \ + devicediscovery \ + fbconvenience \ + themes -DEFINES += QT_NO_CAST_FROM_ASCII -PRECOMPILED_HEADER = ../corelib/global/qt_pch.h +qtConfig(freetype)|if(darwin:!if(watchos:CONFIG(simulator, simulator|device))): \ + SUBDIRS += fontdatabases -include(cglconvenience/cglconvenience.pri) -include(eglconvenience/eglconvenience.pri) -include(eventdispatchers/eventdispatchers.pri) -include(fbconvenience/fbconvenience.pri) -include(fontdatabases/fontdatabases.pri) -include(glxconvenience/glxconvenience.pri) -include(input/input.pri) -include(devicediscovery/devicediscovery.pri) -include(services/services.pri) -include(themes/themes.pri) -include(accessibility/accessibility.pri) -include(linuxaccessibility/linuxaccessibility.pri) -include(clipboard/clipboard.pri) -include(platformcompositor/platformcompositor.pri) +qtConfig(evdev)|qtConfig(tslib)|qtConfig(libinput) { + SUBDIRS += input + input.depends += devicediscovery +} -darwin: include(graphics/graphics.pri) +unix:!darwin: \ + SUBDIRS += services -load(qt_module) +qtConfig(opengl): \ + SUBDIRS += platformcompositor +qtConfig(egl): \ + SUBDIRS += eglconvenience +qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2): \ + SUBDIRS += glxconvenience + +qtConfig(accessibility) { + SUBDIRS += accessibility + qtConfig(accessibility-atspi-bridge) { + SUBDIRS += linuxaccessibility + linuxaccessibility.depends += accessibility + } +} + +darwin { + SUBDIRS += \ + clipboard \ + graphics + macos: \ + SUBDIRS += cglconvenience +} + +# This aggregates all of them. +legacy.file = legacy.pro +legacy.depends = $$SUBDIRS +SUBDIRS += legacy diff --git a/src/platformsupport/services/services.pri b/src/platformsupport/services/services.pri deleted file mode 100644 index adee852626..0000000000 --- a/src/platformsupport/services/services.pri +++ /dev/null @@ -1,3 +0,0 @@ -unix:!mac { - include($$PWD/genericunix/genericunix.pri) -} diff --git a/src/platformsupport/services/services.pro b/src/platformsupport/services/services.pro new file mode 100644 index 0000000000..91957a0a78 --- /dev/null +++ b/src/platformsupport/services/services.pro @@ -0,0 +1,13 @@ +TARGET = QtServiceSupport +MODULE = service_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +unix:!darwin: \ + include($$PWD/genericunix/genericunix.pri) + +load(qt_module) diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index db264d1b22..1e1b1af4b5 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -38,7 +38,6 @@ ****************************************************************************/ #include "qgenericunixthemes_p.h" -#include "../../services/genericunix/qgenericunixservices_p.h" #include "qpa/qplatformtheme_p.h" @@ -61,11 +60,11 @@ #include #include #ifndef QT_NO_DBUS -#include "QtPlatformSupport/private/qdbusplatformmenu_p.h" -#include "QtPlatformSupport/private/qdbusmenubar_p.h" +#include "qdbusplatformmenu_p.h" +#include "qdbusmenubar_p.h" #endif #if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON) -#include "QtPlatformSupport/private/qdbustrayicon_p.h" +#include "qdbustrayicon_p.h" #endif #include diff --git a/src/platformsupport/themes/themes.pri b/src/platformsupport/themes/themes.pri deleted file mode 100644 index 552973431f..0000000000 --- a/src/platformsupport/themes/themes.pri +++ /dev/null @@ -1,9 +0,0 @@ -unix:!mac { - include($$PWD/genericunix/genericunix.pri) -} - -HEADERS += \ - $$PWD/qabstractfileiconengine_p.h - -SOURCES += \ - $$PWD/qabstractfileiconengine.cpp diff --git a/src/platformsupport/themes/themes.pro b/src/platformsupport/themes/themes.pro new file mode 100644 index 0000000000..2aeb1f89ad --- /dev/null +++ b/src/platformsupport/themes/themes.pro @@ -0,0 +1,19 @@ +TARGET = QtThemeSupport +MODULE = theme_support + +QT = core-private gui-private +CONFIG += static internal_module + +DEFINES += QT_NO_CAST_FROM_ASCII +PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h + +unix:!darwin: \ + include($$PWD/genericunix/genericunix.pri) + +HEADERS += \ + qabstractfileiconengine_p.h + +SOURCES += \ + qabstractfileiconengine.cpp + +load(qt_module) diff --git a/sync.profile b/sync.profile index 4da3499667..aca82db53d 100644 --- a/sync.profile +++ b/sync.profile @@ -10,6 +10,21 @@ "QtTest" => "$basedir/src/testlib", "QtDBus" => "$basedir/src/dbus", "QtConcurrent" => "$basedir/src/concurrent", + "QtAccessibilitySupport" => "$basedir/src/platformsupport/accessibility", + "QtLinuxAccessibilitySupport" => "$basedir/src/platformsupport/linuxaccessibility", + "QtClipboardSupport" => "$basedir/src/platformsupport/clipboard", + "QtDeviceDiscoverySupport" => "$basedir/src/platformsupport/devicediscovery", + "QtEventDispatcherSupport" => "$basedir/src/platformsupport/eventdispatchers", + "QtFontDatabaseSupport" => "$basedir/src/platformsupport/fontdatabases", + "QtInputSupport" => "$basedir/src/platformsupport/input", + "QtPlatformCompositorSupport" => "$basedir/src/platformsupport/platformcompositor", + "QtServiceSupport" => "$basedir/src/platformsupport/services", + "QtThemeSupport" => "$basedir/src/platformsupport/themes", + "QtGraphicsSupport" => "$basedir/src/platformsupport/graphics", + "QtCglSupport" => "$basedir/src/platformsupport/cglconvenience", + "QtEglSupport" => "$basedir/src/platformsupport/eglconvenience", + "QtFbSupport" => "$basedir/src/platformsupport/fbconvenience", + "QtGlxSupport" => "$basedir/src/platformsupport/glxconvenience", "QtPlatformSupport" => "$basedir/src/platformsupport", "QtPlatformHeaders" => "$basedir/src/platformheaders", "QtANGLE/KHR" => "!$basedir/src/3rdparty/angle/include/KHR", diff --git a/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro b/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro index 10d950541a..5cb3f5902a 100644 --- a/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro +++ b/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro @@ -1,12 +1,7 @@ CONFIG += testcase -include($$QT_SOURCE_TREE/src/platformsupport/accessibility/accessibility.pri) -include($$QT_SOURCE_TREE/src/platformsupport/linuxaccessibility/linuxaccessibility.pri) - TARGET = tst_qaccessibilitylinux SOURCES += tst_qaccessibilitylinux.cpp -CONFIG += gui - -QT += gui-private widgets dbus testlib +QT += gui-private widgets dbus testlib accessibility_support-private linuxaccessibility_support-private From 135fcd599200cdacf637b5c77824776c3fb181d1 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 30 Sep 2016 13:08:03 +0200 Subject: [PATCH 057/196] port to modularized platformsupport libraries Change-Id: I20eb0e33abfd70b6a5240e7b6b0aa0425f2d2ee7 Reviewed-by: Jake Petroules --- .../generic/evdevkeyboard/evdevkeyboard.pro | 2 +- src/plugins/generic/evdevkeyboard/main.cpp | 2 +- src/plugins/generic/evdevmouse/evdevmouse.pro | 2 +- src/plugins/generic/evdevmouse/main.cpp | 2 +- .../generic/evdevtablet/evdevtablet.pro | 2 +- src/plugins/generic/evdevtablet/main.cpp | 2 +- src/plugins/generic/evdevtouch/evdevtouch.pro | 2 +- src/plugins/generic/evdevtouch/main.cpp | 2 +- src/plugins/generic/libinput/libinput.pro | 2 +- src/plugins/generic/libinput/main.cpp | 2 +- src/plugins/generic/tslib/main.cpp | 2 +- src/plugins/generic/tslib/tslib.pro | 2 +- src/plugins/platforms/android/android.pro | 5 +++- .../android/androidjniaccessibility.cpp | 2 +- .../android/qandroideventdispatcher.h | 2 +- .../android/qandroidplatformfontdatabase.h | 2 +- .../android/qandroidplatformintegration.cpp | 2 +- .../android/qandroidplatformopenglcontext.cpp | 2 +- .../android/qandroidplatformopenglcontext.h | 2 +- .../android/qandroidplatformopenglwindow.cpp | 2 +- src/plugins/platforms/bsdfb/bsdfb.pro | 8 +++++- .../platforms/bsdfb/qbsdfbintegration.cpp | 16 +++++------ src/plugins/platforms/bsdfb/qbsdfbscreen.cpp | 4 +-- src/plugins/platforms/bsdfb/qbsdfbscreen.h | 2 +- src/plugins/platforms/cocoa/cocoa.pro | 5 +++- .../cocoa/qcocoaaccessibilityelement.mm | 2 +- .../platforms/cocoa/qcocoabackingstore.h | 2 +- .../platforms/cocoa/qcocoaglcontext.mm | 2 +- .../platforms/cocoa/qcocoaintegration.h | 2 +- .../platforms/cocoa/qcocoamimetypes.mm | 2 +- src/plugins/platforms/cocoa/qcocoatheme.mm | 4 +-- src/plugins/platforms/cocoa/qmacclipboard.h | 2 +- src/plugins/platforms/direct2d/direct2d.pro | 6 ++-- .../direct2d/qwindowsdirect2dintegration.cpp | 2 +- src/plugins/platforms/directfb/directfb.pro | 5 +++- .../platforms/directfb/qdirectfb_egl.cpp | 6 ++-- .../directfb/qdirectfbintegration.cpp | 6 ++-- .../platforms/eglfs/api/qeglfscontext.cpp | 4 +-- .../platforms/eglfs/api/qeglfscontext_p.h | 2 +- .../eglfs/api/qeglfsdeviceintegration.cpp | 2 +- .../platforms/eglfs/api/qeglfsglobal_p.h | 2 +- .../platforms/eglfs/api/qeglfsintegration.cpp | 28 +++++++++---------- .../eglfs/api/qeglfsoffscreenwindow.cpp | 2 +- .../platforms/eglfs/api/qeglfsscreen.cpp | 2 +- .../platforms/eglfs/api/qeglfswindow.cpp | 4 +-- .../platforms/eglfs/api/qeglfswindow_p.h | 2 +- .../eglfs_brcm/eglfs_brcm.pro | 2 +- .../deviceintegration/eglfs_kms/eglfs_kms.pro | 2 +- .../eglfs_kms/qeglfskmsgbmintegration.cpp | 2 +- .../eglfs_kms/qeglfskmsgbmscreen.cpp | 2 +- .../eglfs_kms_egldevice.pro | 2 +- .../qeglfskmsegldeviceintegration.cpp | 2 +- .../qeglfskmsegldeviceintegration.h | 2 +- .../eglfs_kms_support/eglfs_kms_support.pro | 2 +- .../eglfs_kms_support/qeglfskmsscreen.cpp | 2 +- .../eglfs_mali/eglfs_mali.pro | 2 +- .../deviceintegration/eglfs_viv/eglfs_viv.pro | 2 +- .../eglfs_viv_wl/eglfs_viv_wl.pro | 2 +- .../deviceintegration/eglfs_x11/eglfs_x11.pro | 2 +- src/plugins/platforms/eglfs/eglfs-plugin.pro | 2 +- .../eglfs/eglfsdeviceintegration.pro | 14 +++++++++- src/plugins/platforms/haiku/haiku.pro | 2 +- .../platforms/haiku/qhaikuintegration.cpp | 2 +- src/plugins/platforms/integrity/integrity.pro | 5 +++- .../integrity/qintegrityfbintegration.cpp | 12 ++++---- .../integrity/qintegrityfbscreen.cpp | 4 +-- .../platforms/integrity/qintegrityfbscreen.h | 2 +- src/plugins/platforms/ios/ios.pro | 5 +++- src/plugins/platforms/ios/qiosbackingstore.h | 2 +- src/plugins/platforms/ios/qiosclipboard.mm | 2 +- src/plugins/platforms/ios/qiosintegration.mm | 4 +-- src/plugins/platforms/ios/qiostheme.mm | 2 +- src/plugins/platforms/linuxfb/linuxfb.pro | 8 +++++- .../platforms/linuxfb/qlinuxfbintegration.cpp | 24 ++++++++-------- .../platforms/linuxfb/qlinuxfbscreen.cpp | 4 +-- .../platforms/linuxfb/qlinuxfbscreen.h | 2 +- src/plugins/platforms/minimal/minimal.pro | 4 ++- .../platforms/minimal/qminimalintegration.cpp | 6 ++-- .../platforms/minimalegl/minimalegl.pro | 4 ++- .../minimalegl/qminimaleglintegration.cpp | 8 +++--- .../minimalegl/qminimaleglscreen.cpp | 4 +-- .../platforms/minimalegl/qminimaleglscreen.h | 2 +- src/plugins/platforms/mirclient/mirclient.pro | 5 +++- .../mirclient/qmirclientglcontext.cpp | 2 +- .../mirclient/qmirclientintegration.cpp | 4 +-- .../mirclient/qmirclientplatformservices.h | 4 +-- .../platforms/mirclient/qmirclientscreen.cpp | 2 +- .../platforms/mirclient/qmirclienttheme.h | 2 +- src/plugins/platforms/offscreen/offscreen.pro | 5 +++- .../offscreen/qoffscreenintegration.cpp | 6 ++-- .../offscreen/qoffscreenintegration_x11.cpp | 2 +- src/plugins/platforms/openwfd/openwf.pro | 4 ++- .../platforms/openwfd/qopenwfdintegration.cpp | 4 +-- src/plugins/platforms/qnx/qnx.pro | 4 ++- src/plugins/platforms/vnc/qvncintegration.cpp | 14 +++++----- src/plugins/platforms/vnc/qvncscreen.cpp | 4 +-- src/plugins/platforms/vnc/qvncscreen.h | 2 +- src/plugins/platforms/vnc/vnc.pro | 8 +++++- .../windows/accessible/iaccessible2.cpp | 2 +- .../platforms/windows/qwindowsclipboard.cpp | 2 +- .../platforms/windows/qwindowscontext.cpp | 2 +- .../windows/qwindowsfontdatabase_ft.h | 2 +- .../platforms/windows/qwindowsintegration.cpp | 2 +- .../platforms/windows/qwindowskeymapper.cpp | 2 +- .../platforms/windows/qwindowstheme.cpp | 2 +- src/plugins/platforms/windows/windows.pro | 7 +++-- .../platforms/winrt/qwinrteglcontext.cpp | 4 +-- .../platforms/winrt/qwinrtfontdatabase.h | 2 +- .../platforms/winrt/qwinrtintegration.cpp | 2 +- src/plugins/platforms/winrt/qwinrtwindow.cpp | 2 +- src/plugins/platforms/winrt/winrt.pro | 4 ++- .../gl_integrations_plugin_base.pri | 2 +- .../gl_integrations/xcb_egl/qxcbeglcontext.h | 4 +-- .../gl_integrations/xcb_egl/qxcbeglinclude.h | 2 +- .../xcb_egl/qxcbeglintegration.cpp | 2 +- .../gl_integrations/xcb_egl/qxcbeglwindow.cpp | 4 +-- .../xcb/gl_integrations/xcb_egl/xcb_egl.pro | 1 + .../xcb_glx/qglxintegration.cpp | 2 +- .../gl_integrations/xcb_glx/qxcbglxwindow.cpp | 2 +- .../xcb/gl_integrations/xcb_glx/xcb_glx.pro | 1 + src/plugins/platforms/xcb/qxcbintegration.cpp | 8 +++--- src/plugins/platforms/xcb/xcb-plugin.pro | 2 +- src/plugins/platforms/xcb/xcb_qpa_lib.pro | 8 +++++- src/plugins/platformthemes/gtk3/gtk3.pro | 2 +- .../manual/qopenglcontext/qopenglcontext.pro | 2 +- .../qopenglcontext/qopenglcontextwindow.cpp | 2 +- 126 files changed, 269 insertions(+), 199 deletions(-) diff --git a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro index d23ad3bad0..73fddf4d26 100644 --- a/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro +++ b/src/plugins/generic/evdevkeyboard/evdevkeyboard.pro @@ -1,6 +1,6 @@ TARGET = qevdevkeyboardplugin -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private SOURCES = main.cpp diff --git a/src/plugins/generic/evdevkeyboard/main.cpp b/src/plugins/generic/evdevkeyboard/main.cpp index 7fd6feaecc..ef08cd56ab 100644 --- a/src/plugins/generic/evdevkeyboard/main.cpp +++ b/src/plugins/generic/evdevkeyboard/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/evdevmouse/evdevmouse.pro b/src/plugins/generic/evdevmouse/evdevmouse.pro index 1a0bc08853..f3a8558ef2 100644 --- a/src/plugins/generic/evdevmouse/evdevmouse.pro +++ b/src/plugins/generic/evdevmouse/evdevmouse.pro @@ -1,6 +1,6 @@ TARGET = qevdevmouseplugin -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private SOURCES = main.cpp diff --git a/src/plugins/generic/evdevmouse/main.cpp b/src/plugins/generic/evdevmouse/main.cpp index 88c29366fa..86ec7cb575 100644 --- a/src/plugins/generic/evdevmouse/main.cpp +++ b/src/plugins/generic/evdevmouse/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/evdevtablet/evdevtablet.pro b/src/plugins/generic/evdevtablet/evdevtablet.pro index aaf0ef4c67..1409cd83c9 100644 --- a/src/plugins/generic/evdevtablet/evdevtablet.pro +++ b/src/plugins/generic/evdevtablet/evdevtablet.pro @@ -2,7 +2,7 @@ TARGET = qevdevtabletplugin SOURCES = main.cpp -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private OTHER_FILES += \ evdevtablet.json diff --git a/src/plugins/generic/evdevtablet/main.cpp b/src/plugins/generic/evdevtablet/main.cpp index cf8dc15c6e..0646d71146 100644 --- a/src/plugins/generic/evdevtablet/main.cpp +++ b/src/plugins/generic/evdevtablet/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/evdevtouch/evdevtouch.pro b/src/plugins/generic/evdevtouch/evdevtouch.pro index 4d61db4eb0..3ca646aaca 100644 --- a/src/plugins/generic/evdevtouch/evdevtouch.pro +++ b/src/plugins/generic/evdevtouch/evdevtouch.pro @@ -2,7 +2,7 @@ TARGET = qevdevtouchplugin SOURCES = main.cpp -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private OTHER_FILES += \ evdevtouch.json diff --git a/src/plugins/generic/evdevtouch/main.cpp b/src/plugins/generic/evdevtouch/main.cpp index 411bf3d7a0..aa60614936 100644 --- a/src/plugins/generic/evdevtouch/main.cpp +++ b/src/plugins/generic/evdevtouch/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/libinput/libinput.pro b/src/plugins/generic/libinput/libinput.pro index 335605d354..434bf7b945 100644 --- a/src/plugins/generic/libinput/libinput.pro +++ b/src/plugins/generic/libinput/libinput.pro @@ -1,6 +1,6 @@ TARGET = qlibinputplugin -QT += core-private platformsupport-private gui-private +QT += core-private gui-private input_support-private SOURCES = main.cpp diff --git a/src/plugins/generic/libinput/main.cpp b/src/plugins/generic/libinput/main.cpp index e40fdd0097..6d1e76c0f0 100644 --- a/src/plugins/generic/libinput/main.cpp +++ b/src/plugins/generic/libinput/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp index c5e0c720fc..fb9e0c35f3 100644 --- a/src/plugins/generic/tslib/main.cpp +++ b/src/plugins/generic/tslib/main.cpp @@ -38,7 +38,7 @@ ****************************************************************************/ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro index d6a0eea3a0..7c3a0bf607 100644 --- a/src/plugins/generic/tslib/tslib.pro +++ b/src/plugins/generic/tslib/tslib.pro @@ -2,7 +2,7 @@ TARGET = qtslibplugin SOURCES = main.cpp -QT += gui-private platformsupport-private +QT += core-private gui-private input_support-private QMAKE_USE += tslib diff --git a/src/plugins/platforms/android/android.pro b/src/plugins/platforms/android/android.pro index 544b2ca63a..5912edc847 100644 --- a/src/plugins/platforms/android/android.pro +++ b/src/plugins/platforms/android/android.pro @@ -6,7 +6,10 @@ DEFINES += QT_STATICPLUGIN LIBS += -ljnigraphics -landroid -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private accessibility_support-private \ + fontdatabase_support-private egl_support-private CONFIG += qpa/genericunixfontdatabase diff --git a/src/plugins/platforms/android/androidjniaccessibility.cpp b/src/plugins/platforms/android/androidjniaccessibility.cpp index e8536235d7..a987092862 100644 --- a/src/plugins/platforms/android/androidjniaccessibility.cpp +++ b/src/plugins/platforms/android/androidjniaccessibility.cpp @@ -41,7 +41,7 @@ #include "androidjnimain.h" #include "qandroidplatformintegration.h" #include "qpa/qplatformaccessibility.h" -#include +#include #include "qguiapplication.h" #include "qwindow.h" #include "qrect.h" diff --git a/src/plugins/platforms/android/qandroideventdispatcher.h b/src/plugins/platforms/android/qandroideventdispatcher.h index 227027f3c3..86a7e460b3 100644 --- a/src/plugins/platforms/android/qandroideventdispatcher.h +++ b/src/plugins/platforms/android/qandroideventdispatcher.h @@ -42,7 +42,7 @@ #include #include -#include +#include class QAndroidEventDispatcher : public QUnixEventDispatcherQPA { diff --git a/src/plugins/platforms/android/qandroidplatformfontdatabase.h b/src/plugins/platforms/android/qandroidplatformfontdatabase.h index a00a3730fb..b20fd75cb2 100644 --- a/src/plugins/platforms/android/qandroidplatformfontdatabase.h +++ b/src/plugins/platforms/android/qandroidplatformfontdatabase.h @@ -40,7 +40,7 @@ #ifndef QANDROIDPLATFORMFONTDATABASE_H #define QANDROIDPLATFORMFONTDATABASE_H -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index e10bd95e12..6669ee3176 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -46,7 +46,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp index 80693acf88..2644fa27f6 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.cpp @@ -42,7 +42,7 @@ #include "qandroidplatformopenglwindow.h" #include "qandroidplatformintegration.h" -#include +#include #include #include diff --git a/src/plugins/platforms/android/qandroidplatformopenglcontext.h b/src/plugins/platforms/android/qandroidplatformopenglcontext.h index c88dbf327b..d3f6cf13a4 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglcontext.h +++ b/src/plugins/platforms/android/qandroidplatformopenglcontext.h @@ -41,7 +41,7 @@ #ifndef QANDROIDPLATFORMOPENGLCONTEXT_H #define QANDROIDPLATFORMOPENGLCONTEXT_H -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp index 7801629633..3e1cfe305d 100644 --- a/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformopenglwindow.cpp @@ -50,7 +50,7 @@ #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/bsdfb/bsdfb.pro b/src/plugins/platforms/bsdfb/bsdfb.pro index c24d8dd9e5..294edcd35d 100644 --- a/src/plugins/platforms/bsdfb/bsdfb.pro +++ b/src/plugins/platforms/bsdfb/bsdfb.pro @@ -1,6 +1,12 @@ TARGET = qbsdfb -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + service_support-private eventdispatcher_support-private \ + fontdatabase_support-private fb_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private SOURCES = main.cpp qbsdfbintegration.cpp qbsdfbscreen.cpp HEADERS = qbsdfbintegration.h qbsdfbscreen.h diff --git a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp index 9c25076c9c..1fa13183f8 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp +++ b/src/plugins/platforms/bsdfb/qbsdfbintegration.cpp @@ -35,21 +35,21 @@ #include "qbsdfbintegration.h" #include "qbsdfbscreen.h" -#include -#include -#include +#include +#include +#include -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include #if QT_CONFIG(tslib) -#include +#include #endif QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp index ee2dce6867..0ef57d37e5 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp +++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp @@ -33,8 +33,8 @@ ****************************************************************************/ #include "qbsdfbscreen.h" -#include -#include +#include +#include #include #include diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.h b/src/plugins/platforms/bsdfb/qbsdfbscreen.h index 0d9964afd5..3e244e3460 100644 --- a/src/plugins/platforms/bsdfb/qbsdfbscreen.h +++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.h @@ -35,7 +35,7 @@ #ifndef QBSDFBSCREEN_H #define QBSDFBSCREEN_H -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index d9d3cb1627..0664841c2d 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -81,7 +81,10 @@ RESOURCES += qcocoaresources.qrc LIBS += -framework AppKit -framework Carbon -framework IOKit -lcups -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + accessibility_support-private clipboard_support-private theme_support-private \ + fontdatabase_support-private graphics_support-private cgl_support-private qtHaveModule(widgets) { OBJECTIVE_SOURCES += \ diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm index 9c410506b0..97bd402b73 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm @@ -41,7 +41,7 @@ #include "qcocoahelpers.h" #include "qcocoawindow.h" #include "private/qaccessiblecache_p.h" -#include +#include #include #import diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.h b/src/plugins/platforms/cocoa/qcocoabackingstore.h index 562be2be8f..5ed455fd71 100644 --- a/src/plugins/platforms/cocoa/qcocoabackingstore.h +++ b/src/plugins/platforms/cocoa/qcocoabackingstore.h @@ -40,7 +40,7 @@ #ifndef QBACKINGSTORE_COCOA_H #define QBACKINGSTORE_COCOA_H -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm index 31b93be136..a7cc19b3bf 100644 --- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm +++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm @@ -42,7 +42,7 @@ #include "qcocoahelpers.h" #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h index 85ea2d8ba9..32f6fe0af1 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.h +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -54,7 +54,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoamimetypes.mm b/src/plugins/platforms/cocoa/qcocoamimetypes.mm index c109eb7bf4..093f86da6e 100644 --- a/src/plugins/platforms/cocoa/qcocoamimetypes.mm +++ b/src/plugins/platforms/cocoa/qcocoamimetypes.mm @@ -38,7 +38,7 @@ ****************************************************************************/ #include "qcocoamimetypes.h" -#include +#include #include "qcocoahelpers.h" #include diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm index 03ad15a381..4d74c11581 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.mm +++ b/src/plugins/platforms/cocoa/qcocoatheme.mm @@ -58,8 +58,8 @@ #include #include #include -#include -#include +#include +#include #include #include diff --git a/src/plugins/platforms/cocoa/qmacclipboard.h b/src/plugins/platforms/cocoa/qmacclipboard.h index 2ee0cb91e4..1d229a55d2 100644 --- a/src/plugins/platforms/cocoa/qmacclipboard.h +++ b/src/plugins/platforms/cocoa/qmacclipboard.h @@ -41,7 +41,7 @@ #define QMACCLIPBOARD_H #include -#include +#include #import diff --git a/src/plugins/platforms/direct2d/direct2d.pro b/src/plugins/platforms/direct2d/direct2d.pro index f4c3b5cc3b..83c4a730f4 100644 --- a/src/plugins/platforms/direct2d/direct2d.pro +++ b/src/plugins/platforms/direct2d/direct2d.pro @@ -1,8 +1,8 @@ TARGET = qdirect2d -QT *= core-private -QT *= gui-private -QT *= platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lVersion -lgdi32 diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp index deabe98fbe..1d24247d75 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp @@ -50,7 +50,7 @@ #include #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index de0344ff5c..da7634856c 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -1,6 +1,9 @@ TARGET = qdirectfb -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private service_support-private \ + fontdatabase_support-private egl_support-private QMAKE_USE += directfb diff --git a/src/plugins/platforms/directfb/qdirectfb_egl.cpp b/src/plugins/platforms/directfb/qdirectfb_egl.cpp index 2a04c0bba3..dad553c890 100644 --- a/src/plugins/platforms/directfb/qdirectfb_egl.cpp +++ b/src/plugins/platforms/directfb/qdirectfb_egl.cpp @@ -46,10 +46,10 @@ #include #include -#include -#include +#include +#include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 506432f886..cdf340da7a 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -44,9 +44,9 @@ #include "qdirectfbcursor.h" #include "qdirectfbwindow.h" -#include -#include -#include +#include +#include +#include #include #include diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp index 1a33215295..c5cef34d8e 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscontext.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfscontext.cpp @@ -39,8 +39,8 @@ #include "qeglfsglobal_p.h" #include -#include -#include +#include +#include #include "qeglfscontext_p.h" #include "qeglfswindow_p.h" diff --git a/src/plugins/platforms/eglfs/api/qeglfscontext_p.h b/src/plugins/platforms/eglfs/api/qeglfscontext_p.h index 65af3a7cee..ab5bf99c3c 100644 --- a/src/plugins/platforms/eglfs/api/qeglfscontext_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfscontext_p.h @@ -52,7 +52,7 @@ // #include "qeglfsglobal_p.h" -#include +#include #include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp index 9f05767366..48e0af5479 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp @@ -44,7 +44,7 @@ #include "qeglfsscreen_p.h" #include "qeglfshooks_p.h" -#include +#include #include #include #include diff --git a/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h b/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h index bad5095d21..8d76ff5ee0 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfsglobal_p.h @@ -53,7 +53,7 @@ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp index 4974499e0a..733f0bd139 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp @@ -49,7 +49,6 @@ #include #include #include -#include #include "qeglfsintegration_p.h" #include "qeglfswindow_p.h" @@ -58,30 +57,31 @@ #include "qeglfsoffscreenwindow_p.h" #include "qeglfscursor_p.h" -#include -#include -#include +#include +#include +#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #if QT_CONFIG(libinput) -#include +#include #endif #if QT_CONFIG(evdev) -#include -#include -#include +#include +#include +#include #endif #if QT_CONFIG(tslib) -#include +#include #endif #include diff --git a/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp b/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp index 7de5379ae3..864271cd3a 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsoffscreenwindow.cpp @@ -40,7 +40,7 @@ #include "qeglfsoffscreenwindow_p.h" #include "qeglfshooks_p.h" #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp index b0c32e5176..5613179041 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsscreen.cpp @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include "qeglfsscreen_p.h" #include "qeglfswindow_p.h" diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow.cpp b/src/plugins/platforms/eglfs/api/qeglfswindow.cpp index 5ce88e6bd8..e79b377d40 100644 --- a/src/plugins/platforms/eglfs/api/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfswindow.cpp @@ -43,8 +43,8 @@ #include #include #include -#include -#include +#include +#include #include "qeglfswindow_p.h" #include "qeglfscursor_p.h" diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h index 6e752b8f79..0889f27ae3 100644 --- a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h +++ b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h @@ -56,7 +56,7 @@ #include "qeglfsscreen_p.h" #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro index 7f1e7b9f59..fee67da2de 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_brcm/eglfs_brcm.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-brcm-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api CONFIG += egl diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro index 10571dc978..255db824b7 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro @@ -4,7 +4,7 @@ PLUGIN_TYPE = egldeviceintegrations PLUGIN_CLASS_NAME = QEglFSKmsGbmIntegrationPlugin load(qt_plugin) -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private +QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp index a5ab73cca4..a78f445995 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp @@ -45,7 +45,7 @@ #include "qeglfskmsgbmcursor.h" #include "private/qeglfscursor_p.h" -#include +#include #include #include #include diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp index 75ff3ac749..bed775ff81 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp @@ -47,7 +47,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro index 582982df76..a625021aba 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-kms-egldevice-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private eglfs_kms_support-private +QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp index ddb2499751..d0c9c9565e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp @@ -39,7 +39,7 @@ ****************************************************************************/ #include "qeglfskmsegldeviceintegration.h" -#include +#include #include "private/qeglfswindow_p.h" #include "private/qeglfscursor_p.h" #include "qeglfskmsegldevice.h" diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h index 375c388548..cddfdbd5c6 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.h @@ -46,7 +46,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro index f88a7c847e..487edb569e 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro @@ -2,7 +2,7 @@ TARGET = QtEglFsKmsSupport CONFIG += no_module_headers internal_module load(qt_module) -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp index e4b6c67f28..4021609407 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp @@ -46,7 +46,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro index e72f5bdd14..5e6f636e2b 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/eglfs_mali.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-mali-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro index 364812ec60..f9cce8d48b 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/eglfs_viv.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-viv-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api CONFIG += egl diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro index ccdf20b417..f934fd85ed 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-viv-wl-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private INCLUDEPATH += $$PWD/../../api CONFIG += egl diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro index 51a026e2cf..391f63615b 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro @@ -1,6 +1,6 @@ TARGET = qeglfs-x11-integration -QT += core-private gui-private platformsupport-private eglfsdeviceintegration-private +QT += core-private gui-private eglfsdeviceintegration-private # Avoid X11 header collision, use generic EGL native types DEFINES += QT_EGL_NO_X11 diff --git a/src/plugins/platforms/eglfs/eglfs-plugin.pro b/src/plugins/platforms/eglfs/eglfs-plugin.pro index d8adc13226..cf4863975a 100644 --- a/src/plugins/platforms/eglfs/eglfs-plugin.pro +++ b/src/plugins/platforms/eglfs/eglfs-plugin.pro @@ -1,6 +1,6 @@ TARGET = qeglfs -QT += platformsupport-private eglfsdeviceintegration-private +QT += eglfsdeviceintegration-private SOURCES += $$PWD/qeglfsmain.cpp diff --git a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro index 15a825a7b0..638d12a368 100644 --- a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro +++ b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro @@ -8,7 +8,15 @@ TARGET = QtEglFSDeviceIntegration CONFIG += internal_module MODULE = eglfsdeviceintegration -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + devicediscovery_support-private eventdispatcher_support-private \ + service_support-private theme_support-private fontdatabase_support-private \ + fb_support-private egl_support-private platformcompositor_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private + LIBS += $$QMAKE_LIBS_DYNLOAD # Avoid X11 header collision, use generic EGL native types @@ -33,6 +41,10 @@ QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF CONFIG += egl qpa/genericunixfontdatabase +# Prevent gold linker from crashing. +# This started happening when QtPlatformSupport was modularized. +use_gold_linker: CONFIG += no_linker_version_script + !contains(DEFINES, QT_NO_CURSOR): RESOURCES += $$PWD/cursor.qrc load(qt_module) diff --git a/src/plugins/platforms/haiku/haiku.pro b/src/plugins/platforms/haiku/haiku.pro index 931dfb28a8..fd1f47b963 100644 --- a/src/plugins/platforms/haiku/haiku.pro +++ b/src/plugins/platforms/haiku/haiku.pro @@ -1,6 +1,6 @@ TARGET = qhaiku -QT += platformsupport-private core-private gui-private +QT += core-private gui-private eventdistpatcher_support-private SOURCES = \ main.cpp \ diff --git a/src/plugins/platforms/haiku/qhaikuintegration.cpp b/src/plugins/platforms/haiku/qhaikuintegration.cpp index d239380866..d46d77ff18 100644 --- a/src/plugins/platforms/haiku/qhaikuintegration.cpp +++ b/src/plugins/platforms/haiku/qhaikuintegration.cpp @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include diff --git a/src/plugins/platforms/integrity/integrity.pro b/src/plugins/platforms/integrity/integrity.pro index 07dbf4093d..178fc1b882 100644 --- a/src/plugins/platforms/integrity/integrity.pro +++ b/src/plugins/platforms/integrity/integrity.pro @@ -1,6 +1,9 @@ TARGET = integrityfb -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private service_support-private \ + fontdatabase_support-private fb_support-private SOURCES = \ main.cpp \ diff --git a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp index 5332718c5e..a88c85e30d 100644 --- a/src/plugins/platforms/integrity/qintegrityfbintegration.cpp +++ b/src/plugins/platforms/integrity/qintegrityfbintegration.cpp @@ -35,13 +35,13 @@ #include "qintegrityfbscreen.h" #include "qintegrityhidmanager.h" -#include -#include -#include +#include +#include +#include -#include -#include -#include +#include +#include +#include #include #include diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp index e043da7786..256cc117a2 100644 --- a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp +++ b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp @@ -32,8 +32,8 @@ ****************************************************************************/ #include "qintegrityfbscreen.h" -#include -#include +#include +#include #include #include diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.h b/src/plugins/platforms/integrity/qintegrityfbscreen.h index 2a83f3426f..5b4d900a4b 100644 --- a/src/plugins/platforms/integrity/qintegrityfbscreen.h +++ b/src/plugins/platforms/integrity/qintegrityfbscreen.h @@ -34,7 +34,7 @@ #ifndef QINTEGRITYFBSCREEN_H #define QINTEGRITYFBSCREEN_H -#include +#include #include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/ios/ios.pro b/src/plugins/platforms/ios/ios.pro index 2c85a68f0b..56efd12435 100644 --- a/src/plugins/platforms/ios/ios.pro +++ b/src/plugins/platforms/ios/ios.pro @@ -1,6 +1,9 @@ TARGET = qios -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + clipboard_support-private fontdatabase_support-private graphics_support-private + LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AudioToolbox OBJECTIVE_SOURCES = \ diff --git a/src/plugins/platforms/ios/qiosbackingstore.h b/src/plugins/platforms/ios/qiosbackingstore.h index 5c37be5d38..1c072c0935 100644 --- a/src/plugins/platforms/ios/qiosbackingstore.h +++ b/src/plugins/platforms/ios/qiosbackingstore.h @@ -42,7 +42,7 @@ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/ios/qiosclipboard.mm b/src/plugins/platforms/ios/qiosclipboard.mm index 960c9f39db..ef3b453bbf 100644 --- a/src/plugins/platforms/ios/qiosclipboard.mm +++ b/src/plugins/platforms/ios/qiosclipboard.mm @@ -41,7 +41,7 @@ #ifndef QT_NO_CLIPBOARD -#include +#include #include #include diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 94dd643116..82b5f3b755 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -57,8 +57,8 @@ #include #include -#include -#include +#include +#include #include #import diff --git a/src/plugins/platforms/ios/qiostheme.mm b/src/plugins/platforms/ios/qiostheme.mm index 83a8176478..91980d3f35 100644 --- a/src/plugins/platforms/ios/qiostheme.mm +++ b/src/plugins/platforms/ios/qiostheme.mm @@ -44,7 +44,7 @@ #include -#include +#include #include #include diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index db365ce739..a752f95917 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -2,7 +2,13 @@ TARGET = qlinuxfb DEFINES += QT_NO_FOREACH -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + service_support-private eventdispatcher_support-private \ + fontdatabase_support-private fb_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private SOURCES = main.cpp qlinuxfbintegration.cpp qlinuxfbscreen.cpp HEADERS = qlinuxfbintegration.h qlinuxfbscreen.h diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index 707301487d..893205177d 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -40,30 +40,30 @@ #include "qlinuxfbintegration.h" #include "qlinuxfbscreen.h" -#include -#include -#include +#include +#include +#include -#include -#include -#include -#include +#include +#include +#include +#include #include #include #if QT_CONFIG(libinput) -#include +#include #endif #if QT_CONFIG(evdev) && !defined(Q_OS_ANDROID) -#include -#include -#include +#include +#include +#include #endif #if QT_CONFIG(tslib) && !defined(Q_OS_ANDROID) -#include +#include #endif QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp index a2e09611b4..246c959fd3 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp @@ -38,8 +38,8 @@ ****************************************************************************/ #include "qlinuxfbscreen.h" -#include -#include +#include +#include #include #include #include diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h index ada9c4d830..1e98191569 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h @@ -40,7 +40,7 @@ #ifndef QLINUXFBSCREEN_H #define QLINUXFBSCREEN_H -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index d4627605bb..0fffb24d24 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -1,6 +1,8 @@ TARGET = qminimal -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private DEFINES += QT_NO_FOREACH diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp index 558089dfce..03c72502cb 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.cpp +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -45,15 +45,15 @@ #include #if defined(Q_OS_WIN) -#include +#include #elif QT_CONFIG(fontconfig) -#include +#include #else #include #endif #if !defined(Q_OS_WIN) -#include +#include #elif defined(Q_OS_WINRT) #include #else diff --git a/src/plugins/platforms/minimalegl/minimalegl.pro b/src/plugins/platforms/minimalegl/minimalegl.pro index b8a91729fd..46334a0250 100644 --- a/src/plugins/platforms/minimalegl/minimalegl.pro +++ b/src/plugins/platforms/minimalegl/minimalegl.pro @@ -1,6 +1,8 @@ TARGET = qminimalegl -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private egl_support-private #DEFINES += QEGL_EXTRA_DEBUG diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp index b1d3691a10..2afe42532e 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp +++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp @@ -42,15 +42,15 @@ #include "qminimaleglwindow.h" #include "qminimaleglbackingstore.h" -#include +#include #if defined(Q_OS_UNIX) -# include +# include #elif defined(Q_OS_WINRT) # include # include #elif defined(Q_OS_WIN) -# include +# include #endif #include @@ -58,7 +58,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp index e8a9641224..d3d091fab7 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp +++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp @@ -40,8 +40,8 @@ #include "qminimaleglscreen.h" #include "qminimaleglwindow.h" -#include -#include +#include +#include #ifdef Q_OPENKODE #include diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.h b/src/plugins/platforms/minimalegl/qminimaleglscreen.h index 4b53bbd39a..ba605835a8 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglscreen.h +++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.h @@ -44,7 +44,7 @@ #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/mirclient/mirclient.pro b/src/plugins/platforms/mirclient/mirclient.pro index d5d35f1632..054fe74a46 100644 --- a/src/plugins/platforms/mirclient/mirclient.pro +++ b/src/plugins/platforms/mirclient/mirclient.pro @@ -1,6 +1,9 @@ TARGET = qmirclient -QT += core-private gui-private platformsupport-private dbus +QT += \ + core-private gui-private dbus \ + theme_support-private eventdispatcher_support-private \ + fontdatabase_support-private egl_support-private CONFIG += qpa/genericunixfontdatabase diff --git a/src/plugins/platforms/mirclient/qmirclientglcontext.cpp b/src/plugins/platforms/mirclient/qmirclientglcontext.cpp index 4092669cfc..38eb0a4609 100644 --- a/src/plugins/platforms/mirclient/qmirclientglcontext.cpp +++ b/src/plugins/platforms/mirclient/qmirclientglcontext.cpp @@ -41,7 +41,7 @@ #include "qmirclientglcontext.h" #include "qmirclientwindow.h" #include "qmirclientlogging.h" -#include +#include #include #include diff --git a/src/plugins/platforms/mirclient/qmirclientintegration.cpp b/src/plugins/platforms/mirclient/qmirclientintegration.cpp index cfbcdc937e..2c8740f070 100644 --- a/src/plugins/platforms/mirclient/qmirclientintegration.cpp +++ b/src/plugins/platforms/mirclient/qmirclientintegration.cpp @@ -56,8 +56,8 @@ #include #include #include -#include -#include +#include +#include #include // platform-api diff --git a/src/plugins/platforms/mirclient/qmirclientplatformservices.h b/src/plugins/platforms/mirclient/qmirclientplatformservices.h index 46cf4300f8..a1cd5758ca 100644 --- a/src/plugins/platforms/mirclient/qmirclientplatformservices.h +++ b/src/plugins/platforms/mirclient/qmirclientplatformservices.h @@ -42,8 +42,8 @@ #define QMIRCLIENTPLATFORMSERVICES_H #include -#include -#include +#include +#include class QMirClientPlatformServices : public QPlatformServices { public: diff --git a/src/plugins/platforms/mirclient/qmirclientscreen.cpp b/src/plugins/platforms/mirclient/qmirclientscreen.cpp index ca0c3e4733..0a2253e9e2 100644 --- a/src/plugins/platforms/mirclient/qmirclientscreen.cpp +++ b/src/plugins/platforms/mirclient/qmirclientscreen.cpp @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include diff --git a/src/plugins/platforms/mirclient/qmirclienttheme.h b/src/plugins/platforms/mirclient/qmirclienttheme.h index 19728741e3..4bab1d0ee0 100644 --- a/src/plugins/platforms/mirclient/qmirclienttheme.h +++ b/src/plugins/platforms/mirclient/qmirclienttheme.h @@ -41,7 +41,7 @@ #ifndef QMIRCLIENTTHEME_H #define QMIRCLIENTTHEME_H -#include +#include class QMirClientTheme : public QGenericUnixTheme { diff --git a/src/plugins/platforms/offscreen/offscreen.pro b/src/plugins/platforms/offscreen/offscreen.pro index fbaa853c41..6652cefd86 100644 --- a/src/plugins/platforms/offscreen/offscreen.pro +++ b/src/plugins/platforms/offscreen/offscreen.pro @@ -1,6 +1,8 @@ TARGET = qoffscreen -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private DEFINES += QT_NO_FOREACH @@ -18,6 +20,7 @@ OTHER_FILES += offscreen.json qtConfig(xlib):qtConfig(opengl):!qtConfig(opengles2) { SOURCES += qoffscreenintegration_x11.cpp HEADERS += qoffscreenintegration_x11.h + QT += glx_support-private system(echo "Using X11 offscreen integration with GLX") } else { SOURCES += qoffscreenintegration_dummy.cpp diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp index 4c3d62a53b..56e6075cb2 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp @@ -42,14 +42,14 @@ #include "qoffscreencommon.h" #if defined(Q_OS_UNIX) -#include +#include #if defined(Q_OS_MAC) #include #else -#include +#include #endif #elif defined(Q_OS_WIN) -#include +#include #ifndef Q_OS_WINRT #include #else diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp index 2187eceed4..b46d94dfd3 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.cpp @@ -45,7 +45,7 @@ #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/openwfd/openwf.pro b/src/plugins/platforms/openwfd/openwf.pro index 79f349f472..747cbf404a 100644 --- a/src/plugins/platforms/openwfd/openwf.pro +++ b/src/plugins/platforms/openwfd/openwf.pro @@ -1,6 +1,8 @@ TARGET = qopenwf -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private fontdatabase_support-private CONFIG += qpa/genericunixfontdatabase diff --git a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp index 71e2b381fc..9ed61f7b2e 100644 --- a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp +++ b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp @@ -51,8 +51,8 @@ #include #include -#include -#include +#include +#include #include diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro index a726980f5b..9da3d6811b 100644 --- a/src/plugins/platforms/qnx/qnx.pro +++ b/src/plugins/platforms/qnx/qnx.pro @@ -1,6 +1,8 @@ TARGET = qqnx -QT += platformsupport-private core-private gui-private +QT += \ + core-private gui-private \ + fontdatabase_support-private eventdispatcher_support-private egl_support-private # Uncomment this to build with support for IMF once it becomes available in the BBNDK #CONFIG += qqnx_imf diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 3227478ebe..025112c790 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -38,19 +38,19 @@ #include "qvncscreen.h" #include "qvnc_p.h" -#include -#include -#include +#include +#include +#include -#include -#include -#include +#include +#include +#include #include #include #include #if QT_CONFIG(libinput) -#include +#include #endif #include diff --git a/src/plugins/platforms/vnc/qvncscreen.cpp b/src/plugins/platforms/vnc/qvncscreen.cpp index 6d117c62bf..34def45767 100644 --- a/src/plugins/platforms/vnc/qvncscreen.cpp +++ b/src/plugins/platforms/vnc/qvncscreen.cpp @@ -39,8 +39,8 @@ #include "qvncscreen.h" #include "qvnc_p.h" -#include -#include +#include +#include #include #include diff --git a/src/plugins/platforms/vnc/qvncscreen.h b/src/plugins/platforms/vnc/qvncscreen.h index e3c6651781..785abd6dc2 100644 --- a/src/plugins/platforms/vnc/qvncscreen.h +++ b/src/plugins/platforms/vnc/qvncscreen.h @@ -40,7 +40,7 @@ #ifndef QVncScreen_H #define QVncScreen_H -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 1817e15201..15407f9298 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -5,7 +5,13 @@ PLUGIN_CLASS_NAME = QVncIntegrationPlugin !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - load(qt_plugin) -QT += core-private gui-private platformsupport-private network +QT += \ + core-private network gui-private \ + service_support-private theme_support-private fb_support-private \ + eventdispatcher_support-private fontdatabase_support-private + +qtHaveModule(input_support-private): \ + QT += input_support-private DEFINES += QT_NO_FOREACH diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp index 5ba49a8a98..d5cd9ac6db 100644 --- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp +++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp @@ -41,7 +41,7 @@ #include "iaccessible2.h" #include "qwindowsaccessibility.h" -#include +#include #include #include #include diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index 21bc9d7377..d4a7e27762 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -53,7 +53,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index d4cdf3ef3c..bc317c7f5d 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -72,7 +72,7 @@ #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h index fa8f777133..90008e20a4 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h +++ b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h @@ -40,7 +40,7 @@ #ifndef QWINDOWSFONTDATABASEFT_H #define QWINDOWSFONTDATABASEFT_H -#include +#include #include #include diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index b9a63c7a89..16a2b56774 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -72,7 +72,7 @@ #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp index fd7eca9e32..b8c4f0b736 100644 --- a/src/plugins/platforms/windows/qwindowskeymapper.cpp +++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp @@ -49,7 +49,7 @@ #include #include #include -#include +#include #if defined(WM_APPCOMMAND) # ifndef FAPPCOMMAND_MOUSE diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index 841464391d..fe67c0ce37 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -68,7 +68,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/windows/windows.pro b/src/plugins/platforms/windows/windows.pro index adafa830d5..23168c10dc 100644 --- a/src/plugins/platforms/windows/windows.pro +++ b/src/plugins/platforms/windows/windows.pro @@ -1,8 +1,9 @@ TARGET = qwindows -QT *= core-private -QT *= gui-private -QT *= platformsupport-private +QT += \ + core-private gui-private \ + eventdispatcher_support-private accessibility_support-private \ + fontdatabase_support-private theme_support-private LIBS += -lgdi32 -ldwmapi diff --git a/src/plugins/platforms/winrt/qwinrteglcontext.cpp b/src/plugins/platforms/winrt/qwinrteglcontext.cpp index 5c3ecd8726..8a250c516a 100644 --- a/src/plugins/platforms/winrt/qwinrteglcontext.cpp +++ b/src/plugins/platforms/winrt/qwinrteglcontext.cpp @@ -51,8 +51,8 @@ #include #include -#include -#include +#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/winrt/qwinrtfontdatabase.h b/src/plugins/platforms/winrt/qwinrtfontdatabase.h index 8539bcb9db..8fed4a3fa7 100644 --- a/src/plugins/platforms/winrt/qwinrtfontdatabase.h +++ b/src/plugins/platforms/winrt/qwinrtfontdatabase.h @@ -40,7 +40,7 @@ #ifndef QWINRTFONTDATABASE_H #define QWINRTFONTDATABASE_H -#include +#include #include struct IDWriteFontFile; diff --git a/src/plugins/platforms/winrt/qwinrtintegration.cpp b/src/plugins/platforms/winrt/qwinrtintegration.cpp index 32edf2b1a2..7a0c95e6c1 100644 --- a/src/plugins/platforms/winrt/qwinrtintegration.cpp +++ b/src/plugins/platforms/winrt/qwinrtintegration.cpp @@ -56,7 +56,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/plugins/platforms/winrt/qwinrtwindow.cpp b/src/plugins/platforms/winrt/qwinrtwindow.cpp index 5b82183d40..297e6618d1 100644 --- a/src/plugins/platforms/winrt/qwinrtwindow.cpp +++ b/src/plugins/platforms/winrt/qwinrtwindow.cpp @@ -50,7 +50,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/plugins/platforms/winrt/winrt.pro b/src/plugins/platforms/winrt/winrt.pro index 174b0362b4..8fd2a83a16 100644 --- a/src/plugins/platforms/winrt/winrt.pro +++ b/src/plugins/platforms/winrt/winrt.pro @@ -2,7 +2,9 @@ TARGET = qwinrt CONFIG -= precompile_header -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + fontdatabase_support-private egl_support-private DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__ diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri index a94815dfbd..b44e4ecaa9 100644 --- a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri +++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri @@ -1,4 +1,4 @@ -QT += core-private gui-private platformsupport-private xcb_qpa_lib-private +QT += core-private gui-private xcb_qpa_lib-private INCLUDEPATH += $$PWD INCLUDEPATH += $$PWD/../ diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h index 64e9bec6db..48e774bbb2 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h @@ -41,8 +41,8 @@ #define QXCBEGLCONTEXT_H #include "qxcbeglwindow.h" -#include -#include +#include +#include #include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h index 7c6524c8ee..a5a47dd0bb 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h @@ -46,7 +46,7 @@ #include #include -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp index 00f64e3c40..4852d38f7e 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp @@ -42,7 +42,7 @@ #include "qxcbeglcontext.h" #include -#include +#include #include "qxcbeglnativeinterfacehandler.h" diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp index 69b7dfbdbf..3f7ef94238 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp @@ -41,8 +41,8 @@ #include "qxcbeglintegration.h" -#include -#include +#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro index 6b3f9b171a..1c193849ca 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro @@ -1,6 +1,7 @@ TARGET = qxcb-egl-integration include(../gl_integrations_plugin_base.pri) +QT += egl_support-private CONFIG += egl diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp index 5580f81a7a..dc720c090f 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp @@ -51,7 +51,7 @@ #include #include "qglxintegration.h" -#include +#include #include #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp index 8ae83b8084..e534ae13c6 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp @@ -40,7 +40,7 @@ #include "qxcbglxwindow.h" #include "qxcbscreen.h" -#include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro index e52677d091..8aa6e1febd 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro @@ -1,6 +1,7 @@ TARGET = qxcb-glx-integration include(../gl_integrations_plugin_base.pri) +QT += glx_support-private #should be removed from the sources DEFINES += XCB_USE_GLX XCB_USE_XLIB diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp index b0c5ac79f9..f4da7ba033 100644 --- a/src/plugins/platforms/xcb/qxcbintegration.cpp +++ b/src/plugins/platforms/xcb/qxcbintegration.cpp @@ -55,9 +55,9 @@ #include -#include -#include -#include +#include +#include +#include #include @@ -77,7 +77,7 @@ #ifndef QT_NO_ACCESSIBILITY #include #ifndef QT_NO_ACCESSIBILITY_ATSPI_BRIDGE -#include "../../../platformsupport/linuxaccessibility/bridge_p.h" +#include #endif #endif diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro index d7f150f276..01d493156d 100644 --- a/src/plugins/platforms/xcb/xcb-plugin.pro +++ b/src/plugins/platforms/xcb/xcb-plugin.pro @@ -1,6 +1,6 @@ TARGET = qxcb -QT += core-private gui-private platformsupport-private xcb_qpa_lib-private +QT += core-private gui-private xcb_qpa_lib-private DEFINES += QT_NO_FOREACH diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro index 69d2e35606..37556baa1d 100644 --- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro +++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro @@ -2,7 +2,13 @@ TARGET = QtXcbQpa CONFIG += no_module_headers internal_module DEFINES += QT_NO_FOREACH -QT += core-private gui-private platformsupport-private +QT += \ + core-private gui-private \ + service_support-private theme_support-private \ + eventdispatcher_support-private fontdatabase_support-private + +qtHaveModule(linuxaccessibility_support-private): \ + QT += linuxaccessibility_support-private SOURCES = \ qxcbclipboard.cpp \ diff --git a/src/plugins/platformthemes/gtk3/gtk3.pro b/src/plugins/platformthemes/gtk3/gtk3.pro index 12364b0b57..c291ac56a0 100644 --- a/src/plugins/platformthemes/gtk3/gtk3.pro +++ b/src/plugins/platformthemes/gtk3/gtk3.pro @@ -5,7 +5,7 @@ PLUGIN_EXTENDS = - PLUGIN_CLASS_NAME = QGtk3ThemePlugin load(qt_plugin) -QT += core-private gui-private platformsupport-private +QT += core-private gui-private theme_support-private CONFIG += X11 QMAKE_USE += gtk3 diff --git a/tests/manual/qopenglcontext/qopenglcontext.pro b/tests/manual/qopenglcontext/qopenglcontext.pro index c5943809c6..08a9ab407c 100644 --- a/tests/manual/qopenglcontext/qopenglcontext.pro +++ b/tests/manual/qopenglcontext/qopenglcontext.pro @@ -1,7 +1,7 @@ TEMPLATE = app TARGET = qopenglcontext -QT += gui-private platformsupport-private +QT += gui-private egl_support-private HEADERS += $$PWD/qopenglcontextwindow.h diff --git a/tests/manual/qopenglcontext/qopenglcontextwindow.cpp b/tests/manual/qopenglcontext/qopenglcontextwindow.cpp index f49908ca28..0763d7244c 100644 --- a/tests/manual/qopenglcontext/qopenglcontextwindow.cpp +++ b/tests/manual/qopenglcontext/qopenglcontextwindow.cpp @@ -33,7 +33,7 @@ #include #include -#include +#include #include QOpenGLContextWindow::QOpenGLContextWindow() From f25afef61da17088fc9cdeb15be7144ef0c7c867 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 12 Oct 2016 12:08:33 +0200 Subject: [PATCH 058/196] rely on transitive library dependencies for freetype/fontconfig so far, we have been delaying the linking, because we didn't want to make the monolithic platformsupport module pull in spurious dependencies. however, now that the module was split, there is no need to play such games any more. a nice effect of this is that the hideous qpa/*unixfontdatabase.prf files disappear, and finally freetype_dependency.pri also becomes trivial and is thus inlined. Change-Id: I255376d592625542310a31222eb6ac965943df99 Reviewed-by: Jake Petroules --- mkspecs/features/qpa/basicunixfontdatabase.prf | 3 --- mkspecs/features/qpa/genericunixfontdatabase.prf | 5 ----- src/3rdparty/freetype_dependency.pri | 5 ----- src/platformsupport/fontdatabases/basic/basic.pri | 2 +- src/platformsupport/fontdatabases/fontconfig/fontconfig.pri | 2 +- src/platformsupport/fontdatabases/fontdatabases.pro | 1 - src/platformsupport/fontdatabases/mac/coretext.pri | 2 +- src/plugins/platforms/android/android.pro | 2 -- src/plugins/platforms/bsdfb/bsdfb.pro | 2 -- src/plugins/platforms/directfb/directfb.pro | 3 --- src/plugins/platforms/eglfs/eglfsdeviceintegration.pro | 2 +- src/plugins/platforms/integrity/integrity.pro | 2 -- src/plugins/platforms/linuxfb/linuxfb.pro | 2 -- src/plugins/platforms/minimal/minimal.pro | 2 -- src/plugins/platforms/minimalegl/minimalegl.pro | 2 +- src/plugins/platforms/mirclient/mirclient.pro | 2 -- src/plugins/platforms/openwfd/openwf.pro | 2 -- src/plugins/platforms/vnc/vnc.pro | 2 -- .../xcb/gl_integrations/gl_integrations_plugin_base.pri | 2 -- src/plugins/platforms/xcb/xcb_qpa_lib.pro | 2 -- 20 files changed, 5 insertions(+), 42 deletions(-) delete mode 100644 mkspecs/features/qpa/basicunixfontdatabase.prf delete mode 100644 mkspecs/features/qpa/genericunixfontdatabase.prf delete mode 100644 src/3rdparty/freetype_dependency.pri diff --git a/mkspecs/features/qpa/basicunixfontdatabase.prf b/mkspecs/features/qpa/basicunixfontdatabase.prf deleted file mode 100644 index 327cd927d8..0000000000 --- a/mkspecs/features/qpa/basicunixfontdatabase.prf +++ /dev/null @@ -1,3 +0,0 @@ -qtConfig(system-freetype) { - QMAKE_USE += freetype/linkonly -} diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf deleted file mode 100644 index f5e54618aa..0000000000 --- a/mkspecs/features/qpa/genericunixfontdatabase.prf +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG += qpa/basicunixfontdatabase -qtConfig(fontconfig) { - QMAKE_USE += fontconfig/linkonly -} - diff --git a/src/3rdparty/freetype_dependency.pri b/src/3rdparty/freetype_dependency.pri deleted file mode 100644 index c477e6fdea..0000000000 --- a/src/3rdparty/freetype_dependency.pri +++ /dev/null @@ -1,5 +0,0 @@ -qtConfig(system-freetype) { - QMAKE_USE += freetype/nolink -} else: qtConfig(freetype) { - QMAKE_USE += freetype -} diff --git a/src/platformsupport/fontdatabases/basic/basic.pri b/src/platformsupport/fontdatabases/basic/basic.pri index 575c93fe20..c50dba3ce2 100644 --- a/src/platformsupport/fontdatabases/basic/basic.pri +++ b/src/platformsupport/fontdatabases/basic/basic.pri @@ -6,4 +6,4 @@ SOURCES += \ $$PWD/qbasicfontdatabase.cpp \ $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp -include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) +QMAKE_USE += freetype diff --git a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri index 911f0c884d..6458464870 100644 --- a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri +++ b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri @@ -3,4 +3,4 @@ HEADERS += $$PWD/qfontconfigdatabase_p.h \ SOURCES += $$PWD/qfontconfigdatabase.cpp \ $$PWD/qfontenginemultifontconfig.cpp -QMAKE_USE += fontconfig/nolink +QMAKE_USE += fontconfig diff --git a/src/platformsupport/fontdatabases/fontdatabases.pro b/src/platformsupport/fontdatabases/fontdatabases.pro index fdfe3f59ea..7ffeda6fe2 100644 --- a/src/platformsupport/fontdatabases/fontdatabases.pro +++ b/src/platformsupport/fontdatabases/fontdatabases.pro @@ -15,7 +15,6 @@ darwin:!if(watchos:CONFIG(simulator, simulator|device)) { } unix { - CONFIG += qpa/genericunixfontdatabase include($$PWD/genericunix/genericunix.pri) qtConfig(fontconfig) { include($$PWD/fontconfig/fontconfig.pri) diff --git a/src/platformsupport/fontdatabases/mac/coretext.pri b/src/platformsupport/fontdatabases/mac/coretext.pri index 4d19a59226..1caeb2c1ac 100644 --- a/src/platformsupport/fontdatabases/mac/coretext.pri +++ b/src/platformsupport/fontdatabases/mac/coretext.pri @@ -2,7 +2,7 @@ HEADERS += $$PWD/qcoretextfontdatabase_p.h $$PWD/qfontengine_coretext_p.h OBJECTIVE_SOURCES += $$PWD/qfontengine_coretext.mm $$PWD/qcoretextfontdatabase.mm qtConfig(freetype) { - include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) + QMAKE_USE += freetype HEADERS += $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft_p.h SOURCES += $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp } diff --git a/src/plugins/platforms/android/android.pro b/src/plugins/platforms/android/android.pro index 5912edc847..bd3fe5a6cc 100644 --- a/src/plugins/platforms/android/android.pro +++ b/src/plugins/platforms/android/android.pro @@ -11,8 +11,6 @@ QT += \ eventdispatcher_support-private accessibility_support-private \ fontdatabase_support-private egl_support-private -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += $$PWD/android.json INCLUDEPATH += \ diff --git a/src/plugins/platforms/bsdfb/bsdfb.pro b/src/plugins/platforms/bsdfb/bsdfb.pro index 294edcd35d..770145a8ff 100644 --- a/src/plugins/platforms/bsdfb/bsdfb.pro +++ b/src/plugins/platforms/bsdfb/bsdfb.pro @@ -11,8 +11,6 @@ qtHaveModule(input_support-private): \ SOURCES = main.cpp qbsdfbintegration.cpp qbsdfbscreen.cpp HEADERS = qbsdfbintegration.h qbsdfbscreen.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += bsdfb.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index da7634856c..406b89e3b2 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -44,9 +44,6 @@ qtConfig(directfb_egl) { SOURCES += qdirectfbeglhooks_stub.cpp } - -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += directfb.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro index 638d12a368..35af3615bd 100644 --- a/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro +++ b/src/plugins/platforms/eglfs/eglfsdeviceintegration.pro @@ -39,7 +39,7 @@ QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF DEFINES += EGLFS_PREFERRED_PLUGIN=$$EGLFS_DEVICE_INTEGRATION } -CONFIG += egl qpa/genericunixfontdatabase +CONFIG += egl # Prevent gold linker from crashing. # This started happening when QtPlatformSupport was modularized. diff --git a/src/plugins/platforms/integrity/integrity.pro b/src/plugins/platforms/integrity/integrity.pro index 178fc1b882..0fb256793d 100644 --- a/src/plugins/platforms/integrity/integrity.pro +++ b/src/plugins/platforms/integrity/integrity.pro @@ -16,8 +16,6 @@ HEADERS = \ qintegrityfbscreen.h \ qintegrityhidmanager.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += integrity.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index a752f95917..e2fa31211d 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -13,8 +13,6 @@ qtHaveModule(input_support-private): \ SOURCES = main.cpp qlinuxfbintegration.cpp qlinuxfbscreen.cpp HEADERS = qlinuxfbintegration.h qlinuxfbscreen.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += linuxfb.json PLUGIN_TYPE = platforms diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index 0fffb24d24..8cfb68824e 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -14,8 +14,6 @@ HEADERS = qminimalintegration.h \ OTHER_FILES += minimal.json -CONFIG += qpa/genericunixfontdatabase - PLUGIN_TYPE = platforms PLUGIN_CLASS_NAME = QMinimalIntegrationPlugin !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - diff --git a/src/plugins/platforms/minimalegl/minimalegl.pro b/src/plugins/platforms/minimalegl/minimalegl.pro index 46334a0250..88466e7f36 100644 --- a/src/plugins/platforms/minimalegl/minimalegl.pro +++ b/src/plugins/platforms/minimalegl/minimalegl.pro @@ -22,7 +22,7 @@ HEADERS = qminimaleglintegration.h \ qminimaleglbackingstore.h \ qminimaleglscreen.h -CONFIG += egl qpa/genericunixfontdatabase +CONFIG += egl OTHER_FILES += \ minimalegl.json diff --git a/src/plugins/platforms/mirclient/mirclient.pro b/src/plugins/platforms/mirclient/mirclient.pro index 054fe74a46..623f7bf97b 100644 --- a/src/plugins/platforms/mirclient/mirclient.pro +++ b/src/plugins/platforms/mirclient/mirclient.pro @@ -5,8 +5,6 @@ QT += \ theme_support-private eventdispatcher_support-private \ fontdatabase_support-private egl_support-private -CONFIG += qpa/genericunixfontdatabase - DEFINES += MESA_EGL_NO_X11_HEADERS # CONFIG += c++11 # only enables C++0x QMAKE_CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -Werror -Wall diff --git a/src/plugins/platforms/openwfd/openwf.pro b/src/plugins/platforms/openwfd/openwf.pro index 747cbf404a..6012731b65 100644 --- a/src/plugins/platforms/openwfd/openwf.pro +++ b/src/plugins/platforms/openwfd/openwf.pro @@ -4,8 +4,6 @@ QT += \ core-private gui-private \ eventdispatcher_support-private fontdatabase_support-private -CONFIG += qpa/genericunixfontdatabase - HEADERS += \ qopenwfddevice.h \ qopenwfdintegration.h \ diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 15407f9298..3cd7e9b160 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -28,6 +28,4 @@ HEADERS = \ qvnc_p.h \ qvncclient.h -CONFIG += qpa/genericunixfontdatabase - OTHER_FILES += vnc.json diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri index b44e4ecaa9..4ab406acb9 100644 --- a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri +++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri @@ -18,8 +18,6 @@ qtConfig(xcb-sm) { DEFINES += XCB_USE_SM } -CONFIG += qpa/genericunixfontdatabase - !qtConfig(system-xcb) { DEFINES += XCB_USE_RENDER QMAKE_USE += xcb-static xcb diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro index 37556baa1d..6db0c76dea 100644 --- a/src/plugins/platforms/xcb/xcb_qpa_lib.pro +++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro @@ -70,8 +70,6 @@ qtConfig(xcb-sm) { include(gl_integrations/gl_integrations.pri) -CONFIG += qpa/genericunixfontdatabase - !qtConfig(system-xcb) { DEFINES += XCB_USE_RENDER QMAKE_USE += xcb-static xcb From d976cee1e524006a3c813c23d46fd0404d1cac08 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 29 Sep 2016 10:46:59 +0200 Subject: [PATCH 059/196] make use of QT_REQUIRE_CONFIG() in platformsupport modules Change-Id: I26fbe75c65c10d68454e64e306f7155367e66cf6 Reviewed-by: Jake Petroules --- src/platformsupport/accessibility/accessibility.pro | 2 +- .../accessibility/qaccessiblebridgeutils.cpp | 4 ---- .../accessibility/qaccessiblebridgeutils_p.h | 6 +++--- src/platformsupport/linuxaccessibility/application_p.h | 5 ++--- src/platformsupport/linuxaccessibility/atspiadaptor_p.h | 5 +++-- src/platformsupport/linuxaccessibility/bridge_p.h | 5 +++-- src/platformsupport/linuxaccessibility/cache_p.h | 5 +++-- .../linuxaccessibility/constant_mappings_p.h | 4 ++-- .../linuxaccessibility/struct_marshallers_p.h | 5 +++-- .../themes/genericunix/dbustray/qdbustrayicon_p.h | 5 ++--- .../themes/genericunix/dbustray/qdbustraytypes_p.h | 5 +++-- .../genericunix/dbustray/qstatusnotifieritemadaptor_p.h | 6 +++--- 12 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/platformsupport/accessibility/accessibility.pro b/src/platformsupport/accessibility/accessibility.pro index 49be899b08..5004dc8cbe 100644 --- a/src/platformsupport/accessibility/accessibility.pro +++ b/src/platformsupport/accessibility/accessibility.pro @@ -1,7 +1,7 @@ TARGET = QtAccessibilitySupport MODULE = accessibility_support -QT = core-private gui +QT = core-private gui-private CONFIG += static internal_module DEFINES += QT_NO_CAST_FROM_ASCII diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp b/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp index 935cff3e6c..f280e65c29 100644 --- a/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp +++ b/src/platformsupport/accessibility/qaccessiblebridgeutils.cpp @@ -39,8 +39,6 @@ #include "qaccessiblebridgeutils_p.h" #include -#ifndef QT_NO_ACCESSIBILITY - QT_BEGIN_NAMESPACE namespace QAccessibleBridgeUtils { @@ -113,5 +111,3 @@ bool performEffectiveAction(QAccessibleInterface *iface, const QString &actionNa } //namespace QT_END_NAMESPACE - -#endif diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h index 79b153a749..cf8e126894 100644 --- a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h +++ b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h @@ -51,10 +51,12 @@ // We mean it. // +#include + #include #include -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); QT_BEGIN_NAMESPACE @@ -65,6 +67,4 @@ namespace QAccessibleBridgeUtils { QT_END_NAMESPACE -#endif - #endif //QACCESSIBLEBRIDGEUTILS_H diff --git a/src/platformsupport/linuxaccessibility/application_p.h b/src/platformsupport/linuxaccessibility/application_p.h index 2e6d7a78c1..9c053b253c 100644 --- a/src/platformsupport/linuxaccessibility/application_p.h +++ b/src/platformsupport/linuxaccessibility/application_p.h @@ -51,12 +51,13 @@ // We mean it. // +#include #include #include #include #include -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); QT_BEGIN_NAMESPACE @@ -94,6 +95,4 @@ private: QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY - #endif diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h index 87bdbe4bb6..b5704f53ad 100644 --- a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h +++ b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h @@ -54,6 +54,7 @@ #include +#include #include #include #include @@ -61,7 +62,8 @@ #include "dbusconnection_p.h" #include "struct_marshallers_p.h" -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE class QAccessibleInterface; @@ -222,6 +224,5 @@ private: }; QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif diff --git a/src/platformsupport/linuxaccessibility/bridge_p.h b/src/platformsupport/linuxaccessibility/bridge_p.h index 44dfa82f5d..1e435ca351 100644 --- a/src/platformsupport/linuxaccessibility/bridge_p.h +++ b/src/platformsupport/linuxaccessibility/bridge_p.h @@ -52,12 +52,14 @@ // We mean it. // +#include #include #include class DeviceEventControllerAdaptor; -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE class DBusConnection; @@ -89,6 +91,5 @@ private: }; QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif diff --git a/src/platformsupport/linuxaccessibility/cache_p.h b/src/platformsupport/linuxaccessibility/cache_p.h index f141785301..e8529b779b 100644 --- a/src/platformsupport/linuxaccessibility/cache_p.h +++ b/src/platformsupport/linuxaccessibility/cache_p.h @@ -52,10 +52,12 @@ // We mean it. // +#include #include #include "struct_marshallers_p.h" -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE class QSpiDBusCache : public QObject @@ -76,6 +78,5 @@ public Q_SLOTS: }; QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif /* Q_SPI_CACHE_H */ diff --git a/src/platformsupport/linuxaccessibility/constant_mappings_p.h b/src/platformsupport/linuxaccessibility/constant_mappings_p.h index a096261da6..4da818c8c1 100644 --- a/src/platformsupport/linuxaccessibility/constant_mappings_p.h +++ b/src/platformsupport/linuxaccessibility/constant_mappings_p.h @@ -58,10 +58,11 @@ #include "struct_marshallers_p.h" +#include #include #include -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); // interface names from at-spi2-core/atspi/atspi-misc-private.h #define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry" @@ -141,6 +142,5 @@ QSpiUIntList spiStateSetFromSpiStates(quint64 states); AtspiRelationType qAccessibleRelationToAtSpiRelation(QAccessible::Relation relation); QT_END_NAMESPACE -#endif //QT_NO_ACCESSIBILITY #endif /* Q_SPI_CONSTANT_MAPPINGS_H */ diff --git a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h index 28d96ec5ea..c8cc05ab5b 100644 --- a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h +++ b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h @@ -52,13 +52,15 @@ // We mean it. // +#include #include #include #include #include #include -#ifndef QT_NO_ACCESSIBILITY +QT_REQUIRE_CONFIG(accessibility); + QT_BEGIN_NAMESPACE typedef QVector QSpiIntList; @@ -192,5 +194,4 @@ Q_DECLARE_METATYPE(QSpiAttributeSet) Q_DECLARE_METATYPE(QSpiAppUpdate) Q_DECLARE_METATYPE(QSpiDeviceEvent) -#endif //QT_NO_ACCESSIBILITY #endif /* Q_SPI_STRUCT_MARSHALLERS_H */ diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h index a383ef86fc..234ff60584 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h @@ -52,9 +52,9 @@ // We mean it. // -#include +#include -#ifndef QT_NO_SYSTEMTRAYICON +QT_REQUIRE_CONFIG(systemtrayicon); #include #include @@ -165,5 +165,4 @@ private: QT_END_NAMESPACE -#endif // QT_NO_SYSTEMTRAYICON #endif // QDBUSTRAYICON_H diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h index 1bdc855c3c..3f75555579 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qdbustraytypes_p.h @@ -52,7 +52,9 @@ // We mean it. // -#ifndef QT_NO_SYSTEMTRAYICON +#include + +QT_REQUIRE_CONFIG(systemtrayicon); #include #include @@ -104,5 +106,4 @@ Q_DECLARE_METATYPE(QXdgDBusImageStruct) Q_DECLARE_METATYPE(QXdgDBusImageVector) Q_DECLARE_METATYPE(QXdgDBusToolTipStruct) -#endif // QT_NO_SYSTEMTRAYICON #endif // QDBUSTRAYTYPES_P_H diff --git a/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h b/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h index 776e1b23ef..3f8fca7ac0 100644 --- a/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h +++ b/src/platformsupport/themes/genericunix/dbustray/qstatusnotifieritemadaptor_p.h @@ -62,9 +62,9 @@ // We mean it. // -#include +#include -#ifndef QT_NO_SYSTEMTRAYICON +QT_REQUIRE_CONFIG(systemtrayicon); #include #include @@ -200,5 +200,5 @@ private: }; QT_END_NAMESPACE -#endif // QT_NO_SYSTEMTRAYICON + #endif // QSTATUSNOTIFIERITEMADAPTER_P_H From b00565bc2803bb783e8f2b0d02becfa73323e283 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 15 Jun 2016 14:07:33 +0200 Subject: [PATCH 060/196] iOS: check if qApp is still valid before accessing it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the application quits, the iOS plugin can be told to delete after qApp has been set to null. So we need to add a check for this, to avoid error messages. Change-Id: I687e0b26e0c54fdd5a8539fe0f31b2e756ea92d8 Reviewed-by: Tor Arne Vestbø Reviewed-by: Jake Petroules --- src/plugins/platforms/ios/qiostextinputoverlay.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/ios/qiostextinputoverlay.mm b/src/plugins/platforms/ios/qiostextinputoverlay.mm index d930965bde..54c2e98d71 100644 --- a/src/plugins/platforms/ios/qiostextinputoverlay.mm +++ b/src/plugins/platforms/ios/qiostextinputoverlay.mm @@ -994,7 +994,8 @@ QIOSTextInputOverlay::QIOSTextInputOverlay() QIOSTextInputOverlay::~QIOSTextInputOverlay() { - disconnect(qApp, 0, this, 0); + if (qApp) + disconnect(qApp, 0, this, 0); } void QIOSTextInputOverlay::updateFocusObject() From 90fe2c64f5edf299783b2a9cf695a1a417a0361a Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 8 Aug 2016 15:53:31 +0200 Subject: [PATCH 061/196] Make self-contained test of condensed font matching and width Fixes the test for width of condensed fonts so it doesn't depend on the presence of the Liberation font on the system, and adds another test that condensed sub-families can be matched consistently. The latter will however not work on Windows until QTBUG-53458 is solved. Task-number: QTBUG-51335. Change-Id: Id6d046274fa21b2dce0ad6b32dce7f1c8a92a4f4 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../gui/text/qfontdatabase/qfontdatabase.pro | 4 +- .../auto/gui/text/qfontdatabase/testdata.qrc | 2 + .../text/qfontdatabase/tst_qfontdatabase.cpp | 69 ++++++++++++++---- .../shared/resources/testfont_condensed.ttf | Bin 0 -> 66512 bytes 4 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 tests/auto/shared/resources/testfont_condensed.ttf diff --git a/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro b/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro index 8a08cdc182..9d357a35f2 100644 --- a/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro +++ b/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro @@ -4,7 +4,5 @@ SOURCES += tst_qfontdatabase.cpp QT += testlib core-private gui-private TESTDATA += LED_REAL.TTF -android { - RESOURCES += testdata.qrc -} +RESOURCES += testdata.qrc diff --git a/tests/auto/gui/text/qfontdatabase/testdata.qrc b/tests/auto/gui/text/qfontdatabase/testdata.qrc index 8a8670bf17..81a0b5b0bf 100644 --- a/tests/auto/gui/text/qfontdatabase/testdata.qrc +++ b/tests/auto/gui/text/qfontdatabase/testdata.qrc @@ -1,5 +1,7 @@ LED_REAL.TTF + ../../../shared/resources/testfont.ttf + ../../../shared/resources/testfont_condensed.ttf diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp index f71d808390..c53792da99 100644 --- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp +++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp @@ -64,20 +64,27 @@ private slots: void aliases(); void fallbackFonts(); - void liberationFont(); + void condensedFontWidth(); + void condensedFontMatching(); private: - const QString m_testFont; + QString m_ledFont; + QString m_testFont; + QString m_testFontCondensed; }; tst_QFontDatabase::tst_QFontDatabase() - : m_testFont(QFINDTESTDATA("LED_REAL.TTF")) { } void tst_QFontDatabase::initTestCase() { + m_ledFont = QFINDTESTDATA("LED_REAL.TTF"); + m_testFont = QFINDTESTDATA("testfont.ttf"); + m_testFontCondensed = QFINDTESTDATA("testfont_condensed.ttf"); + QVERIFY(!m_ledFont.isEmpty()); QVERIFY(!m_testFont.isEmpty()); + QVERIFY(!m_testFontCondensed.isEmpty()); } void tst_QFontDatabase::styles_data() @@ -209,13 +216,13 @@ void tst_QFontDatabase::addAppFont() int id; if (useMemoryFont) { - QFile fontfile(m_testFont); + QFile fontfile(m_ledFont); fontfile.open(QIODevice::ReadOnly); QByteArray fontdata = fontfile.readAll(); QVERIFY(!fontdata.isEmpty()); id = QFontDatabase::addApplicationFontFromData(fontdata); } else { - id = QFontDatabase::addApplicationFont(m_testFont); + id = QFontDatabase::addApplicationFont(m_ledFont); } #if defined(Q_OS_HPUX) && defined(QT_NO_FONTCONFIG) // Documentation says that X11 systems that don't have fontconfig @@ -277,22 +284,54 @@ void tst_QFontDatabase::fallbackFonts() } } -void tst_QFontDatabase::liberationFont() +static QString testString() { - QString libSans("Liberation Sans"); - QString libSansNarrow("Liberation Sans Narrow"); + return QStringLiteral("foo bar"); +} +void tst_QFontDatabase::condensedFontWidth() +{ QFontDatabase db; - if (!db.hasFamily(libSans) || !db.hasFamily(libSansNarrow)) - QSKIP("Requires Liberation Sans installed"); + QFontDatabase::addApplicationFont(m_testFont); + QFontDatabase::addApplicationFont(m_testFontCondensed); - QFont fontLS(libSans); - QFont fontLSN(libSansNarrow); + QVERIFY(db.hasFamily("QtBidiTestFont")); + if (!db.hasFamily("QtBidiTestFontCondensed")) + QSKIP("This platform doesn't support font sub-family names (QTBUG-55625)"); - QFontMetrics fmLS(fontLS); - QFontMetrics fmLSN(fontLSN); + // Test we really get a condensed font, and a not renormalized one (QTBUG-48043): + QFont testFont("QtBidiTestFont"); + QFont testFontCondensed("QtBidiTestFontCondensed"); + QFontMetrics fmTF(testFont); + QFontMetrics fmTFC(testFontCondensed); + QVERIFY(fmTF.width(testString()) > fmTFC.width(testString())); - QVERIFY(fmLS.width(QStringLiteral("foo bar")) > fmLSN.width(QStringLiteral("foo bar"))); +} + +void tst_QFontDatabase::condensedFontMatching() +{ + QFontDatabase db; + QFontDatabase::removeAllApplicationFonts(); + QFontDatabase::addApplicationFont(m_testFontCondensed); + if (!db.hasFamily("QtBidiTestFont")) + QSKIP("This platform doesn't support preferred font family names (QTBUG-53478)"); + QFontDatabase::addApplicationFont(m_testFont); + + // Test we correctly get the condensed font using different font matching methods: + QFont tfcByStretch("QtBidiTestFont"); + tfcByStretch.setStretch(QFont::Condensed); + QFont tfcByStyleName("QtBidiTestFont"); + tfcByStyleName.setStyleName("Condensed"); + + QCOMPARE(QFontMetrics(tfcByStretch).width(testString()), + QFontMetrics(tfcByStyleName).width(testString())); + + if (!db.hasFamily("QtBidiTestFontCondensed")) + QSKIP("This platform doesn't support font sub-family names (QTBUG-55625)"); + + QFont tfcBySubfamilyName("QtBidiTestFontCondensed"); + QCOMPARE(QFontMetrics(tfcByStyleName).width(testString()), + QFontMetrics(tfcBySubfamilyName).width(testString())); } QTEST_MAIN(tst_QFontDatabase) diff --git a/tests/auto/shared/resources/testfont_condensed.ttf b/tests/auto/shared/resources/testfont_condensed.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6a6c536202d14d5cba5b6c7bfc75e708cf4f9f76 GIT binary patch literal 66512 zcmc${36vyPbtW9~V&5Y&BO`L(*UDP6sxqs(tE>0D)oS%#YDu(qsZnb~5)x)n3mGhp z@r;4N0%N=amVXw(u!uJHfXC(s#$(HDW-yEa4~wzQcmZsK)ivLJk<|#F|M+lz%g5an zosp4|Q4#mu``zy@@3kNbf)L;zS@8GlIex`$-v~|$qVzr-E$-d5dynw{3JpQ{>QCc+ zckhuakHzPo_$$2sj389My!Y6N9e4cfeg6^f>HO-I$7TjEeBTRRD+uBfcz^cB^Vi?~ z{`V?-aq-hQ_A56&a9>sE;;&$R9-r&C+m3i>a^Ppb`C&nD zLP7Y$UANtQ{Y|#|&VBf95$6wY!vWP~e~tIY@xFQ6`THLH_1EutFW&!yAh5G{+;!vi z4?nv9<+%Qracpq@`Umf3f5N_q{ReS=_0H?h->gl&6xaG9?ngR!_gyc#?}MxRULy#9 z`fK?9H}1ao=DWWvth@u?|2WR~1(FT6x4iBpAA5nf@?BPuzKJ8kr~hCPGD%+7|N7GV zrJi(~P!)7K#{b|u?Az-qe#cwZ|9btuNIia~jZf+I34Y`W;X6Wp;~RMG;(LPl4Sqyo zpAr9)APF-2Fnb(FemZ#-za$KV@AES*|D#Kc_O~Smj;tL$hW*<5`uHAh6OZ5%dKN+a z1p5QLR0SqJMDKCr3jEGL5jFN_!ZYk|*Z+onM|d;)w6MTFEVS4^h}+mVgo{!jmLyX+ zFR8+p*_T9_eMNXZ`?^?Te=Iz}J|w)3eI4KVl5i9In(#~Po5G{)_k@?THw)Wv?A7cO z!ei`v!f&%Liz@q5;Ro!mgp2I&gilI}DB||?@C_M~tF`(?q!HQs^uFJjLK zzbG|ujgJal_NQWjeMGpE{V(A++4qGHvtJPA+0()i_DSIw`(5Ep*tX!jNAYZDFxpp3 zZxK$i&*2*H5;n2_DZCWdd6hAHj3IRr~;+{cFOX;@Ca-?xXB4 zg!kcI&)~DSv;QM}j{TGHd-&`X?3<#6W52@QBRs;M6~4#bDja9OhcCgj?DB@I0RvUV`U3!2U#dCHt1}bL`K=BD*Afp1o`RS)BW3 z+}|4eD(>|w!o4`>Ec-3|j=vQC4zjs}{XfEW(s5yg>wXQt>ml6F7jYktNQVWTeNZ@v z^Pgm&5njOlo3J9e7>oZYypz2Xa{7JYH2d$k$Il8ka=E==?#q zH)KA+-Xc`-J3H(hf{%ONg?qULvRq*QMKIZG*8i5hL8wW-FpFp3Dv3gqeiwVYa2>zy zGuZ!ap^x#}4?QU2+Bf6-KhJ(3d=jdqV3V*-Vl%N_Gq!>^<0xt4Bwmx_vM`JHI{uO( zzg+mQ%D2|nu~)<1GwbW?UtRx|@4t5ZZ5$SC`e#Gmfn0PZeJ}Za{}r#aU5{IM2HUr= ze*-XW7TW>rzYJOr+oW5dKO+53+MfG|K9pod)pWzOY{&KdAe9a?QJl@?3&m2oQmxe+ z%~re9?M?J2r>19S=LYi&i^I{<@}|uzTUNJj+rDEb;B)W3{Ra*ny5jJaN3J@0?D&b3 zr%tb3edd~LuY1AS=l-_;U;B8xf90R2F$M>p7K|gO-y@1Yv-Y&O{*zA&yGkDt3_*Iq zbyH6Z;$*eD`}SQ=iD&VKP2#{r4SUjLbwpO^jd-K}bCR|6R>)Jo zoxtaMa+PDJpW0SNIC7P)o#L2#~(+qbyLo##p9 z?vEpK@5d6kfB8;-MC1YP*(Z^w{vAc0{t=Of|FXz4mmdUo9pUyfT;%cdB=YQ!Bl6sj zCGz~`JN*%n7jVyc5_$38QRJl`5qbGv7J23JgW#^Kxcv$jdF^=;dHu%`dE>_tdGqp} z{)ot1xaTH`y#4Pe^3IQny#KTiVl%M`eIXqG-S82=D}0B2OZuYxa%G!xgYuNBYensS z+UIp&-=;rd>@gS2zqRhLoA#%i>zwbn@9_SUANnu#zZo0~ekt|R^nKxM#?Sn8bWJ>n zzmS{Ey*3}^-%)t5SS*?4eEHGJY~_2^uh)L5zNwLIyrFrr`MK7C_O|xtIxC%zbiUWE zcXxHa-uw2%k^ajk?aB8}ydhSz$I|g5$f5XB9i~iyphS}lokLsh} zUplYyZd~WA0yUy;uZue7r%6lH!o8SA@ zeIMU{?tp#Zse?NXl@I;S6`QVj@8LTRzw64okKBFLeMb)*J8o7(`WK$K6R~nU3lGFUU2TLe)e0}-*Lm_4X?lP*KRs}^XG55@77;|z?i5BdGQdV z*k@k&^NT`HXbKYK+VmmYXRys|F9<3QN7&lfhS>ICJBjTUY!6_26}C5EdmFY7VEY(0 z=i2Rx@LBA94I8`mqA-Um_kz^&)56>gKKcR!46^yrn@m4V23dUQ(cq>!3jJJaERxqfbGZ4Ih@o{i<1w!Z7 zjd9%=*Nt)A7}t$)-5A%6aorf#jd9%=*Nt)A7}t$At{daJF~2U2at#AoOSEVSTC}vG zMN814C1}wSv}g%hv;-|$f)*`7iuhaf**r&5zhS!(j80|ld{fEc3>PwLSqwE-(ny(BrO^-uFckS45z5tR z4?FFJ5sY9}tU&o;5v$^85aHWulqriDSB#;Fkt*^J$|8(sFpP)uIBQrIRjsaSYP;d$ zV=|z29sf$>Q{!lr;me~zU9HpkxDi#ug~#W)V*BIJXM>4|mzl_z;%AJpW_y7zNs1%x zPZZr`vLs0wW1>R;NK9c|%`>KA;j8$OnIy@~c=iYUcy=cK`saJcdZMIS8Z6i_6-O~s zmL5f+vhu>|osXZ6XDj?vD`O3AJa(|%T^ll0SJ}*&Y1ol5|KNOaA~I&P&68KYAThJq z>*sKW!lKEk$*6bbkt02Rf&S5}j`Ye~N}KL|_T~IQajDq9sy}<(Z2Mq4h&?$i$)f1E zmKawmMs7Y|92J{;n-fR-#gX`3{(-1Tib7HlP1j|*h-bk=;g5Fd1LG6$h(ICHl|;p4 z5`c#>oQWt7NJ0_bo7cZ7eg;@_N_esG_(kD<;p~Q8-w*q{ANF@Y?C*Zq-~F(^`(c0g z!~X7v{oM~uz8|`LKkV;**x&sd_IE$*?|zusMd4ap?S8Jx*Fx1!fAMMIeyHBfcs+|( zQs>)noQ|Ex{(0<^n&17!**THx2x%WFU=)`XCZ2q{7kP^E!v79 z$>oWKeB8(>uB}R%;p+^N(^QES=khz6IW6=}FBSV?Cosam6s79yO4*F!@KB<7u`DX8 ziV@*Zud6EL9kbt;Wy{kHS<>-4Qj>3oPiZ2B#p2 zdU)lQpkZlH2U&>?HIpyejf1;J9@PKY5!aoYe)p!_U~Vp38Wjo7p(?q#xw+g;zemyk z0I| z#;;t}-u2kF?!jg%2ldt*!_I^$vvoyp?|k|-H@t2Anb zwfaQOE10gL+P&dIDX95+N>!~eM{;GlCNZz-c$(~}R=qcq^_po537(?lx)6I1$40R~ zvoe{QoS6yZeFt`=WZ$>N;^acs%h@)&&`jA*F`EKLr&jyn?xV! zCPluNsicdGfv+2xV#Ud?uqSoTP^&xIE06Bod}{Y{!AfxpNp6*F#W&niKDYn)+EqK! z&8>95vTz<5)z2VrIte;>r|_uoa~FjZ!jTRCaRUD11pLPd_>U9tA1B~HPQZVhfd4oF z|8WBT;{^Q23HXl_@E<2O{KpCSj}x4~od7&t4S2d54C_{0`2_bRM{x8G9KD0M`%8pZ z;1^zm_j-gQ+9UYzE`0c6yxxb``-s=Hhlw%KzY)AgS>k+o0aiz&OMW9wOe7H^|CcQD zIrx`QqtF#$+bjfg84X4l3bNbw5ZVXnm-*K>xQg1o*YQ*Nsa$Q>_RUeQAB&OCxP;) zBA5xV6c`3qp%^;+|0V7N?)dc4*6}$SNi27P?Su z4_g;Ql*EmQ0KWMA#1cGO^uY7I4W93T=X>D!9-N*Bp6`L@d*JyVc)kao?}6ug;Q1bS zz6YM~ah~tt-b~^l32Ts&kP6QOKS!{g46`I|#jv2#l+I=)KCV(Klid!sAR6@($4+%< zFzUyzJj~ukl3Tv(&byYm@M-TGifsF8SPJa~5hN?k%U*Eu>raZOgaeS5(Bi+}-T1|9 zL7Yh_1vBHwbY#`EZG}g0si|H~W4i0ga=uoDeTu^C#f!`nzb#}Cv0p?TA%NaK~`IG#9d;2T>vrF_e%P;6x4u~I1#@gDTl%_@aTwDLP zc&~7fqS6*jrQKN|Mp0%e3}iGMj27zJNR7k;wrexS)NC=7v(=QGl6CyWearlJIe8~g zoLnI*1GYt`ik=bUaqv732)D75k}ZtzW|+hfWUB+PlEiO%qPn`_g%f**8PgBj%3+&< zg@M8;%z%TpDuYZNe1M77mAYMS)lJp4G-fwC9XmTYHB(SZQ+>%!r~#r3{2(y*&GKq( zGw1VLUcM!4wY#w{sg9BBce_#l^yw2FwLjBN?)P=;-xa?Nd^{~2q1g7S4P1zO69^Gf8Pm$8yl%6s$;eHBcFuI2qU)%R zUw53mS#GC^sJdRGHxp-@z7>Zd$Q4r|UQ<`YT!noyk=(>^-pFsucMi4nKo8rky6fi{ ziyGaOkZ}O z(-1DjE#DUZn*9+t?VZAZz6g7sCFxSGXcpE#yJ7vau>M(C|17M37S=xt>!0OkKZMuE zu)Pu6lh{6l?GxB2S2PQgn1X3c0i|gFEcVZ0|90%(g8f^_^E}s%bR5)i0@;*gh#QniFK&ueX$jgs($Gn1Ip~YRR3prc%MFUkjQO&HJIP-1{1oBJ@lWc|%0_;(dyG%B1 zDW7!^2*-|Mz>ff-ChDl{rA-&vDWsv0q(U5`QlM-~qMR@S9y8lISVUIlAkfhz%T7=& zY=w;-jg^;d$uHy!qk`cPX_X8_Gd0CXe1hofX-$DX1yR-l8PSd0Fq<9a@ulXzR#4}5 ze$)CtvI*36A4PVH3kfF75(<RnV1`w)tDF(43LM1z)4)8 z8qUow;?R7;y@v}BerH6%k$7vVT9J7af_Z`IQ}0uurQ z^1Y_t3iIVC3_{OrbSE7kIcK1}0oj-h5NMHxa6Wla%lOB3ykl~xTA(T(Cq z*<99CeXX2kHe2BXnX1?7DL?O;!E%1?>T7S_oT=oqZf`(#DMyw9e#?-tFqz|-LDuqF z-0C(>%{N8cMo>zOH){ByoNk78v6MGdJB(%1vqc4=j|v?KE0LY|Q%hm@%9hg~EKb#6 zvrMh_P;M55UlJTvK)=IPko_1VxadhOMQt=2cgj+-uX2o8g)S1pl9T~B9BxG@Gvryv z*tGGj_koQErNEz`owR+!N*iWO)MoDJf|nlkgMJt^KuSzSbxph1DeIkG1GlheR!=LM z?*x`EBkEPFySjK{#VfKm!Ywc;v1{noU}?d2Os$BV>GH8#Zo8?I>X~{_scNzZw=9>+ zp^`sx-HmJeL*$1dL$iZIMoy(1Q4TD~Lu8r_EO~VO?JUDShZNpv;kJta~CxI&`fh#A$Doz4dP6Ag>0#{A~S55*~0Pw(- zlepqBT=5u@(hYveNo9wJi`=&1d4Uq6;e1ilNQ$eBXUVoE0SM=$Jh?XJBoI1*!v_`L z0b6r*8fH=UrF^BN6_<7$Xp&_s7y`tAE01m^Eo9RxMNu_X`+v(sGA$c|U^0UPW>A0l zW`y4K&wn>$70!3Kw476;T%_8l{DWbrNRLnmL++W-!cM^&T+f+bys~u|;X62E_vrCs zy~A%hT+TUulz8==bLN9*PQH_{`{nCjVS!W?4h#42{522Z;!ea37jbmr%ShiYXK;vj z6Y3EPLN*JDy77MjmmTQaaKydc_ynX4J+VFnBEak^g;akPw@kS3lx(n|>Zj}Vidh)+ z8yZt|wdLem^+wJqYLaZ&ij>ncr9wGlq+skwz${dZyc-QFYPL`?4cXLEfga=*`<=8E zTdGWq0%{|nw}#V*`c=^YcF0EmnrXO5O$2K2e5S-S{6f+24b{MaE4G$! zj%`9t{D7n(pGWa+QP>4lzDyU$wLlh-C9(^YU`UXX441>>*x(^x3<452h;zuQ$3Gju zD!x=RBt->JYiu7)x{9g5^F+C#7v`d3WTh?Dku5Q(M%mH)grQhE9D5~`pRU9+y#}z; zDW>g$ouAH{DZ{I|<+|d#t@{o+6-ncn0!1@&S6p+;Txx1|HjE1a;vLsOj#FZWZ{@dc zo;J*AYNg0&S9Lzjm0dHMSt*8#^F3%kY}!$5MYpZ&&O=u=?|a`Kh=vKT7F6~w_UFP* zNQT&O;=M1zbV))_3;Qpd=F`Gq5dVY?*Pxnpa@C3ClJpFbaki08j5`{668vys#!0#x z@5d3so4NLjPrHgPYC4#Hpk<12KD3JYtdY+9q5|zpXOPTJc)eu1ZYm0VQ_mHOc6C$L z4#JzC{X2e@(KSbp^}uzt-qB;%u#a;0tAxl|!CB{>=3r{RmFaXQva>IoR{|eH9k+WX z1s-8PFxBGf_HE@{zt_zy-!lqJPV3Uo@hbpUopHd1J@NsMt$&#vMqk;BxTL6Oi6lha zW(e>ag6B}ouo?TCDL=6h^19F{O4DA}90>sci3KSz2&`R)BH=CBF$Ae_e;bF>4Ap|f zYg5&VDC&%u8^ubLGMjZm=tY@s;{K;4l}%cSHGZL>Xu?lcbvAC%@@paFK0pCzb!Z@*8Kw_ zr$4)h;3~B?YW2?5iAZj@*I6p%Sncm@Ein>BRnWFVSbX( zkJU_wp9tU%kH@i#*j#&67T?Ze(X&-A>d!d{JdBK@NQnidCCMW{=7`Lbq_o(fObI1G z712!vk~P0Pt9e>|VP!M>PU6QFXXBzP%0^m`dU4PQI4@m$_uAT1S97~tdur{>d(YSk zlEa8@U~H0K_E~qPD;ctucFM!)cHT#QTot|`-iV&bSpl86l(wTsn#Y~5f~}*d2Dc6? z7!8phhku$MQUwf;3N9b1$UqG#q{Z2p2uX&x!EFWs9KvS~!^m&?40Rq!)ZhZ}Jn$;= zhO4IfF)GcXR+8jgF%qL%9+BWAy0I+AX}Arb>* zGIB|(tN@~cq5xx^1#${mhLRteMttdQNjg)JJqvM%q7aXQPm*fA9%|Xls8n<0gP8Dx z^>>Rmur`Xht2~n_Kq>N-~hNpzw;E3TQ zaNlZOHx1DVL+{yd5lCigSx?d(ouzz4OOXMlg9HrW;YHyc;@`1tAco_-1MZLO<5m%T zI2sb>UH(A@lz^_&0F<>GJbgT7#c&bg9~+)38>Qh?%Xf2uWZOEz-k`KKm#U@VNKqFu zJxe1mVR~Tnk)JZFJtK-zvSb^&YT0h=bdIvEG6HeM>&?t%y@CZlt%z9$A_7+IN+vRm zx|O$(&eN=%B|EMoK{h%{rr`gYVV9kmGc-=06#k0MGKQ2_OW2EyvyXAABGvl;71bh8 z?aEEldT7%TGow%6Bz_@DGRa~B%JR38_Zk#>dpn7#AmVdHEir!j#Kc}R-vYNw4a5g5_10gxBTArA+5LnIwOntlMt;%R`Tq9H{9#LyMQX*zObrt7I; zqx=A@P)DA+&|l2hkz;4$(9kN~mg(naYffx?byTrr#>W%kG&3P@WE8>SY&BoZLBq{V zE7o+a*=xEAx{bB;@+k9C)zuJtpmMLuqG{NMX}Y1URs%N_zXH?s>OpNH?*s0b=tp@I zM81{nY?^MT^gwg~ZU}ND@NF}{P~d78PEGYwCR%QgxN_oBr&Q?HN`Vr%hNPt`1K9s= zL1AgBhuF9TIp2mRBC0qH@p>C~t+zq{Ux*B@WDAg=Qe?!pjV599*EGK&+I2wZO< zsN)C%rv~`P2yl`_u?ij0)H>JAWPre)IAP~}oW7UvPfn3&e3Gvq&vBWbFK7sEHMP=e z#*$|jiy1{mAsK&UuyG8O8Kv!XDy=yMRS%{%)kLKD#P*?j+;P)#aj9?S3wb*#W^y6I z3sJRw9c`aRglyfmV{xp{?wQsL<$|WVYH9NAO~jNMqRAP(Mt~EVzrUN$d*H|>}hEa`4Oj^F7|6V+iLgwL3y=0acH?t zO%08`lck-V#g{*DHmlmG&THM-LBPWwv*fl{(s)8CzT?>8S3hw3tX?X{@Oq+DTiDeu zEG*1rnP%YQ`MJKQX?~~%JNIq(pb1*OTCsB7FdxeKiN%r^>u!c{ap(HCS&w~RxJkH= zkNA1vUOwXI(6d7$@8R_v=Q8m|mU#izvp62~WWc!T5D-Z~p;;PLxPP26uPuxa*~5Ys zA~M3uKe*O-`1uZilsDIm#`OADULz_l&(vTiil%9yVK|O&86HTcs^@hxKpG16hZ+$G z5pua)yQLJY3Ty!(x>ZKgzM-ZKLzDA}RV^3QOMJo1pLiJALcP3m3OPfywHt{;_>QTy zYtGK|q7j-@3WHqSX}2=E;^vnMjqT0;RY#6Y_|yHmY?utxi(@mi3`qjBST0-OU{fci z7H*p_4~x}Zb=gAFX;jEg=bML`*Z#UVkzo0_ejuWJ06V*3{h!4Dz`l&Ez`aziKAq?j7|`&21Ys+B@8IZ^91!$#Un&-AKk$u%1jGm(r; z1Jb7$NXeG09B`^#GXbdG!PcS%FRy322z+fApgKJ>X?WFA#WN6$b4X>sOQhzS4_sSW zt$K6w(-z`SOJQCnn+as2Xv|drYI<8Mv}YDKmovkutj6R9FY_z0o)UBY!5|D;ss6sD zE^6VGx9W|uY6oJN^STpVf8n-;E1sb7b1`!!%RYv@P8v9QKuBQ#(ee%< zJA{th2e%;{pd0*9T}56CXhuQfIQ2u)#33033gl_HxIhjH<}?@$hJ#3a0E&*sKyC_M z8lc6BZj|QorRAxD!m`cD$&NF+d8dqEPLy5bwUpN4aH?&#jvw0Yp~cJfRlhwwtaueq zOQlonx4EaLvJNG4MLo_RIDNxhc6y>!&M09}18_-N{TF^)UxP)Q&Wb19GgKSt+=8cV3OP#)Kiek)O2@anX#+2pAa zdoV{<4B085q=1N_vb{2Wa8jG)Mi zCW?BE=Q*uQb8k>rX@ForD5qk4$%we`8P|(=JrtwMhHyz8bUC0<0v5vA+j~&rH-5*_ zv>PEzBR>qPY( z^>9XfP138(85w#{C@BmY<%?EOKTw}NJKNa1cW*;ZtCpGs+6sCQ(VL{Ig>q5f_t?Jp z%3}x9DG}Wz@J`8C{o?vJk$d_wKzgrm&qYlBBoN`&)WukJF;-oSRTpE`#aMMQR$Yu$ z7h~1MSamU0U5r&1W7XXlt1iZ>n{ebTGFl}20`K^~C~O0_qxV~o`zP)UXY0aTB&rZ? z_}}5U`6h{7fL+9kiL?=KL!X;8j&Sf@avkEgRfe1=N=85-9f?as)_QeR+Iry_iS*co ztwuJVLu!a;;Gy8KCwZRx>edwlp543B;n1W6VOnqOs&9Gp)vsEG4~MhdXcYkF<6D~^ zzVM3W#_p!V_9SEC_?S8( zJZd~UI~_^omCc*WE{K3A8mW|#cHL^V=D`V7o$6?&moh^ezU$25;3oEIZe?=2>UL)a z+36SEbzKhCdqm4tXl87;Gtu>GJF32n5<*GSGQLEJ*>FpDJb1p8$pRB>8|fhCTD5YN z=n^?b@Cix}A*-q?2KK#JlFJ?bY{^;2c@j+v|>5X#e-p4MSE10V6n7MNgKX&*2OTWb_ zQ6WcN=!ARduSE6>!LA^SC%}Pf!s{>Mfi81c3+QD5y)2-Y1@y9jUKY^H0(x0MFAL~p z0lh4smj(2)HqgrgdRd&qTCgVN8EkM4wC`fy#XkA}2>a1^KZpI?c)y7K;`sc^5Br&@ z5RTRXuKSQFQB-QxSsb>-3KtYZYLC+882lua3ff8$ljyMbabEfUYg_x;(PZpb11_jk zBbA%W)wb8J!TfRH&Yh6OYcc0~D^*m-T%Ni!1mF&Qa)LVoa7O^{2*4cyxFY~}1mKPU z+!25~0&qtF?g+pg0l0%T5XM}7Lk{%pD|p5gN-rjw5otw=i9ypzJIGP;>N}&N?8Rv-6&UV8?yvl)kurHRathJj80EvTy;}X>YbW|aFyVj zT_l0L?C)O|FV0VTI@De-l*(JGejkJs{DnG^5oOs6n-(l3%%s40WL+_HR&{ITW4m4r z{r}DNC)pYB#~L{EO(d@*0rzjgAxT~dGubdI2nFFN$pyTTXdxLCA{OXEtd1j^v7}H? zs<#_xri|vGI!O)`HR>eKO)^F9Gl5VnslfBGGE%Jul<4xjBP3z*_)TtgVb+;E-4EJn zq(M;ug(yK9nJuz>t!{P>cjEbJ8HofroU7P{e55ioyGe4CE11<`GPC00OAqH3^2peu zhnQ<&rk_dGgX~=P;Y*+52C9{;_WoYb%1D8$7=Z}xh~rMRTGZRy>ftEGi?73*C%s0e zmoZV>Hp6za=1$!P9scn8*Tt`5je)JgtH_oY$#+t=?%%+c6OK=*g+;;QesmEdwF#QN z3D!&dTc|}Z=>|kKftzjyT|y0TK_u&v5u!xVIPL0!|AG5awhkkSA^mh>*P4hR(2>Cx z5JbuFMkvDO77K;>JmFtySaSMPXj{ZN#PZ>DkZoljAPsNqY@Yq-^_YHw-e71w2#78j zj)Ybt4uA|96&FnxlA+@&yn259N3KsdA;)?2HD|Dn!WrRnKcoSZfcmjK1z@89Y{Y6N z*pOuhHVVK-0oW)28wFsa0BjV1jRLTdV1Q>o1z;lw6GD~|kY%)iEF&Px2*@%5vW$Q% zBOuEN$T9-5jDRd7Aj=5IG6J%UfGi`9EF;Ky22-%M!vbeGr{8gT@9^cltHyhnQ;74g z1*(q7aCoqq7!S9FRT+V6f;2EMl(ELij)1>+Tyiq zYqPT5o9q{U&xU8B z{lpt_8#;?IKZ`Lxi!ncoF+YnjKZ`Lxi!ncoF+YnjKZ`Lxi!ncoF+aO8=4UbHXEDqd z!8mimS&S0rvnv?=m5tF~!6z#i{S}P<3PyhgqrZaDU%}|FVDwio`YRay6^#B0Mt=nt zr&*^fw6(I)z($%fD<(Az{ z6lJEu2DQ?Qv6P$|&S$+XCBJX8*hZH-e3ar&g0>-kLw4MW-6KDHm}a#o zl3|-t?O-FC$eyPs+bWEP zi+NY_wm-1-#M@6aceg#vfG8BJnZmGe?AMOtb`_Rd-9n3(KtGNNH?S9CofNEhBo4V8 zkU^t-HpI#KI2DOd{e`6@Q@qBe(3zG=;^Gs!fu5b_(L)DPwwcOr*?yqg-#2e&v{Jq5 zBbDQzE*3?RkuFA_pZ1Zomr#b7+Pai$ZmCvRR(p1YIqJLivtQ=bOC{{>88#2pr}s>l zj(h0l7Y$R>{i-DSNjDR^gR+4i*YojmK0A}G?cX{HckVa~yN;YZ+3CzzJ$j}$t^bYq z9jw{2LwJnvOn=^REXh-DaGM|IEEA5mGwsbha+pIxXWR08 z21R5{1ken{HLbtOv4W0o4tez}PCaZYhaQGqbLlZnr~ zo*xj2!^Bh6&Kva^pMCWe{X$d*XxVj9yF&iP0j11J>`sU`cX1<)rmOoWa~GU@?LU<0Yz%CKIDjE;+qrTeY%v z->arGJNNDgGbO{fjY=UXrwiN42%$8izNZp(!fXra_WWcyRd2QY=JtBLveK5MY-gC$ zi^VK{k)@$V(`=bqR!33`xp*ziWb{mRa>h@!0~MVvaL?i&@H&X?VB%bQZLu)h@20{Q zEzc9UliA+x?W>Kr>xQ7Jd<4|kpUxFmo2{#^*crP393!wcA3WA<+ZTY_7l7LrfZG><+ZTY_7l7LrfZG=~ zaQgyq`vL$Osyd!%NM%J(6pU0G9Y3U&QM^h?6>5}*Kcub)DWX^Uy-r0@ z(bychP81i?Rvs;@m~8+M$1nD6%$U(IGwal~SJzh_T#yo;)1WRy1NH}xIav9c3Ir{JXL7p76|)zu2}5}P^GSJ5_7X$9G$>Nl6$xppz5 z=}0N*X|wNDj~qQzDyCV=RMUZ52+T$`7Fjw%LlH&zaypZeG|TpEJ*|2goiE)6;$rWR#kyj zRbW*WSXBj9Re@DiU{w`ZRRva6fmKytRTWrO1y)tru&N5IssgKmCrE;9nrM>LUC4cG zxDpEclI1QCL~zK%Tzqa;l+}aAF}23BDL^whD8atqOf>dFjymYQLV z|NIBFJJp7YqQE3llRS0Gq7v}pzesTCq_8Npu#Vb3;cw8S3GY|MM$MXg-~soLH^eJ7 z7*V&jp3EY99_odO;5f6af>~BKm}M1%R|T`If>~C2;;_76~&RKlAce4dYskF#F10l->CuTZK*r7PF2ohVV?#EY<6UXT4OCUXkuBukJ0Il&6K zZX|FAA*Ko7S@=&vPI#II0gj~2x-!R-F{0p^Uc?*V)Lf-xxmnjKq*0VYK7mStI_5<% zBu|m0jPe<#n0_+D9PM7JfeI~hm6ihzX`w?!(Nr~1-K_7`s(JPxZ-T3B-@00!I5tt= zTGCS{G#U^udzu|v`Ne#8(`d>rZO`*$j$3OqyzI=(Y_2jj*A7gp3e3gia6wFjc*IXJr z8J3odyx@x0pcbUtskj&W{i&{PINrq6bb4CGTubtq=(nfZpz5QGCD+Tk1xyBklT;_~ zc;F`ztc71=Y0TH}QZMFM`x1Ayp@SQZdSfamrNKAGL-QO(jOzR;pM3`Z2A7y1Em%PT8g2J%oB*IynF32ZLI*`s`1k7qhi<>y}DxI2`6OQ@y&G zYNz-N4R5x9*$jb)2wA}X5ecO^VsJG$m$9#@!Pn5+8hlL+fK-F8 zslnIO;A?8|H8uE}8hlL+zNQ9WQ`_)0HTaquXK;K%HF2CtWBO*hi6@bGkFL8L*-BRKK~4 zPX-XZx1V!iKbEnq?2@uY+xO}PrCs3PCPE>qP?!s=H3}Nf&Sp6)Qhn0=lO## zotRj-b*rC-4Py2x+8YqE=Zji>z8DX4UeVWm3*DY}P^}c5=GE8SHmxBLGtw9d7hSzm z*RP#yIHhVW$_)UJ+Ac(2t~`)rGmp18bMw&*yJp!4sKNFGW;|vwmUy z2jT^+Z@WU3;XE(d@?6rtx_c7s$?(AmK}z;#k^Py6f1aO#P6?NLmuVoW6H+a~OJS7o zLs=XwK{GC95(LwFGbmkhB8-;b7Z6zrCqe}gBxQBTu~5U027~l4I9Rzxh**-`xsndv_FMC>I@b^N0d^OW;HACF8BxYKX zl{3?Y0Phe(A;7fK)c`G+uQ(KXuTMDON7lcO`4OK&zGXA72_`lC zq)39UV+>szLq#;IkJmmBU=CRkB3c)byGPv_d(X9F4popt;yDrXpcg-Cpk_R-> zLd{CK_UIw@8;Si$p&QD@)coTQ-? zm_|~r*qGyt4&wx?FtwF3&3C{19@6W3-rXNRGlfqqx$d8`i{hiwApr}zT=vS;dJNtB z3fH&X&a!HFy5Fc*r75mI)yabHn3&a(&tsKx$l;##@3S0Yp7VIab(i~R$boodlG}n> zt4OJG*^Dy-q~us*2MxIt&q4=i+Al8+a!nv*NQ{?o8Fu>!@1pH(ot?^{B+iWTT&?7! z(-PL>QQ+;so3R7pDVdmHn~JkWvcv%J4!vSbc4R%BiLD@Zz(^GtJi)+fkCL-!x2iWAPG%x19KLE# zTJkce!O)st)C-R)Eq)oM3+VoE$G*K=E| z!T^jq&mci98c2U%rDL1`Z^lLu1jCgu#%11!{|ijEi0 zEw=Zy8+#i;y-~-hXnw@}X}d;KJWx}`+}n66u5X!Z7&6?zOc+k*+dCE-;N#<5pOk9X zid7a@o8?fdZ9dphEA=Ac0HXUrJ>A*cU47A(;W^TW_dy@NDei!872w(uk&TH9Y85;i zpk5Btc!)M8J=|t6?OqiB2cIn=VY##@n^v5e`HE>Tjke@)w@92~QVOO(^5}xWBs4wR zzjGh@&1=g`%OyW8_LFu@q*G~@j@llKvZbnxDM?@%=rA@QY?%iKCZd*-kuI$({ zY@;NPS&Q@xXV(8*{44m0>%`TISZao9P#4jZx<<^GDuio@=z}q|E?H#b+4tRS9yuAb7-T`m#Z1DCDczXwrom_n%u1HtD z0$WmBx%B%Msd(?Z=Y}+$x(RDTn}X5oj*3;-`Yzng`A#FheoO0oUDtP>8QTFK7Y?t zem2*>0=o6~_3xm!@xLLOr1kSQxCaR=S>O{wOY&+FvNQx08_@wtgr}|N6W0WZk$oi` z1jaMw96bA-e86DsZBgKWQJS5_QhsqQ(`r=RPDPhhEnjd;rK0UuV=ZMW39i)hG7^$r z5NMUnTed}*F%B!tRkJIb_g4Z>^c=g{DOtIBvBW*Hj2YGwG;1=j3dg2%gPD$lhHB6_ z4~Uscdij-7cPfoi9>Ww8tJB0XES;c#tQt44;+tM?HNo>`k?f8MpIiS+@!k0U657zr zU!eY4sume_Sk}-&@428M}8gttEn)*F&(vo{e@?eH4Z`L zI76V`@^Nnq$_tdrMzS+PQxwfz{^t#y-$I8UCW?TxgQtPbXMi};c zm)(Q^2%Sz_e4qv{S&eQ$VXz z@SCTAX{Uf`r+{gvfN7_IX{Uf`r+9Yq6s~wZ^@d&MQUvYjS15B&$%|!emuG~ji-B6o zsU(mPEe`+V)fu>&lk(FPZa7Vv{S9tK^UjEIB?uwDnFkDR-~~=Jj|z*IR((~kcSp8w zN>C~tX(F@_imYd+`i@#{F3--#n4*XDG0(t2BehzqX{STeS51IOM(u$?huL(_mBZOh zDX)~y^=gLgOe}5{H}fn4delwR@5PyBwM28kSh>@&+;*p7;rB>LQep8et2AAixb=m% z_NqY(D*@|ay*?N0}Vexu^KHCc%!maDZ* z(>3mkUa|gX;%CuwenhBJ@6f@^7Ljls>hw9tJADwCB)L&eRv}!CR<}qvC;)YS6N!+1 z#w;1a#Sg&;VR9Xqyd^2lyaJ1vxGH8UXy`hVlom|~mQxmN94+(+yfN>onoB`p5t$If z_OP^yrWfF1<)DPAuNYG;jj2B(ytBpLfmJYMZRvr{+aKLAd;5T?j)&=9E5&#w)YE|_ z>!Y1pJw3*%APG0087_wTS#%>XWohqTEa?)Mx<41ZX2&ac4DZFv$=Rj%jM`K8>U|t#XQT{=MABw4Trk~DC0xt9b zoS$+Z92l^quj5#b!?1LSWKj>Al8$3->Ad)v1Qg26ilRh~x(46?3`e1^V?Md?E0?}2 z{vtby`Q%qqr-1_JGiEZ!VfDv1to}Hx{y41uIIR9Sto}Hx{y41uIIR9Sto}Hx{y41u zIIR9Sto}H+`s0wqM(u@0+N9-EMX`!pAM6-X!&D-#J2(xLDw}=bm^Mbq$9v+62|omGY;*%At!0R9 zXu{Ox%mC+QDDB}a8j=J)#3xWQM$-V+Y{gPCE(7xFAuYRWdKD}drBM@uRjkyp2#{u~ zrA=)W{}%$*yZbE?*!e#`zy0AIT&1@^ynT57j`Nr7q|370YI|I8sb0H`g_I3-@|q3@ zhKXy5BZ$KH5MO)=YvG{}2zB=jfJ-JB@!2cnAP{j~209+J0qb~agg)S;i9C~7t zn*v4iC;&qe5&&;0S|D3WI%jG~D1+^Jx}H&HmU+*H=DB7eMxF+cEDe!&b3b(H z<<)%^)IQ*ZeFtezO}0X(b?_5%sJO`vZ2bOdWJn0-5{5dfAb71i2 zz~Ik;!Jh+zKL-YX4h;Sr82q^n27e9={v2oU8@eFj>KhhI`{Y&5;nl+{t*uG>8t1a=I89Yc;CLtJqV z^~@SHeh#=xy?Du9@|#cKE>7Ss=r?b~7PP;H<8)`&;q|)lU0#p<>&N>yVgIJ_{;h~Z zMtq(+rjc=d=}@*DsUpAyS}1`S&}z&i{34%=X@X_NF+`ekNckig!u8GD1tjmGrpVOA)s5V+c^<5`V=Glw? z^2KD4?L(cJ>t^k&6Zd1rbL88w=H&I_W>i2>^+~3h@lhXO)CU`*KES9CFzN%0`T(Oo zz^D%}>I01W0HZ#@s1Gpe1C06rqdvf>bG$*W8eL|e&MK7o1GFnz$Eq5kbMOi~B%w1X;+Ck3BB1}q`(^$8sy0yy1*<4*7l>$r> z4XoDGYzF?>!nB3X+;FZ9`@OLK1H^XEVin_!d?LXNev$_quP8{omh$7PoTx$DD1V%E zDdF+x6Ur;WkKN0c$Lj5=2PLdgg?Ta^FEclo$)quV)@<^y0h zifpE`NYX5X=~@&u3qDA$3w#djiNoSwa|)YTo(d=PR(Ep3b}-KQ<3gV_5$hz(FPk! z@&b3l2JfVqq%?-qXpqG4{L$#4>FK#}5)qMoara-QXD0~^QJIFF^0|j377`H&D)~~8 zn$n>Vu)$Lao3asEq30EaX_SkD(bgR+Gd32P)3F}88P4XTskpkW8crn3$Yr{nPE_4e zGB6^A}-3e60`47}a5kG<6g-!N5)qTMyeZ zw*A=Fu-%UBA#9Ifdn2|dv3&^JC$LdJ2~87iVVqjPN}6BV$9|tGRg=WehD2Kvfm05g z&kew81E95}qbOnWp_O8|TRteHy7UPjVrl$8E8sxVaWYUR=n}O2AkM}ZQ)dEei&yEG z6|QTQY5}2@YB+_^4h<_#(L^=W0CXKQEs_E5(Ep_2nMK>q70PMd*HTz8Fk5SfPN@We zW3fRIOKqTQ9d>~7BXb(QkAxu%o_BDl^UD+BAX$4TosCsHvr(?Z3kp6Jo9|=I|U=BkhP7u9N8ClaS5e{HI*3+ z;F!$8m}p?pD2a8G;1v=5@ri9{as&G%3zBWw%G$c0$*0^*CbV3%o>CeOM~aX=mPB$g zfvs3rF-b>J4xz6p{u#NFlfQAQd$7YjQ*&jsR89B0WmUF(-)s7u+L^VYYsns1xl*V% zoxOpJw_snFVpEW64Go?W}@_C5(T-2OTaOYYc+hr?Jk0lbfCL z@gJ}(%~lmmht|9lR`-X1_)?^l_Rn@^BRdC_MR840gHpfhgy=g50wDNRQHG)aqv`1S zCGj--DA?W-dE)1DHH+tJ3js30F1JboTe4-oBK;^?QO(6$m;EMZC6Z$xhlN$_!oU@i zF4m}s1q~3uqJ0M|BwU5iwXiar4v~eob*DF6V(+F$zwev(yHqdC=q}Kc+D_eG)w7)( zy8g3+{Qcj!8G$Pntq?(pkTx)w$=4A)0)3bg{}IvaX^LJ?Q}jynr=GX}G3v4;Xx1m9 zi05bx*-V(hzY!oX@mdtsL%Y~8(LCx&B}gNSLTZX+*B;)8g?^#J(DST>MX;$?47HWK zi8-wVO>j9_qD!&6n~XI7-xPwPyVCcN3(yf3!UO!@*4_k6&Z^4)f8VOEec$)$TDq&c ztGDXz>b=uRce;~KC+W_fkc1^b2$2x>prEp=xS)t5xFCw?pd+pr6&G+u5Zpi+H*{1~ z)bS^d;x_7Z)&FzuTNV7xf1Y`s-y_hKdb_IYz4g84+;h)8t348N=3Mv(+33T;fF(=? zR7x)EKbL8&9>4IsiX|2g)BGWoc2T_}x7b0}Bt<1S=we-*dgS#^XC#b@Y$L^)SJRdw8Jfo^HYGBs-T z31X|kC=zvjRF%K-q7Nl~iHWew=OLRvnD7O9`g@#;M_fIl13`Z(K${U*#}OINtabYI z$K{acF9uWHnZYwg(rZ(?o>|x4x%a?<9>pNlGf&^&otw=%sQZ-8heysFJS&jryLub{ zX8NH1D;fkn@Bihyk~tG04KXZ9-?HdW{V1JM9S{|D6)fWrAfb=QKtm#mdLgV25rv#l z?uBhkUckVh>|#^#_+V!mfsejmr~VV^RdA}^<`=JQBp9&y2+^RVj?I;V86f>DtokPj&wEnNkVz%z;>9yAkqtRfcl=M0a z6?0;43S#@SByGDe1jlUA@v%PF{L5y8mF}`XNZCq{E9X{Q7l&=pDp2rD)JSM|R(9^( z)hivS(t+qee{Uo(G_}4!BOsg8X&=6J?F?Oeku_IQGoga|pM?WhX#?1en|7iKx<;j? zYgEuRD(D&&bd3tSMg?7?g04|P*QlUtRM0gl=o%GtjS9L(Md=#SB4`|oSx6}cO6@h4 zQ)|MBn^WX6k0^m|7<;dimPzHAfdM)tMN(c=T@{VwPP+OQX18zjMC_wy3y7C@7bOxX4+%2D$;#jrO5X8 zsJ&;Y{(Dow)JA_JcGR=cizEa3Y_(srXLJ36c9=*ouZh;YCbuLTpCdDWYNIqZMkZRx zJ3|#H6)R%@#Wg3z69{pzjj02RY639AdJ!XCOTsM~8>Brs*hO*hjMs)|$Q;i{*|bCr zcahmcnoGd%DEC%e-uCt^CJ}lii2i_nOWmv)it!R;iz^rBlLPB~r7z@6r<3;DTyI4G zs!(Ne$GQ;|algZ?Iiih*LUg5(vaL?S040b)$I3)7n{9Bi z=9s_v=2y+*p|0#HCpRxnyR2jYTX0<;hR<&x?jyr~at6i_$$ctoQ%Wrp504QhKt)=v zjpC!YOt?N1gW0(bpJ9YVh5)lttsfnvU z!iGypVT$i~!UTh)*XO#nbcQ=ZX0kmgAt62uH0w4RS{a?h>~4&GZRWTq8V)&XFPbc@ zO<8CGg<3|ynV7SQTB#cyT$D*#t*P7T4fhdz7-ye47qn@Tk4FMOul^8^aUeK zCf8F92HUea(!{aM=RwY)pd*`fyGxa_%N4S@aeyf60%HW)+)=x)HxaB*F@t7R2~L!> z$Rs|`7=WWChnASd-x*4+9WBdT>FLIA^z%#~LJW{AUVc7b>ILxH3ma>&u{;~+g}?Q! zN+hI9D=P^if6?&-4^(gE;V=Y)+DtKj)kez*1hEKX1yj_6YWjJ`DJ@C<5_T&&y$L(u znJ4(qO4tb~lP)8ia5k}&ku>hq;I|W|F(I{3q7Uh`Abdb#)nWdOyG!`9F#{;q+$ih`x znrt^@r|_wMv2PPPFX|h>tk0@%*Lkp4G22^-bc=;i{mUa8Zl#1w0MU`YXQ5kVIz=j?xoWd%M=Jf86wE=Jl=mPFYh@ouC!yA(qrrGyQj0Fi~fq7a(T2kJVoI z{tHEY31yi_cFYq-fg!Z%``f`h^eGEJ3VZXl6U{4j;C2jKGEK8&ok_^YEH?=vs#dts z3OCxp>$7}Zg%pv?B-|oJXr%?C z6+YG@oPjk03p4BelW^M;-*kka#E68DIuxRHaFji5eBjO6Z5)qjICD zW`q&M#_0_aA8GS=NI^?>RioJsF9l^?t|At+LMS;k)PoXgq6N?c#WN9$+3TYfi8q+Ax=mQ|19R8UIpQ%g zvYfs)cP7^nj2EJ=V89pjPz>3v+XgbhT+9>g98CK<@=2>V8KR&t%uA(1hVd`I?Quhk zVvVR{2R*Ea{^1KM6R1v&Yw6z?r3$RsUQ9db_ZW=ou}r{b3uM}@_E3(x!3c;mO`WFq zAuzUcHrp*0i&OPE{%&6;GNoV`x!?gIvZ6hOvX#&u9VtLk$SHi$s`;q)EXi;?)w}Qc z_y8EuY zKGOYXoYB|6`$x)%j{x+H&&~uTE?lW%SOa>7YCRlXoye)nw0Y$JBM@h+cGm+^EvB^t zxYz-tP?XvMT z3<+3~4JM%0^=8&}%b6*$RUI5$a=hE2)QFibPj)X4u5nGe{>Fi zv?Q|v>6=_U!$TrUb6{;n&D@x79b&ZWc=3?Rr9mc3++ z$sVBiLobriii9B6Ofg8A?ExkdF3F-Rp|{r1WJmDMS)Y$2Xga10F5<)N2l6AvA^k2g zT`3vP3De-M_PvEWpljP5zG&Fld&N+s7!kO&nmvaL53d3xUetdPp-`e z@~XvavOAXFkamP35ekh){P&Rz;wqhS=!{ZnFikuv?Ivj2OoLFjtsQ2Q#-odsplC-x6dA6YVgRh7d^%bE3W z*dxMt&#klRjYjzqLe5IdCF+J{rZOU^Gn3is*@L;coF}FKK!vGb;Sf)cio+C*TITh7 zY-d&a2xh2M^Y1NBsH6=^TOhScUV!*C=c)KJCle*nRuZQn8dsQSC(j8(kDG^<^DSD= zL(6$&#XPi}hnDluavoaFL(6$+IS(!8q2)ZZoQIb4ik9=-Z5sNm<$1T%o$aRbtmtOl zywLlE;UiR$5=H@@mT~EC17B4gv6!-zh`~?D26e>k$3kr`EqUcL#?g^ImKYo=Qyavx z+Q@Ms-M^%yus7z6ae^C)IAZab-5%snA(>Ig?q-)39m}~V8SC2B9j!&3w6TzbW`1^d zHs3zIW?IE>wNFn^x94Z)W=$_uQkg}@SsWFJU^z?gU{4z*Jjz?j%WqpzA0E8;#Fdwv z-$S_>9Lr`x|2U8SuJIqlKCNZXI`aXo)2J#d-q;{B9&F8ckQom$VL@g*$czV>@gOrE zWX6Ncc#s(nGUGvJJjjd(m2~#;+=+BX%aMM~7RB1CMOm#?LfM!z>>x6iCaKBHPuQwo ztCF>B$`OfcAt;_myeuIn5ejY^e&g+;>7P`-^Qx>Z+u-;hPH1$4(n>k7X6*>g@l5nG zA%)C8v3?=lv%A+bSnCJxF>E&vp(oU|mkC#^8byNF4qhpVuCxR@cVPnz5X+`F!vm8-E)|G4s*|8?m5gohq>o4_Z;S)!`yS2dk%BYVeUE1J%<$q3&@8q zh|~#@B!)mvl2xvUc^>6?6vB@a6-OumRLE?|B_cs}`IQhY{#1#3 zB8io>h`vHml4Lld45RV5y}i5Gne_DGNOHo`QqZ`W1}^P<4n2|xlBhUkPA?A zx=G<?J%+_gFKJ!l1{m?Kt=B?c0iv9!ITGjH+5oC%mj z95I8}z2aJEKGt}`bg^l_cBb}2qo1qfo1F#bR#e>!>LbWPr)-N(S?H97PFd)bg-%)M zl!Z=N=#+&{S?H97PFd)bg-%&TCs{}aJ&Z*)1>I!DZH7jhIbKs(qj@HmC`(CmMFv$N zUdv^G`Xi1}tv65 z;bbM-3&6tSXzetu0jPD(rrZSJiikR6?nVo`^GO&6IkmjYaJekK_ts z#%K2sLp_0$y3^!v(a|*0m7{B5`{)AU2*#dZclAxowvPl#g*aM*8M83jB{4|S4h=gF zj7e0I%|*W~YpSCsT3**rQ**&_y|&FXW~T0?M0E_Xy*9PP0nSnboTUahOATI7_g9Dl1oFKdx6sRQy9G&c>LdO53{9Jt&OHoTBgF#mr&#E2?} zyVf;pA{rA)LU3B`T~bg|Ij5K_lU3Ge$y!tlX!!1oYst5P;e_jCJ*&xWeTq+ve!`H1 z92D_R)i!P0IAWtpYnX0%4!1QjIx!U+-q)R;$~a|d>vBdRj*-jk+DvJ0HM@RpIuW2` z0B%+iUES{J?lTY4hc+E)!*jD=nG0f=paNCaxe8SCEM-$ix*szJg3#K_;#s6IYOl zE6BtZWa0{pEj^T1RAe}2VD7zzdv9T{mFpc`?=ZZ#yVc;kPrWFm0gYoJo>!}pZ7iM# zvGLZ1$ENj>vMP)sM@D$Qxg2yvhM`&0<}60ADas`VCq9PrRte%6A*tHlSSRPI6C{on zvXMndm}#366W^C?R5ouuUkrPxp@GZbshkMi#Z9(#D4$KwQ#SMYcR|oP1#gJ zHkDw6mWHHu%m~~OX>msc?ufu05x64)cSPWh2;32YJ0fsL1n!9NMI&%W1n!7%YrZGn zF)yAbIU#f!=Ov;ZM~p=KQ%+-9f)Wl%=pZtAR-KiwiAc&G<{Lko>tcyLwz8*$RuY74 zl=>sPxDCf89kJRh!Hz(2Lvi@4=6pL^nlU>N{>S6IYkMON(~vq zF`*7Ys*0(wHXckvC8Mer7qk}{tj3H`8--r!6!0!dVTSbAFIW3t|G_@W<#0Tt0*on~ zh*=$BoL|`eee8l5wVA9oWO{GFmPkghVatwYrLAOpG4Ft}l=v{YT;ZO+-bnjQdwe`b zre&6ZO4KM}e8L%t(^mmG@H-jWmRzaB9vm8}g`!K#3p5(Tuhu+UPt)_@Cet}oQj*+g z52YI96e#eWFrrhmqvpDXoYF2+N>Ep7 z?YcDyZ>8w-*fN=zIWag~OXudYxygbGf-6k5M{9}jz~DgGmCMDcI7+?(?F7Pce`4MG z*<`d9Nf&}p#zgLhNjp*hlW8~g3p%vZmDhYu>6NYW`b?LR;Ucr8xTZAHX$19&+Ju2?M=&v%aW5a7}^RLaNWL*Yo$C-zdQhr-_`Odn9{lPl=#JH4-KVZ+Lx;?$Wv zi;LAnB9cmZqdwhC?j7-?3$I>Cji!U09mSxpXQ1Lq4`s6B{q542#L`)tN+yRh`6c3$ z(c|;8`SfUN;njxByRY#({ZHiF&1ioV%e&E1Y5E1!l?`jjv^sG&z}!#YJQ#>Y6Mk{g(!zNp`e(+?HS@Wb?QC>6}jBm7Z=-u+d3lxp1zBj5qEU zE`~j8rbnr4<22KeUeWQwr!I^P4-W)zdSaU)D$JGkVs1&=ymSYKq|qGiODmOorltoh z z7ce4;MF!!<_BzD8}gq5~tFmhgB>!u&lH@)IZYn zzVg*EOZ1@p6|Awe9V31=T)yn8iwk|5v*`&>zF6>yZs%+FcML_HvG|&dt2((RsjPX? zA@YO#X&=#|Y;B|_M5C6D4u4lUN6?5QzAKR|GGZUKuzq2Bm_2`78lYA4()EdAwf* z1R<&{!<*9So{l&|OOLx$3|pbik{IlY3>BOeteR1iZMsWE?3dP>-m9X6M#T}C$gTXXDQNl!?6&JL zggtJt|a+J?plo>hB_V{+qSOeI&OH*K6? zotU(98jtDUU|$t~#MLc-#0%wz@F9teJbB3x4P#9*HfXMy!i0DW3>z-GiY!CJE7x@1 zs5%Z<|Ai%teL0JxOEw-BpiazZt>bP^3^j})R#c5b34oKbJ2w>F(uADX!M;^U*8OG}$dvYa}X zHf`=4zv!ZiOdmIn_8yBn>ZGx(A4||6F-L(&l~fn13!D9+h$9rDxpb)*NCYC(M0Z$K zp2G3Qb2tfqfG6!}qk0g8-5NwxM3^+F;wTbf&|^@S)DD!;7x zfeC}El!?`;9!pquh{T6*#6gZ-+!Yxf>7gqO(VW)4B;u{Gvxj!k1k?wDL3e%)S&$Y> zc#&Ltv%PCuQ3Ys3`@)_mwauwV>xsC+z0u+}(;I})y*qo8=z)o7Z#YyAV8igZys=2s z6W@L4>`t`-4e#zvPb5ZnRq(RX=-A=#28OO)U)oyg+gtxCJqozecJL!UqSnpU~NbHL}Fxbk;^3@e=1c#B+$}IIm@l(^ZDkRfc0y z2Fp)|(^ZDkRff}5hSODs(^ZDkRff}5hSODs(^aN*y2^06%7{uK`o$9Z#ZpVZSVD3y z@imrUizW1nCG?9W^ou3*izW1nCG?9W^ou3*izW1nC3W6d;ybmh#d5ut_1*Hl%kLYX z;2|e(BSC=Ewh;*`hh!CmY3PXjX7~hUFBV2H3Wm>^j7^px4T;qh=>RK8W83BrhT>w$ zYdWm<39J;j_&l_-v!+Wv`i9bALV0qXZI*~TSL#i;q8rq5?pvyMcNC&@lprt%cf2U1 z@>$jJKJGy+#}BMWtK&1&D8L{^6t%fcYM`1tsch+ta}IS2cXV8E@sV7pg9uEsL;sT@ zaXk)Ge5~q8dsFK&(hY`h6@&8cw;SRU&Kf5Vd6Yn*;1MXK25` z;?5!FOlTeEaVGQE@_AJZx>ulk1-e(Ddj+~zpnCulk1-e(Ddj+~nI)$?M zRiL{hWwcJ!Vvn|H6{T@j7{?2pyoMzv3|E9(ToHyV!f-_xt_Z^wVYng;SA^k;FkBIa zE5dL^7_JDz6=B5{hGaJ+d^>lRo}@C0;rlWCJc^W@uv+dpMgOK`SHbc|#<#Uusit{$ zGXzPqkT)hY@86te`^~R0D@syu98(L2RKhE8=SY+%_6#ehQ_7lh^wDu~x_wqJ4MF_T zLfBgh2Ro>)X(dGzr4-+=+2gcyR65$CUH)(`?(gU*a57^*F7N8ZgG^o3j*T4?7f%Qi zOkOs{FT?@RnohX@EH2ZJ71N}K2ZxfK+sf(TM5HH%r8v#Eva4ptdhb}ZEjgMkZR<=9 z4GxPuzhtSv!RKG3Gv7&p1r}a_QkIOjJnubs>Fhnt# zvNB}-u)a5)`&JRVN@+~GD`d~og9NW|M+DU%^!@db!~LL)^(Mh&IMNYvSH`X^(B zVa#Ijj7^VHg^e%Kx!4&gmAYd7(eWWSv2cX)hJ*gj&Z4)wnj)piW=c4T$qRcuUFG&R zF?W&oJ~%Pv4^T(JRmL`EaoSUfa3&tA#(F1<;!hxa+CmM}#jTsuoJhmn-QD4E-#~BJ zZ;~z2r0s0{oal~6IWzCjoyMBo35QFkfSqu8Yt3rLn*Fq*L@N<@dD zfExa}E?)04R`4cP@TS%Z-oy&t1T$@71#eRSOXb0%JYK@%W*%?h@jf1(;_(;{v6gM( z?lZ{paqc=U*!X=t*Xx_t8@QHE2=e+CuD6J(sVSgq9R3X}lalpfOp()~WW&g6H*-{y z6C#Dr;6ios5*xRQyY#lbO9^9h9G{Rbt=&@X8H+L?Skf3XDE#C~STP4=`eWvJI&O|m zC#ZaYiBn9es=7Bx+%S*3zkjf=M-q*luA#H4=uB4A+^gpDG&apQtDjGghx|Gk0YZA3&$&ib|iw$R8V@Z z+5?rGltU4#TlA-v7S(j%SY<&g8A|!T%HL&4$F!(M8Xjupu&hmoQbd5 zV$6j^T9;ro5~U=`G&U4%>d|WcjGaZ5+f}koO<~j2=QY{>#wDZE_m~*yVlm`(jZBZx z2LQ4sOL*~&1LCZvuknHC}e3Hd-==s_gA)N>PVV}mD;vMrRcIsM-JhQ$r(XxS4c z{wNg;4XxQ&b|x|@t3NO>)Nt_Uj$6g;U4T<1?L8S4@wcH$1jBMI}_bJLt)+ z8En5s{q^&?R=LKXO?lG|#P|NrkYbm!qE~oa&Z<7fsy@cG#N-|0cb_56d~ml9?)Jgm zKDgTlcl+ROAKdMOyM1uC5AOEC-9EV6*Wzv;-0c&gB%0^n?d>uAI+AxJ{+(_l)ef$A z$oJ>>RxKd;-bZ*{o-g6~5~)`qB5cFo*oWn8fg^yh5_U#eLQQs33JF0cS(clrhD2lM zl$IATonFLDVX%>iFj-Z^2SH^X&a(L!;2xylsW;yLXp+c2;C59{SQjcXwAtPb_X*QPFON z`J#7XdRU_S6Lg&QUHBg-Sh;JjTASRuZ6h^g&|0ZQ=5WW{rR_VnmwcV2PG6e~i*dQ} zUDJr!Mm4elGBOs3b2*1i<=txaiU;D8+Lc&Hj%hclRqUlYV1g2Jw$Vd?^NfBjaAj^>spj z<)Mu#wQ0&UG>X`lRF9FGwZ~L2jviTqf<@q1ubz^VS$ISBgS!pZI z&m=4*DFhMf6_It;uU8}-ou5LfyosZyBb|-g@*4{Wij);HCD?)Vjsy9{f+LenQ?^gn zueK&gNRB3P5k#niPc6AbB5JwLlkj*_-K36CCx8ZQ_JW!vz>E|gOVx%T#Ie|jg-8jNQaXmG^X~> zqGhwCV6gkbD<?3GPN6?mzpe-FiTROt9lDl+7 zTT%?Tt$FoH?G{G31(vfi+O1sQ%C(IACa&Mal6VW4Ppb2my!tUD*r#~sQ!pmI>Np&U zd_i+pISeD1O(p#o&Kao44iS132FWk2uGSa*-iva&Lx|wxN9v&9nWSJBOlWsHc?Dv=`#|ByqbvTEq zJ%)tFZ0of6GCpN`rzDiqLOC|kALwdtqX2udBPNZYW{YWQVrnL^I;hu8PZBP%U%Ohn z)L17`Or@+3*+GkNZL!6*MYy&I*B0U0B3xU9Ym0Dg5w0!5wMDqC2-g^Wc~Uhv`HieFV>f`2QkNzLBsxoQbk$>276+AoK7#1 zCGqZv!?$81N!A)DmAi{XFO%fi79Av>JQW6Y=M=$$-$waOysLvVoCnl#R21_VuTaCl2$1(PXWtW%2ER>O8%eSX3 znZceCEwV%oo~Lcl-(mVG_Scj_-w*;X--C`~fgm;>no&i7X+jSX+nCyRA}oK?n3`d) zsUTBa8@zM1DTxyn~7rF3#)a>VO(P|T02LvCLpm5ai@jzB(N5K$cu zP>qwLwpwWtXkzl%hu6)TK4YktwBt&R4HxH&`#!LbM0JUBGopZ`K8@Xe;kPeX2o~vc zPG=965)rnzwjAiEq`@j)u4(Q1Z%rqajqBy25{S$XQddk=0r4Ukb|Hn^2-uQ0?7Xoe z4ai%JGnzGtnx@;zh&rhwMy#OWEy6HZD4ntzBfz|hwK#~1E_cca(_}sFP_>CsL@_Fk zeq$zEzCrUQHD&&GAC=h=K#rWPOl4Oo13;jH#paBg?I~KZpw0z~yHtRPMEnx->oI4B z$@y*5qq#UWuRI*FYz{Y79BG@B?H)=~$jFPcr!YC(8+7|zfkHrtkS@llBZzsb+&^Nv z#h7vAp+8gX%sFrR<*~MOQn_m!l#cOwoZj=lawITVtNLyACylTZ)(QVxP2qA(nX}`S zN`J~Y8Q{xy*n5}OjYcU@Xvg~D=$lzAh6W>$x|x$=OVGB`)jl^_fmSBX*?8KtVhR#f zF{QbLQcy)AW|~n_oVAqc-tv6xsanz~!G_^UxUt{dqoyT1HriLtkn%1Qk?rmuoO~lO zO@U;LjKrQ$=bD1I%WlfpDcKP;r>pIefjA*ZF`q)^8JXX@c`l|7m8r$$Z5zhu^^h^O z#j^!(aws!=VoiK7$z-<0(+SJy(Q1A?|b zl}Ha06c2DtHe1?tJxFT}TgINuv%d{f6pI!EnaywZc2W|};}|}E>7}F5p`LcL zo5FIj@u}&Q*;h_lg3+~UnkU=L$!^L;cZaR#TmwJSbA z`xq(+;b)cHCwFg^(n=ox*cb)nb5WPsJ#c2fQ)~j>zFI9be&Wi@*sJoK+uv?Ji|u4i z+o$g_)_00XWjVO7r;TP)r%R#Jr4Vr`bh;EeT?(Bpg%nJo)1}bqQs{Ikbh;D@T#B<} zs-@GV(CJcab|M`7T1xF%Qgz#f#^mDJe`?=?S-Ea`PDF&{+1HFdFKXXhWZztD?VF42 zn~Ut5i|m_=?3;`1n~Ut5i|m_=?3;`1n~Ut5i|m_=?3;^f->mVxUTJ&F&8tsp%Z4tw z%-xq;cVFi2%iMjLyDxM1W$wPr-IuxhGIw9*?#tYLnY%A@_hs(hinHgAeD^(k_nlAh zkOla>`@?7xWt>P2E1KGw%`I~q{42rBE#tVEa#TvA92L79r&!t|My)#ya~Yc-O@+`v zS|JHoYoI*6RWXdZ+q?q=mxj7is57dVk~bNP*ke;ugL;qpyeTN||!; z?&VCSKOo%+5OLkxyQ>GQb2qKeOzQ7cw(;)0yH|3Fk*Gv7NXc?*DwlKSx9#0mUr@q# z_}t-p^tpTF!|$$t_MYK$WnF94`d>_Un|tAsiwz!IPikUQAIdZH(kPI_gM*6%k8U0l zJT~z-jRyuKWQ)1w(o zqu!yl^J_XCejM34Y5#7+y=Bf|PPaMH$;0~8WmDPlOstOvk`h*f#0r-4v!RYaxILW? z20QafES>EGW0Ohu;MiC&Q1q$z8>>B#GL=wdT}a=> z+AU_&*af2~xg=cBWK)+WJXlv@5b0FjRUHbgx$3H`3{U*whYts**G>8*^2HK!cS{7h z9&qG4JKcf4-tM%^=CcHyu1GZD^LOR>Sw)SiYC$8NRp!;&DI?$u`t+kq0 z|GnvHYzJ#vHd%?3Z*oTs?x?l6qXu`>;Eo#HQG+{ba7PX9sKFgIxT6Ml)ZmU9+);x& zYH&yMR3@e%CG?G@1|hwtik}Nbqruj;fmiZ8dU9Hcn@2McRmdj`h}!2Nlhd7QU#sE> z!vk3D0x{Yp6npH3^!KK^+uc1w133;Y6Bl1{@kF4vzc)xdH??qlnZWjUyyH&&UKL(o z9~kU3n=@U#!Rzb4ezjUT8$a;DcTSm#1O3S5j>eBo_nKZzbV?q}4Dq_6cS&BJ$mKHT znx#p znr?hae;56wr?GTvP4}J=afx_PKhpC=#EVjM@inOADA7^O+?sVeC;E8kfwY{qOePDJKGI30?6MF(wa->)!)NZKxuKOD$Z`l8y=O>igG z&OGh&lRZ|kAnT6)bz7vx4HcD(rA%gQs5gvd#*{_vY;$!DjwK}AR`Ji;D`&R8WowT_ z(%2o9T|MRHmF04FYHC`4l?2bG1{V62QDk)6IPL3Iwo|^G&#qa&wa?#y1|0CUdwZ7F zO(f%e?d;>nwRh^jHvJY6pegN~NI0qAO^tVeu!oXY3v-Lx1_PIHzgpZ`l}mG~?iP_B zXyK(9Oy{y!o)0u^nVdXv<8grXnNd@N{oUYlcX+V0B0t1hFUBTxbSkf;eZ&xr zZ8^|8I7+egrGA;5ShYLj^28ibS9EfsO7O8{8^YL;N~yh?^P4e@($(Q}EXm{51uCO~GGN@YfXlH3ff7!CzDG*HnwYrr@tB z_)GNeb=s8Dl*Qp8nYNsBgD7(`OFU_KsUk_amqss0N&hnyy_u{%xic?2GnToC@f2NFfAF4!@Y*JictU zy_p|2kd)W#?vnCtob!cqH^1753$LA5yX0vlgL@iZBl73pnB%!qRbdU?i^8z23P6S| zRf~%aM&O8_N7=4ejOISIp?f+ybKb7yuH<4D)z>KN!|BWG4E1bEcdeBDT|FiJUe$px zI55^14R`ks7f|a;wZ86fq_=Ot^f|S!hq5Uwj3en#m$idd$J8-LA5WX?-Qn~|#*@qx z$-i%NJBH6W^Ys4i)Anu4p@y}u?B3ViyZ`hv#a_6HzAz8qlkSA@N3^H^Z@D;3==uvM z7bWt*j`POTjO>(thpiY-k(0S64Cz+nxd`tK^P0qn&G0?dHR?iZG$?9dQdH zY@|;^&rsFPUU>2MbYpAPJx=O!TCKSa#u+O&oAWtL4tM>lO5B=|_BP#zUBwlx#MF&x zZI8KG!W#WQNi98%b*1(K(QypvA!|+Vc3P}nXYXR>oR4lz_J{0t>=7 zCgzntbztkAG@s8Om#VjiuEd&!VVvI^gF_(awoypZadX-#Tk_F z)8Lj55WSNmZL&abtu(FY{En>6M$e9d-EB`>3s&nuDlER!uBM;WxKHbFYP{abn%KIC&fsuu9?kC(U*N? z&K3@NAP%-)Jb@_G-f+}jI`1VnFSaktjR)L%AmvTXENtnTI(*u;j!4!x6Mm`jL;Z)Q zRbtA{)q6!ce^NWlJ}I@E4kK4B?33aY(q5pLLS+keazdxRpJ6j|BC4F6(4Cyno$L!v z)N>~%bSEctCnt0#Cv+z#bSEctCj!d}ah_KjW#4b9jdI#|7nPt@_Dk`Dap+}_CjbsvV-#~x z0kg_a4YQc7t)vlScM_Q>_5!auKOqS@Qp-+cG+ktC#d(V#8RICXDe;SOMamV0px>&gUzH+N2$`yfrkWbdUD%XgT6Lz zDw_*&%!(9q`H-Cm4w_V%e1&XMcuT|8_5)UC>pxTTTF1vT+`KliUma*(n|bxi&FeNT zt`9b^E!u$o{^qq+i3^yT#fps&Ebq|T@!nhacx3fq|&4M8#AlF z_4jQ={xq7eTeLIurRKF&>(`%ZUi-DQiKa&CvjHt=lA^H`54{{E{-|~?k6k1LU&ikn z*k+IOEZgmI-Z{*_m+>!#FVUv`)`cJTfY3XvY8 zp#P=(dicl{#}0APx|cj(%3mBN!)*vaRh}n#{BPsu{)ca1d}^HFCwUBUpFsqoCf{bm zMVB5qoEz$|<|cFh_xH@5`l7rw-Z$PiR2}3)|F2{JH}ucnRYMjZ2Hs^%qD)ziFC`EK zMqwHwO~_J$n4;-yOWD^H*&gVyvtwJI)9vnxLD*l9%vDKRRKMb9WfcFv|Li zBXpBkInyNNWU*=G(9a8Kj2)cgO6ZMU2;>UdV=s)-j}9rbJ;eH~G3TS`lj8{MNe=we zX!SE_m+LT`&H-W`tHK8QfGr}(mso9EsNA|tn9?>FW(Qe*yEp^vp%wE!g#3P1{z0<8 z&mea1EU0xiM`sMy6sjO?T*pkLbM(;Nx(7|sr~7Fv6VyX`SdZvb^wr~fLQm=`Jx!bM ztlqBY^t@isi+YFNsh9M!-lcaF_12^J>V2q%1A0{-q_NhpUeiY?h&*Py;`q_($b7Z= zJlK35YCaD)pKHzMk>>Mg^SSl;@#gOn&F9(X^IY?Jee-#~`Ml74-e5d0G{;|Pj=#_x zf1x@4LUa6u=J*TE@fVuoFEqzrXpX-yYrSHyIy_u8o(7GlA>(P-c&ZssBgWIH@ib;U zjT=uB##8fVbH;D$ji-6zX~B5fpq^^Rcr|0ZnlWC@7_VlGS2M<|8RONA@oL6+HDkQm ztnjb~ziRMjj(?3E<91$cQ@dVr_f<&-D1ZTH9Iw1v$zWX}jy+)b`YWukCGY(Dv0I*G_Ak zq3y5#vv#1-sU56~$E#R>vDQ)lAc%q>n$gPjTR?Q0)?Fu?yZ!~OXZ0bixBf;Dv7yzg zbZGnuUe<@T!TQHQv{M_de-T7yYa{h{gJ`=pR=*!aJG6=V*Fbb8h*H{geY3W{e!Vtd zeU`hqagYyG`bENodu%bfrw&+%u}uYEHpxb)?W*ve+SXU&?p3=pMmIh5IqNtk|6pE zh`tVuHi77;(C7*feF8*JL8G0}XaO4eq0ugAvNLo zEg-rH8ufwbR%m1c(GL`&J3#a}5`UvsYMc$C`?M}Nu)Fa`5IqN?AA#tLWQgt2`Wrjh z1zaF{7OwlLHUu{eH~yg28rOn|cDaoSxbFMfc;g_58ro#zd~FJDoNnv}(TCx>d$one zRuFwn+sLyH2OJ+s1gm&k2So|=%3-b|Aa<=g+^ZikqJaPGlLUU?d0gb%S$PJASL!${0 z9f3yof#@yJ=qeCB0*%gsMpUV5uygZ`=b6KW)sL`_wrCqy{}V)S(l)KW85*4qqB}tJ z3TU(pqF1qwUduYV6hukZ(IIW;>K9o@AJBHM{s%M~VI930L@#3<{S`!~gXj|=iYOYr z3Pi60(bFJm1JMN_>IBhipwXK_^j5g;7+e>F>jEJ9Dv0g_5$$>#y&$?4M4Lc#BQ*Ln zh%SLfKZfgG526uh^b-*6ghuCsXct@;hDNV}>nb365*qyhL=zx-KZyPfL>GYQgV5-m z(CE`}-4Zl<7_J+DM*j@gMM1O(jot>=^+2Ofz;$7`?nbz7Od)cCXg`P^gzJ6_qEQgJ zLG)q}T>+wFAfmJ>E4d%;7+{T68|Q)OJP>Ihx(P&H5Y?bj7lL@xr-i$KJgg56>#5@=WBb#UFo zAesTu#UPq)A_{@%N@(;)#dVvJ-Y?ZU8KG2*yZV(KONCZ)-@-aN7wP>rxbF3E-Miqrez@)}AacNUAA{@u$~rm>*WCu! z9f0eegzE<2y4yk2sSsTQqWhtd>_=NbbQ_4y2GOG+`WlG7*xZjMK{N)UpMvO75Pbqf z`$6^Fj0t5M2VIIS`%S+>c%djXFW}E)dOuXcZb+LG%(3JqDuB zf#@GV^f-tf1ksbt{pc|eO@rtc(5MWeJDdB_&CsX~M5lr15fJTCh<*px9RblLP0271 z*Aa}}SOeFc4cA=@qJM%$zXj1x;JQt4-66P+qhG@c*IfhGRpGj`;JR1Cb#H^~_P})k zxb8G0!$H>35{OR1bz4AmC5WB|(M@pOJ3w?cT(=9ZI|kPshwJ9xy6fP&5L_1o(VcMJ z2#9Wn>#87nFI+bZ*R{cQlxlC>45F{Ybwv3q)%`5Xo(4SBa6Uf9vN3t8uZM(+pF@1W5XG`bNQRiV*Gkacco z^fF{!utlSW1w;oy^j2u}3^e*Mh{7OBfhY!zz6+w)f#_xsje#f$A`3L4G;^Z_jUI+Z zzXj1xKokVg{UAz0qlZ9rBQ$yl8a)Y({tZM|L8IS7qkjO=4iKFIjs68h2@nOL(K8_G zfa|;<>V!u3gQx=07B8VOV(YrxJqwB^3h>#5IiX%wRQKa%1uN&*=ThNFz zGCIXHkM-=L^U!kv`fX@j290tc`gah078)G{(fuI02O8Y~q7Q-SqagZ6Xfz9=8$k4X z5Pbtge}P7~g6MP5=#6MW9%ytih`t1k<`s=D0#Ou(KkRuEeuff)Tf}) zbrWKL@p3jK(qjj{tAuOL8IS;=vyHA88o6Sf5VRS zeheBNfJXBmI)?OqFEsiyh*m(f7DQ$cje#i0I=TlMorm=1JN>w2uNVZo?t#Fx%U(@X}XbtM%zJj0vbIHjn0QgVG#YKNu#|W zx(`I}0MW}pBs#;r(CDqus0NK*35|XSqQ}q~93Z+0L>~ar8=#R38eIsYhoR9Lh3MrV z+60XbL!(cFr~-|?2cmWmjeuxBh-%R2yU^$xAo@6nZUvDI8vPJNJ`j~aw3~JGB@l_G z`d$!m;)5nrbs8fek=G-+=aIGx&|?GNU?cOp$lq;ZXE$hcIfyO?Q8$RL1kn)?y#qwl z7-+l~$q)k3tswG)$ONKItfMbNqutQx2@v@~WaxDv5LH0*8W5cXkq1Oy1JMwO)_{n9 z1nLa?VG!L1q6aO-&V43WLzArXsrtv^x@SP-M>6~w zL}cf2?~RPHSU(FycYx?;&}cn~MnL2P5v5ttbhfeYZAZTD;9KwH?{}ej?S^Oe)PDn_ z1rU83MCX9$Lm(P}>mF4!`WW`Gi{ZMPv5EPxitWNKR=_g0AKTcAv>tZNUQWJ!jlaNk zf8aE-fSrsJAJ(rS>}|u^9o%IAi`m)O%+A7Ub}M$X?O4v)=*O(13^Y2Ob%b6A4_A_@kO=+z*)2HpF=K;%WQ`yhyJZ=TAZKxcRku1kO@3ZfsN*F6X#v7G!IME?gG-Hv4V zGKkKGMvsH&To8?eXe%`OI*6(T4}6GU%9GCYW0 z_eCVbmFRW9Lo!@~UiU5#-K-GR&{V&Hrpg%>t*^{Z+66y%!zmT!wrBNMAfmxW9m@&a zV4RQs6-0M{=t2;E4;sA}L{CDazoM!B21FkP5$lNiPI20p=5N+x<(fykT3G!Ih-#e5 zpE6Dpt9OCu0ZtR2M^pV55WO2s70U_VVH>;a_SL^284k0<{ws*y&H3ml5Zw!+8$fgw zh<**Cy&$>+L}<-$-G`ykP0$DnB)eCc6>iuW*0GK*fkt=2b=#2)5hQ~fuKNx&x*M+R zLNesxx-*arD{$RQpwS^{bOgyjpgX(mBrA7{y?h!DHBRMwIh7aSx;G#hhM*Cra>iV0 zY=%b2I`qn|jWeOqKf!hHfa@MXGHirK-)BFXgX?Gp!LGdr$+MSn_QCb1v5xn{9|w>i z2YFA|!ki_O%-|Eu;Ai29+nB*RJV9cO(j#BS4BpLnLB>lngI{O7GBem6?o!v%-~0u!QV3;b`508e)#49`qDuxvNF;QjC6>RsE>t~vk|GhxcUU#=Vqh@ zX!Qwbbsr;e6-;M0`Fs~6UCBt_ zV5I$w^fN}HmUBZU|#%t*H|(vKMFJB)N6n4V#zCmHES zjC2VjJ;g|y8RjV7#L1-nj zS7xNMSyPXLiT!nzysXtPptXLOk+y(|y=nDzjPxQfy&X(10nm z&SWHtch@HwNvz<)5kF%jInj!o5Xtu&M!K4jtc-LKn10VlS27a&Ei!ChJqIRadA-O; zuVo~IBWM=JtSxYt4UDppGxg%?gUsH;j8tW$e_*6HF%r58v$(>{ZDSAJ4*hn(vpccW z?5e+w+2f>H-^WNVWh9z?!R`AwJ04)R5ArOSRv2k3BmI_<&|I1S#nrDd(oY$w#z=2v zq-PjuHzVD_NH;RlU5q5Qp-+Ly$w>bQCOaeTWTa~tX_S%fXC$m$&{AweGLojvuRhC2 z?_s0@m>y-M>lx`5ZHW;#ug);iCT%O7+k1*1_wtw|wjFiw0uKrMsBr@Xl&}l6reH2V2^3`d+QZIq&N=EuuM*0?*?qsB& zGSb70BEh-VWz$a37Fo@NO>^5 zi;;X_x`UChvmz_^!ms;QKg&p`GkXs*(jX%xWu#M@|HqIK1B@h^|G8j#BO`r>^)v@2 zdWEu1mbqTxLi6}Jo@7?h49{6)Fv%Ig4 z%?mkc$nu*QX@?r=CPq5SNWF|C_CoPr{f?1Fnj?JyOjy^DD$7_#SGdzQgHj5NqdpJyboMcu|od(}t@Mk+$5YZxgAm*cZoy$L$4XQVbToe8F0 zj5Nkbw7p+?}g0W~3Y7^1B%c4Hn6@kG<+NuV0u$?O#;<@z~b>IM^05A3Zw8m|D;(_q>RCXstz2U7w}SZ~;;_QQ_{py5F@YvFP$ zdU=hJu4AM?bEJD13CkDz=4S4`1xv7D{)#Tv!APHBq#rQSW1Kq|80kJn`ZFULyT%uoy+1P2Y0wD|Af6<{ z?<~^jdyF*7NQ;cr#z^ZJN&IClX762$G{{IdF%ooQ|JuV&z87oZzD7Hk{(;#Ot#2c< z_mskfM*%C?0($(0#zkNXFw!GnV%Ok%ZbteVUY~=E#IC_YuB8+q`n2L%czTCug6PTU>)9V@OT1L7GOy6asb&RwTOk({K zAE0nV4ovT7q&;Bz5F;&v>0U<4GE$b2Xtu%3??);fVAO-0P^l6~T+TG{3A6kU)i}$i bnvo0ISJvG9IM>>v- Date: Fri, 14 Oct 2016 08:12:15 -0700 Subject: [PATCH 062/196] Explicitly mark old macros as compatibility synonyms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia471fff171b3bc3de40e166e18f30e6782581611 Reviewed-by: Tor Arne Vestbø Reviewed-by: Alexandru Croitor --- src/corelib/global/qglobal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 8b67f0d3ef..1bcd30e0b3 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -593,9 +593,9 @@ Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max # define QT_WATCHOS_DEPLOYMENT_TARGET_BELOW(watchos) \ QT_DARWIN_DEPLOYMENT_TARGET_BELOW(__MAC_NA, __IPHONE_NA, __TVOS_NA, watchos) +// Compatibility synonyms, do not use # define QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) QT_MACOS_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(osx, ios) # define QT_MAC_DEPLOYMENT_TARGET_BELOW(osx, ios) QT_MACOS_IOS_DEPLOYMENT_TARGET_BELOW(osx, ios) - # define QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(osx) QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(osx) # define QT_OSX_DEPLOYMENT_TARGET_BELOW(osx) QT_MACOS_DEPLOYMENT_TARGET_BELOW(osx) From 1cc6cc56e16a8fd4fd22dfa187bbb92433a8dba1 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Fri, 14 Oct 2016 08:49:54 -0700 Subject: [PATCH 063/196] Fix tvOS build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I128605050b68787f8c9671f4aa8de0a1667301d8 Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/ios/qiosviewcontroller.h | 2 -- src/plugins/platforms/ios/qiosviewcontroller.mm | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/ios/qiosviewcontroller.h b/src/plugins/platforms/ios/qiosviewcontroller.h index f7b190ba22..07d5535e1a 100644 --- a/src/plugins/platforms/ios/qiosviewcontroller.h +++ b/src/plugins/platforms/ios/qiosviewcontroller.h @@ -53,11 +53,9 @@ QT_END_NAMESPACE #ifndef Q_OS_TVOS @property (nonatomic, assign) UIInterfaceOrientation lockedOrientation; -#endif // UIViewController @property (nonatomic, assign) BOOL prefersStatusBarHidden; -#ifndef Q_OS_TVOS @property (nonatomic, assign) UIStatusBarAnimation preferredStatusBarUpdateAnimation; @property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle; #endif diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm index 0478c5b8c8..c47b6d68b1 100644 --- a/src/plugins/platforms/ios/qiosviewcontroller.mm +++ b/src/plugins/platforms/ios/qiosviewcontroller.mm @@ -229,9 +229,11 @@ @implementation QIOSViewController +#ifndef Q_OS_TVOS @synthesize prefersStatusBarHidden; @synthesize preferredStatusBarUpdateAnimation; @synthesize preferredStatusBarStyle; +#endif - (id)initWithQIOSScreen:(QT_PREPEND_NAMESPACE(QIOSScreen) *)screen { From 56395c5cc1791367354e225c65dce79d7522c7f2 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 14 Oct 2016 13:12:24 +0200 Subject: [PATCH 064/196] limit ability to override QMAKE_MAC_SDK project files may not override QMAKE_MAC_SDK any more, which seems to be no big loss. it is still possible to override the sdk on the configure command line (but note that this only ever worked for the target sdk). this simplification is preparation for subsequent changes. Change-Id: I3201629af132fa3938b13577854f3b19857a1b5a Reviewed-by: Jake Petroules --- mkspecs/features/uikit/sdk.prf | 8 -------- 1 file changed, 8 deletions(-) diff --git a/mkspecs/features/uikit/sdk.prf b/mkspecs/features/uikit/sdk.prf index 54674eb396..eb7cb52dae 100644 --- a/mkspecs/features/uikit/sdk.prf +++ b/mkspecs/features/uikit/sdk.prf @@ -1,12 +1,4 @@ -# In case the user sets the SDK manually -contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*) { - !isEmpty(QT_VERSION):qtConfig(simulator_and_device): \ - error("Simulator is handled automatically for simulator_and_device") - - CONFIG += simulator $${simulator.sdk} -} - build_pass:simulator: \ QMAKE_MAC_SDK ~= s,^$${device.sdk},$${simulator.sdk}, From 4e945ea2f8e0e1e8eb512e3d590da12661a674cd Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 14 Oct 2016 14:52:38 +0200 Subject: [PATCH 065/196] Get rid of simulator_and_device CONFIG option (mostly) A separate flag is no longer needed now that simulator and device builds are not exclusive any more (*) - both 'simulator' and 'device' being set at the same time is a sufficient indication (uikit/default_pre.prf sets this up according to the simulator_and_device feature and the QMAKE_MAC_SDK variable). (*) xcodebuild mode actually still uses exclusive builds, but this is activated locally in uikit/default_post.prf, and uikit/xcodebuild.prf implements the actual build passes manually anyway, so this change does not affect it. Change-Id: Idf173a7bfeb984498d3a49ed6b8d1a16da6c2089 Reviewed-by: Jake Petroules --- .../tools/plugandpaint/plugins/basictools/basictools.pro | 2 +- .../tools/plugandpaint/plugins/extrafilters/extrafilters.pro | 2 +- mkspecs/features/mac/sdk.prf | 5 ++++- mkspecs/features/qml_plugin.prf | 1 - mkspecs/features/qt_helper_lib.prf | 1 - mkspecs/features/qt_module.prf | 1 - mkspecs/features/qt_plugin.prf | 1 - mkspecs/features/uikit/default_post.prf | 5 ++++- mkspecs/features/uikit/sdk.prf | 3 --- 9 files changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro b/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro index 8317019c10..f5ba95252c 100644 --- a/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro +++ b/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro @@ -14,4 +14,4 @@ target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins INSTALLS += target CONFIG += install_ok # Do not cargo-cult this! -uikit: CONFIG += debug_and_release simulator_and_device +uikit: CONFIG += debug_and_release diff --git a/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro b/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro index 4716665d34..e137b04823 100644 --- a/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro +++ b/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro @@ -14,4 +14,4 @@ target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins INSTALLS += target CONFIG += install_ok # Do not cargo-cult this! -uikit: CONFIG += debug_and_release simulator_and_device +uikit: CONFIG += debug_and_release diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf index a572faac6a..c7f5850aa0 100644 --- a/mkspecs/features/mac/sdk.prf +++ b/mkspecs/features/mac/sdk.prf @@ -54,10 +54,13 @@ for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_ tvos: deployment_target = $$QMAKE_TVOS_DEPLOYMENT_TARGET watchos: deployment_target = $$QMAKE_WATCHOS_DEPLOYMENT_TARGET - !simulator|simulator_and_device: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS + device|!simulator: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS simulator: simulator_archs = $$QMAKE_APPLE_SIMULATOR_ARCHS archs = $$device_archs $$simulator_archs + isEmpty(archs): \ + error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture") + QMAKE_XARCH_CFLAGS = QMAKE_XARCH_LFLAGS = QMAKE_EXTRA_VARIABLES += QMAKE_XARCH_CFLAGS QMAKE_XARCH_LFLAGS diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf index 149b3cff56..7e12626db3 100644 --- a/mkspecs/features/qml_plugin.prf +++ b/mkspecs/features/qml_plugin.prf @@ -15,7 +15,6 @@ TEMPLATE = lib CONFIG += plugin if(win32|mac):!macx-xcode { - qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all } diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf index f0072f82db..07e4f48771 100644 --- a/mkspecs/features/qt_helper_lib.prf +++ b/mkspecs/features/qt_helper_lib.prf @@ -21,7 +21,6 @@ DEFINES += $$MODULE_DEFINES CONFIG -= warning_clean # Don't presume 3rd party code to be clean load(qt_common) -qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 1df41065af..f19abec8be 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -84,7 +84,6 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.inclu # If Qt was configured with -debug-and-release then build the module the same way # - unless this is a host library !host_build:if(win32|mac):!macx-xcode { - qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all } diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf index 2179c7ca22..265b4ea8a2 100644 --- a/mkspecs/features/qt_plugin.prf +++ b/mkspecs/features/qt_plugin.prf @@ -26,7 +26,6 @@ win32:CONFIG(shared, static|shared) { tool_plugin { !build_pass:qtConfig(debug_and_release): CONFIG += release } else:if(win32|mac):!macx-xcode { - qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all } diff --git a/mkspecs/features/uikit/default_post.prf b/mkspecs/features/uikit/default_post.prf index 37a006b7ee..6e23e23a6a 100644 --- a/mkspecs/features/uikit/default_post.prf +++ b/mkspecs/features/uikit/default_post.prf @@ -69,9 +69,12 @@ macx-xcode { QMAKE_MAC_XCODE_SETTINGS += only_active_arch } else { VALID_ARCHS = - !simulator|simulator_and_device: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS + device|!simulator: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS simulator: VALID_ARCHS += $$QMAKE_APPLE_SIMULATOR_ARCHS + isEmpty(VALID_ARCHS): \ + error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture") + single_arch: VALID_ARCHS = $$first(VALID_ARCHS) ACTIVE_ARCHS = $(filter $(EXPORT_VALID_ARCHS), $(ARCHS)) diff --git a/mkspecs/features/uikit/sdk.prf b/mkspecs/features/uikit/sdk.prf index eb7cb52dae..287441c760 100644 --- a/mkspecs/features/uikit/sdk.prf +++ b/mkspecs/features/uikit/sdk.prf @@ -1,7 +1,4 @@ -build_pass:simulator: \ - QMAKE_MAC_SDK ~= s,^$${device.sdk},$${simulator.sdk}, - load(sdk) macx-xcode { From 418494ecb6da1421a88dd9893efc2b9a20ca79d7 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 14 Oct 2016 13:14:13 +0200 Subject: [PATCH 066/196] fix QMAKE_DEFAULT_*DIRS resolution with apple SDK, take 2 the code got factored out to an own toolchain.prf file, which is load()ed from default_pre.prf, so no change at first. however, on mac, we shadow toolchain.prf, and make it load() sdk.prf first. a side effect, it has become harder to disable the use of an sdk altogether: putting CONFIG-=sdk into a project file or the qmake command line has no effect now. instead, it's possible to put it into .qmake.{conf,cache}. to make it simpler again, it's conceivable to finally add qmake -pre, which would allow setting variables before default_pre.prf is executed. take 2: there was nothing wrong with the original patch, but in 5.8, CONFIG+=simulator_and_device moved from qconfig.pri to various prf files that would do it according to the simulator_and_device configure feature, which would be way too late for the "pulled ahead" sdk.prf loading. as simulator_and_device is now gone entirely, it is safe to re-apply this patch (mostly) as-is. Task-number: QTBUG-56144 Change-Id: I6cf484982eaed8af39f7a539c60f5a087a299914 Reviewed-by: Jake Petroules --- mkspecs/features/default_pre.prf | 47 +------------------------- mkspecs/features/mac/default_post.prf | 4 --- mkspecs/features/mac/default_pre.prf | 2 +- mkspecs/features/mac/toolchain.prf | 5 +++ mkspecs/features/toolchain.prf | 47 ++++++++++++++++++++++++++ mkspecs/features/uikit/default_pre.prf | 4 +-- 6 files changed, 56 insertions(+), 53 deletions(-) create mode 100644 mkspecs/features/mac/toolchain.prf create mode 100644 mkspecs/features/toolchain.prf diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf index b655f2e0ca..2d52525190 100644 --- a/mkspecs/features/default_pre.prf +++ b/mkspecs/features/default_pre.prf @@ -23,49 +23,4 @@ CONFIG = \ unset(today) } -isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build { - # - # Get default include and library paths from compiler - # - gcc { - !equals(QMAKE_HOST.os, Windows) { - cmd_prefix = "LC_ALL=C" - cmd_suffix = "/dev/null" - } else { - cmd_prefix = "set LC_ALL=C&" - cmd_suffix = "NUL" - } - output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines) - add_includes = false - for (line, output) { - line ~= s/^ *// # remove leading spaces - contains(line, "LIBRARY_PATH=.*") { - line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= - paths = $$split(line, $$QMAKE_DIRLIST_SEP) - for (path, paths): \ - QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path) - } else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here: - add_includes = true - } else: contains(line, "End of search.*") { - add_includes = false - } else: $$add_includes { - !contains(line, ".* \\(framework directory\\)"): \ - QMAKE_DEFAULT_INCDIRS += $$clean_path($$line) - } - } - QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS) - } else: msvc { - LIB = $$getenv("LIB") - QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP) - INCLUDE = $$getenv("INCLUDE") - QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP) - } - - unix { - isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include - isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib - } - - !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash) - !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash) -} +load(toolchain) diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf index 7bf6b4a716..99c92d15f0 100644 --- a/mkspecs/features/mac/default_post.prf +++ b/mkspecs/features/mac/default_post.prf @@ -35,7 +35,3 @@ cache(QMAKE_XCODE_DEVELOPER_PATH, stash) cache(QMAKE_XCODE_VERSION, stash) QMAKE_XCODE_LIBRARY_SUFFIX = $$qtPlatformTargetSuffix() - -# Ensure that we process sdk.prf first, as it will update QMAKE_CXX -# and friends that other features/extra compilers may depend on. -sdk: load(sdk) diff --git a/mkspecs/features/mac/default_pre.prf b/mkspecs/features/mac/default_pre.prf index 2064d976d7..e21e749ee9 100644 --- a/mkspecs/features/mac/default_pre.prf +++ b/mkspecs/features/mac/default_pre.prf @@ -1,4 +1,4 @@ -CONFIG = asset_catalogs sdk rez $$CONFIG +CONFIG = asset_catalogs rez $$CONFIG load(default_pre) isEmpty(QMAKE_XCODE_DEVELOPER_PATH) { diff --git a/mkspecs/features/mac/toolchain.prf b/mkspecs/features/mac/toolchain.prf new file mode 100644 index 0000000000..df191eb13c --- /dev/null +++ b/mkspecs/features/mac/toolchain.prf @@ -0,0 +1,5 @@ +# Ensure that we process sdk.prf first, as it will update QMAKE_CXX, +# which the default path determination uses. +sdk: load(sdk) + +load(toolchain) diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf new file mode 100644 index 0000000000..70547a3cdf --- /dev/null +++ b/mkspecs/features/toolchain.prf @@ -0,0 +1,47 @@ + +isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build { + # + # Get default include and library paths from compiler + # + gcc { + !equals(QMAKE_HOST.os, Windows) { + cmd_prefix = "LC_ALL=C" + cmd_suffix = "/dev/null" + } else { + cmd_prefix = "set LC_ALL=C&" + cmd_suffix = "NUL" + } + output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines) + add_includes = false + for (line, output) { + line ~= s/^ *// # remove leading spaces + contains(line, "LIBRARY_PATH=.*") { + line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= + paths = $$split(line, $$QMAKE_DIRLIST_SEP) + for (path, paths): \ + QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path) + } else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here: + add_includes = true + } else: contains(line, "End of search.*") { + add_includes = false + } else: $$add_includes { + !contains(line, ".* \\(framework directory\\)"): \ + QMAKE_DEFAULT_INCDIRS += $$clean_path($$line) + } + } + QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS) + } else: msvc { + LIB = $$getenv("LIB") + QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP) + INCLUDE = $$getenv("INCLUDE") + QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP) + } + + unix { + isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include + isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib + } + + !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash) + !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash) +} diff --git a/mkspecs/features/uikit/default_pre.prf b/mkspecs/features/uikit/default_pre.prf index 8b5b3ccfe9..b6974388ce 100644 --- a/mkspecs/features/uikit/default_pre.prf +++ b/mkspecs/features/uikit/default_pre.prf @@ -1,6 +1,4 @@ -load(default_pre) - !isEmpty(QT_VERSION) { qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \ CONFIG += device $${device.sdk} @@ -17,6 +15,8 @@ load(default_pre) } } +load(default_pre) + # Check for supported Xcode versions lessThan(QMAKE_XCODE_VERSION, "4.3"): \ error("This mkspec requires Xcode 4.3 or later") From 4133e76cf4844fee6ab5bbf6527ee6b882e0ad50 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 14 Oct 2016 19:17:05 +0200 Subject: [PATCH 067/196] remove bogus xcode variable reference this is a vestige from an earlier version of the watchos introduction. amends 57378a108. Change-Id: I7d15149b94d12d84e041079b563175bd4e385d50 Reviewed-by: Jake Petroules --- examples/widgets/tools/plugandpaint/app/app.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/widgets/tools/plugandpaint/app/app.pro b/examples/widgets/tools/plugandpaint/app/app.pro index e35203edf2..b391a18eea 100644 --- a/examples/widgets/tools/plugandpaint/app/app.pro +++ b/examples/widgets/tools/plugandpaint/app/app.pro @@ -16,7 +16,7 @@ SOURCES = main.cpp \ LIBS = -L../plugins macx-xcode:qtConfig(simulator_and_device) { - LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_PLATFORM_SUFFIX_SETTING})$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING}) + LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING}) } else { LIBS += -lpnp_basictools if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { From 0cc2a75ad8c96d2c2bc3117c6291d964e215aca2 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 14 Oct 2016 19:21:02 +0200 Subject: [PATCH 068/196] remove bogus qtConfig(simulator_and_device) condition xcode variable expansion should be done exactly when xcode is used. Change-Id: Icea8cb7bf9a51811052789bd66354b1b165127d6 Reviewed-by: Jake Petroules --- examples/widgets/tools/plugandpaint/app/app.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/widgets/tools/plugandpaint/app/app.pro b/examples/widgets/tools/plugandpaint/app/app.pro index b391a18eea..558d359e7d 100644 --- a/examples/widgets/tools/plugandpaint/app/app.pro +++ b/examples/widgets/tools/plugandpaint/app/app.pro @@ -15,7 +15,7 @@ SOURCES = main.cpp \ LIBS = -L../plugins -macx-xcode:qtConfig(simulator_and_device) { +macx-xcode { LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING}) } else { LIBS += -lpnp_basictools From 063997f44ffc1b6650ef6d67832674d5511fdb63 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Fri, 14 Oct 2016 16:16:02 +0200 Subject: [PATCH 069/196] QMenu: don't force platform instance creation on construction There's a conflict between QGtk3Menu and QDbusPlatformMenuBar. The problem is that on Unity the type of the platform menu instance must be different depending on whether the menu is in the global menubar or a standalone context menu. Since QMenu creates a platform menu instance at construction time, it does not yet know whether it will be added into a menubar. QMenuBar checks that the QMenu already has a platform menu instance, and passes it to the platform menubar. As a result, a QGtk3Menu instance is passed to QDbusPlatformMenuBar. Currently, a standalone QMenu does not use the native platform menu instance. Only menus that are added to a QMenuBar do. Therefore we don't need to create the platform instance when QMenu is constructed, but only after it is added to QMenuBar. The platform menu instance creation is implemented in QMenuBarPrivate::getPlatformMenu(), and QMenu::setPlatformMenu() calls syncPlatformMenu() to take care of syncing the QMenu properties and actions to the new platform menu instance. The macOS-specific methods QMenu::toNSMenu() and QMenu::setAsDockMenu() rely on the platform menu instance, and must therefore create it on demand. This is a hot fix for the release blocker, not a long term solution. In the future, if standalone QMenus are made to use native platform menu instances, the instance must be created lazily when the menu is about to be made visible. Task-number: QTBUG-56526 Change-Id: I044933cabb1639406fe47908dfc4b1903af214d1 Reviewed-by: Dmitry Shachnev Reviewed-by: Lars Knoll --- src/widgets/widgets/qmenu.cpp | 9 +++++++- src/widgets/widgets/qmenu_mac.mm | 6 ++++-- src/widgets/widgets/qmenu_p.h | 1 + src/widgets/widgets/qmenubar.cpp | 4 ++++ .../widgets/widgets/qmenubar/tst_qmenubar.cpp | 21 +++++++++++++++++++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index d957dda162..a983dc6fde 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -153,12 +153,19 @@ void QMenuPrivate::init() scroll->scrollFlags = QMenuPrivate::QMenuScroller::ScrollNone; } - setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu()); sloppyState.initialize(q); delayState.initialize(q); mousePopupDelay = q->style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, q); } +QPlatformMenu *QMenuPrivate::createPlatformMenu() +{ + Q_Q(QMenu); + if (platformMenu.isNull()) + q->setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu()); + return platformMenu.data(); +} + void QMenuPrivate::setPlatformMenu(QPlatformMenu *menu) { Q_Q(QMenu); diff --git a/src/widgets/widgets/qmenu_mac.mm b/src/widgets/widgets/qmenu_mac.mm index fef1eb2cf4..f9f3ad08dc 100644 --- a/src/widgets/widgets/qmenu_mac.mm +++ b/src/widgets/widgets/qmenu_mac.mm @@ -80,11 +80,12 @@ inline QPlatformNativeInterface::NativeResourceForIntegrationFunction resolvePla */ NSMenu *QMenu::toNSMenu() { + Q_D(QMenu); // Call into the cocoa platform plugin: qMenuToNSMenu(platformMenu()) QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("qmenutonsmenu"); if (function) { typedef void* (*QMenuToNSMenuFunction)(QPlatformMenu *platformMenu); - return reinterpret_cast(reinterpret_cast(function)(platformMenu())); + return reinterpret_cast(reinterpret_cast(function)(d->createPlatformMenu())); } return nil; } @@ -98,11 +99,12 @@ NSMenu *QMenu::toNSMenu() */ void QMenu::setAsDockMenu() { + Q_D(QMenu); // Call into the cocoa platform plugin: setDockMenu(platformMenu()) QPlatformNativeInterface::NativeResourceForIntegrationFunction function = resolvePlatformFunction("setdockmenu"); if (function) { typedef void (*SetDockMenuFunction)(QPlatformMenu *platformMenu); - reinterpret_cast(function)(platformMenu()); + reinterpret_cast(function)(d->createPlatformMenu()); } } diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h index 2b0dc482da..3166e6f6cd 100644 --- a/src/widgets/widgets/qmenu_p.h +++ b/src/widgets/widgets/qmenu_p.h @@ -286,6 +286,7 @@ public: delete platformMenu.data(); } void init(); + QPlatformMenu *createPlatformMenu(); void setPlatformMenu(QPlatformMenu *menu); void syncPlatformMenu(); #ifdef Q_OS_OSX diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index a77c0f9753..63fe09f77e 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -1192,6 +1192,10 @@ QPlatformMenu *QMenuBarPrivate::getPlatformMenu(QAction *action) QPlatformMenu *platformMenu = action->menu()->platformMenu(); if (!platformMenu && platformMenuBar) { platformMenu = platformMenuBar->createMenu(); + // QPlatformMenuBar::createMenu() was introduced in Qt 5.7. Not all third party + // platform themes are using it, so fallback to QPlatformTheme::createPlatformMenu(). + if (!platformMenu) + platformMenu = QGuiApplicationPrivate::platformTheme()->createPlatformMenu(); if (platformMenu) action->menu()->setPlatformMenu(platformMenu); } diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index ca58dc1247..475ce2a317 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -131,6 +131,8 @@ private slots: void cornerWidgets(); void taskQTBUG53205_crashReparentNested(); + void platformMenu(); + protected slots: void onSimpleActivated( QAction*); void onComplexActionTriggered(); @@ -1487,6 +1489,25 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested() testMenus.actions[0]->trigger(); } +// QTBUG-56526 +void tst_QMenuBar::platformMenu() +{ + QMenuBar menuBar; + QPlatformMenuBar *platformMenuBar = menuBar.platformMenuBar(); + if (!platformMenuBar) + QSKIP("No platform menubar implementation available on this platform."); + + // QMenu must not create a platform menu instance at creation time, because + // on Unity the type of the platform menu instance must be different (QGtk3Menu + // vs. QDbusPlatformMenu) depending on whether the menu is in the global menubar + // or a standalone context menu. + QMenu *menu = new QMenu(&menuBar); + QVERIFY(!menu->platformMenu()); + + menuBar.addMenu(menu); + QVERIFY(menu->platformMenu()); +} + void tst_QMenuBar::slotForTaskQTBUG53205() { QWidget *parent = taskQTBUG53205MenuBar->parentWidget(); From d71bb504a635b51a85f3ccd919e0d77f869e50a8 Mon Sep 17 00:00:00 2001 From: hjk Date: Sun, 16 Oct 2016 13:26:30 +0200 Subject: [PATCH 070/196] Fix QtGui compilation without OpenGL Change-Id: I2a9f8bde7d2ba672e4e664ff731a3272a6def516 Reviewed-by: Laszlo Agocs --- src/gui/kernel/qsurfaceformat.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qsurfaceformat.cpp b/src/gui/kernel/qsurfaceformat.cpp index 18fde5716b..109ba8e610 100644 --- a/src/gui/kernel/qsurfaceformat.cpp +++ b/src/gui/kernel/qsurfaceformat.cpp @@ -759,11 +759,13 @@ Q_GLOBAL_STATIC(QSurfaceFormat, qt_default_surface_format) */ void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format) { +#ifndef QT_NO_OPENGL QOpenGLContext *globalContext = QOpenGLContext::globalShareContext(); if (globalContext && globalContext->isValid()) { qWarning("Warning: Setting a new default format with a different version or profile after " "the global shared context is created may cause issues with context sharing."); } +#endif *qt_default_surface_format() = format; } From 9d696af6cd45ee95c155829999b8184229f9bc72 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 11 Oct 2016 11:24:37 +0200 Subject: [PATCH 071/196] Disable WindowsContextHelpButtonHint for Dialogs that are not QWidget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not set WindowsContextHelpButtonHint directly in Windows QPA plugin, but instead rely on logic in QWidgetPrivate::adjustFlags for widgets. If WindowsContextHelpButtonHint is set, a '?' button is shown in the windows decoration. If pressed, an EnterWhatsThisMode event is generated that is consumed in QApplication that then calls into the QWhatsThis singleton, which changes the mouse cursor, and informs the top-level QWidgets about the state change etc. For QGuiApplications though the event is not generated, which makes the button useless by default. In addition, QWhatsThis only works with top level QWidgets, not e.g. QQuickWindows. So for apps using QApplication and QtQuick.Controls this means that the "What's this mode" is never exited. Given that the paradigm is somewhat outdated on the desktop it is unlikely that Qt Quick Controls will implement support for What's this. Anyhow, QWidgetPrivate::adjustFlags sets the hint for Qt::Dialogs, too, so there's no need to set it the Windows QPA plugin. [ChangeLog][Windows] 'What's this' button is now shown by default only for QWidget dialogs. Task-number: QTBUG-56239 Change-Id: I1ea3e92ade723b5865c8f2e19674413433658942 Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/windows/qwindowswindow.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 7289f8de6d..0ebed59a1d 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -424,11 +424,9 @@ static inline void fixTopLevelWindowFlags(Qt::WindowFlags &flags) |Qt::WindowMaximizeButtonHint|Qt::WindowCloseButtonHint; break; case Qt::Dialog: - flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint; - break; case Qt::Tool: - flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint; - break; + flags |= Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint; + break; default: break; } From 9a3073a98d43faeb39827bba36040831215b04f0 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 10 Oct 2016 17:51:33 +0200 Subject: [PATCH 072/196] don't strip off plugin subtypes this code is meant to strip off the file name if provided (as the accessibility plugin in qtdeclarative does), but clearly overshot the mark by stripping the subtypes (as needed by qtmultimedia, and soon qtbase as well). use a stricter regexp which matches only names with an extension, which is a Good Enough (TM) approximation. Change-Id: I63afe9c7b1b0ebf4da530dcf558e9c84ae3c85ec Reviewed-by: Jake Petroules --- mkspecs/features/qt_module_pris.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 4dd9e25f9f..95b4b586a8 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -70,7 +70,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri else: \ module_config = !isEmpty(MODULE_PLUGIN_TYPES): \ - module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /.*$, )" + module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /[^.]+\\.[^.]+$, )" else: \ module_plugtypes = !isEmpty(MODULE_MASTER_HEADER): \ From d715667b206768677c18cd575ccd4f60c41a1091 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 10 Oct 2016 17:59:19 +0200 Subject: [PATCH 073/196] normalize name of plugin default linkage overrides QTPLUGIN. is better used with valid variable names, which is not the case when the plugin type contains slashes (plugin subtypes) or dashes (just so). normalize these chars to underscores. Change-Id: Icc93d952b93fef342e2fc93f20e9c5dd010dd734 Reviewed-by: Jake Petroules --- mkspecs/features/qt.prf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index 965b6cefc3..ddf99da303 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -290,7 +290,8 @@ contains(TEMPLATE, .*app) { autoplugs = for (qtmod, qt_module_deps) { for (ptype, QT.$${qtmod}.plugin_types) { - isEmpty(QTPLUGIN.$$ptype) { + nptype = $$replace(ptype, [-/], _) + isEmpty(QTPLUGIN.$$nptype) { for (plug, QT_PLUGINS) { equals(QT_PLUGIN.$${plug}.TYPE, $$ptype) { for (dep, QT_PLUGIN.$${plug}.EXTENDS) { @@ -303,7 +304,7 @@ contains(TEMPLATE, .*app) { } } } else { - plug = $$eval(QTPLUGIN.$$ptype) + plug = $$eval(QTPLUGIN.$$nptype) !equals(plug, -): \ autoplugs += $$plug } From 4ebe8cefde2ee70753d710b4355d24e237d93366 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 10 Oct 2016 19:41:40 +0200 Subject: [PATCH 074/196] make also configure tests not see %LIB% and %INCLUDE% under mingw amends 03ae6ad8e. Change-Id: I1adfb8d5de59b26e37bd35c5e8e4410d084d8d93 Reviewed-by: Jake Petroules --- config.tests/.qmake.conf | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/config.tests/.qmake.conf b/config.tests/.qmake.conf index 71e6817656..e8f6f09e9d 100644 --- a/config.tests/.qmake.conf +++ b/config.tests/.qmake.conf @@ -1,6 +1 @@ -mingw { - TMPPATH = $$(INCLUDE) - QMAKE_INCDIR_POST += $$split(TMPPATH, $$QMAKE_DIRLIST_SEP) - TMPPATH = $$(LIB) - QMAKE_LIBDIR_POST += $$split(TMPPATH, $$QMAKE_DIRLIST_SEP) -} +# This file exists only to detach the tests from the surroundings. From ce2ae6ebd8cfebf9edbb0b5653e80de029669548 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 17 Oct 2016 13:35:45 +0200 Subject: [PATCH 075/196] Windows: Fix rendering of MingLiU fonts at some scales At certain sizes and scales, GDI will clip away the bottom line of pixels when rendering the MingLiU fonts. Since DirectWrite renders it correctly, we force the use of DirectWrite in this case. This also requires supporting classic GDI rendering in the DirectWrite engine, to make sure the rendering still looks correct. Note that this does not cover the corner case where the font is loaded directly from data with QRawFont. [ChangeLog][QtGui][Windows] Fixed rendering error when using the MingLiU fonts at certain combinations of pixel size and scale. Task-number: QTBUG-49346 Change-Id: Ie026c0d5932717858c4536dae077013eb6a1eafc Reviewed-by: Konstantin Ritt Reviewed-by: Simon Hausmann --- .../windows/qwindowsfontdatabase.cpp | 12 +++++++++-- .../windows/qwindowsfontenginedirectwrite.cpp | 20 +++++++++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index 4f022141cf..1630b80306 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -110,13 +110,21 @@ static void createDirectWriteFactory(IDWriteFactory **factory) *factory = static_cast(result); } -static inline bool useDirectWrite(QFont::HintingPreference hintingPreference, bool isColorFont = false) +static inline bool useDirectWrite(QFont::HintingPreference hintingPreference, + const QString &familyName = QString(), + bool isColorFont = false) { const unsigned options = QWindowsIntegration::instance()->options(); if (Q_UNLIKELY(options & QWindowsIntegration::DontUseDirectWriteFonts)) return false; if (isColorFont) return (options & QWindowsIntegration::DontUseColorFonts) == 0; + + // At some scales, GDI will misrender the MingLiU font, so we force use of + // DirectWrite to work around the issue. + if (Q_UNLIKELY(familyName.startsWith(QLatin1String("MingLiU")))) + return true; + return hintingPreference == QFont::PreferNoHinting || hintingPreference == QFont::PreferVerticalHinting || (QHighDpiScaling::isActive() && hintingPreference == QFont::PreferDefaultHinting); @@ -1875,7 +1883,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, #endif const QFont::HintingPreference hintingPreference = static_cast(request.hintingPreference); - const bool useDw = useDirectWrite(hintingPreference, isColorFont); + const bool useDw = useDirectWrite(hintingPreference, fam, isColorFont); qCDebug(lcQpaFonts) << __FUNCTION__ << request.family << request.pointSize << "pt" << "hintingPreference=" << hintingPreference << "color=" << isColorFont << dpi << "dpi" << "useDirectWrite=" << useDw; diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp index 66cc08f9fa..334e9cb8b9 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp @@ -185,6 +185,18 @@ namespace { } +static DWRITE_RENDERING_MODE hintingPreferenceToRenderingMode(QFont::HintingPreference hintingPreference) +{ + switch (hintingPreference) { + case QFont::PreferNoHinting: + return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC; + case QFont::PreferVerticalHinting: + return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL; + default: + return DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC; + } +} + /*! \class QWindowsFontEngineDirectWrite \brief Windows font engine using Direct Write. @@ -661,9 +673,7 @@ QImage QWindowsFontEngineDirectWrite::imageForGlyph(glyph_t t, transform.m22 = xform.m22(); DWRITE_RENDERING_MODE renderMode = - fontDef.hintingPreference == QFont::PreferNoHinting - ? DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC - : DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL; + hintingPreferenceToRenderingMode(QFont::HintingPreference(fontDef.hintingPreference)); IDWriteGlyphRunAnalysis *glyphAnalysis = NULL; HRESULT hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis( @@ -950,9 +960,7 @@ glyph_metrics_t QWindowsFontEngineDirectWrite::alphaMapBoundingBox(glyph_t glyph transform.m22 = matrix.m22(); DWRITE_RENDERING_MODE renderMode = - fontDef.hintingPreference == QFont::PreferNoHinting - ? DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC - : DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL; + hintingPreferenceToRenderingMode(QFont::HintingPreference(fontDef.hintingPreference)); IDWriteGlyphRunAnalysis *glyphAnalysis = NULL; HRESULT hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis( From a81b39934567e46addb9cb822fbaf71e6ffa9ee4 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 29 Aug 2016 10:06:49 +0200 Subject: [PATCH 076/196] Compile uic and qdbusxml2cpp more often against libbootstrap Otherwise, those tools do not compile in configurations which exclude features that these tools require (e.g., -no-feature-textcodec). Change-Id: I9f27257221755a35a48ae2efa9df63f1a319118e Reviewed-by: Lars Knoll Reviewed-by: Oswald Buddenhagen --- src/src.pro | 9 ++++++--- src/tools/qdbusxml2cpp/qdbusxml2cpp.pro | 2 ++ src/tools/uic/uic.pro | 2 ++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/src.pro b/src/src.pro index 541053eba5..87391eab5b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -4,6 +4,9 @@ QT_FOR_CONFIG += gui-private include($$OUT_PWD/corelib/qtcore-config.pri) include($$OUT_PWD/gui/qtgui-config.pri) +force_bootstrap|!qtConfig(commandlineparser): \ + CONFIG += force_dbus_bootstrap + src_qtzlib.file = $$PWD/corelib/qtzlib.pro src_qtzlib.target = sub-zlib @@ -34,7 +37,7 @@ src_tools_bootstrap_dbus.depends = src_tools_bootstrap src_tools_qdbusxml2cpp.subdir = tools/qdbusxml2cpp src_tools_qdbusxml2cpp.target = sub-qdbusxml2cpp -force_bootstrap: src_tools_qdbusxml2cpp.depends = src_tools_bootstrap_dbus +force_dbus_bootstrap: src_tools_qdbusxml2cpp.depends = src_tools_bootstrap_dbus else: src_tools_qdbusxml2cpp.depends = src_dbus src_tools_qdbuscpp2xml.subdir = tools/qdbuscpp2xml @@ -57,7 +60,7 @@ src_xml.depends = src_corelib src_dbus.subdir = $$PWD/dbus src_dbus.target = sub-dbus src_dbus.depends = src_corelib -force_bootstrap: src_dbus.depends += src_tools_bootstrap_dbus # avoid syncqt race +force_dbus_bootstrap: src_dbus.depends += src_tools_bootstrap_dbus # avoid syncqt race src_concurrent.subdir = $$PWD/concurrent src_concurrent.target = sub-concurrent @@ -143,7 +146,7 @@ TOOLS = src_tools_moc src_tools_rcc src_tools_qlalr win32:SUBDIRS += src_winmain SUBDIRS += src_network src_sql src_xml src_testlib qtConfig(dbus) { - force_bootstrap|qtConfig(private_tests): \ + force_dbus_bootstrap|qtConfig(private_tests): \ SUBDIRS += src_tools_bootstrap_dbus SUBDIRS += src_dbus src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml TOOLS += src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro index cb14db5fef..d9ee5de0be 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.pro @@ -1,4 +1,6 @@ option(host_build) +!force_bootstrap:!qtConfig(commandlineparser): \ + CONFIG += force_bootstrap QT = core-private force_bootstrap: QT += bootstrap_dbus-private else: QT += dbus-private diff --git a/src/tools/uic/uic.pro b/src/tools/uic/uic.pro index 8008dde07a..9afb2d847f 100644 --- a/src/tools/uic/uic.pro +++ b/src/tools/uic/uic.pro @@ -1,4 +1,6 @@ option(host_build) +!force_bootstrap:if(!qtConfig(commandlineparser)|!qtConfig(textcodec)): \ + CONFIG += force_bootstrap DEFINES += QT_UIC QT_NO_CAST_FROM_ASCII QT_NO_FOREACH From 14fed674ae54bec03006bef0430a1e72a5cabc9d Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 11 Oct 2016 18:42:10 +0200 Subject: [PATCH 077/196] propagate the correct library variable to the private module pri amends 310bf3f57. Change-Id: I6706e9435b7af558a3639d5824330d57430bb057 Reviewed-by: Jake Petroules Reviewed-by: Lars Knoll --- mkspecs/features/qt_module_pris.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 640281b9a9..b4a047fe17 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -57,7 +57,7 @@ defineReplace(qtExportLibsForModule) { NAME = $$upper($$lib) vars = \ QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \ - QMAKE_CFLAGS_$$NAME QMAKE_INCDIR_$$NAME QMAKE_$${NAME}_VERSION \ + QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME QMAKE_$${NAME}_VERSION \ QMAKE_$${NAME}_VERSION_MAJOR QMAKE_$${NAME}_VERSION_MINOR QMAKE_$${NAME}_VERSION_PATCH for (var, vars) { !isEmpty($$var): \ From 7c1d640c0c6970342693ce04a60d9b1c84948b1e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 11 Oct 2016 18:09:07 +0200 Subject: [PATCH 078/196] stop exporting the library versions all users of this functionality have been removed, and not emitting the version info saves quite some noise from the generated files. the reason why the users have been removed is that it was unreliable in the first place: if a dependency is found without pkg-config, no version information would be available. the extraction of the version via pkg-config itself is kept in place, as configure tests could be potentially optimized by utilizing it. this reverts much of commit 48b4e0bf6f. Change-Id: I01917f3b2a56b747d7cc54955141d20d23d0990a Reviewed-by: Jake Petroules Reviewed-by: Lars Knoll --- mkspecs/features/qt_configure.prf | 21 --------------------- mkspecs/features/qt_module_pris.prf | 3 +-- src/corelib/global/qglobal_p.h | 5 ----- 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 8867785335..588a8ee0f5 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -557,18 +557,6 @@ defineReplace(qtConfLibraryArgs) { return($$qmake_args) } -defineReplace(qtConfGetHexVersion) { - version = $$split(1, '.') - number = - for(i, 0..2) { - n = $$member(version, $$i) - isEmpty(n): n = 0 - number += $$format_number($$n, obase=16 zeropad width=2) - } - number = "0x$$join(number)" - return($$number) -} - defineTest(qtConfExportLibrary) { isEmpty(2): return() !$$qtConfEvaluate($$eval($${1}.export)): return() @@ -578,7 +566,6 @@ defineTest(qtConfExportLibrary) { eval(libs = $$eval($${1}.libs)) eval(cflags = $$eval($${1}.cflags)) eval(includes = $$eval($${1}.includedir)) - version = $$eval($${1}.version) # Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff. defines = @@ -606,14 +593,6 @@ defineTest(qtConfExportLibrary) { $$eval($${1}.builds.$${b})) !isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines) !isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes) - !isEmpty(version) { - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION, $$version) - qtConfOutputSetDefine("privateHeader", "QT_LIBRARY_VERSION_$${2}", $$qtConfGetHexVersion($$version)) - version = $$split(version, '.') - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_MAJOR, $$member(version, 0)) - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_MINOR, $$member(version, 1)) - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_PATCH, $$member(version, 2)) - } !isEmpty($${currentConfig}.module): \ qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$2) } diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index b4a047fe17..30f7be640d 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -57,8 +57,7 @@ defineReplace(qtExportLibsForModule) { NAME = $$upper($$lib) vars = \ QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \ - QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME QMAKE_$${NAME}_VERSION \ - QMAKE_$${NAME}_VERSION_MAJOR QMAKE_$${NAME}_VERSION_MINOR QMAKE_$${NAME}_VERSION_PATCH + QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME for (var, vars) { !isEmpty($$var): \ result += "$$var = $$val_escape($$var)" diff --git a/src/corelib/global/qglobal_p.h b/src/corelib/global/qglobal_p.h index c329357f46..b8f9e5fbf7 100644 --- a/src/corelib/global/qglobal_p.h +++ b/src/corelib/global/qglobal_p.h @@ -53,10 +53,5 @@ #include #endif -#define QT_LIBRARY_VERSION(lib) QT_LIBRARY_VERSION_##lib -#define QT_LIBRARY_VERSION_MAJOR(lib) (QT_LIBRARY_VERSION_##lib >> 16) -#define QT_LIBRARY_VERSION_MINOR(lib) ((QT_LIBRARY_VERSION_##lib >> 8) & 0xff) -#define QT_LIBRARY_VERSION_PATCH(lib) (QT_LIBRARY_VERSION_##lib & 0xff) - #endif // QGLOBAL_P_H From 3a1245fdace1b008018dfb6b6334d5ebaec81b5e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 10 Oct 2016 20:26:52 +0200 Subject: [PATCH 079/196] slightly improve logging of library probing Change-Id: Idd137251c6db5effd3571591d837d49e8fb9525d Reviewed-by: Jake Petroules Reviewed-by: Lars Knoll --- mkspecs/features/qt_configure.prf | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 588a8ee0f5..e8fa0c6f76 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -615,7 +615,6 @@ defineTest(qtConfHandleLibrary) { result = false for (s, $${lpfx}.sources._KEYS_) { - qtLog("Trying source $$s of library $${1}.") spfx = $${lpfx}.sources.$${s} t = $$eval($${spfx}.type) @@ -623,13 +622,15 @@ defineTest(qtConfHandleLibrary) { !defined($$call, test): \ error("Library $${1} source $${s} has unknown type '$$t'") + qtLog("Trying source $$s (type $$t) of library $${1} ...") + !$$qtConfEvaluate($$eval($${spfx}.condition)) { - qtLog("Source $$s of library $$1 failed condition.") + qtLog(" => source failed condition.") next() } !$${call}($$spfx) { - qtLog("Source $$s of library $$1 produced no result.") + qtLog(" => source produced no result.") next() } @@ -638,11 +639,13 @@ defineTest(qtConfHandleLibrary) { $${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) $${lpfx}.host = $$eval($${spfx}.host) !qtConfTest_compile($$lpfx) { - qtLog("Source $$s of library $$1 failed verification.") + qtLog(" => source failed verification.") next() } } + qtLog(" => source accepted.") + $${lpfx}.cache += source for (v, $$list(libs includes cflags version export)): \ $${lpfx}.cache += sources.$${s}.$${v} From 983d9e0c1a93a8f4350fa5c7f1ec4809e15e0d6e Mon Sep 17 00:00:00 2001 From: hjk Date: Sun, 16 Oct 2016 12:35:44 +0200 Subject: [PATCH 080/196] Fix DBus compilation Don't use C++11 nullptr in 5.6. Change-Id: I57e9595b2e1cede995eed09878bf02ee30482659 Reviewed-by: Marc Mutz Reviewed-by: Alberto Mardegan --- src/dbus/qdbusserver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp index 39d08b4e63..0833134bb3 100644 --- a/src/dbus/qdbusserver.cpp +++ b/src/dbus/qdbusserver.cpp @@ -105,7 +105,7 @@ QDBusServer::~QDBusServer() } d->serverConnectionNames.clear(); } - d->serverObject = nullptr; + d->serverObject = Q_NULLPTR; d->ref.store(0); d->deleteLater(); } From cbb2ba23e203374132e4b134b1c8f1a3626d2378 Mon Sep 17 00:00:00 2001 From: Frederik Schwarzer Date: Mon, 17 Oct 2016 18:56:20 +0200 Subject: [PATCH 081/196] Qt 5.7 requires C++11 so this hint is not needed anymore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7e267c69ccf3835e4d69b4c612f1baaf40d8be39 Reviewed-by: Frederik Gladhorn Reviewed-by: Topi Reiniö --- src/corelib/doc/src/containers.qdoc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/corelib/doc/src/containers.qdoc b/src/corelib/doc/src/containers.qdoc index 0b98397a68..a1c32bb007 100644 --- a/src/corelib/doc/src/containers.qdoc +++ b/src/corelib/doc/src/containers.qdoc @@ -158,11 +158,8 @@ \endtable Containers can be nested. For example, it is perfectly possible - to use a QMap >, where the key type is - QString and the value type QList. The only pitfall is that - you must insert a space between the closing angle brackets (>); - otherwise the C++ compiler will misinterpret the two >'s as a - right-shift operator (>>) and report a syntax error. + to use a QMap>, where the key type is + QString and the value type QList. The containers are defined in individual header files with the same name as the container (e.g., \c ). For From ed5d04fcfc4e00ce92b04d442e1e69cebb01bc9c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 14 Oct 2016 10:40:56 +0200 Subject: [PATCH 082/196] QOrderedMutexLocker: fix UB (pointer comparison with <) in static relock() Comparing pointers that do not point into the same array using operator< is UB. You need to use std::less<>. The QOrderedMutexLocker ctor already used std::less to compare pointers, but the static relock() function was not fixed. Amends 50073521649e3818d87920751ab95acd2c2dfd15. Change-Id: I584d382391dd5a2af75020a4e77f3e42ee5d5708 Reviewed-by: Giuseppe D'Angelo --- src/corelib/thread/qorderedmutexlocker_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h index 54887342e7..6402be92bf 100644 --- a/src/corelib/thread/qorderedmutexlocker_p.h +++ b/src/corelib/thread/qorderedmutexlocker_p.h @@ -93,7 +93,7 @@ public: // mtx1 is already locked, mtx2 not... do we need to unlock and relock? if (mtx1 == mtx2) return false; - if (mtx1 < mtx2) { + if (std::less()(mtx1, mtx2)) { mtx2->lock(); return true; } From 158231e073eb2f94e7a6dfbf071dc2f34283321a Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 15 Jul 2016 15:47:29 +0200 Subject: [PATCH 083/196] QCommonStyle::standardIcon: Add 64x64 Qt logo pixmap for SP_TitleBarMenuButton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For SP_TitleBarMenuButton, the style defaulted to standardPixmap() would return a 16x16 XPM encoded pixmap from qcommonstylepixmaps_p.h. This resulted in a too-small menu icon when displaying QMdiSubWindow with the default icon set on a High DPI screen with Qt::AA_DisableHighDpiScaling set. Add a larger icon from resources. Change-Id: If88c606a31ee9499f520089365f685ec75e0ddad Reviewed-by: Morten Johan Sørvig --- src/widgets/styles/qcommonstyle.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 6bf9d20b47..6d83dea4ab 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -5194,6 +5194,8 @@ static QPixmap cachedPixmapFromXPM(const char * const *xpm) return result; } +static inline QPixmap titleBarMenuCachedPixmapFromXPM() { return cachedPixmapFromXPM(qt_menu_xpm); } + #ifndef QT_NO_IMAGEFORMAT_PNG static inline QString clearText16IconPath() { @@ -5538,7 +5540,7 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti #ifndef QT_NO_IMAGEFORMAT_XPM switch (sp) { case SP_TitleBarMenuButton: - return cachedPixmapFromXPM(qt_menu_xpm); + return titleBarMenuCachedPixmapFromXPM(); case SP_TitleBarShadeButton: return cachedPixmapFromXPM(qt_shade_xpm); case SP_TitleBarUnshadeButton: @@ -6080,6 +6082,12 @@ QIcon QCommonStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption case SP_MediaVolumeMuted: icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png"), QSize(16, 16)); break; + case SP_TitleBarMenuButton: +# ifndef QT_NO_IMAGEFORMAT_XPM + icon.addPixmap(titleBarMenuCachedPixmapFromXPM()); +# endif + icon.addFile(QLatin1String(":/qt-project.org/qmessagebox/images/qtlogo-64.png")); + break; #endif // QT_NO_IMAGEFORMAT_PNG default: icon.addPixmap(proxy()->standardPixmap(standardIcon, option, widget)); From 4cb614c7abdaa2c5e2d0a75201d51aae01e6f8c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 3 Oct 2016 18:41:30 +0200 Subject: [PATCH 084/196] Apple OS: Handle QSetting strings with embedded zero-bytes Saving strings with embedded zero-bytes (\0) as CFStrings would sometimes fail, and only write the part of the string leading up to the first zero-byte, instead of all the way to the final zero-terminator. This bug was revealed by the code-path that falls back to storing e.g. QTime as strings, via the helper method QSettingsPrivate::variantToString(). We now use the same approach as on platforms such as Windows and WinRT, where the string produced by variantToString() is checked for null-bytes, and if so, stored using a binary representation instead of as a string. For our case that means we fall back to CFData when detecting the null-byte. To separate strings from regular byte arrays, new logic has been added to variantToString() that wraps the null-byte strings in @String(). That way we can implement a fast-path when converting back from CFData, that doesn't go via the slow and lossy conversion via UTF8, and the resulting QVariant will be of type QVariant::ByteArray. The reason for using UTF-8 as the binary representation of the string is that in the case of storing a QByteArray("@foo") we need to still be able to convert it back to the same byte array, which doesn't work if the on-disk format is UTF-16. Task-number: QTBUG-56124 Change-Id: Iab2f71cf96cf3225de48dc5e71870d74b6dde1e8 Cherry-picked: 764f5bf48cc87f4c72550b853ab93b815454cd48 Reviewed-by: Thiago Macieira --- src/corelib/io/qsettings.cpp | 6 ++- src/corelib/io/qsettings_mac.cpp | 20 +++++++- src/corelib/io/qsettings_win.cpp | 13 +---- src/corelib/io/qsettings_winrt.cpp | 4 +- .../corelib/io/qsettings/tst_qsettings.cpp | 50 ++++++++++++++++++- 5 files changed, 76 insertions(+), 17 deletions(-) diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 9e0e6c2769..d1ae14490c 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -413,7 +413,9 @@ QString QSettingsPrivate::variantToString(const QVariant &v) case QVariant::Double: case QVariant::KeySequence: { result = v.toString(); - if (result.startsWith(QLatin1Char('@'))) + if (result.contains(QChar::Null)) + result = QLatin1String("@String(") + result + QLatin1Char(')'); + else if (result.startsWith(QLatin1Char('@'))) result.prepend(QLatin1Char('@')); break; } @@ -489,6 +491,8 @@ QVariant QSettingsPrivate::stringToVariant(const QString &s) if (s.endsWith(QLatin1Char(')'))) { if (s.startsWith(QLatin1String("@ByteArray("))) { return QVariant(s.midRef(11, s.size() - 12).toLatin1()); + } else if (s.startsWith(QLatin1String("@String("))) { + return QVariant(s.midRef(8, s.size() - 9).toString()); } else if (s.startsWith(QLatin1String("@Variant(")) || s.startsWith(QLatin1String("@DateTime("))) { #ifndef QT_NO_DATASTREAM diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp index e0b317b4c2..0b039f73dc 100644 --- a/src/corelib/io/qsettings_mac.cpp +++ b/src/corelib/io/qsettings_mac.cpp @@ -208,7 +208,14 @@ static QCFType macValue(const QVariant &value) case QVariant::String: string_case: default: - result = QCFString::toCFStringRef(QSettingsPrivate::variantToString(value)); + QString string = QSettingsPrivate::variantToString(value); + if (string.contains(QChar::Null)) { + QByteArray ba = string.toUtf8(); + result = CFDataCreate(kCFAllocatorDefault, reinterpret_cast(ba.data()), + CFIndex(ba.size())); + } else { + result = QCFString::toCFStringRef(string); + } } return result; } @@ -261,8 +268,17 @@ static QVariant qtValue(CFPropertyListRef cfvalue) return (bool)CFBooleanGetValue(static_cast(cfvalue)); } else if (typeId == CFDataGetTypeID()) { CFDataRef cfdata = static_cast(cfvalue); - return QByteArray(reinterpret_cast(CFDataGetBytePtr(cfdata)), + QByteArray byteArray = QByteArray(reinterpret_cast(CFDataGetBytePtr(cfdata)), CFDataGetLength(cfdata)); + + // Fast-path for QByteArray, so that we don't have to go + // though the expensive and lossy conversion via UTF-8. + if (!byteArray.startsWith('@')) + return byteArray; + + const QString str = QString::fromUtf8(byteArray.constData(), byteArray.size()); + return QSettingsPrivate::stringToVariant(str); + } else if (typeId == CFDictionaryGetTypeID()) { CFDictionaryRef cfdict = static_cast(cfvalue); CFTypeID arrayTypeId = CFArrayGetTypeID(); diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index da0c4c3c14..f6ad182c37 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -649,15 +649,6 @@ void QWinSettingsPrivate::remove(const QString &uKey) } } -static bool stringContainsNullChar(const QString &s) -{ - for (int i = 0; i < s.length(); ++i) { - if (s.at(i).unicode() == 0) - return true; - } - return false; -} - void QWinSettingsPrivate::set(const QString &uKey, const QVariant &value) { if (writeHandle() == 0) { @@ -686,7 +677,7 @@ void QWinSettingsPrivate::set(const QString &uKey, const QVariant &value) QStringList l = variantListToStringList(value.toList()); QStringList::const_iterator it = l.constBegin(); for (; it != l.constEnd(); ++it) { - if ((*it).length() == 0 || stringContainsNullChar(*it)) { + if ((*it).length() == 0 || it->contains(QChar::Null)) { type = REG_BINARY; break; } @@ -730,7 +721,7 @@ void QWinSettingsPrivate::set(const QString &uKey, const QVariant &value) // If the string does not contain '\0', we can use REG_SZ, the native registry // string type. Otherwise we use REG_BINARY. QString s = variantToString(value); - type = stringContainsNullChar(s) ? REG_BINARY : REG_SZ; + type = s.contains(QChar::Null) ? REG_BINARY : REG_SZ; if (type == REG_BINARY) { regValueBuff = QByteArray((const char*)s.utf16(), s.length() * 2); } else { diff --git a/src/corelib/io/qsettings_winrt.cpp b/src/corelib/io/qsettings_winrt.cpp index 85ef64cbd4..5ab1133ef3 100644 --- a/src/corelib/io/qsettings_winrt.cpp +++ b/src/corelib/io/qsettings_winrt.cpp @@ -396,7 +396,7 @@ void QWinRTSettingsPrivate::set(const QString &uKey, const QVariant &value) QStringList::const_iterator it = l.constBegin(); bool containsNull = false; for (; it != l.constEnd(); ++it) { - if ((*it).length() == 0 || it->indexOf(QChar::Null) != -1) { + if ((*it).length() == 0 || it->contains(QChar::Null)) { // We can only store as binary containsNull = true; break; @@ -439,7 +439,7 @@ void QWinRTSettingsPrivate::set(const QString &uKey, const QVariant &value) break; default: { const QString s = variantToString(value); - if (s.indexOf(QChar::Null) != -1) { + if (s.contains(QChar::Null)) { hr = valueStatics->CreateUInt8Array(s.length() * 2, (BYTE*) s.utf16(), &val); } else { HStringReference ref((const wchar_t*)s.utf16(), s.size()); diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 19155cc3ad..f489b9b1d3 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -162,6 +162,8 @@ private slots: void testByteArray(); void iniCodec(); void bom(); + void embeddedZeroByte_data(); + void embeddedZeroByte(); private: void cleanupTestFiles(); @@ -655,7 +657,6 @@ void tst_QSettings::testByteArray_data() #ifndef QT_NO_COMPRESS QTest::newRow("compressed") << qCompress(bytes); #endif - QTest::newRow("with \\0") << bytes + '\0' + bytes; } void tst_QSettings::testByteArray() @@ -706,6 +707,53 @@ void tst_QSettings::bom() QVERIFY(allkeys.contains("section2/foo2")); } +void tst_QSettings::embeddedZeroByte_data() +{ + QTest::addColumn("value"); + + QByteArray bytes("hello\0world", 11); + + QTest::newRow("bytearray\\0") << QVariant(bytes); + QTest::newRow("string\\0") << QVariant(QString::fromLatin1(bytes.data(), bytes.size())); + + bytes = QByteArray("@String("); + + QTest::newRow("@bytearray") << QVariant(bytes); + QTest::newRow("@string") << QVariant(QString(bytes)); + + bytes = QByteArray("@String(\0test", 13); + + QTest::newRow("@bytearray\\0") << QVariant(bytes); + QTest::newRow("@string\\0") << QVariant(QString::fromLatin1(bytes.data(), bytes.size())); +} + +void tst_QSettings::embeddedZeroByte() +{ + QFETCH(QVariant, value); + { + QSettings settings("QtProject", "tst_qsettings"); + settings.setValue(QTest::currentDataTag(), value); + } + { + QSettings settings("QtProject", "tst_qsettings"); + QVariant outValue = settings.value(QTest::currentDataTag()); + + switch (value.type()) { + case QVariant::ByteArray: + QCOMPARE(outValue.toByteArray(), value.toByteArray()); + break; + case QVariant::String: + QCOMPARE(outValue.toString(), value.toString()); + break; + default: + Q_UNREACHABLE(); + } + + if (value.toByteArray().contains(QChar::Null)) + QVERIFY(outValue.toByteArray().contains(QChar::Null)); + } +} + void tst_QSettings::testErrorHandling_data() { QTest::addColumn("filePerms"); // -1 means file should not exist From 4a4368df5663729a34761c394a6f02b72071e89c Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 18 Oct 2016 13:17:53 +0300 Subject: [PATCH 085/196] QAndroidPlatformTheme: wrap char* in QL1S to avoid warnings Change-Id: Idcc70038051b03366aa447f3a4c48912d3f911d5 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/platforms/android/qandroidplatformtheme.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp index 9350a15721..801bb78436 100644 --- a/src/plugins/platforms/android/qandroidplatformtheme.cpp +++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp @@ -458,9 +458,9 @@ QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const case StyleNames: if (qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_STYLE") && m_androidStyleData) { - return QStringList("android"); + return QStringList(QLatin1String("android")); } - return QStringList("fusion"); + return QStringList(QLatin1String("fusion")); case MouseDoubleClickDistance: { From e80faf3db61ca9c701cd86876e3bce8e33226576 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 17 Oct 2016 13:00:04 +0200 Subject: [PATCH 086/196] QTimer: don't circumvent safety net By templating on the types and unconditionally using duration_cast to coerce the duration into a milliseconds, we violate a principal design rule of , namely that non- narrowing conversions are implicit, but narrowing conversions need duration_cast. By accepting any duration, we allow non- sensical code such as QTimer::singleShot(10us, ...) to compile, which is misleading, since it's actually a zero- timeout timer. Overloading a non-template with a template also has adverse effects: it breaks qOverload(). Fix by replacing the function templates with functions that just take std::chrono::milliseconds. This way, benign code such as QTimer::singleShot(10s, ...) QTimer::singleShot(10min, ...) QTimer::singleShot(1h, ...) work as expected, but attempts to use sub-millisecond resolution fails to compile / needs an explicit user- provided duration_cast. To allow future extension to more precise timers, forcibly inline the functions, so they don't partake in the ABI of the class and we can later support sub-millisecond resolution by simply taking micro- or nano- instead of milliseconds. Change-Id: I12c9a98bdabefcd8ec18a9eb09f87ad908d889de Reviewed-by: Thiago Macieira --- src/corelib/kernel/qtimer.cpp | 12 +++---- src/corelib/kernel/qtimer.h | 36 +++++++++---------- .../auto/corelib/kernel/qtimer/tst_qtimer.cpp | 16 +++++++-- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index 6d39233aa7..4a5738a6dc 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -533,7 +533,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv */ /*! - \fn void QTimer::singleShot(std::chrono::duration value, const QObject *receiver, const char *member) + \fn void QTimer::singleShot(std::chrono::milliseconds msec, const QObject *receiver, const char *member) \since 5.8 \overload \reentrant @@ -545,13 +545,13 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv create a local QTimer object. The \a receiver is the receiving object and the \a member is the slot. The - time interval is given in the duration object \a value. + time interval is given in the duration object \a msec. \sa start() */ /*! - \fn void QTimer::singleShot(std::chrono::duration value, Qt::TimerType timerType, const QObject *receiver, const char *member) + \fn void QTimer::singleShot(std::chrono::milliseconds msec, Qt::TimerType timerType, const QObject *receiver, const char *member) \since 5.8 \overload \reentrant @@ -563,18 +563,18 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv create a local QTimer object. The \a receiver is the receiving object and the \a member is the slot. The - time interval is given in the duration object \a value. The \a timerType affects the + time interval is given in the duration object \a msec. The \a timerType affects the accuracy of the timer. \sa start() */ /*! - \fn void QTimer::start(std::chrono::duration value) + \fn void QTimer::start(std::chrono::milliseconds msec) \since 5.8 \overload - Starts or restarts the timer with a timeout of duration \a value. + Starts or restarts the timer with a timeout of duration \a msec milliseconds. If the timer is already running, it will be \l{QTimer::stop()}{stopped} and restarted. diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h index 1567fe760c..4f934d0367 100644 --- a/src/corelib/kernel/qtimer.h +++ b/src/corelib/kernel/qtimer.h @@ -165,38 +165,40 @@ Q_SIGNALS: public: #if QT_HAS_INCLUDE() || defined(Q_QDOC) - template - void setInterval(std::chrono::duration value) + Q_ALWAYS_INLINE + void setInterval(std::chrono::milliseconds value) { - setInterval(std::chrono::duration_cast(value).count()); + setInterval(value.count()); } + Q_ALWAYS_INLINE std::chrono::milliseconds intervalAsDuration() const { return std::chrono::milliseconds(interval()); } + Q_ALWAYS_INLINE std::chrono::milliseconds remainingTimeAsDuration() const { return std::chrono::milliseconds(remainingTime()); } - template - static void singleShot(std::chrono::duration value, const QObject *receiver, const char *member) + Q_ALWAYS_INLINE + static void singleShot(std::chrono::milliseconds value, const QObject *receiver, const char *member) { - singleShot(int(std::chrono::duration_cast(value).count()), receiver, member); + singleShot(int(value.count()), receiver, member); } - template - static void singleShot(std::chrono::duration value, Qt::TimerType timerType, const QObject *receiver, const char *member) + Q_ALWAYS_INLINE + static void singleShot(std::chrono::milliseconds value, Qt::TimerType timerType, const QObject *receiver, const char *member) { - singleShot(int(std::chrono::duration_cast(value).count()), timerType, receiver, member); + singleShot(int(value.count()), timerType, receiver, member); } - template - void start(std::chrono::duration value) + Q_ALWAYS_INLINE + void start(std::chrono::milliseconds value) { - start(int(std::chrono::duration_cast(value).count())); + start(int(value.count())); } #endif @@ -215,15 +217,13 @@ private: const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj); #if QT_HAS_INCLUDE() - template - static Qt::TimerType defaultTypeFor(std::chrono::duration interval) - { return defaultTypeFor(int(std::chrono::duration_cast(interval).count())); } + static Qt::TimerType defaultTypeFor(std::chrono::milliseconds interval) + { return defaultTypeFor(int(interval.count())); } - template - static void singleShotImpl(std::chrono::duration interval, Qt::TimerType timerType, + static void singleShotImpl(std::chrono::milliseconds interval, Qt::TimerType timerType, const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj) { - singleShotImpl(int(std::chrono::duration_cast(interval).count()), + singleShotImpl(int(interval.count()), timerType, receiver, slotObj); } #endif diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp index 28df01cc16..fe97695d19 100644 --- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp +++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp @@ -216,6 +216,16 @@ void tst_QTimer::remainingTimeDuringActivation() } } +namespace { + +#if QT_HAS_INCLUDE() + template + std::chrono::milliseconds to_ms(T t) + { return std::chrono::duration_cast(t); } +#endif + +} // unnamed namespace + void tst_QTimer::basic_chrono() { #if !QT_HAS_INCLUDE() @@ -225,7 +235,7 @@ void tst_QTimer::basic_chrono() using namespace std::chrono; TimerHelper helper; QTimer timer; - timer.setInterval(nanoseconds(0)); + timer.setInterval(to_ms(nanoseconds(0))); timer.start(); QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(0)); QCOMPARE(timer.remainingTimeAsDuration().count(), milliseconds::rep(0)); @@ -248,7 +258,7 @@ void tst_QTimer::basic_chrono() QVERIFY(helper.count > oldCount); helper.count = 0; - timer.start(microseconds(200000)); + timer.start(to_ms(microseconds(200000))); QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(200)); QTest::qWait(50); QCOMPARE(helper.count, 0); @@ -864,7 +874,7 @@ void tst_QTimer::singleShot_chrono() QCOMPARE(nhelper.count, 1); int count = 0; - QTimer::singleShot(microseconds(0), CountedStruct(&count)); + QTimer::singleShot(to_ms(microseconds(0)), CountedStruct(&count)); QCoreApplication::processEvents(); QCOMPARE(count, 1); From 3d760312175279cbeefcfc6b26ef12ba940d5f2a Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 18 Oct 2016 14:55:38 +0300 Subject: [PATCH 087/196] QJsonDocument: don't re-call QVariant::type() in if-else chain Replace if-else chain with switch statement. Change-Id: Idd2d0198178685bdaf8f77fa6cae5025ea9de561 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/corelib/json/qjsondocument.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 86fd63ead4..630f61a1b0 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -268,14 +268,21 @@ QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidati QJsonDocument QJsonDocument::fromVariant(const QVariant &variant) { QJsonDocument doc; - if (variant.type() == QVariant::Map) { + switch (variant.type()) { + case QVariant::Map: doc.setObject(QJsonObject::fromVariantMap(variant.toMap())); - } else if (variant.type() == QVariant::Hash) { + break; + case QVariant::Hash: doc.setObject(QJsonObject::fromVariantHash(variant.toHash())); - } else if (variant.type() == QVariant::List) { + break; + case QVariant::List: doc.setArray(QJsonArray::fromVariantList(variant.toList())); - } else if (variant.type() == QVariant::StringList) { + break; + case QVariant::StringList: doc.setArray(QJsonArray::fromStringList(variant.toStringList())); + break; + default: + break; } return doc; } From f620ad1499c815da2e779cb1cbdd9758fb207c59 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 18 Oct 2016 14:58:37 +0300 Subject: [PATCH 088/196] QJsonDocument: enable NRVO for gcc in toJson() Change-Id: I1b639272d38f8463b17a85a406addb74bb572756 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/corelib/json/qjsondocument.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 630f61a1b0..8927f1330b 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -351,10 +351,9 @@ QByteArray QJsonDocument::toJson() const #ifndef QT_JSON_READONLY QByteArray QJsonDocument::toJson(JsonFormat format) const { - if (!d) - return QByteArray(); - QByteArray json; + if (!d) + return json; if (d->header->root()->isArray()) QJsonPrivate::Writer::arrayToJson(static_cast(d->header->root()), json, 0, (format == Compact)); From a769b347542060e7d7e010c343d4a7d5c1549de0 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 18 Oct 2016 14:05:26 +0300 Subject: [PATCH 089/196] QLocale: optimize string usage Use QStringBuilder more. Avoid quadratic behavior when prepending zeros in a loop, prepend whole string intead. Use const API more for CoW types. Change-Id: If114107dc3d9876b9a7c77bc0071878cb6e00892 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/corelib/tools/qlocale.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 7809c513d6..847fc2d55e 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -1072,20 +1072,14 @@ QLocale::Country QLocale::country() const QString QLocale::name() const { Language l = language(); - - QString result = d->languageCode(); - if (l == C) - return result; + return d->languageCode(); Country c = country(); if (c == AnyCountry) - return result; + return d->languageCode(); - result.append(QLatin1Char('_')); - result.append(d->countryCode()); - - return result; + return d->languageCode() + QLatin1Char('_') + d->countryCode(); } static qlonglong toIntegral_helper(const QLocaleData *d, const QChar *data, int len, bool *ok, @@ -2985,12 +2979,14 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group, } } - for (int i = num_str.length()/* - cnt_thousand_sep*/; i < precision; ++i) - num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0')); + const QChar resultZero = base == 10 ? zero : QChar(QLatin1Char('0')); + const int zeroPadding = precision - num_str.length()/* + cnt_thousand_sep*/; + if (zeroPadding > 0) + num_str.prepend(QString(zeroPadding, resultZero)); if ((flags & Alternate || flags & ShowBase) && base == 8 - && (num_str.isEmpty() || num_str[0].unicode() != QLatin1Char('0'))) + && (num_str.isEmpty() || num_str.at(0).unicode() != QLatin1Char('0'))) num_str.prepend(QLatin1Char('0')); // LeftAdjusted overrides this flag ZeroPadded. sprintf only padds @@ -3009,8 +3005,8 @@ QString QLocaleData::unsLongLongToString(const QChar zero, const QChar group, else if (base == 2 && flags & Alternate) num_pad_chars -= 2; - for (int i = 0; i < num_pad_chars; ++i) - num_str.prepend(base == 10 ? zero : QChar::fromLatin1('0')); + if (num_pad_chars > 0) + num_str.prepend(QString(num_pad_chars, resultZero)); } if (flags & CapitalEorX) From 6a7b683817e7427cf952130b7726833fd5be74ce Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Mon, 17 Oct 2016 18:54:26 +0300 Subject: [PATCH 090/196] Plugins: optimize string usage Prefer QStringRef methods to avoid allocations. Use startsWith/endsWith rather than comparing substrings; and avoid substrings where references suffice. Use new QStringList::join(QL1S). Change-Id: I46c44aca96578633370006d613eb0ac13f7cfc03 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/plugins/bearer/nativewifi/qnativewifiengine.cpp | 2 +- .../platforms/android/qandroidinputcontext.cpp | 11 +++++------ src/plugins/platforms/qnx/qqnxscreen.cpp | 2 +- .../platforms/windows/qwindowsfontdatabase_ft.cpp | 6 +++--- src/plugins/platforms/xcb/qxcbmime.cpp | 6 +++--- .../platformthemes/gtk3/qgtk3dialoghelpers.cpp | 4 ++-- src/plugins/printsupport/cups/qppdprintdevice.cpp | 2 +- src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp | 2 +- 8 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp index 23656476bd..bb43072aba 100644 --- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp +++ b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp @@ -459,7 +459,7 @@ void QNativeWifiEngine::disconnectFromId(const QString &id) return; } - QStringList split = interface.mid(1, interface.length() - 2).split('-'); + const QVector split = interface.midRef(1, interface.length() - 2).split(QLatin1Char('-')); GUID guid; guid.Data1 = split.at(0).toUInt(0, 16); diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 06a9c8c488..2656d45d5f 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -866,7 +866,7 @@ const QAndroidInputContext::ExtractedText &QAndroidInputContext::getExtractedTex if (composeLength > 0) { //Qt doesn't give us the preedit text, so we have to insert it at the correct position int localComposePos = m_composingTextStart - blockPos; - blockText = blockText.left(localComposePos) + m_composingText + blockText.mid(localComposePos); + blockText = blockText.leftRef(localComposePos) + m_composingText + blockText.midRef(localComposePos); } int cpos = localPos + composeLength; //actual cursor pos relative to the current block @@ -930,9 +930,8 @@ QString QAndroidInputContext::getTextAfterCursor(jint length, jint /*flags*/) QString QAndroidInputContext::getTextBeforeCursor(jint length, jint /*flags*/) { QVariant textBefore = queryFocusObjectThreadSafe(Qt::ImTextBeforeCursor, QVariant(length)); - if (textBefore.isValid()) { - return textBefore.toString().right(length) + m_composingText; - } + if (textBefore.isValid()) + return textBefore.toString().rightRef(length) + m_composingText; //compatibility code for old controls that do not implement the new API QSharedPointer query = focusObjectInputMethodQueryThreadSafe(); @@ -946,9 +945,9 @@ QString QAndroidInputContext::getTextBeforeCursor(jint length, jint /*flags*/) //### the preedit text does not need to be immediately before the cursor if (cursorPos <= length) - return text.left(cursorPos) + m_composingText; + return text.leftRef(cursorPos) + m_composingText; else - return text.mid(cursorPos - length, length) + m_composingText; + return text.midRef(cursorPos - length, length) + m_composingText; } /* diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp index f8ae5121d1..46df500330 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.cpp +++ b/src/plugins/platforms/qnx/qqnxscreen.cpp @@ -90,7 +90,7 @@ static QSize determineScreenSize(screen_display_t display, bool primaryScreen) { const QString envPhySizeStr = qgetenv("QQNX_PHYSICAL_SCREEN_SIZE"); if (!envPhySizeStr.isEmpty()) { - const QStringList envPhySizeStrList = envPhySizeStr.split(QLatin1Char(',')); + const auto envPhySizeStrList = envPhySizeStr.splitRef(QLatin1Char(',')); const int envWidth = envPhySizeStrList.size() == 2 ? envPhySizeStrList[0].toInt() : -1; const int envHeight = envPhySizeStrList.size() == 2 ? envPhySizeStrList[1].toInt() : -1; diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp index f7c8dbdf23..bc0e5cc523 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp @@ -137,10 +137,10 @@ static FontKeys &fontKeys() QString realKey = registryFontKey; realKey.remove(trueType); realKey.remove(sizeListMatch); - const QStringList fontNames = realKey.trimmed().split(QLatin1Char('&')); + const auto fontNames = QStringRef(&realKey).trimmed().split(QLatin1Char('&')); fontKey.fontNames.reserve(fontNames.size()); - foreach (const QString &fontName, fontNames) - fontKey.fontNames.append(fontName.trimmed()); + for (const QStringRef &fontName : fontNames) + fontKey.fontNames.append(fontName.trimmed().toString()); result.append(fontKey); } } diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index f71c5464d0..3e9b0e1e4a 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -208,10 +208,10 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, reinterpret_cast(data.constData()), data.size() / 2); if (!str.isNull()) { if (format == QLatin1String("text/uri-list")) { - const QStringList urls = str.split(QLatin1Char('\n')); + const auto urls = str.splitRef(QLatin1Char('\n')); QList list; - for (const QString &s : urls) { - const QUrl url(s.trimmed()); + for (const QStringRef &s : urls) { + const QUrl url(s.trimmed().toString()); if (url.isValid()) list.append(url); } diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp index 42d3c1f193..2030732e4b 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp @@ -463,10 +463,10 @@ void QGtk3FileDialogHelper::setNameFilters(const QStringList &filters) foreach (const QString &filter, filters) { GtkFileFilter *gtkFilter = gtk_file_filter_new(); - const QString name = filter.left(filter.indexOf(QLatin1Char('('))); + const QStringRef name = filter.leftRef(filter.indexOf(QLatin1Char('('))); const QStringList extensions = cleanFilterList(filter); - gtk_file_filter_set_name(gtkFilter, name.isEmpty() ? extensions.join(QStringLiteral(", ")).toUtf8() : name.toUtf8()); + gtk_file_filter_set_name(gtkFilter, name.isEmpty() ? extensions.join(QLatin1String(", ")).toUtf8() : name.toUtf8()); foreach (const QString &ext, extensions) gtk_file_filter_add_pattern(gtkFilter, ext.toUtf8()); diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp index caa7382462..9efa83d409 100644 --- a/src/plugins/printsupport/cups/qppdprintdevice.cpp +++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp @@ -63,7 +63,7 @@ QPpdPrintDevice::QPpdPrintDevice(const QString &id) if (!id.isEmpty()) { // TODO For now each dest is an individual device - QStringList parts = id.split(QLatin1Char('/')); + const auto parts = id.splitRef(QLatin1Char('/')); m_cupsName = parts.at(0).toUtf8(); if (parts.size() > 1) m_cupsInstance = parts.at(1).toUtf8(); diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp index ef4ef2e93c..1cb0f10494 100644 --- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp +++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp @@ -72,7 +72,7 @@ QT_BEGIN_NAMESPACE static QString _q_escapeIdentifier(const QString &identifier) { QString res = identifier; - if(!identifier.isEmpty() && identifier.left(1) != QString(QLatin1Char('"')) && identifier.right(1) != QString(QLatin1Char('"')) ) { + if (!identifier.isEmpty() && !identifier.startsWith(QLatin1Char('"')) && !identifier.endsWith(QLatin1Char('"'))) { res.replace(QLatin1Char('"'), QLatin1String("\"\"")); res.prepend(QLatin1Char('"')).append(QLatin1Char('"')); res.replace(QLatin1Char('.'), QLatin1String("\".\"")); From f939e7ea7375dbc051c81abf7b24c6fd5304cbbb Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 13 Oct 2016 09:18:05 +0200 Subject: [PATCH 091/196] Testlib: Move classes inheriting QBenchmarkMeasurerBase to separate header QBenchmarkTimeMeasurer uses the 3rd party header cycle_p.h which may include windows.h on Windows (32bit). This can cause clashes in qmltest, which uses QBenchmarkMeasurerBase. Move the derived classes to a separate header to prevent this. Change-Id: I943a11c32a575594e6e79e722e8809b42de35092 Reviewed-by: Maurice Kalinowski Reviewed-by: Lars Knoll --- src/testlib/qbenchmark.cpp | 1 + src/testlib/qbenchmarkmeasurement.cpp | 2 +- src/testlib/qbenchmarkmeasurement_p.h | 36 ---------- src/testlib/qbenchmarktimemeasurers_p.h | 96 +++++++++++++++++++++++++ src/testlib/testlib.pro | 1 + 5 files changed, 99 insertions(+), 37 deletions(-) create mode 100644 src/testlib/qbenchmarktimemeasurers_p.h diff --git a/src/testlib/qbenchmark.cpp b/src/testlib/qbenchmark.cpp index c884d5d740..c933a16c35 100644 --- a/src/testlib/qbenchmark.cpp +++ b/src/testlib/qbenchmark.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include diff --git a/src/testlib/qbenchmarkmeasurement.cpp b/src/testlib/qbenchmarkmeasurement.cpp index ac4d75ce3b..228ab15f99 100644 --- a/src/testlib/qbenchmarkmeasurement.cpp +++ b/src/testlib/qbenchmarkmeasurement.cpp @@ -37,7 +37,7 @@ ** ****************************************************************************/ -#include +#include #include #include #include diff --git a/src/testlib/qbenchmarkmeasurement_p.h b/src/testlib/qbenchmarkmeasurement_p.h index 1444439e11..8dbfd4b618 100644 --- a/src/testlib/qbenchmarkmeasurement_p.h +++ b/src/testlib/qbenchmarkmeasurement_p.h @@ -51,8 +51,6 @@ // We mean it. // -#include -#include #include QT_BEGIN_NAMESPACE @@ -73,40 +71,6 @@ public: virtual QTest::QBenchmarkMetric metricType() = 0; }; -class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase -{ -public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int sugestion); - int adjustMedianCount(int suggestion); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); -private: - QElapsedTimer time; -}; - -#ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h - -class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase -{ -public: - void start(); - qint64 checkpoint(); - qint64 stop(); - bool isMeasurementAccepted(qint64 measurement); - int adjustIterationCount(int); - int adjustMedianCount(int suggestion); - bool needsWarmupIteration(); - QTest::QBenchmarkMetric metricType(); -private: - CycleCounterTicks startTicks; -}; - -#endif - QT_END_NAMESPACE #endif // QBENCHMARKMEASUREMENT_P_H diff --git a/src/testlib/qbenchmarktimemeasurers_p.h b/src/testlib/qbenchmarktimemeasurers_p.h new file mode 100644 index 0000000000..e5ffb1157d --- /dev/null +++ b/src/testlib/qbenchmarktimemeasurers_p.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtTest module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QBENCHMARKTIMEMEASURERS_P_H +#define QBENCHMARKTIMEMEASURERS_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QBenchmarkTimeMeasurer : public QBenchmarkMeasurerBase +{ +public: + void start(); + qint64 checkpoint(); + qint64 stop(); + bool isMeasurementAccepted(qint64 measurement); + int adjustIterationCount(int sugestion); + int adjustMedianCount(int suggestion); + bool needsWarmupIteration(); + QTest::QBenchmarkMetric metricType(); +private: + QElapsedTimer time; +}; + +#ifdef HAVE_TICK_COUNTER // defined in 3rdparty/cycle_p.h + +class QBenchmarkTickMeasurer : public QBenchmarkMeasurerBase +{ +public: + void start(); + qint64 checkpoint(); + qint64 stop(); + bool isMeasurementAccepted(qint64 measurement); + int adjustIterationCount(int); + int adjustMedianCount(int suggestion); + bool needsWarmupIteration(); + QTest::QBenchmarkMetric metricType(); +private: + CycleCounterTicks startTicks; +}; + +#endif // HAVE_TICK_COUNTER + +QT_END_NAMESPACE + +#endif // QBENCHMARKTIMEMEASURERS_P_H diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index d76dbb8c75..5b2205e875 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -14,6 +14,7 @@ QMAKE_DOCS = $$PWD/doc/qttestlib.qdocconf HEADERS = qbenchmark.h \ qbenchmark_p.h \ qbenchmarkmeasurement_p.h \ + qbenchmarktimemeasurers_p.h \ qbenchmarkvalgrind_p.h \ qbenchmarkevent_p.h \ qbenchmarkperfevents_p.h \ From a9835dfe5553545b532be9930364f71fba70c037 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Tue, 18 Oct 2016 18:15:48 +0300 Subject: [PATCH 092/196] QJsonDocument: fix repetition of 'document' in doc Change-Id: I8909336274b2c72e526d63fe9e21368550de6678 Reviewed-by: Thiago Macieira --- src/corelib/json/qjsondocument.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp index 7af7e4080c..1916730d6d 100644 --- a/src/corelib/json/qjsondocument.cpp +++ b/src/corelib/json/qjsondocument.cpp @@ -254,8 +254,7 @@ QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidati Creates a QJsonDocument from the QVariant \a variant. If the \a variant contains any other type than a QVariantMap, - QVariantList or QStringList, the returned document - document is invalid. + QVariantList or QStringList, the returned document is invalid. \sa toVariant() */ From 683c9bc4a8e656b2251871b9d8c9952e58681a52 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Tue, 18 Oct 2016 19:12:55 +0200 Subject: [PATCH 093/196] Windows: Fix regression in QFSFileEnginePrivate::nativeWrite() Change 0696566b1e19c8178e00c0d14f185935e17d9e8b caused the block size to be incorrect for data > 32MB. Since bytesToWrite changes within the do...while loop, then the block size can potentially change too each time. So it needs to be recalculated each time rather than just once. Task-number: QTBUG-56616 Change-Id: I9880d0985f2d0242c30e67230be7271eb806db95 Reviewed-by: Oliver Wolff Reviewed-by: Friedemann Kleint --- src/corelib/io/qfsfileengine_win.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 391fbcc519..4fe561d0cb 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -427,11 +427,11 @@ qint64 QFSFileEnginePrivate::nativeWrite(const char *data, qint64 len) // Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when // the chunks are too large, so we limit the block size to 32MB. - const DWORD blockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024))); qint64 totalWritten = 0; do { + const DWORD currentBlockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024))); DWORD bytesWritten; - if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) { + if (!WriteFile(fileHandle, data + totalWritten, currentBlockSize, &bytesWritten, NULL)) { if (totalWritten == 0) { // Note: Only return error if the first WriteFile failed. q->setError(QFile::WriteError, qt_error_string()); From 8249f490ff82ee2a223d2c64661cfcb1c24bdeb4 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Mon, 17 Oct 2016 14:05:10 +0200 Subject: [PATCH 094/196] Document QClipboard::mimeData can be null The current wording (reference) seems like it's always a pointer to valid stuff Change-Id: I2a9f8bde7d2ba672e4e664ff731a3272a6deaaaa Reviewed-by: Edward Welbourne --- src/gui/kernel/qclipboard.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index 1aac3d6021..325ba7d787 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -419,8 +419,9 @@ void QClipboard::setPixmap(const QPixmap &pixmap, Mode mode) /*! \fn QMimeData *QClipboard::mimeData(Mode mode) const - Returns a reference to a QMimeData representation of the current - clipboard data. + Returns a pointer to a QMimeData representation of the current + clipboard data (can be NULL if the given \a mode is not + supported by the platform). The \a mode argument is used to control which part of the system clipboard is used. If \a mode is QClipboard::Clipboard, the From 32a3413b138ed93c492b5d48278b6a71fae92c49 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 17 Oct 2016 21:18:57 +0200 Subject: [PATCH 095/196] make-expand cflags before passing them to $$system() mac/sdk.prf puts some indirections into them. Task-number: QTBUG-56580 Change-Id: I8ffd2438309702466edd3ad5c51284c7cab4fda9 Reviewed-by: Jake Petroules --- mkspecs/features/toolchain.prf | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf index 70547a3cdf..87fe7e40a8 100644 --- a/mkspecs/features/toolchain.prf +++ b/mkspecs/features/toolchain.prf @@ -1,4 +1,14 @@ +defineReplace(qtMakeExpand) { + out = "$$1" + for(ever) { + m = $$replace(out, .*\\$\\(EXPORT_([^)]+)\\).*, \\1) + equals(m, $$out): \ + return($$out) + out = $$replace(out, \\$\\(EXPORT_$$m\\), $$eval($$m)) + } +} + isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build { # # Get default include and library paths from compiler @@ -11,7 +21,7 @@ isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build { cmd_prefix = "set LC_ALL=C&" cmd_suffix = "NUL" } - output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines) + output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$QMAKE_CXXFLAGS) -xc++ -E -v - 2>&1 $$cmd_suffix", lines) add_includes = false for (line, output) { line ~= s/^ *// # remove leading spaces From 46078f33745659ec1770cb4a58f8e02b5a9f670b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 14 Oct 2016 10:37:57 +0200 Subject: [PATCH 096/196] QOrderedMutexLocker: unlock in reverse order of locking This is an improvement for the following reasons: - Should mutex locking allocate any kind of resource, unlocking in reverse order will free those resources in inverse order, which helps typical allocators. - If the lock pair is contended, by unlocking in the same order as locking, we were allowing the waiting thread to wake up to take the first lock just to find that the second lock is still held by someone else. The order of unlocking has no influence on the correct- ness of the algorithm. Change-Id: Id16b0342aef325c14a7bd8836d3a75db68ef2588 Reviewed-by: David Faure --- src/corelib/thread/qorderedmutexlocker_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/thread/qorderedmutexlocker_p.h b/src/corelib/thread/qorderedmutexlocker_p.h index 6402be92bf..65c41d4f21 100644 --- a/src/corelib/thread/qorderedmutexlocker_p.h +++ b/src/corelib/thread/qorderedmutexlocker_p.h @@ -82,8 +82,8 @@ public: void unlock() { if (locked) { - if (mtx1) mtx1->unlock(); if (mtx2) mtx2->unlock(); + if (mtx1) mtx1->unlock(); locked = false; } } From 6a9e039d19719e489aeaa31d4411f2e19240e0e9 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 18 Oct 2016 14:20:37 +0200 Subject: [PATCH 097/196] Doc: Fix link to qsslkey-p11 example in external-resources MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apparently, the example has been moved. Change-Id: If68e5db87321e8ff4af652a1cbbd0c3243acb515 Reviewed-by: Topi Reiniö --- doc/global/externalsites/external-resources.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/global/externalsites/external-resources.qdoc b/doc/global/externalsites/external-resources.qdoc index b231bb1f4a..d9859ba295 100644 --- a/doc/global/externalsites/external-resources.qdoc +++ b/doc/global/externalsites/external-resources.qdoc @@ -474,7 +474,7 @@ */ /*! - \externalpage http://git.iksaif.net/?p=qsslkey-p11.git + \externalpage https://github.com/iksaif/qsslkey-p11 \title qsslkey example */ From ee22c6505a1f7cf52a862b1bd9219511db893417 Mon Sep 17 00:00:00 2001 From: Clinton Stimpson Date: Tue, 30 Aug 2016 07:52:17 -0600 Subject: [PATCH 098/196] xcb: fix passing of focus from child to its top level QWindow With the client message _NET_ACTIVE_WINDOW, not all window managers will pass focus from a child window to its root window, Detect this child-to-root case, and use xcb_set_input_focus() instead. Task-number: QTBUG-39362 Change-Id: Ib32193018e3b725b323f87d7306c9ae9493d78a7 Reviewed-by: Shawn Rutledge Reviewed-by: Edward Welbourne Reviewed-by: Frederik Gladhorn --- src/plugins/platforms/xcb/qxcbwindow.cpp | 3 ++- tests/auto/gui/kernel/qwindow/tst_qwindow.cpp | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 5f402b6eca..25a8b41195 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -1698,9 +1698,11 @@ void QXcbWindow::requestActivateWindow() m_deferredActivation = false; updateNetWmUserTime(connection()->time()); + QWindow *focusWindow = QGuiApplication::focusWindow(); if (window()->isTopLevel() && !(window()->flags() & Qt::X11BypassWindowManagerHint) + && (!focusWindow || !window()->isAncestorOf(focusWindow)) && connection()->wmSupport()->isSupportedByWM(atom(QXcbAtom::_NET_ACTIVE_WINDOW))) { xcb_client_message_event_t event; @@ -1711,7 +1713,6 @@ void QXcbWindow::requestActivateWindow() event.type = atom(QXcbAtom::_NET_ACTIVE_WINDOW); event.data.data32[0] = 1; event.data.data32[1] = connection()->time(); - QWindow *focusWindow = QGuiApplication::focusWindow(); event.data.data32[2] = focusWindow ? focusWindow->winId() : XCB_NONE; event.data.data32[3] = 0; event.data.data32[4] = 0; diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 0cce5a072c..d904d48376 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -601,6 +601,24 @@ void tst_QWindow::isActive() // child has focus QVERIFY(window.isActive()); + // test focus back to parent and then back to child (QTBUG-39362) + // also verify the cumulative FocusOut and FocusIn counts + // activate parent + window.requestActivate(); + QTRY_COMPARE(QGuiApplication::focusWindow(), &window); + QVERIFY(window.isActive()); + QCoreApplication::processEvents(); + QTRY_COMPARE(child.received(QEvent::FocusOut), 1); + QTRY_COMPARE(window.received(QEvent::FocusIn), 2); + + // activate child again + child.requestActivate(); + QTRY_COMPARE(QGuiApplication::focusWindow(), &child); + QVERIFY(child.isActive()); + QCoreApplication::processEvents(); + QTRY_COMPARE(window.received(QEvent::FocusOut), 2); + QTRY_COMPARE(child.received(QEvent::FocusIn), 2); + Window dialog; dialog.setTransientParent(&window); dialog.setGeometry(QRect(m_availableTopLeft + QPoint(110, 100), m_testWindowSize)); @@ -625,7 +643,7 @@ void tst_QWindow::isActive() QTRY_COMPARE(QGuiApplication::focusWindow(), &window); QCoreApplication::processEvents(); QTRY_COMPARE(dialog.received(QEvent::FocusOut), 1); - QTRY_COMPARE(window.received(QEvent::FocusIn), 2); + QTRY_COMPARE(window.received(QEvent::FocusIn), 3); QVERIFY(window.isActive()); From 6cfdfad7d41a7e452fa53495d9843c5d67e74946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Mon, 17 Oct 2016 23:16:15 +0100 Subject: [PATCH 099/196] Don't crash while parsing malformed CSS Task-Id: QTBUG-53919 Change-Id: I31a0e218e4e41ee217f8f87164f115450d69d42c Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/gui/text/qcssparser.cpp | 9 +++++++-- tests/auto/gui/text/qcssparser/tst_qcssparser.cpp | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp index 65b468ece4..e96aecdf68 100644 --- a/src/gui/text/qcssparser.cpp +++ b/src/gui/text/qcssparser.cpp @@ -739,8 +739,9 @@ static ColorData parseColorValue(QCss::Value v) QVector colorDigits; if (!p.parseExpr(&colorDigits)) return ColorData(); + const int tokenCount = colorDigits.count(); - for (int i = 0; i < qMin(colorDigits.count(), 7); i += 2) { + for (int i = 0; i < qMin(tokenCount, 7); i += 2) { if (colorDigits.at(i).type == Value::Percentage) { colorDigits[i].variant = colorDigits.at(i).variant.toReal() * (255. / 100.); colorDigits[i].type = Value::Number; @@ -749,11 +750,15 @@ static ColorData parseColorValue(QCss::Value v) } } + + if (tokenCount < 5) + return ColorData(); + int v1 = colorDigits.at(0).variant.toInt(); int v2 = colorDigits.at(2).variant.toInt(); int v3 = colorDigits.at(4).variant.toInt(); int alpha = 255; - if (colorDigits.count() >= 7) { + if (tokenCount >= 7) { int alphaValue = colorDigits.at(6).variant.toInt(); if (rgba && alphaValue <= 1) alpha = colorDigits.at(6).variant.toReal() * 255.; diff --git a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp index b1beb0ffd0..d283f7d9cc 100644 --- a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp +++ b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp @@ -847,6 +847,7 @@ void tst_QCssParser::colorValue_data() QTest::newRow("hsla") << "color: hsva(10, 20, 30, 40)" << QColor::fromHsv(10, 20, 30, 40); QTest::newRow("invalid1") << "color: rgb(why, does, it, always, rain, on, me)" << QColor(); QTest::newRow("invalid2") << "color: rgba(i, meant, norway)" << QColor(); + QTest::newRow("invalid3") << "color: rgb(21)" << QColor(); QTest::newRow("role") << "color: palette(base)" << qApp->palette().color(QPalette::Base); QTest::newRow("role2") << "color: palette( window-text ) " << qApp->palette().color(QPalette::WindowText); QTest::newRow("transparent") << "color: transparent" << QColor(Qt::transparent); From b38145a11d03c3e3fe8baf37800a017359283861 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 12 Oct 2016 09:03:39 +0200 Subject: [PATCH 100/196] PDF: Handle monochrome images correctly When an image is considered to be monochrome then it should not be making the white part of the image transparent, the colors should be kept as is. Task-number: QTBUG-56489 Change-Id: I3621ca7be2a0ebe6852363f860c0b3de28d28a31 Reviewed-by: Allan Sandfeld Jensen Reviewed-by: Lars Knoll --- src/gui/painting/qpdf.cpp | 13 +++++++++---- src/gui/painting/qpdf_p.h | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index 0df5fd8b8a..77304fb87b 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1919,7 +1919,7 @@ int QPdfEnginePrivate::writeCompressed(const char *src, int len) } int QPdfEnginePrivate::writeImage(const QByteArray &data, int width, int height, int depth, - int maskObject, int softMaskObject, bool dct) + int maskObject, int softMaskObject, bool dct, bool isMono) { int image = addXrefEntry(-1); xprintf("<<\n" @@ -1929,8 +1929,13 @@ int QPdfEnginePrivate::writeImage(const QByteArray &data, int width, int height, "/Height %d\n", width, height); if (depth == 1) { - xprintf("/ImageMask true\n" - "/Decode [1 0]\n"); + if (!isMono) { + xprintf("/ImageMask true\n" + "/Decode [1 0]\n"); + } else { + xprintf("/BitsPerComponent 1\n" + "/ColorSpace /DeviceGray\n"); + } } else { xprintf("/BitsPerComponent 8\n" "/ColorSpace %s\n", (depth == 32) ? "/DeviceRGB" : "/DeviceGray"); @@ -2445,7 +2450,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n memcpy(rawdata, image.constScanLine(y), bytesPerLine); rawdata += bytesPerLine; } - object = writeImage(data, w, h, d, 0, 0); + object = writeImage(data, w, h, d, 0, 0, false, is_monochrome(img.colorTable())); } else { QByteArray softMaskData; bool dct = false; diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h index de30744ca2..ab7a218d89 100644 --- a/src/gui/painting/qpdf_p.h +++ b/src/gui/painting/qpdf_p.h @@ -289,7 +289,7 @@ private: int streampos; int writeImage(const QByteArray &data, int width, int height, int depth, - int maskObject, int softMaskObject, bool dct = false); + int maskObject, int softMaskObject, bool dct = false, bool isMono = false); void writePage(); int addXrefEntry(int object, bool printostr = true); From cd081ca96a5387abe36f46a347363e07edcdcd67 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Mon, 19 Sep 2016 12:13:33 +0200 Subject: [PATCH 101/196] macOS: Only show menu and allow dragging on proxy when a file path is set If there is no file path set then it should not be possible to see a menu or to drag from a proxy icon in the titlebar. Task-number: QTBUG-56082 Change-Id: Ib8305bcab5717bc8cb7ddabbb079f152debbdded Reviewed-by: Jake Petroules --- src/plugins/platforms/cocoa/qcocoawindow.h | 1 + src/plugins/platforms/cocoa/qcocoawindow.mm | 2 ++ src/plugins/platforms/cocoa/qnswindowdelegate.h | 3 ++- src/plugins/platforms/cocoa/qnswindowdelegate.mm | 15 +++++++++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 9fcb221d37..9cf6328281 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -346,6 +346,7 @@ public: // for QNSView // This object is tracked by QCocoaWindowPointer, // preventing the use of dangling pointers. QObject sentinel; + bool m_hasWindowFilePath; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index c0d5904367..977a5ae657 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -379,6 +379,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw) , m_topContentBorderThickness(0) , m_bottomContentBorderThickness(0) , m_normalGeometry(QRect(0,0,-1,-1)) + , m_hasWindowFilePath(false) { #ifdef QT_COCOA_ENABLE_WINDOW_DEBUG qDebug() << "QCocoaWindow::QCocoaWindow" << this; @@ -941,6 +942,7 @@ void QCocoaWindow::setWindowFilePath(const QString &filePath) QFileInfo fi(filePath); [m_nsWindow setRepresentedFilename: fi.exists() ? QCFString::toNSString(filePath) : @""]; + m_hasWindowFilePath = fi.exists(); } void QCocoaWindow::setWindowIcon(const QIcon &icon) diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.h b/src/plugins/platforms/cocoa/qnswindowdelegate.h index b8d344aa0e..a5f3dca68c 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.h +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.h @@ -51,7 +51,8 @@ - (void)windowWillMove:(NSNotification *)notification; - (BOOL)windowShouldClose:(NSNotification *)notification; - (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame; - +- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu; +- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard; @end QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSWindowDelegate); diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm index 015274cac7..a26f381ddb 100644 --- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm @@ -109,4 +109,19 @@ return YES; } +- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu +{ + Q_UNUSED(window); + Q_UNUSED(menu); + return m_cocoaWindow && m_cocoaWindow->m_hasWindowFilePath; +} + +- (BOOL)window:(NSWindow *)window shouldDragDocumentWithEvent:(NSEvent *)event from:(NSPoint)dragImageLocation withPasteboard:(NSPasteboard *)pasteboard +{ + Q_UNUSED(window); + Q_UNUSED(event); + Q_UNUSED(dragImageLocation); + Q_UNUSED(pasteboard); + return m_cocoaWindow && m_cocoaWindow->m_hasWindowFilePath; +} @end From 2c0033983bc53e906eab3f4b2fae836ff8472713 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 3 Aug 2016 14:06:32 +0200 Subject: [PATCH 102/196] macOS: Don't override the set tab text color with white Originally on macOS it would override any tab text color with white for the active tab as it would set it directly on the option palette inside the style code. This would cause it to ignore any changes done by the user in a changed option, via setTabTextColor or in a proxy style. Therefore the setting of the color should be done when the style option is initialized and only if the tab text color has not been set by the user. This has the added effect of making it easier to change the color for tabs via a stylesheet since it will not be overridden in the style but setup correctly in the option instead. Change-Id: Ic338e96470112cba71d422bce79e664df0cb188a Reviewed-by: Jake Petroules --- src/widgets/styles/qmacstyle_mac.mm | 4 ---- src/widgets/widgets/qtabbar.cpp | 7 ++++++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 8f724df857..46918a2d5f 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -4286,10 +4286,6 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter bool verticalTabs = ttd == kThemeTabWest || ttd == kThemeTabEast; bool selected = (myTab.state & QStyle::State_Selected); - if (selected && !myTab.documentMode - && (!usingYosemiteOrLater || myTab.state & State_Active)) - myTab.palette.setColor(QPalette::WindowText, Qt::white); - // Check to see if we use have the same as the system font // (QComboMenuItem is internal and should never be seen by the // outside world, unless they read the source, in which case, it's diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index 2a163c18b5..b5ec91f59c 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -170,7 +170,12 @@ void QTabBarPrivate::initBasicStyleOption(QStyleOptionTab *option, int tabIndex) if (tab.textColor.isValid()) option->palette.setColor(q->foregroundRole(), tab.textColor); - +#ifdef Q_OS_MACOS + else if (isCurrent && !documentMode + && (QSysInfo::MacintoshVersion < QSysInfo::MV_10_10 || q->isActiveWindow())) { + option->palette.setColor(QPalette::WindowText, Qt::white); + } +#endif option->icon = tab.icon; option->iconSize = q->iconSize(); // Will get the default value then. From 0e61323c87490ea3991f7b6211034285ce5a932f Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Thu, 13 Oct 2016 13:59:44 +0200 Subject: [PATCH 103/196] winrt: Added timeout for cancellation of socket read operation As the function runs on the XAML thread it can make the app unresponsive/wait forever on a socket close. Thus we should not wait forever but have a timeout. If the timeout is hit the socket is not closed properly but hard reset. Change-Id: I82e9425c0f8195e3465027fdc2417a93f1c1ad91 Reviewed-by: Maurice Kalinowski --- src/network/socket/qnativesocketengine_winrt.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp index 58f0668854..b6a739d1b8 100644 --- a/src/network/socket/qnativesocketengine_winrt.cpp +++ b/src/network/socket/qnativesocketengine_winrt.cpp @@ -492,10 +492,12 @@ void QNativeSocketEngine::close() ComPtr action; hr = socket3->CancelIOAsync(&action); Q_ASSERT_SUCCEEDED(hr); - hr = QWinRTFunctions::await(action); + hr = QWinRTFunctions::await(action, QWinRTFunctions::YieldThread, 5000); // If there is no pending IO (no read established before) the function will fail with // "function was called at an unexpected time" which is fine. - if (hr != E_ILLEGAL_METHOD_CALL) + // Timeout is fine as well. The result will be the socket being hard reset instead of + // being closed gracefully + if (hr != E_ILLEGAL_METHOD_CALL && hr != ERROR_TIMEOUT) Q_ASSERT_SUCCEEDED(hr); return S_OK; }); From 0cccc23478432240f44cabfd853e60ff8c84c692 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sun, 9 Oct 2016 18:08:14 +0200 Subject: [PATCH 104/196] QNetworkReplyHttpImpl: Fix UB (member call) in destruction sequence Found by UBSan: qnetworkreplyhttpimpl.cpp:457:29: runtime error: member call on address 0x602000009cf0 which does not point to an object of type 'QNetworkReplyHttpImpl' 0x602000009cf0: note: object is of type 'QObject' 1e 00 80 18 20 e0 bb 12 54 7f 00 00 00 f2 00 00 70 61 00 00 02 00 00 00 ff ff ff 06 08 00 00 00 ^~~~~~~~~~~~~~~~~~~~~~~ vptr for 'QObject' #0 0x7f541461b71b in QNetworkReplyHttpImplPrivate::~QNetworkReplyHttpImplPrivate() qnetworkreplyhttpimpl.cpp:457 #1 0x7f541461b7f0 in QNetworkReplyHttpImplPrivate::~QNetworkReplyHttpImplPrivate() qnetworkreplyhttpimpl.cpp:458 #2 0x7f540f26df1a in QScopedPointerDeleter::cleanup(QObjectData*) qscopedpointer.h:54 #3 0x7f540f26df1a in QScopedPointer >::~QScopedPointer() qscopedpointer.h:101 #4 0x7f540f26df1a in QObject::~QObject() qobject.cpp:940 #5 0x7f540e915f6e in QIODevice::~QIODevice() qiodevice.cpp:416 #6 0x7f5414599bae in QNetworkReply::~QNetworkReply() qnetworkreply.cpp:444 #7 0x7f54145e6f5e in QNetworkReplyHttpImpl::~QNetworkReplyHttpImpl() qnetworkreplyhttpimpl.cpp:239 #8 0x7f54145e6f5e in QNetworkReplyHttpImpl::~QNetworkReplyHttpImpl() qnetworkreplyhttpimpl.cpp:242 #9 0x7f54144b3539 in void qDeleteAll::const_iterator>(QList::const_iterator, QList::const_iterator) qalgorithms.h:317 #10 0x7f54144b3539 in void qDeleteAll >(QList const&) qalgorithms.h:325 #11 0x7f54144b3539 in QNetworkAccessManager::~QNetworkAccessManager() qnetworkaccessmanager.cpp:496 Fix by moving the emission of the QNetworkReplyHttpImpl::abortHttpRequest() signal from ~Private, when the public object is merely a QObject anymore, to ~QNetworkReplyHttpImpl(), when the public class is still itself. Change-Id: Ifb3b19f6d180452bdf3fc26f54629ef780a5d9d9 Reviewed-by: Timur Pocheptsov --- src/network/access/qnetworkreplyhttpimpl.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp index 94235a48dd..fe8277ba92 100644 --- a/src/network/access/qnetworkreplyhttpimpl.cpp +++ b/src/network/access/qnetworkreplyhttpimpl.cpp @@ -238,7 +238,8 @@ QNetworkReplyHttpImpl::QNetworkReplyHttpImpl(QNetworkAccessManager* const manage QNetworkReplyHttpImpl::~QNetworkReplyHttpImpl() { - // Most work is done in private destructor + // This will do nothing if the request was already finished or aborted + emit abortHttpRequest(); } void QNetworkReplyHttpImpl::close() @@ -452,9 +453,6 @@ QNetworkReplyHttpImplPrivate::QNetworkReplyHttpImplPrivate() QNetworkReplyHttpImplPrivate::~QNetworkReplyHttpImplPrivate() { - Q_Q(QNetworkReplyHttpImpl); - // This will do nothing if the request was already finished or aborted - emit q->abortHttpRequest(); } /* From 837781db52b59012fdebb357ccb3abbd2f9bf2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 10 Oct 2016 13:44:52 +0200 Subject: [PATCH 105/196] Add Qt::ISODateWithMs date format, with support in QTime/Date/DateTime The Qt::ISODate format strips milliseconds, so a new format is introduced that keeps the milliseconds. A new format was chosen over fixing the existing format due to the behavioral change of suddenly having ms as part of Qt::ISODate. Change-Id: If8b852daed068cce8eee9b61a7cd4576bc763443 Reviewed-by: Thiago Macieira --- src/corelib/global/qnamespace.h | 3 ++- src/corelib/global/qnamespace.qdoc | 2 ++ src/corelib/tools/qdatetime.cpp | 25 +++++++++++++----- tests/auto/corelib/tools/qdate/tst_qdate.cpp | 1 + .../corelib/tools/qdatetime/tst_qdatetime.cpp | 26 +++++++++++++------ tests/auto/corelib/tools/qtime/tst_qtime.cpp | 3 +++ 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 5a66319164..e2b0d30db0 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1197,7 +1197,8 @@ public: SystemLocaleLongDate, DefaultLocaleShortDate, DefaultLocaleLongDate, - RFC2822Date // RFC 2822 (+ 850 and 1036 during parsing) + RFC2822Date, // RFC 2822 (+ 850 and 1036 during parsing) + ISODateWithMs }; enum TimeSpec { diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 7768070e4f..250195a512 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -658,6 +658,8 @@ \c{YYYY-MM-DDTHH:mm:ss}, \c{YYYY-MM-DDTHH:mm:ssTZD} (e.g., 1997-07-16T19:20:30+01:00) for combined dates and times. + \value ISODateWithMs \l{ISO 8601} extended format, including milliseconds if applicable. + \value SystemLocaleShortDate The \l{QLocale::ShortFormat}{short format} used by the \l{QLocale::system()}{operating system}. diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 7819d2e207..3750b37580 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -873,6 +873,7 @@ QString QDate::toString(Qt::DateFormat format) const return toStringTextDate(*this); #endif case Qt::ISODate: + case Qt::ISODateWithMs: return toStringIsoDate(jd); } } @@ -1568,7 +1569,9 @@ int QTime::msec() const If \a format is Qt::ISODate, the string format corresponds to the ISO 8601 extended specification for representations of dates, - which is also HH:mm:ss. + represented by HH:mm:ss. To include milliseconds in the ISO 8601 + date, use the \a format Qt::ISODateWithMs, which corresponds to + HH:mm:ss.zzz. If the \a format is Qt::SystemLocaleShortDate or Qt::SystemLocaleLongDate, the string format depends on the locale @@ -1610,6 +1613,8 @@ QString QTime::toString(Qt::DateFormat format) const return QLocale().toString(*this, QLocale::ShortFormat); case Qt::DefaultLocaleLongDate: return QLocale().toString(*this, QLocale::LongFormat); + case Qt::ISODateWithMs: + return QString::asprintf("%02d:%02d:%02d.%03d", hour(), minute(), second(), msec()); case Qt::RFC2822Date: case Qt::ISODate: case Qt::TextDate: @@ -1916,7 +1921,8 @@ static QTime fromIsoTimeString(const QStringRef &string, Qt::DateFormat format, } } - if (format == Qt::ISODate && hour == 24 && minute == 0 && second == 0 && msec == 0) { + const bool isISODate = format == Qt::ISODate || format == Qt::ISODateWithMs; + if (isISODate && hour == 24 && minute == 0 && second == 0 && msec == 0) { if (isMidnight24) *isMidnight24 = true; hour = 0; @@ -1958,6 +1964,7 @@ QTime QTime::fromString(const QString& string, Qt::DateFormat format) case Qt::RFC2822Date: return rfcDateImpl(string).time; case Qt::ISODate: + case Qt::ISODateWithMs: case Qt::TextDate: default: return fromIsoTimeString(&string, format, 0); @@ -3713,7 +3720,9 @@ void QDateTime::setTime_t(uint secsSince1Jan1970UTC) depending on the timeSpec() of the QDateTime. If the timeSpec() is Qt::UTC, Z will be appended to the string; if the timeSpec() is Qt::OffsetFromUTC, the offset in hours and minutes from UTC will - be appended to the string. + be appended to the string. To include milliseconds in the ISO 8601 + date, use the \a format Qt::ISODateWithMs, which corresponds to + YYYY-MM-DDTHH:mm:ss.zzz[Z|[+|-]HH:mm]. If the \a format is Qt::SystemLocaleShortDate or Qt::SystemLocaleLongDate, the string format depends on the locale @@ -3784,7 +3793,8 @@ QString QDateTime::toString(Qt::DateFormat format) const return buf; } #endif - case Qt::ISODate: { + case Qt::ISODate: + case Qt::ISODateWithMs: { const QPair p = getDateTime(d); const QDate &dt = p.first; const QTime &tm = p.second; @@ -3792,7 +3802,7 @@ QString QDateTime::toString(Qt::DateFormat format) const if (buf.isEmpty()) return QString(); // failed to convert buf += QLatin1Char('T'); - buf += tm.toString(Qt::ISODate); + buf += tm.toString(format); switch (getSpec(d)) { case Qt::UTC: buf += QLatin1Char('Z'); @@ -4651,7 +4661,8 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format) dateTime.setOffsetFromUtc(rfc.utcOffset); return dateTime; } - case Qt::ISODate: { + case Qt::ISODate: + case Qt::ISODateWithMs: { const int size = string.size(); if (size < 10) return QDateTime(); @@ -4699,7 +4710,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format) // Might be end of day (24:00, including variants), which QTime considers invalid. // ISO 8601 (section 4.2.3) says that 24:00 is equivalent to 00:00 the next day. bool isMidnight24 = false; - QTime time = fromIsoTimeString(isoString, Qt::ISODate, &isMidnight24); + QTime time = fromIsoTimeString(isoString, format, &isMidnight24); if (!time.isValid()) return QDateTime(); if (isMidnight24) diff --git a/tests/auto/corelib/tools/qdate/tst_qdate.cpp b/tests/auto/corelib/tools/qdate/tst_qdate.cpp index f22138b795..0e189ba7aa 100644 --- a/tests/auto/corelib/tools/qdate/tst_qdate.cpp +++ b/tests/auto/corelib/tools/qdate/tst_qdate.cpp @@ -1145,6 +1145,7 @@ void tst_QDate::toStringDateFormat_data() QTest::newRow("year < 0") << QDate(-1,1,1) << Qt::ISODate << QString(); QTest::newRow("year > 9999") << QDate(-1,1,1) << Qt::ISODate << QString(); QTest::newRow("RFC2822Date") << QDate(1974,12,1) << Qt::RFC2822Date << QString("01 Dec 1974"); + QTest::newRow("ISODateWithMs") << QDate(1974,12,1) << Qt::ISODateWithMs << QString("1974-12-01"); } void tst_QDate::toStringDateFormat() diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp index 0404a276ff..4604e664b0 100644 --- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp @@ -732,46 +732,56 @@ void tst_QDateTime::fromMSecsSinceEpoch() void tst_QDateTime::toString_isoDate_data() { QTest::addColumn("datetime"); + QTest::addColumn("format"); QTest::addColumn("expected"); QTest::newRow("localtime") << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34)) - << QString("1978-11-09T13:28:34"); + << Qt::ISODate << QString("1978-11-09T13:28:34"); QTest::newRow("UTC") << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), Qt::UTC) - << QString("1978-11-09T13:28:34Z"); + << Qt::ISODate << QString("1978-11-09T13:28:34Z"); QDateTime dt(QDate(1978, 11, 9), QTime(13, 28, 34)); dt.setOffsetFromUtc(19800); QTest::newRow("positive OffsetFromUTC") - << dt + << dt << Qt::ISODate << QString("1978-11-09T13:28:34+05:30"); dt.setUtcOffset(-7200); QTest::newRow("negative OffsetFromUTC") - << dt + << dt << Qt::ISODate << QString("1978-11-09T13:28:34-02:00"); dt.setUtcOffset(-900); QTest::newRow("negative non-integral OffsetFromUTC") - << dt + << dt << Qt::ISODate << QString("1978-11-09T13:28:34-00:15"); QTest::newRow("invalid") << QDateTime(QDate(-1, 11, 9), QTime(13, 28, 34), Qt::UTC) - << QString(); + << Qt::ISODate << QString(); + QTest::newRow("without-ms") + << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34, 20)) + << Qt::ISODate << QString("1978-11-09T13:28:34"); + QTest::newRow("with-ms") + << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34, 20)) + << Qt::ISODateWithMs << QString("1978-11-09T13:28:34.020"); } void tst_QDateTime::toString_isoDate() { QFETCH(QDateTime, datetime); + QFETCH(Qt::DateFormat, format); QFETCH(QString, expected); QLocale oldLocale; QLocale::setDefault(QLocale("en_US")); - QString result = datetime.toString(Qt::ISODate); + QString result = datetime.toString(format); QCOMPARE(result, expected); - QDateTime resultDatetime = QDateTime::fromString(result, Qt::ISODate); + QDateTime resultDatetime = QDateTime::fromString(result, format); // If expecting invalid result the datetime may still be valid, i.e. year < 0 or > 9999 if (!expected.isEmpty()) { + QEXPECT_FAIL("without-ms", "Qt::ISODate truncates milliseconds (QTBUG-56552)", Abort); + QCOMPARE(resultDatetime, datetime); QCOMPARE(resultDatetime.date(), datetime.date()); QCOMPARE(resultDatetime.time(), datetime.time()); diff --git a/tests/auto/corelib/tools/qtime/tst_qtime.cpp b/tests/auto/corelib/tools/qtime/tst_qtime.cpp index 45af10c3ab..059e1e519b 100644 --- a/tests/auto/corelib/tools/qtime/tst_qtime.cpp +++ b/tests/auto/corelib/tools/qtime/tst_qtime.cpp @@ -675,6 +675,9 @@ void tst_QTime::toStringDateFormat_data() QTest::newRow("Text 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::TextDate << QString("10:12:34"); QTest::newRow("ISO 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::ISODate << QString("10:12:34"); QTest::newRow("RFC2822Date") << QTime(10, 12, 34, 999) << Qt::RFC2822Date << QString("10:12:34"); + QTest::newRow("ISOWithMs 10:12:34.000") << QTime(10, 12, 34, 0) << Qt::ISODateWithMs << QString("10:12:34.000"); + QTest::newRow("ISOWithMs 10:12:34.020") << QTime(10, 12, 34, 20) << Qt::ISODateWithMs << QString("10:12:34.020"); + QTest::newRow("ISOWithMs 10:12:34.999") << QTime(10, 12, 34, 999) << Qt::ISODateWithMs << QString("10:12:34.999"); } void tst_QTime::toStringDateFormat() From 1e701cf0622fa7a5f194519b6afc7ef659f75cd7 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 20 Oct 2016 10:10:25 +0200 Subject: [PATCH 106/196] quote regexps the parens aren't matched, so the syntax was bogus. amends 32a3413b13. Task-number: QTBUG-56580 Change-Id: Ic00ba50844b822c7e4524ae81fbb1bc112a158a9 Reviewed-by: Jake Petroules Reviewed-by: Liang Qi --- mkspecs/features/toolchain.prf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf index 87fe7e40a8..3f266dd2a4 100644 --- a/mkspecs/features/toolchain.prf +++ b/mkspecs/features/toolchain.prf @@ -2,10 +2,10 @@ defineReplace(qtMakeExpand) { out = "$$1" for(ever) { - m = $$replace(out, .*\\$\\(EXPORT_([^)]+)\\).*, \\1) + m = $$replace(out, ".*\\$\\(EXPORT_([^)]+)\\).*", \\1) equals(m, $$out): \ return($$out) - out = $$replace(out, \\$\\(EXPORT_$$m\\), $$eval($$m)) + out = $$replace(out, "\\$\\(EXPORT_$$m\\)", $$eval($$m)) } } From b6df7257501b54521c25587c3c5e600b2c9393d1 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 20 Oct 2016 18:31:10 +0200 Subject: [PATCH 107/196] Fix UB (ininited pointer read) in qt_egl_device_integration() The m_integration member of DeviceIntegration, a naked pointer, was checked for nullptr in the DeviceIntegration ctor, but never set to nullptr. Fix by init'ing it to nullptr in the ctor-init-list. Coverity-Id: 172056 Change-Id: Ia1dc9b67b9d16a991bba82338eedb19de68f91d8 Reviewed-by: Thiago Macieira --- src/plugins/platforms/eglfs/qeglfshooks.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/platforms/eglfs/qeglfshooks.cpp b/src/plugins/platforms/eglfs/qeglfshooks.cpp index cf016d1b01..638960d998 100644 --- a/src/plugins/platforms/eglfs/qeglfshooks.cpp +++ b/src/plugins/platforms/eglfs/qeglfshooks.cpp @@ -61,6 +61,7 @@ private: Q_GLOBAL_STATIC(DeviceIntegration, deviceIntegration) DeviceIntegration::DeviceIntegration() + : m_integration(Q_NULLPTR) { QStringList pluginKeys = QEGLDeviceIntegrationFactory::keys(); if (!pluginKeys.isEmpty()) { From 294c870bedadc7823d61bc8df6fd37323589f0a2 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 20 Oct 2016 23:00:08 +0200 Subject: [PATCH 108/196] QImage: cache colortable size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Coverity threw an error that in the else branch, the expression colorTableRGB16[tableSize - 1] accesses uninit'ed data. The working theory is that it fails to perform the implication isEmpty() → size() == 0 This patch, therefore, checks for size() == 0 instead of isEmpty(), which is hardly less readable and might help Coverity understand the code better. Then again, Coverity might not understand that the tableSize can never be negative. If that's the case, another patch will be needed, but let's try the simpler solution first. Coverity-Id: 11420 Change-Id: Ibfe2a798c55af95c8001fa909aa94a6c5bc7c647 Reviewed-by: Allan Sandfeld Jensen --- src/gui/image/qimage_conversions.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp index 7b8d88ba72..c25b4cf5c3 100644 --- a/src/gui/image/qimage_conversions.cpp +++ b/src/gui/image/qimage_conversions.cpp @@ -905,12 +905,12 @@ static bool convert_indexed8_to_RGB16_inplace(QImageData *data, Qt::ImageConvers const int dest_pad = (dst_bytes_per_line >> 1) - width; quint16 colorTableRGB16[256]; - if (data->colortable.isEmpty()) { + const int tableSize = data->colortable.size(); + if (tableSize == 0) { for (int i = 0; i < 256; ++i) colorTableRGB16[i] = qConvertRgb32To16(qRgb(i, i, i)); } else { // 1) convert the existing colors to RGB16 - const int tableSize = data->colortable.size(); for (int i = 0; i < tableSize; ++i) colorTableRGB16[i] = qConvertRgb32To16(data->colortable.at(i)); data->colortable = QVector(); From 557abfc3275f74d3dd537d7bca86e15860d072e9 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 20 Oct 2016 08:50:42 +0200 Subject: [PATCH 109/196] QUrl effective TLDs: update table There are more than 1000 new entries since the table has been generated the last time. The autotest needs to be tweaked because the rules for the .mz domains have changed; use the .ck domain instead. Change-Id: Ife692afd46ac41a66604e966e5e8cb57c7aa649c Reviewed-by: Thiago Macieira --- src/corelib/io/qurltlds_p.h | 24247 ++++++++-------- src/corelib/io/qurltlds_p.h.INFO | 4 +- .../tst_qnetworkcookiejar.cpp | 14 +- 3 files changed, 12906 insertions(+), 11359 deletions(-) diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h index 69d0701faa..c823104b84 100644 --- a/src/corelib/io/qurltlds_p.h +++ b/src/corelib/io/qurltlds_p.h @@ -58,11678 +58,13225 @@ QT_BEGIN_NAMESPACE // this file should be updated before each release -> // for instructions see the program at // util/corelib/qurl-generateTLDs -static const quint16 tldCount = 7150; + +static const quint16 tldCount = 8101; static const quint32 tldIndices[] = { 0, -40, -40, -49, -49, -49, -71, -95, -95, -110, -123, -123, -151, -189, -189, -189, -189, -189, -189, -189, -189, -189, -202, -202, -202, -208, -219, -219, -219, -219, -219, -238, -249, -278, -294, -301, -312, -312, -317, -317, -317, -323, -330, -406, -406, -467, -467, -500, -500, -500, -512, -533, -533, -533, -533, -533, -542, -574, -580, -620, -620, -633, -645, -645, -659, -659, -659, -685, -685, +15, +43, +55, +60, +70, +80, +101, +101, +154, +169, +169, +169, +184, +184, +195, +217, +217, +235, +255, +276, +296, +296, +314, +345, +350, +350, +358, +384, +400, +424, +424, +431, +452, +472, +508, +508, +508, +508, +525, +558, +581, +581, +594, +608, +608, +628, +628, +652, +680, +680, 703, -703, -721, -721, -721, -737, -744, -744, -756, +722, +722, +760, 768, -774, -774, -774, -784, -784, -802, -841, -882, -882, -882, -882, -905, -924, -935, -950, -960, -960, -972, -983, -983, -983, -990, -997, -1017, -1037, -1045, -1045, -1045, -1063, -1069, -1085, -1085, -1085, -1085, -1085, -1085, -1085, -1136, -1145, -1183, -1183, -1225, -1225, -1241, -1241, -1259, -1282, -1305, -1305, -1358, -1358, -1370, -1370, -1383, -1383, -1430, -1430, -1430, -1457, -1466, -1472, -1472, -1472, -1472, -1486, -1518, -1564, -1593, -1614, -1661, -1675, -1675, -1691, -1719, -1730, -1750, -1750, -1755, -1759, -1773, -1797, -1823, -1841, -1848, +768, +788, +788, +814, +847, +847, +865, +895, +895, +930, +930, +936, +964, +991, +1025, +1042, +1061, +1061, +1082, +1098, +1098, +1098, +1111, +1135, +1141, +1141, +1141, +1160, +1192, +1192, +1192, +1192, +1192, +1192, +1207, +1207, +1214, +1219, +1219, +1219, +1242, +1255, +1255, +1255, +1272, +1291, +1291, +1291, +1309, +1334, +1372, +1376, +1376, +1385, +1419, +1419, +1419, +1427, +1442, +1442, +1450, +1450, +1469, +1508, +1533, +1533, +1574, +1582, +1582, +1592, +1625, +1643, +1643, +1653, +1653, +1664, +1664, +1687, +1687, +1731, +1742, +1760, +1760, +1760, +1775, +1788, +1815, +1815, +1815, +1815, +1827, +1842, +1850, +1850, +1874, +1874, 1887, -1894, -1911, -1918, -1923, -1929, -1966, -1966, -1973, -1973, -1973, -1990, -2041, -2059, -2075, -2093, -2093, -2093, -2127, -2136, -2152, -2159, -2178, -2201, +1887, +1887, +1917, +1931, +1962, +1962, +1962, +2002, +2017, +2073, +2073, +2103, +2103, +2120, +2160, +2168, +2168, +2176, +2193, +2199, +2199, +2205, 2212, -2219, -2219, -2219, -2233, -2240, -2247, -2247, -2273, +2212, +2226, +2226, +2226, +2226, +2261, +2282, 2298, -2298, -2305, -2330, -2377, -2410, -2461, -2468, -2511, -2511, -2524, -2524, -2530, -2547, -2560, -2576, -2583, -2599, -2599, -2599, -2599, -2599, -2628, -2671, -2692, -2697, -2726, -2726, -2756, -2756, -2775, -2775, -2787, -2814, -2814, -2839, -2853, -2869, -2901, -2949, -2949, -2972, -2972, -2979, -2997, -3003, -3014, -3014, -3014, -3014, -3014, -3014, -3043, -3043, -3070, -3070, +2316, +2316, +2316, +2316, +2316, +2373, +2373, +2390, +2390, +2397, +2412, +2428, +2435, +2435, +2443, +2443, +2451, +2458, +2504, +2504, +2510, +2510, +2510, +2517, +2544, +2555, +2573, +2612, +2627, +2627, +2650, +2657, +2664, +2674, +2691, +2698, +2706, +2713, +2713, +2729, +2743, +2750, +2781, +2781, +2796, +2796, +2809, +2816, +2836, +2866, +2887, +2894, +2943, +2950, +2950, +2950, +2950, +2970, +2970, +3002, +3002, +3015, +3022, +3032, +3059, +3069, +3084, 3091, 3091, -3097, -3108, -3108, -3108, +3098, +3098, +3107, 3125, -3182, -3232, -3283, -3283, -3292, -3312, -3319, -3359, -3379, -3406, -3433, -3441, -3448, -3459, -3466, -3466, -3466, -3466, -3466, -3473, -3491, -3498, -3524, -3524, -3568, -3605, -3605, -3618, -3618, -3618, -3632, -3632, -3632, -3632, -3645, -3645, -3652, -3662, -3662, -3701, -3708, +3132, +3140, +3172, +3189, +3205, +3218, +3224, +3231, +3255, +3261, +3261, +3261, +3261, +3279, +3285, +3296, +3310, +3317, +3317, +3333, +3352, +3362, +3362, +3362, +3362, +3404, +3404, +3404, +3404, +3404, +3404, +3415, +3428, +3428, +3483, +3503, +3503, +3530, +3555, +3562, +3562, +3578, +3593, +3600, +3622, +3629, +3644, +3663, +3663, +3685, +3685, +3685, +3685, 3713, -3729, -3742, -3767, -3799, -3799, -3806, -3806, -3824, -3824, -3839, -3839, -3854, -3876, -3883, -3883, -3890, -3896, -3939, -3939, -3953, -3953, -3953, -3953, -3988, +3730, +3757, +3775, +3775, +3775, +3800, +3815, +3815, +3815, +3815, +3815, +3900, +3900, +3950, +3950, +3959, +3959, +3959, +3974, 4005, -4019, -4039, -4039, -4058, -4069, -4094, -4101, -4139, -4146, -4174, -4206, -4221, -4221, -4237, -4237, -4254, -4270, -4277, -4301, -4301, -4301, -4301, -4327, -4327, -4334, -4341, -4361, -4361, -4368, -4391, -4403, -4403, -4416, -4416, -4423, -4448, -4448, -4448, -4500, -4534, -4543, -4543, -4562, -4569, -4576, -4613, -4632, -4639, -4646, -4670, -4670, -4670, -4677, -4695, -4695, -4695, -4702, -4720, -4734, -4734, -4734, -4734, -4741, -4741, -4741, -4748, -4748, -4762, -4785, -4792, -4823, -4823, -4861, -4886, -4886, -4886, -4922, -4922, -4932, -4939, -4939, -4939, -4946, -4953, -4953, -4977, -4977, -4977, -4984, -5009, -5028, -5080, -5080, -5080, -5080, -5110, -5117, -5132, -5143, -5167, -5184, -5184, -5184, -5209, -5209, -5230, -5230, -5238, -5260, -5289, -5289, -5298, -5315, -5315, -5315, +4070, +4141, +4141, +4160, +4177, +4177, +4207, +4235, +4263, +4274, +4280, +4280, +4290, +4321, +4338, +4381, +4396, +4402, +4446, +4461, +4461, +4461, +4485, +4496, +4512, +4528, +4580, +4580, +4624, +4650, +4650, +4650, +4672, +4714, +4714, +4721, +4728, +4751, +4769, +4769, +4769, +4783, +4783, +4783, +4807, +4814, +4821, +4821, +4839, +4892, +4908, +4908, +4908, +4915, +4952, +4952, +4959, +4966, +4973, +4973, +4980, +4999, +5032, +5039, +5057, +5095, +5112, +5127, +5127, +5144, +5151, +5172, +5172, +5186, +5200, +5215, +5236, +5263, +5294, +5294, +5294, +5310, +5310, +5320, +5320, +5350, 5350, -5356, -5356, -5356, -5356, 5370, 5392, -5413, -5430, -5437, -5471, -5502, -5514, -5514, -5534, -5552, -5559, -5559, -5616, -5651, -5657, -5657, -5657, -5674, -5681, -5681, -5681, -5702, -5709, -5745, -5764, -5776, -5776, -5812, -5827, -5849, -5875, -5892, -5913, -5913, -5920, -5935, -5980, -5987, -6024, -6024, -6041, -6058, +5392, +5419, +5419, +5419, +5426, +5426, +5426, +5433, +5449, +5449, +5455, +5468, +5481, +5487, +5487, +5521, +5581, +5581, +5604, +5604, +5617, +5624, +5631, +5631, +5666, +5666, +5692, +5705, +5719, +5726, +5746, +5761, +5777, +5789, +5795, +5802, +5815, +5833, +5839, +5846, +5846, +5846, +5868, +5868, +5887, +5899, +5910, +5927, +5937, +5937, +5974, +5996, +6019, +6019, +6027, +6027, +6033, 6066, -6103, -6103, -6103, -6127, -6127, -6137, -6157, -6223, -6248, -6297, -6297, -6297, -6325, -6332, -6355, -6355, -6382, -6408, -6423, -6423, -6423, -6440, -6452, -6462, -6482, -6482, -6482, -6500, -6500, -6518, -6518, -6518, -6526, -6535, -6535, -6542, +6066, +6088, +6095, +6109, +6123, +6130, +6130, +6168, +6176, +6176, +6176, +6176, +6183, +6183, +6190, +6207, +6235, +6254, +6254, +6266, +6293, +6293, +6308, +6329, +6341, +6360, +6367, +6407, +6413, +6431, +6460, +6467, +6467, +6488, +6510, +6510, +6538, 6560, -6570, -6585, -6604, -6604, -6604, -6604, -6617, -6626, -6626, -6626, -6654, -6654, -6680, -6695, -6695, -6695, -6706, -6706, -6736, -6736, -6766, -6766, -6766, -6766, -6766, -6775, -6775, -6775, -6786, -6825, -6825, -6834, -6854, -6854, -6854, -6897, -6915, -6915, -6960, -7002, +6575, +6589, +6589, +6589, +6589, +6606, +6606, +6614, +6629, +6629, +6635, +6647, +6667, +6696, +6696, +6703, +6712, +6712, +6752, +6759, +6759, +6791, +6815, +6815, +6822, +6859, +6859, +6875, +6900, +6906, +6913, +6942, +6981, +6996, +6996, 7015, -7077, -7155, -7207, -7222, -7250, -7284, -7284, -7297, -7334, -7357, -7357, -7373, -7373, -7373, -7398, -7411, -7424, -7458, -7470, -7508, -7508, -7531, -7538, -7554, +7015, +7015, +7022, +7044, +7044, +7062, +7062, +7062, +7089, +7102, +7102, +7150, +7159, +7186, +7194, +7204, +7204, +7226, +7256, +7264, +7277, +7302, +7316, +7316, +7351, +7387, +7410, +7410, +7410, +7421, +7463, +7463, +7463, +7463, +7463, +7499, +7521, +7521, +7550, 7566, -7580, -7612, -7612, -7612, -7619, -7629, -7636, -7648, -7682, -7682, -7701, -7712, -7712, -7712, -7719, -7719, -7746, -7746, -7746, -7770, -7770, -7770, -7770, -7770, -7795, -7847, -7847, -7847, -7868, -7868, -7877, -7893, -7910, -7942, -7976, -7976, -8015, -8020, -8031, -8031, -8040, -8040, -8059, -8071, -8092, -8123, -8136, -8136, -8136, -8141, -8141, -8141, -8148, -8148, -8193, -8193, -8210, -8230, -8247, -8247, -8264, -8296, -8317, -8332, -8332, -8332, -8364, -8392, -8403, -8421, -8421, -8441, -8441, -8441, -8441, -8441, -8460, -8474, -8487, -8508, -8508, -8508, -8526, -8540, -8540, -8540, -8540, -8572, -8596, -8641, -8641, -8641, -8686, -8686, -8686, -8695, -8695, -8714, -8735, -8744, -8775, -8780, +7600, +7627, +7627, +7627, +7641, +7652, +7665, +7677, +7677, +7677, +7693, +7709, +7709, +7725, +7725, +7757, +7757, +7811, +7817, +7874, +7886, +7905, +7905, +7905, +7905, +7929, +7929, +7958, +7972, +7988, +7988, +7988, +8007, +8038, +8078, +8078, +8084, +8084, +8111, +8111, +8111, +8118, +8118, +8118, +8118, +8118, +8118, +8128, +8147, +8159, +8166, +8166, +8191, +8191, +8229, +8229, +8229, +8229, +8229, +8251, +8258, +8258, +8258, +8258, +8258, +8263, +8263, +8272, +8290, +8301, +8301, +8333, +8333, +8350, +8357, +8408, +8408, +8408, +8425, +8469, +8469, +8504, +8545, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8552, +8575, +8608, +8608, +8608, +8634, +8652, +8652, +8673, +8673, +8673, +8673, +8688, +8688, +8717, +8717, +8762, +8762, +8762, +8779, 8802, -8802, -8802, -8802, -8835, -8842, -8894, -8894, -8908, -8908, -8908, -8942, -8967, -8967, -9008, -9008, -9023, -9035, -9035, -9035, -9052, -9079, -9087, -9087, -9127, -9139, -9139, -9173, -9173, -9199, -9208, -9235, -9235, -9249, -9249, -9259, -9259, -9267, -9285, -9300, -9300, -9322, -9337, -9342, -9342, -9348, -9407, -9418, -9434, -9434, -9455, -9455, -9455, -9469, -9489, -9489, -9527, -9527, -9527, -9568, -9568, -9568, -9578, -9603, -9610, -9610, -9610, -9621, -9621, -9625, -9641, -9649, -9649, -9649, -9667, -9667, -9667, -9680, -9709, -9709, -9739, -9739, -9766, -9775, -9783, -9790, -9810, -9810, -9828, -9828, -9853, -9867, -9867, -9867, -9867, -9884, -9884, -9900, -9900, -9936, -9954, -9954, -9977, -9987, -9987, -9994, -9994, -10009, -10009, -10009, -10029, -10047, -10047, -10062, -10076, -10076, -10100, -10106, -10106, -10113, -10129, -10143, -10166, -10166, -10198, -10208, -10208, -10229, -10251, -10251, -10275, -10275, -10281, -10314, -10333, -10333, -10333, -10357, -10357, -10378, -10386, -10398, -10420, -10443, -10461, -10480, -10488, -10498, -10498, -10498, -10498, -10528, -10528, -10534, -10534, -10534, -10534, -10534, -10534, -10534, -10558, -10579, -10595, -10595, -10595, -10595, -10611, -10611, +8812, +8844, +8844, +8850, +8862, +8887, +8893, +8928, +8946, +8978, +9010, +9010, +9010, +9010, +9041, +9047, +9047, +9047, +9054, +9054, +9054, +9054, +9054, +9061, +9061, +9098, +9117, +9129, +9162, +9179, +9179, +9185, +9221, +9221, +9244, +9258, +9288, +9295, +9307, +9307, +9307, +9314, +9356, +9356, +9372, +9372, +9403, +9425, +9430, +9430, +9447, +9447, +9454, +9496, +9528, +9535, +9543, +9570, +9577, +9577, +9619, +9619, +9626, +9640, +9647, +9672, +9687, +9694, +9705, +9770, +9820, +9827, +9843, +9861, +9874, +9886, +9893, +9916, +9931, +9931, +9941, +9968, +10012, +10030, +10045, +10045, +10052, +10068, +10104, +10104, +10111, +10111, +10126, +10136, +10144, +10144, +10151, +10157, +10164, +10176, +10197, +10197, +10197, +10222, +10222, +10222, +10245, +10276, +10292, +10298, +10318, +10318, +10346, +10353, +10353, +10360, +10360, +10371, +10395, +10395, +10405, +10413, +10413, +10413, +10440, +10440, +10448, +10481, +10481, +10481, +10495, +10495, +10495, +10509, +10516, +10525, +10543, +10550, +10550, +10594, +10594, 10634, -10659, -10659, -10659, -10659, -10659, -10659, -10698, -10716, -10741, -10749, -10768, -10801, -10813, -10842, -10842, -10860, -10860, -10879, -10917, -10939, -10958, -10964, -10964, -10986, -10994, -11000, -11005, -11005, -11005, -11021, -11031, -11031, -11031, -11050, -11077, -11077, -11091, -11091, -11110, -11110, -11120, -11139, +10634, +10641, +10641, +10648, +10648, +10648, +10660, +10687, +10718, +10718, +10746, +10785, +10794, +10812, +10820, +10832, +10849, +10863, +10863, +10870, +10887, +10897, +10897, +10897, +10944, +10970, +10970, +10970, +11003, +11019, +11074, +11074, +11081, +11081, +11111, +11131, +11150, +11164, 11187, -11187, -11187, -11187, -11187, -11219, -11249, -11260, -11283, -11299, -11330, -11330, -11330, -11330, -11340, -11340, -11340, -11340, -11346, -11391, -11391, -11397, -11397, -11397, -11408, -11408, -11431, -11452, -11452, +11207, +11228, +11243, +11243, +11243, +11243, +11258, +11273, +11279, +11310, +11310, +11310, +11322, +11361, +11361, +11389, +11417, +11430, +11436, +11436, +11436, +11453, +11461, +11475, +11482, 11489, -11505, -11526, -11526, -11526, -11526, -11543, -11563, -11580, -11599, -11599, -11599, -11599, -11636, -11636, -11636, +11528, +11545, +11575, +11616, +11632, +11668, +11668, 11675, -11675, -11675, -11675, -11695, -11695, -11695, -11703, -11712, -11725, -11734, -11743, -11771, -11812, -11838, +11689, +11696, +11714, +11714, +11714, +11714, +11714, +11714, +11721, +11721, +11739, +11739, +11758, +11799, +11817, +11824, +11824, +11831, 11848, 11870, +11870, 11888, -11903, -11903, -11910, -11938, -11938, -11938, -11956, -11956, -11986, -11986, -11994, -12007, -12017, -12017, -12053, -12066, -12066, -12066, -12066, -12066, -12066, -12076, -12088, -12099, -12099, -12117, -12117, -12127, -12146, -12146, -12146, +11888, +11895, +11902, +11927, +11934, +11941, +11971, +12005, +12012, +12069, +12087, +12087, +12106, +12126, +12126, +12140, +12140, +12140, +12147, +12153, 12165, -12165, -12165, -12165, -12172, -12176, -12176, -12176, -12191, -12191, -12201, -12217, -12217, -12241, -12241, -12241, -12255, -12255, -12269, -12269, -12310, -12310, -12333, -12351, -12366, -12366, -12377, -12412, -12435, -12453, -12453, -12453, -12457, -12489, -12489, -12489, -12501, -12523, -12523, -12547, -12569, -12628, -12628, -12628, -12628, -12628, -12638, -12687, -12705, -12705, -12715, -12732, -12732, -12750, -12750, -12750, -12750, -12750, -12750, -12763, -12763, -12772, -12772, -12827, -12863, -12870, -12880, -12886, -12902, -12916, -12944, -12944, +12186, +12194, +12199, +12207, +12207, +12207, +12213, +12229, +12236, +12243, +12243, +12243, +12250, +12259, +12270, +12270, +12277, +12284, +12284, +12291, +12300, +12309, +12345, +12373, +12385, +12385, +12404, +12404, +12424, +12431, +12475, +12494, +12494, +12494, +12494, +12515, +12522, +12532, +12540, +12578, +12597, +12636, +12636, +12636, +12636, +12636, +12651, +12651, +12693, +12693, +12711, +12720, +12720, +12720, +12720, +12739, +12766, +12787, +12794, +12794, +12826, +12833, +12862, +12869, +12890, +12890, +12910, +12917, +12934, +12934, +12949, 12956, 12956, -12977, -12983, -12993, -13011, -13022, -13059, -13066, -13066, -13113, -13113, -13120, -13120, -13132, -13143, -13154, -13154, -13154, -13160, -13160, -13164, -13164, -13164, -13203, -13222, -13222, -13244, -13250, -13267, -13272, -13301, -13319, -13319, -13319, -13319, -13319, -13338, -13350, -13350, -13350, -13355, -13362, -13362, -13374, -13396, -13408, -13408, -13408, -13433, -13454, -13454, -13454, -13511, -13522, -13541, -13550, -13550, -13563, -13580, -13585, -13585, -13585, -13585, -13585, -13598, -13628, -13634, -13634, -13654, -13679, -13684, -13693, -13723, -13740, -13740, -13747, -13791, +12963, +12989, +12997, +13021, +13021, +13021, +13028, +13028, +13035, +13054, +13070, +13077, +13107, +13119, +13119, +13126, +13140, +13163, +13163, +13216, +13228, +13251, +13275, +13329, +13329, +13386, +13404, +13410, +13410, +13416, +13429, +13445, +13445, +13445, +13473, +13480, +13480, +13487, +13487, +13500, +13555, +13568, +13574, +13607, +13627, +13627, +13644, +13658, +13665, +13685, +13691, +13691, +13691, +13706, +13719, +13726, +13738, +13776, +13795, +13795, 13805, -13805, -13834, -13868, -13893, -13910, +13813, +13813, +13813, +13813, +13827, +13827, +13833, +13833, +13840, +13892, +13901, 13920, -13920, -13940, -13940, -13960, -13977, -13977, -13988, -13988, -13999, -13999, -13999, -13999, -14025, -14025, -14025, -14044, -14059, -14059, -14059, -14096, +13933, +13966, +13966, +13966, +13998, +14033, +14046, +14060, +14060, +14075, +14075, +14075, 14112, -14143, -14156, -14156, -14169, -14173, -14193, -14193, -14193, -14197, -14197, -14197, -14222, -14222, +14129, +14129, +14129, +14129, +14129, +14129, +14139, +14167, +14167, +14211, +14220, +14220, 14231, 14231, -14231, -14231, -14251, -14251, -14251, -14256, -14260, -14287, -14287, -14309, -14309, -14309, -14309, -14361, -14361, -14380, -14380, -14396, -14440, -14448, -14448, -14448, -14461, -14486, -14486, -14486, -14500, -14500, -14500, -14500, -14500, -14500, -14525, -14531, -14538, -14556, -14578, -14578, -14601, -14601, -14601, -14601, -14615, -14615, -14615, -14626, -14626, -14637, -14654, -14688, -14688, -14719, -14735, -14744, -14749, -14749, -14749, -14749, -14749, -14786, -14808, -14808, -14822, -14867, -14882, -14887, -14899, -14899, +14248, +14248, +14266, +14288, +14307, +14352, +14397, +14404, +14404, +14423, +14455, +14480, +14480, +14509, +14509, +14535, +14541, +14541, +14541, +14541, +14541, +14554, +14554, +14561, +14600, +14618, +14618, +14618, +14618, +14634, +14649, +14649, +14649, +14662, +14662, +14667, +14686, +14720, +14753, +14774, +14806, +14806, +14826, +14826, +14848, +14848, +14848, +14866, +14879, +14879, +14879, +14879, +14879, +14888, 14906, -14916, -14958, -14958, -14958, -14968, -15000, -15031, -15051, -15056, -15060, -15079, -15079, -15096, -15116, -15133, -15133, -15133, -15133, -15133, -15145, -15145, -15182, -15209, -15218, -15218, -15239, -15282, -15282, -15282, -15282, -15304, -15318, -15338, -15364, -15383, -15402, -15426, -15480, -15491, -15491, -15491, -15507, -15530, -15543, -15543, -15543, -15571, -15571, -15571, -15578, -15595, -15612, -15621, -15621, -15621, -15634, -15662, -15662, -15666, +14929, +14949, +14949, +14981, +14996, +15019, +15019, +15037, +15070, +15092, +15092, +15092, +15113, +15128, +15128, +15163, +15163, +15187, +15223, +15223, +15223, +15241, +15241, +15241, +15278, +15299, +15309, +15331, +15331, +15331, +15342, +15342, +15342, +15352, +15352, +15368, +15368, +15374, +15386, +15386, +15386, +15386, +15386, +15392, +15421, +15434, +15434, +15434, +15434, +15472, +15489, +15489, +15500, +15500, +15506, +15539, +15560, +15560, +15560, +15560, +15582, +15587, +15602, +15610, +15624, +15650, +15656, +15672, 15681, -15705, -15705, -15705, 15711, 15711, -15716, -15716, -15716, -15728, -15728, -15758, -15782, -15791, -15791, -15801, -15823, -15833, -15851, -15871, -15871, -15889, -15897, -15897, -15914, -15914, -15926, -15947, -15968, -15974, -15974, -15998, -16015, -16028, -16052, -16063, -16063, -16069, -16075, -16087, -16087, -16093, -16131, -16131, -16142, -16142, -16153, +15711, +15711, +15711, +15718, +15730, +15752, +15752, +15759, +15759, +15772, +15778, +15788, +15788, +15798, +15807, +15807, +15829, +15829, +15829, +15843, +15843, +15843, +15888, +15931, +15980, +15993, +16020, +16025, +16056, +16074, +16081, +16146, +16146, 16173, -16205, -16205, -16205, -16228, -16251, -16251, -16251, -16291, -16291, -16298, -16312, -16327, -16327, -16336, -16346, -16346, -16366, -16391, -16406, -16406, -16406, -16449, -16449, -16449, +16197, +16210, +16210, +16210, +16225, +16265, +16280, +16290, +16308, +16321, +16321, +16321, +16321, +16332, +16341, +16353, +16389, +16389, +16399, +16427, +16439, +16450, 16473, -16473, -16491, -16501, -16510, -16510, -16510, -16510, -16516, -16516, -16535, -16535, -16552, -16573, -16588, -16588, -16588, -16597, -16635, -16700, -16738, -16743, -16743, -16754, -16765, -16765, -16774, -16783, -16783, -16783, -16783, -16812, -16812, -16827, -16833, -16833, -16874, -16906, +16505, +16505, +16518, +16554, +16554, +16554, +16565, +16577, +16595, +16614, +16622, +16622, +16622, +16654, +16654, +16685, +16697, +16697, +16697, +16697, +16719, +16719, +16752, +16766, +16798, +16798, +16798, +16820, +16828, +16847, +16847, +16854, +16860, +16870, +16877, +16877, +16901, 16919, -16928, -16942, -16955, -16982, -17004, -17020, -17020, -17020, -17020, -17020, -17028, -17041, -17053, -17053, -17058, -17072, -17072, -17092, -17138, -17138, -17155, -17155, -17155, -17155, -17168, -17168, -17182, -17205, -17214, -17214, -17214, -17220, -17238, -17238, -17245, -17291, -17313, -17313, -17322, -17361, -17398, -17435, -17435, -17450, -17450, -17450, -17486, -17493, -17493, -17493, -17497, -17497, -17497, -17497, -17497, -17497, -17497, -17527, -17531, -17551, -17551, -17568, -17586, -17603, -17603, -17603, -17616, -17622, -17622, -17622, -17622, -17647, -17677, -17717, -17727, -17749, -17781, -17813, -17813, -17830, -17879, -17879, -17906, -17932, -17932, -17932, -17932, -17932, +16952, +16972, +16972, +16986, +16986, +17029, +17055, +17067, +17080, +17099, +17124, +17124, +17124, +17124, +17144, +17151, +17158, +17163, +17163, +17178, +17195, +17195, +17210, +17244, +17244, +17244, +17262, +17272, +17290, +17308, +17308, +17321, +17321, +17333, +17351, +17364, +17364, +17379, +17406, +17406, +17424, +17443, +17500, +17500, +17507, +17520, +17538, +17545, +17560, +17597, +17597, +17597, +17597, +17608, +17641, +17652, +17673, +17673, +17689, +17689, +17707, +17732, +17748, +17748, +17790, +17790, +17790, +17820, +17820, +17820, +17820, +17820, +17836, +17855, +17866, +17866, +17866, +17904, 17947, -17981, -17988, -18011, -18011, -18011, -18011, -18011, -18011, -18011, -18019, -18026, -18026, -18039, -18039, -18039, -18039, -18047, -18079, -18079, -18084, -18125, -18138, -18138, -18138, -18138, -18147, -18147, -18147, -18147, -18147, -18147, -18163, -18182, -18182, -18193, -18193, -18193, -18204, -18204, -18204, -18204, -18204, -18204, -18213, -18235, -18257, -18283, -18283, -18304, -18334, -18352, -18367, -18367, -18367, -18387, -18396, -18403, -18403, -18413, -18413, -18444, -18444, -18468, -18478, -18499, -18506, -18517, -18526, -18526, -18544, -18563, -18563, -18563, -18563, -18579, -18603, -18603, -18621, +17958, +17979, +17993, +18009, +18021, +18021, +18033, +18033, +18043, +18067, +18103, +18140, +18150, +18164, +18188, +18188, +18196, +18211, +18236, +18236, +18255, +18255, +18255, +18255, +18255, +18255, +18285, +18300, +18300, +18324, +18333, +18360, +18388, +18425, +18443, +18457, +18466, +18466, +18466, +18482, +18482, +18482, +18515, +18538, +18538, +18555, +18565, 18631, 18631, 18631, 18631, -18638, -18638, -18638, -18638, -18662, -18703, -18703, -18703, -18703, -18715, -18723, -18741, -18759, -18798, -18814, -18834, -18853, -18853, -18871, -18881, -18935, -18935, -18962, -18962, -18962, -18962, -18978, -18987, -18987, -18987, -19014, -19027, -19037, -19060, -19060, -19060, -19060, -19109, -19134, -19149, -19170, -19170, -19188, -19195, -19211, +18631, +18631, +18631, +18631, +18644, +18644, +18669, +18669, +18686, +18686, +18706, +18718, +18751, +18769, +18776, +18783, +18783, +18783, +18783, +18783, +18783, +18803, +18836, +18845, +18845, +18856, +18856, +18864, +18864, +18878, +18878, +18878, +18878, +18885, +18891, +18901, +18926, +18926, +18937, +18961, +18981, +18981, +18981, +18981, +18988, +19002, +19028, +19078, +19078, +19078, +19098, +19104, +19151, +19151, +19158, +19182, +19198, +19198, +19198, +19213, 19233, -19248, -19257, -19275, -19278, -19323, -19326, -19366, -19378, -19378, -19381, -19381, -19394, -19414, -19417, -19420, -19433, -19456, -19462, -19468, -19494, -19497, -19503, -19539, -19561, -19567, -19570, -19576, -19576, -19576, -19599, -19599, -19633, -19633, -19643, -19651, -19662, -19695, -19711, -19740, -19758, -19783, -19789, -19792, -19802, -19825, -19838, -19841, -19870, -19900, -19900, -19930, -19930, -19974, -20013, -20052, -20059, -20079, -20085, -20101, -20113, -20126, -20129, -20169, -20180, +19233, +19233, +19243, +19243, +19300, +19350, +19350, +19368, +19368, +19393, +19423, +19434, +19434, +19451, +19466, +19477, +19477, +19498, +19498, +19519, +19543, +19550, +19550, +19557, +19557, +19557, +19557, +19590, +19590, +19595, +19595, +19595, +19626, +19626, +19636, +19678, +19678, +19697, +19703, +19703, +19703, +19722, +19735, +19761, +19782, +19782, +19782, +19782, +19808, +19808, +19814, +19814, +19814, +19830, +19830, +19830, +19830, +19840, +19840, +19852, +19875, +19894, +19894, +19894, +19915, +19915, +19922, +19922, +19922, +19953, +19968, +19984, +19997, +20012, +20028, +20068, +20099, +20099, +20117, +20148, +20148, +20155, +20155, +20165, +20195, 20220, 20220, -20230, -20264, -20264, -20289, -20296, -20299, -20299, -20299, -20308, -20308, -20358, -20374, -20374, -20388, -20396, -20402, -20402, -20428, -20468, -20493, -20493, +20250, +20250, +20275, +20287, +20287, +20321, +20321, +20321, +20355, +20370, +20395, +20410, +20432, +20435, +20463, +20466, +20466, +20479, +20499, +20499, +20502, 20517, -20524, -20534, -20551, -20593, -20608, -20611, -20611, -20618, -20632, -20635, -20657, -20657, -20677, -20704, -20707, -20734, -20751, -20754, -20774, -20794, -20813, -20816, -20819, -20830, -20839, -20842, -20855, -20865, -20868, -20868, -20868, -20881, -20888, -20891, -20891, -20933, -20933, -20936, -20939, -20939, -20963, -20963, -20998, -21005, -21063, -21111, -21118, -21118, -21141, -21147, -21164, -21164, -21171, -21209, -21230, -21253, -21273, -21283, -21300, -21332, -21347, -21379, -21386, -21397, -21404, -21412, -21419, -21419, -21419, -21434, -21434, -21451, -21494, -21501, -21508, -21526, +20554, +20613, +20613, +20658, +20672, +20716, +20741, +20769, +20772, +20795, +20801, +20836, +20852, +20852, +20873, +20876, +20930, +20949, +20970, +20987, +20990, +21010, +21016, +21016, +21022, +21035, +21038, +21044, +21047, +21062, +21065, +21094, +21114, +21126, +21126, +21145, +21166, +21166, +21173, +21226, +21291, +21313, +21331, +21331, +21337, +21340, +21340, +21359, +21378, +21387, +21421, +21439, +21452, +21460, +21460, +21463, +21485, +21520, +21537, +21537, 21540, -21549, -21549, -21565, -21565, -21575, +21540, +21540, +21540, +21558, +21586, +21586, 21607, -21625, -21663, -21703, -21713, +21607, +21621, +21634, +21654, +21654, +21671, +21671, +21674, +21674, +21674, +21674, +21677, +21683, +21686, +21698, +21716, 21746, -21797, -21811, -21817, -21833, +21764, +21767, +21789, +21813, +21816, +21819, +21822, 21839, -21846, -21865, -21865, -21872, -21943, -21954, -21957, -21995, -22002, -22019, -22026, -22044, -22057, -22060, -22073, -22090, -22103, -22106, -22116, -22126, -22129, +21854, +21873, +21886, +21889, +21902, +21905, +21908, +21947, +21965, +21994, +21994, +22001, +22004, +22020, +22023, +22023, +22034, +22034, +22037, +22059, +22059, +22065, +22065, +22068, +22091, +22130, 22136, -22139, -22163, -22187, -22190, -22203, -22206, -22224, -22249, -22255, -22282, -22293, -22319, -22325, -22349, -22365, -22365, -22386, -22408, -22408, -22408, -22420, -22420, -22420, -22447, -22472, -22493, -22548, -22564, -22581, -22601, -22608, -22611, -22622, -22622, -22625, -22632, -22649, -22675, +22164, +22205, +22205, +22205, +22227, +22235, +22238, +22241, +22263, +22266, +22272, +22317, +22320, +22328, +22344, +22353, +22359, +22368, +22380, +22405, +22427, +22427, +22427, +22441, +22489, +22512, +22531, +22552, +22575, +22591, +22591, +22629, +22629, +22658, +22677, 22691, -22698, -22720, -22736, -22739, -22742, -22756, -22785, -22811, -22864, -22881, -22921, -22924, -22950, -22950, +22691, +22721, +22721, +22730, +22733, +22741, +22757, +22760, +22775, +22788, +22795, +22804, +22809, +22809, +22847, +22894, +22916, 22966, -22969, -22986, -23024, -23043, -23063, -23063, -23079, -23113, -23124, +22966, +22993, +23007, +23044, +23066, +23100, +23110, 23124, 23135, -23175, -23175, -23190, -23190, -23224, -23238, -23245, -23252, -23259, -23274, -23283, -23310, -23310, -23310, -23310, -23310, -23310, -23336, -23349, -23359, -23359, -23380, -23421, -23447, -23457, -23471, -23471, -23484, -23516, -23551, -23569, -23572, -23575, -23599, -23609, -23612, -23635, -23651, -23680, -23690, +23156, +23159, +23182, +23185, +23188, +23188, +23201, +23204, +23219, +23222, +23232, +23241, +23253, +23276, +23306, +23323, +23329, +23341, +23367, +23383, +23386, +23402, +23416, +23452, +23459, +23478, +23481, +23481, +23488, +23504, +23518, +23518, +23521, +23540, +23561, +23570, +23570, +23573, +23587, +23620, +23633, +23659, +23671, +23671, +23681, +23681, +23687, +23694, 23714, -23753, -23777, -23789, -23849, -23859, -23872, -23882, -23892, -23911, -23931, -23934, -23937, -23960, -23970, -23982, -23998, -24016, -24053, -24066, -24090, +23767, +23767, +23770, +23786, +23823, +23826, +23845, +23856, +23876, +23876, +23876, +23896, +23923, +23944, +23955, +23979, +23990, +23993, +24000, +24003, +24021, +24021, +24021, +24021, +24029, +24035, +24035, +24035, +24035, +24046, +24046, +24049, +24077, 24097, -24100, -24110, -24146, -24165, -24179, +24106, +24150, +24150, +24150, +24169, 24186, -24193, -24196, -24240, -24253, -24270, -24280, -24312, -24329, -24329, -24342, -24345, -24354, -24354, +24186, +24216, +24226, +24229, +24232, +24248, +24271, +24286, +24301, +24307, +24332, 24370, -24373, +24391, 24394, -24394, -24405, -24430, -24440, -24462, -24465, -24488, -24502, -24502, -24526, -24533, -24542, -24542, -24559, -24578, -24585, -24617, -24617, -24634, -24648, -24664, -24690, -24690, -24690, -24715, -24715, -24732, -24757, -24764, +24406, +24409, +24412, +24415, +24425, +24425, +24428, +24438, +24444, +24447, +24481, +24505, +24547, +24556, +24562, +24565, +24568, +24594, +24614, +24632, +24632, +24635, +24676, +24705, +24738, +24765, +24773, 24779, -24786, -24786, -24786, -24793, -24830, -24852, -24872, -24872, -24890, -24903, -24903, -24910, -24914, -24921, -24939, -24946, -24977, -24986, -25008, -25022, -25022, -25032, -25035, -25047, -25047, -25073, +24810, +24842, +24881, +24896, +24904, +24919, +24919, +24944, +24944, +24947, +24969, +24994, +25013, +25028, +25034, +25037, +25037, +25060, +25063, +25063, +25063, +25075, +25078, +25078, 25084, -25111, -25111, +25084, +25116, +25116, +25116, 25137, -25137, -25137, -25142, -25142, -25149, -25156, -25163, -25177, -25184, -25197, -25197, -25235, -25261, -25267, -25313, -25333, -25362, -25362, +25140, +25183, +25183, +25214, +25214, +25214, +25214, +25272, +25288, +25315, +25315, +25325, +25351, +25394, 25409, 25409, 25409, -25409, -25427, -25427, -25447, -25447, -25477, -25483, -25490, -25504, -25529, -25536, -25543, -25550, -25573, -25580, -25593, -25612, -25619, -25637, -25651, -25651, -25682, -25703, -25712, -25712, -25712, -25719, -25725, -25725, -25725, -25745, -25763, -25783, -25789, -25809, -25809, -25823, -25829, -25829, -25835, -25847, -25847, -25867, -25886, -25886, -25914, -25914, -25914, -25914, -25914, -25920, -25920, -25927, -25927, -25953, -25961, -25961, -25973, -25994, -25994, -26009, -26009, -26015, -26015, -26015, -26037, -26053, -26089, +25417, +25433, +25433, +25463, +25463, +25463, +25463, +25508, +25508, +25508, +25517, +25541, +25586, +25604, +25622, +25634, +25634, +25644, +25677, +25688, +25723, +25723, +25735, +25750, +25750, +25750, +25785, +25785, +25803, +25830, +25850, +25850, +25850, +25863, +25863, +25913, +25921, +25921, +25930, +25950, +25974, +25974, +25999, +25999, +26023, +26048, +26092, 26098, -26104, -26113, -26118, -26133, -26133, -26133, -26146, -26155, -26155, -26185, -26185, -26202, -26246, -26246, -26246, -26261, -26298, -26298, -26298, -26298, -26316, -26331, -26358, -26367, -26411, -26411, -26411, -26444, -26451, -26458, -26464, -26464, -26464, -26464, -26482, -26482, -26482, -26512, -26512, -26512, -26555, -26555, -26555, -26555, -26587, -26587, -26587, -26587, -26610, -26610, -26620, -26639, -26657, -26673, -26688, -26688, -26723, -26740, -26749, -26765, -26807, -26807, -26877, -26904, -26904, -26945, -26962, -26962, -26982, -26992, -27013, -27030, -27060, -27065, -27104, +26109, +26122, +26190, +26201, +26207, +26216, +26234, +26234, +26248, +26248, +26269, +26269, +26275, +26291, +26346, +26365, +26365, +26365, +26414, +26432, +26438, +26438, +26438, +26438, +26438, +26459, +26469, +26469, +26509, +26532, +26581, +26608, +26615, +26615, +26615, +26615, +26615, +26615, +26615, +26615, +26615, +26645, +26666, +26694, +26694, +26694, +26694, +26694, +26694, +26714, +26714, +26730, +26743, +26796, +26796, +26824, +26844, +26872, +26872, +26878, +26887, +26892, +26912, +26931, +26931, +26949, +26949, +26949, +26949, +26949, +26958, +26994, +27010, +27031, +27053, +27071, 27110, -27119, -27125, -27125, -27125, +27110, +27139, +27139, +27139, +27139, +27139, +27139, +27139, +27144, 27150, -27166, -27166, -27185, -27185, -27207, +27150, +27165, +27184, +27184, +27184, +27202, +27214, +27230, 27246, -27265, -27265, -27286, -27294, -27311, -27331, -27331, -27331, -27331, -27331, -27353, -27353, -27360, -27378, -27402, -27419, -27431, -27431, -27431, -27437, -27506, -27514, -27514, -27514, -27514, -27514, -27514, -27530, -27542, -27550, -27550, -27550, -27550, -27550, -27550, -27585, -27603, -27603, -27635, -27635, -27635, -27642, -27650, -27686, -27686, -27686, -27697, -27717, -27723, -27766, -27808, -27815, -27831, -27831, -27831, -27850, -27866, -27866, -27866, -27866, -27871, -27871, -27877, -27899, -27923, -27948, -27955, -27955, -27964, -27990, -27999, -28015, -28023, -28027, -28052, -28052, -28052, -28059, -28059, -28096, -28096, -28112, -28112, -28124, -28124, -28180, -28180, -28203, -28203, -28212, -28212, -28244, -28279, -28286, -28298, -28298, -28317, -28340, -28340, -28340, -28385, -28406, -28438, -28445, -28462, -28462, -28462, -28462, -28462, -28462, -28488, -28504, -28520, -28558, -28558, -28558, -28563, -28578, -28578, -28578, -28584, -28584, -28584, -28584, -28584, -28600, -28600, -28600, -28600, -28606, -28611, -28611, -28631, -28631, -28655, -28655, -28664, -28664, -28668, -28672, -28672, -28672, -28672, -28700, -28708, -28708, -28730, -28746, -28758, -28758, -28776, +27246, +27255, +27255, +27266, +27266, +27266, +27279, +27279, +27279, +27288, +27296, +27358, +27367, +27367, +27367, +27367, +27367, +27367, +27367, +27395, +27427, +27427, +27451, +27451, +27462, +27462, +27462, +27497, +27508, +27512, +27512, +27538, +27538, +27564, +27564, +27587, +27611, +27626, +27626, +27648, +27648, +27667, +27667, +27691, +27706, +27720, +27734, +27764, +27791, +27791, +27823, +27847, +27847, +27847, +27857, +27863, +27874, +27878, +27878, +27878, +27884, +27891, +27891, +27907, +27929, +27935, +27935, +27935, +27942, +27966, +27966, +27966, +27993, +27993, +27993, +27993, +28009, +28020, +28020, +28020, +28025, +28045, +28066, +28087, +28104, +28117, +28148, +28158, +28167, +28208, +28225, +28254, +28305, +28305, +28310, +28319, +28319, +28319, +28328, +28328, +28359, +28405, +28409, +28409, +28409, +28409, +28440, +28440, +28440, +28440, +28486, +28486, +28486, +28501, +28530, +28530, +28546, +28546, +28569, +28569, +28587, +28650, +28650, +28650, +28650, +28673, +28686, +28686, +28697, +28697, +28732, +28737, +28737, +28749, +28760, +28760, +28772, +28779, 28794, -28801, -28801, -28801, -28811, -28811, -28827, -28834, -28860, -28872, -28887, -28917, -28930, +28841, +28841, +28865, +28865, +28865, +28897, +28920, +28920, +28927, +28934, 28965, -28983, -28983, -29018, -29038, -29051, -29051, -29082, -29082, -29136, -29152, -29172, -29182, -29198, -29198, -29205, -29205, -29219, -29219, -29219, +29022, +29022, +29047, +29065, +29083, +29089, +29125, +29125, +29125, +29125, +29130, +29186, +29186, +29194, +29247, +29257, +29257, 29285, -29299, -29305, -29323, -29323, -29332, -29355, -29390, -29396, +29285, +29285, +29368, +29375, +29402, +29409, +29414, +29421, +29428, +29434, 29447, -29447, -29447, -29460, -29460, -29472, -29472, -29484, -29484, -29484, -29484, -29502, -29502, -29529, +29464, +29473, +29494, +29509, +29509, +29521, +29521, +29533, 29538, -29538, -29538, -29538, -29577, -29589, -29589, -29605, -29624, -29624, -29624, -29624, -29624, -29624, -29632, -29641, -29641, -29650, -29695, -29702, -29702, -29714, +29544, +29561, +29571, +29578, +29578, +29578, +29588, +29598, +29609, +29609, +29616, +29634, +29640, +29651, +29651, +29663, +29679, +29694, +29694, +29694, +29694, +29727, 29727, 29737, -29737, -29737, -29788, -29802, -29825, -29825, -29825, -29832, -29859, -29876, -29894, -29894, -29904, -29904, -29904, -29904, -29904, -29919, -29929, -29940, -29940, -29947, -29967, -29991, -29991, -29991, -29998, -30006, -30006, -30006, -30026, +29746, +29752, +29759, +29778, +29778, +29778, +29784, +29784, +29792, +29792, +29792, +29792, +29826, +29843, +29854, +29877, +29903, +29903, +29903, +29903, +29903, +29903, +29910, +29910, +29910, +29910, +29933, +29961, +29979, +30013, +30013, +30024, +30028, +30028, 30042, 30042, -30059, -30067, -30067, -30090, -30096, -30115, -30133, -30133, -30138, -30144, -30152, -30152, -30164, -30164, -30164, -30164, -30164, +30042, +30048, +30062, +30062, +30080, +30086, +30093, +30113, +30113, +30130, +30130, +30130, +30130, 30178, -30178, -30211, -30215, -30255, -30259, -30267, -30277, -30283, -30289, -30289, -30307, -30327, -30334, -30334, -30334, -30353, -30359, -30375, -30387, -30387, -30387, -30413, -30413, -30422, -30422, -30422, -30459, -30477, -30492, +30183, +30183, +30183, +30204, +30208, +30217, +30238, +30250, +30250, +30250, +30270, +30276, +30282, +30298, +30336, +30336, +30370, +30415, +30415, +30415, +30415, +30415, +30419, +30423, +30423, +30436, +30436, +30436, +30436, +30436, +30436, +30475, +30475, 30519, -30519, -30567, -30567, -30575, -30581, -30618, -30618, -30618, -30618, -30635, -30657, -30665, -30665, -30685, -30695, -30717, -30738, -30757, -30757, -30780, -30786, -30786, -30796, -30834, -30834, -30834, -30838, -30864, -30894, -30913, -30913, -30913, -30935, -30935, -30935, -30965, -30965, -30993, -31002, -31002, -31002, -31014, -31014, -31040, -31065, -31075, -31075, -31109, -31121, -31121, -31121, +30536, +30536, +30536, +30542, +30542, +30562, +30602, +30608, +30617, +30641, +30701, +30701, +30701, +30730, +30730, +30730, +30743, +30751, +30765, +30779, +30807, +30814, +30814, +30814, +30850, +30850, +30850, +30850, +30879, +30886, +30893, +30893, +30907, +30923, +30930, +30930, +30930, +30930, +30940, +31010, +31023, +31023, +31032, +31032, +31032, +31032, +31049, +31049, +31059, +31059, +31071, +31090, +31113, +31120, 31136, -31164, -31164, -31164, -31179, -31189, -31189, -31189, -31189, -31189, -31202, -31202, -31202, -31202, -31219, -31219, -31225, -31243, -31259, -31259, -31282, -31282, -31282, +31162, +31168, +31235, +31249, +31249, +31254, +31260, +31260, 31290, -31298, -31313, -31330, -31338, -31338, -31338, -31338, -31338, -31338, -31338, -31338, -31353, -31353, -31353, -31382, -31390, -31429, -31437, -31447, -31447, +31290, +31299, +31311, +31348, +31348, +31357, +31357, +31380, +31430, +31469, 31475, -31499, -31499, -31521, -31562, -31562, -31562, -31595, -31614, -31631, -31683, -31707, -31735, -31735, -31762, -31776, -31817, -31828, -31828, -31838, -31852, -31870, -31870, -31870, -31870, -31879, -31879, -31879, -31879, -31895, -31895, -31895, -31925, -31925, -31925, -31925, -31944, -31944, -31944, -31944, -31968, -31968, -31985, -32000, -32021, -32032, -32054, -32065, -32065, -32076, -32099, -32099, -32118, -32126, -32152, -32152, -32152, -32169, -32169, +31493, +31531, +31542, +31563, +31579, +31625, +31636, +31651, +31661, +31684, +31688, +31698, +31698, +31704, +31730, +31785, +31798, +31798, +31798, +31798, +31808, +31808, +31808, +31808, +31822, +31840, +31840, +31854, +31874, +31874, +31885, +31896, +31896, +31903, +31903, +31942, +31942, +31942, +31946, +31951, +31972, +31999, +31999, +32016, +32030, +32030, +32030, +32037, +32037, +32067, +32105, +32105, +32148, +32170, 32176, -32235, -32240, -32240, -32257, -32257, -32257, -32288, -32288, -32288, -32301, -32301, -32301, -32301, -32331, -32331, -32331, -32331, -32331, -32331, -32359, -32359, -32424, -32440, -32440, -32468, -32468, +32188, +32188, +32188, +32188, +32208, +32234, +32234, +32251, +32295, +32295, +32295, +32295, +32295, +32295, +32295, +32295, +32308, +32308, +32323, +32336, +32336, +32341, +32367, +32411, +32411, +32429, +32461, +32461, +32461, +32467, +32478, 32488, -32488, -32509, -32536, -32558, -32573, -32573, -32577, -32597, -32597, -32609, -32620, -32634, -32640, -32640, -32668, -32679, -32679, -32687, -32718, -32718, -32718, -32718, -32718, -32738, -32745, -32760, -32784, -32848, +32525, +32563, +32586, +32598, +32598, +32598, +32613, +32629, +32629, +32660, +32676, +32708, +32720, +32736, +32743, +32743, +32752, +32752, +32762, +32766, +32778, +32778, +32797, +32801, +32813, +32820, +32820, +32838, 32862, -32894, -32901, -32901, -32901, -32908, -32908, -32915, -32915, -32919, -32961, -32993, -33005, -33005, -33037, -33044, -33044, -33051, -33090, -33097, -33097, -33116, -33123, -33123, -33130, -33138, -33142, -33168, -33186, -33193, -33193, +32868, +32881, +32881, +32892, +32906, +32920, +32920, +32920, +32942, +32942, +32942, +32955, +32970, +32970, +32979, +32979, +32983, +32990, +33013, +33045, +33057, +33067, +33073, +33099, +33099, +33099, +33099, +33103, +33103, +33141, +33141, +33173, +33190, +33190, +33190, +33190, +33212, 33216, -33223, -33223, -33240, -33268, -33272, -33272, -33304, -33311, -33343, -33343, -33343, -33362, -33362, -33372, -33389, -33389, -33396, -33396, -33404, -33404, -33420, -33420, +33234, +33234, +33245, +33245, +33263, +33263, +33263, +33271, +33312, +33337, +33359, +33398, 33427, -33435, +33432, 33456, -33456, -33467, -33536, -33543, -33547, -33554, -33576, -33583, -33606, -33606, -33613, -33629, -33657, -33664, -33664, -33664, -33690, -33699, -33699, -33730, -33750, -33762, -33783, -33826, -33844, -33844, -33868, -33868, -33903, -33911, -33911, -33927, -33945, +33460, +33490, +33500, +33500, +33508, +33508, +33508, +33508, +33508, +33532, +33570, +33593, +33597, +33597, +33597, +33597, +33597, +33601, +33638, +33638, +33638, +33638, +33638, +33660, +33693, +33729, +33739, +33787, +33787, +33787, +33798, +33798, +33808, +33808, +33808, +33808, +33840, +33840, +33840, +33854, +33854, +33854, +33884, +33884, +33884, +33914, +33955, +33961, +33965, +33974, +33974, +33974, 33990, -34010, -34025, -34025, -34032, -34051, -34075, -34095, +33998, +34006, +34030, +34030, +34030, +34064, +34074, +34094, +34108, +34108, 34129, -34129, -34129, -34129, -34129, -34136, -34149, -34173, -34173, -34186, -34199, -34206, -34218, -34218, -34227, -34227, -34227, -34227, -34234, -34234, -34234, -34241, -34268, -34275, +34174, +34198, +34225, +34246, +34261, +34277, +34277, +34281, 34305, -34326, -34360, -34367, -34386, -34397, -34407, -34407, -34407, -34407, -34407, -34461, -34468, -34496, -34496, -34505, -34512, -34566, -34594, -34594, -34601, -34606, -34634, -34634, -34634, -34634, -34634, -34634, -34634, -34653, -34660, -34660, -34666, -34686, -34696, -34703, -34720, -34720, -34727, +34305, +34305, +34305, +34305, +34305, +34338, +34355, +34355, +34355, +34355, +34380, +34380, +34395, +34422, +34443, +34443, +34448, +34448, +34459, +34472, +34488, +34495, +34504, +34515, +34515, +34533, +34533, +34533, +34563, +34622, +34622, +34639, +34656, +34706, 34744, -34751, -34758, -34773, -34794, -34801, -34808, -34808, -34828, -34835, -34852, -34859, -34876, -34876, +34752, +34752, +34767, +34788, +34793, +34793, +34793, +34793, +34793, +34793, +34837, +34837, +34837, 34885, -34893, -34905, -34934, -34941, -34988, -34988, -34988, -35033, -35033, -35033, -35040, -35058, -35065, +34908, +34908, +34926, +34933, +34953, +34963, +34963, +34963, +34990, +34990, +35013, +35013, +35017, +35017, +35024, +35024, +35041, +35041, +35059, +35059, +35059, 35073, -35093, -35119, -35137, -35144, -35171, -35199, +35073, +35073, +35084, +35108, +35120, +35130, +35184, +35184, +35184, +35191, 35206, -35213, -35253, -35266, -35273, -35273, -35312, -35329, -35336, -35365, -35381, -35399, -35413, -35420, -35427, -35427, -35432, -35442, -35448, -35455, -35467, -35517, -35531, -35538, +35216, +35216, +35216, +35226, +35244, +35260, +35260, +35290, +35296, +35296, +35296, +35313, +35334, +35334, +35343, +35382, +35414, +35414, +35447, +35447, +35457, +35457, +35475, +35475, +35484, +35491, +35491, +35503, +35503, +35509, +35529, +35537, 35558, -35571, -35581, -35606, -35619, -35645, -35659, -35666, -35666, -35681, -35688, -35719, -35729, -35736, -35743, -35761, -35769, -35828, -35835, -35859, -35859, -35866, -35866, -35866, -35873, -35921, -35950, +35558, +35567, +35567, +35585, +35595, +35610, +35624, +35654, +35654, +35661, +35661, +35680, +35696, +35701, +35701, +35726, +35752, +35768, +35768, +35838, +35870, +35870, +35894, +35894, +35894, +35905, +35922, 35965, -35976, -35976, -35983, -36007, -36014, -36021, -36021, -36021, -36021, -36021, -36038, -36038, -36038, -36053, -36067, -36082, -36082, -36082, -36119, -36155, -36171, -36171, -36171, -36184, -36199, -36206, -36206, -36220, -36234, -36242, -36272, -36282, -36296, -36296, -36314, -36321, -36352, -36359, -36383, -36391, -36412, -36419, -36419, -36434, -36442, -36449, -36462, -36469, -36476, -36492, -36492, -36512, -36512, -36567, -36567, -36588, -36588, -36588, -36608, -36650, -36660, -36670, -36687, -36694, -36701, -36714, -36725, -36732, -36762, -36777, -36804, -36804, -36838, -36855, -36855, -36903, -36922, -36943, -36943, -36949, -36949, -36969, +35984, +35989, +36011, +36025, +36040, +36057, +36057, +36057, +36074, +36086, +36096, +36108, +36140, +36163, +36191, +36216, +36248, +36248, +36275, +36284, +36284, +36298, +36298, +36328, +36335, +36344, +36348, +36406, +36413, +36433, +36457, +36470, +36470, +36478, +36485, +36485, +36485, +36523, +36541, +36550, +36550, +36550, +36550, +36550, +36565, +36565, +36565, +36569, +36569, +36576, +36576, +36576, +36595, +36595, +36610, +36620, +36620, +36639, +36639, +36639, +36653, +36653, +36682, +36722, +36722, +36722, +36722, +36722, +36728, +36745, +36745, +36759, +36759, +36759, +36759, +36768, +36785, +36803, +36834, +36834, +36834, +36865, +36887, +36887, +36887, +36907, +36926, +36967, 36977, -36977, -36993, -36993, -37000, -37023, -37023, -37030, -37121, -37137, -37137, -37153, -37176, -37183, -37192, +36981, +36981, +37005, +37005, +37054, +37086, +37096, +37103, +37116, +37116, +37116, +37143, +37143, +37149, +37149, +37181, +37181, +37181, +37205, 37209, -37217, -37248, -37248, -37248, -37266, +37209, +37236, +37259, +37259, 37286, -37292, -37292, -37300, -37339, -37339, -37355, -37362, -37379, -37387, -37403, -37403, -37403, -37432, -37432, -37450, -37450, -37466, -37481, -37481, -37481, -37500, +37302, +37302, +37319, +37336, +37348, +37361, +37361, +37361, +37361, +37361, +37371, +37371, +37382, +37396, +37396, +37396, +37420, +37433, +37449, +37449, +37449, +37449, +37471, +37471, +37499, +37519, +37519, 37540, -37540, -37540, -37552, -37569, -37594, -37594, -37609, -37628, -37628, -37661, -37677, -37677, -37677, -37717, -37717, -37717, -37723, -37754, -37754, -37799, -37799, -37810, -37810, -37825, -37825, -37825, -37825, -37845, -37867, -37867, -37877, -37892, -37909, -37909, -37919, -37919, -37938, -37959, -37967, -37972, -37992, -37992, -38026, +37550, +37555, +37555, +37572, +37576, +37576, +37576, +37583, +37583, +37599, +37615, +37615, +37634, +37634, +37647, +37672, +37672, +37690, +37705, +37710, +37728, +37728, +37728, +37728, +37745, +37755, +37755, +37761, +37771, +37771, +37788, +37813, +37813, +37832, +37832, +37832, +37832, +37856, +37856, +37872, +37872, +37872, +37872, +37872, +37872, +37872, +37902, +37913, +37913, +37925, +37943, +37952, +37952, +37952, +37982, +38011, +38011, +38011, +38011, +38019, +38019, +38019, +38019, +38019, 38035, -38061, -38061, -38072, -38083, -38083, -38099, -38123, -38146, -38146, -38158, -38158, -38182, -38234, -38255, -38255, -38310, -38331, -38331, -38346, -38346, -38346, -38353, -38353, -38353, -38378, -38378, -38388, -38408, -38428, -38428, -38428, -38428, -38445, -38453, -38460, -38460, -38460, -38493, -38503, -38525, -38525, -38532, -38532, -38546, -38546, -38569, -38599, -38618, -38618, -38618, -38643, -38643, -38643, -38691, -38699, +38035, +38057, +38057, +38068, +38080, +38091, +38110, +38128, +38149, +38164, +38189, +38199, +38199, +38199, +38207, +38207, +38224, +38224, +38235, +38251, +38251, +38251, +38251, +38251, +38260, +38260, +38260, +38260, +38260, +38279, +38279, +38290, +38290, +38297, +38345, +38351, +38351, +38389, +38398, +38402, +38402, +38450, +38450, +38466, +38490, +38490, +38494, +38517, +38544, +38544, +38557, +38568, +38574, +38574, +38574, +38574, +38574, +38574, +38595, +38616, +38642, +38672, +38672, +38672, +38672, +38672, +38686, +38693, 38717, -38717, -38729, -38729, -38733, -38760, -38760, -38773, -38801, -38817, -38824, +38735, +38751, +38751, +38758, +38794, +38808, +38829, 38836, 38843, -38843, -38843, -38870, -38880, -38880, -38887, -38900, -38907, -38919, -38919, -38919, -38949, -38967, -38984, -38984, -38984, -38989, -38989, -39029, -39036, -39054, -39080, -39086, -39103, -39110, -39130, -39130, -39130, -39154, -39154, -39176, -39176, -39213, -39213, -39213, -39225, -39230, -39249, -39264, -39264, -39264, -39284, -39284, -39293, -39293, -39311, -39311, -39311, -39320, +38858, +38883, +38893, +38915, +38915, +38915, +38922, +38933, +38940, +38940, +38950, +38957, +38991, +39009, +39009, +39014, +39021, +39021, +39028, +39042, +39048, +39055, +39077, +39102, +39116, +39129, +39136, +39155, +39155, +39161, +39179, +39205, +39219, +39239, +39283, +39283, +39304, 39339, -39345, -39355, -39369, -39388, -39399, -39399, -39399, -39418, -39418, -39433, -39451, -39451, -39458, -39476, -39481, -39519, -39519, -39519, -39519, -39529, -39567, -39609, -39624, -39637, -39637, -39644, -39644, -39651, -39679, -39679, -39679, -39697, -39709, -39751, -39751, -39777, -39791, -39817, -39817, -39835, -39835, -39844, -39844, -39851, -39874, -39878, -39878, -39888, -39905, -39905, -39928, -39928, +39365, +39387, +39413, +39413, +39413, +39430, +39437, +39437, +39450, +39462, +39469, +39484, +39502, +39509, +39509, +39548, +39548, +39548, +39560, +39573, +39582, +39582, +39582, +39596, +39616, +39639, +39639, +39646, +39668, +39677, +39694, +39705, +39721, +39731, +39731, +39750, +39750, +39760, +39760, +39769, +39796, +39796, +39815, +39822, +39847, +39867, +39881, +39881, +39900, +39907, +39907, +39920, +39934, +39945, 39945, 39952, -39978, -39978, -39985, -40029, -40043, -40043, -40043, -40053, -40066, -40094, -40106, -40129, -40129, -40151, -40151, -40151, -40158, -40182, -40199, -40232, -40232, -40232, -40281, -40288, -40302, -40302, -40302, -40302, -40317, -40317, -40324, -40324, -40356, -40356, -40369, -40384, -40392, -40392, -40392, -40413, -40413, -40455, -40462, -40469, +39952, +39952, +39961, +39989, +40030, +40045, +40058, +40085, +40101, +40138, +40178, +40188, +40210, +40221, +40228, +40228, +40241, +40248, +40279, +40292, +40292, +40301, +40308, +40322, +40322, +40329, +40336, +40352, +40359, +40366, +40373, +40380, +40380, +40435, +40435, +40435, +40473, 40483, 40483, -40483, -40511, -40511, -40524, -40524, -40528, -40546, -40546, -40568, -40575, -40582, -40610, -40629, -40656, -40656, -40656, -40679, -40679, -40679, -40693, -40713, -40732, -40754, -40795, -40795, -40809, -40816, -40823, -40851, -40889, -40908, -40956, -40970, -41026, -41040, -41056, -41063, -41070, -41077, -41100, -41108, -41141, -41148, -41181, -41197, -41220, -41241, -41275, -41291, -41307, -41307, -41327, -41334, -41355, -41369, -41394, -41401, -41414, -41430, -41444, -41494, +40488, +40488, +40488, +40513, +40537, +40537, +40564, +40569, +40612, +40637, +40637, +40651, +40651, +40658, +40665, +40665, +40672, +40686, +40717, +40741, +40766, +40789, +40815, +40830, +40830, +40840, +40840, +40840, +40840, +40860, +40886, +40893, +40933, +40933, +40946, +40968, +41002, +41017, +41024, +41057, +41080, +41087, +41094, +41137, +41150, +41157, +41157, +41164, +41171, +41177, +41184, +41198, +41198, +41198, +41216, +41240, +41251, +41293, +41300, +41330, +41346, +41383, +41405, +41405, +41417, +41448, +41466, +41466, +41466, +41466, +41473, +41485, 41513, -41513, -41520, -41529, -41575, -41589, -41612, +41528, +41537, +41564, +41564, +41594, +41627, +41627, +41627, 41634, 41634, +41639, +41639, 41652, -41652, -41664, -41696, -41703, -41750, -41772, -41772, -41793, -41819, -41826, -41848, -41855, -41872, -41884, -41892, -41892, -41947, -41947, -41947, -41971, -41971, -41971, -41971, -41977, -41977, -41984, -42033, -42051, -42051, +41671, +41680, +41690, +41690, +41690, +41690, +41712, +41712, +41722, +41746, +41778, +41784, +41816, +41825, +41825, +41832, +41856, +41868, +41916, +41922, +41935, +41944, +41956, +41970, +41982, +41982, +41982, +41989, +41996, +42018, +42018, +42018, +42025, +42032, +42040, +42040, +42047, +42047, +42055, +42055, 42066, -42066, -42066, -42066, -42087, -42102, -42127, -42134, -42134, -42155, -42167, -42186, -42186, -42186, -42193, -42215, -42224, -42242, -42249, -42262, -42286, -42303, -42316, -42340, -42360, -42392, -42392, -42399, -42406, -42433, -42449, -42449, -42459, -42485, -42513, -42530, -42537, -42537, -42544, -42576, -42576, -42583, -42583, -42590, -42599, -42628, -42649, -42649, -42656, -42697, -42704, +42086, +42086, +42086, +42103, +42103, +42122, +42129, +42136, +42157, +42164, +42179, +42179, +42212, +42226, +42233, +42240, +42240, +42247, +42274, +42308, +42315, +42343, +42343, +42385, +42408, +42415, +42415, +42415, +42415, +42436, +42443, +42450, +42450, +42457, +42464, +42471, +42484, +42508, +42529, +42548, +42548, +42596, +42596, +42596, +42603, +42624, +42645, +42661, +42684, +42684, +42694, +42694, +42701, +42701, 42720, -42739, -42739, -42815, -42815, -42834, -42834, -42870, -42892, -42899, -42899, -42919, -42939, -42969, -42969, -42979, -42979, -42979, -42990, -43030, -43030, -43052, -43052, -43074, -43102, -43102, -43102, -43130, -43147, -43154, +42720, +42754, +42776, +42795, +42795, +42808, +42808, +42846, +42855, +42864, +42882, +42888, +42909, +42909, +42929, +42964, +42985, +43001, +43017, +43043, +43050, +43050, +43060, +43073, +43091, +43111, +43134, 43172, -43179, -43199, -43211, -43215, -43222, -43222, +43172, +43172, +43204, +43250, +43250, 43257, -43284, -43302, -43352, -43368, -43368, -43368, -43381, -43393, -43423, -43444, -43487, -43494, -43523, -43547, -43567, -43595, -43612, -43612, -43619, -43619, -43640, -43646, -43664, -43697, -43717, -43724, -43724, -43744, -43767, -43776, -43781, -43801, -43801, -43808, -43808, -43815, -43822, -43836, -43850, -43869, +43286, +43325, +43345, +43362, +43362, +43362, +43362, +43362, +43430, +43430, +43430, +43437, +43437, +43455, +43455, +43464, +43464, +43471, +43471, +43471, +43471, +43484, +43484, +43490, +43490, +43513, +43526, +43546, +43546, +43553, +43571, +43584, +43584, +43631, +43642, +43642, +43642, +43682, +43702, +43702, +43722, +43729, +43729, +43756, +43783, +43783, +43795, +43814, +43818, +43824, +43854, +43854, +43861, +43861, +43868, 43888, -43895, -43911, -43943, -43963, -43963, -43998, -43998, -44033, -44033, -44047, -44064, -44077, -44077, -44101, -44112, -44112, -44112, -44130, -44130, -44130, -44155, -44166, -44166, -44166, -44184, -44184, -44268, -44268, -44291, -44317, -44326, -44353, -44353, -44392, -44408, -44444, -44444, -44444, -44444, -44444, -44451, -44483, +43888, +43893, +43900, +43917, +43939, +43939, +43939, +43946, +43980, +43980, +43996, +44024, +44030, +44036, +44036, +44043, +44043, +44055, +44071, +44087, +44087, +44097, +44097, +44097, +44110, +44158, +44164, +44171, +44208, +44208, +44235, +44241, +44241, +44241, +44241, +44241, +44251, +44251, +44275, +44275, +44300, +44307, +44307, +44314, +44321, +44332, +44377, +44400, +44426, +44432, +44446, +44446, +44476, +44476, +44486, +44486, +44486, +44486, 44502, -44525, -44525, -44570, -44606, -44606, -44658, -44677, -44677, -44711, -44711, -44711, -44711, -44711, -44742, -44742, -44742, -44749, -44763, +44512, +44522, +44535, +44550, +44574, +44597, +44605, +44616, +44616, +44622, +44622, +44628, +44636, +44636, +44636, +44643, +44643, +44662, +44669, +44701, +44720, +44720, +44727, +44750, +44754, +44772, +44772, 44804, -44804, -44854, -44866, -44866, -44884, -44884, -44894, -44909, -44916, -44916, -44923, -44938, -44958, -44965, -45004, -45016, -45030, -45050, -45060, -45060, -45066, -45073, -45077, -45084, -45105, -45105, -45105, -45105, -45105, -45112, -45112, -45130, -45139, -45159, -45166, -45208, -45223, -45251, +44819, +44835, +44859, +44859, +44883, +44887, +44898, +44910, +44922, +44939, +44939, +44939, +44945, +44945, +44945, +44952, +44952, +44952, +44991, +45023, +45054, +45071, +45071, +45071, +45080, +45102, +45102, +45102, +45128, +45132, +45162, +45175, +45193, +45199, +45199, +45206, +45221, +45228, +45243, 45258, -45275, -45291, +45276, +45280, 45291, 45310, -45323, -45351, -45358, -45368, -45399, -45413, -45437, -45437, -45446, -45473, -45481, -45488, -45488, -45488, -45488, -45501, -45526, -45544, -45589, -45612, -45632, -45632, -45658, -45672, -45715, -45721, -45721, -45727, -45734, -45759, -45810, -45838, -45903, -45915, -45952, -45959, -45978, -45991, -45997, -45997, -45997, -45997, -46020, -46020, -46038, -46070, -46076, -46076, -46076, -46093, -46112, -46135, -46152, -46152, -46182, -46182, -46182, -46182, -46182, -46182, -46182, -46182, -46198, -46222, -46222, -46229, -46229, -46240, -46261, -46273, -46273, -46288, -46288, -46288, -46314, -46314, -46314, -46327, -46327, -46327, -46362, -46377, -46377, +45331, +45338, +45346, +45346, +45383, +45383, +45390, +45416, +45442, +45449, +45477, +45484, +45503, +45503, +45503, +45510, +45547, +45561, +45571, +45578, +45585, +45617, +45617, +45617, +45617, +45676, +45700, +45730, +45745, +45745, +45765, +45796, +45803, +45829, +45833, +45843, +45851, +45886, +45886, +45909, +45916, +45916, +45916, +45923, +45963, +45984, +45984, +46004, +46022, +46052, +46090, +46113, +46119, +46138, +46166, +46166, +46179, +46196, +46224, +46224, +46224, +46224, +46224, +46234, +46234, +46289, +46309, +46328, +46334, +46357, +46369, 46383, -46383, -46383, -46383, -46391, -46391, -46400, -46400, -46400, -46404, -46433, -46450, -46475, -46493, -46515, -46521, -46521, -46521, -46546, -46567, -46567, -46567, +46390, +46398, +46398, +46412, +46443, +46457, +46476, +46476, +46484, +46484, +46484, +46504, +46522, +46522, +46522, +46522, +46538, +46538, +46544, +46544, 46582, 46582, 46582, -46603, -46603, -46603, -46620, -46653, -46653, -46659, -46690, -46700, -46700, -46719, -46736, -46736, -46763, -46763, -46763, -46785, -46785, +46596, +46596, +46613, +46621, +46628, +46643, +46657, +46665, +46699, +46707, +46716, +46720, +46747, +46762, +46762, +46770, 46796, -46811, -46811, -46819, -46819, -46819, -46855, -46855, -46874, -46874, -46893, +46806, +46816, +46827, +46827, +46827, +46844, +46857, +46867, +46881, +46896, +46903, +46903, +46903, 46911, -46931, -46931, -46931, -46941, -46954, -46961, -46967, -46996, -47009, -47009, -47046, -47046, -47046, -47046, -47046, -47074, +46932, +46947, +46964, +46964, +46984, +47006, +47013, +47013, +47013, +47027, +47027, +47069, +47077, +47077, +47077, +47083, 47093, -47100, -47121, -47130, -47168, -47168, -47168, -47168, -47168, -47168, -47209, -47243, -47282, +47093, +47106, +47181, +47195, +47195, +47195, +47237, +47273, 47295, 47295, -47302, -47336, -47346, -47346, -47353, -47353, -47359, -47366, -47373, -47380, -47419, -47434, -47441, -47458, -47486, -47486, -47486, -47493, -47512, -47519, -47519, -47519, -47519, -47536, -47550, -47575, -47601, -47601, -47612, -47619, -47643, -47655, -47655, -47670, -47670, -47683, -47690, -47690, -47727, -47740, -47747, -47755, -47771, -47771, -47806, -47806, -47813, -47819, -47819, -47819, -47826, -47851, -47858, -47865, -47890, -47912, +47301, +47343, +47349, +47369, +47393, +47409, +47414, +47428, +47428, +47454, +47499, +47511, +47529, +47535, +47535, +47535, +47535, +47535, +47547, +47572, +47587, +47587, +47587, +47625, +47625, +47645, +47664, +47664, +47696, +47704, +47731, +47769, +47790, +47799, +47799, +47816, +47816, +47833, +47833, +47833, +47839, +47856, +47877, +47877, 47918, -47939, -47955, -47996, -48029, -48029, -48029, -48050, -48050, -48068, -48092, -48106, -48106, -48117, -48117, -48134, -48134, -48134, -48134, -48134, -48134, -48134, -48134, -48143, -48158, -48192, -48199, -48199, -48206, -48234, -48270, -48277, -48322, -48337, -48337, -48337, -48344, -48351, -48364, -48371, -48371, -48378, -48395, -48402, -48402, -48402, -48412, -48421, -48421, -48445, +47948, +47956, +47978, +47978, +47991, +47991, +47991, +48008, +48008, +48019, +48031, +48045, +48045, +48045, +48045, +48066, +48066, +48070, +48090, +48119, +48136, +48142, +48149, +48149, +48160, +48160, +48160, +48160, +48172, +48172, +48185, +48196, +48196, +48218, +48218, +48225, +48225, +48225, +48225, +48235, +48249, +48249, +48258, +48258, +48284, +48284, +48308, +48326, +48341, +48370, +48370, +48394, +48429, +48429, +48437, +48442, 48452, 48452, -48452, -48482, -48500, -48542, -48542, -48559, -48579, -48611, -48611, -48628, -48651, -48657, -48657, -48676, -48676, -48676, -48676, -48683, -48689, -48722, -48729, -48729, -48736, -48749, -48765, +48456, +48479, +48479, +48485, +48492, +48498, +48498, +48498, +48523, +48560, +48581, +48597, +48597, +48597, +48624, +48624, +48652, +48665, +48705, +48705, +48712, +48726, +48726, +48726, +48760, +48760, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48770, +48779, 48786, -48802, -48802, -48802, -48832, -48853, -48869, -48888, -48888, -48895, -48922, -48922, -48922, -48922, -48943, -48943, -48956, -48973, -48973, -48986, -48992, -49006, -49045, -49064, +48786, +48786, +48797, +48811, +48820, +48820, +48820, +48836, +48836, +48842, +48871, +48894, +48894, +48894, +48894, +48894, +48911, +48935, +48935, +48935, +48968, +48979, +48994, +49007, +49019, +49040, +49051, 49071, -49080, -49116, -49123, -49130, -49137, -49172, -49193, -49193, -49193, -49193, -49210, -49217, -49224, -49261, -49261, -49285, -49310, -49327, -49343, -49350, -49371, -49371, +49079, +49079, +49096, +49106, +49106, +49128, +49138, +49138, +49138, +49150, +49150, +49159, +49219, +49262, +49262, +49300, +49300, +49300, +49331, +49337, +49347, +49347, +49347, +49368, +49368, +49368, +49368, +49368, 49378, -49385, -49392, -49392, -49428, -49448, -49464, -49512, -49542, -49549, -49556, -49562, -49594, -49623, -49630, -49674, -49674, -49699, +49378, +49378, +49387, +49403, +49412, +49412, +49422, +49441, +49474, +49498, +49498, +49498, +49514, +49514, +49524, +49524, +49535, +49535, +49546, +49546, +49551, +49602, +49602, +49609, +49613, +49624, +49624, +49624, +49624, +49641, +49648, +49648, +49648, +49675, +49692, +49692, +49709, +49724, 49739, -49752, -49775, -49775, -49775, -49793, -49803, -49819, -49819, -49819, -49828, -49846, +49770, +49770, +49770, +49770, +49770, +49786, +49825, +49825, +49825, +49834, +49853, +49853, 49860, -49860, -49867, -49888, -49895, -49909, -49941, -49947, -49947, -50014, -50030, -50036, -50036, -50036, -50049, -50071, -50097, -50136, -50143, -50158, -50158, -50165, -50165, -50183, -50196, +49875, +49891, +49914, +49924, +49924, +49939, +49949, +49960, +49970, +49970, +49980, +49994, +50001, +50013, +50039, +50039, +50039, +50065, +50081, +50114, +50142, +50169, +50180, +50180, 50203, 50203, -50210, -50237, -50248, +50220, +50220, +50229, +50236, +50236, 50266, -50280, -50293, +50275, +50295, 50307, -50307, -50307, -50307, -50346, +50340, 50359, -50390, -50412, -50440, -50440, -50440, -50446, -50462, -50462, -50478, -50486, -50486, -50494, -50498, -50552, -50569, -50569, -50569, -50569, -50569, -50569, -50591, -50604, -50604, -50611, -50618, -50642, -50684, -50720, -50720, -50750, -50754, -50754, -50784, -50784, -50817, -50832, -50858, -50874, -50874, -50919, -50955, -50955, -50962, -50962, -50992, -51013, -51013, -51020, -51046, -51056, -51115, -51122, -51152, -51189, -51189, -51196, -51203, -51203, -51217, -51217, -51217, -51265, -51304, -51327, -51347, -51360, -51371, -51386, -51386, -51411, -51452, -51452, -51452, -51459, -51484, -51491, -51491, -51491, -51491, -51510, -51510, +50359, +50374, +50374, +50387, +50387, +50387, +50387, +50387, +50387, +50409, +50414, +50423, +50423, +50449, +50449, +50449, +50459, +50482, +50499, +50499, +50514, +50522, +50522, +50522, +50540, +50558, +50565, +50574, +50574, +50620, +50620, +50620, +50624, +50633, +50633, +50653, +50665, +50673, +50673, +50700, +50700, +50700, +50713, +50713, +50713, +50740, +50748, +50767, +50767, +50767, +50775, +50781, +50789, +50803, +50803, +50803, +50803, +50803, +50810, +50810, +50821, +50827, +50839, +50876, +50893, +50893, +50910, +50942, +50960, +50960, +50984, +50984, +50991, +50991, +51025, +51043, +51058, +51073, +51077, +51077, +51092, +51092, +51113, +51144, +51160, +51172, +51188, +51198, +51198, +51208, +51221, +51231, +51235, +51235, +51255, +51271, +51288, +51288, +51288, +51307, +51307, +51318, +51318, +51318, +51338, +51338, +51349, +51349, +51364, +51375, +51375, +51416, +51416, +51416, +51416, +51416, +51437, +51437, +51457, +51470, +51470, +51470, +51486, +51501, 51521, -51565, -51581, -51588, -51601, -51620, -51620, -51635, -51666, -51683, -51690, -51718, -51718, -51718, -51757, -51779, -51779, -51779, -51779, -51779, -51779, -51809, -51814, -51820, -51842, -51886, -51900, -51900, -51900, -51900, -51900, -51910, -51927, -51927, -51945, -51962, -51968, -51974, -51974, -51980, -51980, -51980, -51980, -52001, -52011, -52011, -52025, -52025, -52025, -52039, -52071, -52096, -52096, -52096, -52096, -52102, -52119, -52119, -52119, -52119, -52125, -52153, -52164, -52164, -52164, -52195, -52207, -52223, -52255, +51531, +51548, +51548, +51558, +51576, +51611, +51611, +51611, +51632, +51670, +51682, +51695, +51717, +51717, +51717, +51717, +51732, +51743, +51743, +51758, +51765, +51765, +51782, +51812, +51812, +51812, +51812, +51828, +51828, +51828, +51845, +51845, +51851, +51851, +51908, +51923, +51923, +51923, +51932, +51953, +51953, +51969, +52002, +52002, +52056, +52072, +52072, +52072, +52092, +52137, +52145, +52145, +52145, +52163, +52183, +52219, +52219, +52227, +52256, +52267, +52267, 52276, 52276, -52299, -52305, -52305, -52320, -52320, -52359, -52373, -52389, -52389, -52396, -52401, -52401, +52276, +52295, +52363, +52375, +52375, +52395, +52395, 52414, 52414, -52420, -52432, -52432, -52432, -52449, -52449, -52456, -52466, -52466, +52414, +52429, +52429, +52429, +52445, 52471, 52471, -52478, -52478, -52478, -52507, -52507, -52507, -52519, -52537, -52537, -52537, -52537, -52556, -52569, -52569, -52569, -52585, -52594, -52594, -52631, -52652, -52680, -52695, -52710, -52745, -52745, -52745, -52758, -52764, +52471, +52471, +52492, +52492, +52510, +52530, +52530, +52530, +52538, +52555, +52555, +52579, +52587, +52587, +52587, +52644, +52644, +52644, +52644, +52644, +52654, +52654, +52667, +52690, +52690, +52702, +52727, +52727, +52755, +52773, 52778, -52789, -52805, -52805, -52821, -52842, -52855, -52855, -52896, -52896, -52928, -52928, -52941, -52947, -52947, -52960, -52960, -52990, -53004, +52778, +52790, +52810, +52826, +52826, +52826, +52826, +52834, +52848, +52848, +52848, +52856, +52875, +52885, +52895, +52895, +52895, +52895, +52908, +52908, +52959, +52963, +52963, +52988, +52993, 53014, -53020, -53020, -53020, -53020, -53034, -53073, -53084, -53084, -53100, -53100, -53100, -53115, -53123, -53148, -53178, -53188, -53202, -53202, -53218, -53218, -53228, -53251, -53256, -53262, -53262, -53262, -53282, -53299, +53014, +53056, +53080, +53111, +53111, +53118, +53118, +53134, +53161, +53161, +53161, +53172, +53172, +53194, +53208, +53208, +53208, +53233, +53233, +53233, +53240, +53240, +53247, +53274, +53296, +53321, +53321, 53338, -53358, -53358, -53431, -53436, -53436, -53456, -53504, -53504, -53517, -53531, -53574, -53583, -53619, -53631, -53631, -53631, -53631, -53640, -53670, -53670, -53718, -53718, +53338, +53355, +53362, +53369, +53376, +53393, +53393, +53393, +53393, +53400, +53412, +53426, +53437, +53460, +53467, +53509, +53509, +53509, +53532, +53532, +53542, +53588, +53593, +53600, +53600, +53615, +53615, +53615, +53630, +53637, +53637, +53653, +53667, +53674, +53674, +53681, +53681, +53681, 53728, -53733, -53749, -53774, -53774, -53811, -53811, +53735, +53740, +53748, +53772, +53783, +53791, +53791, +53791, +53791, +53791, +53804, 53822, -53835, -53842, -53882, +53831, +53861, +53861, +53861, +53879, +53893, +53899, +53899, +53899, 53903, -53919, -53932, -53942, -53942, -53951, -53978, -54001, -54015, -54015, -54015, -54015, -54024, -54024, -54031, -54067, -54081, -54081, -54081, -54086, -54086, -54105, -54132, -54132, -54132, +53903, +53914, +53924, +53924, +53924, +53924, +53946, +53975, +53988, +53988, +54008, +54008, +54016, +54033, +54054, +54094, +54123, 54140, 54140, -54178, -54178, -54178, -54192, -54192, -54209, -54231, +54147, +54147, +54180, +54180, +54198, +54198, +54217, +54217, +54234, +54241, +54251, 54258, -54258, -54280, -54287, -54293, -54308, -54308, -54315, +54300, +54300, +54307, +54307, 54332, 54332, -54346, -54379, -54379, -54421, -54444, -54467, -54481, -54481, -54497, -54529, -54555, -54555, -54597, -54614, -54620, -54635, -54635, -54635, -54652, -54664, -54664, -54724, -54752, -54752, -54762, -54778, -54788, -54788, -54796, -54835, -54848, -54848, -54864, -54914, -54940, -54940, -54945, -54957, -54966, -54966, -54966, -54966, -54988, -54988, -54988, -55008, -55008, -55008, -55014, -55014, -55030, -55044, +54339, +54356, +54370, +54380, +54380, +54380, +54380, +54380, +54380, +54384, +54405, +54438, +54459, +54480, +54480, +54487, +54494, +54528, +54538, +54552, +54552, +54552, +54552, +54568, +54585, +54595, +54624, +54624, +54637, +54644, +54644, +54644, +54644, +54657, +54657, +54677, +54677, +54684, +54684, +54697, +54697, +54712, +54739, +54749, +54773, +54793, +54802, +54827, +54834, +54841, +54841, +54873, +54882, +54901, +54941, +54948, +54963, +54970, +54986, +54986, +55001, +55029, +55035, +55065, 55072, -55072, -55102, -55102, -55102, -55130, -55137, -55137, -55137, -55137, -55137, -55156, -55168, -55168, -55181, -55226, -55226, -55233, -55246, -55246, -55256, -55256, -55261, -55261, -55261, -55282, -55298, -55314, -55321, -55330, +55089, +55111, +55124, +55143, +55143, +55143, +55150, +55150, +55189, +55196, +55216, +55245, +55252, +55252, +55272, +55272, +55332, 55339, -55339, -55350, -55368, -55381, -55401, -55412, -55412, -55412, -55412, -55412, -55430, -55440, -55461, -55461, -55474, -55518, -55537, -55537, -55553, -55571, -55571, -55615, -55622, -55622, -55622, -55634, -55650, -55650, -55685, -55691, -55691, -55691, -55697, -55734, -55734, +55363, +55396, +55410, +55433, +55447, +55454, +55458, +55458, +55487, +55487, +55497, +55497, +55497, +55544, +55544, +55548, +55562, +55568, +55568, +55568, +55568, +55585, +55585, +55585, +55604, +55604, +55619, +55625, +55632, +55632, +55671, +55671, +55684, +55684, +55684, +55709, +55717, +55727, 55734, +55769, 55801, -55813, -55844, -55857, -55863, -55876, -55890, -55924, +55815, +55837, +55848, +55855, +55871, +55885, +55905, +55926, +55926, 55942, -55949, -55970, -55970, -55970, -55970, -55990, -56006, -56006, -56029, -56038, -56050, -56057, -56057, -56073, -56073, -56073, -56073, -56073, -56085, -56085, -56108, -56108, -56108, -56141, -56155, -56168, +55942, +55973, +55973, +55973, +55973, +55979, +56020, +56033, +56033, +56047, +56054, +56072, +56089, +56096, +56103, +56130, +56146, +56146, +56153, 56179, -56186, -56204, -56245, -56257, -56257, -56257, -56274, -56304, -56341, -56341, -56341, -56367, -56405, -56405, -56405, -56405, -56443, -56443, -56463, -56482, -56492, -56522, -56539, -56539, -56539, -56546, -56553, -56586, -56605, -56612, -56631, -56631, -56631, -56649, -56649, -56670, -56684, -56684, -56733, -56769, -56769, -56779, -56807, -56823, -56839, -56870, -56870, -56870, -56870, -56886, -56886, -56886, -56886, -56886, -56908, -56908, -56964, -56964, -56970, -56982, -57001, -57001, -57001, -57010, -57032, -57039, -57039, -57070, -57080, -57088, -57095, -57095, -57112, -57112, -57131, -57141, -57161, -57193, -57193, -57204, -57221, -57221, -57221, -57221, -57221, -57231, -57241, -57271, -57298, -57310, -57321, -57321, -57321, -57336, -57336, -57342, -57349, -57349, -57349, -57349, -57349, -57349, -57366, -57397, -57406, -57437, -57437, -57456, -57511, -57527, -57548, -57564, -57564, -57564, -57586, -57586, -57611, -57627, -57649, -57656, -57708, -57708, -57708, -57708, -57728, -57728, -57747, -57747, -57747, -57756, -57772, -57784, -57784, -57784, -57806, -57854, -57861, -57876, -57882, -57882, -57882, -57890, -57911, -57911, -57911, -57918, -57918, -57936, -57936, -57936, -57936, -57942, -57942, -57942, -57942, -57947, -57947, -57947, +56183, +56202, +56216, +56226, +56260, +56287, +56300, +56307, +56345, +56359, +56376, +56390, +56410, +56417, +56435, +56442, +56462, +56462, +56480, +56514, +56521, +56521, +56521, +56528, +56558, +56565, +56626, +56646, +56685, +56692, +56718, +56741, +56741, +56768, +56804, +56821, +56821, +56851, +56904, +56911, +56918, +56925, +56940, +56962, +56977, +56984, +56999, +57019, +57019, +57019, +57037, +57049, +57049, +57083, +57083, +57115, +57115, +57152, +57178, +57178, +57209, +57223, +57244, +57244, +57244, +57244, +57273, +57280, +57287, +57287, +57332, +57368, +57368, +57375, +57375, +57375, +57412, +57412, +57418, +57433, +57433, +57452, +57462, +57462, +57469, +57476, +57485, +57499, +57544, +57551, +57551, +57561, +57568, +57577, +57593, +57593, +57606, +57606, +57633, +57633, +57644, +57644, +57659, +57659, +57689, +57710, +57718, +57725, +57725, +57725, +57732, +57732, +57732, +57732, +57745, +57767, +57774, +57809, +57809, +57809, +57829, +57880, +57915, +57927, 57954, -57954, -57978, -57978, -58000, -58006, -58013, -58013, -58013, -58027, -58076, -58093, -58093, -58093, -58099, -58099, -58107, -58118, -58158, -58158, -58173, -58181, -58187, -58194, -58194, -58215, -58240, -58240, -58240, -58240, -58256, -58256, -58256, -58263, -58282, -58290, -58290, +58002, +58009, +58009, +58021, +58035, +58042, +58049, +58069, +58084, +58105, +58105, +58122, +58122, +58140, +58177, +58195, +58199, +58220, +58239, +58252, +58252, +58252, +58291, 58312, 58312, -58312, -58317, -58317, -58317, 58333, -58345, -58345, -58361, -58361, -58387, -58414, -58438, +58351, +58398, +58409, +58409, +58409, +58409, +58416, 58446, -58467, -58467, -58482, -58482, -58512, -58512, -58512, -58520, -58542, -58569, -58598, -58607, -58626, -58647, -58666, -58688, -58688, -58688, -58697, -58703, -58703, -58703, -58703, -58721, -58742, -58794, +58446, +58453, +58469, +58476, +58509, +58509, +58509, +58509, +58509, +58529, +58555, +58571, +58587, +58587, +58587, +58587, +58594, +58594, +58628, +58635, +58668, +58668, +58693, +58700, +58707, +58761, +58789, +58789, 58829, -58847, -58866, -58866, -58874, -58880, -58880, -58887, -58887, -58900, -58900, -58900, -58928, +58854, +58854, +58871, +58878, +58886, +58893, +58931, +58938, 58945, -58945, -58963, -58963, -58963, -58985, -58985, -58991, -59011, -59062, -59062, -59062, -59062, -59062, -59062, -59095, -59115, -59138, -59138, -59138, -59155, +58952, +58970, +58984, +59013, +59038, +59045, +59068, +59077, +59077, +59086, +59086, +59086, +59086, +59112, +59151, +59151, 59166, 59166, -59202, -59202, -59202, -59211, -59218, +59166, +59166, +59166, +59194, 59224, 59224, -59224, -59242, -59242, -59268, -59268, -59308, -59314, -59326, -59326, -59340, -59340, -59345, -59368, -59373, -59373, -59412, -59412, -59435, -59435, -59435, -59435, -59455, +59247, +59247, +59247, +59259, +59283, +59283, +59283, +59283, +59290, +59297, +59330, +59349, +59362, +59374, +59437, +59449, +59459, 59466, -59466, -59466, -59481, -59481, -59481, -59481, -59500, -59517, -59517, -59549, -59555, -59555, -59555, -59568, -59595, -59615, -59631, -59631, -59631, -59631, +59488, +59494, +59511, +59537, +59560, +59574, +59598, +59611, +59634, +59634, 59641, 59641, -59654, -59678, -59678, -59694, -59700, -59700, -59700, -59700, -59700, -59714, +59641, +59641, +59652, +59663, +59663, +59679, +59679, +59685, 59721, -59721, -59740, -59749, -59765, -59765, -59784, -59784, +59727, +59727, +59727, +59741, +59760, +59771, +59810, 59822, -59822, -59867, -59878, -59890, -59890, -59925, -59925, -59925, -59925, -59925, -59942, -59942, -59964, -59964, -59964, -59978, -59985, -59997, -60010, -60010, -60055, -60091, -60101, -60101, -60108, -60114, -60139, -60139, -60139, -60156, -60156, -60156, -60163, -60163, -60169, -60175, -60181, -60181, -60181, -60187, -60195, -60215, -60215, -60215, -60215, -60234, -60234, -60234, -60244, -60284, -60290, -60305, -60305, -60317, -60380, -60388, -60388, -60393, -60400, -60400, -60400, -60400, -60407, -60407, -60407, -60407, -60431, -60450, -60460, -60512, -60522, -60532, -60532, -60552, -60560, -60560, -60560, -60594, -60594, -60607, -60615, -60615, -60615, -60628, -60628, -60649, -60655, -60663, -60675, +59831, +59850, +59856, +59880, +59923, +59966, +59973, +59987, +60006, +60041, +60041, +60070, +60103, +60119, +60131, +60136, +60152, +60184, +60191, +60220, +60228, +60253, +60253, +60280, +60303, +60303, +60310, +60345, +60345, +60372, +60395, +60406, +60430, +60454, +60461, +60486, +60497, +60504, +60511, +60528, +60535, +60535, +60535, +60556, +60556, +60563, +60581, +60599, +60599, +60616, +60636, +60636, +60668, +60690, +60690, 60697, -60713, -60731, +60716, +60723, 60747, -60754, -60761, -60761, -60778, -60778, -60778, -60778, -60782, -60793, -60811, -60811, -60848, -60874, -60904, -60904, -60910, +60759, +60771, +60785, +60792, +60792, +60792, +60815, +60829, +60849, +60849, +60849, +60849, +60859, +60870, +60911, 60929, -60944, -60959, -60977, -60984, -60992, -60992, -61013, -61019, -61045, -61045, -61049, -61061, -61061, -61061, -61061, -61069, -61089, -61115, -61138, -61148, -61165, -61182, -61203, -61241, -61295, -61295, -61295, -61295, -61308, -61335, -61335, -61335, -61335, -61358, -61406, +60929, +60947, +60947, +60947, +60947, +60947, +60947, +60947, +60974, +60974, +60974, +60991, +61014, +61025, +61025, +61025, +61062, +61074, +61074, +61074, +61080, +61096, +61112, +61112, +61136, +61136, +61136, +61147, +61154, +61154, +61176, +61176, +61199, +61209, +61224, +61224, +61231, +61246, +61246, +61246, +61266, +61266, +61273, +61294, +61312, +61312, +61332, +61332, +61354, +61371, +61378, +61378, +61378, 61410, -61410, -61418, -61418, -61418, -61418, -61424, -61424, -61424, -61424, -61438, -61452, -61497, -61505, -61505, -61529, -61554, -61575, -61581, -61581, -61615, -61623, +61417, +61433, +61433, +61455, +61489, +61489, +61501, +61501, +61513, +61513, +61547, +61547, +61547, +61558, +61558, +61578, +61584, +61598, +61598, +61598, +61598, +61598, +61598, +61627, +61635, +61635, +61635, 61663, 61663, -61677, -61677, -61686, -61686, -61698, -61698, -61698, -61705, -61705, -61705, -61705, -61714, -61714, -61745, -61755, -61761, -61779, -61807, -61807, -61817, -61817, -61855, -61872, -61872, -61872, -61872, -61872, -61872, -61878, -61905, -61905, -61905, -61905, -61930, -61943, -61943, -61949, +61669, +61687, +61687, +61687, +61706, +61723, +61803, +61803, +61803, +61813, +61823, +61842, +61842, +61870, +61870, +61926, +61926, +61926, +61944, 61970, -61982, -61982, -61982, -61982, -61993, -61993, -62005, -62036, -62036, -62055, -62076, -62076, -62091, +61980, +61980, +61980, +61985, +62001, +62007, +62007, +62035, +62052, +62067, +62081, +62081, +62081, +62081, +62087, +62118, +62118, 62124, -62134, -62134, -62140, -62161, +62142, +62149, +62149, 62181, -62193, -62236, -62243, -62261, -62261, -62297, -62297, -62308, -62317, -62317, -62331, -62356, -62356, -62417, -62452, -62452, -62452, -62467, -62467, -62467, -62477, -62477, -62486, -62486, -62510, -62510, -62518, -62548, -62548, -62567, -62567, -62567, -62580, -62580, -62580, -62586, -62593, -62613, -62613, -62628, -62669, +62209, +62209, +62209, +62209, +62225, +62225, +62225, +62232, +62268, +62286, +62320, +62320, +62320, +62320, +62320, +62320, +62320, +62335, +62335, +62343, +62379, +62425, +62425, +62442, +62442, +62474, +62484, +62530, +62555, +62555, +62582, +62582, +62608, +62608, +62621, +62621, +62631, +62681, +62681, 62697, 62697, -62697, -62697, -62697, -62718, -62718, -62718, -62718, -62718, -62741, -62771, -62797, -62827, -62847, -62847, -62847, -62847, -62901, -62901, -62901, -62901, -62901, -62915, -62915, -62926, -62940, -62940, -62940, -62948, -62954, -62954, -62960, -62975, -62975, +62723, +62753, +62774, +62774, +62774, +62774, +62774, +62820, +62829, +62829, +62837, +62841, +62841, +62849, +62849, +62857, +62857, +62925, +62931, +62931, +62937, +62966, +62978, 62987, -63007, -63007, -63044, -63044, -63065, -63065, -63081, -63081, -63100, -63120, -63133, -63150, -63150, -63167, -63167, -63187, -63227, -63227, -63227, -63227, -63227, -63227, -63256, -63273, -63277, -63291, -63297, -63297, -63297, -63297, -63315, -63351, -63368, -63397, -63397, -63397, -63397, -63409, -63437, -63437, -63437, -63444, -63444, -63444, -63489, -63522, -63522, -63522, -63538, -63554, -63554, -63554, -63569, -63576, -63576, -63606, -63615, -63626, -63646, -63670, -63670, -63670, -63696, -63710, -63730, -63742, -63757, -63766, -63792, -63807, -63807, -63828, +62993, +63002, +63016, +63052, +63097, +63101, +63123, +63152, +63175, +63202, +63208, +63214, +63214, +63214, +63214, +63231, +63231, +63239, +63286, +63321, +63333, +63333, +63348, +63348, +63348, +63355, +63355, +63359, +63372, +63394, +63394, +63394, +63410, +63410, +63417, +63417, +63417, +63452, +63469, +63501, +63501, +63511, +63520, +63530, +63530, +63530, +63530, +63543, +63558, +63558, +63574, +63574, +63591, +63613, +63625, +63645, +63645, +63663, +63663, +63675, +63687, +63687, +63687, +63687, +63715, +63731, +63737, +63737, +63737, +63741, +63759, +63759, +63759, +63769, +63769, +63769, +63769, +63769, +63794, +63810, +63841, 63849, 63849, -63856, -63876, -63910, +63849, +63849, +63849, +63862, +63862, +63862, +63880, +63886, +63901, +63914, 63928, -63945, -63961, -63961, -63982, -64042, -64050, -64066, -64071, -64089, -64099, -64099, -64129, -64150, -64150, -64168, -64168, -64168, -64168, -64168, -64214, -64231, +63928, +63955, +63962, +63969, +63981, +63981, +63981, +63981, +63981, +63999, +64014, +64014, +64033, +64048, +64048, +64059, +64059, +64059, +64059, +64108, +64108, +64108, +64108, +64117, +64127, +64158, +64158, +64158, +64178, +64190, +64215, 64241, 64241, -64250, -64294, -64294, -64294, -64326, -64355, -64366, -64386, -64386, -64386, -64408, -64408, -64426, -64458, -64458, -64492, -64492, -64498, -64537, -64555, -64573, -64573, -64622, -64642, -64651, -64651, -64659, -64659, -64683, -64683, -64683, -64718, -64718, -64735, -64735, -64741, -64741, -64745, -64745, -64771, -64771, -64771, -64771, -64792, -64800, -64825, -64825, -64825, -64850, -64868, -64868, -64886, -64886, -64897, -64897, -64904, -64909, -64945, -64945, -64965, -64982, -65005, -65005, -65044, -65068, -65082, -65090, -65090, -65113, -65125, -65134, -65151, -65172, -65184, -65211, -65211, -65221, -65277, -65284, +64241, +64241, +64263, +64291, +64295, +64295, +64307, +64307, +64307, +64307, +64307, +64307, +64311, +64352, +64352, +64352, +64368, +64368, +64368, +64412, +64412, +64434, +64443, +64443, +64456, +64456, +64456, +64469, +64514, +64514, +64514, +64514, +64514, +64522, +64522, +64522, +64544, +64578, +64608, +64633, +64644, +64672, +64700, +64716, +64742, +64755, +64755, +64765, +64793, +64846, +64856, +64856, +64879, +64885, +64896, +64896, +64924, +64928, +64928, +64938, +64971, +64971, +64977, +65007, +65019, +65019, +65034, +65073, +65073, +65091, +65091, +65091, +65101, +65101, +65101, +65112, +65146, +65167, +65178, +65178, +65192, +65208, +65227, +65227, +65227, +65227, +65227, +65227, +65227, +65227, +65227, +65271, +65286, 65290, -65290, -65290, -65290, -65301, -65362, -65380, -65380, -65400, -65411, -65437, -65437, -65437, -65450, -65458, -65458, -65458, -65458, -65483, -65483, +65324, +65348, +65358, +65412, +65412, +65412, +65419, +65423, +65459, +65466, +65489, 65496, -65496, -65528, -65542, -65568, -65568, -65578, -65578, -65578, -65610, -65610, -65618, -65641, -65664, -65664, -65664, -65664, -65693, -65693, -65693, -65716, -65743, -65760, -65760, -65760, -65767, -65771, -65781, -65811, -65816, -65836, -65836, -65857, -65868, -65880, -65880, -65880, -65886, -65904, -65904, -65919, -65919, -65947, -65951, -65958, -65962, -65972, -65989, -65989, -65989, -65993, -66011, -66011, +65502, +65512, +65538, +65547, +65551, +65585, +65601, +65601, +65612, +65632, +65651, +65657, +65657, +65669, +65669, +65675, +65679, +65701, +65701, +65730, +65756, +65756, +65770, +65789, +65789, +65789, +65818, +65818, +65851, +65851, +65865, +65869, +65879, +65879, +65911, +65911, +65917, +65917, +65936, +65959, +65965, +65965, +65965, +65965, +65990, +66019, 66036, -66073, -66073, -66079, -66095, -66095, -66124, -66136, -66136, -66154, -66172, -66176, -66176, -66185, -66185, -66185, -66198, -66198, -66236, -66250, -66255, -66277, -66277, -66277, -66291, -66313, -66332, -66352, -66352, -66356, -66378, -66384, -66384, -66399, -66399, -66434, -66444, -66444, -66444, -66486, -66501, -66546, -66556, -66589, -66589, -66589, -66596, -66596, -66607, -66618, -66644, -66672, -66672, -66672, -66686, -66686, -66705, -66705, -66705, -66723, -66733, -66733, -66741, -66764, -66785, -66810, -66810, -66841, -66841, -66841, -66849, -66857, -66857, -66857, -66867, -66885, -66885, +66068, +66076, +66090, +66108, +66130, +66130, +66166, +66184, +66204, +66204, +66217, +66217, +66228, +66228, +66228, +66247, +66247, +66278, +66311, +66316, +66335, +66350, +66368, +66382, +66382, +66382, +66382, +66382, +66382, +66386, +66402, +66408, +66408, +66418, +66422, +66470, +66470, +66491, +66521, +66548, +66548, +66555, +66574, +66581, +66581, +66593, +66593, +66600, +66610, +66636, +66657, +66675, +66675, +66675, +66687, +66721, +66751, +66760, +66781, +66798, +66798, +66811, +66811, +66811, +66819, +66819, +66830, +66830, +66853, +66869, 66893, -66899, -66919, -66927, -66944, -66954, -66954, -66961, -66993, -66993, -67008, -67022, -67064, -67068, -67089, -67089, -67093, +66893, +66893, +66893, +66900, +66918, +66940, +66950, +66959, +66959, +66965, +67016, +67023, +67047, +67047, +67062, +67069, 67106, -67106, -67121, -67121, -67125, 67136, -67145, -67145, -67161, -67161, -67161, -67191, -67191, -67191, -67200, -67200, -67209, -67209, -67209, -67209, -67223, -67223, -67223, -67223, -67223, -67223, -67223, -67237, -67237, -67287, -67287, -67294, -67294, -67294, -67294, -67294, +67167, +67177, +67212, +67230, +67230, +67249, +67279, +67285, 67312, -67338, -67338, -67338, -67354, -67376, -67387, -67392, -67407, -67407, -67432, -67472, -67483, -67526, -67526, +67330, +67351, +67358, +67374, +67394, +67441, +67473, +67513, +67524, +67524, +67545, +67565, +67573, 67584, -67605, -67625, -67633, -67649, -67659, -67659, -67659, -67659, -67675, -67712, -67746, -67764, -67764, -67795, -67795, -67799, -67808, -67808, -67817, -67829, -67829, -67836, -67856, -67874, -67874, -67884, -67907, -67907, -67912, -67912, -67936, -67936, -67951, -67969, -67975, -67984, -67984, -67984, -67984, -67984, -68010, -68010, -68016, -68037, -68044, -68044, -68053, -68072, -68078, -68078, -68078, -68078, -68078, -68078, -68091, -68091, -68091, +67619, +67637, +67637, +67657, +67684, +67684, +67684, +67684, +67684, +67713, +67721, +67733, +67733, +67733, +67739, +67745, +67745, +67750, +67750, +67787, +67787, +67806, +67827, +67837, +67872, +67872, +67872, +67898, +67916, +67922, +67922, +67944, +67953, +67996, +67996, +68023, +68023, +68038, +68038, +68038, +68074, 68100, 68100, -68110, -68117, -68125, 68125, 68125, +68141, 68157, 68157, -68157, -68173, -68173, -68218, -68218, -68248, -68288, -68288, -68288, -68310, -68310, -68343, -68343, -68382, -68402, -68402, -68427, -68450, -68461, -68468, -68493, -68542, -68542, -68573, -68591, -68591, -68591, -68598, -68616, -68634, -68634, -68634, -68634, -68634, -68663, -68682, -68695, -68711, -68733, -68769, -68769, -68804, -68804, -68815, -68821, -68842, -68842, -68868, -68868, -68868, -68868, -68868, -68868, -68868, -68884, -68884, -68884, -68888, -68888, -68888, -68888, -68926, -68926, -68940, -68962, -68962, -68979, -68998, -69014, -69020, -69020, -69039, -69039, -69045, -69073, -69073, -69073, -69073, -69077, -69077, -69077, -69093, -69099, -69099, -69099, -69107, -69138, -69138, -69146, -69146, -69180, -69180, -69213, -69222, -69222, -69245, +68177, +68216, +68221, +68256, +68256, +68262, +68285, +68285, +68301, +68301, +68301, +68312, +68312, +68332, +68332, +68381, +68403, +68409, +68432, +68432, +68445, +68465, +68471, +68471, +68488, +68515, +68515, +68539, +68539, +68552, +68569, +68594, +68594, +68609, +68648, +68704, +68710, +68730, +68737, +68737, +68750, +68760, +68766, +68794, +68794, +68794, +68794, +68794, +68810, +68810, +68825, +68839, +68839, +68860, +68893, +68893, +68893, +68922, +68922, +68922, +68927, +68927, +68927, +68944, +68944, +68944, +68944, +68944, +68944, +68960, +68970, +68985, +69001, +69001, +69007, +69028, +69028, +69042, +69042, +69048, +69076, +69076, +69095, +69124, +69131, +69155, +69162, +69162, +69176, +69184, +69184, +69184, +69184, +69230, 69254, -69276, -69286, -69286, -69286, -69326, -69344, -69378, -69396, -69396, -69408, -69408, -69445, -69445, -69456, -69469, -69469, -69477, +69261, +69267, +69267, +69273, +69292, +69298, +69335, +69356, +69356, +69361, +69367, +69367, +69367, +69367, +69382, +69402, +69421, +69434, +69455, +69467, +69479, 69485, -69513, -69526, -69526, -69536, -69569, -69569, -69614, -69632, +69493, +69505, +69511, +69556, +69586, +69595, +69605, +69605, +69605, +69621, +69634, +69634, +69648, +69648, +69652, +69652, 69658, -69668, -69668, -69693, -69732, -69740, -69756, -69772, -69772, -69779, -69779, -69779, -69779, -69779, -69800, -69815, -69819, -69819, -69846, -69852, -69941, -69962, -69962, -69962, -69962, -69962, -69962, -69962, -69962, -69982, -70001, -70012, -70031, -70038, -70038, -70046, -70069, -70069, -70094, -70128, -70128, -70128, -70128, -70128, -70128, -70128, +69678, +69706, +69717, +69717, +69731, +69731, +69731, +69731, +69752, +69766, +69775, +69807, +69814, +69814, +69855, +69859, +69868, +69868, +69874, +69874, +69874, +69874, +69874, +69883, +69900, +69900, +69917, +69934, +69949, +69969, +69969, +69996, +69996, +70014, +70056, +70075, +70097, 70145, -70177, -70177, -70189, -70189, -70189, -70189, -70189, -70219, -70219, -70219, -70219, -70226, -70226, -70245, -70245, -70245, -70245, -70253, -70253, -70253, -70279, -70279, -70279, -70279, -70279, -70279, -70311, -70349, -70356, -70386, -70386, -70424, -70424, -70466, -70466, -70494, -70523, -70541, -70550, -70568, -70583, -70592, -70592, -70592, -70592, -70631, -70656, -70676, -70676, -70696, -70696, -70703, +70145, +70168, +70182, +70193, +70209, +70209, +70233, +70233, +70240, +70240, +70240, +70247, +70280, +70295, +70295, +70321, +70351, +70357, +70364, +70384, +70397, +70409, +70413, +70413, +70421, +70430, +70446, +70446, +70446, +70461, +70461, +70461, +70478, +70478, +70484, +70490, +70490, +70490, +70504, +70509, +70509, +70522, +70522, +70522, +70532, +70532, +70532, +70539, +70546, +70574, +70604, +70634, +70649, +70649, +70663, +70669, +70669, +70681, +70681, +70681, +70698, +70698, 70710, 70710, -70716, -70730, -70730, -70769, -70769, -70769, -70786, -70804, -70804, -70821, -70832, -70832, -70844, -70844, -70891, -70891, +70710, +70710, +70710, +70710, +70731, +70744, +70761, +70783, +70783, +70783, +70783, +70790, +70790, +70800, +70835, +70835, +70835, +70851, +70851, +70851, +70856, +70856, +70864, +70864, +70864, +70864, +70879, +70879, +70879, +70898, 70904, -70944, -70951, -70951, -70961, -70961, -70990, -71009, -71025, -71032, -71045, -71045, -71052, -71052, -71052, -71052, -71052, -71063, -71073, -71080, -71080, -71119, -71119, -71119, -71155, -71155, -71155, -71155, -71191, -71207, -71207, -71214, -71214, -71214, -71225, -71242, -71248, -71252, -71274, -71307, +70904, +70904, +70910, +70910, +70930, +70930, +70941, +70957, +70978, +70988, +71002, +71006, +71020, +71030, +71035, +71056, +71094, +71116, +71116, +71135, +71135, +71147, +71164, +71175, +71195, +71195, +71239, +71257, +71277, +71277, +71291, +71311, +71311, +71311, 71320, -71356, -71356, -71356, -71374, -71374, -71404, -71428, -71459, -71467, -71478, -71478, -71489, -71495, -71505, -71543, -71543, -71565, -71565, -71578, -71638, -71666, -71673, -71688, -71688, -71688, -71700, -71700, -71730, -71742, -71742, -71742, -71754, -71771, +71324, +71331, +71331, +71331, +71337, +71337, +71349, +71362, +71362, +71362, +71362, +71385, +71400, +71409, +71416, +71416, +71416, +71416, +71434, +71454, +71454, +71466, +71466, +71466, +71466, +71493, +71511, +71511, +71547, +71547, +71581, +71581, +71590, +71590, +71590, +71597, +71613, +71613, +71620, +71641, +71645, +71645, +71659, +71659, +71668, +71675, +71681, +71687, +71687, +71704, +71704, +71704, +71704, +71722, +71722, +71765, 71789, -71836, -71841, -71852, -71852, -71885, -71896, -71913, -71913, -71971, -71991, -71991, -72030, -72054, -72054, -72101, -72130, -72130, +71789, +71814, +71825, +71838, +71855, +71855, +71861, +71891, +71891, +71907, +71928, +71928, +71936, +71983, +71983, +71993, +71998, +71998, +71998, +72033, +72052, +72077, +72089, +72098, +72137, +72137, +72144, +72144, 72148, -72148, -72158, -72158, -72158, -72158, -72158, -72158, -72158, -72167, -72184, -72203, -72209, -72209, -72214, -72228, +72166, +72191, +72221, 72238, -72248, -72248, -72248, -72257, -72289, -72289, -72289, -72289, -72295, -72295, -72295, -72295, -72356, -72369, -72369, -72369, -72377, -72414, -72434, -72441, -72459, -72459, -72470, -72477, -72477, -72477, -72477, -72477, +72293, +72326, +72350, +72350, +72375, +72375, +72387, +72400, +72432, +72432, +72456, 72482, -72486, -72504, -72504, -72527, -72527, -72548, -72548, -72548, -72558, -72564, -72564, -72581, -72581, -72587, -72587, -72612, -72627, -72633, -72633, -72633, -72644, -72660, -72660, -72681, -72702, -72712, -72712, -72732, -72775, -72775, -72775, -72775, -72775, -72775, -72775, -72830, -72839, -72861, -72877, -72894, -72894, -72894, -72894, -72900, -72900, -72931, -72931, -72931, +72482, +72502, +72502, +72506, +72506, +72525, +72578, +72585, +72618, +72618, +72632, +72674, +72674, +72683, +72726, +72743, +72743, +72743, +72753, +72761, +72767, +72798, +72832, +72832, +72872, +72886, +72913, +72913, 72943, +72965, 72980, -72991, -73019, -73034, -73056, -73056, -73073, -73086, -73086, -73086, -73086, -73109, -73129, -73139, -73157, -73167, -73167, -73192, -73192, -73209, -73231, -73231, -73247, -73268, -73288, +73003, +73025, +73025, +73025, +73058, +73104, +73119, +73126, +73146, +73146, +73158, +73170, +73186, +73186, +73205, +73218, +73222, +73234, +73251, +73261, +73261, +73261, +73299, +73299, +73299, +73299, 73303, -73324, -73324, -73324, -73331, -73331, -73331, -73367, -73393, -73398, -73429, -73452, -73463, -73463, -73463, -73492, -73492, -73492, -73492, -73515, -73530, -73553, -73563, -73563, -73576, -73576, -73592, -73611, -73645, -73687, -73700, -73700, -73700, -73716, -73758, -73790, -73790, -73804, -73804, -73822, -73822, -73845, +73322, +73343, +73352, +73352, +73357, +73357, +73374, +73382, +73382, +73396, +73402, +73402, +73414, +73441, +73459, +73459, +73488, +73494, +73508, +73508, +73584, +73610, +73610, +73630, +73647, +73647, +73647, +73665, +73703, +73715, +73715, +73715, +73736, +73750, +73762, +73782, +73796, +73824, +73824, +73838, +73838, +73838, +73850, 73862, 73862, -73875, -73919, -73919, -73938, -73938, -73938, -73968, -73968, -73981, -73992, -73992, -73992, -73992, -73992, -74000, -74000, -74005, -74024, -74058, -74074, -74074, -74096, -74144, -74161, -74161, -74161, -74161, -74161, -74169, -74179, -74191, -74204, -74204, -74214, -74225, -74225, -74238, -74279, -74289, -74296, -74320, -74320, -74325, -74325, -74325, -74378, -74426, -74426, -74426, -74473, -74488, -74498, -74498, -74531, -74531, -74531, +73882, +73882, +73882, +73882, +73897, +73918, +73951, +73951, +73951, +73951, +73963, +73973, +73973, +73973, +73983, +73993, +74021, +74021, +74021, +74021, +74021, +74068, +74091, +74104, +74104, +74104, +74104, +74116, +74147, +74147, +74147, +74147, +74159, +74183, +74197, +74209, +74229, +74243, +74243, +74254, +74254, +74254, +74260, +74267, +74267, +74288, +74333, +74350, +74350, +74360, +74365, +74365, +74381, +74393, +74408, +74414, +74414, +74414, +74414, +74464, +74469, +74486, +74515, +74515, +74515, 74531, +74540, +74562, 74572, -74597, -74597, -74597, +74572, +74572, +74595, +74595, +74601, 74611, -74611, -74631, -74645, +74643, 74663, -74674, -74701, -74701, -74707, -74712, -74712, -74712, -74727, -74737, -74746, -74770, -74790, +74716, +74716, +74732, +74732, +74745, +74745, +74760, +74775, +74775, +74792, +74792, +74792, 74803, -74808, -74843, -74854, -74897, -74901, -74901, -74907, -74945, -74945, -74945, -74958, -74978, -74978, -74998, -74998, -75015, -75015, -75015, -75023, -75023, -75023, -75032, -75077, -75077, -75115, -75127, -75127, -75127, -75160, -75166, -75166, -75172, -75172, -75186, -75224, -75224, -75241, -75241, -75241, -75251, -75251, -75257, -75263, -75278, +74803, +74826, +74865, +74870, +74870, +74870, +74870, +74886, +74886, +74890, +74890, +74926, +74926, +74940, +74940, +74954, +74954, +74964, +74976, +74976, +74976, +75000, +75010, +75019, +75044, +75044, +75050, +75059, +75088, +75088, +75128, +75128, +75141, +75153, +75153, +75153, +75153, +75185, +75209, +75221, +75221, +75221, +75233, +75233, +75237, +75237, +75267, 75291, -75335, -75372, -75382, -75398, -75404, -75423, -75438, -75438, -75444, -75444, -75452, -75452, -75458, -75481, -75481, -75481, -75494, -75504, -75510, -75524, -75540, -75540, -75540, -75546, -75552, -75574, -75574, -75614, -75630, -75646, -75652, -75652, -75652, -75692, -75708, -75708, -75724, -75724, -75724, -75724, -75724, -75724, -75729, -75737, -75754, -75754, -75754, -75772, -75772, -75795, -75795, -75820, -75858, -75858, -75875, -75881, -75890, -75890, +75296, +75308, +75328, +75346, +75357, +75369, +75390, +75390, +75462, +75475, +75475, +75475, +75496, +75523, +75523, +75542, +75562, +75580, +75590, +75604, +75604, +75660, +75678, +75678, +75678, +75678, +75690, +75702, +75728, +75751, +75764, +75792, +75805, +75805, +75805, +75805, +75815, +75824, +75824, +75824, +75824, +75833, +75833, +75833, +75833, +75833, +75841, +75851, +75851, +75851, +75851, +75851, +75863, +75863, +75885, +75885, 75900, -75916, -75916, -75925, -75941, -75941, -75960, -75960, -75960, -75960, -75983, -75983, -75983, -75983, -75993, -75993, -75993, -76007, -76028, -76028, -76056, -76056, -76067, -76067, +75912, +75943, +75943, +75962, +75991, +75991, +76016, +76045, +76052, +76052, +76052, +76052, +76065, 76080, -76100, -76100, -76107, -76107, -76107, -76107, -76107, -76107, -76107, -76116, -76136, -76136, -76136, -76149, -76177, -76193, -76193, -76199, +76080, +76080, +76087, +76087, +76108, +76108, +76108, +76108, +76108, +76118, +76129, +76129, +76129, +76169, +76169, +76188, +76188, +76197, +76206, +76216, +76227, +76227, +76227, +76232, +76253, +76253, 76253, 76259, -76281, -76299, -76349, -76349, -76357, -76362, -76382, -76399, -76405, -76421, +76259, +76274, +76295, +76310, +76310, +76326, +76326, +76326, +76344, +76374, +76406, +76406, +76406, 76437, -76442, -76442, -76457, -76480, -76480, -76497, -76514, -76520, -76525, -76535, -76535, -76597, -76597, -76603, -76625, -76625, +76472, +76486, +76493, +76499, +76509, +76530, +76537, +76558, +76568, +76587, +76587, +76587, +76587, +76587, +76617, +76617, +76617, +76617, +76617, +76617, 76625, +76640, 76659, -76679, -76698, -76698, -76698, -76726, -76757, -76780, -76786, -76792, -76792, -76806, -76826, -76846, -76862, -76871, +76678, +76678, +76678, +76693, +76693, +76702, +76734, +76734, +76734, +76734, +76771, +76794, +76808, +76830, +76830, +76830, +76837, +76837, +76837, +76843, +76843, +76861, +76890, +76898, 76906, -76906, -76921, -76921, -76921, -76921, -76921, -76955, -76955, -76968, -76994, -77032, +76913, +76913, +76927, +76927, +76934, +76943, +76943, +76943, +76943, +76959, +76959, +76969, +76969, +76976, +76976, +77017, +77017, +77048, 77048, -77068, -77068, 77073, -77094, -77094, -77094, -77103, -77120, -77120, -77120, -77136, -77136, -77148, -77166, -77185, -77185, -77191, -77191, -77233, -77252, -77252, -77252, -77252, +77073, +77088, +77118, +77118, +77139, +77153, +77153, +77153, +77153, +77178, +77214, +77214, +77214, +77231, +77249, +77258, +77258, +77265, +77284, +77301, +77301, +77301, 77307, -77318, -77318, -77318, -77318, -77324, -77343, -77357, -77357, -77373, -77383, -77389, -77416, -77427, -77444, -77475, -77514, -77514, -77514, -77520, -77520, -77538, -77563, -77572, -77572, -77572, -77572, -77613, -77613, -77633, -77643, -77651, -77667, -77673, -77690, -77690, -77690, -77705, -77723, -77723, -77723, -77744, -77744, -77763, -77801, -77816, -77838, -77838, +77316, +77316, +77316, +77316, +77322, +77322, +77340, +77340, +77346, +77364, +77364, +77371, +77371, +77371, +77371, +77388, +77394, +77394, +77394, +77409, +77409, +77429, +77459, +77459, +77477, +77491, +77491, +77529, +77529, +77546, +77577, +77599, +77604, +77625, +77625, +77631, +77640, +77662, +77675, +77675, +77675, +77688, +77698, +77708, +77708, +77708, +77715, +77731, +77749, +77749, +77753, +77785, +77785, +77785, +77805, +77818, +77818, +77844, 77844, -77856, 77862, -77877, -77889, -77919, -77935, -77940, -77981, -77986, -78016, -78029, -78029, -78029, -78049, -78049, -78049, -78061, -78061, -78080, -78080, -78080, -78080, -78080, -78080, -78089, -78089, -78101, -78101, -78101, -78101, -78121, -78125, -78155, -78155, -78185, -78185, -78209, -78224, -78254, -78282, -78282, -78296, -78314, -78337, -78342, -78371, -78371, -78383, -78393, -78426, -78440, -78440, -78455, -78477, -78486, -78499, -78499, -78507, -78507, -78578, -78584, -78596, -78617, -78659, -78665, -78665, -78705, -78705, -78741, -78778, -78792, -78805, -78805, -78812, -78831, -78831, -78848, -78866, -78911, -78911, -78916, -78935, -78952, -78964, -78979, -78979, -78985, -79017, -79039, -79039, -79066, -79066, -79085, +77886, +77886, +77904, +77915, +77930, +77945, +77945, +77945, +77945, +77961, +77984, +77997, +78011, +78041, +78041, +78058, +78065, +78065, +78072, +78098, +78113, +78127, +78141, +78153, +78183, +78183, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78202, +78231, +78231, +78231, +78273, +78273, +78283, +78341, +78341, +78341, +78341, +78341, +78363, +78363, +78363, +78396, +78413, +78413, +78424, +78445, +78445, +78472, +78522, +78522, +78522, +78539, +78539, +78543, +78558, +78558, +78588, +78592, +78592, +78609, +78609, +78633, +78633, +78646, +78646, +78646, +78654, +78654, +78694, +78694, +78712, +78721, +78742, +78774, +78774, +78774, +78790, +78810, +78828, +78891, +78891, +78903, +78903, +78903, +78903, +78978, +78978, +78993, +78999, +79016, +79048, +79056, +79056, +79086, 79091, -79091, -79110, -79128, -79147, -79147, -79168, -79168, -79224, -79224, -79242, -79242, -79252, -79252, -79252, -79252, -79271, -79291, -79309, -79327, -79327, -79327, -79346, -79375, -79393, +79119, +79125, +79141, +79141, +79150, +79166, +79212, +79232, +79266, +79266, +79266, +79302, +79319, +79335, +79376, 79400, 79400, -79407, -79407, -79417, -79432, -79432, -79432, -79464, -79476, -79476, -79501, -79511, -79518, -79518, -79539, -79547, +79418, +79418, +79418, +79418, +79455, +79455, +79455, +79474, +79503, +79503, +79515, 79569, 79569, -79600, -79610, -79642, -79676, -79713, -79713, -79736, -79736, +79578, +79589, +79589, +79589, +79601, +79601, +79601, +79601, +79625, +79625, +79625, +79646, +79659, +79659, +79665, +79665, +79665, +79688, +79694, +79704, +79716, +79716, +79737, +79737, +79737, +79744, 79755, -79755, -79755, -79755, -79771, -79801, -79801, -79821, -79837, -79848, -79860, -79860, -79867, -79867, -79867, -79867, -79867, -79906, -79933, -79943, -79977, -79993, -80011, -80042, -80060, -80060, -80082, -80101, -80113, -80119, -80155, -80159, -80174, -80174, -80174, -80174, -80174, -80183, -80202, -80214, +79806, +79833, +79843, +79856, +79870, +79887, +79887, +79917, +79917, +79917, +79925, +79925, +79932, +79932, +79950, +79975, +80002, +80002, +80027, +80044, +80044, +80044, +80044, +80044, +80044, +80044, +80044, +80044, +80055, +80074, +80089, +80089, +80089, +80098, +80118, +80126, +80150, +80150, +80198, +80198, +80207, +80207, 80218, -80247, -80259, -80259, -80295, -80295, -80300, -80342, -80342, -80342, -80359, -80359, -80375, -80375, -80402, -80413, -80446, -80446, -80480, -80485, -80504, -80504, -80525, -80529, +80235, +80246, +80246, +80246, +80255, +80276, +80276, +80280, +80306, +80329, +80350, +80360, +80376, +80376, +80396, +80396, +80396, +80396, +80406, +80406, +80415, +80424, +80437, +80461, +80461, +80476, +80503, +80515, +80515, 80533, -80548, -80553, -80565, -80569, -80569, -80605, -80623, -80623, -80623, -80623, -80643, -80684, -80684, -80695, -80695, -80712, -80730, -80737, -80737, -80776, -80776, -80776, -80776, -80776, -80776, -80795, -80795, -80816, -80867, -80881, -80881, -80881, -80896, -80896, -80913, -80913, -80937, -80937, -80947, -80952, -80952, -80952, -80958, -80992, -80992, -81015, -81048, -81063, -81063, -81082, -81089, -81121, -81121, -81121, -81151, -81196, -81201, -81215, -81215, -81244, -81244, -81244, +80559, +80567, +80567, +80567, +80567, +80595, +80595, +80600, +80618, +80618, +80624, +80624, +80624, +80624, +80661, +80661, +80697, +80697, +80697, +80697, +80697, +80714, +80718, +80718, +80725, +80772, +80786, +80805, +80805, +80833, +80882, +80886, +80907, +80907, +80907, +80955, +80955, +80963, +80986, +80986, +81002, +81002, +81025, +81025, +81043, +81066, +81066, +81076, +81081, +81101, +81117, +81146, +81146, +81162, +81188, +81188, +81195, +81204, +81227, +81227, +81227, +81227, +81264, +81264, 81273, -81273, -81307, -81333, -81338, -81400, -81400, -81400, -81400, -81418, -81418, -81418, -81430, +81283, +81299, +81311, +81339, +81339, +81350, +81372, +81397, +81425, +81425, +81425, +81425, 81455, -81455, -81493, -81499, -81527, -81527, -81539, -81554, +81467, +81467, +81467, +81483, +81497, +81513, +81513, +81513, 81560, -81584, -81584, -81601, -81601, -81601, -81601, -81601, -81601, -81601, -81619, -81631, -81643, -81643, -81643, -81654, -81666, -81716, -81740, -81740, -81757, -81769, -81797, -81797, -81848, -81873, -81873, -81873, -81873, -81885, -81885, -81898, -81911, -81916, -81940, -81940, -81940, -81940, -81956, -81956, -81961, -81977, -81994, -81994, -82025, -82025, +81578, +81595, +81595, +81605, +81605, +81616, +81616, +81623, +81623, +81623, +81632, +81640, +81640, +81640, +81640, +81640, +81640, +81640, +81659, +81676, +81690, +81690, +81690, +81690, +81690, +81690, +81694, +81694, +81709, +81725, +81730, +81730, +81746, +81746, +81765, +81765, +81765, +81801, +81815, +81815, +81826, +81826, +81830, +81830, +81830, +81849, +81863, +81874, +81884, +81884, +81884, +81909, +81953, +81971, +82024, +82024, +82024, +82024, 82031, -82047, -82047, -82086, -82105, -82124, -82124, -82143, -82143, -82143, -82143, -82163, -82163, -82163, -82163, -82163, -82188, -82193, -82207, -82207, -82207, -82234, -82246, -82265, -82314, -82314, -82314, -82323, -82323, -82323, -82323, -82337, -82337, -82343, -82349, -82349, -82375, -82385, -82402, -82402, -82452, -82462, -82462, -82462, -82469, -82481, -82481, -82481, -82540, -82550, -82567, -82576, -82576, -82576, -82585, -82591, -82620, -82634, -82668, +82054, +82068, +82088, +82104, +82132, +82192, +82221, +82221, +82262, +82281, +82287, +82300, +82300, +82300, +82300, +82300, +82300, +82300, +82306, +82306, +82328, +82328, +82338, +82338, +82365, +82365, +82365, +82365, +82365, +82365, +82365, +82372, +82372, +82403, +82403, +82403, +82403, +82403, +82420, +82453, +82453, +82467, +82467, +82467, +82479, +82484, +82493, +82502, +82518, +82559, +82582, +82618, +82618, +82618, +82667, +82667, 82687, -82714, -82724, -82724, -82750, -82750, -82750, -82764, -82777, -82811, -82849, -82849, +82703, +82726, +82726, +82726, +82738, +82799, +82799, +82806, +82827, +82843, +82843, +82848, +82848, +82848, +82848, +82848, 82864, -82877, -82888, +82864, +82870, +82878, +82891, +82895, 82917, -82917, -82917, -82923, -82944, -82958, -82958, -82958, -82958, -82958, -82971, -82985, -82985, -83004, -83004, +82933, +82960, +82983, +82983, +83005, 83025, -83025, -83107, -83126, -83126, -83126, -83126, -83126, -83126, -83126, -83132, -83132, -83147, -83153, -83153, -83153, -83164, -83164, -83176, -83183, -83212, -83233, -83294, -83315, -83336, -83355, -83355, -83355, -83367, -83403, -83430, +83058, +83068, +83085, +83090, +83094, +83094, +83094, +83094, +83136, +83169, +83169, +83169, +83169, +83187, +83201, +83201, +83201, +83209, +83225, +83252, +83252, +83275, +83297, +83304, +83304, +83312, +83312, +83316, +83343, +83365, +83370, +83370, +83370, +83390, +83431, +83431, +83436, +83436, 83448, -83448, -83448, -83448, -83488, -83488, -83488, -83488, -83488, -83488, -83506, -83506, -83506, -83510, -83551, -83567, -83575, -83575, -83591, -83591, -83599, -83681, -83681, -83703, -83703, +83454, +83487, +83504, +83504, +83515, +83519, +83519, +83519, +83529, +83529, +83562, +83562, +83569, +83587, +83592, +83606, +83615, +83615, +83642, +83690, 83709, -83732, -83742, -83742, -83752, -83752, -83805, -83805, -83805, -83845, -83864, -83864, -83875, -83907, -83933, -83950, -83976, -83985, -83992, -83992, -84001, -84040, -84040, -84057, -84070, -84096, -84124, +83714, +83714, +83721, +83721, +83721, +83741, +83741, +83755, +83773, +83797, +83812, +83812, +83827, +83837, +83865, +83865, +83865, +83865, +83865, +83877, +83877, +83877, +83884, +83884, +83905, +83910, +83922, +83922, +83934, +83946, +83946, +83968, +83968, +83988, +83988, +84023, +84023, +84023, +84034, +84034, +84034, +84048, +84061, +84085, +84085, +84085, +84125, +84125, +84125, +84125, +84125, +84134, +84134, +84134, +84155, +84155, +84170, 84179, -84187, -84232, -84232, -84286, -84308, -84308, -84322, -84322, -84322, -84322, -84338, -84357, -84373, -84373, -84373, -84394, -84394, -84402, -84402, -84402, -84424, -84445, -84466, -84485, -84501, -84501, -84522, -84529, -84547, -84592, -84592, -84621, -84633, -84651, -84651, -84662, -84689, +84179, +84179, +84212, +84212, +84224, +84242, +84247, +84256, +84256, +84276, +84303, +84303, +84310, +84310, +84317, +84324, +84324, +84324, +84328, +84328, +84346, +84346, +84353, +84364, +84397, +84407, +84407, +84433, +84433, +84433, +84447, +84447, +84463, +84463, +84463, +84488, +84488, +84499, +84523, +84523, +84523, +84540, +84540, +84540, +84556, +84556, +84556, +84556, +84588, +84619, +84666, +84666, +84666, +84666, 84696, -84704, -84704, -84704}; +84730, +84751, +84756, +84756, +84790, +84800, +84832, +84832, +84837, +84853, +84853, +84879, +84879, +84901, +84907, +84920, +84947, +84965, +84997, +85035, +85045, +85045, +85045, +85045, +85086, +85118, +85135, +85172, +85192, +85192, +85192, +85202, +85202, +85215, +85228, +85241, +85268, +85268, +85268, +85287, +85287, +85287, +85287, +85300, +85300, +85305, +85305, +85305, +85353, +85353, +85353, +85368, +85405, +85405, +85432, +85432, +85438, +85443, +85443, +85452, +85459, +85477, +85477, +85490, +85490, +85519, +85519, +85524, +85542, +85552, +85557, +85557, +85557, +85577, +85622, +85640, +85651, +85658, +85663, +85668, +85668, +85680, +85688, +85695, +85695, +85695, +85731, +85731, +85738, +85742, +85742, +85758, +85758, +85758, +85796, +85796, +85796, +85796, +85818, +85840, +85872, +85872, +85872, +85872, +85893, +85898, +85898, +85898, +85907, +85907, +85914, +85933, +85933, +85955, +85955, +85981, +85981, +85996, +86009, +86009, +86019, +86019, +86019, +86029, +86033, +86033, +86033, +86048, +86053, +86053, +86068, +86068, +86088, +86138, +86153, +86178, +86178, +86199, +86218, +86231, +86231, +86231, +86231, +86231, +86247, +86252, +86252, +86277, +86292, +86313, +86342, +86370, +86378, +86430, +86470, +86504, +86509, +86509, +86527, +86536, +86536, +86544, +86555, +86555, +86555, +86580, +86597, +86597, +86618, +86623, +86633, +86648, +86671, +86671, +86698, +86698, +86698, +86705, +86714, +86727, +86732, +86732, +86754, +86754, +86776, +86776, +86810, +86810, +86810, +86817, +86817, +86849, +86870, +86875, +86896, +86941, +86947, +86952, +86973, +86980, +86980, +87006, +87022, +87030, +87037, +87043, +87051, +87051, +87085, +87085, +87101, +87101, +87123, +87160, +87160, +87173, +87188, +87188, +87207, +87207, +87223, +87241, +87258, +87305, +87312, +87312, +87328, +87328, +87348, +87357, +87357, +87375, +87375, +87375, +87375, +87394, +87394, +87425, +87445, +87453, +87471, +87480, +87480, +87501, +87510, +87528, +87528, +87545, +87545, +87560, +87593, +87600, +87600, +87600, +87600, +87600, +87600, +87676, +87676, +87676, +87689, +87709, +87744, +87744, +87778, +87778, +87819, +87819, +87819, +87835, +87835, +87842, +87853, +87853, +87868, +87880, +87893, +87912, +87912, +87943, +87953, +87953, +87953, +87953, +87958, +87958, +87969, +88010, +88010, +88029, +88029, +88029, +88040, +88040, +88040, +88040, +88055, +88060, +88066, +88072, +88072, +88085, +88085, +88104, +88104, +88132, +88138, +88138, +88138, +88138, +88142, +88161, +88171, +88171, +88180, +88180, +88180, +88180, +88200, +88206, +88206, +88206, +88240, +88266, +88282, +88282, +88301, +88312, +88325, +88343, +88354, +88354, +88385, +88385, +88385, +88401, +88415, +88415, +88424, +88424, +88435, +88458, +88458, +88502, +88514, +88520, +88520, +88536, +88536, +88536, +88558, +88576, +88576, +88576, +88576, +88588, +88612, +88655, +88662, +88672, +88683, +88699, +88707, +88725, +88732, +88772, +88772, +88778, +88807, +88814, +88824, +88824, +88845, +88877, +88877, +88882, +88888, +88921, +88921, +88921, +88927, +88934, +88934, +88958, +88958, +88958, +88988, +89030, +89044, +89044, +89073, +89087, +89117, +89132, +89142, +89142, +89147, +89164, +89171, +89185, +89206, +89206, +89206, +89206, +89206, +89206, +89206, +89227, +89233, +89233, +89259, +89281, +89281, +89281, +89312, +89321, +89328, +89342, +89360, +89360, +89369, +89378, +89378, +89398, +89398, +89417, +89429, +89429, +89442, +89442, +89442, +89442, +89460, +89476, +89476, +89476, +89493, +89551, +89551, +89570, +89583, +89583, +89600, +89609, +89609, +89619, +89636, +89636, +89658, +89681, +89688, +89714, +89733, +89744, +89744, +89753, +89753, +89753, +89766, +89766, +89778, +89778, +89799, +89820, +89832, +89866, +89907, +89907, +89907, +89947, +89947, +89975, +89995, +90004, +90004, +90004, +90015, +90023, +90023, +90040, +90047, +90065, +90065, +90074, +90088, +90088, +90088, +90094, +90109, +90109, +90139, +90139, +90139, +90139, +90145, +90151, +90156, +90156, +90187, +90187, +90198, +90204, +90204, +90204, +90204, +90226, +90238, +90245, +90245, +90250, +90281, +90281, +90281, +90329, +90334, +90349, +90370, +90392, +90392, +90412, +90412, +90437, +90437, +90464, +90470, +90483, +90483, +90495, +90495, +90495, +90495, +90506, +90506, +90506, +90506, +90522, +90529, +90547, +90596, +90614, +90614, +90614, +90614, +90636, +90636, +90636, +90654, +90654, +90654, +90654, +90654, +90661, +90661, +90693, +90713, +90713, +90719, +90744, +90744, +90744, +90756, +90776, +90782, +90782, +90807, +90865, +90865, +90865, +90865, +90865, +90892, +90892, +90892, +90892, +90938, +90974, +90974, +90980, +90980, +90997, +90997, +91011, +91031, +91061, +91074, +91106, +91111, +91123, +91123, +91150, +91159, +91159, +91159, +91190, +91195, +91208, +91208, +91216, +91228, +91228, +91228, +91228, +91238, +91258, +91258, +91258, +91275, +91297, +91335, +91335, +91351, +91382, +91382, +91389, +91389, +91397, +91397, +91425, +91425, +91425, +91425, +91425, +91425, +91440, +91469, +91476, +91476, +91500, +91534, +91553, +91553, +91580, +91587, +91607, +91617, +91639, +91639, +91656, +91671, +91677, +91710, +91710, +91719, +91719, +91743, +91743, +91743, +91743, +91748, +91768, +91781, +91781, +91803, +91826, +91826, +91836, +91856, +91856, +91872, +91872, +91872, +91878, +91878, +91878, +91878, +91878, +91901, +91901, +91915, +91931, +91931, +91931, +91942, +91942, +91952, +91967, +91982, +91982, +92000, +92000, +92000, +92000, +92000, +92023, +92023, +92048, +92070, +92085, +92104, +92104, +92116, +92116, +92150, +92163, +92163, +92179, +92179, +92179, +92193, +92221, +92221, +92228, +92228, +92265, +92289, +92303, +92303, +92303, +92303, +92311, +92311, +92328, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92365, +92401, +92401, +92401, +92401, +92401, +92401, +92420, +92434, +92448, +92498, +92556, +92561, +92561, +92576, +92576, +92576, +92576, +92582, +92599, +92614, +92638, +92654, +92654, +92665, +92665, +92665, +92665, +92665, +92699, +92699, +92718, +92718, +92741, +92746, +92765, +92783, +92783, +92820, +92850, +92850, +92896, +92918, +92955, +92955, +92955, +92955, +92955, +92967, +92967, +92982, +92998, +93004, +93004, +93026, +93026, +93026, +93026, +93032, +93073, +93073, +93079, +93093, +93093, +93105, +93123, +93123, +93145, +93145, +93145, +93145, +93150, +93150, +93179, +93201, +93227, +93245, +93267, +93276, +93276, +93287, +93292, +93292, +93292, +93292, +93292, +93305, +93305, +93319, +93323, +93341, +93349, +93349, +93361, +93361, +93361, +93372, +93389, +93389, +93389, +93432, +93464, +93477, +93477, +93484, +93484, +93484, +93484, +93484, +93503, +93503, +93519, +93519, +93544, +93553, +93553, +93562, +93606, +93621, +93621, +93631, +93654, +93670, +93693, +93699, +93705, +93715, +93734, +93745, +93745, +93745, +93745, +93745, +93761}; static const char *tldData[] = { -"trentinosudtirol.it\0ashikaga.tochigi.jp\0" -"radio.br\0" -"lib.il.us\0photography\0" -"miki.hyogo.jp\0edunet.tn\0" -"aisai.aichi.jp\0" -"isa-geek.org\0" -"educator.aero\0mining.museum\0" -"tsu.mie.jp\0yakumo.shimane.jp\0turek.pl\0" -"*.sch.uk\0ifm\0" -"an.it\0" -"consulting\0" -"tsuyama.okayama.jp\0" -"kommune.no\0" -"hl.cn\0mamurogawa.yamagata.jp\0" -"michigan.museum\0" -"\xe6\x89\x8b\xe6\x9c\xba\0" -"sand\xc3\xb8y.no\0" -"jprs\0" -"ne.jp\0" -"rnd.ru\0" -"ogaki.gifu.jp\0chitose.hokkaido.jp\0chigasaki.kanagawa.jp\0kasukabe.saitama.jp\0" -"kawaguchi.saitama.jp\0takashima.shiga.jp\0chuo.tokyo.jp\0expert\0" -"ueno.gunma.jp\0bifuka.hokkaido.jp\0" -"oster\xc3\xb8y.no\0" -"nishigo.fukushima.jp\0" -"gs.sf.no\0" -"higashichichibu.saitama.jp\0qpon\0" -"ns.ca\0" -"oishida.yamagata.jp\0ne.kr\0kobierzyce.pl\0" -"for-some.biz\0" -"satx.museum\0" -"sydney.museum\0" -"fujishiro.ibaraki.jp\0gift\0" -"akaiwa.okayama.jp\0" -"azumino.nagano.jp\0" -"divtasvuodna.no\0" -"slg.br\0" -"creditunion\0" -"ralingen.no\0" -"trust\0" -"lib.tn.us\0" -"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" -"trentinosud-tirol.it\0unazuki.toyama.jp\0" -"naturhistorisches.museum\0war.museum\0nico\0" -"nedre-eiker.no\0odda.no\0" -"zentsuji.kagawa.jp\0" -"finn\xc3\xb8y.no\0" -"ikeda.osaka.jp\0" -"lerdal.no\0" -"mill.museum\0" -"wolomin.pl\0" -"vrn.ru\0" -"g12.br\0" -"artanddesign.museum\0" -"fujimino.saitama.jp\0" -"arts.co\0" -"shiroishi.saga.jp\0" -"honda\0" -"otaki.nagano.jp\0" -"harvestcelebration.museum\0bremanger.no\0nikolaev.ua\0" -"ilawa.pl\0" -"brandywinevalley.museum\0portal.museum\0" -"indianapolis.museum\0\xc3\xb8vre-eiker.no\0ski.no\0" -"catering\0condos\0" -"vlaanderen.museum\0" -"higashiyamato.tokyo.jp\0" -"alesund.no\0ternopil.ua\0" -"living.museum\0tysvar.no\0norilsk.ru\0osaka\0from-wi.com\0" -"bill.museum\0" -"is-saved.org\0" -"accident-investigation.aero\0palmsprings.museum\0" -"aeroport.fr\0tamba.hyogo.jp\0" -"sorum.no\0" -"ts.it\0" -"nose.osaka.jp\0" -"miners.museum\0ne.pw\0mari.ru\0ing\0" -"saikai.nagasaki.jp\0iheya.okinawa.jp\0miasta.pl\0" -"scientist.aero\0ovre-eiker.no\0" -"hirogawa.wakayama.jp\0" -"gs.oslo.no\0mn.us\0ink\0blogdns.com\0is-a-chef.org\0" -"miyama.mie.jp\0" -"starachowice.pl\0" -"settlement.museum\0k12.nh.us\0" -"sassari.it\0" -"lib.vi.us\0directory\0" -"b.bg\0" -"int\0" -"veg\xc3\xa5rshei.no\0" -"tsurugashima.saitama.jp\0" -"net.ac\0here-for-more.info\0" -"kamijima.ehime.jp\0" -"net.ae\0" -"net.af\0hakodate.hokkaido.jp\0opoczno.pl\0" -"net.ag\0" -"date.hokkaido.jp\0" -"net.ai\0" -"b.br\0" -"te.ua\0" -"net.al\0bl.it\0shichikashuku.miyagi.jp\0" -"net.an\0" -"net.ba\0tyumen.ru\0" -"net.ar\0net.bb\0friuli-v-giulia.it\0yawara.ibaraki.jp\0" -"nl.no\0dnsdojo.com\0" -"monzabrianza.it\0" -"net.au\0granvin.no\0" -"net.bh\0tadotsu.kagawa.jp\0olawa.pl\0" -"airforce\0" -"net.az\0konin.pl\0" -"fin.ec\0" -"shonai.yamagata.jp\0" -"net.bm\0vestre-toten.no\0" -"webhop.net\0" -"net.bo\0" -"net.br\0gen.in\0" -"net.bs\0" -"net.bt\0" -"shinjuku.tokyo.jp\0lincoln\0" -"geology.museum\0lahppi.no\0" -"net.ci\0" -"net.bz\0campidanomedio.it\0" -"gs.st.no\0naustdal.no\0omasvuotna.no\0from-il.com\0" -"aomori.aomori.jp\0tanabe.kyoto.jp\0" -"net.cm\0beeldengeluid.museum\0openair.museum\0tana.no\0" -"net.cn\0" -"net.co\0arboretum.museum\0ivano-frankivsk.ua\0" -"stavropol.ru\0" -"ne.ug\0" -"koganei.tokyo.jp\0" -"net.cu\0hl.no\0" -"ne.tz\0goldpoint\0" -"net.cw\0" -"haga.tochigi.jp\0" -"services.aero\0net.dm\0whoswho\0" -"sodegaura.chiba.jp\0toyoura.hokkaido.jp\0jcb\0" -"net.do\0ne.us\0courses\0" -"best\0" -"baseball.museum\0paleo.museum\0" -"net.ec\0k12.ne.us\0isa-geek.com\0" -"gemological.museum\0" -"i.bg\0net.eg\0" -"toga.toyama.jp\0williamhill\0" -"net.dz\0matsue.shimane.jp\0" -"mytis.ru\0auto\0" -"toho.fukuoka.jp\0" -"saintlouis.museum\0is-a-chef.com\0" -"chikujo.fukuoka.jp\0okagaki.fukuoka.jp\0wegrow.pl\0" -"ogliastra.it\0hs.kr\0ist\0" -"atm.pl\0" -"ballangen.no\0date\0" -"bs.it\0" -"gotdns.com\0" -"pharmacy.museum\0blogsite.org\0" -"natuurwetenschappen.museum\0" -"tysfjord.no\0vagan.no\0" -"gu.us\0" -"vlaanderen\0" -"net.ge\0k12.gu.us\0" -"joso.ibaraki.jp\0shimotsuma.ibaraki.jp\0kawagoe.saitama.jp\0" -"net.gg\0iraq.museum\0holtalen.no\0za.com\0from-or.com\0" -"isehara.kanagawa.jp\0itoman.okinawa.jp\0zgorzelec.pl\0" -"slask.pl\0" -"est-a-la-maison.com\0" -"design\0" -"s3-website-ap-northeast-1.amazonaws.com\0" -"net.gn\0benevento.it\0" -"\xe7\xbb\x84\xe7\xb9\x94.hk\0botanical.museum\0" -"net.gp\0hanawa.fukushima.jp\0" -"arts.ve\0" -"net.gr\0" -"works.aero\0" -"net.gt\0" -"net.gy\0" -"seihi.nagasaki.jp\0" -"net.hk\0" -"koza.wakayama.jp\0hotel.tz\0" -"cq.cn\0net.hn\0va.it\0masuda.shimane.jp\0gen.nz\0" -"britishcolumbia.museum\0orkdal.no\0iwc\0" -"dynalias.org\0" -"net.ht\0net.id\0" -"ono.hyogo.jp\0" -"\xe5\x8f\xb0\xe6\xb9\xbe\0" -"k12.nv.us\0" -"net.im\0newmexico.museum\0chelyabinsk.ru\0" -"net.in\0" -"p.bg\0" -"yasuda.kochi.jp\0" -"net.iq\0cc.na\0" -"net.ir\0hofu.yamaguchi.jp\0" -"net.is\0r\xc3\xb8ros.no\0dyn-o-saur.com\0" -"net.je\0" -"video.hu\0graphics\0" -"withgoogle.com\0" -"operaunite.com\0" -"bz.it\0yamazoe.nara.jp\0" -"vgs.no\0" -"net.jo\0" -"pa.it\0" -"telekommunikation.museum\0cc.mt.us\0cc.nd.us\0" -"brasil.museum\0" -"net.kg\0ullensvang.no\0sebastopol.ua\0" -"toyooka.hyogo.jp\0" -"net.ki\0supply\0" -"higashiomi.shiga.jp\0" -"tottori.tottori.jp\0" -"jfk.museum\0" -"misaki.okayama.jp\0net.kn\0" -"kr.com\0" -"ookuwa.nagano.jp\0koshigaya.saitama.jp\0" -"net.la\0" -"furubira.hokkaido.jp\0net.lb\0" -"net.lc\0historicalsociety.museum\0" -"cesenaforli.it\0" -"kagami.kochi.jp\0" -"gobo.wakayama.jp\0" -"net.ky\0loppa.no\0" -"net.kz\0" -"net.lk\0gs.tr.no\0arts.ro\0" -"castres.museum\0r\xc3\xb8""d\xc3\xb8y.no\0" -"net.ma\0" -"net.lr\0" -"is-a-landscaper.com\0" -"net.me\0" -"imizu.toyama.jp\0net.lv\0" -"birkenes.no\0" -"net.ly\0va.no\0" -"net.mk\0" -"hikimi.shimane.jp\0net.ml\0" -"uri.arpa\0ltd.gi\0net.mo\0depot.museum\0smolensk.ru\0jlc\0" -"showa.gunma.jp\0kawanishi.hyogo.jp\0" -"klepp.no\0" -"net.ms\0honefoss.no\0" -"net.mt\0" -"net.mu\0" -"yazu.tottori.jp\0net.mv\0net.nf\0gen.tr\0" -"w.bg\0net.mw\0net.ng\0" -"net.mx\0" -"net.my\0" -"tos.it\0toya.hokkaido.jp\0" -"sakura\0" -"assedic.fr\0aid.pl\0" -"ltd.hk\0" -"isernia.it\0net.nr\0" -"botany.museum\0" -"aramco\0" -"net.nz\0" -"ostrowwlkp.pl\0" -"hotel.lk\0net.om\0voting\0" -"\xe4\xbc\x81\xe4\xb8\x9a\0" -"virginia.museum\0googlecode.com\0" -"stj\xc3\xb8rdalshalsen.no\0net.pa\0adygeya.ru\0" -"arai.shizuoka.jp\0arts.nf\0" -"americanart.museum\0habmer.no\0net.pe\0" -"lib.pr.us\0" -"net.ph\0" -"net.pk\0" -"net.pl\0" -"morioka.iwate.jp\0net.pn\0" -"net.qa\0" -"kanuma.tochigi.jp\0net.pr\0" -"gjerdrum.no\0net.ps\0" -"inawashiro.fukushima.jp\0yamatotakada.nara.jp\0net.pt\0" -"shimizu.shizuoka.jp\0wielun.pl\0" -"net.py\0" -"asahi.chiba.jp\0" -"os\xc3\xb8yro.no\0" -"kijo.miyazaki.jp\0\xe7\xbd\x91\xe5\x9d\x80\0" -"b.se\0rhcloud.com\0" -"kamikitayama.nara.jp\0jot\0" -"toyotomi.hokkaido.jp\0" -"from.hr\0" -"portlligat.museum\0joy\0" -"saijo.ehime.jp\0fin.tn\0yandex\0" -"other.nf\0" -"bruxelles.museum\0" -"utsunomiya.tochigi.jp\0gyeongbuk.kr\0" -"tools\0" -"ltd.lk\0net.sa\0" -"ikata.ehime.jp\0net.sb\0" -"catering.aero\0net.sc\0" -"health.nz\0net.sd\0" -"net.ru\0" -"tsuno.kochi.jp\0shimane.shimane.jp\0" -"net.rw\0net.sg\0is-very-evil.org\0" -"i.ph\0net.sh\0" -"kosuge.yamanashi.jp\0" -"\xc3\xb8ystre-slidre.no\0" -"net.sl\0" -"info.ht\0maizuru.kyoto.jp\0shinjo.nara.jp\0yorii.saitama.jp\0" -"info.hu\0m\xc3\xa5s\xc3\xb8y.no\0press.se\0net.so\0" -"po.it\0" -"s\xc3\xb8r-varanger.no\0" -"net.st\0" -"hotel.hu\0oppegard.no\0" -"net.th\0" -"nsw.au\0net.sy\0githubusercontent.com\0" -"kanagawa.jp\0net.tj\0" -"roma.museum\0" -"contemporaryart.museum\0net.tm\0va.us\0" -"info.et\0net.tn\0" -"net.to\0land-4-sale.us\0" -"konan.aichi.jp\0\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" -"net.ua\0k12.vi.us\0" -"alto-adige.it\0net.tr\0" -"net.tt\0" -"dyndns-web.com\0" -"shiwa.iwate.jp\0nagai.yamagata.jp\0stargard.pl\0" -"net.tw\0" -"kasuya.fukuoka.jp\0nagaoka.niigata.jp\0" -"!city.sapporo.jp\0" -"tranoy.no\0net.uk\0" -"pila.pl\0" -"dyndns-home.com\0is-into-cartoons.com\0" -"aizumisato.fukushima.jp\0" -"\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" -"clock.museum\0net.vc\0" -"kamioka.akita.jp\0fujimi.nagano.jp\0ando.nara.jp\0tochigi.tochigi.jp\0" -"lorenskog.no\0i.se\0net.ve\0" -"vv.it\0kamishihoro.hokkaido.jp\0shiogama.miyagi.jp\0" -"pilots.museum\0net.uy\0net.vi\0" -"net.uz\0" -"is-a-cubicle-slave.com\0" -"cargo.aero\0salzburg.museum\0" -"kitami.hokkaido.jp\0net.vn\0" -"dyroy.no\0pa.us\0" -"nagiso.nagano.jp\0" -"sortland.no\0" -"\xe5\xb1\xb1\xe6\xa2\xa8.jp\0" -"volgograd.ru\0net.vu\0" -"tsunan.niigata.jp\0" -"takata.fukuoka.jp\0" -"info.ec\0" -"istanbul\0" -"rel.ht\0" -"dyndns-server.com\0" -"\xe9\x9d\x92\xe6\xa3\xae.jp\0" -"net.ws\0bauhaus\0" -"forlicesena.it\0kfh\0" -"pv.it\0norton\0" -"cc.ny.us\0" -"info.bb\0hashikami.aomori.jp\0" -"seirou.niigata.jp\0info.at\0" -"info.au\0lib.ee\0" -"selfip.biz\0" -"info.az\0tsukigata.hokkaido.jp\0" -"trani-barletta-andria.it\0loan\0" -"press.ma\0" -"legnica.pl\0" -"lavangen.no\0pors\xc3\xa1\xc5\x8bgu.no\0sk\xc3\xa5nland.no\0" -"orsta.no\0" -"hakusan.ishikawa.jp\0" -"flight.aero\0hemnes.no\0moss.no\0sykkylven.no\0" -"hirara.okinawa.jp\0" -"ukiha.fukuoka.jp\0kyotango.kyoto.jp\0health.vn\0" -"info.co\0bo.nordland.no\0tysv\xc3\xa6r.no\0fhsk.se\0" -"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0" -"air-traffic-control.aero\0design.aero\0meland.no\0chtr.k12.ma.us\0" -"matsumae.hokkaido.jp\0sakuragawa.ibaraki.jp\0nagano.nagano.jp\0motegi.tochigi.jp\0" -"insurance.aero\0automotive.museum\0ullensaker.no\0p.se\0" -"alessandria.it\0" -"journalist.aero\0cody.museum\0" -"bato.tochigi.jp\0misasa.tottori.jp\0" -"polkowice.pl\0" -"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" -"trentino-sued-tirol.it\0" -"asahi.toyama.jp\0" -"sogne.no\0orenburg.ru\0kim\0" -"isa-geek.net\0" -"tatarstan.ru\0" -"kashiwa.chiba.jp\0kamimine.saga.jp\0" -"contractors\0" -"tagajo.miyagi.jp\0fujikawa.shizuoka.jp\0" -"kudamatsu.yamaguchi.jp\0" -"ltd.uk\0" -"nantan.kyoto.jp\0" -"r\xc3\xb8yrvik.no\0" -"is-a-chef.net\0" -"planetarium.museum\0langev\xc3\xa5g.no\0" -"abbott\0" -"club.aero\0" -"ind.br\0" -"from-nv.com\0" -"tokushima.jp\0omaezaki.shizuoka.jp\0" -"hongo.hiroshima.jp\0" -"inderoy.no\0" -"res.in\0" -"\xe5\xb1\xb1\xe5\xbd\xa2.jp\0echizen.fukui.jp\0" -"dr\xc3\xb8""bak.no\0s\xc3\xb8r-fron.no\0" -"teo.br\0yokoze.saitama.jp\0" -"sch.ae\0franziskaner.museum\0undersea.museum\0belau.pw\0" -"kouyama.kagoshima.jp\0" -"zarow.pl\0" -"aviation.museum\0" -"soeda.fukuoka.jp\0" -"skydiving.aero\0teaches-yoga.com\0" -"shinto.gunma.jp\0kure.hiroshima.jp\0" -"yakumo.hokkaido.jp\0minobu.yamanashi.jp\0" -"dclk\0" -"ibaraki.jp\0" -"naklo.pl\0" -"yachimata.chiba.jp\0" -"vanylven.no\0" -"shimodate.ibaraki.jp\0" -"union.aero\0toshiba\0from-ak.com\0" -"kuju.oita.jp\0" -"w.se\0" -"rel.pl\0" -"friuliv-giulia.it\0minamiashigara.kanagawa.jp\0" -"togura.nagano.jp\0" -"!www.ck\0b\xc3\xa1id\xc3\xa1r.no\0" -"miyoshi.aichi.jp\0" -"izumo.shimane.jp\0" -"us-west-1.compute.amazonaws.com\0" -"tsuruoka.yamagata.jp\0" -"finland.museum\0" -"barreau.bj\0tokashiki.okinawa.jp\0" -"television.museum\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" -"tuscany.it\0" -"sport.hu\0fjell.no\0" -"philadelphia.museum\0" -"hasami.nagasaki.jp\0" -"software.aero\0" -"yufu.oita.jp\0" -"kongsvinger.no\0boots\0" -"chikuma.nagano.jp\0" -"london.museum\0" -"s3-ap-northeast-1.amazonaws.com\0" -"ind.gt\0suzu.ishikawa.jp\0" -"arteducation.museum\0eidsberg.no\0vevelstad.no\0" -"\xe5\xb2\x90\xe9\x98\x9c.jp\0fujisato.akita.jp\0hanyu.saitama.jp\0" -"bod\xc3\xb8.no\0" -"is-a-therapist.com\0" -"yoshikawa.saitama.jp\0" -"r\xc3\xb8st.no\0" -"rishiri.hokkaido.jp\0grajewo.pl\0" -"3.bg\0" -"kosai.shizuoka.jp\0kpn\0" -"chuo.chiba.jp\0susono.shizuoka.jp\0" -"fla.no\0" -"roma.it\0kudoyama.wakayama.jp\0global.prod.fastly.net\0" -"gamo.shiga.jp\0" -"gildesk\xc3\xa5l.no\0cloudcontrolled.com\0" -"ind.in\0futsu.nagasaki.jp\0" -"furudono.fukushima.jp\0kashiwara.osaka.jp\0" -"minoh.osaka.jp\0" -"akrehamn.no\0" -"nosegawa.nara.jp\0" -"baths.museum\0likes-pie.com\0" -"krd\0lat\0" -"seki.gifu.jp\0togakushi.nagano.jp\0ens.tn\0" -"rana.no\0law\0" -"juedisches.museum\0national.museum\0" -"sande.m\xc3\xb8re-og-romsdal.no\0" -"bozen.it\0" -"furniture.museum\0malvik.no\0" -"hjelmeland.no\0" -"loabat.no\0" -"info.ve\0" -"kamagaya.chiba.jp\0" -"betainabox.com\0" -"fosnes.no\0from-tn.com\0" "sakae.chiba.jp\0" -"sohu\0" -"mb.ca\0" -"wanouchi.gifu.jp\0hidaka.kochi.jp\0torahime.shiga.jp\0info.vn\0" -"mari-el.ru\0" -"tsukumi.oita.jp\0" -"sch.id\0kota.aichi.jp\0" -"snillfjord.no\0" -"akkeshi.hokkaido.jp\0" -"kanegasaki.iwate.jp\0takaoka.toyama.jp\0" -"ostre-toten.no\0novosibirsk.ru\0selfip.com\0" -"molise.it\0" -"barrel-of-knowledge.info\0" -"sch.ir\0" -"fuoisku.no\0" -"lds\0" -"oguchi.aichi.jp\0" -"omsk.ru\0" -"nogata.fukuoka.jp\0" -"sch.jo\0guide\0" -"sunagawa.hokkaido.jp\0info.tn\0" -"turystyka.pl\0a.ssl.fastly.net\0" -"nishiarita.saga.jp\0info.tr\0" -"mortgage\0" -"info.tt\0" -"\xe5\x8f\xb0\xe7\x81\xa3\0" -"muroran.hokkaido.jp\0" -"tendo.yamagata.jp\0" -"nanbu.tottori.jp\0info.tz\0" -"go.dyndns.org\0" -"is-very-nice.org\0" -"hammarfeasta.no\0" -"williamsburg.museum\0dyndns-wiki.com\0" -"tagawa.fukuoka.jp\0" -"kurotaki.nara.jp\0xerox\0" -"lib.ma.us\0" -"sch.lk\0" -"arkhangelsk.ru\0" -"trentino-s-tirol.it\0" -"\xc3\xa1lt\xc3\xa1.no\0info.ro\0" -"ab.ca\0askoy.no\0" -"malopolska.pl\0" -"aogaki.hyogo.jp\0info.sd\0" -"km.ua\0" -"sch.ly\0" -"onjuku.chiba.jp\0" -"muncie.museum\0" -"kawaminami.miyazaki.jp\0" -"cn-north-1.compute.amazonaws.cn\0" -"vads\xc3\xb8.no\0" -"ushuaia.museum\0vista\0" -"kaminokawa.tochigi.jp\0" -"olbiatempio.it\0shiga.jp\0" -"sener\0" -"sch.ng\0kddi\0endoftheinternet.org\0" -"ichikai.tochigi.jp\0" -"lund.no\0lib.ga.us\0style\0" -"info.pk\0tsaritsyn.ru\0" -"info.pl\0" -"jevnaker.no\0" -"fst.br\0ainan.ehime.jp\0" -"california.museum\0sony\0" -"oketo.hokkaido.jp\0" -"is-a-bruinsfan.org\0" -"info.pr\0" -"nt.edu.au\0" -"carrier.museum\0newport.museum\0" -"promo\0" -"mb.it\0mima.tokushima.jp\0" -"info.na\0jan-mayen.no\0" -"narita.chiba.jp\0" -"info.mv\0info.nf\0" -"fuso.aichi.jp\0gmina.pl\0" -"manx.museum\0\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0" -"show.aero\0moskenes.no\0sch.qa\0lib.nh.us\0" -"fnd.br\0cieszyn.pl\0" -"properties\0ru.com\0se.com\0" -"info.nr\0" -"madrid.museum\0love\0" -"hakone.kanagawa.jp\0kita.osaka.jp\0" -"from-de.com\0" -"siena.it\0tateshina.nagano.jp\0" -"cricket\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" -"numata.hokkaido.jp\0" -"brussel.museum\0hitra.no\0pyatigorsk.ru\0" -"rifu.miyagi.jp\0ind.tn\0" -"judygarland.museum\0" -"mp.br\0" -"higashitsuno.kochi.jp\0" -"info.la\0" -"fr.it\0" -"zone\0" -"si.it\0elblag.pl\0" -"baikal.ru\0" -"toyotsu.fukuoka.jp\0" -"building.museum\0sorfold.no\0" -"is-a-geek.com\0" -"eidsvoll.no\0sch.sa\0" -"institute\0" -"dazaifu.fukuoka.jp\0" -"chukotka.ru\0rivne.ua\0domains\0from-sd.com\0ro.com\0" -"mihara.kochi.jp\0asahi.nagano.jp\0" -"stockholm.museum\0chernigov.ua\0" -"potenza.it\0" -"pagespeedmobilizer.com\0" -"shoo.okayama.jp\0" -"bible.museum\0sherbrooke.museum\0" -"nesset.no\0" -"chloe\0" -"anpachi.gifu.jp\0aibetsu.hokkaido.jp\0wlocl.pl\0" -"mi.it\0" -"elverum.no\0" -"fredrikstad.no\0markets\0" -"iglesias-carbonia.it\0" -"nikaho.akita.jp\0miyashiro.saitama.jp\0" -"asmatart.museum\0" -"tsushima.nagasaki.jp\0" -"hekinan.aichi.jp\0" -"lib.ms.us\0lib.nc.us\0" -"inazawa.aichi.jp\0" -"info.ki\0agdenes.no\0" -"medizinhistorisches.museum\0furniture\0" -"ozora.hokkaido.jp\0wakayama.wakayama.jp\0" -"gyokuto.kumamoto.jp\0" -"fishing\0" -"hyogo.jp\0" -"stj\xc3\xb8rdal.no\0" -"kutno.pl\0" -"ulvik.no\0" -"ofunato.iwate.jp\0restaurant\0" -"americanantiques.museum\0paderborn.museum\0" -"sp.it\0yokaichiba.chiba.jp\0" -"kurgan.ru\0" -"hakata.fukuoka.jp\0man\0" -"entomology.museum\0" -"otoyo.kochi.jp\0" -"lel.br\0" -"zoology.museum\0samnanger.no\0" -"obama.nagasaki.jp\0" -"oshu.iwate.jp\0miasa.nagano.jp\0" -"rnrt.tn\0" -"money.museum\0" -"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0" -"yahiko.niigata.jp\0kadena.okinawa.jp\0" -"\xc3\xb8ygarden.no\0" -"v\xc3\xa5gan.no\0" -"trentino.it\0" -"\xc3\xb8rskog.no\0" -"hoyanger.no\0sb.ua\0" -"vestby.no\0" -"yurihonjo.akita.jp\0" -"fjaler.no\0cc.ks.us\0" -"\xd9\x82\xd8\xb7\xd8\xb1\0" -"ltd\0" -"rockart.museum\0" -"lib.as.us\0" -"hashima.gifu.jp\0" -"agano.niigata.jp\0ath.cx\0" -"gangaviika.no\0" -"hammerfest.no\0" -"saskatchewan.museum\0est-mon-blogueur.com\0" -"hoylandet.no\0stockholm\0" -"tatsuno.nagano.jp\0" -"georgia.museum\0" -"kherson.ua\0" -"shiroishi.miyagi.jp\0tomi.nagano.jp\0" -"computerhistory.museum\0" -"kofu.yamanashi.jp\0" -"meo\0" -"setagaya.tokyo.jp\0prochowice.pl\0" -"farm.museum\0" -"fujikawa.yamanashi.jp\0" -"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0dontexist.net\0" -"workshop.museum\0toray\0" -"kosaka.akita.jp\0shijonawate.osaka.jp\0takanezawa.tochigi.jp\0" -"k12.ak.us\0" -"nakamura.kochi.jp\0ochi.kochi.jp\0iizuna.nagano.jp\0" -"midtre-gauldal.no\0" -"k12.md.us\0" -"inuyama.aichi.jp\0" -"kumatori.osaka.jp\0" -"ako.hyogo.jp\0" -"tgory.pl\0" -"ato.br\0higashikawa.hokkaido.jp\0akagi.shimane.jp\0bbs.tr\0" -"newspaper.museum\0oregontrail.museum\0" -"gb.net\0" -"\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" -"ap.it\0" -"zaporizhzhia.ua\0" -"taka.hyogo.jp\0" -"karate.museum\0is-a-geek.org\0" -"from-ks.com\0" -"fage\0misconfused.org\0" -"hn.cn\0" -"palana.ru\0" -"kisarazu.chiba.jp\0" -"vaapste.no\0" -"namie.fukushima.jp\0ichikawa.hyogo.jp\0" -"cn.com\0" -"stpetersburg.museum\0nord-fron.no\0iamallama.com\0" -"fam.pk\0" -"skjervoy.no\0" -"beskidy.pl\0" -"siellak.no\0" -"mi.th\0" -"mil\0" -"culturalcenter.museum\0tsk.ru\0odessa.ua\0" -"otama.fukushima.jp\0" -"ishikawa.fukushima.jp\0" -"nu.ca\0" -"omiya.saitama.jp\0" -"bike\0" -"hirono.iwate.jp\0digital\0read\0" -"exhibition.museum\0" -"tn.it\0hita.oita.jp\0" -"inder\xc3\xb8y.no\0" -"fail\0" -"otsuka\0" -"k-uralsk.ru\0" -"tamaki.mie.jp\0florist\0" -"mi.us\0place\0" -"yono.saitama.jp\0movistar\0" -"sn\xc3\xa5""ase.no\0k12.ma.us\0" -"ashibetsu.hokkaido.jp\0mizusawa.iwate.jp\0isa.kagoshima.jp\0" -"farsund.no\0" -"haebaru.okinawa.jp\0" -"gs.aa.no\0" -"hyllestad.no\0" -"itako.ibaraki.jp\0" -"pics\0" -"godo.gifu.jp\0" -"fauske.no\0frei.no\0dyndns.info\0" -"bg.it\0" -"matsumoto.nagano.jp\0" -"kids.museum\0gaivuotna.no\0" -"dell\0" -"cc.ma.us\0" -"\xe5\xb2\xa9\xe6\x89\x8b.jp\0yamagata.ibaraki.jp\0" -"austevoll.no\0mma\0" -"br.com\0" -"fuchu.hiroshima.jp\0ostrowiec.pl\0podlasie.pl\0" -"nature.museum\0" -"usdecorativearts.museum\0bing\0" -"matsudo.chiba.jp\0niimi.okayama.jp\0" -"federation.aero\0brussels\0" -"ancona.it\0piaget\0" -"k12.ga.us\0" -"jorpeland.no\0camera\0" -"preservation.museum\0" -"vibo-valentia.it\0" -"tochigi.jp\0" -"salerno.it\0" -"iwade.wakayama.jp\0kiwi.nz\0" -"pvt.ge\0gifts\0globo\0" -"honai.ehime.jp\0" -"childrensgarden.museum\0spreadbetting\0" -"hannan.osaka.jp\0" -"raholt.no\0cc.ga.us\0from-ut.com\0" -"cartier\0maif\0" -"kolobrzeg.pl\0" -"moe\0" -"bungotakada.oita.jp\0" -"moi\0" -"otaru.hokkaido.jp\0\xe8\xb0\xb7\xe6\xad\x8c\0" -"akita.jp\0" -"carboniaiglesias.it\0" -"d.bg\0" -"mov\0" -"gs.ah.no\0marnardal.no\0fans\0" -"tysnes.no\0mordovia.ru\0" -"bearalv\xc3\xa1hki.no\0engineering\0compute-1.amazonaws.com\0" -"is-a-nascarfan.com\0" -"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" -"friuli-venezia-giulia.it\0bn.it\0udono.mie.jp\0" -"oslo.no\0" -"nu.it\0mormon\0" -"freiburg.museum\0hamar.no\0" -"kita.tokyo.jp\0" -"minamifurano.hokkaido.jp\0" -"bible\0" -"esp.br\0" -"is-a-democrat.com\0" -"narusawa.yamanashi.jp\0" -"uonuma.niigata.jp\0wien\0" -"on-the-web.tv\0" -"karm\xc3\xb8y.no\0" -"mosjoen.no\0" -"koya.wakayama.jp\0" -"chernovtsy.ua\0holiday\0from-mi.com\0" -"square.museum\0is-a-patsfan.org\0" -"mihama.fukui.jp\0" -"clothing\0" -"reit\0" -"historichouses.museum\0gjovik.no\0desi\0" -"cam.it\0asuke.aichi.jp\0" -"kizu.kyoto.jp\0" -"syzran.ru\0eu-central-1.compute.amazonaws.com\0" -"ama.shimane.jp\0" -"farm\0" -"jaworzno.pl\0" -"emp.br\0" -"k12.ar.us\0" -"oto.fukuoka.jp\0takahagi.ibaraki.jp\0elk.pl\0" -"k12.mo.us\0" -"soo.kagoshima.jp\0umaji.kochi.jp\0" -"farmequipment.museum\0github.io\0" -"mashiki.kumamoto.jp\0" -"k.bg\0" -"mtn\0" -"skole.museum\0deals\0" -"is-a-student.com\0" -"friuli-ve-giulia.it\0" -"force.museum\0nec\0" -"fast\0walter\0" -"pharmacien.fr\0ce.it\0hakuba.nagano.jp\0" -"s3-eu-west-1.amazonaws.com\0" -"lucca.it\0" -"nakadomari.aomori.jp\0" -"antiques.museum\0resistance.museum\0cc.mo.us\0" -"troandin.no\0vyatka.ru\0" -"net\0microsoft\0" -"civilisation.museum\0" -"komatsushima.tokushima.jp\0" -"bronnoysund.no\0new\0" -"nanbu.yamanashi.jp\0" -"vic.au\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" -"shitara.aichi.jp\0kamikawa.hokkaido.jp\0nogi.tochigi.jp\0" -"tn.us\0pink\0" -"yokote.akita.jp\0" -"oz.au\0k12.tx.us\0physio\0" -"\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" -"stalbans.museum\0productions\0" -"fvg.it\0" -"riik.ee\0aland.fi\0" -"okazaki.aichi.jp\0" -"gs.tm.no\0" -"*.sapporo.jp\0" -"children.museum\0dali.museum\0" -"ngo\0" -"ritto.shiga.jp\0" -"wiki\0dyndns-at-home.com\0" -"vc.it\0" -"rent\0" -"berlevag.no\0" -"bryne.no\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0nhk\0" -"eng.br\0carrara-massa.it\0" -"penza.ru\0" -"lib.in.us\0" -"onomichi.hiroshima.jp\0" -"k12.oh.us\0" -"ebino.miyazaki.jp\0" -"deatnu.no\0lib.wi.us\0" -"wa.au\0r.bg\0us.org\0" -"univ.sn\0" -"seiro.niigata.jp\0" -"brindisi.it\0" -"is-a-hard-worker.com\0" -"rankoshi.hokkaido.jp\0" -"archi\0" -"dnsdojo.org\0from-ia.com\0" -"kimitsu.chiba.jp\0" -"chernihiv.ua\0" -"cl.it\0toride.ibaraki.jp\0" -"bjarkoy.no\0" -"bu.no\0" -"pc.it\0" -"karasjok.no\0" -"ol.no\0" -"kesennuma.miyagi.jp\0katsuragi.nara.jp\0" -"tourism.tn\0" -"bolzano.it\0" -"act.au\0trondheim.no\0" -"trentinosuedtirol.it\0suwalki.pl\0" -"bahccavuotna.no\0abo.pa\0" -"yamagata.gifu.jp\0canon\0" -"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0horse\0" -"viajes\0" -"repair\0\xe6\x89\x8b\xe8\xa1\xa8\0" -"history.museum\0" -"gs.hm.no\0" -"\xe7\xa6\x8f\xe4\xba\x95.jp\0" -"inashiki.ibaraki.jp\0" -"us.na\0osoyro.no\0fedje.no\0" -"sakai.fukui.jp\0" -"air-surveillance.aero\0engineer.aero\0pri.ee\0" -"is.it\0namikata.ehime.jp\0" -"warabi.saitama.jp\0" -"strand.no\0" -"lecco.it\0" -"tatar\0" -"shinjo.yamagata.jp\0" -"sakahogi.gifu.jp\0" -"aarborte.no\0cityeats\0" -"\xe7\xbe\xa4\xe9\xa6\xac.jp\0rest\0" -"skien.no\0" -"kasai.hyogo.jp\0hitachinaka.ibaraki.jp\0" -"costume.museum\0photography.museum\0froya.no\0grozny.ru\0simbirsk.ru\0" -"barletta-trani-andria.it\0sells-it.net\0" -"y.bg\0" -"art.museum\0" -"karpacz.pl\0" -"sanok.pl\0" -"gs.nt.no\0" -"fortworth.museum\0murmansk.ru\0" -"mansion.museum\0" -"cs.it\0" -"nishiokoppe.hokkaido.jp\0yaese.okinawa.jp\0" -"santacruz.museum\0googleapis.com\0" -"servebbs.net\0" -"cc.nm.us\0" -"asso.fr\0lupin\0" -"eigersund.no\0" -"sukumo.kochi.jp\0ketrzyn.pl\0" -"compute.amazonaws.com\0" -"nagara.chiba.jp\0" -"bokn.no\0" -"mino.gifu.jp\0" -"author.aero\0" -"erni\0" -"asso.gp\0iz.hr\0" -"otsuki.yamanashi.jp\0" -"posts-and-telecommunications.museum\0marker.no\0" -"is-into-cars.com\0" -"flynnhub.com\0" -"kr\xc3\xa5""anghke.no\0" -"nakamichi.yamanashi.jp\0" -"tokke.no\0" -"pc.pl\0" -"etne.no\0community\0" -"hol.no\0" -"asso.ht\0tatsuno.hyogo.jp\0tokamachi.niigata.jp\0" -"valer.ostfold.no\0d.se\0" -"agrar.hu\0" -"nagareyama.chiba.jp\0niigata.niigata.jp\0" -"ap-northeast-1.compute.amazonaws.com\0" -"qh.cn\0sardinia.it\0tozawa.yamagata.jp\0" -"oe.yamagata.jp\0" -"scotland.museum\0kalmykia.ru\0wedding\0" -"med.br\0" -"nra\0" -"asso.bj\0tabayama.yamanashi.jp\0" -"obi\0" -"cci.fr\0ome.tokyo.jp\0" -"sakuho.nagano.jp\0" -"per.la\0s\xc3\xa1l\xc3\xa1t.no\0" -"murata.miyagi.jp\0" -"airport.aero\0" -"cz.it\0" -"friulive-giulia.it\0koeln\0" -"asso.ci\0birthplace.museum\0nrw\0" -"naka.hiroshima.jp\0shiranuka.hokkaido.jp\0" -"bamble.no\0" -"jx.cn\0mibu.tochigi.jp\0" -"watchandclock.museum\0g\xc3\xa1ls\xc3\xa1.no\0" -"shibata.niigata.jp\0!teledata.mz\0" -"nanmoku.gunma.jp\0" -"med.ec\0aquarium.museum\0il.us\0outsystemscloud.com\0" -"med.ee\0mandal.no\0verran.no\0" -"kumamoto.jp\0is-a-geek.net\0" -"flekkefjord.no\0" -"shinonsen.hyogo.jp\0fudai.iwate.jp\0" -"\xe4\xbf\xa1\xe6\x81\xaf\0" -"nishiaizu.fukushima.jp\0" -"sumy.ua\0" -"per.nf\0" -"chiba.jp\0ntt\0" -"asso.dz\0" -"badaddja.no\0cc.id.us\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" -"k.se\0" -"niki.hokkaido.jp\0higashikagawa.kagawa.jp\0" -"koeln.museum\0" -"andoy.no\0" -"frana.no\0\xd9\x83\xd9\x88\xd9\x85\0" -"katashina.gunma.jp\0" -"tourism.pl\0" -"aremark.no\0" -"chita.ru\0" -"tarumizu.kagoshima.jp\0" -"\xe7\xbd\x91\xe7\xb5\xa1.hk\0orkanger.no\0" -"tempioolbia.it\0saotome.st\0" -"kawakita.ishikawa.jp\0" -"karikatur.museum\0uz.ua\0hermes\0" -"friuli-vgiulia.it\0" -"textile.museum\0" -"iwatsuki.saitama.jp\0" -"cc.ok.us\0" -"med.ht\0" -"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" -"tsushima.aichi.jp\0ide.kyoto.jp\0" -"abira.hokkaido.jp\0actor\0" -"\xe7\xb5\x84\xe7\xbb\x87.hk\0" -"tsuchiura.ibaraki.jp\0" -"dep.no\0" -"republican\0" -"vefsn.no\0" -"luxembourg.museum\0" -"chikuho.fukuoka.jp\0" -"nasu.tochigi.jp\0" -"intelligence.museum\0nyc\0" -"is-an-actress.com\0" -"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0" -"vda.it\0" -"\xe6\xbb\x8b\xe8\xb3\x80.jp\0worse-than.tv\0" -"gliding.aero\0notaires.km\0lea\xc5\x8bgaviika.no\0" -"r.se\0per.sg\0" -"taxi.br\0" -"elvendrell.museum\0" -"kariwa.niigata.jp\0" -"science.museum\0from-ms.com\0from-nc.com\0" -"cesena-forli.it\0" -"dc.us\0dontexist.org\0" -"kishiwada.osaka.jp\0" -"yoshioka.gunma.jp\0" -"k12.dc.us\0" -"toyoake.aichi.jp\0seranishi.hiroshima.jp\0noda.iwate.jp\0" -"cagliari.it\0buyshouses.net\0" -"aso.kumamoto.jp\0" -"sauda.no\0" -"\xe5\x85\xb5\xe5\xba\xab.jp\0nisshin.aichi.jp\0" -"vegarshei.no\0" -"m\xc4\x81ori.nz\0" -"overhalla.no\0voagat.no\0" -"indian.museum\0railroad.museum\0nsk.ru\0is-leet.com\0" -"inf.br\0nakama.fukuoka.jp\0" -"readmyblog.org\0" -"bergamo.it\0\xe5\xa5\x88\xe8\x89\xaf.jp\0" -"ushiku.ibaraki.jp\0" -"med.ly\0" -"tahara.aichi.jp\0" -"ringsaker.no\0cc.or.us\0" -"aga.niigata.jp\0" -"property\0" -"hinohara.tokyo.jp\0" -"ac\0" -"ad\0kuji.iwate.jp\0kinder\0compute.amazonaws.cn\0" -"ae\0" -"af\0uchinomi.kagawa.jp\0kashihara.nara.jp\0" -"ag\0snasa.no\0" -"ai\0" -"inf.cu\0wa.us\0" -"al\0tomioka.gunma.jp\0" -"am\0" -"an\0" -"ao\0k12.wi.us\0" -"traniandriabarletta.it\0" -"aq\0ba\0" -"ar\0bb\0" -"as\0uslivinghistory.museum\0" -"at\0" -"au\0be\0" -"bf\0tomisato.chiba.jp\0tajimi.gifu.jp\0" -"aw\0bg\0is-a-knight.org\0" -"ax\0bh\0" -"bi\0" -"az\0bj\0" -"bm\0nebraska.museum\0one\0" -"bo\0ong\0s3-sa-east-1.amazonaws.com\0" -"ca\0med.om\0" -"br\0gold\0" -"bs\0cc\0y.se\0" -"bt\0cd\0nakai.kanagawa.jp\0golf\0onl\0" -"med.pa\0cc.vi.us\0" -"bv\0cf\0shinanomachi.nagano.jp\0" -"bw\0cg\0york.museum\0" -"ch\0nishihara.kumamoto.jp\0" -"by\0ci\0" -"bz\0" -"firestone\0" -"cl\0chikusei.ibaraki.jp\0" -"cm\0frosta.no\0" -"cn\0" -"co\0tingvoll.no\0isa.us\0\xe5\x95\x86\xe5\xba\x97\0" -"sic.it\0kasuga.hyogo.jp\0med.pl\0" -"cr\0!city.yokohama.jp\0maori.nz\0" -"shiroi.chiba.jp\0amagasaki.hyogo.jp\0flsmidth\0" -"cu\0de\0soc.lk\0gloppen.no\0holdings\0loans\0" -"cv\0funabashi.chiba.jp\0kaizuka.osaka.jp\0" -"cw\0ooo\0" -"cx\0\xe1\x83\x92\xe1\x83\x94\0financial\0" -"stada\0" -"cz\0dj\0bedzin.pl\0" -"dk\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0" -"wodzislaw.pl\0" -"dm\0" -"otaki.chiba.jp\0saroma.hokkaido.jp\0poker\0" -"do\0lviv.ua\0" -"bibai.hokkaido.jp\0aridagawa.wakayama.jp\0" -"arezzo.it\0" -"ec\0civilization.museum\0vestnes.no\0" -"ee\0communications.museum\0" -"pmn.it\0" -"eg\0" -"dz\0final\0" -"sarufutsu.hokkaido.jp\0nagawa.nagano.jp\0accountant\0" -"muenchen.museum\0" -"\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"pisa.it\0" -"linde\0" -"es\0audnedaln.no\0narvik.no\0" -"et\0geometre-expert.fr\0livorno.it\0tra.kp\0" -"eu\0med.sa\0lib.sd.us\0goog\0" -"5.bg\0krager\xc3\xb8.no\0gratis\0" -"med.sd\0" -"fi\0luxury\0" -"nanjo.okinawa.jp\0" -"askim.no\0aurskog-holand.no\0asso.re\0\xd9\x85\xd8\xb5\xd8\xb1\0" -"wada.nagano.jp\0" -"fm\0" -"fo\0org\0" -"fm.br\0agro.pl\0" -"ga\0" -"fr\0gb\0kazo.saitama.jp\0" -"gd\0ogawa.ibaraki.jp\0" -"ge\0us-east-1.amazonaws.com\0" -"gf\0" -"gg\0mer\xc3\xa5ker.no\0from-ok.com\0" -"gh\0kuwana.mie.jp\0" -"gi\0" -"mashike.hokkaido.jp\0" -"is-a-celticsfan.org\0" -"gl\0ogawa.nagano.jp\0" -"gm\0" -"gn\0" -"arendal.no\0" -"sd.cn\0gp\0" -"gq\0" -"gr\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0" -"gs\0claims\0" -"gt\0" -"gw\0lib.md.us\0" -"int.ar\0" -"gy\0" -"hk\0colonialwilliamsburg.museum\0associates\0" -"hm\0" -"hn\0" -"int.az\0karumai.iwate.jp\0" -"hr\0zao.miyagi.jp\0anan.tokushima.jp\0" -"gov.ac\0" -"ht\0id\0tsuiki.fukuoka.jp\0ikoma.nara.jp\0chungnam.kr\0mail.pl\0" -"gov.ae\0int.bo\0hu\0ie\0bergen.no\0kh.ua\0is-lost.org\0" -"gov.af\0" -"kurobe.toyama.jp\0green\0" -"yk.ca\0" -"tonami.toyama.jp\0" -"gov.al\0" -"md.ci\0im\0histoire.museum\0salem.museum\0" -"in\0rm.it\0vercelli.it\0" -"int.ci\0io\0music.museum\0" -"bieszczady.pl\0gmail\0" -"gov.ba\0iq\0" -"gov.ar\0gov.bb\0ir\0" -"gov.as\0is\0\xc3\xa1laheadju.no\0samsung\0" -"it\0dnsdojo.net\0" -"gov.au\0int.co\0je\0game-server.cc\0" -"gov.bf\0" -"kragero.no\0" -"gov.bh\0" -"asso.nc\0" -"gov.az\0" -"gov.bm\0voss.no\0" -"gov.bo\0jo\0insure\0" -"chirurgiens-dentistes.fr\0gorizia.it\0jp\0ovh\0" -"inf.mk\0" -"gov.br\0" -"gov.bs\0\xc3\xb8ksnes.no\0" -"gov.bt\0gov.cd\0" -"flora.no\0" -"kg\0khakassia.ru\0" -"gov.by\0ki\0" -"gov.bz\0shinkamigoto.nagasaki.jp\0" -"sk.ca\0\xc3\xa5lesund.no\0" -"gov.cl\0fukaya.saitama.jp\0wloclawek.pl\0" -"gov.cm\0km\0tynset.no\0chuvashia.ru\0tec.ve\0" -"gov.cn\0kn\0" -"gov.co\0journalism.museum\0netbank\0" -"basilicata.it\0susaki.kochi.jp\0ogawara.miyagi.jp\0kp\0" -"la\0kvitsoy.no\0" -"kr\0lb\0" -"lc\0alaheadju.no\0" -"gd.cn\0" -"gov.cu\0" -"fujiidera.osaka.jp\0" -"gov.cx\0" -"ky\0li\0oceanographique.museum\0viking.museum\0jessheim.no\0forgot.her.name\0" -"kz\0kitchen\0" -"lk\0" -"minamiawaji.hyogo.jp\0nikko.tochigi.jp\0" -"gov.dm\0" -"kakuda.miyagi.jp\0" -"gov.do\0" -"kasuga.fukuoka.jp\0" -"ma\0r\xc3\xa1isa.no\0" -"lr\0" -"gov.ec\0ls\0mc\0" -"fukuoka.jp\0lt\0md\0" -"gov.ee\0lu\0me\0" -"lv\0" -"gov.eg\0mg\0" -"vet.br\0mh\0" -"ly\0" -"gov.dz\0" -"mk\0" -"zama.kanagawa.jp\0ml\0pid\0" -"trade\0isa-hockeynut.com\0" -"mn\0" -"mo\0komvux.se\0" -"mp\0" -"mq\0na\0from-al.com\0" -"fm.it\0futtsu.chiba.jp\0mr\0" -"ms\0nc\0" -"gov.et\0yasaka.nagano.jp\0mt\0" -"mu\0ne\0ltda\0" -"kazuno.akita.jp\0mv\0nf\0pin\0" -"mw\0ng\0" -"mishima.fukushima.jp\0mx\0" -"steam.museum\0my\0" -"group.aero\0\xe5\x80\x8b\xe4\xba\xba.hk\0" -"matsuyama.ehime.jp\0nl\0" -"no\0trana.no\0" -"minamitane.kagoshima.jp\0nr\0" -"schoenbrunn.museum\0wv.us\0" -"mombetsu.hokkaido.jp\0" -"gov.ge\0boston.museum\0schweiz.museum\0nu\0dyndns-pics.com\0" -"ureshino.mie.jp\0" -"aseral.no\0snz.ru\0" -"gov.gh\0thruhere.net\0" -"gov.gi\0" -"nz\0" -"gjesdal.no\0" -"om\0" -"gov.gn\0" -"s3.amazonaws.com\0" -"friulivgiulia.it\0tokyo.jp\0" -"kvinesdal.no\0pa\0" -"gov.gr\0" -"asso.km\0hagebostad.no\0" -"adachi.tokyo.jp\0" -"pe\0" -"pf\0" -"bushey.museum\0" -"lt.it\0seoul.kr\0ph\0kaszuby.pl\0" -"civilaviation.aero\0int.is\0" -"genoa.it\0teshikaga.hokkaido.jp\0kawanabe.kagoshima.jp\0" -"gov.hk\0pk\0bharti\0" -"friulivegiulia.it\0ebetsu.hokkaido.jp\0pl\0" -"pm\0" -"kanonji.kagawa.jp\0pn\0star\0" -"shisui.chiba.jp\0" -"qa\0" -"tenri.nara.jp\0pr\0" -"ps\0s3-website-us-west-2.amazonaws.com\0" -"nago.okinawa.jp\0pt\0" -"gov.ie\0alstahaug.no\0" -"pw\0blogspot.com\0" -"aya.miyazaki.jp\0tamano.okayama.jp\0" -"asso.mc\0py\0" -"cuisinella\0" -"moriyoshi.akita.jp\0ikeda.gifu.jp\0berlin\0" -"gov.in\0geek.nz\0" -"okuizumo.shimane.jp\0konskowola.pl\0" -"gov.iq\0circle\0" -"gov.ir\0" -"gov.is\0" -"gov.it\0" -"nb.ca\0re\0kv.ua\0" -"zagan.pl\0" -"int.la\0v\xc3\xa5g\xc3\xa5.no\0\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" -"newhampshire.museum\0fm.no\0" -"hiji.oita.jp\0" -"gov.jo\0ro\0" -"press.aero\0int.lk\0sa\0" -"yoichi.hokkaido.jp\0kumenan.okayama.jp\0sb\0" -"rs\0sc\0is-a-linux-user.org\0" -"leg.br\0sd\0" -"jur.pro\0ru\0se\0" -"gov.kg\0rw\0sg\0" -"brescia.it\0akishima.tokyo.jp\0sh\0" -"gov.ki\0basel.museum\0si\0shacknet.nu\0" -"ami.ibaraki.jp\0sj\0" -"sk\0" -"sl\0" -"gov.km\0sandefjord.no\0sm\0" -"gov.kn\0sn\0" -"so\0" -"yahaba.iwate.jp\0gov.kp\0" -"gov.la\0pharmacy\0" -"kunitachi.tokyo.jp\0gov.lb\0sr\0" -"gov.lc\0tc\0" -"hidaka.saitama.jp\0st\0td\0" -"convent.museum\0nyny.museum\0floro.no\0su\0" -"kurate.fukuoka.jp\0sv\0tf\0" -"altai.ru\0tg\0" -"ibigawa.gifu.jp\0kakogawa.hyogo.jp\0nagaokakyo.kyoto.jp\0sx\0th\0" -"gov.ky\0sy\0" -"gov.kz\0sz\0tj\0" -"gov.lk\0tk\0" -"int.mv\0tl\0" -"int.mw\0herad.no\0tm\0" -"oarai.ibaraki.jp\0tn\0" -"to\0" -"tp\0" -"gov.ma\0ua\0dnsalias.com\0" -"gov.lr\0tr\0" -"sor-fron.no\0" -"hb.cn\0gov.lt\0tt\0" -"gov.me\0healthcare\0" -"\xe9\x9d\x99\xe5\xb2\xa1.jp\0inagawa.hyogo.jp\0gov.lv\0tv\0" -"gov.mg\0tw\0ug\0" -"ad.jp\0miura.kanagawa.jp\0" -"gov.ly\0" -"tz\0" -"gov.mk\0uk\0" -"\xe4\xbd\x90\xe8\xb3\x80.jp\0okinawa.okinawa.jp\0gov.ml\0" -"archaeology.museum\0" -"biz.bb\0gov.mn\0" -"gov.mo\0" -"biz.at\0" -"va\0" -"iglesiascarbonia.it\0satte.saitama.jp\0gov.mr\0" -"gov.ms\0us\0vc\0" -"isshiki.aichi.jp\0" -"gov.mu\0ve\0" -"biz.az\0obira.hokkaido.jp\0gov.mv\0" -"gov.mw\0gov.ng\0vg\0" -"gov.my\0uy\0vi\0" -"uz\0" -"gs.rl.no\0" -"corvette.museum\0" -"vn\0" -"marburg.museum\0swiss\0" -"lyngdal.no\0" -"taiki.hokkaido.jp\0gov.nr\0" -"sandoy.no\0" -"otoineppu.hokkaido.jp\0" -"vu\0" -"sr.it\0misugi.mie.jp\0wf\0" -"orland.no\0pro\0" -"can.museum\0servebbs.org\0" -"int.pt\0" -"services\0" -"s\xc3\xb8mna.no\0gov.om\0" -"higashi.fukuoka.jp\0" -"taobao\0" -"lombardia.it\0tsuwano.shimane.jp\0" -"biei.hokkaido.jp\0" -"meraker.no\0ws\0" -"soka.saitama.jp\0" -"wildlife.museum\0lib.tx.us\0" -"shonai.fukuoka.jp\0gov.ph\0" -"sakaki.nagano.jp\0" -"copenhagen.museum\0gov.pk\0" -"gov.pl\0" -"blue\0christmas\0" -"gov.pn\0" -"gov.qa\0" -"sanagochi.tokushima.jp\0gov.pr\0author\0" -"vestv\xc3\xa5g\xc3\xb8y.no\0gov.ps\0" -"yamanashi.jp\0gov.pt\0" -"yakage.okayama.jp\0" -"holt\xc3\xa5len.no\0" -"gov.py\0" -"pub\0" -"int.ru\0" -"hi.cn\0notaires.fr\0" -"int.rw\0" -"trentino-altoadige.it\0osaka.jp\0" -"loten.no\0" -"biz.et\0odate.akita.jp\0" -"niepce.museum\0" -"rollag.no\0" -"yt\0" -"sd.us\0click\0" -"lib.oh.us\0doesntexist.org\0" -"immobilien\0" -"stor-elvdal.no\0from-ri.com\0" -"fribourg.museum\0finnoy.no\0" -"diet\0" -"int.tj\0" -"gov.sa\0" -"gov.sb\0" -"gov.rs\0gov.sc\0" -"gov.sd\0" -"gov.ru\0lt.ua\0" -"shell.museum\0saratov.ru\0gov.rw\0gov.sg\0" -"aikawa.kanagawa.jp\0gov.sh\0" -"tours\0" -"aosta-valley.it\0gr.it\0buzen.fukuoka.jp\0int.tt\0" -"res.aero\0v\xc3\xa6r\xc3\xb8y.no\0" -"kawamata.fukushima.jp\0gov.sl\0" -"minami.fukuoka.jp\0suzuka.mie.jp\0genkai.saga.jp\0" -"shika.ishikawa.jp\0" -"yao.osaka.jp\0gov.st\0" -"gr.jp\0mitake.gifu.jp\0sejny.pl\0" -"md.us\0" -"gov.sx\0" -"gov.sy\0nagoya\0" -"kurume.fukuoka.jp\0gov.tj\0" -"int.ve\0" -"gov.tl\0" -"gov.tm\0" -"mitaka.tokyo.jp\0gov.tn\0" -"gov.to\0" -"biz.id\0my.id\0" -"trogstad.no\0gov.ua\0" -"gov.tr\0" -"ass.km\0budejju.no\0" -"gov.tt\0int.vn\0" -"aogashima.tokyo.jp\0gets-it.net\0" -"plants.museum\0gov.tw\0" -"store.nf\0" -"gov.uk\0" -"ar.it\0" -"schlesisches.museum\0" -"unzen.nagasaki.jp\0" -"gaular.no\0koenig.ru\0" -"epson\0" -"sld.do\0mr.no\0gov.vc\0" -"ptz.ru\0gov.ve\0" -"build\0" -"tw.cn\0" -"from-mn.com\0" -"og.ao\0namsskogan.no\0" -"yamato.kumamoto.jp\0" -"moseushi.hokkaido.jp\0gov.vn\0" -"rocks\0" -"biz.ki\0" -"nes.buskerud.no\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" -"schwarz\0" -"pruszkow.pl\0" -"r\xc3\xb8mskog.no\0bargains\0" -"vardo.no\0mk.ua\0" -"house\0" -"hashimoto.wakayama.jp\0" -"cc.fl.us\0gov.ws\0" -"chosei.chiba.jp\0shimosuwa.nagano.jp\0" -"donna.no\0" -"tp.it\0" -"cc.sc.us\0" -"meet\0" -"sologne.museum\0" -"obu.aichi.jp\0" -"ardal.no\0" -"meldal.no\0is-a-republican.com\0" -"maintenance.aero\0" -"haboro.hokkaido.jp\0hatoyama.saitama.jp\0rich\0" -"gateway.museum\0" -"kikonai.hokkaido.jp\0kosa.kumamoto.jp\0" -"yasuoka.nagano.jp\0" -"village.museum\0" -"kyoto.jp\0hanamaki.iwate.jp\0" -"tomsk.ru\0" -"\xe7\xa7\x8b\xe7\x94\xb0.jp\0toyohashi.aichi.jp\0shiso.hyogo.jp\0" -"hadsel.no\0google\0firebaseapp.com\0" -"biz.mv\0" -"biz.mw\0" -"bi.it\0" -"otobe.hokkaido.jp\0" -"kvam.no\0vindafjord.no\0mine.nu\0" -"omuta.fukuoka.jp\0ogasawara.tokyo.jp\0biz.nr\0" -"frosinone.it\0kainan.wakayama.jp\0" -"higashiyoshino.nara.jp\0" -"\xe5\xa4\xa7\xe9\x98\xaa.jp\0" -"delmenhorst.museum\0" -"iwanuma.miyagi.jp\0" -"khmelnitskiy.ua\0" -"kanan.osaka.jp\0" -"uwajima.ehime.jp\0toyonaka.osaka.jp\0" -"transport.museum\0" -"sklep.pl\0" -"figueres.museum\0" -"shimogo.fukushima.jp\0nishinomiya.hyogo.jp\0" -"oumu.hokkaido.jp\0habikino.osaka.jp\0nakano.tokyo.jp\0ohkura.yamagata.jp\0" -"qld.edu.au\0on.ca\0vacations\0" -"berkeley.museum\0collection.museum\0biz.pk\0" -"biz.pl\0pulawy.pl\0" -"yabuki.fukushima.jp\0" -"b\xc3\xa6rum.no\0" -"kanazawa.ishikawa.jp\0" -"reklam.hu\0emerck\0" -"\xe5\xae\xae\xe5\xb4\x8e.jp\0oita.oita.jp\0biz.pr\0" -"cyou\0" -"kiyokawa.kanagawa.jp\0yonago.tottori.jp\0" -"cards\0" -"discount\0" -"ak.us\0" -"iide.yamagata.jp\0exposed\0" -"store.ve\0de.com\0" -"seljord.no\0sula.no\0" -"skiptvet.no\0k12.mt.us\0" -"friuliveneziagiulia.it\0ikeda.nagano.jp\0" -"corporation.museum\0" -"f.bg\0gj\xc3\xb8vik.no\0immo\0" -"name.hr\0" -"southwest.museum\0" -"sekikawa.niigata.jp\0" -"sciencecenters.museum\0" -"tienda\0" -"motoyama.kochi.jp\0" -"plantation.museum\0kyoto\0" -"izena.okinawa.jp\0" -"mo\xc3\xa5reke.no\0" -"og.it\0" -"ap-southeast-1.compute.amazonaws.com\0s3-ap-southeast-1.amazonaws.com\0" -"name.et\0" -"kihoku.ehime.jp\0" -"meme\0co.com\0" -"prof.pr\0" -"foggia.it\0kamisunagawa.hokkaido.jp\0" -"historical.museum\0" -"s3-ap-southeast-2.amazonaws.com\0" -"biz.tj\0" -"perm.ru\0" -"tamayu.shimane.jp\0nanyo.yamagata.jp\0" -"folldal.no\0" -"matsuda.kanagawa.jp\0" -"pe.ca\0" -"etajima.hiroshima.jp\0mitsue.nara.jp\0biz.tr\0" -"localhistory.museum\0rodeo\0doesntexist.com\0" -"biz.tt\0" -"iris.arpa\0zp.ua\0" -"showa.yamanashi.jp\0" -"urn.arpa\0sld.pa\0" -"menu\0" -"ar.us\0" -"yusuhara.kochi.jp\0red\0" -"glass.museum\0bygland.no\0" -"ginoza.okinawa.jp\0\xd0\xba\xd0\xbe\xd0\xbc\0" -"\xe7\xbd\x91\xe5\xba\x97\0" -"store.ro\0" -"higashikagura.hokkaido.jp\0" -"selbu.no\0" -"ohda.shimane.jp\0" -"name.eg\0" -"ren\0" -"m.bg\0architecture.museum\0" -"biz.vn\0" -"satsumasendai.kagoshima.jp\0mazury.pl\0" -"gojome.akita.jp\0" -"chungbuk.kr\0" -"\xe7\xbd\x91\xe7\xbb\x9c.cn\0nakasatsunai.hokkaido.jp\0takikawa.hokkaido.jp\0" -"tokushima.tokushima.jp\0" -"store.st\0" -"name.az\0cnt.br\0johana.toyama.jp\0" -"s3-website-eu-west-1.amazonaws.com\0" -"social\0" -"kvits\xc3\xb8y.no\0" -"association.museum\0" -"rikuzentakata.iwate.jp\0" -"environment.museum\0indianmarket.museum\0hi.us\0" -"ishikari.hokkaido.jp\0" -"heimatunduhren.museum\0lib.de.us\0" -"eti.br\0" -"lunner.no\0estate\0" -"lewismiller.museum\0\xec\x82\xbc\xec\x84\xb1\0" -"komaki.aichi.jp\0" -"naumburg.museum\0" -"misato.wakayama.jp\0tsuru.yamanashi.jp\0" -"haus\0" -"kawagoe.mie.jp\0" -"dance\0" -"kadoma.osaka.jp\0" -"ve.it\0" -"vana\0" -"museumcenter.museum\0" -"\xc3\xb8stre-toten.no\0philips\0" -"volyn.ua\0" -"rio\0" -"rip\0" -"hiraya.nagano.jp\0skoczow.pl\0" -"latrobe\0" -"t.bg\0info\0homeftp.org\0" -"shingu.hyogo.jp\0" -"mykolaiv.ua\0" -"loab\xc3\xa1t.no\0\xe7\xbd\x91\xe7\xab\x99\0" -"prd.fr\0incheon.kr\0" -"joburg\0" -"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"oizumi.gunma.jp\0" -"grp.lk\0" -"cn.it\0kitamoto.saitama.jp\0" -"silk.museum\0" -"swinoujscie.pl\0" -"\xe7\xbd\x91\xe7\xbb\x9c.hk\0sauherad.no\0komatsu\0" -"pe.it\0datsun\0" -"drangedal.no\0cc.nh.us\0versicherung\0" -"date.fukushima.jp\0" -"jl.cn\0mitane.akita.jp\0ozu.ehime.jp\0" -"is-with-theband.com\0" -"yoro.gifu.jp\0" -"kamo.kyoto.jp\0azure-mobile.net\0" -"aizuwakamatsu.fukushima.jp\0hasuda.saitama.jp\0targi.pl\0" -"ddr.museum\0kiwi\0" -"niyodogawa.kochi.jp\0" -"snaase.no\0" -"sumida.tokyo.jp\0" -"emr.it\0" -"prato.it\0surf\0" -"iron.museum\0pittsburgh.museum\0us-gov-west-1.compute.amazonaws.com\0" -"church\0futbol\0" -"in.na\0" -"moriyama.shiga.jp\0" -"ehime.jp\0" -"watch-and-clock.museum\0" -"kushima.miyazaki.jp\0fussa.tokyo.jp\0" -"qc.ca\0" -"bmd.br\0shakotan.hokkaido.jp\0nyuzen.toyama.jp\0pe.kr\0" -"skjerv\xc3\xb8y.no\0" -"tree.museum\0" -"egersund.no\0" -"gratangen.no\0luxe\0" -"\xe7\xb5\x84\xe7\xb9\x94.hk\0valer.hedmark.no\0" -"stcgroup\0" -"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0higashisumiyoshi.osaka.jp\0" -"accountants\0" -"is-uberleet.com\0" -"kitaaiki.nagano.jp\0" -"test.tj\0" -"bomlo.no\0" -"gs.of.no\0" -"obanazawa.yamagata.jp\0yamanashi.yamanashi.jp\0" -"prd.km\0" -"from-wa.com\0" -"agrigento.it\0" -"casino.hu\0" -"tawaramoto.nara.jp\0babia-gora.pl\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0credit\0" -"dontexist.com\0" -"yatsushiro.kumamoto.jp\0" -"h\xc3\xa5.no\0" -"js.cn\0niikappu.hokkaido.jp\0" -"gallery\0training\0" -"oguni.kumamoto.jp\0" -"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0" -"homebuilt.aero\0" -"lowicz.pl\0" -"sokndal.no\0" -"prd.mg\0" -"kakinoki.shimane.jp\0" -"farmstead.museum\0active\0" -"adm.br\0" -"alibaba\0" -"kunigami.okinawa.jp\0" -"forgot.his.name\0" -"\xc3\xa5mot.no\0test.ru\0" -"bari.it\0" -"fukuchi.fukuoka.jp\0sap\0" -"in.rs\0" -"doshi.yamanashi.jp\0" -"monticello.museum\0" -"f.se\0" -"vs.it\0" -"cpa.pro\0" -"oygarden.no\0" -"tarui.gifu.jp\0" -"inzai.chiba.jp\0arida.wakayama.jp\0" -"sca\0" -"hokuto.hokkaido.jp\0okutama.tokyo.jp\0scb\0" -"sbs\0" -"name.vn\0" -"lib.wy.us\0" -"in.th\0" -"dubai\0" -"magnitka.ru\0vegas\0" -"otofuke.hokkaido.jp\0" -"taipei\0" -"trentinoa-adige.it\0" -"in.ua\0" -"ozu.kumamoto.jp\0" -"from-id.com\0" -"psi.br\0koshu.yamanashi.jp\0" -"capetown\0" -"fylkesbibl.no\0cc.nv.us\0pvt.k12.ma.us\0" -"hachioji.tokyo.jp\0" -"western.museum\0" -"store.bb\0kasama.ibaraki.jp\0" -"trentino-alto-adige.it\0terni.it\0kawaba.gunma.jp\0" -"name.tj\0" -"in.us\0" -"katagami.akita.jp\0kawazu.shizuoka.jp\0" -"mizunami.gifu.jp\0" -"tank.museum\0lib.ri.us\0" -"name.tr\0" -"kiwa.mie.jp\0name.tt\0" -"sm\xc3\xb8la.no\0" -"nakaniikawa.toyama.jp\0" -"online.museum\0hk.org\0" -"miyoshi.saitama.jp\0" -"asaminami.hiroshima.jp\0" -"cn.ua\0" -"fr\xc3\xb8ya.no\0" -"!city.kawasaki.jp\0fukuroi.shizuoka.jp\0" -"sew\0" -"izunokuni.shizuoka.jp\0sex\0" -"exeter.museum\0nesoddtangen.no\0" -"tsukuba.ibaraki.jp\0" -"m.se\0dreamhosters.com\0" -"yame.fukuoka.jp\0ouchi.saga.jp\0" -"amakusa.kumamoto.jp\0realtor\0" -"symantec\0" +"equipment.aero\0bjerkreim.no\0" "gyeonggi.kr\0" -"ooshika.nagano.jp\0isla.pr\0" -"eun.eg\0sund.no\0lib.ky.us\0" -"teramo.it\0" -"natori.miyagi.jp\0goto.nagasaki.jp\0" -"notteroy.no\0" -"sue.fukuoka.jp\0" -"beardu.no\0naamesjevuemie.no\0" -"iida.nagano.jp\0" -"skj\xc3\xa5k.no\0" -"ino.kochi.jp\0" -"valle-d-aosta.it\0" -"pz.it\0" -"eastafrica.museum\0" -"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" -"minamiminowa.nagano.jp\0" -"name.qa\0" -"name.pr\0" -"jamison.museum\0" -"kai.yamanashi.jp\0" -"guitars\0" -"farmers.museum\0" -"ntr.br\0kamitonda.wakayama.jp\0" -"name.na\0" -"hanno.saitama.jp\0matsuzaki.shizuoka.jp\0" -"leclerc\0" -"napoli.it\0" -"inatsuki.fukuoka.jp\0name.mv\0" -"name.ng\0pl.ua\0police.uk\0" -"oxford.museum\0name.my\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0kashima.saga.jp\0fuchu.tokyo.jp\0" -"coal.museum\0bridgestone\0software\0" -"campania.it\0rep.kp\0" -"sor-odal.no\0t.se\0" -"kyonan.chiba.jp\0hikawa.shimane.jp\0suginami.tokyo.jp\0" -"medical.museum\0cc.ut.us\0" -"kitakami.iwate.jp\0pa.gov.pl\0" -"ecn.br\0aizumi.tokushima.jp\0" -"amur.ru\0de.us\0" -"kikugawa.shizuoka.jp\0yoshida.shizuoka.jp\0" -"r\xc3\xa5holt.no\0" -"k12.de.us\0" -"international\0" -"sande.vestfold.no\0" -"\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" -"sky\0from-fl.com\0" -"seiyo.ehime.jp\0ariake.saga.jp\0" -"shiojiri.nagano.jp\0" -"koori.fukushima.jp\0bond\0" -"nakagyo.kyoto.jp\0" -"academy.museum\0" -"ra.it\0abeno.osaka.jp\0" -"eidskog.no\0" -"shirahama.wakayama.jp\0" -"dudinka.ru\0" -"bnpparibas\0" -"rybnik.pl\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" -"lazio.it\0gdynia.pl\0" -"name.mk\0" -"\xe5\xae\xae\xe5\x9f\x8e.jp\0nagi.okayama.jp\0" -"is-an-artist.com\0" -"racing\0" -"hatsukaichi.hiroshima.jp\0sakai.ibaraki.jp\0chizu.tottori.jp\0" -"0.bg\0" -"nore-og-uvdal.no\0" -"ichinomiya.chiba.jp\0lezajsk.pl\0" -"bashkiria.ru\0" -"name.jo\0sciencehistory.museum\0" -"lucerne.museum\0vinnytsia.ua\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0s3-website-us-east-1.amazonaws.com\0is-an-anarchist.com\0" -"annaka.gunma.jp\0" -"florence.it\0tajiri.osaka.jp\0" -"shikabe.hokkaido.jp\0" -"uchinada.ishikawa.jp\0" -"from-pr.com\0hobby-site.com\0" -"higashine.yamagata.jp\0" -"society.museum\0" -"soy\0" -"anamizu.ishikawa.jp\0" -"lom.it\0pohl\0" -"\xc3\xa5seral.no\0" -"kira.aichi.jp\0" -"pizza\0" -"ethnology.museum\0malselv.no\0" -"bayern\0tab\0" -"contact\0" -"tozsde.hu\0saves-the-whales.com\0" -"hokuto.yamanashi.jp\0" -"org.ac\0" -"ayabe.kyoto.jp\0" -"org.ae\0time.no\0cc.ct.us\0" -"org.af\0sobetsu.hokkaido.jp\0takinoue.hokkaido.jp\0sayama.osaka.jp\0" -"org.ag\0moscow\0" -"fukushima.jp\0hirado.nagasaki.jp\0" -"org.ai\0" -"org.al\0" -"org.an\0" -"tax\0" -"org.ba\0soundandvision.museum\0trust.museum\0" -"org.ar\0org.bb\0takasago.hyogo.jp\0" -"engine.aero\0" -"org.au\0kursk.ru\0is-very-bad.org\0" -"\xe6\x94\xbf\xe5\xba\x9c\0" -"org.bh\0" -"7.bg\0org.bi\0sola.no\0is-a-socialist.com\0" -"org.az\0" -"hitachi.ibaraki.jp\0" -"org.bm\0" -"org.bo\0" -"rome.it\0" -"tci\0" -"org.br\0tsukiyono.gunma.jp\0" -"org.bs\0ulm.museum\0" -"org.bt\0" -"padova.it\0iyo.ehime.jp\0" -"org.bw\0" -"sa.edu.au\0org.ci\0" -"org.bz\0shintoku.hokkaido.jp\0" -"stc\0" -"detroit.museum\0geelvinck.museum\0" -"org.cn\0" -"org.co\0sande.more-og-romsdal.no\0" -"sakata.yamagata.jp\0" -"sicily.it\0" -"org.cu\0lib.ak.us\0" -"org.cw\0" -"vang.no\0" -"maritimo.museum\0" -"org.dm\0" -"lapy.pl\0" -"org.do\0lom.no\0\xd0\xbc\xd0\xbe\xd0\xbd\0" -"stranda.no\0" -"sicilia.it\0takasu.hokkaido.jp\0kunitomi.miyazaki.jp\0sugito.saitama.jp\0" -"org.ec\0" -"tel\0" -"org.ee\0" -"nishimera.miyazaki.jp\0" -"org.eg\0" -"aichi.jp\0koto.tokyo.jp\0" -"org.dz\0" -"maryland.museum\0" -"minami.kyoto.jp\0homeftp.net\0" -"giving\0" -"ro.it\0turin.it\0wroclaw.pl\0" -"cc.pr.us\0" -"org.es\0from-mt.com\0from-nd.com\0" -"org.et\0\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" -"langevag.no\0" -"yamanouchi.nagano.jp\0" -"r\xc3\xa6lingen.no\0fairwinds\0est-a-la-masion.com\0" -"hakui.ishikawa.jp\0" -"kuzumaki.iwate.jp\0sharp\0" -"toyono.osaka.jp\0saitama.saitama.jp\0" -"singles\0" -"military.museum\0" -"eniwa.hokkaido.jp\0" -"jerusalem.museum\0k12.wy.us\0is-a-designer.com\0" -"itayanagi.aomori.jp\0" -"trustee.museum\0" -"org.ge\0" -"amami.kagoshima.jp\0" -"parachuting.aero\0org.gg\0" -"org.gh\0ostroleka.pl\0" -"org.gi\0jondal.no\0stuff-4-sale.org\0" -"org.gn\0" -"servebbs.com\0" -"org.gp\0urawa.saitama.jp\0" -"org.gr\0lo.it\0" -"h\xc3\xb8nefoss.no\0" -"org.gt\0" -"from-nj.com\0" -"cc.wi.us\0" -"org.hk\0" -"org.hn\0" -"oystre-slidre.no\0k12.fl.us\0" -"nat.tn\0" -"encyclopedic.museum\0lib.nm.us\0" -"minamiaiki.nagano.jp\0" -"kv\xc3\xa6nangen.no\0oppdal.no\0k12.ri.us\0" -"org.ht\0" -"org.hu\0dagestan.ru\0" -"gangwon.kr\0" -"rad\xc3\xb8y.no\0" -"*.yokohama.jp\0mochizuki.nagano.jp\0shimoda.shizuoka.jp\0" -"org.im\0" -"org.in\0kunneppu.hokkaido.jp\0" -"marriott\0" -"org.iq\0" -"org.ir\0lodi.it\0shirakawa.gifu.jp\0kumamoto.kumamoto.jp\0" -"org.is\0alabama.museum\0photo\0" -"org.je\0" -"porn\0" -"kristiansand.no\0from-nh.com\0" -"rokunohe.aomori.jp\0" -"org.jo\0" -"la.us\0" -"chichibu.saitama.jp\0" -"afjord.no\0" -"tel.tr\0" -"asn.au\0k12.ky.us\0" -"org.kg\0" -"okawa.fukuoka.jp\0" -"org.ki\0" -"za.net\0" -"badajoz.museum\0" -"tenkawa.nara.jp\0post\0" -"org.km\0" -"org.kn\0" -"ohi.fukui.jp\0org.kp\0" -"org.la\0" -"\xe6\xa0\x83\xe6\x9c\xa8.jp\0org.lb\0" -"org.lc\0" -"caltanissetta.it\0" -"monza.it\0" -"vega.no\0" -"grosseto.it\0" -"council.aero\0org.ky\0pictures\0" -"org.kz\0" -"org.lk\0s3-website-ap-southeast-2.amazonaws.com\0" -"togo.aichi.jp\0wajima.ishikawa.jp\0tado.mie.jp\0" -"org.ma\0" -"org.lr\0dyndns.biz\0" -"org.ls\0" -"saga.jp\0" -"org.me\0h\xc3\xb8yanger.no\0" -"narashino.chiba.jp\0org.lv\0" -"org.mg\0and.museum\0" -"sos.pl\0" -"org.ly\0lib.mt.us\0lib.nd.us\0" -"tohnosho.chiba.jp\0poznan.pl\0" -"org.mk\0" -"org.ml\0" -"s3-website-ap-southeast-1.amazonaws.com\0" -"org.mn\0tmall\0" -"org.mo\0" -"cheltenham.museum\0org.na\0sor-aurdal.no\0" -"kusatsu.shiga.jp\0" -"org.ms\0" -"am.br\0toyone.aichi.jp\0org.mt\0" -"org.mu\0plumbing\0" -"org.mv\0bielawa.pl\0" -"org.mw\0org.ng\0" -"org.mx\0" -"org.my\0" -"work\0" -"toyama.jp\0" -"fh.se\0" -"pol.dz\0" -"gripe\0wales\0" -"tenei.fukushima.jp\0iwakuni.yamaguchi.jp\0po.gov.pl\0" -"family.museum\0" -"org.nr\0" -"bilbao.museum\0sf.no\0" -"hida.gifu.jp\0" -"lyngen.no\0" -"yokoshibahikari.chiba.jp\0" -"kamchatka.ru\0" -"nirasaki.yamanashi.jp\0top\0" -"brunel.museum\0" -"org.nz\0" -"meiwa.gunma.jp\0" -"org.om\0" -"hino.tottori.jp\0boleslawiec.pl\0" -"hareid.no\0" -"taa.it\0" -"org.pa\0" -"tagami.niigata.jp\0" -"komi.ru\0" -"kurogi.fukuoka.jp\0nakatombetsu.hokkaido.jp\0naha.okinawa.jp\0" -"org.pe\0" -"wakuya.miyagi.jp\0org.pf\0" -"org.ph\0" -"org.pk\0" -"higashi.fukushima.jp\0kushiro.hokkaido.jp\0org.pl\0" -"\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0is-a-llama.com\0" -"desa.id\0org.pn\0" -"leksvik.no\0" -"org.qa\0" -"shirako.chiba.jp\0org.pr\0" -"org.ps\0" -"org.pt\0" -"gamvik.no\0org.py\0" -"ikawa.akita.jp\0" -"aircraft.aero\0" -"obama.fukui.jp\0" -"england.museum\0graz.museum\0lib.mo.us\0" -"akita.akita.jp\0nakagawa.hokkaido.jp\0" -"davvenj\xc3\xa1rga.no\0" -"embaixada.st\0" -"ambulance.aero\0" -"pol.ht\0" -"chuo.osaka.jp\0" -"l\xc3\xb8ten.no\0ubs\0" -"limited\0" -"bergbau.museum\0h\xc3\xa6gebostad.no\0" -"savona.it\0" -"org.ro\0uk.com\0" -"ski.museum\0org.sa\0" -"org.sb\0" -"ushistory.museum\0org.rs\0org.sc\0" -"org.sd\0" -"org.ru\0org.se\0amsterdam\0" -"coop.ht\0" -"usarts.museum\0org.sg\0" -"org.sh\0" -"iwate.iwate.jp\0" -"tuva.ru\0" -"org.sl\0" -"stadt.museum\0" -"org.sn\0" -"org.so\0" -"kisosaki.mie.jp\0" -"shunan.yamaguchi.jp\0" -"ohira.miyagi.jp\0wake.okayama.jp\0kyuragi.saga.jp\0org.st\0" -"kumano.mie.jp\0org.sv\0" -"porsanger.no\0org.sy\0" -"trentino-sudtirol.it\0org.sz\0org.tj\0gda.pl\0" -"tj\xc3\xb8me.no\0" -"museum.tt\0" -"org.tm\0lifestyle\0" -"org.tn\0" -"org.to\0" -"altoadige.it\0" -"org.ua\0tui\0" -"org.tr\0" -"r\xc3\xb8yken.no\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" -"coop.br\0org.tt\0" -"brumunddal.no\0rv.ua\0gr.com\0" -"ingatlan.hu\0org.tw\0org.ug\0finance\0" -"itakura.gunma.jp\0" -"mt.it\0semboku.akita.jp\0minami-alps.yamanashi.jp\0" -"uvic.museum\0org.uk\0" -"nishikata.tochigi.jp\0" -"hk.cn\0" -"namegawa.saitama.jp\0" -"rentals\0" -"volda.no\0org.vc\0" -"org.ve\0" -"kariya.aichi.jp\0asn.lv\0" -"jp.net\0" -"museumvereniging.museum\0philately.museum\0project.museum\0stordal.no\0lib.nv.us\0org.uy\0org.vi\0" -"org.uz\0football\0" -"!city.sendai.jp\0" -"lebesby.no\0vladimir.ru\0" -"org.vn\0" -"games.hu\0" -"kawakami.nara.jp\0" -"priv.hu\0" -"takamatsu.kagawa.jp\0foundation\0" -"fetsund.no\0org.vu\0" -"yotsukaido.chiba.jp\0" -"lv.ua\0" -"osen.no\0" -"soma.fukushima.jp\0fujisawa.kanagawa.jp\0" -"reggioemilia.it\0" -"\xed\x95\x9c\xea\xb5\xad\0" -"bando.ibaraki.jp\0" -"leka.no\0" -"oshima.tokyo.jp\0" -"presidio.museum\0st.no\0org.ws\0" -"space-to-rent.com\0" -"delaware.museum\0" -"kiyama.saga.jp\0" -"omaha.museum\0azure\0" -"matsukawa.nagano.jp\0kannami.shizuoka.jp\0" -"nakhodka.ru\0" -"suifu.ibaraki.jp\0" -"safety.aero\0songdalen.no\0" -"utazas.hu\0guge\0" -"kahoku.ishikawa.jp\0" -"gotsu.shimane.jp\0koge.tottori.jp\0" -"home.dyndns.org\0" -"trentinostirol.it\0kobayashi.miyazaki.jp\0" -"sm.ua\0" -"at.it\0monza-e-della-brianza.it\0" -"ishigaki.okinawa.jp\0musashimurayama.tokyo.jp\0" -"defense.tn\0" -"kosei.shiga.jp\0" -"nichinan.tottori.jp\0" -"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" -"surgut.ru\0" -"taito.tokyo.jp\0" -"isleofman.museum\0" -"oksnes.no\0" -"volkenkunde.museum\0" -"minamimaki.nagano.jp\0" -"cologne\0" -"call\0" -"historisches.museum\0" -"asker.no\0hornindal.no\0from-tx.com\0" -"jgora.pl\0" -"barrell-of-knowledge.info\0" -"l\xc3\xa6rdal.no\0" -"rzeszow.pl\0" -"izu.shizuoka.jp\0" -"jewish.museum\0aejrie.no\0" -"blogspot.co.at\0priv.at\0" -"lombardy.it\0" -"minamiise.mie.jp\0school\0" -"botanicalgarden.museum\0freemasonry.museum\0lur\xc3\xb8y.no\0" -"omihachiman.shiga.jp\0" -"tr.it\0hokkaido.jp\0miyoshi.hiroshima.jp\0klodzko.pl\0camp\0" -"suisse.museum\0\xe5\x81\xa5\xe5\xba\xb7\0" -"denmark.museum\0" -"in.net\0" -"trysil.no\0is-a-green.com\0" -"lib.ia.us\0" -"minamiboso.chiba.jp\0" -"karmoy.no\0k12.nm.us\0" -"mil.ac\0a.bg\0film\0" -"liaison\0" -"mil.ae\0" -"bologna.it\0museum.mv\0from-co.net\0" -"museum.mw\0" -"kaneyama.fukushima.jp\0" -"mil.al\0" -"val-daosta.it\0" -"okaya.nagano.jp\0pol.tr\0" -"mil.ba\0museum.no\0business\0uno\0" -"mil.ar\0macerata.it\0" -"government.aero\0cc.me.us\0" -"toba.mie.jp\0watarai.mie.jp\0meguro.tokyo.jp\0help\0" -"shiksha\0" -"mil.az\0abruzzo.it\0" -"barclaycard\0" -"uol\0" -"mil.bo\0museum.om\0lib.ca.us\0" -"naval.museum\0" -"mil.br\0abashiri.hokkaido.jp\0" -"dyndns-work.com\0" -"fot.br\0" -"s\xc3\xb8rfold.no\0" -"mus.br\0" -"mil.by\0website\0from-dc.com\0" -"\xe6\x96\xb0\xe6\xbd\x9f.jp\0" -"mil.cl\0" -"scholarships\0" -"mil.cn\0" -"aero\0mil.co\0" -"avocat.fr\0kawahara.tottori.jp\0" -"heroy.nordland.no\0" -"arakawa.tokyo.jp\0" -"care\0" -"austrheim.no\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" -"tur.ar\0" -"humanities.museum\0" -"showa.fukushima.jp\0monash\0" -"tr.no\0" -"yoita.niigata.jp\0" -"mil.do\0" -"nakatsugawa.gifu.jp\0" -"mil.ec\0mt.us\0nd.us\0casa\0" -"sirdal.no\0cars\0iki.fi\0" -"mil.eg\0youth.museum\0k12.mn.us\0sa.com\0" -"tur.br\0cash\0" -"h.bg\0" -"tsubame.niigata.jp\0" -"davvenjarga.no\0" -"shimizu.hokkaido.jp\0" -"budapest\0" -"sagae.yamagata.jp\0" -"kirov.ru\0" -"br.it\0cb.it\0mie.jp\0" -"bd.se\0" -"\xe6\x9d\xb1\xe4\xba\xac.jp\0" -"game-host.org\0" -"yachiyo.ibaraki.jp\0" -"h\xc3\xa1pmir.no\0" -"otake.hiroshima.jp\0" -"blogspot.co.il\0" -"marylhurst.museum\0" -"mil.ge\0" -"shikama.miyagi.jp\0" -"mini\0" -"mil.gh\0tobishima.aichi.jp\0podzone.net\0" -"avoues.fr\0" -"here\0lifeinsurance\0is-an-engineer.com\0" -"komagane.nagano.jp\0fish\0endofinternet.net\0" -"lajolla.museum\0" -"dlugoleka.pl\0" -"mol.it\0" -"mil.gt\0" -"museum\0castle.museum\0udm.ru\0" -"katsuura.chiba.jp\0" -"arts.museum\0" -"kuromatsunai.hokkaido.jp\0minowa.nagano.jp\0" -"hadano.kanagawa.jp\0lawyer\0" -"oryol.ru\0guru\0" -"mil.hn\0mifune.kumamoto.jp\0" -"yaizu.shizuoka.jp\0" -"lecce.it\0" -"mil.id\0" -"m\xc3\xa1latvuopmi.no\0\xe5\x9c\xa8\xe7\xba\xbf\0" -"vet\0" -"olecko.pl\0" -"newjersey.museum\0" -"celtic.museum\0delivery\0" -"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" -"mil.in\0" -"k12.ok.us\0supplies\0\xd0\xbe\xd1\x80\xd0\xb3\0" -"mil.iq\0" -"ouda.nara.jp\0chihayaakasaka.osaka.jp\0iwi.nz\0" -"o.bg\0skjak.no\0" -"travel.pl\0" -"for-our.info\0" -"mobi.gp\0embetsu.hokkaido.jp\0" -"rennesoy.no\0" -"aomori.jp\0hiroshima.jp\0" -"monzaedellabrianza.it\0" -"mil.jo\0" -"ci.it\0trento.it\0coop.tt\0" -"cc.al.us\0academy\0" -"seika.kyoto.jp\0hyuga.miyazaki.jp\0" -"design.museum\0cc.ms.us\0cc.nc.us\0is-certified.com\0" -"\xe5\xa8\xb1\xe4\xb9\x90\0" -"mil.kg\0za.org\0" -"norfolk.museum\0" -"mil.km\0" -"naturalhistory.museum\0lib.dc.us\0" -"wales.museum\0" -"mil.kr\0coop.mv\0" -"coop.mw\0" -"nagasaki.nagasaki.jp\0" -"toyokawa.aichi.jp\0imari.saga.jp\0landrover\0" -"fhv.se\0" -"mil.kz\0" -"roros.no\0java\0" -"toki.gifu.jp\0ina.saitama.jp\0" -"for-more.biz\0" -"vip\0" -"\xe4\xb8\xaa\xe4\xba\xba.hk\0careers\0" -"idrett.no\0kustanai.ru\0" -"mil.lv\0" -"mil.mg\0" -"chofu.tokyo.jp\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" -"writesthisblog.com\0" -"oirase.aomori.jp\0olkusz.pl\0" -"com.ac\0ballooning.aero\0" -"com.af\0\xe7\xbd\x91\xe7\xbb\x9c\0" -"airline.aero\0com.ag\0" -"nakijin.okinawa.jp\0" -"com.ai\0vossevangen.no\0" -"shinichi.hiroshima.jp\0marumori.miyagi.jp\0" -"com.al\0mil.mv\0" -"mil.ng\0" -"com.an\0" -"\xe6\x94\xbf\xe5\xba\x9c.hk\0mil.my\0paris\0tips\0" -"trentinos-tirol.it\0kashima.ibaraki.jp\0" -"com.ba\0v.bg\0degree\0" -"com.ar\0com.bb\0caserta.it\0tranibarlettaandria.it\0" -"lebtimnetz.de\0" -"joboji.iwate.jp\0takatsuki.osaka.jp\0gniezno.pl\0travel.tt\0" -"com.au\0mil.no\0" -"in-the-band.net\0" -"com.aw\0" -"com.bh\0" -"com.bi\0" -"com.az\0mito.ibaraki.jp\0" -"coop.py\0" -"kashima.kumamoto.jp\0pomorskie.pl\0" -"com.bm\0" -"shiki.saitama.jp\0sandvikcoromant\0" -"com.bo\0cc.as.us\0" -"minato.tokyo.jp\0mil.nz\0" -"labour.museum\0coffee\0" -"com.br\0pg.it\0shintomi.miyazaki.jp\0" -"com.bs\0cc.nj.us\0" -"com.bt\0bytom.pl\0" -"ichiba.tokushima.jp\0" -"qc.com\0" -"kakamigahara.gifu.jp\0" -"com.by\0com.ci\0" -"com.bz\0ichihara.chiba.jp\0" -"mil.pe\0" -"uji.kyoto.jp\0" -"com.cm\0nesna.no\0" -"com.cn\0mil.ph\0" -"com.co\0\xc4\x8d\xc3\xa1hcesuolo.no\0k12.id.us\0\xe8\x87\xba\xe7\x81\xa3\0melbourne\0" -"kahoku.yamagata.jp\0" -"mil.pl\0" -"selje.no\0" -"tatebayashi.gunma.jp\0shinjo.okayama.jp\0\xe9\x9b\x86\xe5\x9b\xa2\0" -"com.cu\0com.de\0" -"higashikurume.tokyo.jp\0" -"com.cw\0mil.qa\0club.tw\0" -"v\xc3\xa5ler.hedmark.no\0" -"town.museum\0" -"nagasu.kumamoto.jp\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" -"com.dm\0" -"ninomiya.kanagawa.jp\0so.gov.pl\0\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" -"com.do\0coop.km\0mil.py\0" -"elasticbeanstalk.com\0" -"nachikatsuura.wakayama.jp\0" -"com.ec\0" -"cim.br\0ogata.akita.jp\0" -"com.ee\0" -"komoro.nagano.jp\0" -"com.eg\0a.se\0" -"priv.pl\0" -"com.dz\0yuki.ibaraki.jp\0utazu.kagawa.jp\0geisei.kochi.jp\0" -"city.hu\0dovre.no\0energy\0" -"ny.us\0" -"com.es\0" -"com.et\0tsurugi.ishikawa.jp\0nakagusuku.okinawa.jp\0" -"bajddar.no\0shouji\0" -"blogspot.co.uk\0" -"meeres.museum\0mil.ru\0" -"chita.aichi.jp\0" -"mil.rw\0naturbruksgymn.se\0" -"mil.sh\0" -"seto.aichi.jp\0vision\0" -"agents.aero\0" -"com.fr\0verbania.it\0" -"com.ge\0" -"shiriuchi.hokkaido.jp\0" -"cc.az.us\0" -"com.gh\0creditcard\0" -"com.gi\0" -"pn.it\0mil.st\0" -"maritime.museum\0priv.no\0" -"jus.br\0genova.it\0" -"haugesund.no\0" -"com.gn\0pesaro-urbino.it\0" -"rubtsovsk.ru\0mil.sy\0" -"com.gp\0kyowa.hokkaido.jp\0mil.tj\0" -"com.gr\0" -"mil.tm\0" -"com.gt\0ishikawa.jp\0android\0" -"kazan.ru\0mil.to\0" -"k12.ia.us\0" -"izumi.kagoshima.jp\0mil.tr\0" -"com.gy\0is-a-libertarian.com\0" -"noshiro.akita.jp\0" -"com.hk\0" -"mil.tw\0" -"com.hn\0est.pr\0management\0se.net\0" -"mil.tz\0" -"com.hr\0" -"grane.no\0" -"experts-comptables.fr\0com.ht\0" -"bauern.museum\0nkz.ru\0" -"webcam\0" -"iwanai.hokkaido.jp\0okinoshima.shimane.jp\0" -"mil.vc\0" -"hamura.tokyo.jp\0" -"sorreisa.no\0mil.ve\0" -"com.im\0brussels.museum\0juif.museum\0cc.ia.us\0sa-east-1.compute.amazonaws.com\0" -"com.io\0h.se\0mil.uy\0" -"com.iq\0priv.me\0cc.tx.us\0from-ca.com\0" -"hitoyoshi.kumamoto.jp\0" -"com.is\0" -"salvadordali.museum\0" -"ishikawa.okinawa.jp\0" -"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0algard.no\0ris\xc3\xb8r.no\0" -"k12.ca.us\0" -"homeip.net\0" -"k12.or.us\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0docs\0frogans\0" -"com.jo\0groks-the.info\0" -"askvoll.no\0aver\xc3\xb8y.no\0" -"ogose.saitama.jp\0gliwice.pl\0" -"sakhalin.ru\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0" -"otsuchi.iwate.jp\0" -"com.kg\0" -"keisen.fukuoka.jp\0" -"com.ki\0" -"yonaguni.okinawa.jp\0" -"from-ma.com\0" -"wed\0" -"com.km\0" -"kv\xc3\xa6""fjord.no\0cherkassy.ua\0cc.ca.us\0" -"chikuzen.fukuoka.jp\0com.kp\0" -"com.la\0nyc.museum\0" -"pu.it\0hirata.fukushima.jp\0suzaka.nagano.jp\0com.lb\0" -"com.lc\0cc.oh.us\0" -"dnsalias.net\0" -"zhitomir.ua\0" -"midori.gunma.jp\0kawai.nara.jp\0" -"com.ky\0masfjorden.no\0" -"wazuka.kyoto.jp\0gotemba.shizuoka.jp\0com.kz\0" -"com.lk\0" -"fujieda.shizuoka.jp\0opole.pl\0" -"lib.fl.us\0homelinux.com\0" -"sar.it\0bydgoszcz.pl\0" -"bristol.museum\0parts\0photos\0" -"ogawa.saitama.jp\0" -"com.lr\0" -"shibetsu.hokkaido.jp\0" -"party\0" -"liguria.it\0com.lv\0" -"com.mg\0m\xc3\xa5lselv.no\0herokussl.com\0" -"adv.br\0oga.akita.jp\0" -"com.ly\0" -"com.mk\0north.museum\0" -"com.ml\0agrinet.tn\0prod\0" -"gs.vf.no\0" -"prof\0" -"com.mo\0yolasite.com\0" -"com.na\0" -"com.ms\0" -"com.mt\0" -"com.mu\0ar.com\0" -"com.mv\0com.nf\0" -"com.mw\0com.ng\0o.se\0" -"com.mx\0swidnica.pl\0" -"com.my\0" -"yamada.iwate.jp\0" -"landes.museum\0stathelle.no\0doha\0" -"togitsu.nagasaki.jp\0" -"trani-andria-barletta.it\0sr.gov.pl\0" -"asakawa.fukushima.jp\0joyo.kyoto.jp\0" -"laz.it\0com.nr\0" -"usculture.museum\0" -"yamaguchi.jp\0" -"tottori.jp\0ota.gunma.jp\0" -"midsund.no\0" -"sannohe.aomori.jp\0" -"lancashire.museum\0com.om\0" -"olsztyn.pl\0" -"com.pa\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" -"eisenbahn.museum\0paroch.k12.ma.us\0s3-us-gov-west-1.amazonaws.com\0no.com\0from-vt.com\0" -"dgca.aero\0com.pe\0vn.ua\0" -"com.pf\0win\0blogspot.co.nz\0" -"bykle.no\0" -"oshima.yamaguchi.jp\0com.ph\0" -"honjo.saitama.jp\0nishikawa.yamagata.jp\0" -"lakas.hu\0com.pk\0" -"*.nagoya.jp\0fuji.shizuoka.jp\0com.pl\0" -"com.qa\0" -"xj.cn\0tomari.hokkaido.jp\0com.pr\0" -"j\xc3\xb8lster.no\0com.ps\0" -"sumoto.hyogo.jp\0com.pt\0" -"kuriyama.hokkaido.jp\0nasushiobara.tochigi.jp\0" -"barcelona.museum\0aurskog-h\xc3\xb8land.no\0" -"com.py\0marketing\0s3-website-sa-east-1.amazonaws.com\0" -"kayabe.hokkaido.jp\0" -"minamata.kumamoto.jp\0shima.mie.jp\0" -"mulhouse.museum\0gs.svalbard.no\0" -"red.sv\0" -"ngo.lk\0com.re\0" -"hachirogata.akita.jp\0kanoya.kagoshima.jp\0" -"massacarrara.it\0anjo.aichi.jp\0chijiwa.nagasaki.jp\0" -"from-hi.com\0" -"is-into-games.com\0" -"\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" -"ina.ibaraki.jp\0" -"com.ro\0" -"com.sa\0" -"com.sb\0mobi.tt\0" -"com.sc\0neat-url.com\0" -"com.sd\0" -"drobak.no\0lillehammer.no\0com.ru\0com.se\0" -"kiho.mie.jp\0" -"com.rw\0com.sg\0" -"com.sh\0mobi.tz\0xbox\0" -"k12.co.us\0" -"lease\0" -"com.sl\0" -"wme\0" -"com.sn\0" -"l\xc3\xb8renskog.no\0com.so\0" -"com.st\0" -"cosenza.it\0com.sv\0" -"masoy.no\0" -"sasaguri.fukuoka.jp\0" -"com.sy\0" -"assabu.hokkaido.jp\0kanmaki.nara.jp\0com.tj\0" -"zaporizhzhe.ua\0" -"tamakawa.fukushima.jp\0faith\0" -"com.tm\0" -"ug.gov.pl\0com.tn\0" -"com.to\0cc.co.us\0" -"voronezh.ru\0com.ua\0" -"rc.it\0com.tr\0" -"hokksund.no\0\xc3\xa1k\xc5\x8boluokta.no\0" -"com.tt\0" -"mel\xc3\xb8y.no\0" -"\xe6\x84\x9b\xe5\xaa\x9b.jp\0shichinohe.aomori.jp\0" -"com.tw\0com.ug\0" -"kisofukushima.nagano.jp\0" -"kepno.pl\0" -"artgallery.museum\0zgrad.ru\0" -"nome.pt\0" -"inc.hk\0" -"control.aero\0" -"gamagori.aichi.jp\0ngo.ph\0" -"sa.au\0""2.bg\0com.vc\0" -"biratori.hokkaido.jp\0matsushige.tokushima.jp\0" -"topology.museum\0com.ve\0" -"ichinomiya.aichi.jp\0" -"semine.miyagi.jp\0saarland\0" -"com.uy\0com.vi\0" -"valle-aosta.it\0nakayama.yamagata.jp\0com.uz\0" -"dn.ua\0" -"ws.na\0" -"com.vn\0" -"act.edu.au\0durham.museum\0" -"reggio-emilia.it\0bizen.okayama.jp\0yamada.toyama.jp\0" -"mansions.museum\0podzone.org\0" -"tomobe.ibaraki.jp\0minamiyamashiro.kyoto.jp\0matsubushi.saitama.jp\0" -"glas.museum\0" -"lc.it\0rikubetsu.hokkaido.jp\0engineer\0" -"com.vu\0" -"nishitosa.kochi.jp\0" -"yaroslavl.ru\0" -"fj.cn\0" -"makinohara.shizuoka.jp\0" -"saka.hiroshima.jp\0" -"mobi.na\0vagsoy.no\0sevastopol.ua\0" -"sa.cr\0" -"lib.mi.us\0com.ws\0" -"naoshima.kagawa.jp\0" -"mobi.ng\0hobby-site.org\0" -"tokai.ibaraki.jp\0" -"catania.it\0shinagawa.tokyo.jp\0" -"sannan.hyogo.jp\0" -"rotorcraft.aero\0amot.no\0" -"sanofi\0" -"tas.gov.au\0" -"fc.it\0kochi.kochi.jp\0" -"kemerovo.ru\0" -"leangaviika.no\0" -"gyeongnam.kr\0consulado.st\0" -"leirfjord.no\0" -"hayashima.okayama.jp\0koka.shiga.jp\0" -"autos\0is-by.us\0" -"smile\0" -"conf.au\0" -"9.bg\0wtc\0" -"wtf\0" -"nsw.edu.au\0aurland.no\0chrome\0" -"otaki.saitama.jp\0" -"yosemite.museum\0parti.se\0" -"kawanishi.nara.jp\0" -"baltimore.museum\0yoga\0" -"es.kr\0" -"heroy.more-og-romsdal.no\0" -"omotego.fukushima.jp\0" -"british.museum\0" -"ishinomaki.miyagi.jp\0" -"game.tw\0cc.vt.us\0" -"umi.fukuoka.jp\0ikusaka.nagano.jp\0" -"sh.cn\0" -"judaica.museum\0gjemnes.no\0itau\0" -"slupsk.pl\0" -"musashino.tokyo.jp\0" -"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" -"malatvuopmi.no\0from-pa.com\0" -"tomakomai.hokkaido.jp\0" -"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" -"unbi.ba\0nid.io\0" -"szex.hu\0" -"wassamu.hokkaido.jp\0naka.ibaraki.jp\0" +"jeep\0" +"chieti.it\0" +"landrover\0" +"genoa.it\0ugim.gov.pl\0" +"rishirifuji.hokkaido.jp\0tomiya.miyagi.jp\0foodnetwork\0" +"bananarepublic\0" +"kr\xc3\xb8""dsherad.no\0" +"swiftcover\0" +"wtc\0unusualperson.com\0" +"unazuki.toyama.jp\0" +"wtf\0forgot.his.name\0" +"dyndns.org\0ma.leg.br\0" +"cci.fr\0\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"hiroo.hokkaido.jp\0" +"showa.gunma.jp\0yawata.kyoto.jp\0" +"help\0" +"name.vn\0" +"cagliari.it\0game-host.org\0" +"\xe5\x9f\xbc\xe7\x8e\x89.jp\0trust\0" +"dagestan.ru\0pokrovsk.su\0" +"cmw.ru\0" +"tokamachi.niigata.jp\0" +"hirono.fukushima.jp\0" +"forlicesena.it\0tsushima.nagasaki.jp\0" +"sci.eg\0\xe7\xae\x87\xe4\xba\xba.hk\0" +"kawaba.gunma.jp\0ookuwa.nagano.jp\0" +"masuda.shimane.jp\0xbox\0" +"servep2p.com\0" +"portal.museum\0" +"blog.br\0dagestan.su\0" +"fukushima.jp\0newholland\0" +"merseine.nu\0ditchyourip.com\0" +"iraq.museum\0bronnoy.no\0" +"ogasawara.tokyo.jp\0" +"furukawa.miyagi.jp\0takayama.nagano.jp\0" +"name.tj\0" +"mb.ca\0koto.tokyo.jp\0" +"loyalist.museum\0gdansk.pl\0" +"chosei.chiba.jp\0nagawa.nagano.jp\0" +"cheltenham.museum\0" +"casadelamoneda.museum\0name.tr\0" +"d\xc3\xb8nna.no\0name.tt\0futuremailing.at\0" +"al.no\0" +"trentinoa-adige.it\0herad.no\0" +"kizu.kyoto.jp\0\xc3\xa5krehamn.no\0" +"katagami.akita.jp\0\xc3\xb8stre-toten.no\0" +"johana.toyama.jp\0" "kawasaki.miyagi.jp\0" -"daiwa.hiroshima.jp\0" -"is-very-sweet.org\0" -"naganohara.gunma.jp\0" -"solund.no\0" -"gose.nara.jp\0" -"juegos\0" -"sa.it\0" -"emergency.aero\0hawaii.museum\0" -"\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" -"medio-campidano.it\0hiroo.hokkaido.jp\0" -"svizzera.museum\0doomdns.org\0" -"hioki.kagoshima.jp\0" +"cc.in.us\0dnsdojo.com\0" +"cc.de.us\0\xe6\x89\x8b\xe8\xa1\xa8\0" +"toki.gifu.jp\0" +"georgia.museum\0gs.tr.no\0" +"ri.it\0" +"an.it\0house.museum\0" +"is-a-musician.com\0servehttp.com\0" +"oto.fukuoka.jp\0" +"\xe5\xbe\xae\xe5\x8d\x9a\0" +"mtpc\0" +"nordkapp.no\0boxfuse.io\0" +"shell.museum\0" +"alipay\0mt.eu.org\0" +"\xe6\x9d\xb1\xe4\xba\xac.jp\0softbank\0" +"yashio.saitama.jp\0" +"mutsuzawa.chiba.jp\0nowtv\0" +"ina.ibaraki.jp\0hembygdsforbund.museum\0" +"xin\0" +"loppa.no\0" +"judygarland.museum\0here\0scjohnson\0" +"firm.ht\0" +"suita.osaka.jp\0" +"assn.lk\0" +"saikai.nagasaki.jp\0" +"mo-i-rana.no\0spiegel\0sites.static.land\0" +"skydiving.aero\0homegoods\0" +"hino.tokyo.jp\0phoenix.museum\0kvalsund.no\0" +"firm.in\0" +"k12.ia.us\0" +"heguri.nara.jp\0name.qa\0guru\0lego\0" +"flor\xc3\xb8.no\0name.pr\0" +"\xe9\x95\xb7\xe9\x87\x8e.jp\0" +"palermo.it\0" +"control.aero\0verona.it\0" +"traniandriabarletta.it\0takamori.kumamoto.jp\0" +"skedsmo.no\0" +"kyotamba.kyoto.jp\0" +"itami.hyogo.jp\0" +"clubmed\0star\0" +"ginowan.okinawa.jp\0name.na\0" +"griw.gov.pl\0" +"name.mv\0mormon\0" +"name.ng\0" +"fvg.it\0name.my\0tomsk.ru\0" +"altoadige.it\0" +"school.museum\0gs.jan-mayen.no\0" +"md.ci\0firm.co\0" +"and\xc3\xb8y.no\0mari-el.ru\0lib.az.us\0" +"wanouchi.gifu.jp\0higashiyamato.tokyo.jp\0" +"textile.museum\0" +"kitakami.iwate.jp\0mansions.museum\0randaberg.no\0chrysler\0" +"udm.ru\0cc.ny.us\0is-a-guru.com\0" +"eisenbahn.museum\0" +"eun.eg\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0praxi\0" +"firm.dk\0" +"domains\0" +"parachuting.aero\0" +"mb.it\0" +"ap.it\0" +"travel\0" +"muko.kyoto.jp\0" +"tsukiyono.gunma.jp\0freiburg.museum\0" +"higashiyama.kyoto.jp\0" +"\xe6\x84\x9b\xe7\x9f\xa5.jp\0al.us\0" +"kamagaya.chiba.jp\0" +"ibaraki.ibaraki.jp\0chikuhoku.nagano.jp\0mima.tokushima.jp\0" +"noheji.aomori.jp\0" "edu.ac\0" -"yokosuka.kanagawa.jp\0" -"ipiranga\0" -"edu.af\0tono.iwate.jp\0takagi.nagano.jp\0" -"edu.al\0nuoro.it\0\xe5\xb3\xb6\xe6\xa0\xb9.jp\0inagi.tokyo.jp\0" -"sogndal.no\0room\0endofinternet.org\0" -"edu.an\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0yuasa.wakayama.jp\0" -"berlev\xc3\xa5g.no\0" +"redirectme.net\0" +"tahara.aichi.jp\0" +"edu.af\0" +"taxi.br\0" +"name.mk\0" +"med.br\0" +"edu.al\0nishitosa.kochi.jp\0stpetersburg.museum\0" +"salon\0" "edu.ba\0" -"edu.ar\0edu.bb\0taketomi.okinawa.jp\0" -"crimea.ua\0" -"edu.au\0" -"video\0" -"edu.bh\0" +"edu.ar\0edu.bb\0gyeongnam.kr\0" +"*.0emm.com\0" +"shimoichi.nara.jp\0" +"civilaviation.aero\0edu.au\0la-spezia.it\0" +"seiyo.ehime.jp\0" +"edu.bh\0is-very-bad.org\0" "edu.bi\0" "edu.az\0" -"anthropology.museum\0is-a-anarchist.com\0" -"kartuzy.pl\0xin\0" +"k12.ct.us\0" +"b.ssl.fastly.net\0" "edu.bm\0" -"watari.miyagi.jp\0" -"edu.bo\0flatanger.no\0roan.no\0" -"edu.br\0" -"edu.bs\0homedns.org\0" -"edu.bt\0" -"imabari.ehime.jp\0" -"edu.ci\0\xd1\x80\xd1\x83\xd1\x81\0" -"edu.bz\0kumiyama.kyoto.jp\0" -"is-a-financialadvisor.com\0" -"izhevsk.ru\0" -"edu.cn\0" -"edu.co\0sandnessj\xc3\xb8""en.no\0" -"sardegna.it\0" -"awaji.hyogo.jp\0" -"soni.nara.jp\0" -"edu.cu\0" -"edu.cw\0clinton.museum\0\xc3\xa5mli.no\0ks.ua\0" -"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" -"gol.no\0" -"pisz.pl\0" -"monmouth.museum\0" -"edu.dm\0z-1.compute-1.amazonaws.com\0" +"name.jo\0" +"edu.bo\0" +"dyndns-wiki.com\0" +"edu.br\0\xeb\x8b\xb7\xec\xbb\xb4\0" +"edu.bs\0" +"flog.br\0edu.bt\0onjuku.chiba.jp\0" +"otoyo.kochi.jp\0" +"benevento.it\0" +"edu.ci\0" +"in-addr.arpa\0edu.bz\0" +"art.br\0history.museum\0brother\0" +"med.ec\0meteorapp.com\0" +"agr.br\0" +"edu.cn\0med.ee\0naka.hiroshima.jp\0kamimine.saga.jp\0" +"edu.co\0" +"rishiri.hokkaido.jp\0" +"edu.cu\0shinjo.nara.jp\0nesset.no\0" +"edu.cw\0click\0" +"\xe9\xa4\x90\xe5\x8e\x85\0" +"lib.ga.us\0" +"\xd9\x83\xd9\x88\xd9\x85\0is-a-bookkeeper.com\0" +"samara.ru\0" +"ainan.ehime.jp\0" +"edu.dm\0" "edu.do\0" -"ah.cn\0" +"cc.ok.us\0" +"fujisawa.iwate.jp\0" "edu.ec\0" -"mo.cn\0izumiotsu.osaka.jp\0" -"edu.ee\0" -"dental\0" -"edu.eg\0cartoonart.museum\0" -"trentinoalto-adige.it\0" -"ks.us\0" -"edu.dz\0homelinux.net\0" -"epilepsy.museum\0" -"nakanoto.ishikawa.jp\0shiraoka.saitama.jp\0" -"stateofdelaware.museum\0k12.ks.us\0" -"izumozaki.niigata.jp\0" -"kamisu.ibaraki.jp\0" -"edu.es\0discovery.museum\0" -"edu.et\0airtel\0" -"palermo.it\0" -"yura.wakayama.jp\0" -"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" -"go.ci\0romsa.no\0" -"omigawa.chiba.jp\0niihama.ehime.jp\0" -"villas\0" -"edu.ge\0" -"pug.it\0matsuura.nagasaki.jp\0" -"comunica\xc3\xa7\xc3\xb5""es.museum\0dyndns-ip.com\0" -"edu.gh\0" -"edu.gi\0br\xc3\xb8nn\xc3\xb8y.no\0rahkkeravju.no\0sn\xc3\xa5sa.no\0" -"go.cr\0ulsan.kr\0" -"agency\0" +"vlog.br\0" +"edu.ee\0hamatonbetsu.hokkaido.jp\0" +"datsun\0my.eu.org\0" +"edu.eg\0football\0" +"art.do\0rm.it\0" +"lt.it\0" +"edu.dz\0" +"ar.it\0juedisches.museum\0" +"e4.cz\0" +"a.prod.fastly.net\0" +"ri.us\0" +"norddal.no\0" +"art.dz\0edu.es\0" +"edu.et\0" +"geisei.kochi.jp\0" +"kasaoka.okayama.jp\0" +"bergen.no\0" +"kujukuri.chiba.jp\0ochi.kochi.jp\0ladbrokes\0" +"foundation\0" +"ven.it\0style\0" +"edu.ge\0okayama.jp\0takahama.aichi.jp\0shimofusa.chiba.jp\0" +"family\0godaddy\0read\0" +"edu.gh\0imakane.hokkaido.jp\0" +"edu.gi\0shioya.tochigi.jp\0" +"\xe1\x83\x92\xe1\x83\x94\0" +"edu.gl\0skjak.no\0" +"med.ht\0gifu.jp\0" "edu.gn\0" -"stavanger.no\0" +"culturalcenter.museum\0" "edu.gp\0" -"edu.gr\0" -"artcenter.museum\0" -"edu.gt\0" -"fitjar.no\0" -"aosta.it\0" -"yoshino.nara.jp\0publ.pt\0" -"edu.hk\0" -"edu.hn\0higashiizu.shizuoka.jp\0" -"nf.ca\0investments\0" -"trentinosued-tirol.it\0imakane.hokkaido.jp\0" -"naie.hokkaido.jp\0" -"illustration.museum\0" -"edu.ht\0fujiyoshida.yamanashi.jp\0" -"chiyoda.gunma.jp\0" -"science-fiction.museum\0" -"so.it\0" -"kamikoani.akita.jp\0" -"edu.in\0" -"gv.ao\0" -"kyotanabe.kyoto.jp\0nabari.mie.jp\0" -"edu.iq\0" -"edu.is\0" -"gv.at\0edu.it\0" -"stuff-4-sale.us\0" -"yamagata.yamagata.jp\0" -"pasadena.museum\0" -"kawai.iwate.jp\0ryuoh.shiga.jp\0" -"saltdal.no\0stokke.no\0" -"tychy.pl\0makeup\0" -"surnadal.no\0gos.pk\0" -"edu.jo\0" -"fermo.it\0fujimi.saitama.jp\0" -"wakkanai.hokkaido.jp\0" -"nara.nara.jp\0" -"edu.kg\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" -"edu.ki\0aa.no\0" -"mo.it\0" -"kvinnherad.no\0" -"oamishirasato.chiba.jp\0sumita.iwate.jp\0" -"edu.km\0from-nm.com\0" -"edu.kn\0" -"cc.wy.us\0" -"fukui.fukui.jp\0koryo.nara.jp\0edu.kp\0" +"is-a-llama.com\0" +"edu.gr\0skanland.no\0" +"edu.gt\0inagi.tokyo.jp\0" +"mobara.chiba.jp\0creditunion\0" +"edu.gy\0community\0" +"osaka.jp\0historisch.museum\0" +"edu.hk\0b\xc3\xa1l\xc3\xa1t.no\0" +"press.aero\0pri.ee\0edu.hn\0" +"sa.au\0ulvik.no\0" +"barreau.bj\0edu.ht\0asaka.saitama.jp\0birkenes.no\0evje-og-hornnes.no\0pomorze.pl\0firm.ve\0" +"siena.it\0nysa.pl\0est-a-la-maison.com\0paris.eu.org\0" +"brussels\0" +"withgoogle.com\0" +"ikawa.akita.jp\0\xc3\xa5mot.no\0credit\0" +"art.ht\0midori.gunma.jp\0kazo.saitama.jp\0komatsushima.tokushima.jp\0" +"edu.in\0pavia.it\0mihara.kochi.jp\0aridagawa.wakayama.jp\0transport.museum\0" +"sodegaura.chiba.jp\0" +"edu.iq\0edunet.tn\0" +"edu.is\0lib.md.us\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"edu.it\0kawakita.ishikawa.jp\0" +"go.ci\0\xe7\x9f\xb3\xe5\xb7\x9d.jp\0accountants\0" +"act.edu.au\0" +"xj.cn\0" +"kurgan.ru\0" +"s3-us-gov-west-1.amazonaws.com\0" +"yashiro.hyogo.jp\0" +"sa.cr\0alabama.museum\0pasadena.museum\0ro.im\0" +"gs.svalbard.no\0" +"go.cr\0" +"edu.jo\0ap-northeast-2.compute.amazonaws.com\0" +"sakai.fukui.jp\0" +"ro.it\0miyama.fukuoka.jp\0" +"extraspace\0" +"memorial.museum\0" +"at.it\0nl.eu.org\0" +"edu.kg\0xxx\0\xd8\xa8\xd9\x8a\xd8\xaa\xd9\x83\0us-west-2.compute.amazonaws.com\0" +"toya.hokkaido.jp\0edu.ki\0suldal.no\0kurgan.su\0" +"enebakk.no\0groks-the.info\0" +"edu.km\0tiffany\0\xe4\xbd\x9b\xe5\xb1\xb1\0" +"edu.kn\0anthropology.museum\0baghdad.museum\0" +"edu.kp\0" "edu.la\0" -"edu.lb\0" -"edu.lc\0" -"kounosu.saitama.jp\0fuchu.toyama.jp\0" -"dominic.ua\0lib.ar.us\0" -"\xe7\xae\x87\xe4\xba\xba.hk\0edu.ky\0" +"edu.lb\0med.ly\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"edu.lc\0kafjord.no\0" +"ueno.gunma.jp\0" +"edu.ky\0vinnytsia.ua\0xyz\0" "edu.kz\0" "edu.lk\0" -"go.id\0mantova.it\0funahashi.toyama.jp\0" -"chippubetsu.hokkaido.jp\0" -"hamburg.museum\0\xc3\xa5snes.no\0" -"tsuga.tochigi.jp\0" -"sciences.museum\0" +"misato.saitama.jp\0" +"mus.br\0monza.it\0torahime.shiga.jp\0ichikai.tochigi.jp\0" +"katori.chiba.jp\0" "edu.lr\0" -"luster.no\0vinnica.ua\0" +"shikama.miyagi.jp\0vestnes.no\0banamex\0" "edu.me\0" "edu.lv\0" "edu.mg\0" -"edu.ly\0cultural.museum\0ftpaccess.cc\0" -"kagamino.okayama.jp\0" -"edu.mk\0rygge.no\0" -"go.it\0hirono.fukushima.jp\0daito.osaka.jp\0edu.ml\0" -"salangen.no\0tromsa.no\0reviews\0" -"edu.mn\0" -"edu.mo\0" -"sv.it\0" -"cymru.museum\0e-burg.ru\0cc.ri.us\0" -"tsumagoi.gunma.jp\0gorlice.pl\0" +"edu.ly\0" +"orientexpress\0team\0" +"edu.mk\0inder\xc3\xb8y.no\0ru.com\0se.com\0" +"edu.ml\0" +"taiki.hokkaido.jp\0" +"edu.mn\0nyc.museum\0firm.ro\0from-fl.com\0" +"varese.it\0edu.mo\0" +"isumi.chiba.jp\0" +"a.ssl.fastly.net\0" "edu.ms\0" -"nm.cn\0\xe5\x8d\x83\xe8\x91\x89.jp\0nonoichi.ishikawa.jp\0edu.mt\0" -"ayagawa.kagawa.jp\0edu.mv\0" -"edu.mw\0edu.ng\0b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0poltava.ua\0" -"go.jp\0edu.mx\0" -"edu.my\0ma.us\0k12.al.us\0" -"kyotamba.kyoto.jp\0" -"k12.mi.us\0" -"onna.okinawa.jp\0" -"stryn.no\0" -"pescara.it\0edu.nr\0" -"county.museum\0" -"\xe5\x95\x86\xe6\xa0\x87\0" -"tm.fr\0komae.tokyo.jp\0" -"msk.ru\0" -"bialowieza.pl\0" -"haram.no\0\xd1\x81\xd1\x80\xd0\xb1\0sells-for-u.com\0" -"go.kr\0" -"trapani.it\0takahama.fukui.jp\0nayoro.hokkaido.jp\0ibaraki.ibaraki.jp\0" -"forde.no\0edu.om\0" -"ao.it\0" -"ah.no\0edu.pa\0" -"trentino-suedtirol.it\0" -"mesaverde.museum\0cc.ky.us\0" -"taishin.fukushima.jp\0erimo.hokkaido.jp\0" -"edu.pe\0" -"como.it\0edu.pf\0" -"edu.ph\0" -"yamada.fukuoka.jp\0" -"edu.pk\0ga.us\0" -"edu.pl\0" -"edu.pn\0" -"production.aero\0sk\xc3\xa1nit.no\0" -"lucania.it\0" -"sandnes.no\0edu.qa\0" -"edu.pr\0garden\0" -"nt.au\0edu.ps\0" -"mar.it\0edu.pt\0" -"fukagawa.hokkaido.jp\0toyosato.shiga.jp\0" -"tm.hu\0edu.py\0" -"friulivenezia-giulia.it\0hiphop\0" -"coastaldefence.museum\0" -"chiyoda.tokyo.jp\0mragowo.pl\0" -"nt.ca\0" -"valle-daosta.it\0" -"hinode.tokyo.jp\0" -"lacaixa\0" -"watches\0" -"xxx\0" -"field.museum\0missoula.museum\0d\xc3\xb8nna.no\0science\0hu.com\0" -"tadaoka.osaka.jp\0" -"hayakawa.yamanashi.jp\0" -"dnsalias.org\0" -"edu.sa\0" -"edu.sb\0" -"edu.rs\0edu.sc\0lib.id.us\0" -"ogori.fukuoka.jp\0notogawa.shiga.jp\0edu.sd\0" -"repbody.aero\0id.au\0edu.ru\0k12.nj.us\0" -"loyalist.museum\0edu.rw\0edu.sg\0" -"xyz\0" -"moka.tochigi.jp\0dynathome.net\0" -"kimino.wakayama.jp\0edu.sl\0nissan\0" -"veterinaire.km\0" -"kokubunji.tokyo.jp\0edu.sn\0" -"os.hordaland.no\0" -"tm.km\0artsandcrafts.museum\0is-a-musician.com\0" -"*.kitakyushu.jp\0iitate.fukushima.jp\0" -"edu.st\0" -"av.it\0urayasu.chiba.jp\0edu.sv\0" -"florida.museum\0ninja\0" -"edu.sy\0" -"nemuro.hokkaido.jp\0edu.tj\0" -"s\xc3\xb8rum.no\0" -"yawatahama.ehime.jp\0oyamazaki.kyoto.jp\0moroyama.saitama.jp\0" -"edu.tm\0" -"shinyoshitomi.fukuoka.jp\0\xd1\x80\xd1\x84\0" -"fuel.aero\0hellas.museum\0go.pw\0edu.to\0" -"edu.ua\0" -"edu.tr\0" -"zlg.br\0edu.tt\0" -"tm.mc\0edu.tw\0fitness\0s3-us-west-2.amazonaws.com\0" -"iwaizumi.iwate.jp\0kitakata.miyazaki.jp\0" -"hembygdsforbund.museum\0" -"kumano.hiroshima.jp\0" -"tm.mg\0sec.ps\0" -"cremona.it\0" -"railway.museum\0" -"r\xc3\xa5""de.no\0is-a-lawyer.com\0" -"nishiizu.shizuoka.jp\0wajiki.tokushima.jp\0" -"edu.vc\0" -"shimonoseki.yamaguchi.jp\0" -"edu.ve\0" -"tt.im\0edu.uy\0bingo\0" -"ibestad.no\0" -"komatsu.ishikawa.jp\0meiwa.mie.jp\0\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" -"cadaques.museum\0" -"edu.vn\0" -"cyber.museum\0" -"ud.it\0aki.kochi.jp\0" -"veterinaire.fr\0" -"tm.no\0royrvik.no\0boats\0youtube\0" -"toshima.tokyo.jp\0" -"edu.vu\0" -"hazu.aichi.jp\0yoka.hyogo.jp\0" -"mo.us\0k12.az.us\0boldlygoingnowhere.org\0" -"shimamaki.hokkaido.jp\0" -"mizuho.tokyo.jp\0conf.lv\0go.th\0" -"c.bg\0" -"go.tj\0" -"indiana.museum\0edu.ws\0" -"kamifurano.hokkaido.jp\0ryugasaki.ibaraki.jp\0" -"giske.no\0safe\0" -"miyagi.jp\0" -"matta-varjjat.no\0" -"caa.aero\0firmdale\0" -"ojiya.niigata.jp\0" -"go.ug\0" -"tm.pl\0" -"go.tz\0" -"sakegawa.yamagata.jp\0" -"alvdal.no\0" -"os.hedmark.no\0" -"hizen.saga.jp\0" -"pb.ao\0chicago.museum\0fuossko.no\0" -"srv.br\0azurewebsites.net\0" -"or.at\0" -"br\xc3\xb8nn\xc3\xb8ysund.no\0" -"or.bi\0" -"higashimatsuyama.saitama.jp\0" -"l\xc3\xa1hppi.no\0" -"\xe5\x85\xac\xe5\x8f\xb8.cn\0koga.fukuoka.jp\0cern\0" -"notodden.no\0" -"katano.osaka.jp\0" -"dinosaur.museum\0windmill.museum\0" -"yonezawa.yamagata.jp\0" -"id.ir\0kasahara.gifu.jp\0" -"tm.ro\0" -"sex.hu\0college\0" -"or.ci\0starnberg.museum\0hm.no\0bloomberg\0" -"cal.it\0rns.tn\0" -"\xe5\x85\xac\xe5\x8f\xb8.hk\0tm.se\0" -"web.co\0" -"land\0" -"saga.saga.jp\0" -"or.cr\0" -"navuotna.no\0" -"onojo.fukuoka.jp\0" -"global\0" -"lib.va.us\0" -"j.bg\0" -"web.do\0" -"kagoshima.jp\0misato.akita.jp\0" -"webhop.info\0" -"nagahama.shiga.jp\0" -"bt.it\0taku.saga.jp\0" -"kraanghke.no\0" -"sakurai.nara.jp\0" -"cc.mn.us\0" -"culture.museum\0guernsey.museum\0nt.no\0" -"tachiarai.fukuoka.jp\0" -"plc.co.im\0historisch.museum\0" -"aisho.shiga.jp\0" -"coldwar.museum\0" -"motobu.okinawa.jp\0ibaraki.osaka.jp\0" -"news.hu\0sale\0" -"id.lv\0" -"anthro.museum\0" -"sondrio.it\0" -"id.ly\0lib.pa.us\0" -"finearts.museum\0" -"matsuno.ehime.jp\0yun\0" -"t\xc3\xb8nsberg.no\0" -"sciencecenter.museum\0baidar.no\0muosat.no\0" -"lind\xc3\xa5s.no\0v\xc3\xa1rgg\xc3\xa1t.no\0kiev.ua\0" -"scrapping.cc\0" -"av.tr\0" -"\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" -"kitagata.gifu.jp\0ota.tokyo.jp\0" -"j\xc3\xb8rpeland.no\0" -"krakow.pl\0" -"zt.ua\0" -"kirovograd.ua\0" -"vb.it\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0kicks-ass.net\0" -"telefonica\0" -"fundacio.museum\0" -"tomika.gifu.jp\0" -"bodo.no\0" -"cuneo.it\0!city.nagoya.jp\0" -"neues.museum\0bryansk.ru\0nm.us\0" -"mielno.pl\0" -"elburg.museum\0" -"american.museum\0" -"skanit.no\0" -"web.id\0sakawa.kochi.jp\0" -"q.bg\0" -"or.id\0" -"lavagis.no\0tydal.no\0" -"hachijo.tokyo.jp\0" -"gs.nl.no\0vestvagoy.no\0yekaterinburg.ru\0" -"uchihara.ibaraki.jp\0" -"trentino-aadige.it\0pesarourbino.it\0masaki.ehime.jp\0sukagawa.fukushima.jp\0" -"c.la\0" -"nt.ro\0homelinux.org\0" -"pordenone.it\0chuo.fukuoka.jp\0okegawa.saitama.jp\0" -"\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" -"voyage\0\xe5\xa4\xa7\xe6\x8b\xbf\0" -"or.it\0isumi.chiba.jp\0takehara.hiroshima.jp\0" -"cc.ne.us\0" -"soja.okayama.jp\0naruto.tokushima.jp\0" -"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"exchange\0" -"kaho.fukuoka.jp\0tosa.kochi.jp\0" -"asago.hyogo.jp\0kawatana.nagasaki.jp\0sex.pl\0kred\0" -"or.jp\0zip\0" -"sapo\0" -"honjyo.akita.jp\0" -"skaun.no\0knowsitall.info\0" -"stuttgart.museum\0\xc3\xb8rsta.no\0k12.tn.us\0" -"tcm.museum\0" -"kani.gifu.jp\0" -"eu.com\0" -"pp.az\0milan.it\0hikari.yamaguchi.jp\0buzz\0" -"gs.hl.no\0enterprises\0" -"miho.ibaraki.jp\0" -"codespot.com\0" -"milano.it\0" -"perso.ht\0" -"kunstsammlung.museum\0od.ua\0" -"oyama.tochigi.jp\0or.kr\0" -"estate.museum\0" -"cc.gu.us\0" -"web.lk\0" -"balsan.it\0vi.it\0shikaoi.hokkaido.jp\0" -"quebec.museum\0" -"sarl\0" -"moriguchi.osaka.jp\0" -"leikanger.no\0safety\0\xe6\x96\xb0\xe9\x97\xbb\0" -"hangout\0" -"yamashina.kyoto.jp\0yoshida.saitama.jp\0" -"research.aero\0" -"x.bg\0from-ct.com\0" -"kimobetsu.hokkaido.jp\0" -"artdeco.museum\0levanger.no\0" -"b\xc3\xb8mlo.no\0skanland.no\0" -"pro.az\0" -"or.na\0" -"kanie.aichi.jp\0" -"web.nf\0" -"or.mu\0donetsk.ua\0" -"russia.museum\0" -"pro.br\0cr.it\0mizumaki.fukuoka.jp\0" -"*.nom.br\0hara.nagano.jp\0inami.wakayama.jp\0" -"uscountryestate.museum\0" -"pi.it\0ujiie.tochigi.jp\0" -"is-a-guru.com\0" -"creation.museum\0" -"higashishirakawa.gifu.jp\0\xe5\x85\xab\xe5\x8d\xa6\0" -"sciencesnaturelles.museum\0" -"bonn.museum\0sondre-land.no\0s\xc3\xb8r-aurdal.no\0" -"ham-radio-op.net\0" -"id.us\0" -"oki.fukuoka.jp\0" -"b\xc3\xa1hccavuotna.no\0" -"katowice.pl\0" -"\xe5\xa4\xa7\xe5\x88\x86.jp\0takayama.nagano.jp\0nishinoshima.shimane.jp\0nyc.mn\0" -"folkebibl.no\0vladivostok.ru\0" -"halden.no\0" -"ninohe.iwate.jp\0" -"\xe6\x95\x99\xe8\x82\xb2.hk\0" -"ebiz.tw\0" -"gujo.gifu.jp\0rebun.hokkaido.jp\0dentist\0" -"lindesnes.no\0" -"s\xc3\xb8ndre-land.no\0" -"tamamura.gunma.jp\0akashi.hyogo.jp\0toda.saitama.jp\0" -"pro.ec\0web.pk\0blackfriday\0" -"zara\0" -"for-the.biz\0" -"vadso.no\0" -"chocolate.museum\0c.se\0" -"chikuhoku.nagano.jp\0" -"or.pw\0" -"e164.arpa\0tushu\0" -"komono.mie.jp\0" -"ok.us\0is-a-photographer.com\0" -"nuernberg.museum\0is-slick.com\0" -"\xe4\xba\xac\xe9\x83\xbd.jp\0tonosho.kagawa.jp\0" -"k12.ec\0" -"mikasa.hokkaido.jp\0" -"tom.ru\0viva\0" -"a\xc3\xa9roport.ci\0" -"umb.it\0iwafune.tochigi.jp\0mazowsze.pl\0\xd1\x83\xd0\xba\xd1\x80\0" -"bel.tr\0" -"rakkestad.no\0" -"bievat.no\0" -"saxo\0" -"fuefuki.yamanashi.jp\0" -"research.museum\0" -"ragusa.it\0nadex\0" -"jar.ru\0" -"busan.kr\0" -"rovno.ua\0" -"pilot.aero\0" -"dell-ogliastra.it\0" -"space.museum\0" -"asakuchi.okayama.jp\0" -"kafjord.no\0" -"sakado.saitama.jp\0" -"k12.ut.us\0" -"matsushima.miyagi.jp\0" -"or.th\0web.tj\0" -"communication.museum\0naturalsciences.museum\0" -"pro.ht\0rawa-maz.pl\0" -"ashiya.hyogo.jp\0" -"udmurtia.ru\0ck.ua\0" -"eastcoast.museum\0gs.va.no\0motorcycles\0praxi\0" -"web.tr\0" -"cechire.com\0" -"choshi.chiba.jp\0" -"avellino.it\0kuchinotsu.nagasaki.jp\0" -"or.ug\0" -"or.tz\0" -"ap-southeast-2.compute.amazonaws.com\0" -"kusatsu.gunma.jp\0okawa.kochi.jp\0yamaga.kumamoto.jp\0hikone.shiga.jp\0" -"selfip.info\0" -"urausu.hokkaido.jp\0taki.mie.jp\0" -"essex.museum\0" -"group\0" -"or.us\0web.ve\0" -"tama.tokyo.jp\0" -"l\xc3\xb8""dingen.no\0today\0likescandy.com\0" -"iizuka.fukuoka.jp\0" -"\xe4\xb8\xad\xe4\xbf\xa1\0" -"takamori.kumamoto.jp\0" -"kibichuo.okayama.jp\0" -"kristiansund.no\0" -"dallas.museum\0diamonds\0" -"daegu.kr\0" -"svalbard.no\0" -"rocher\0" -"chonan.chiba.jp\0" -"evenassi.no\0" -"cinema.museum\0bardu.no\0" -"midori.chiba.jp\0starostwo.gov.pl\0" -"balestrand.no\0" -"homeunix.net\0" -"forsand.no\0" -"\xe3\x82\xb3\xe3\x83\xa0\0" -"steiermark.museum\0" -"kamiizumi.saitama.jp\0fukumitsu.toyama.jp\0" -"from-ar.com\0" -"gosen.niigata.jp\0" -"s\xc3\xb8gne.no\0chernivtsi.ua\0vi.us\0" -"takahama.aichi.jp\0kamiichi.toyama.jp\0" -"memorial.museum\0k12.va.us\0" -"hitachiota.ibaraki.jp\0taiwa.miyagi.jp\0" -"odo.br\0minamiuonuma.niigata.jp\0\xe5\x85\xac\xe5\x8f\xb8\0" -"shimada.shizuoka.jp\0" -"mobi\0oyer.no\0cr.ua\0" -"\xe6\xb2\x96\xe7\xb8\x84.jp\0" -"pro.na\0b\xc3\xa1hcavuotna.no\0\xd7\xa7\xd7\x95\xd7\x9d\0" -"ogano.saitama.jp\0" -"\xe6\xb8\xb8\xe6\x88\x8f\0" -"pro.mv\0" -"environmentalconservation.museum\0" -"takatsuki.shiga.jp\0" -"www.ro\0" -"furukawa.miyagi.jp\0" -"balat.no\0cc.va.us\0" -"h\xc3\xb8ylandet.no\0schule\0" -"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0" -"aostavalley.it\0ferrara.it\0kashiwazaki.niigata.jp\0" -"consulting.aero\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" -"k12.ct.us\0" -"forli-cesena.it\0warszawa.pl\0" -"media.aero\0moda\0" -"kuki.saitama.jp\0" -"b\xc3\xa1jddar.no\0vikna.no\0k12.pa.us\0" -"pro.om\0boutique\0" -"katsuragi.wakayama.jp\0" -"esashi.hokkaido.jp\0urakawa.hokkaido.jp\0hamatama.saga.jp\0" -"kg.kr\0" -"appspot.com\0" -"mashiko.tochigi.jp\0" -"kuban.ru\0" -"kawanehon.shizuoka.jp\0" -"africa\0" -"suldal.no\0pp.ru\0pp.se\0cc.pa.us\0" -"modena.it\0" -"krym.ua\0" -"pro.pr\0" -"goshiki.hyogo.jp\0" -"sasebo.nagasaki.jp\0" -"marine.ru\0" -"nanporo.hokkaido.jp\0" -"sa.gov.au\0frogn.no\0is-a-cpa.com\0" -"vaksdal.no\0" -"tomiya.miyagi.jp\0" -"orskog.no\0" -"\xe5\x9f\xbc\xe7\x8e\x89.jp\0" -"missile.museum\0theater.museum\0" -"nanto.toyama.jp\0jeonbuk.kr\0" -"unj\xc3\xa1rga.no\0" -"crotone.it\0" -"2000.hu\0\xe7\x8f\xa0\xe5\xae\x9d\0" -"pp.ua\0" -"broker\0" -"kui.hiroshima.jp\0" -"aerobatic.aero\0x.se\0lugansk.ua\0" -"perso.sn\0" -"palace.museum\0hob\xc3\xb8l.no\0plo.ps\0" -"agriculture.museum\0" -"nozawaonsen.nagano.jp\0mitsuke.niigata.jp\0parliament.nz\0" -"hattfjelldal.no\0" -"jeonnam.kr\0mielec.pl\0" -"wallonie.museum\0" -"shimabara.nagasaki.jp\0" -"higashimurayama.tokyo.jp\0" -"k12.pr.us\0works\0" -"sado.niigata.jp\0world\0" -"eid.no\0" -"nishiwaki.hyogo.jp\0minamisanriku.miyagi.jp\0perso.tn\0" -"hanamigawa.chiba.jp\0" -"mikawa.yamagata.jp\0" -"odesa.ua\0" -"obuse.nagano.jp\0" -"from-md.com\0" -"en.it\0koga.ibaraki.jp\0" -"lincoln.museum\0aure.no\0gildeskal.no\0belgorod.ru\0" -"pro.tt\0" -"sibenik.museum\0" -"re.it\0" -"storage\0" -"kinokawa.wakayama.jp\0" -"sci.eg\0" -"manchester.museum\0" -"rs.ba\0" -"4.bg\0" -"k12.tr\0" -"minamioguni.kumamoto.jp\0" -"pro.vn\0chat\0dyndns.tv\0" -"dp.ua\0" -"nom.ad\0" -"nom.ag\0fed.us\0" -"kanna.gunma.jp\0inabe.mie.jp\0izumi.osaka.jp\0re.kr\0" -"dielddanuorri.no\0" -"le.it\0" -"firm.ht\0" -"modalen.no\0" -"hitachiomiya.ibaraki.jp\0taishi.osaka.jp\0" -"kin.okinawa.jp\0" -"windows\0" +"imari.saga.jp\0edu.mt\0" +"edu.mv\0med.om\0" +"edu.mw\0edu.ng\0" +"edu.mx\0amot.no\0" +"lom.it\0edu.my\0edu.ni\0" +"hiji.oita.jp\0edu.mz\0med.pa\0" +"goto.nagasaki.jp\0freebox-os.fr\0" +"yamazoe.nara.jp\0" +"\xe5\xa4\xa9\xe4\xb8\xbb\xe6\x95\x99\0" +"nesoddtangen.no\0edu.nr\0\xe4\xb8\xad\xe4\xbf\xa1\0" +"amakusa.kumamoto.jp\0" +"ryazan.ru\0tech\0med.pl\0" +"arai.shizuoka.jp\0\xe0\xa4\xa8\xe0\xa5\x87\xe0\xa4\x9f\0" +"isa.us\0" +"edu.om\0" +"donostia.museum\0" +"go.id\0" +"edu.pa\0edeka\0" +"construction\0" "sc.cn\0" -"k12.vi\0" -"qld.gov.au\0lib.al.us\0" -"firm.in\0yashiro.hyogo.jp\0" -"manno.kagawa.jp\0" -"\xe9\xa4\x90\xe5\x8e\x85\0" -"kuroiso.tochigi.jp\0" -"abogado\0" -"okinawa\0kicks-ass.org\0" -"ford\0" -"bellevue.museum\0" -"shizuoka.jp\0" -"misaki.osaka.jp\0" -"fe.it\0karuizawa.nagano.jp\0" -"wa.edu.au\0nom.co\0dyndns.ws\0" -"miyako.fukuoka.jp\0earth\0" -"film.hu\0" -"takahashi.okayama.jp\0" -"suita.osaka.jp\0" -"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0toyota.yamaguchi.jp\0" -"firm.co\0" -"xz.cn\0sakae.nagano.jp\0" -"fareast.ru\0is-a-soxfan.org\0" -"la-spezia.it\0tempio-olbia.it\0" -"radoy.no\0" -"shimofusa.chiba.jp\0" -"issmarterthanyou.com\0" -"okuma.fukushima.jp\0" -"is-an-entertainer.com\0" -"ustka.pl\0" -"nexus\0" -"is-into-anime.com\0" -"kadogawa.miyazaki.jp\0" -"gc.ca\0mj\xc3\xb8ndalen.no\0holmestrand.no\0divttasvuotna.no\0" -"art.br\0puglia.it\0maniwa.okayama.jp\0" -"workinggroup.aero\0" -"yoshimi.saitama.jp\0" -"channel\0" -"ac.ae\0" -"nom.es\0" -"storfjord.no\0" -"owariasahi.aichi.jp\0hotmail\0" -"astronomy.museum\0" -"losangeles.museum\0" -"trentino-sud-tirol.it\0" -"ac.at\0" -"ac.be\0crafts.museum\0" -"nom.fr\0rishirifuji.hokkaido.jp\0kamikawa.saitama.jp\0" -"kouhoku.saga.jp\0akiruno.tokyo.jp\0" -"art.do\0pubol.museum\0" -"not.br\0vallee-aoste.it\0" -"hanggliding.aero\0" -"ravenna.it\0" -"katsuyama.fukui.jp\0kitahata.saga.jp\0" -"builders\0" -"art.dz\0" -"ac.ci\0" -"choyo.kumamoto.jp\0" -"ac.cn\0kawajima.saitama.jp\0" -"shimoichi.nara.jp\0global.ssl.fastly.net\0" -"rl.no\0" -"ac.cr\0za.bz\0" -"tobe.ehime.jp\0" -"scor\0" -"leasing.aero\0presse.km\0" -"scot\0" -"makurazaki.kagoshima.jp\0tome.miyagi.jp\0" -"andriatranibarletta.it\0" -"takarazuka.hyogo.jp\0" -"air.museum\0" -"kanra.gunma.jp\0" -"sumoto.kumamoto.jp\0" +"ha.cn\0shibecha.hokkaido.jp\0edu.pe\0" +"cody.museum\0palace.museum\0edu.pf\0lt.ua\0cc.tx.us\0\xd9\x85\xd8\xb5\xd8\xb1\0reit\0" +"topology.museum\0edu.ph\0" +"serveftp.com\0" +"edu.pk\0" +"edu.pl\0" +"sa.it\0academy.museum\0edu.pn\0rnd.ru\0" +"go.it\0nakatsugawa.gifu.jp\0" +"av.it\0edu.qa\0" +"vet.br\0edu.pr\0" +"edu.ps\0" +"eigersund.no\0edu.pt\0" +"firm.nf\0art.pl\0" +"wv.us\0ng.eu.org\0" +"shacknet.nu\0" +"md.us\0" +"edu.py\0" +"med.sa\0ar.us\0" +"pisa.it\0tr.eu.org\0" +"go.jp\0" +"med.sd\0" +"*.ext.githubcloud.com\0" +"bihoro.hokkaido.jp\0" +"potager.org\0" +"tattoo\0you\0" +"reggio-emilia.it\0" +"mg.leg.br\0" +"kawagoe.saitama.jp\0us-2.evennode.com\0" +"samsclub\0is-saved.org\0" +"shinanomachi.nagano.jp\0" +"club.tw\0" +"go.kr\0" +"artcenter.museum\0komforb.se\0news\0" +"whaling.museum\0edu.sa\0" +"edu.sb\0" +"edu.rs\0edu.sc\0" +"lom.no\0edu.sd\0" +"edu.ru\0" +"info.ht\0sannan.hyogo.jp\0edu.rw\0edu.sg\0" +"info.hu\0" +"edu.sl\0" +"edu.sn\0" "ambulance.museum\0" -"motorcycle.museum\0isteingeek.de\0" -"sc.kr\0" +"kanra.gunma.jp\0academy\0next\0" +"kokubunji.tokyo.jp\0" +"nfshost.com\0" +"kushiro.hokkaido.jp\0edu.st\0" +"edu.sv\0toshiba\0" +"info.et\0bd.se\0art.sn\0" +"from-pa.com\0" +"voronezh.ru\0edu.sy\0" +"edu.tj\0" +"kaneyama.yamagata.jp\0meraker.no\0game.tw\0" +"swiss\0" +"gs.oslo.no\0edu.tm\0" +"aoki.nagano.jp\0ikoma.nara.jp\0" +"edu.to\0" +"joyo.kyoto.jp\0edu.ua\0" +"newyork.museum\0edu.tr\0" +"edu.tt\0is-a-hard-worker.com\0" +"samegawa.fukushima.jp\0" +"narvik.no\0rent\0" +"soc.lk\0edu.tw\0" +"lib.ar.us\0webcam\0" +"sola.no\0" +"flekkefjord.no\0" +"gs.cn\0" +"bj.cn\0lv.ua\0" +"ketrzyn.pl\0cc.pa.us\0" +"hitoyoshi.kumamoto.jp\0edu.vc\0" +"edu.ve\0" +"ilawa.pl\0" +"tabayama.yamanashi.jp\0us-1.evennode.com\0" +"edu.uy\0" +"kumejima.okinawa.jp\0from-co.net\0" +"bilbao.museum\0alfaromeo\0" +"edu.vn\0" +"kashima.ibaraki.jp\0agrinet.tn\0expert\0" +"settsu.osaka.jp\0" +"bus.museum\0h\xc3\xb8ylandet.no\0" +"video\0" +"pro.az\0" +"kawanehon.shizuoka.jp\0edu.vu\0" +"info.ec\0firenze.it\0murakami.niigata.jp\0" +"nord-aurdal.no\0" +"yachimata.chiba.jp\0" +"pro.br\0" +"yun\0elb.amazonaws.com\0" +"chrome\0istmein.de\0" +"itano.tokushima.jp\0mycd.eu\0" +"go.pw\0edu.ws\0" +"info.bb\0yamada.iwate.jp\0tawaramoto.nara.jp\0lgbt\0" +"partners\0" +"sc.kr\0balsfjord.no\0info.at\0" +"info.au\0" +"fairwinds\0" +"beskidy.pl\0creditcard\0" +"shingo.aomori.jp\0ouda.nara.jp\0" +"info.az\0" +"servemp3.com\0" +"axis.museum\0lplfinancial\0" +"sor-aurdal.no\0" +"aosta-valley.it\0fujiidera.osaka.jp\0" +"pro.cy\0pescara.it\0hiranai.aomori.jp\0" +"sagamihara.kanagawa.jp\0" +"gjemnes.no\0" +"asakuchi.okayama.jp\0heritage.museum\0weber\0" +"pro.ec\0venezia.it\0oguni.yamagata.jp\0" +"kobayashi.miyazaki.jp\0" +"kagawa.jp\0nango.fukushima.jp\0" +"edu.za\0marriott\0" +"info.co\0bill.museum\0fet.no\0\xe5\x9c\xa8\xe7\xba\xbf\0" +"culture.museum\0nissedal.no\0" +"olawa.pl\0rest\0" +"bajddar.no\0" "journal.aero\0" -"wiki.br\0mc.it\0kusu.oita.jp\0" -"cloudcontrolapp.com\0" -"inami.toyama.jp\0" -"presse.ml\0" -"broke-it.net\0" -"assn.lk\0montreal.museum\0" -"egyptian.museum\0" -"legal\0" -"nom.km\0its.me\0" -"art.ht\0" -"kotoura.tottori.jp\0" -"lutsk.ua\0" -"chino.nagano.jp\0" -"mitou.yamaguchi.jp\0" -"ujitawara.kyoto.jp\0yomitan.okinawa.jp\0" -"rieti.it\0sera.hiroshima.jp\0joetsu.niigata.jp\0" -"unjarga.no\0" -"ac.gn\0watch\0" -"nishihara.okinawa.jp\0*.platform.sh\0" -"beauxarts.museum\0" -"kviteseid.no\0rissa.no\0" -"toei.aichi.jp\0" -"nom.mg\0" -"piedmont.it\0" -"kongsberg.no\0" -"kunstunddesign.museum\0flakstad.no\0rennebu.no\0" -"campobasso.it\0nowaruda.pl\0gdansk.pl\0" -"lib.hi.us\0" -"events\0" -"ac.id\0" -"touch.museum\0narviika.no\0" -"kamitsue.oita.jp\0" +"evenassi.no\0" +"katano.osaka.jp\0" +"penza.ru\0edu.zm\0" +"kosaka.akita.jp\0" +"s3-ap-southeast-2.amazonaws.com\0" +"tome.miyagi.jp\0higashiyodogawa.osaka.jp\0on-the-web.tv\0" +"go.th\0" +"omachi.nagano.jp\0katowice.pl\0lib.hi.us\0isa-hockeynut.com\0" +"ha.no\0go.tj\0" +"verm\xc3\xb6gensberatung\0" +"he.cn\0savannahga.museum\0" +"kashima.kumamoto.jp\0penza.su\0" +"is-a-chef.org\0" +"av.tr\0solar\0zip\0" +"kainan.wakayama.jp\0" +"yamada.fukuoka.jp\0go.ug\0\xe5\xa8\xb1\xe4\xb9\x90\0" +"oseto.nagasaki.jp\0coastaldefence.museum\0" +"go.tz\0" +"kadogawa.miyazaki.jp\0lease\0" +"safety\0" +"mielec.pl\0" +"katashina.gunma.jp\0" +"sortland.no\0" +"qsl.br\0" +"\xe5\xa4\xa7\xe9\x98\xaa.jp\0indiana.museum\0" +"seika.kyoto.jp\0workshop.museum\0gallup\0" +"linz.museum\0financial\0" +"pro.ht\0" +"surf\0" +"konin.pl\0" +"joetsu.niigata.jp\0" +"l\xc3\xa6rdal.no\0" +"shingu.fukuoka.jp\0miyama.mie.jp\0" +"yoita.niigata.jp\0" +"ind.br\0" +"sicily.it\0miyazaki.jp\0kawazu.shizuoka.jp\0\xe5\x95\x86\xe6\xa5\xad.tw\0" +"ic.gov.pl\0za.net\0" +"tondabayashi.osaka.jp\0astronomy.museum\0hgtv\0" +"agrar.hu\0suginami.tokyo.jp\0rentals\0" +"kariya.aichi.jp\0usgarden.museum\0\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" +"asn.au\0" +"fujinomiya.shizuoka.jp\0" +"isa.kagoshima.jp\0muenster.museum\0" +"mp.br\0mashike.hokkaido.jp\0" +"!city.kawasaki.jp\0" +"townnews-staging.com\0" +"novosibirsk.ru\0" +"kunisaki.oita.jp\0from-sd.com\0" +"ris\xc3\xb8r.no\0sanok.pl\0nikolaev.ua\0is-a-chef.com\0" +"sandnessj\xc3\xb8""en.no\0" +"rikuzentakata.iwate.jp\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0" +"shinyoshitomi.fukuoka.jp\0\xeb\x8b\xb7\xeb\x84\xb7\0" +"sc.ug\0" +"zhytomyr.ua\0" +"abo.pa\0teva\0cloudns.asia\0" +"sc.tz\0" +"mn.it\0urausu.hokkaido.jp\0ee.eu.org\0" +"nanae.hokkaido.jp\0" +"bl.it\0pilots.museum\0zakopane.pl\0" +"minato.tokyo.jp\0database.museum\0" +"ohkura.yamagata.jp\0jessheim.no\0" +"sc.us\0" +"pro.na\0" +"pro.mv\0" +"psc.br\0tamayu.shimane.jp\0j\xc3\xb8lster.no\0" +"ivano-frankivsk.ua\0" +"motorcycles\0" +"eu.meteorapp.com\0cable-modem.org\0" +"muika.niigata.jp\0" +"sener\0" +"com.ac\0kami.kochi.jp\0leangaviika.no\0" +"oppeg\xc3\xa5rd.no\0uk.eu.org\0" +"com.af\0otsuka\0" +"com.ag\0nakamichi.yamanashi.jp\0" +"ind.gt\0" +"com.ai\0bike\0" +"com.al\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0kiyosu.aichi.jp\0karatsu.saga.jp\0" +"nishio.aichi.jp\0" +"com.ba\0inf.br\0sirdal.no\0pro.om\0" +"com.ar\0com.bb\0info.ve\0" +"diet\0" +"com.au\0k12.or.us\0" +"com.aw\0" +"com.bh\0\xe7\xa6\x8f\xe4\xba\x95.jp\0minokamo.gifu.jp\0tver.ru\0" +"com.bi\0from-ky.com\0freeboxos.fr\0" +"com.az\0" +"info.vn\0" +"mining.museum\0vevelstad.no\0" +"com.bm\0" +"com.bo\0family.museum\0shangrila\0int.eu.org\0" +"fla.no\0" +"com.br\0ind.in\0" +"com.bs\0" +"com.bt\0inf.cu\0lavagis.no\0" +"kawai.iwate.jp\0" +"pro.pr\0" +"klodzko.pl\0" +"\xe5\x85\xac\xe5\x8f\xb8.cn\0saigawa.fukuoka.jp\0kawatana.nagasaki.jp\0on-aptible.com\0" +"com.by\0com.ci\0s3-fips-us-gov-west-1.amazonaws.com\0" +"com.bz\0" +"tanabe.kyoto.jp\0" +"sk.ca\0winb.gov.pl\0" +"nb.ca\0com.cm\0" +"com.cn\0fiat\0" +"com.co\0" +"higashiizu.shizuoka.jp\0" +"larsson.museum\0" +"lib.sc.us\0" +"br\xc3\xb8nn\xc3\xb8ysund.no\0lib.nj.us\0" +"com.cu\0\xe5\x85\xac\xe5\x8f\xb8.hk\0hapmir.no\0lib.gu.us\0com.de\0" +"is-a-rockstar.com\0" +"com.cw\0aca.pro\0" +"com.cy\0" +"carraramassa.it\0" +"hi.cn\0oiso.kanagawa.jp\0info.tn\0bing\0" +"com.dm\0" +"com.do\0info.tr\0" +"rad\xc3\xb8y.no\0" +"info.tt\0" +"com.ec\0" +"si.it\0" +"com.ee\0" +"verbania.it\0" +"com.eg\0bn.it\0info.tz\0" +"com.dz\0kamigori.hyogo.jp\0" +"yamatsuri.fukushima.jp\0" +"pharmaciens.km\0portland.museum\0" +"michigan.museum\0" +"az.us\0" +"is-a-linux-user.org\0" +"com.es\0couchpotatofries.org\0" +"com.et\0" +"voyage\0" +"finn\xc3\xb8y.no\0" +"kumenan.okayama.jp\0fido\0" +"aomori.jp\0" +"info.ro\0" +"minamiashigara.kanagawa.jp\0" +"info.sd\0" +"com.fr\0kasai.hyogo.jp\0ski.museum\0" +"leg.br\0com.ge\0" +"com.gh\0pro.tt\0" +"com.gi\0" +"targi.pl\0" +"elvendrell.museum\0" +"com.gl\0" +"com.gn\0tingvoll.no\0nationwide\0sakura\0\xe5\x95\x86\xe5\xba\x97\0" +"com.gp\0matsusaka.mie.jp\0asn.lv\0stcgroup\0" +"com.gr\0" +"com.gt\0" +"tonsberg.no\0" +"namie.fukushima.jp\0info.pk\0" +"com.gy\0info.pl\0bounty-full.com\0" +"com.hk\0southcarolina.museum\0" +"media.aero\0bjarkoy.no\0folldal.no\0forex\0" +"vadso.no\0" +"com.hn\0daejeon.kr\0" +"info.pr\0" +"myfritz.net\0" +"okazaki.aichi.jp\0" +"com.hr\0pro.vn\0" +"com.ht\0" +"urbino-pesaro.it\0" +"\xe5\xae\xae\xe5\xb4\x8e.jp\0" +"shijonawate.osaka.jp\0saitama.saitama.jp\0\xe5\x98\x89\xe9\x87\x8c\0" +"magazine.aero\0duckdns.org\0" +"com.im\0choshi.chiba.jp\0mosvik.no\0" +"info.na\0rana.no\0" +"com.io\0mashiki.kumamoto.jp\0lib.nh.us\0azurewebsites.net\0" +"com.iq\0" +"com.is\0info.mv\0info.nf\0career\0" +"schlesisches.museum\0" +"urn.arpa\0uw.gov.pl\0" +"hk.cn\0info.ni\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0theguardian\0" +"odawara.kanagawa.jp\0" +"\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0statebank\0" +"jaguar\0weather\0" +"hole.no\0warman\0" +"com.jo\0info.nr\0" +"vodka\0" +"sande.more-og-romsdal.no\0apple\0" +"kvits\xc3\xb8y.no\0" +"higashihiroshima.hiroshima.jp\0sauda.no\0" +"yoshikawa.saitama.jp\0com.kg\0" +"humanities.museum\0ask\xc3\xb8y.no\0" +"com.ki\0mn.us\0" +"gu.us\0" +"plc.co.im\0com.km\0" +"info.la\0" +"design.museum\0" +"com.kp\0" +"com.la\0" +"ono.hyogo.jp\0com.lb\0oregontrail.museum\0" +"\xe4\xba\xac\xe9\x83\xbd.jp\0com.lc\0" +"takayama.gunma.jp\0cyou\0bnr.la\0" +"ebina.kanagawa.jp\0kawachinagano.osaka.jp\0" +"gotpantheon.com\0" +"takata.fukuoka.jp\0tarama.okinawa.jp\0" +"com.ky\0" +"com.kz\0inf.mk\0" +"com.lk\0" +"kisarazu.chiba.jp\0" +"com.lr\0" +"marylhurst.museum\0" +"com.lv\0from-ia.com\0" +"piedmont.it\0goshiki.hyogo.jp\0com.mg\0zero\0" +"mizusawa.iwate.jp\0" +"com.ly\0" +"com.mk\0" +"com.ml\0sandoy.no\0" +"atlanta.museum\0george\0" +"imperia.it\0com.mo\0" +"com.na\0" +"ind.tn\0" +"com.ms\0is-very-sweet.org\0" +"com.mt\0" +"com.mu\0" +"naka.ibaraki.jp\0com.mv\0com.nf\0" +"giessen.museum\0com.mw\0com.ng\0film\0" +"com.mx\0" +"vic.edu.au\0com.my\0com.ni\0sa-east-1.compute.amazonaws.com\0" +"hakui.ishikawa.jp\0" +"chikujo.fukuoka.jp\0" +"okuizumo.shimane.jp\0" +"kota.aichi.jp\0" +"com.nr\0" +"nf.ca\0" +"kids.museum\0" +"fukagawa.hokkaido.jp\0" +"info.ki\0" +"dish\0" +"tana.no\0" +"mr.no\0" +"kerryproperties\0" +"com.om\0" +"hiphop\0" +"com.pa\0" +"cc.ut.us\0" +"sdn.gov.pl\0" +"com.pe\0" +"com.pf\0" +"com.ph\0" +"gs.vf.no\0" +"showtime\0" +"mt.it\0makinohara.shizuoka.jp\0com.pk\0" +"nishikata.tochigi.jp\0com.pl\0" +"br.it\0cb.it\0" +"numata.hokkaido.jp\0" +"com.qa\0rubtsovsk.ru\0" +"com.pr\0" +"zgora.pl\0com.ps\0s3-external-2.amazonaws.com\0" +"com.pt\0certmgr.org\0" +"etajima.hiroshima.jp\0" +"com.py\0" +"cn.eu.org\0" +"mobi.gp\0" +"ichikawa.hyogo.jp\0uchihara.ibaraki.jp\0" +"psi.br\0nittedal.no\0" +"hayakawa.yamanashi.jp\0yorkshire.museum\0" +"valleeaoste.it\0" +"\xe5\xba\x83\xe5\xb3\xb6.jp\0tanabe.wakayama.jp\0com.re\0chloe\0" +"balashov.su\0loans\0" +"selbu.no\0" +"niigata.niigata.jp\0" +"paris.museum\0vantaa.museum\0" +"kembuchi.hokkaido.jp\0" +"com.ro\0" +"com.sa\0poltava.ua\0mymediapc.net\0" +"com.sb\0" +"trentino-sud-tirol.it\0com.sc\0" +"com.sd\0" +"pmn.it\0com.ru\0com.se\0" +"com.rw\0com.sg\0homes\0" +"com.sh\0" +"naie.hokkaido.jp\0" +"fussa.tokyo.jp\0" +"com.sl\0" +"com.sn\0" +"com.so\0fire\0servegame.com\0" +"leclerc\0" +"holmestrand.no\0dedyn.io\0" +"com.st\0" +"com.sv\0" +"bio.br\0ternopil.ua\0" +"githubcloud.com\0" +"com.sy\0" +"trentino-alto-adige.it\0com.tj\0" +"blockbuster\0" +"com.tm\0" +"com.tn\0\xe7\xbd\x91\xe5\x9d\x80\0" +"joboji.iwate.jp\0com.to\0" +"handson.museum\0society.museum\0com.ua\0dyndns-free.com\0" +"com.tr\0fish\0" +"miyakonojo.miyazaki.jp\0" +"nishi.fukuoka.jp\0com.tt\0" +"nichinan.tottori.jp\0lib.mt.us\0lib.nd.us\0is-a-chef.net\0" +"shimotsuma.ibaraki.jp\0kamikitayama.nara.jp\0com.tw\0com.ug\0" +"tsugaru.aomori.jp\0" +"xz.cn\0" +"vegas\0" +"kuju.oita.jp\0" +"kunohe.iwate.jp\0" +"takarazuka.hyogo.jp\0geek.nz\0" +"stv.ru\0" +"com.vc\0" +"so.it\0com.ve\0" +"anamizu.ishikawa.jp\0semine.miyagi.jp\0itoman.okinawa.jp\0" +"ama.aichi.jp\0" +"bt.it\0" +"iwanai.hokkaido.jp\0com.uy\0com.vi\0" +"kunst.museum\0com.uz\0" +"nyuzen.toyama.jp\0" +"dontexist.net\0" +"com.vn\0" +"kitaura.miyazaki.jp\0" +"hi.us\0" +"brussel.museum\0" +"austevoll.no\0" +"com.vu\0" +"oygarden.no\0" +"tomika.gifu.jp\0kumatori.osaka.jp\0lidl\0" +"chikuho.fukuoka.jp\0" +"cy.eu.org\0" +"philips\0" +"kawai.nara.jp\0" +"forum\0" +"com.ws\0" +"munakata.fukuoka.jp\0tokuyama.yamaguchi.jp\0dyr\xc3\xb8y.no\0" +"deloitte\0" +"gemological.museum\0" +"airport.aero\0" +"\xc3\xa1laheadju.no\0northwesternmutual\0" +"higashikagura.hokkaido.jp\0glade\0" +"toei.aichi.jp\0mombetsu.hokkaido.jp\0" +"press\0za.org\0" +"servegame.org\0" +"k12.vi.us\0life\0" +"shimokawa.hokkaido.jp\0ritto.shiga.jp\0" +"!city.sapporo.jp\0" +"cz.eu.org\0" +"leitungsen.de\0worse-than.tv\0" +"yokoshibahikari.chiba.jp\0miyoshi.saitama.jp\0" +"feedback\0" +"kaszuby.pl\0" +"pesaro-urbino.it\0" +"moriya.ibaraki.jp\0" +"furudono.fukushima.jp\0" +"tateyama.toyama.jp\0" +"\xe5\xb3\xb6\xe6\xa0\xb9.jp\0brandywinevalley.museum\0sogndal.no\0" +"tachikawa.tokyo.jp\0alaheadju.no\0vestvagoy.no\0" +"\xe5\xae\xb6\xe9\x9b\xbb\0" +"zentsuji.kagawa.jp\0" +"oita.jp\0\xc3\xa1lt\xc3\xa1.no\0dyndns-ip.com\0" +"workinggroup.aero\0com.zm\0" +"corvette.museum\0for-more.biz\0" +"rimini.it\0mihama.chiba.jp\0" +"hm.no\0" +"sm.ua\0\xe9\xa6\x99\xe6\xb8\xaf\0" +"ath.cx\0" +"bungotakada.oita.jp\0lutsk.ua\0dk.eu.org\0" +"hirara.okinawa.jp\0" +"media.hu\0bharti\0" +"ta.it\0ipiranga\0" +"is-slick.com\0" +"nico\0" +"marumori.miyagi.jp\0" +"arts.co\0tsuruta.aomori.jp\0lancome\0" +"gliding.aero\0inatsuki.fukuoka.jp\0" +"nome.pt\0familyds.net\0" +"naruto.tokushima.jp\0mt.us\0nd.us\0" +"kakinoki.shimane.jp\0" +"is-an-entertainer.com\0" +"port.fr\0gotdns.ch\0" +"bydgoszcz.pl\0" +"r\xc3\xb8st.no\0" +"ranzan.saitama.jp\0" +"marburg.museum\0komi.ru\0" +"wellbeingzone.co.uk\0" +"chikuzen.fukuoka.jp\0hjartdal.no\0" +"ikeda.fukui.jp\0" +"contemporaryart.museum\0" +"ostroleka.pl\0like\0" +"\xc3\xb8vre-eiker.no\0dyndns-server.com\0" +"ishikawa.fukushima.jp\0" +"um.gov.pl\0industries\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0" +"koga.fukuoka.jp\0tsukui.kanagawa.jp\0" +"sumida.tokyo.jp\0info.zm\0" +"tohma.hokkaido.jp\0shika.ishikawa.jp\0" +"ilovecollege.info\0" +"gojome.akita.jp\0tsuchiura.ibaraki.jp\0" +"shikokuchuo.ehime.jp\0" +"pulawy.pl\0" +"dr\xc3\xb8""bak.no\0muos\xc3\xa1t.no\0" +"cremona.it\0" +"de.eu.org\0" +"\xe5\x98\x89\xe9\x87\x8c\xe5\xa4\xa7\xe9\x85\x92\xe5\xba\x97\0" +"mx.na\0" +"oster\xc3\xb8y.no\0" +"nl.ca\0" +"minami.fukuoka.jp\0r\xc3\xb8yken.no\0" +"t\xc3\xb8nsberg.no\0" +"mihama.fukui.jp\0kodaira.tokyo.jp\0limo\0" +"bv.nl\0lind\xc3\xa5s.no\0" +"livorno.it\0" +"yn.cn\0" +"ascolipiceno.it\0sm\xc3\xb8la.no\0\xe6\x96\xb0\xe9\x97\xbb\0" +"is-not-certified.com\0" +"kanmaki.nara.jp\0honda\0" +"link\0" +"roma.it\0nowruz\0" +"prof.pr\0" +"dallas.museum\0" +"iron.museum\0futbol\0hk.org\0" +"ss.it\0" +"nasu.tochigi.jp\0" +"other.nf\0" +"ch.it\0sykkylven.no\0loginto.me\0" +"author\0" +"aid.pl\0pics\0" +"us.gov.pl\0kustanai.ru\0" +"nkz.ru\0" +"yaroslavl.ru\0" +"koeln\0" +"padova.it\0" +"vard\xc3\xb8.no\0" +"shiga.jp\0" +"gaular.no\0rennesoy.no\0" +"panama.museum\0" +"yonezawa.yamagata.jp\0media.pl\0ciscofreak.com\0" +"tosa.kochi.jp\0ogawa.nagano.jp\0holt\xc3\xa5len.no\0" +"itayanagi.aomori.jp\0nakamura.kochi.jp\0askvoll.no\0" +"batsfjord.no\0" +"yosemite.museum\0homeip.net\0" +"nike\0" +"tempioolbia.it\0sandvikcoromant\0" +"iwade.wakayama.jp\0" +"kaufen\0" +"shinjuku.tokyo.jp\0presidio.museum\0gloppen.no\0is-a-celticsfan.org\0" +"bahccavuotna.no\0lezajsk.pl\0" +"minamisanriku.miyagi.jp\0" +"*.sapporo.jp\0" +"tomi.nagano.jp\0" +"friuliveneziagiulia.it\0bando.ibaraki.jp\0" +"meiwa.gunma.jp\0" +"k12.fl.us\0" +"sos.pl\0gotdns.org\0" +"bashkiria.ru\0" +"troitsk.su\0" +"kuban.ru\0" +"nakhodka.ru\0" +"moriyama.shiga.jp\0motorcycle.museum\0" +"crew.aero\0" +"luster.no\0podhale.pl\0hockey\0" +"bahn.museum\0" +"tas.gov.au\0" +"izumizaki.fukushima.jp\0" +"b\xc3\xa1jddar.no\0*.magentosite.cloud\0" +"bashkiria.su\0" +"satosho.okayama.jp\0kvam.no\0discount\0" +"cosenza.it\0" +"orkanger.no\0" +"v\xc3\xa5ler.hedmark.no\0" +"tobishima.aichi.jp\0" +"vang.no\0" +"higashine.yamagata.jp\0lib.mn.us\0" +"arao.kumamoto.jp\0center.museum\0" +"doomdns.com\0" +"n\xc3\xb8tter\xc3\xb8y.no\0arts.ve\0" +"\xc3\xa5lesund.no\0mobi.tt\0pamperedchef\0" +"valleaosta.it\0" +"kunstunddesign.museum\0gdynia.pl\0" +"valer.ostfold.no\0rich\0" +"mobi.tz\0" +"te.it\0udono.mie.jp\0" +"abarth\0" +"bz.it\0" +"ca.eu.org\0" +"\xe3\x82\xb3\xe3\x83\xa0\0" +"sondrio.it\0for-some.biz\0" +"wa.gov.au\0agro.pl\0" +"hanno.saitama.jp\0asahi.toyama.jp\0" +"taka.hyogo.jp\0nh.us\0" +"noda.iwate.jp\0" +"hongo.hiroshima.jp\0omiya.saitama.jp\0\xd0\xb1\xd0\xb5\xd0\xbb\0" +"cuneo.it\0yachiyo.chiba.jp\0" +"troandin.no\0" +"is-a-cpa.com\0" +"mikasa.hokkaido.jp\0" +"\xe9\x95\xb7\xe5\xb4\x8e.jp\0smola.no\0glass\0" +"kanoya.kagoshima.jp\0" +"int.ar\0" +"tel.tr\0" +"live\0" +"mitake.gifu.jp\0" +"nakano.nagano.jp\0" +"is-a-nurse.com\0" +"int.az\0matera.it\0hs.kr\0\xc3\xb8rskog.no\0" +"yuzawa.niigata.jp\0" +"lowicz.pl\0" +"int.bo\0grondar.za\0" +"eu-2.evennode.com\0" +"volgograd.ru\0" +"mazowsze.pl\0" +"is-into-games.com\0" +"is-found.org\0" +"vossevangen.no\0" +"int.ci\0yonabaru.okinawa.jp\0" +"resistance.museum\0" +"ginan.gifu.jp\0tiaa\0" +"ayase.kanagawa.jp\0ise.mie.jp\0chichibu.saitama.jp\0athleta\0" +"int.co\0" +"langev\xc3\xa5g.no\0" +"oguni.kumamoto.jp\0" +"sec.ps\0" +"chita.aichi.jp\0" +"nakagyo.kyoto.jp\0cloudcontrolled.com\0" +"inderoy.no\0" +"monmouth.museum\0dep.no\0mazury.pl\0" +"gliwice.pl\0" +"jan-mayen.no\0arts.ro\0" +"ohira.miyagi.jp\0" +"\xe5\xa5\x88\xe8\x89\xaf.jp\0law.pro\0" +"riik.ee\0mobi.na\0volda.no\0" +"shisui.chiba.jp\0" +"kyuragi.saga.jp\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0home.dyndns.org\0" +"rotorcraft.aero\0mobi.ng\0nl.no\0" +"kasuga.hyogo.jp\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0ping\0" +"jfk.museum\0" +"vestv\xc3\xa5g\xc3\xb8y.no\0fam.pk\0healthcare\0pink\0" +"rome.it\0fukushima.hokkaido.jp\0nord-fron.no\0" +"magadan.ru\0" +"nakayama.yamagata.jp\0" +"val-daosta.it\0" +"kiyose.tokyo.jp\0" +"notodden.no\0" +"cl.it\0miami\0" +"modena.it\0" +"hitachiomiya.ibaraki.jp\0" +"kyowa.hokkaido.jp\0yakage.okayama.jp\0" +"\xe6\x96\xb0\xe6\xbd\x9f.jp\0mer\xc3\xa5ker.no\0simple-url.com\0" +"cd.eu.org\0" +"nj.us\0schwarz\0" +"ia.us\0eu-1.evennode.com\0" +"oldnavy\0" +"vladivostok.ru\0" +"barrel-of-knowledge.info\0" +"hirosaki.aomori.jp\0" +"aeroclub.aero\0navigation.aero\0" +"santafe.museum\0" +"dellogliastra.it\0\xe6\x94\xbf\xe5\xba\x9c\0" +"asnes.no\0" +"vao.it\0yugawa.fukushima.jp\0" +"chuo.osaka.jp\0arts.nf\0tokyo\0" +"ap-southeast-1.compute.amazonaws.com\0" +"notogawa.shiga.jp\0" +"tennis\0us.com\0" +"holdings\0" +"beats\0lifestyle\0" +"redumbrella\0issmarterthanyou.com\0" +"britishcolumbia.museum\0" +"maizuru.kyoto.jp\0" +"k12.va.us\0" +"encyclopedic.museum\0posts-and-telecommunications.museum\0k12.pr.us\0" +"youth.museum\0" +"barletta-trani-andria.it\0" +"kai.yamanashi.jp\0" +"riodejaneiro.museum\0" +"nyny.museum\0" +"software.aero\0yamato.kanagawa.jp\0" +"obira.hokkaido.jp\0" +"int.is\0" +"review\0" +"mishima.shizuoka.jp\0" +"aizubange.fukushima.jp\0vestby.no\0" +"akita.jp\0" +"budejju.no\0" +"hosting\0" +"kuwana.mie.jp\0" +"\xe4\xb8\x96\xe7\x95\x8c\0" +"te.ua\0" +"\xe5\xa4\xa7\xe5\x88\x86.jp\0" +"tako.chiba.jp\0moareke.no\0" +"associates\0" +"m\xc3\xa1latvuopmi.no\0windows\0" +"mail.pl\0augustow.pl\0" +"int.la\0" +"!city.kobe.jp\0" +"cn.it\0sanfrancisco.museum\0" +"sakado.saitama.jp\0s3-ap-southeast-1.amazonaws.com\0" +"principe.st\0okinawa\0" +"drive\0" +"jogasz.hu\0misato.shimane.jp\0kuroiso.tochigi.jp\0" +"int.lk\0" +"higashikagawa.kagawa.jp\0" +"groks-this.info\0" +"arkhangelsk.ru\0" +"yawatahama.ehime.jp\0" +"pa.leg.br\0" +"chigasaki.kanagawa.jp\0minami-alps.yamanashi.jp\0osoyro.no\0" +"tone.ibaraki.jp\0matsuda.kanagawa.jp\0tenri.nara.jp\0" +"nogata.fukuoka.jp\0" +"omachi.saga.jp\0\xc3\xb8rsta.no\0" +"lucca.it\0yanaizu.fukushima.jp\0" +"africa.com\0" +"wakuya.miyagi.jp\0" +"arkhangelsk.su\0" +"eurovision\0" +"manx.museum\0askim.no\0" +"sakegawa.yamagata.jp\0" +"int.mv\0b\xc3\xa1hccavuotna.no\0" +"int.mw\0" +"int.ni\0" +"sakaki.nagano.jp\0nakano.tokyo.jp\0" +"blog\0" +"tinn.no\0ostroda.pl\0mydrobo.com\0" +"pb.leg.br\0" +"gonohe.aomori.jp\0starostwo.gov.pl\0edu.krd\0" +"marugame.kagawa.jp\0" +"nt.au\0" +"sekigahara.gifu.jp\0" +"plaza.museum\0" +"leasing.aero\0tjeldsund.no\0" +"sunagawa.hokkaido.jp\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0from-nh.com\0" +"nt.ca\0" +"bellevue.museum\0" +"lib.oh.us\0" +"tysfjord.no\0" +"otsuki.kochi.jp\0co.krd\0" +"k12.ec\0porsangu.no\0" +"yukuhashi.fukuoka.jp\0" +"int.pt\0" +"soundandvision.museum\0nesna.no\0" +"read-books.org\0" +"khmelnitskiy.ua\0" +"br\xc3\xb8nn\xc3\xb8y.no\0" +"tm.cy\0fedje.no\0" +"monzabrianza.it\0" +"ami.ibaraki.jp\0marker.no\0cloudfront.net\0" +"naganohara.gunma.jp\0forsand.no\0" +"\xe6\xbe\xb3\xe9\x96\x80\0volkswagen\0" +"tosu.saga.jp\0raisa.no\0yokohama\0" +"aip.ee\0" +"foggia.it\0" +"takinoue.hokkaido.jp\0realm.cz\0" +"coldwar.museum\0lancaster\0" +"wassamu.hokkaido.jp\0ro.eu.org\0" +"tomari.hokkaido.jp\0locus\0" +"stjordal.no\0" +"aga.niigata.jp\0americanart.museum\0" +"campobasso.it\0shimoda.shizuoka.jp\0" +"adult\0pharmacy\0" +"telekommunikation.museum\0" +"ac\0kopervik.no\0" +"ad\0witd.gov.pl\0int.ru\0" +"ae\0" +"af\0mytis.ru\0int.rw\0abudhabi\0" +"ag\0" +"ai\0raholt.no\0" +"oshima.yamaguchi.jp\0" +"al\0" +"am\0latino\0tips\0" +"reklam.hu\0jewish.museum\0rakkestad.no\0" +"ao\0higashimatsushima.miyagi.jp\0\xe5\xa4\xa7\xe6\x8b\xbf\0elasticbeanstalk.com\0" +"aq\0ba\0chernivtsi.ua\0blogsite.org\0from-id.com\0" +"ar\0bb\0jobs.tt\0" +"as\0tm.fr\0yamagata.yamagata.jp\0dontexist.org\0" +"at\0obanazawa.yamagata.jp\0" +"air-surveillance.aero\0au\0be\0" +"bf\0" +"aw\0bg\0carrara-massa.it\0" +"ax\0bh\0" +"bi\0heroy.more-og-romsdal.no\0int.tj\0" +"az\0bj\0myftp.org\0" +"aogaki.hyogo.jp\0blue\0" +"bm\0" +"kawamata.fukushima.jp\0aurskog-h\xc3\xb8land.no\0scholarships\0" +"bo\0romskog.no\0flir\0" +"honbetsu.hokkaido.jp\0" +"ca\0pors\xc3\xa1\xc5\x8bgu.no\0" +"br\0" +"bs\0cc\0idf.il\0int.tt\0" +"bt\0cd\0" +"bv\0cf\0" +"bw\0cg\0k12.il\0" +"ch\0" +"by\0ci\0" +"bz\0" +"hangout\0moscow\0" +"cl\0" +"cm\0aostavalley.it\0prudential\0" +"cn\0oirase.aomori.jp\0" +"co\0\xc3\xa5mli.no\0" +"chikugo.fukuoka.jp\0" +"cr\0yaizu.shizuoka.jp\0" +"int.ve\0" +"cu\0de\0shiraoi.hokkaido.jp\0iruma.saitama.jp\0lib.nv.us\0" +"of.by\0cv\0tm.hu\0teshikaga.hokkaido.jp\0lib.ia.us\0lawyer\0university\0" +"cw\0yamaga.kumamoto.jp\0" +"b.bg\0cx\0si.eu.org\0" +"cz\0dj\0" +"dk\0" +"dm\0cc.vt.us\0int.vn\0" +"furano.hokkaido.jp\0" +"do\0cn.ua\0" +"consultant.aero\0kasama.ibaraki.jp\0" +"lecce.it\0frana.no\0" +"\xe9\x9b\xbb\xe8\xa8\x8a\xe7\x9b\x88\xe7\xa7\x91\0" +"b.br\0ec\0" +"ee\0" +"higashitsuno.kochi.jp\0" +"eg\0s3-ap-northeast-1.amazonaws.com\0" +"cr.it\0defense.tn\0" +"dz\0" +"tokoname.aichi.jp\0" +"cargo.aero\0frankfurt.museum\0" +"yamakita.kanagawa.jp\0" +"es\0yakutia.ru\0" +"et\0torino.it\0" +"eu\0noshiro.akita.jp\0" +"fr\xc3\xb8ya.no\0\xe6\xbe\xb3\xe9\x97\xa8\0" +"fi\0" +"fm\0" +"tm.km\0" +"fo\0" +"blogdns.org\0" +"ga\0for-better.biz\0" +"fr\0gb\0iinet\0is-a-democrat.com\0" +"kurate.fukuoka.jp\0" +"gd\0" +"ge\0nakijin.okinawa.jp\0" +"gf\0miyoshi.tokushima.jp\0" +"gg\0" +"gh\0" +"gi\0" +"oyama.tochigi.jp\0" +"kanan.osaka.jp\0" +"gl\0hannan.osaka.jp\0" +"gm\0tranby.no\0" +"gn\0" +"familyds.org\0" +"gp\0" +"gq\0" +"gr\0trentinostirol.it\0sande.vestfold.no\0" +"gs\0kanna.gunma.jp\0" +"gt\0tm.mc\0k12.ak.us\0insurance\0" +"virgin\0" +"gw\0" +"tm.mg\0sk.eu.org\0" +"gy\0" +"hk\0amli.no\0" +"hm\0" +"hn\0shonai.yamagata.jp\0" +"bible\0" +"hr\0" +"pagespeedmobilizer.com\0" +"ht\0id\0trentino-s-tirol.it\0kppsp.gov.pl\0" +"hu\0ie\0" +"yamatokoriyama.nara.jp\0visa\0" +"assedic.fr\0seihi.nagasaki.jp\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0" +"higashiosaka.osaka.jp\0" +"digital\0" +"il\0" +"im\0" +"in\0nagasaki.jp\0alstom\0" +"io\0" +"tm.no\0" +"iq\0shimonoseki.yamaguchi.jp\0nt.no\0protection\0" +"ir\0" +"d.bg\0is\0" +"zj.cn\0it\0vrn.ru\0" +"je\0macys\0" +"nx.cn\0" +"grane.no\0" +"no-ip.co.uk\0" +"santacruz.museum\0aaa.pro\0" +"shiranuka.hokkaido.jp\0" +"surrey.museum\0" +"misato.miyagi.jp\0ngo.lk\0baikal.ru\0careers\0sharp\0" +"jo\0aizumi.tokushima.jp\0" +"to.it\0jp\0palana.ru\0" +"lombardia.it\0markets\0" +"im.it\0gs.fm.no\0latrobe\0" +"ct.it\0pi.leg.br\0" +"sannohe.aomori.jp\0mizumaki.fukuoka.jp\0" +"kg\0guernsey.museum\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"educational.museum\0" +"ki\0kwp.gov.pl\0" +"soma.fukushima.jp\0dvrcam.info\0" +"km\0tm.pl\0" +"kn\0" +"med.pro\0" +"ota.tokyo.jp\0kp\0" +"la\0" +"kr\0lb\0bradesco\0" +"lc\0dynv6.net\0" +"its.me\0" +"molde.no\0" +"viva\0" +"hofu.yamaguchi.jp\0ru.eu.org\0se.eu.org\0" +"nakatombetsu.hokkaido.jp\0susaki.kochi.jp\0ky\0li\0" +"kz\0chattanooga.museum\0" +"kunitachi.tokyo.jp\0lk\0marnardal.no\0apps.fbsbx.com\0" +"is-an-artist.com\0ch.eu.org\0" +"ovre-eiker.no\0" +"aeroport.fr\0kuromatsunai.hokkaido.jp\0" +"naturalhistory.museum\0" +"shobara.hiroshima.jp\0ma\0""1kapp.com\0" +"taa.it\0lr\0" +"ls\0mc\0grue.no\0" +"lt\0md\0vivo\0" +"kiryu.gunma.jp\0lu\0me\0" +"lv\0" +"mg\0gratangen.no\0nat.tn\0" +"mh\0" +"ly\0" +"mk\0k12.wi.us\0" +"ml\0" +"betainabox.com\0" +"mn\0" +"mo\0global\0" +"mp\0tm.ro\0" +"mq\0na\0nt.ro\0" +"yotsukaido.chiba.jp\0mr\0" +"nishiokoppe.hokkaido.jp\0ms\0nc\0" +"kira.aichi.jp\0mt\0" +"mu\0ne\0" +"mv\0nf\0tm.se\0" +"miyawaka.fukuoka.jp\0mw\0ng\0" +"mx\0servebbs.net\0" +"my\0" +"mz\0kraanghke.no\0" +"ngo.ph\0hzc.io\0" +"planetarium.museum\0nl\0onthewifi.com\0" +"k12.tr\0" +"toyako.hokkaido.jp\0" +"no\0" +"adm.br\0" +"samnanger.no\0nr\0" +"wolterskluwer\0" +"nu\0" +"midatlantic.museum\0" +"tsuruoka.yamagata.jp\0" +"radio.br\0" +"nz\0" +"kicks-ass.net\0" +"of.no\0rade.no\0wloclawek.pl\0legal\0" +"om\0lib.ct.us\0" +"f.bg\0uchinada.ishikawa.jp\0" +"trogstad.no\0" +"pa\0gsm.pl\0" +"od.ua\0" +"k12.vi\0" +"pe\0wsa.gov.pl\0cr.ua\0" +"minamitane.kagoshima.jp\0pf\0pomorskie.pl\0homeunix.net\0" +"ph\0" +"khmelnytskyi.ua\0" +"fukushima.fukushima.jp\0miki.hyogo.jp\0" +"pk\0" +"b\xc3\xb8.nordland.no\0pl\0" +"pm\0panerai\0" +"newmexico.museum\0pn\0" +"qa\0*.ex.ortsinfo.at\0" +"alstahaug.no\0pr\0schaeffler\0" +"otobe.hokkaido.jp\0ps\0" +"como.it\0pt\0" +"oystre-slidre.no\0racing\0" +"trapani.it\0" +"pw\0" +"bayern\0" +"py\0" +"naamesjevuemie.no\0" +"abogado\0" +"space\0" +"svelvik.no\0" +"re\0" +"shirako.chiba.jp\0kvitsoy.no\0" +"hachinohe.aomori.jp\0" +"padua.it\0" +"kurogi.fukuoka.jp\0kanuma.tochigi.jp\0aure.no\0" +"entertainment.aero\0" +"soeda.fukuoka.jp\0" +"moseushi.hokkaido.jp\0ro\0boats\0" +"oksnes.no\0" +"sa\0" +"sb\0" +"rs\0sc\0pe.leg.br\0" +"isehara.kanagawa.jp\0sd\0" +"perso.ht\0ru\0se\0" +"otaki.chiba.jp\0" +"rw\0sg\0" +"sh\0k12.ky.us\0from-ga.com\0" +"scienceandindustry.museum\0si\0budapest\0" +"zushi.kanagawa.jp\0sj\0" +"sk\0" +"sl\0graphics\0" +"sm\0" +"sn\0" +"so\0" +"beardu.no\0" +"sr\0" +"tc\0durban\0" +"st\0td\0" +"su\0" +"works.aero\0valer.hedmark.no\0sv\0tf\0" +"kikugawa.shizuoka.jp\0tg\0" +"obihiro.hokkaido.jp\0joso.ibaraki.jp\0sx\0th\0" +"sy\0media\0" +"sz\0tj\0" +"tk\0" +"tl\0" +"trading.aero\0tm\0at.eu.org\0" +"nieruchomosci.pl\0tn\0" +"to\0dyn-o-saur.com\0" +"ua\0" +"nakagusuku.okinawa.jp\0tr\0tm.za\0myftp.biz\0" +"kashima.saga.jp\0andasuolo.no\0" +"tt\0s3-eu-central-1.amazonaws.com\0" +"toride.ibaraki.jp\0lighting\0" +"b.se\0tv\0" +"tw\0ug\0" +"artsandcrafts.museum\0bievat.no\0" +"h.bg\0divtasvuodna.no\0dominic.ua\0" +"shizuoka.jp\0mitane.akita.jp\0tz\0booking\0" +"eidfjord.no\0uk\0" +"city.hu\0" +"oki.fukuoka.jp\0" +"shinjo.okayama.jp\0oracle\0" +"va\0" +"nozawaonsen.nagano.jp\0" +"schoenbrunn.museum\0us\0vc\0" +"stjordalshalsen.no\0" +"ve\0from-wa.com\0" +"ts.it\0" +"vg\0" +"gs.ah.no\0uy\0vi\0gallery\0" +"uz\0" +"unj\xc3\xa1rga.no\0" +"vn\0" +"nv.us\0" +"ct.us\0\xe5\xb9\xbf\xe4\xb8\x9c\0sells-for-less.com\0" +"hikawa.shimane.jp\0vu\0" +"wf\0" +"kamisu.ibaraki.jp\0grajewo.pl\0rsc.cdn77.org\0" +"yamanakako.yamanashi.jp\0red.sv\0" +"uruma.okinawa.jp\0ryuoh.shiga.jp\0tree.museum\0hotel.tz\0play\0" +"komaki.aichi.jp\0" +"ogliastra.it\0elburg.museum\0" +"averoy.no\0" +"fuchu.toyama.jp\0koenig.ru\0" +"umb.it\0hitachinaka.ibaraki.jp\0alvdal.no\0ws\0" +"berg.no\0ngo.za\0" +"cooking\0" +"okaya.nagano.jp\0" +"kuroishi.aomori.jp\0gwangju.kr\0" +"osakasayama.osaka.jp\0nationalfirearms.museum\0" +"trana.no\0" +"kamogawa.chiba.jp\0prime\0" +"union.aero\0newjersey.museum\0k12.ks.us\0coupon\0" +"nagahama.shiga.jp\0" +"settlement.museum\0" +"siracusa.it\0" +"ac.leg.br\0" +"s\xc3\xb8r-aurdal.no\0adygeya.su\0kep.tr\0" +"os\xc3\xb8yro.no\0" +"kouzushima.tokyo.jp\0malatvuopmi.no\0" +"lavangen.no\0" +"carrier.museum\0" +"uslivinghistory.museum\0homedns.org\0" +"hamada.shimane.jp\0" +"vallee-aoste.it\0vega.no\0yt\0" +"ishigaki.okinawa.jp\0" +"kv\xc3\xa6""fjord.no\0" +"emergency.aero\0on.ca\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0tj\xc3\xb8me.no\0" +"politie\0" +"zm\0cloud\0" +"washingtondc.museum\0" +"tromsa.no\0xen.prgmr.com\0" +"urakawa.hokkaido.jp\0d.se\0" +"chihayaakasaka.osaka.jp\0" +"j.bg\0stjohn.museum\0audio\0" +"qld.edu.au\0kitanakagusuku.okinawa.jp\0\xe7\xbd\x91\xe7\xab\x99\0" +"tw.cn\0" +"no-ip.info\0" +"kusu.oita.jp\0" +"veneto.it\0namikata.ehime.jp\0higashikurume.tokyo.jp\0iide.yamagata.jp\0" +"ddr.museum\0" +"cv.ua\0" +"cc.ga.us\0" +"kyotango.kyoto.jp\0" +"seto.aichi.jp\0" +"takaharu.miyazaki.jp\0" +"is.it\0" +"cz.it\0\xe4\xbd\x90\xe8\xb3\x80.jp\0" +"yoshinogari.saga.jp\0kristiansand.no\0zarow.pl\0no-ip.org\0" +"drangedal.no\0amfam\0" +"trd.br\0adygeya.ru\0\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0frontier\0" +"tamano.okayama.jp\0" +"oh.us\0" +"assassination.museum\0" +"afjord.no\0" +"napoli.it\0komatsu.ishikawa.jp\0pr.leg.br\0" +"shishikui.tokushima.jp\0" +"taranto.it\0!city.yokohama.jp\0higashiomi.shiga.jp\0" +"erimo.hokkaido.jp\0opole.pl\0" +"berlin\0" +"kamisato.saitama.jp\0rindal.no\0" +"trustee.museum\0stada\0" +"accident-investigation.aero\0" +"hokuto.yamanashi.jp\0" +"ownprovider.com\0" +"trainer.aero\0" +"koshu.yamanashi.jp\0countryestate.museum\0astrakhan.ru\0" +"hotel.lk\0direct\0does-it.net\0" +"hatoyama.saitama.jp\0" +"asahi.ibaraki.jp\0norilsk.ru\0" +"pizza\0" +"stryn.no\0" +"\xd0\xb5\xd1\x8e\0" +"audnedaln.no\0supply\0" +"shimamoto.osaka.jp\0" +"saito.miyazaki.jp\0" +"stord.no\0" +"nonoichi.ishikawa.jp\0likescandy.com\0" +"valled-aosta.it\0" +"biratori.hokkaido.jp\0" +"trentinosued-tirol.it\0" +"television.museum\0" +"heimatunduhren.museum\0minnesota.museum\0" +"narashino.chiba.jp\0aejrie.no\0" +"f.se\0" +"ol.no\0" +"l.bg\0ruovat.no\0" +"yatsuka.shimane.jp\0" +"tsushima.aichi.jp\0" +"upow.gov.pl\0" +"nantan.kyoto.jp\0" +"airguard.museum\0" +"lecco.it\0" +"gorlice.pl\0" +"lorenskog.no\0" +"kursk.ru\0" +"perm.ru\0" +"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0oga.akita.jp\0kiyosato.hokkaido.jp\0ouchi.saga.jp\0aaa\0" +"tjome.no\0" +"wakkanai.hokkaido.jp\0\xe8\x87\xba\xe7\x81\xa3\0" +"is-very-nice.org\0""3utilities.com\0" +"compute-1.amazonaws.com\0" +"crotone.it\0" +"toyohashi.aichi.jp\0soja.okayama.jp\0" +"rel.ht\0abb\0" +"abc\0" +"chikusei.ibaraki.jp\0tunes\0" +"hotel.hu\0bofa\0dnsdojo.org\0" +"mamurogawa.yamagata.jp\0" +"bindal.no\0kv\xc3\xa6nangen.no\0" +"medical.museum\0" +"sarufutsu.hokkaido.jp\0" +"2000.hu\0n\xc3\xa6r\xc3\xb8y.no\0" +"fukui.jp\0vipsinaapp.com\0" +"oharu.aichi.jp\0" +"lebtimnetz.de\0" +"bushey.museum\0" +"kashiwazaki.niigata.jp\0london\0" +"francaise.museum\0k12.wa.us\0" +"s3.ap-northeast-2.amazonaws.com\0" +"desa.id\0railroad.museum\0" +"r\xc3\xb8ros.no\0" +"pb.ao\0" +"bologna.it\0" +"aco\0" +"or.at\0" +"gratis\0" +"anpachi.gifu.jp\0" +"uenohara.yamanashi.jp\0" +"or.bi\0" +"\xe4\xb8\xad\xe5\x9b\xbd\0" +"from-mt.com\0from-nd.com\0" +"hobol.no\0perso.sn\0attorney\0" +"mitaka.tokyo.jp\0" +"ads\0kinder\0" +"h.se\0" +"or.ci\0s\xc3\xb8gne.no\0aeg\0" +"veg\xc3\xa5rshei.no\0\xe4\xb8\xad\xe5\x9c\x8b\0" +"n.bg\0ureshino.mie.jp\0" +"buzen.fukuoka.jp\0" +"ora.gunma.jp\0" +"unjarga.no\0au.eu.org\0be.eu.org\0" +"powiat.pl\0" +"perso.tn\0" +"kawaminami.miyazaki.jp\0dnipropetrovsk.ua\0" +"or.cr\0osteroy.no\0" +"ooshika.nagano.jp\0boehringer\0" +"kaho.fukuoka.jp\0missoula.museum\0lur\xc3\xb8y.no\0cc.al.us\0" +"docs\0" +"klabu.no\0" +"chita.ru\0" +"s3.cn-north-1.amazonaws.com.cn\0" +"foundation.museum\0l\xc3\xa1hppi.no\0comsec\0mcdonalds\0" +"afl\0" +"pesarourbino.it\0asahi.chiba.jp\0" +"iris.arpa\0inagawa.hyogo.jp\0takatsuki.osaka.jp\0" +"shiso.hyogo.jp\0" +"chofu.tokyo.jp\0viking.museum\0" +"\xc3\xa1k\xc5\x8boluokta.no\0" +"higashinaruse.akita.jp\0" +"vaapste.no\0yachts\0" +"friuli-vegiulia.it\0andria-barletta-trani.it\0grandrapids.museum\0" +"taiki.mie.jp\0dyndns.tv\0" +"gob.ar\0tools\0" +"mup.gov.pl\0" +"uto.kumamoto.jp\0palmsprings.museum\0" +"\xd1\x80\xd1\x84\0" +"akrehamn.no\0" +"caserta.it\0" +"mordovia.su\0" +"sld.do\0" +"farmers\0search\0" +"gob.bo\0nishikatsura.yamanashi.jp\0davvesiida.no\0" +"bialowieza.pl\0k12.la.us\0" +"frogn.no\0g\xc3\xa1ls\xc3\xa1.no\0sinaapp.com\0" +"vic.gov.au\0aero.tt\0aig\0" +"\xe8\xb0\xb7\xe6\xad\x8c\0" +"rel.pl\0" +"annaka.gunma.jp\0izumi.osaka.jp\0" +"tobetsu.hokkaido.jp\0ina.saitama.jp\0blogdns.net\0bg.eu.org\0" +"gob.cl\0capebreton.museum\0" +"embroidery.museum\0" +"miyako.fukuoka.jp\0" +"weibo\0" +"pol.dz\0mjondalen.no\0doha\0ptplus.fit\0" +"plus\0" +"yoshimi.saitama.jp\0\xe7\xa7\xbb\xe5\x8a\xa8\0is-a-republican.com\0al.leg.br\0" +"aero.mv\0" +"labour.museum\0\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0bond\0" +"kaluga.ru\0" +"koka.shiga.jp\0kicks-ass.org\0" +"ono.fukushima.jp\0takasago.hyogo.jp\0asahi.nagano.jp\0kadoma.osaka.jp\0gives\0dyndns.ws\0" +"gob.do\0" +"or.id\0tosashimizu.kochi.jp\0" +"bel.tr\0" +"p.bg\0" +"gob.ec\0" +"kindle\0" +"zp.ua\0" +"homeunix.org\0" +"miyota.nagano.jp\0" +"cc.ri.us\0" +"medecin.km\0kaluga.su\0" +"aisho.shiga.jp\0" +"mordovia.ru\0" +"nowaruda.pl\0" +"book\0" +"or.it\0" +"is-a-patsfan.org\0" +"sigdal.no\0" +"gob.es\0" +"\xe7\xa6\x8f\xe5\xb2\xa1.jp\0" +"lindas.no\0" +"potenza.it\0" +"nsk.ru\0" +"tsuiki.fukuoka.jp\0" +"or.jp\0" +"sk\xc3\xa1nit.no\0" +"b\xc3\xa1id\xc3\xa1r.no\0" +"lea\xc5\x8bgaviika.no\0" +"rifu.miyagi.jp\0" +"ibaraki.jp\0crown\0is-a-knight.org\0" +"mincom.tn\0" +"diamonds\0" +"coach\0" +"pol.ht\0" +"nemuro.hokkaido.jp\0" +"or.kr\0" +"rost.no\0" +"fuel.aero\0gob.gt\0kitagata.saga.jp\0" +"is-a-student.com\0" +"incheon.kr\0" +"idv.hk\0muroto.kochi.jp\0" +"valle-d-aosta.it\0modum.no\0" +"gob.hn\0" +"servecounterstrike.com\0" +"repbody.aero\0ed.ao\0vagan.no\0" +"himeshima.oita.jp\0" +"tajimi.gifu.jp\0takamori.nagano.jp\0" +"wif.gov.pl\0" +"anz\0" +"aol\0hr.eu.org\0" +"or.na\0" +"gildesk\xc3\xa5l.no\0" +"yahiko.niigata.jp\0" +"or.mu\0" +"rep.kp\0" +"shimada.shizuoka.jp\0" +"yokkaichi.mie.jp\0" +"santabarbara.museum\0republican\0*.cns.joyent.com\0" +"l.se\0" +"r.bg\0ed.ci\0surgut.ru\0" +"app\0" +"fjell.no\0" +"kurashiki.okayama.jp\0" +"york.museum\0" +"konskowola.pl\0dn.ua\0" +"green\0" +"ed.cr\0" +"backplaneapp.io\0" +"higashimurayama.tokyo.jp\0servebbs.org\0" +"yokosuka.kanagawa.jp\0tsaritsyn.ru\0" +"ot.it\0pd.it\0livinghistory.museum\0sandcats.io\0" +"bar\0" +"bbc\0" +"shima.mie.jp\0" +"shimonita.gunma.jp\0philadelphia.museum\0" +"show.aero\0carboniaiglesias.it\0koryo.nara.jp\0" +"giehtavuoatna.no\0" +"nadex\0" +"cieszyn.pl\0catholic\0" +"yamatotakada.nara.jp\0lebesby.no\0art\0bbt\0" +"or.pw\0" +"uconnect\0" +"paleo.museum\0bcg\0\xe9\x80\x9a\xe8\xb2\xa9\0" +"vibovalentia.it\0nobeoka.miyazaki.jp\0tsurugashima.saitama.jp\0" +"basilicata.it\0\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd0\xbb\xd0\xb8\xd0\xba\0" +"agric.za\0bcn\0" +"frogans\0" +"babia-gora.pl\0" +"sld.pa\0cruise\0" +"minamiechizen.fukui.jp\0rmit\0" +"walter\0" +"pug.it\0tono.iwate.jp\0joshkar-ola.ru\0" +"gob.mx\0hadsel.no\0hashbang.sh\0" +"gob.ni\0" +"fst.br\0" +"pyatigorsk.ru\0" +"masaki.ehime.jp\0" +"emp.br\0" +"fitjar.no\0" +"ashibetsu.hokkaido.jp\0uzhgorod.ua\0komatsu\0xfinity\0cloudcontrolapp.com\0" +"jorpeland.no\0" +"parti.se\0" +"dr.na\0h\xc3\xa1""bmer.no\0" +"biella.it\0" +"oristano.it\0" +"atsugi.kanagawa.jp\0" +"coal.museum\0stordal.no\0" +"gob.pa\0" +"grosseto.it\0bet\0" +"viterbo.it\0jobs\0rollag.no\0" +"or.th\0" +"shonai.fukuoka.jp\0yono.saitama.jp\0kunstsammlung.museum\0gob.pe\0n.se\0" +"dontexist.com\0" +"t.bg\0" +"horse\0" +"kashiwa.chiba.jp\0gob.pk\0zt.ua\0" +"cc.wv.us\0" +"food\0health\0" +"vladimir.su\0dp.ua\0cc.md.us\0no-ip.net\0" +"cc.ar.us\0" +"tas.au\0\xe5\xb1\xb1\xe6\xa2\xa8.jp\0or.ug\0" +"tomisato.chiba.jp\0ibaraki.osaka.jp\0farmers.museum\0" +"\xe6\xbb\x8b\xe8\xb3\x80.jp\0yokote.akita.jp\0ine.kyoto.jp\0" +"or.tz\0" +"monticello.museum\0" +"sakawa.kochi.jp\0nakagawa.tokushima.jp\0" +"saitama.jp\0" +"ozu.ehime.jp\0college\0" +"pharmacy.museum\0" +"press.museum\0r\xc3\xb8yrvik.no\0gist.githubcloud.com\0" +"slattum.no\0" +"umi.fukuoka.jp\0" +"or.us\0axa\0" +"usa.oita.jp\0drammen.no\0" +"aws\0" +"e164.arpa\0" +"ed.jp\0" +"spjelkavik.no\0brasilia.me\0" +"trani-andria-barletta.it\0kasumigaura.ibaraki.jp\0studio\0" +"\xe3\x82\xaf\xe3\x83\xa9\xe3\x82\xa6\xe3\x83\x89\0" +"travelers\0" +"swiebodzin.pl\0" +"kure.hiroshima.jp\0" +"molise.it\0bid\0" +"iwatsuki.saitama.jp\0" +"pup.gov.pl\0" +"nhlfan.net\0" +"pol.tr\0" +"kyowa.akita.jp\0oum.gov.pl\0yolasite.com\0" +"bio\0" +"ford\0" +"rygge.no\0vladimir.ru\0" +"k12.wy.us\0servesarcasm.com\0" +"toyooka.hyogo.jp\0" +"nabari.mie.jp\0" +"gob.sv\0" +"biz\0nachikatsuura.wakayama.jp\0" +"*.kitakyushu.jp\0loan\0azure-mobile.net\0" +"chuo.fukuoka.jp\0satsumasendai.kagoshima.jp\0" +"compute.amazonaws.com\0" +"oz.au\0" +"badaddja.no\0" +"akabira.hokkaido.jp\0" +"kashiwara.osaka.jp\0idv.tw\0" +"itakura.gunma.jp\0" +"association.museum\0is-a-personaltrainer.com\0" +"ringerike.no\0" +"p.se\0lib.or.us\0" +"folkebibl.no\0" +"v.bg\0" +"uwajima.ehime.jp\0maserati\0" +"oskol.ru\0gob.ve\0z-2.compute-1.amazonaws.com\0" +"urasoe.okinawa.jp\0" +"kumagaya.saitama.jp\0warszawa.pl\0" +"dr.tr\0" +"can.museum\0" +"skanit.no\0" +"ap-northeast-1.compute.amazonaws.com\0" +"atsuma.hokkaido.jp\0mitou.yamaguchi.jp\0" +"va.it\0isesaki.gunma.jp\0" +"rhcloud.com\0" +"mitsue.nara.jp\0" +"columbia.museum\0" +"shimizu.hokkaido.jp\0\xd9\x87\xd9\x85\xd8\xb1\xd8\xa7\xd9\x87\0" +"cadaques.museum\0" +"is-a-bruinsfan.org\0sells-it.net\0" +"chungnam.kr\0" +"akashi.hyogo.jp\0" +"nsw.au\0" +"barum.no\0" +"ms.leg.br\0" +"bms\0" +"dnsdojo.net\0" +"yomitan.okinawa.jp\0" +"bmw\0" +"\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"villas\0" +"endofinternet.net\0" +"haibara.shizuoka.jp\0bnl\0" +"ed.pw\0" +"yamaguchi.jp\0" +"medecin.fr\0" +"suzuka.mie.jp\0" +"tamaki.mie.jp\0" +"nirasaki.yamanashi.jp\0" +"catanzaro.it\0" +"nordre-land.no\0" +"ustka.pl\0" +"bom\0" +"nic.in\0" +"froya.no\0k12.mi.us\0boo\0" +"station.museum\0is-a-blogger.com\0" +"coffee\0loft\0" +"mt.leg.br\0" +"tires\0" +"iwamizawa.hokkaido.jp\0bot\0" +"box\0" +"kamo.niigata.jp\0nativeamerican.museum\0" +"friuli-ve-giulia.it\0from-or.com\0" +"ohira.tochigi.jp\0" +"bomlo.no\0\xd8\xa7\xd8\xa8\xd9\x88\xd8\xb8\xd8\xa8\xd9\x8a\0" +"cab\0" +"nagai.yamagata.jp\0" +"czeladz.pl\0" +"tonaki.okinawa.jp\0" +"dentist\0" +"communication.museum\0fusa.no\0condos\0host\0" +"lib.vi.us\0cal\0ufcfan.org\0" +"emr.it\0va.no\0r.se\0cam\0" +"gushikami.okinawa.jp\0sayama.saitama.jp\0" +"sosa.chiba.jp\0geology.museum\0" +"x.bg\0" +"fyresdal.no\0cba\0noip.us\0" +"car\0" +"\xe7\xbe\xa4\xe9\xa6\xac.jp\0minobu.yamanashi.jp\0" +"cat\0js.cn\0" +"publ.pt\0" +"assabu.hokkaido.jp\0cafe\0" +"sumoto.kumamoto.jp\0ar.com\0from-vt.com\0" +"vc.it\0chiyoda.tokyo.jp\0" +"cbn\0" +"cbs\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" +"asmatart.museum\0shell\0" +"yamato.kumamoto.jp\0azure\0compare\0" +"*.nagoya.jp\0music.museum\0farsund.no\0" +"il.eu.org\0" +"\xe6\xa0\x83\xe6\x9c\xa8.jp\0tanagura.fukushima.jp\0mibu.tochigi.jp\0" +"\xc3\xb8rland.no\0" +"nt.edu.au\0" +"s3-ap-northeast-2.amazonaws.com\0" +"tama.tokyo.jp\0" +"kosai.shizuoka.jp\0from-in.com\0" +"forsale\0alpha-myqnapcloud.com\0" +"nagano.nagano.jp\0taira.toyama.jp\0schmidt\0" +"trade\0" +"ceb\0" +"meloy.no\0" +"casino.hu\0tatar\0" +"auction\0" +"reviews\0" +"s\xc3\xb8r-fron.no\0vaksdal.no\0" +"yabu.hyogo.jp\0hu.eu.org\0ie.eu.org\0" +"hopto.org\0" +"kasukabe.saitama.jp\0" +"ceo\0logoip.de\0" +"soo.kagoshima.jp\0cfa\0" +"hiroshima.jp\0daito.osaka.jp\0baltimore.museum\0" +"minamioguni.kumamoto.jp\0" +"tarui.gifu.jp\0*.sch.uk\0cfd\0" +"matsushima.miyagi.jp\0" +"kerrylogistics\0" +"numata.gunma.jp\0" +"buy\0" +"hachioji.tokyo.jp\0us.na\0" +"flanders.museum\0irkutsk.ru\0seven\0" +"matta-varjjat.no\0" +"fr\xc3\xa6na.no\0chtr.k12.ma.us\0" +"blanco\0emerson\0" +"matsubushi.saitama.jp\0t.se\0" +"shintoku.hokkaido.jp\0" +"z.bg\0" +"vinnica.ua\0" +"\xe7\xbb\x84\xe7\xbb\x87\xe6\x9c\xba\xe6\x9e\x84\0" +"soka.saitama.jp\0" +"cal.it\0" +"cc.sc.us\0" +"wroclaw.pl\0" +"*.cryptonomic.net\0" +"sejny.pl\0deals\0\xd9\x85\xd9\x88\xd8\xa8\xd8\xa7\xd9\x8a\xd9\x84\xd9\x8a\0" +"ve.it\0\xe7\xa7\x8b\xe7\x94\xb0.jp\0matsubara.osaka.jp\0americanantiques.museum\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd9\x87\0" +"ham-radio-op.net\0" +"forum.hu\0otaru.hokkaido.jp\0s\xc3\xa1l\xc3\xa1t.no\0skjervoy.no\0" +"mitsuke.niigata.jp\0jevnaker.no\0iki.fi\0" +"company\0" +"kami.miyagi.jp\0" +"va.us\0is-a-green.com\0" +"call\0" +"ballooning.aero\0hirogawa.wakayama.jp\0taipei\0" +"aogashima.tokyo.jp\0nationalheritage.museum\0aarp\0" +"lund.no\0loten.no\0tirol\0" +"dell-ogliastra.it\0" +"dental\0" +"kitamoto.saitama.jp\0" +"aseral.no\0" +"miyake.nara.jp\0orenburg.ru\0" +"kamaishi.iwate.jp\0camp\0" +"bzh\0" +"nic.tj\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" +"is-a-designer.com\0" +"fylkesbibl.no\0" +"tochigi.jp\0" +"sevastopol.ua\0k12.me.us\0" +"from-ks.com\0" +"k12.as.us\0" +"sobetsu.hokkaido.jp\0oyamazaki.kyoto.jp\0\xd9\xbe\xd8\xa7\xd9\x83\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"nhs.uk\0" +"awaji.hyogo.jp\0" +"\xe6\xb2\x96\xe7\xb8\x84.jp\0" +"trysil.no\0" +"kariwa.niigata.jp\0" +"tajiri.osaka.jp\0" +"calvinklein\0genting\0fbx-os.fr\0" +"pp.az\0" +"traeumtgerade.de\0" +"nedre-eiker.no\0amica\0" +"bykle.no\0" +"tsuwano.shimane.jp\0arteducation.museum\0" +"tanohata.iwate.jp\0nose.osaka.jp\0" +"pohl\0z-1.compute-1.amazonaws.com\0" +"tromso.no\0" +"venice.it\0noip.me\0" +"builders\0" +"eu.com\0" +"asso.eu.org\0" +"toray\0" +"nagaokakyo.kyoto.jp\0" +"flights\0" +"kumamoto.kumamoto.jp\0" +"cc.az.us\0" +"journalism.museum\0" +"\xe8\xaf\xba\xe5\x9f\xba\xe4\xba\x9a\0" +"omi.niigata.jp\0" +"lodi.it\0pn.it\0" +"usuki.oita.jp\0helsinki.museum\0" +"\xed\x95\x9c\xea\xb5\xad\0" +"moriyoshi.akita.jp\0" +"ikeda.nagano.jp\0" +"care\0" +"naturhistorisches.museum\0" +"friuli-vgiulia.it\0cruises\0" +"hikone.shiga.jp\0" +"paragliding.aero\0hirata.fukushima.jp\0chiyoda.gunma.jp\0sumoto.hyogo.jp\0" +"noda.chiba.jp\0texas.museum\0love\0" +"scientist.aero\0hurum.no\0" +"casa\0ubank\0" +"esurance\0goip.de\0" +"sakaiminato.tottori.jp\0burghof.museum\0cars\0" +"shiogama.miyagi.jp\0" +"case\0" +"webhop.info\0gr.eu.org\0" +"com\0\xe3\x82\xb9\xe3\x83\x88\xe3\x82\xa2\0" +"school.na\0cash\0" +"toyoake.aichi.jp\0" +"discovery.museum\0" +"uppo.gov.pl\0" +"frosta.no\0" +"author.aero\0" +"gotemba.shizuoka.jp\0nesodden.no\0" +"asker.no\0fhv.se\0\xe7\xbd\x91\xe5\xba\x97\0" +"obuse.nagano.jp\0aarborte.no\0" +"museet.museum\0golffan.us\0" +"altai.ru\0komvux.se\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" +"marche.it\0guovdageaidnu.no\0" +"grong.no\0" +"*.kawasaki.jp\0" +"itoigawa.niigata.jp\0travel.pl\0" +"pfizer\0" +"\xd0\xb4\xd0\xb5\xd1\x82\xd0\xb8\0" +"dad\0" +"hanggliding.aero\0shimabara.nagasaki.jp\0environment.museum\0" +"etc.br\0" +"school.nz\0statefarm\0" +"satte.saitama.jp\0gol.no\0" +"cherkassy.ua\0" +"lier.no\0" +"laz.it\0" +"matsuyama.ehime.jp\0kamchatka.ru\0wales\0" +"shiroishi.saga.jp\0" +"tokke.no\0" +"dyndns-web.com\0" +"day\0" +"quebec\0" +"cri.nz\0x.se\0report\0" +"lib.fl.us\0able\0" +"l\xc3\xb8ten.no\0" +"art.museum\0crs\0csc\0" +"pl.ua\0samsung\0" +"cc.mn.us\0securitytactics.com\0" +"yonaguni.okinawa.jp\0rennebu.no\0cc.gu.us\0" +"vi.it\0" +"*.alwaysdata.net\0" +"en.it\0wedding\0" +"mutuelle\0" +"sorum.no\0kiev.ua\0" +"office-on-the.net\0" +"hadano.kanagawa.jp\0krager\xc3\xb8.no\0" +"journalist.aero\0ogata.akita.jp\0" +"sciencecenters.museum\0" +"barcelona\0kuokgroup\0" +"shingu.wakayama.jp\0" +"trentinoaltoadige.it\0gallery.museum\0game\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0" +"dds\0" +"uvic.museum\0from-me.org\0" +"odo.br\0\xe7\xbd\x91\xe7\xbb\x9c.cn\0\xe9\x9d\x99\xe5\xb2\xa1.jp\0nordreisa.no\0engineer\0" +"kaizuka.osaka.jp\0trolley.museum\0" +"travel.tt\0" +"vda.it\0" +"bible.museum\0" +"miyoshi.hiroshima.jp\0kg.kr\0" +"dabur\0" +"toyoura.hokkaido.jp\0udmurtia.ru\0" +"leksvik.no\0bentley\0jprs\0" +"dev\0" +"trader.aero\0kochi.kochi.jp\0" +"kamifurano.hokkaido.jp\0" +"australia.museum\0k12.ma.us\0" +"tenkawa.nara.jp\0" +"bizen.okayama.jp\0" +"oumu.hokkaido.jp\0" +"from-ma.com\0" +"wiki.br\0porn\0" +"vads\xc3\xb8.no\0" +"leirvik.no\0" +"yasu.shiga.jp\0" +"tank.museum\0k\xc3\xa5""fjord.no\0" +"yufu.oita.jp\0" +"se.net\0hopto.me\0" +"okinoshima.shimane.jp\0" +"mino.gifu.jp\0bo.telemark.no\0" +"fukuroi.shizuoka.jp\0" +"nes.akershus.no\0post\0" +"lib.va.us\0" +"z.se\0" +"uryu.hokkaido.jp\0" +"dhl\0" "gon.pk\0" +"fin.ec\0adult.ht\0" +"doesntexist.com\0" +"kaisei.kanagawa.jp\0" +"sk\xc3\xa5nland.no\0" +"versailles.museum\0olayan\0" +"tendo.yamagata.jp\0" +"pr.it\0gs.mr.no\0" +"room\0" +"serveexchange.com\0" +"beauxarts.museum\0" +"dynns.com\0" +"baidu\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0" +"newspaper.museum\0" +"historical.museum\0\xe7\xbd\x91\xe7\xbb\x9c\0" +"odate.akita.jp\0diy\0" +"railway.museum\0masoy.no\0" +"is-a-player.com\0" +"sport.hu\0sciencecenter.museum\0" +"saltdal.no\0" +"playstation\0" +"atami.shizuoka.jp\0" +"download\0" +"chambagri.fr\0sar.it\0hvaler.no\0" +"haboro.hokkaido.jp\0tranoy.no\0" +"lapy.pl\0" +"iselect\0yamaxun\0" +"vestre-toten.no\0phone\0" +"bryansk.su\0" +"navuotna.no\0" +"dscloud.me\0" +"oyer.no\0bielawa.pl\0" +"pp.ru\0pp.se\0volvo\0" +"kuki.saitama.jp\0free\0" +"newport.museum\0" +"fujiyoshida.yamanashi.jp\0" +"amsterdam\0" +"sund.no\0" +"urayasu.chiba.jp\0" +"nflfan.org\0" +"uki.kumamoto.jp\0" +"etisalat\0" +"fuchu.hiroshima.jp\0" +"logoip.com\0" +"gop.pk\0" +"asago.hyogo.jp\0higashimatsuyama.saitama.jp\0cbre\0" +"pp.ua\0" +"nakagawa.fukuoka.jp\0luxembourg.museum\0" +"cc.hi.us\0" +"dnp\0" +"kurotaki.nara.jp\0ogose.saitama.jp\0\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"naha.okinawa.jp\0" +"pt.it\0kasamatsu.gifu.jp\0" +"dog\0" +"minamiminowa.nagano.jp\0" +"tcm.museum\0is-uberleet.com\0" +"depot.museum\0" +"bryansk.ru\0" +"vi.us\0" +"gov.ac\0web.co\0anquan\0" +"maibara.shiga.jp\0dot\0" +"gov.ae\0kyotanabe.kyoto.jp\0" +"gov.af\0tadaoka.osaka.jp\0codes\0" +"keymachine.de\0" +"gov.al\0" +"from-ct.com\0from-la.net\0" +"kofu.yamanashi.jp\0" +"baseball.museum\0" +"gov.ba\0" +"gov.ar\0gov.bb\0fujikawa.yamanashi.jp\0" +"gov.as\0web.do\0" +"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0rexroth\0" +"gov.au\0" +"gov.bf\0" +"hamburg.museum\0" +"gov.bh\0copenhagen.museum\0" +"namsos.no\0" +"gov.az\0saku.nagano.jp\0" +"gov.bm\0" +"shimane.jp\0" +"gov.bo\0" +"k12.nm.us\0" +"gov.br\0" +"gov.bs\0film.museum\0maif\0yodobashi\0" +"gov.bt\0gov.cd\0eat\0" +"gbiz\0" +"eti.br\0" +"gov.by\0" +"ecn.br\0gov.bz\0" +"wa.au\0" +"gov.cl\0" +"gov.cm\0tsuno.kochi.jp\0" +"gov.cn\0endofinternet.org\0" +"gov.co\0maison\0" +"\xc3\xb8ygarden.no\0" +"rogers\0" +"iwafune.tochigi.jp\0" +"photo\0" +"gov.cu\0\xd8\xa8\xd8\xa7\xd8\xb2\xd8\xa7\xd8\xb1\0" +"calabria.it\0fuso.aichi.jp\0" +"g\xc3\xa1ivuotna.no\0" +"council.aero\0gov.cx\0" +"gov.cy\0kusatsu.gunma.jp\0kikonai.hokkaido.jp\0" +"kitayama.wakayama.jp\0" +"shinshinotsu.hokkaido.jp\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" +"gov.dm\0timekeeping.museum\0" +"communications.museum\0" +"gov.do\0pacific.museum\0eco\0" +"imabari.ehime.jp\0" +"gov.ec\0" +"qh.cn\0gov.ee\0" +"salangen.no\0" +"gov.eg\0" +"boleslawiec.pl\0" +"cc.mt.us\0cc.nd.us\0" +"gov.dz\0" +"computerhistory.museum\0nes.buskerud.no\0" +"eidsvoll.no\0" +"pv.it\0\xe5\x95\x86\xe6\xa0\x87\0" +"gs.hm.no\0" +"qld.au\0gov.et\0" +"edu\0scotland.museum\0" +"takatsuki.shiga.jp\0dtv\0" +"web.id\0" +"pr.us\0pantheonsite.io\0" +"kirov.ru\0" +"fujioka.gunma.jp\0" +"nesseby.no\0" +"narita.chiba.jp\0" +"hurdal.no\0" +"travelersinsurance\0" +"baidar.no\0" +"\xc3\xb8yer.no\0" +"gov.ge\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"writesthisblog.com\0" +"gov.gh\0" +"gov.gi\0california.museum\0" +"kushima.miyazaki.jp\0" +"house\0zuerich\0" +"shinjo.yamagata.jp\0" +"gov.gn\0" +"servebbs.com\0" +"crafts.museum\0" +"gov.gr\0dvr\0" +"photos\0" +"dwg\0town\0" +"friuliv-giulia.it\0accenture\0" +"gov.gy\0gujo.gifu.jp\0minamiaiki.nagano.jp\0" +"konan.shiga.jp\0" +"gov.hk\0lamer\0" +"okoppe.hokkaido.jp\0grocery\0" +"honjyo.akita.jp\0" +"catering.aero\0eniwa.hokkaido.jp\0adac\0" +"higashiizumo.shimane.jp\0oyabe.toyama.jp\0" +"\xc3\xa5rdal.no\0" +"alpha.bounty-full.com\0" +"pgafan.net\0" +"sanofi\0" +"gov.ie\0osaka\0" +"\xc3\xa5s.no\0" +"minamata.kumamoto.jp\0is.gov.pl\0" +"scrapping.cc\0" +"skaun.no\0" +"pictet\0" +"gov.il\0fin.tn\0" +"gov.in\0" +"web.lk\0" +"shiroi.chiba.jp\0" +"gov.iq\0" +"gov.ir\0" +"gov.is\0" +"gov.it\0" +"fukudomi.saga.jp\0boston.museum\0frog.museum\0moskenes.no\0" +"gamagori.aichi.jp\0fuchu.tokyo.jp\0vote\0" +"lib.pr.us\0" +"toys\0" +"gov.jo\0birthplace.museum\0" +"minamiuonuma.niigata.jp\0" +"huissier-justice.fr\0luxury\0" +"voto\0" +"community.museum\0silk.museum\0namsskogan.no\0" +"higashiagatsuma.gunma.jp\0" +"gov.kg\0\xe4\xbc\x81\xe4\xb8\x9a\0" +"gov.ki\0" +"web.nf\0" +"aramco\0" +"gov.km\0web.ni\0" +"gov.kn\0bodo.no\0dyndns-pics.com\0" +"makurazaki.kagoshima.jp\0" +"fukusaki.hyogo.jp\0gov.kp\0" +"cesena-forli.it\0gov.la\0" +"mifune.kumamoto.jp\0gov.lb\0" +"gov.lc\0systems\0" +"tr\xc3\xa6na.no\0" +"gov.ky\0salem.museum\0" +"saroma.hokkaido.jp\0gov.kz\0" +"gov.lk\0" +"kunneppu.hokkaido.jp\0pila.pl\0fareast.ru\0" +"gaivuotna.no\0" +"investments\0\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\0" +"shibata.niigata.jp\0kongsvinger.no\0" +"gov.ma\0tickets\0" +"gov.lr\0" +"mulhouse.museum\0nuernberg.museum\0" +"gov.lt\0b\xc3\xa1hcavuotna.no\0" +"gov.me\0" +"gov.lv\0" +"gov.mg\0kommunalforbund.se\0is-very-evil.org\0" +"l\xc3\xb8""dingen.no\0" +"gov.ly\0" +"gov.mk\0" +"gov.ml\0" +"total\0" +"gov.mn\0" +"gov.mo\0web.pk\0" +"gov.mr\0\xd8\xa8\xda\xbe\xd8\xa7\xd8\xb1\xd8\xaa\0" +"gov.ms\0jefferson.museum\0" +"tuscany.it\0" +"friulivegiulia.it\0kitahata.saga.jp\0gov.mu\0" +"gov.mv\0" +"gov.mw\0gov.ng\0zgrad.ru\0physio\0" +"istanbul\0secure\0" +"isahaya.nagasaki.jp\0gov.my\0lebork.pl\0" +"veterinaire.km\0gov.mz\0" +"kanagawa.jp\0" +"sado.niigata.jp\0fineart.museum\0" +"kashihara.nara.jp\0" +"gov.nr\0" +"narviika.no\0" +"kunigami.okinawa.jp\0agakhan\0" +"alessandria.it\0" +"tolga.no\0" +"izumisano.osaka.jp\0contact\0" +"\xe5\xaf\x8c\xe5\xb1\xb1.jp\0namegawa.saitama.jp\0" +"miyoshi.aichi.jp\0finearts.museum\0" +"gov.om\0" +"zone\0" +"neues.museum\0" +"syzran.ru\0bargains\0" +"daegu.kr\0" +"lib.wi.us\0" +"ambulance.aero\0gov.ph\0" +"hsbc\0icbc\0" +"kusatsu.shiga.jp\0gov.pk\0" +"gov.pl\0krasnoyarsk.ru\0fr.eu.org\0" +"fj.cn\0" +"showa.fukushima.jp\0gov.pn\0km.ua\0" +"cc.nh.us\0" +"gov.qa\0" +"gov.pr\0jp.net\0poznan.pl\0" +"gov.ps\0safe\0" +"mil.ac\0archaeological.museum\0gov.pt\0r.cdn77.net\0" +"vs.it\0" +"mil.ae\0pz.it\0" +"guardian\0" +"c.cdn77.org\0" +"gov.py\0airtel\0" +"gjerdrum.no\0" +"mil.al\0" +"web.tj\0" +"veterinaire.fr\0chanel\0" +"mil.ba\0" +"mil.ar\0" +"lviv.ua\0" +"web.tr\0" +"kiwi.nz\0" +"sand\xc3\xb8y.no\0" +"mil.az\0\xe0\xa6\xad\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa6\xa4\0" +"sarpsborg.no\0fan\0" +"mil.bo\0poivron.org\0" +"gov.sa\0" +"gov.sb\0" +"mil.br\0gov.rs\0gov.sc\0" +"gov.sd\0" +"gov.ru\0lanxess\0" +"gov.rw\0gov.sg\0is-a-socialist.com\0" +"gov.sh\0intuit\0" +"web.ve\0" +"mil.by\0" +"gov.sl\0" +"mil.cl\0gangwon.kr\0rivne.ua\0" +"shimamaki.hokkaido.jp\0glas.museum\0" +"mil.cn\0" +"ac.ae\0mil.co\0honai.ehime.jp\0" +"narusawa.yamanashi.jp\0k12.ms.us\0k12.nc.us\0" +"k12.il.us\0\xe9\xa6\x99\xe6\xa0\xbc\xe9\x87\x8c\xe6\x8b\x89\0" +"gov.st\0" +"services.aero\0gov.sx\0" +"gov.sy\0" +"gov.tj\0" +"gov.tl\0" +"gov.tm\0" +"gov.tn\0" +"ac.at\0gov.to\0" +"ac.be\0mil.do\0steigen.no\0" +"gov.ua\0esq\0vacations\0" +"taki.mie.jp\0gov.tr\0" +"mil.ec\0tsuruga.fukui.jp\0stockholm.museum\0gov.tt\0" +"gov.tw\0" +"mil.eg\0landes.museum\0" +"murayama.yamagata.jp\0" +"b\xc3\xb8.telemark.no\0" +"kanzaki.saga.jp\0gov.uk\0" +"mypsx.net\0" +"per.la\0" +"lib.ky.us\0baseball\0" +"miyada.nagano.jp\0lib.ak.us\0gov.vc\0" +"1.bg\0ac.ci\0jeonbuk.kr\0" +"gov.ve\0is-lost.org\0" +"tushu\0\xe4\xbf\xa1\xe6\x81\xaf\0" +"ac.cn\0nasushiobara.tochigi.jp\0hyundai\0" +"cc.nj.us\0" +"cc.ia.us\0" +"exhibition.museum\0" +"ac.cr\0" +"gov.vn\0ferrari\0lilly\0" +"fortmissoula.museum\0" +"gs.nl.no\0bearalv\xc3\xa1hki.no\0passagens\0" +"lc.it\0missile.museum\0" +"eus\0sale\0select\0" +"ac.cy\0hasvik.no\0" +"andebu.no\0web.za\0memorial\0" +"mil.ge\0" +"marshalls\0" +"mil.gh\0wa.us\0" +"shirakawa.gifu.jp\0" +"spreadbetting\0yahoo\0" +"coloradoplateau.museum\0" +"medizinhistorisches.museum\0loab\xc3\xa1t.no\0" +"\xe7\xb5\x84\xe7\xb9\x94.hk\0theater.museum\0\xe8\x81\x94\xe9\x80\x9a\0" +"zao.miyagi.jp\0taketomi.okinawa.jp\0from-ak.com\0" +"gov.ws\0" +"nakaniikawa.toyama.jp\0per.nf\0" +"mil.gt\0bungoono.oita.jp\0bo.nordland.no\0" +"skodje.no\0dnsfor.me\0" +"westfalen.museum\0" +"naples.it\0\xe5\x8d\x83\xe8\x91\x89.jp\0toyotomi.hokkaido.jp\0tsuyama.okayama.jp\0bugatti\0" +"mil.hn\0" +"kadena.okinawa.jp\0" +"balat.no\0" +"mil.id\0" +"gildeskal.no\0" +"promo\0" +"l\xc3\xa4ns.museum\0k12.ne.us\0" +"homeunix.com\0" +"mil.in\0tara.saga.jp\0" +"gov.za\0" +"mil.iq\0war.museum\0" +"dynalias.com\0" +"yanagawa.fukuoka.jp\0skoczow.pl\0misconfused.org\0" +"jolster.no\0" +"ac.gn\0minamimaki.nagano.jp\0iwi.nz\0fh.se\0" +"g12.br\0clock.museum\0" +"is-a-landscaper.com\0" +"gov.zm\0" +"shiojiri.nagano.jp\0hotmail\0" +"mil.jo\0\xe5\xbe\xb3\xe5\xb3\xb6.jp\0lierne.no\0" +"dyndns.info\0" +"arakawa.saitama.jp\0" +"fit\0" +"dubai\0" +"ethnology.museum\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" +"mil.kg\0" +"rocher\0" +"salvadordali.museum\0" +"sapo\0" +"mil.km\0" +"3.bg\0ac.id\0aa.no\0" +"karasuyama.tochigi.jp\0" +"mil.kr\0" +"abiko.chiba.jp\0daiwa.hiroshima.jp\0" +"bas.it\0oryol.ru\0" +"ac.il\0shimokitayama.nara.jp\0" "ac.im\0" "ac.in\0" -"glass\0" -"ac.ir\0" -"firm.ve\0" -"murakami.niigata.jp\0" -"furano.hokkaido.jp\0" -"melhus.no\0" -"ha.cn\0andria-trani-barletta.it\0computer\0" -"gives\0" -"saku.nagano.jp\0" -"sx.cn\0ac.jp\0" -"coloradoplateau.museum\0livinghistory.museum\0is-a-candidate.org\0" -"flog.br\0" -"rsvp\0" -"nom.pa\0" -"nom.pe\0" -"sweden.museum\0namsos.no\0" -"tanabe.wakayama.jp\0" -"beiarn.no\0" -"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0handa.aichi.jp\0edogawa.tokyo.jp\0nom.pl\0" -"snoasa.no\0" -"ac.kr\0abb\0" -"tokigawa.saitama.jp\0" -"surgery\0" -"nakanojo.gunma.jp\0takino.hyogo.jp\0" -"construction\0" -"tinn.no\0" -"ta.it\0\xe6\x97\xb6\xe5\xb0\x9a\0" -"kitadaito.okinawa.jp\0" -"ac.ma\0" -"vlog.br\0" -"kirkenes.no\0" -"urbino-pesaro.it\0town\0" -"ac.me\0solutions\0" -"gouv.fr\0novara.it\0" -"gs.jan-mayen.no\0" -"mat.br\0" -"nom.re\0" -"filatelia.museum\0" -"aco\0" -"pistoia.it\0" -"versailles.museum\0" -"community.museum\0rennes\xc3\xb8y.no\0nom.ro\0" -"agr.br\0chikugo.fukuoka.jp\0" -"ac.mu\0stavern.no\0homeunix.org\0" -"ac.mw\0" -"mutsuzawa.chiba.jp\0" -"virtual.museum\0" -"intl.tn\0art.pl\0" -"dnepropetrovsk.ua\0" -"ppg.br\0" -"firm.ro\0" -"tas.au\0kautokeino.no\0" -"na.it\0" -"kvanangen.no\0pub.sa\0sc.ug\0" -"ads\0" -"gx.cn\0sc.tz\0" -"gouv.ht\0" -"somna.no\0fl.us\0toys\0" -"kutchan.hokkaido.jp\0ac.nz\0" -"iveland.no\0nordkapp.no\0" -"rovigo.it\0" -"\xc3\xa5""fjord.no\0sc.us\0" -"veneto.it\0report\0" -"nalchik.ru\0lib.ok.us\0" -"iwaki.fukushima.jp\0yatsuka.shimane.jp\0" -"lindas.no\0tvedestrand.no\0ac.pa\0nom.tm\0k12.sc.us\0omega\0" -"mjondalen.no\0" -"obihiro.hokkaido.jp\0cri.nz\0" -"matsumoto.kagoshima.jp\0" -"state.museum\0fl\xc3\xa5.no\0rauma.no\0vennesla.no\0tires\0" -"afl\0" -"gouv.bj\0" -"ac.pr\0" -"usuki.oita.jp\0" -"oregon.museum\0" -"matsusaka.mie.jp\0tochio.niigata.jp\0lebork.pl\0" -"stat.no\0" -"balsfjord.no\0karlsoy.no\0" -"mugi.tokushima.jp\0art.sn\0" -"freight.aero\0gouv.ci\0" -"coach\0" -"marche.it\0nishiawakura.okayama.jp\0" -"kids.us\0" -"shimonita.gunma.jp\0kitagawa.miyazaki.jp\0" -"tv.bb\0firm.nf\0" -"udine.it\0" -"nagasaki.jp\0" +"mil.kz\0" +"ac.ir\0le.it\0" +"school.za\0gripe\0" +"svizzera.museum\0" +"b\xc3\xa6rum.no\0" +"gyeongbuk.kr\0" +"saskatchewan.museum\0per.sg\0mysecuritycamera.net\0" +"la.us\0" +"mil.lv\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.cn\0nagato.yamaguchi.jp\0mil.mg\0" +"takehara.hiroshima.jp\0sarl\0" +"ac.jp\0" +"gjovik.no\0" +"historyofscience.museum\0" +"chiryu.aichi.jp\0broadway\0" +"not.br\0" +"mil.mv\0" +"mil.ng\0" +"nis.za\0fly\0" +"yaotsu.gifu.jp\0osaki.miyagi.jp\0mil.my\0mil.ni\0" +"kagami.kochi.jp\0mil.mz\0" +"davvenj\xc3\xa1rga.no\0no-ip.biz\0" +"ac.kr\0" +"hazu.aichi.jp\0" +"mil.no\0kobierzyce.pl\0boutique\0" +"\xe4\xb8\x80\xe5\x8f\xb7\xe5\xba\x97\0" +"ac.lk\0lanbib.se\0" +"\xe5\xb2\x90\xe9\x98\x9c.jp\0" +"k12.mo.us\0" +"isa-geek.org\0" +"operaunite.com\0" +"seiro.niigata.jp\0mil.nz\0" +"ofunato.iwate.jp\0ac.ma\0" +"nara.jp\0" +"modalen.no\0" +"ac.me\0" +"epost\0" +"alta.no\0" +"mil.pe\0" +"freemasonry.museum\0" +"mil.ph\0" +"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0dyndns-at-work.com\0" +"shimoji.okinawa.jp\0" +"mil.pl\0" +"barlettatraniandria.it\0" +"foo\0" +"ac.mu\0stargard.pl\0" +"schokoladen.museum\0ac.mw\0mil.qa\0" +"verdal.no\0save\0" +"\xe7\x86\x8a\xe6\x9c\xac.jp\0ac.ni\0" +"ac.mz\0naturbruksgymn.se\0" +"b\xc3\xa5tsfjord.no\0\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" +"fox\0" +"tysv\xc3\xa6r.no\0" +"5.bg\0mil.py\0" +"eidsberg.no\0" +"barcelona.museum\0" +"ks.ua\0" "dni.us\0" -"luroy.no\0" -"tv.bo\0education.museum\0cooking\0" -"kagawa.jp\0" -"ac.rs\0" -"tv.br\0aq.it\0ba.it\0" -"usgarden.museum\0ac.ru\0ac.se\0" -"ac.rw\0aig\0" -"panama.museum\0bahcavuotna.no\0stord.no\0" -"shibuya.tokyo.jp\0" -"rehab\0" -"consultant.aero\0harstad.no\0" -"spjelkavik.no\0moareke.no\0" -"ono.fukui.jp\0" -"ac.th\0" -"imageandsound.museum\0" -"ac.sz\0ac.tj\0" -"malbork.pl\0" -"usa.oita.jp\0" -"bahn.museum\0educational.museum\0" -"stjordalshalsen.no\0" -"kozagawa.wakayama.jp\0" -"uozu.toyama.jp\0" -"ac.ug\0s3-us-west-1.amazonaws.com\0" -"education\0" -"ac.tz\0" -"pharmaciens.km\0ac.uk\0" -"hachinohe.aomori.jp\0" -"of.by\0ha.no\0" -"qsl.br\0to.it\0okayama.jp\0higashi.okinawa.jp\0" -"online\0" -"maebashi.gunma.jp\0" -"valleaosta.it\0kushimoto.wakayama.jp\0" -"pomorze.pl\0" -"salat.no\0" -"surrey.museum\0" -"ichinoseki.iwate.jp\0seat\0" -"tokai.aichi.jp\0abiko.chiba.jp\0numata.gunma.jp\0for-better.biz\0" -"tas.edu.au\0nationalheritage.museum\0" -"ac.vn\0sopot.pl\0" -"tambov.ru\0" -"redstone\0" -"mx.na\0est-le-patron.com\0" -"amli.no\0" -"higashiosaka.osaka.jp\0auto.pl\0" -"omitama.ibaraki.jp\0" -"dynalias.com\0" -"no.it\0" -"bir.ru\0" -"haibara.shizuoka.jp\0" -"suwa.nagano.jp\0" -"recreation.aero\0jewishart.museum\0rade.no\0" -"shingu.fukuoka.jp\0warmia.pl\0" -"flesberg.no\0hemne.no\0" -"minamidaito.okinawa.jp\0" -"station.museum\0bo.telemark.no\0" -"kitanakagusuku.okinawa.jp\0" -"nesodden.no\0vologda.ru\0casino\0" -"itoigawa.niigata.jp\0" -"misawa.aomori.jp\0tsubata.ishikawa.jp\0maibara.shiga.jp\0" -"exchange.aero\0" -"tv.im\0seek\0" -"toon.ehime.jp\0" -"kyiv.ua\0" -"tirol\0" -"tv.it\0" -"phoenix.museum\0" -"stjordal.no\0" -"yonabaru.okinawa.jp\0" -"akabira.hokkaido.jp\0aguni.okinawa.jp\0" -"yugawara.kanagawa.jp\0" -"kiyose.tokyo.jp\0" -"powiat.pl\0lomza.pl\0" -"lans.museum\0mex.com\0" -"gifu.gifu.jp\0" -"sel.no\0lib.ut.us\0" -"e.bg\0film.museum\0" -"fortmissoula.museum\0" -"itano.tokushima.jp\0yamanobe.yamagata.jp\0" -"honjo.akita.jp\0ginan.gifu.jp\0" -"r\xc3\xa1hkker\xc3\xa1vju.no\0" -"bar\0" -"presse.ci\0bbc\0" -"bo.it\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0ac.nz\0embaixada.st\0gov.nc.tr\0" +"mutsu.aomori.jp\0figueres.museum\0" +"tsukumi.oita.jp\0diskstation.me\0" +"ujiie.tochigi.jp\0" +"halsa.no\0" +"flakstad.no\0ac.pa\0gal\0" +"realtor\0dyndns-remote.com\0" +"gap\0" +"inawashiro.fukushima.jp\0ks.us\0" +"\xe0\xa8\xad\xe0\xa8\xbe\xe0\xa8\xb0\xe0\xa8\xa4\0" +"tsunan.niigata.jp\0" +"lg.jp\0" +"mil.ru\0" +"tvedestrand.no\0" +"mil.rw\0" +"asso.fr\0mil.sh\0" +"village.museum\0" "minakami.gunma.jp\0" -"hapmir.no\0cc.mi.us\0is-a-teacher.com\0" -"kasugai.aichi.jp\0" -"jewelry.museum\0gulen.no\0dvag\0" -"engerdal.no\0" -"achi.nagano.jp\0serveftp.net\0" -"khv.ru\0" -"morotsuka.miyazaki.jp\0tarama.okinawa.jp\0ruhr\0" -"laakesvuemie.no\0is-a-caterer.com\0" -"onga.fukuoka.jp\0" -"khmelnytskyi.ua\0" -"messina.it\0bcn\0" -"fhs.no\0" -"berlin.museum\0alipay\0infiniti\0" -"adult.ht\0" -"tv.na\0name\0" -"vao.it\0zachpomor.pl\0" -"\xc3\xa5rdal.no\0herokuapp.com\0" -"karatsu.saga.jp\0gov.nc.tr\0" -"sydney\0uy.com\0" -"imperia.it\0turen.tn\0" -"time.museum\0" -"\xd9\x85\xd9\x88\xd8\xa8\xd8\xa7\xd9\x8a\xd9\x84\xd9\x8a\0" -"lighting\0" -"matsubara.osaka.jp\0rnu.tn\0" +"frl\0" +"ac.pr\0saxo\0" +"hidaka.wakayama.jp\0" +"kamiizumi.saitama.jp\0" +"jar.ru\0" +"gouv.fr\0" +"kahoku.ishikawa.jp\0habikino.osaka.jp\0" +"mil.st\0" +"etne.no\0verm\xc3\xb6gensberater\0" +"asso.gp\0kani.gifu.jp\0prod\0" +"uk.com\0" +"allstate\0international\0prof\0" +"mil.sy\0" +"mil.tj\0wang\0\xe6\x97\xb6\xe5\xb0\x9a\0" +"mil.tm\0" +"milan.it\0xihuan\0is-a-libertarian.com\0" +"mil.to\0\xe6\x9c\xba\xe6\x9e\x84\0" +"milano.it\0" +"imamat\0" +"mil.tr\0" +"nakama.fukuoka.jp\0malopolska.pl\0" +"noboribetsu.hokkaido.jp\0cultural.museum\0mil.tw\0from-md.com\0" +"nishinoshima.shimane.jp\0" +"kazuno.akita.jp\0celtic.museum\0" +"asso.ht\0mil.tz\0" +"yokaichiba.chiba.jp\0" +"shizukuishi.iwate.jp\0ac.rs\0gdn\0" +"natura\0" +"durham.museum\0ac.ru\0ac.se\0" +"gea\0" +"ac.rw\0ftr\0" +"gouv.ht\0" +"tokai.ibaraki.jp\0mil.vc\0apartments\0" +"kouhoku.saga.jp\0mil.ve\0" +"gen.in\0" +"mil.uy\0" +"piemonte.it\0krokstadelva.no\0enterprises\0" +"reggioemilia.it\0duck\0" +"sayama.osaka.jp\0fun\0" +"hyuga.miyazaki.jp\0" +"localhistory.museum\0lib.wa.us\0" +"asso.bj\0koto.shiga.jp\0doesntexist.org\0" +"lib.ks.us\0pimienta.org\0" +"ac.th\0" +"barefoot\0pgfog.com\0" +"7.bg\0gj\xc3\xb8vik.no\0ac.sz\0ac.tj\0" +"stavropol.ru\0" +"suifu.ibaraki.jp\0" +"gouv.bj\0illustration.museum\0" +"sn\xc3\xa5sa.no\0" +"asso.ci\0hatogaya.saitama.jp\0maryland.museum\0dnshome.de\0" +"dev-myqnapcloud.com\0" +"ac.ug\0neat-url.com\0" +"li.it\0" +"virginia.museum\0kosher\0" +"ag.it\0ac.tz\0" +"ac.uk\0watches\0" +"\xd0\xba\xd0\xbe\xd0\xbc\0" +"gouv.ci\0" +"hasura-app.io\0" +"galsa.no\0kddi\0teaches-yoga.com\0" +"freeboxos.com\0" +"fl.us\0rackmaze.com\0" +"jur.pro\0" +"tozsde.hu\0sp.leg.br\0" +"collection.museum\0" +"\xe0\xa4\xb8\xe0\xa4\x82\xe0\xa4\x97\xe0\xa4\xa0\xe0\xa4\xa8\0" +"ac.vn\0" +"!city.sendai.jp\0convent.museum\0suzuki\0" +"kamo.kyoto.jp\0" +"morioka.iwate.jp\0" +"asso.dz\0" +"mil.za\0" +"kawaue.gifu.jp\0" +"email\0fitness\0" +"film.hu\0" +"chirurgiens-dentistes.fr\0fidelity\0" +"monster\0" +"skien.no\0" +"fyi\0" +"aero\0nrw.museum\0wolomin.pl\0" +"project.museum\0" +"eng.pro\0" +"k12.ok.us\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0mil.zm\0" +"k12.id.us\0" +"k12.ca.us\0" +"saotome.st\0" +"honjo.saitama.jp\0" +"h\xc3\xb8nefoss.no\0" +"b\xc3\xb8mlo.no\0" +"living.museum\0" +"dnsiskinky.com\0" +"lig.it\0" +"auto.pl\0" +"niikappu.hokkaido.jp\0" "seaport.museum\0" -"assassination.museum\0" -"ikeda.fukui.jp\0iinet\0" -"doosan\0" -"it.ao\0idv.hk\0e12.ve\0" -"shari.hokkaido.jp\0nahari.kochi.jp\0" -"trader.aero\0nh.us\0" -"takatori.nara.jp\0" -"columbia.museum\0" -"city\0is-a-player.com\0" -"presse.fr\0shimoji.okinawa.jp\0numazu.shizuoka.jp\0upow.gov.pl\0" +"vibo-valentia.it\0" +"mari.ru\0homeftp.org\0" +"costume.museum\0sydney\0" +"gen.nz\0" +"aioi.hyogo.jp\0" +"oguchi.aichi.jp\0alaska.museum\0pinb.gov.pl\0" +"nnov.ru\0" +"ac.za\0" +"lib.la.us\0" +"isa-geek.com\0" +"9.bg\0hokkaido.jp\0kitadaito.okinawa.jp\0technology.museum\0fuettertdasnetz.de\0" +"gangaviika.no\0" +"gd.cn\0samukawa.kanagawa.jp\0bahcavuotna.no\0" +"miasta.pl\0lg.ua\0gle\0shopping\0de.com\0" +"money.museum\0jpmorgan\0" +"ac.zm\0" +"kumiyama.kyoto.jp\0izumo.shimane.jp\0agency\0" +"linde\0" +"kamikawa.saitama.jp\0" +"asuke.aichi.jp\0gs.tm.no\0" +"gs.nt.no\0juegos\0" +"ltda\0" +"fr.it\0fishing\0" +"is-a-financialadvisor.com\0" +"kitagawa.miyazaki.jp\0plc.ly\0workisboring.com\0" +"*.sendai.jp\0" +"tohnosho.chiba.jp\0" +"wi.us\0" +"blogdns.com\0" +"ozora.hokkaido.jp\0\xe7\x8f\xa0\xe5\xae\x9d\0" +"davvenjarga.no\0" +"shichinohe.aomori.jp\0meiwa.mie.jp\0gmo\0" +"yao.osaka.jp\0kms.ru\0" +"otake.hiroshima.jp\0" +"somna.no\0tours\0publishproxy.com\0" +"chintai\0" +"s3-sa-east-1.amazonaws.com\0" +"toyotsu.fukuoka.jp\0busan.kr\0df.leg.br\0" +"botanical.museum\0gmx\0" +"fbxos.fr\0" +"hekinan.aichi.jp\0" +"philately.museum\0" +"dodge\0" +"otaki.saitama.jp\0" +"kinokawa.wakayama.jp\0" +"trentino-sudtirol.it\0motosu.gifu.jp\0cern\0" +"asahi.yamagata.jp\0from-il.com\0" +"lasalle\0" +"hitachiota.ibaraki.jp\0" +"student.aero\0" +"kakuda.miyagi.jp\0" +"mmafan.biz\0" +"florist\0goo\0" +"gop\0pramerica\0" +"omuta.fukuoka.jp\0got\0" +"gov\0" +"indianapolis.museum\0" +"finland.museum\0likes-pie.com\0" +"gotsu.shimane.jp\0" +"sling\0" +"gen.tr\0" +"r\xc3\xb8""d\xc3\xb8y.no\0" +"hokksund.no\0" +"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0" +"am.br\0duns\0" +"odesa.ua\0myeffect.net\0" +"sch.ae\0" +"es.eu.org\0" +"realestate.pl\0" +"telecity\0" +"harvestcelebration.museum\0" +"etnedal.no\0krasnodar.su\0" +"hirakata.osaka.jp\0" +"castres.museum\0" +"lucania.it\0tainai.niigata.jp\0" +"gs.of.no\0hemne.no\0skype\0" +"matsuzaki.shizuoka.jp\0\xe0\xaa\xad\xe0\xaa\xbe\xe0\xaa\xb0\xe0\xaa\xa4\0" +"saga.jp\0" +"ieee\0" +"amursk.ru\0" +"hbo\0" +"akita.akita.jp\0netbank\0" +"ky.us\0" +"nov.ru\0" +"omega\0" +"fudai.iwate.jp\0furniture\0" +"sanagochi.tokushima.jp\0turen.tn\0dvag\0" +"asakawa.fukushima.jp\0" +"egyptian.museum\0" +"natuurwetenschappen.museum\0" +"xperia\0est-mon-blogueur.com\0" +"cymru.museum\0" +"moroyama.saitama.jp\0hikari.yamaguchi.jp\0" +"nov.su\0" +"hagebostad.no\0" +"trentino.it\0shirahama.wakayama.jp\0" +"fauske.no\0" +"sopot.pl\0" +"plc.uk\0" +"usa.museum\0" +"chernovtsy.ua\0" +"vefsn.no\0" +"asso.re\0android\0" +"iveco\0" +"latina.it\0kitaaiki.nagano.jp\0" +"tsuno.miyazaki.jp\0fund\0" +"unnan.shimane.jp\0" +"philadelphiaarea.museum\0" +"nomi.ishikawa.jp\0sumita.iwate.jp\0" +"lugansk.ua\0" +"mansion.museum\0" +"media.museum\0" +"chungbuk.kr\0" +"gausdal.no\0slupsk.pl\0" +"troms\xc3\xb8.no\0" +"gent\0hobby-site.com\0" +"vaga.no\0" +"stackspace.space\0" +"fresenius\0" +"ullensvang.no\0gouv.rw\0" +"us.eu.org\0" +"sor-odal.no\0" +"cc.nv.us\0" +"fujikawaguchiko.yamanashi.jp\0gouv.sn\0global.prod.fastly.net\0" +"inashiki.ibaraki.jp\0sebastopol.ua\0cc.ct.us\0" +"togitsu.nagasaki.jp\0omaha.museum\0buzz\0" +"tateshina.nagano.jp\0edu.eu.org\0" +"lo.it\0" +"goodhands\0" +"mysecuritycamera.org\0" +"tysvar.no\0" +"democrat\0" +"adachi.tokyo.jp\0" +"delivery\0" +"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0" +"greta.fr\0szkola.pl\0" +"iitate.fukushima.jp\0hida.gifu.jp\0" +"sch.id\0tonami.toyama.jp\0" +"asso.nc\0odda.no\0" +"dgca.aero\0" +"kommune.no\0" +"build\0scor\0" +"scot\0" +"kimitsu.chiba.jp\0lunner.no\0salat.no\0\xd2\x9b\xd0\xb0\xd0\xb7\0coupons\0" +"sch.ir\0" +"hiv\0" +"gotdns.com\0" +"koza.wakayama.jp\0" +"ro.com\0" +"otsuchi.iwate.jp\0k12.ny.us\0" +"edogawa.tokyo.jp\0" +"sch.jo\0algard.no\0" +"hasama.oita.jp\0" +"hara.nagano.jp\0" +"kitakata.miyazaki.jp\0elblag.pl\0" +"horology.museum\0" +"arboretum.museum\0sciencehistory.museum\0" +"commbank\0" +"kounosu.saitama.jp\0" +"arq.br\0" +"ikeda.osaka.jp\0" +"conference.aero\0" +"shinonsen.hyogo.jp\0hkt\0" +"tynset.no\0" +"okawa.kochi.jp\0" +"meland.no\0" +"\xc3\xa5seral.no\0" +"kl\xc3\xa6""bu.no\0" +"lib.wy.us\0" +"canada.museum\0" +"sch.lk\0" +"protonet.io\0" +"haga.tochigi.jp\0allfinanz\0" +"shiroishi.miyagi.jp\0jetzt\0" +"miyazu.kyoto.jp\0" +"tagawa.fukuoka.jp\0zoology.museum\0" +"prd.fr\0mishima.fukushima.jp\0" +"choyo.kumamoto.jp\0cc.oh.us\0" +"kharkiv.ua\0" +"yatsushiro.kumamoto.jp\0" +"sch.ly\0fi.eu.org\0" +"business\0" +"estate\0" +"ao.it\0bari.it\0antiques.museum\0" +"property\0" +"!city.kitakyushu.jp\0" +"svalbard.no\0" +"happou.akita.jp\0skedsmokorset.no\0" +"kumakogen.ehime.jp\0" +"taketa.oita.jp\0" +"sch.ng\0ak.us\0" +"graz.museum\0krakow.pl\0" +"meet\0" +"ulsan.kr\0" +"asso.km\0cartoonart.museum\0" +"teramo.it\0" +"matsumoto.kagoshima.jp\0" +"iheya.okinawa.jp\0" +"\xd9\xbe\xd8\xa7\xda\xa9\xd8\xb3\xd8\xaa\xd8\xa7\xd9\x86\0" +"gouv.km\0" +"is-into-anime.com\0" +"yawara.ibaraki.jp\0" +"sic.it\0" +"rovno.ua\0" +"asahikawa.hokkaido.jp\0nagatoro.saitama.jp\0hot\0" +"how\0" +"everbank\0" +"asso.mc\0getmyip.com\0" +"campania.it\0" +"capital\0" +"kawanishi.yamagata.jp\0rsvp\0" +"\xe9\xb9\xbf\xe5\x85\x90\xe5\xb3\xb6.jp\0" +"glogow.pl\0recht.pro\0sch.qa\0" +"jpn.com\0" +"is-a-candidate.org\0" +"i234.me\0" +"ws.na\0" +"gouv.ml\0" +"mydissent.net\0" +"prd.km\0" +"qld.gov.au\0" +"bc.ca\0" +"ogi.saga.jp\0" +"arts.museum\0mosj\xc3\xb8""en.no\0isa-geek.net\0" +"is-a-caterer.com\0" +"lib.mi.us\0gb.com\0" +"katsushika.tokyo.jp\0naustdal.no\0" +"nanao.ishikawa.jp\0" +"yoshida.shizuoka.jp\0ibm\0" +"\xd0\xbc\xd0\xba\xd0\xb4\0" +"austin.museum\0outsystemscloud.com\0" +"ichihara.chiba.jp\0" +"cookingchannel\0" +"sch.sa\0corsica\0" +"ice\0" +"kiso.nagano.jp\0" +"gs.ol.no\0from-wi.com\0" +"friuli-venezia-giulia.it\0mc.it\0" +"prd.mg\0software\0" +"aq.it\0ba.it\0" +"toho.fukuoka.jp\0" +"fjaler.no\0" +"hareid.no\0" +"dnsalias.com\0" +"stange.no\0" +"htc\0" +"nanto.toyama.jp\0icu\0" +"kristiansund.no\0" +"yekaterinburg.ru\0" +"certification.aero\0" +"harstad.no\0" +"ichinomiya.aichi.jp\0" +"ibestad.no\0" +"logistics.aero\0" +"arendal.no\0" +"yaese.okinawa.jp\0hoylandet.no\0midsund.no\0" +"endoftheinternet.org\0" +"ohtawara.tochigi.jp\0" +"koeln.museum\0" +"kyonan.chiba.jp\0" +"meme\0to.leg.br\0" +"hashikami.aomori.jp\0" +"k12.tx.us\0" +"association.aero\0" +"k12.dc.us\0" +"gorizia.it\0dealer\0" +"miho.ibaraki.jp\0kotoura.tottori.jp\0" +"takazaki.miyazaki.jp\0" +"asaminami.hiroshima.jp\0skierva.no\0ifm\0" +"homeftp.net\0" +"naval.museum\0" +"histoire.museum\0mango\0" +"bristol.museum\0" +"vologda.su\0" +"ontario.museum\0" +"\xd0\xbc\xd0\xbe\xd0\xbd\0" +"*.compute.estate\0" +"higashiyoshino.nara.jp\0alt.za\0" +"chino.nagano.jp\0" +"gjerstad.no\0menu\0" +"rl.no\0" +"\xe3\x82\xbb\xe3\x83\xbc\xe3\x83\xab\0zappos\0s3-external-1.amazonaws.com\0from-sc.com\0" +"chelyabinsk.ru\0" +"haram.no\0" +"fujikawa.shizuoka.jp\0" +"microlight.aero\0" +"automotive.museum\0virtual.museum\0" +"yurihonjo.akita.jp\0akiruno.tokyo.jp\0plantation.museum\0" +"myqnapcloud.com\0" +"rn.it\0tuxfamily.org\0" +"lu.it\0me.it\0noto.ishikawa.jp\0laakesvuemie.no\0" +"bokn.no\0" +"takaoka.toyama.jp\0" +"is-an-anarchist.com\0" +"yakumo.hokkaido.jp\0ogano.saitama.jp\0" +"bestbuy\0" +"ayabe.kyoto.jp\0ma.us\0theater\0" +"mosjoen.no\0" +"rissa.no\0" +"amagasaki.hyogo.jp\0" +"taishi.osaka.jp\0snillfjord.no\0vologda.ru\0s3-us-west-2.amazonaws.com\0" +"macerata.it\0" +"stj\xc3\xb8rdalshalsen.no\0" +"dazaifu.fukuoka.jp\0" +"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" +"sch.zm\0ventures\0" +"florence.it\0brasil.museum\0" +"rzeszow.pl\0homedepot\0" +"piw.gov.pl\0design\0" +"sardegna.it\0alibaba\0" "arna.no\0" -"muroto.kochi.jp\0" -"l.bg\0" -"kamogawa.chiba.jp\0" -"mosvik.no\0" -"frankfurt.museum\0mo-i-rana.no\0" -"nichinan.miyazaki.jp\0" -"kitagawa.kochi.jp\0" -"kr\xc3\xb8""dsherad.no\0skierv\xc3\xa1.no\0us.com\0from-oh.com\0" -"arao.kumamoto.jp\0" -"ryazan.ru\0" -"hurum.no\0" -"kitashiobara.fukushima.jp\0ichinohe.iwate.jp\0" -"louvre.museum\0moma.museum\0of.no\0" -"\xe4\xb8\x89\xe9\x87\x8d.jp\0shingu.wakayama.jp\0" -"cupcake.is\0" -"limanowa.pl\0zuerich\0" -"decorativearts.museum\0" -"gouv.rw\0lib.ct.us\0" -"andria-barletta-trani.it\0market\0" -"nomi.ishikawa.jp\0nakano.nagano.jp\0" +"tsuga.tochigi.jp\0" +"shichikashuku.miyagi.jp\0" +"ddns.me\0" +"kumano.hiroshima.jp\0nakatane.kagoshima.jp\0k12.de.us\0seat\0" +"pa.gov.pl\0" +"rennes\xc3\xb8y.no\0" +"nishiaizu.fukushima.jp\0" +"avellino.it\0" +"cnt.br\0eu.int\0bolzano.it\0" +"kiyama.saga.jp\0\xe3\x83\x9d\xe3\x82\xa4\xe3\x83\xb3\xe3\x83\x88\0" +"heroy.nordland.no\0" +"ggee\0" +"from-ne.com\0" +"chuo.chiba.jp\0kyoto\0" +"shinto.gunma.jp\0" +"network\0" +"*.platform.sh\0" +"science\0" +"hasami.nagasaki.jp\0" +"lib.me.us\0" +"marine.ru\0" +"rackmaze.net\0" +"baths.museum\0uscountryestate.museum\0damnserver.com\0" +"ing\0" +"kvinnherad.no\0siellak.no\0" +"chat\0" +"net.ac\0tambov.ru\0ink\0" +"net.ae\0toyono.osaka.jp\0nishiazai.shiga.jp\0" +"net.af\0niki.hokkaido.jp\0" +"net.ag\0r\xc3\xa1isa.no\0\xd1\x83\xd0\xbf\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" +"net.ai\0" +"harima.hyogo.jp\0" +"net.al\0int\0dinosaur.museum\0" +"liguria.it\0" +"net.ba\0health.nz\0seek\0" +"net.ar\0net.bb\0" +"net.au\0router.management\0" +"net.bh\0" +"net.az\0" +"tabuse.yamaguchi.jp\0ae.org\0" +"tokai.aichi.jp\0khv.ru\0" +"net.bm\0zoological.museum\0" +"net.bo\0wegrow.pl\0" +"fantasyleague.cc\0" +"net.br\0" +"net.bs\0" +"net.bt\0" +"fortworth.museum\0" +"net.ci\0" +"net.bz\0luxe\0" +"serveblog.net\0" +"pistoia.it\0" +"net.cm\0uchiko.ehime.jp\0" +"net.cn\0" +"net.co\0izena.okinawa.jp\0iwata.shizuoka.jp\0" +"r\xc3\xa6lingen.no\0zp.gov.pl\0" +"nagano.jp\0" +"net.cu\0monzaedellabrianza.it\0k12.co.us\0\xec\x82\xbc\xec\x84\xb1\0" +"tube\0" +"net.cw\0" +"net.cy\0time.no\0" +"aerobatic.aero\0" +"net.dm\0" +"press.cy\0net.do\0" +"komono.mie.jp\0" +"cim.br\0" +"net.ec\0" +"kagoshima.jp\0rochester.museum\0plo.ps\0myvnc.com\0" +"net.eg\0" +"ruhr\0" +"leka.no\0" +"net.dz\0obu.aichi.jp\0jcb\0" +"and.museum\0" +"krym.ua\0" +"ako.hyogo.jp\0" +"oketo.hokkaido.jp\0" +"helsinki\0" +"net.et\0misato.akita.jp\0bbs.tr\0" +"sd.cn\0kostroma.ru\0" +"\xe5\xae\xae\xe5\x9f\x8e.jp\0jcp\0" +"hb.cn\0" +"ist\0" +"onyourside\0" +"ba.leg.br\0" +"mi.it\0toyama.jp\0me.tz\0" +"aver\xc3\xb8y.no\0k-uralsk.ru\0me.uk\0" +"net.ge\0bg.it\0" +"net.gg\0hyllestad.no\0" +"singles\0" +"yasaka.nagano.jp\0" +"security\0from-az.net\0" +"net.gl\0sardinia.it\0sakai.osaka.jp\0me.us\0" +"ushiku.ibaraki.jp\0r\xc3\xa5holt.no\0" +"net.gn\0as.us\0itv\0" +"net.gp\0" +"educator.aero\0net.gr\0dsmynas.org\0" +"net.gt\0technology\0" +"vennesla.no\0dunlop\0" +"takayama.gifu.jp\0" +"net.gy\0" +"\xe5\xb2\xa1\xe5\xb1\xb1.jp\0" +"net.hk\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0\xc3\xa5lg\xc3\xa5rd.no\0ferrero\0" +"net.hn\0" +"minamiyamashiro.kyoto.jp\0" +"unicom\0" +"massa-carrara.it\0" +"net.ht\0net.id\0" +"health.vn\0" +"iwc\0" +"net.il\0hizen.saga.jp\0" +"net.im\0owani.aomori.jp\0k12.tn.us\0" +"net.in\0os.hedmark.no\0" +"trieste.it\0mc.eu.org\0" +"net.iq\0" +"net.ir\0" +"passenger-association.aero\0net.is\0" +"stokke.no\0" +"net.je\0us.org\0" +"sweetpepper.org\0" +"iwakura.aichi.jp\0" +"lardal.no\0" +"lancashire.museum\0eidskog.no\0" +"blogsyte.com\0" +"net.jo\0" +"broke-it.net\0" +"channel\0from-ok.com\0" +"net.kg\0" +"net.ki\0vista\0" +"sakyo.kyoto.jp\0" +"akaiwa.okayama.jp\0verisign\0" +"lib.ma.us\0" +"net.kn\0is-into-cars.com\0" +"lib.as.us\0lt.eu.org\0" +"grainger\0" +"maniwa.okayama.jp\0net.la\0" +"net.lb\0" +"net.lc\0" +"usui.fukuoka.jp\0nagi.okayama.jp\0" +"cc.or.us\0" +"amur.ru\0tom.ru\0jio\0" +"ryugasaki.ibaraki.jp\0jeju.kr\0sko.gov.pl\0" +"net.ky\0" +"asti.it\0net.kz\0" +"net.lk\0" +"montreal.museum\0" +"sibenik.museum\0" +"gr.it\0sakuragawa.ibaraki.jp\0" +"bi.it\0" +"net.ma\0oceanographique.museum\0" +"net.lr\0" +"kamioka.akita.jp\0" +"ikaruga.nara.jp\0epson\0" +"net.me\0wy.us\0" +"net.lv\0hoyanger.no\0" +"net.ly\0" +"lakas.hu\0gr.jp\0takagi.nagano.jp\0net.mk\0" +"net.ml\0" +"stadt.museum\0school\0" +"kahoku.yamagata.jp\0karmoy.no\0" +"net.mo\0" +"kawajima.saitama.jp\0" +"treviso.it\0kamiamakusa.kumamoto.jp\0net.ms\0pittsburgh.museum\0" +"net.mt\0" +"koganei.tokyo.jp\0net.mu\0" +"net.mv\0net.nf\0\xe3\x83\x95\xe3\x82\xa1\xe3\x83\x83\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\0" +"net.mw\0net.ng\0" +"yazu.tottori.jp\0net.mx\0" +"net.my\0net.ni\0" +"net.mz\0" +"jlc\0" +"hichiso.gifu.jp\0tatarstan.ru\0" +"am.leg.br\0" +"shinichi.hiroshima.jp\0onagawa.miyagi.jp\0net.nr\0" +"jll\0" +"togo.aichi.jp\0" +"lipsy\0" +"net.nz\0k12.in.us\0" +"ishikawa.jp\0net.om\0" +"naklo.pl\0globo\0" +"gv.ao\0" +"net.pa\0" +"yamanouchi.nagano.jp\0koebenhavn.museum\0" +"gv.at\0net.pe\0" +"mihama.mie.jp\0net.ph\0jmp\0" +"theatre\0" +"sa.edu.au\0" +"net.pk\0" +"wildlife.museum\0vanylven.no\0net.pl\0" +"sagae.yamagata.jp\0botany.museum\0" +"net.pn\0abbott\0" +"nishikawa.yamagata.jp\0" +"selfip.net\0" +"net.qa\0" +"net.pr\0aigo\0jnj\0" +"net.ps\0ryukyu\0" +"austrheim.no\0net.pt\0" +"takahashi.okayama.jp\0" +"mi.th\0lib.sd.us\0" +"nishiawakura.okayama.jp\0net.py\0" +"sh.cn\0" +"mo.cn\0tempio-olbia.it\0gamo.shiga.jp\0weir\0" +"org.ac\0sb.ua\0" +"org.ae\0hotels\0" +"org.af\0" +"org.ag\0fetsund.no\0" +"takatori.nara.jp\0" +"org.ai\0" +"orange\0" +"mihama.wakayama.jp\0tuva.su\0" +"org.al\0seoul.kr\0" +"active\0" +"lerdal.no\0servehumour.com\0" +"jot\0" +"org.ba\0ingatlan.hu\0" +"org.ar\0org.bb\0" +"po.gov.pl\0" +"yasugi.shimane.jp\0is-an-actor.com\0" +"org.au\0net.sa\0barclays\0joy\0" +"net.sb\0mi.us\0" +"net.sc\0" +"org.bh\0echizen.fukui.jp\0net.sd\0nissan\0" +"org.bi\0net.ru\0" +"org.az\0\xe7\xb5\x84\xe7\xbb\x87.hk\0" +"net.rw\0net.sg\0" +"a\xc3\xa9roport.ci\0net.sh\0" +"org.bm\0" +"tateyama.chiba.jp\0" +"org.bo\0" +"uji.kyoto.jp\0net.sl\0" +"org.br\0mantova.it\0" +"org.bs\0s\xc3\xb8r-odal.no\0net.so\0nissay\0" +"org.bt\0" +"org.bw\0" +"aosta.it\0net.st\0*.triton.zone\0" +"org.ci\0" +"org.bz\0hakusan.ishikawa.jp\0kudoyama.wakayama.jp\0leirfjord.no\0" +"tos.it\0space.museum\0" +"ikeda.hokkaido.jp\0net.th\0iamallama.com\0" +"net.sy\0" +"org.cn\0langevag.no\0net.tj\0" +"org.co\0hirono.iwate.jp\0" +"shunan.yamaguchi.jp\0net.tm\0" +"rikubetsu.hokkaido.jp\0net.tn\0inc.hk\0" +"net.to\0ap.leg.br\0" +"org.cu\0kameyama.mie.jp\0net.ua\0" +"iwaizumi.iwate.jp\0losangeles.museum\0hob\xc3\xb8l.no\0net.tr\0" +"org.cw\0" +"net.tt\0" +"org.cy\0" +"afamilycompany\0" +"ggf.br\0tuva.ru\0net.tw\0" +"wada.nagano.jp\0" +"org.dm\0" +"schweiz.museum\0" +"org.do\0net.uk\0nikon\0" +"govt.nz\0\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\0" +"org.ec\0sexy\0" +"org.ee\0chesapeakebay.museum\0bingo\0" +"org.eg\0kamijima.ehime.jp\0net.vc\0" +"tenei.fukushima.jp\0\xc3\xa5""fjord.no\0net.ve\0" +"org.dz\0izumiotsu.osaka.jp\0" +"yamagata.ibaraki.jp\0obninsk.su\0" +"net.uy\0net.vi\0" +"kuji.iwate.jp\0net.uz\0" +"net.vn\0hdfcbank\0ftpaccess.cc\0" +"org.es\0" +"org.et\0" +"trentinosudtirol.it\0nakasatsunai.hokkaido.jp\0" +"franziskaner.museum\0sf.no\0lib.nm.us\0" +"net.vu\0" +"shibuya.tokyo.jp\0funahashi.toyama.jp\0" +"gx.cn\0" +"press.se\0mk.ua\0" +"esashi.hokkaido.jp\0" +"gamvik.no\0" +"abr.it\0" +"org.ge\0" +"gs.va.no\0" +"org.gg\0net.ws\0" +"org.gh\0mo.it\0lomza.pl\0zhitomir.ua\0cupcake.is\0" +"org.gi\0" +"beiarn.no\0" +"org.gl\0" +"is-by.us\0" +"ip6.arpa\0org.gn\0" +"org.gp\0sd.us\0" +"org.gr\0otofuke.hokkaido.jp\0" +"org.gt\0kfh\0" +"alsace\0exposed\0" +"nogi.tochigi.jp\0london.museum\0" +"aircraft.aero\0org.gy\0" +"courses\0" +"org.hk\0" +"org.hn\0" +"dlugoleka.pl\0" +"sorreisa.no\0mk.eu.org\0" +"org.ht\0" +"org.hu\0nishiizu.shizuoka.jp\0net.za\0" +"shimizu.shizuoka.jp\0" +"shiwa.iwate.jp\0natori.miyagi.jp\0haebaru.okinawa.jp\0" +"eu-central-1.compute.amazonaws.com\0" +"bern.museum\0" +"org.il\0mihara.hiroshima.jp\0" +"org.im\0higashishirakawa.gifu.jp\0aviation.museum\0" +"org.in\0" +"from-mn.com\0" +"org.iq\0net.zm\0" +"org.ir\0" +"org.is\0" +"jewelry\0static.land\0" +"org.je\0youtube\0" +"trentinosuedtirol.it\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xd8\xa9\0" +"donetsk.ua\0\xd0\xbe\xd1\x80\xd0\xb3\0" +"salerno.it\0shoo.okayama.jp\0stockholm\0" +"shibata.miyagi.jp\0" +"kia\0" +"beeldengeluid.museum\0" +"org.jo\0levanger.no\0" +"touch.museum\0" +"tsukigata.hokkaido.jp\0no-ip.ca\0qa2.com\0" +"takahata.yamagata.jp\0" +"shirosato.ibaraki.jp\0" +"org.kg\0mlbfan.org\0" +"abashiri.hokkaido.jp\0higashisumiyoshi.osaka.jp\0" +"org.ki\0kim\0" +"org.km\0" +"org.kn\0boldlygoingnowhere.org\0" +"org.kp\0" +"org.la\0vikna.no\0" +"org.lb\0" +"org.lc\0porsgrunn.no\0consulado.st\0" +"tsubata.ishikawa.jp\0" +"tur.ar\0gz.cn\0org.ky\0rv.ua\0" +"org.kz\0cc.va.us\0" +"org.lk\0press.ma\0" +"camera\0" +"org.ma\0\xc3\xb8ystre-slidre.no\0yalta.ua\0" +"org.lr\0" +"na.it\0org.ls\0lu.eu.org\0me.eu.org\0" +"bo.it\0org.me\0sauherad.no\0" +"org.lv\0" +"org.mg\0" +"columbus.museum\0kazimierz-dolny.pl\0e12.ve\0cloudns.pro\0" +"tur.br\0toon.ehime.jp\0org.ly\0" +"org.mk\0watchandclock.museum\0kvafjord.no\0" +"seirou.niigata.jp\0org.ml\0" +"org.mn\0rj.leg.br\0" +"org.mo\0" +"mine.nu\0" +"org.na\0" +"bifuka.hokkaido.jp\0volkenkunde.museum\0" +"org.ms\0" +"org.mt\0" +"org.mu\0" +"org.mv\0dyndns.biz\0" +"org.mw\0org.ng\0" +"urbinopesaro.it\0org.mx\0fedex\0" +"org.my\0org.ni\0varggat.no\0" +"org.mz\0" +"lindesnes.no\0mandal.no\0" +"volyn.ua\0" +"aoste.it\0" +"hakone.kanagawa.jp\0org.nr\0" +"date.hokkaido.jp\0money\0nokia\0lv.eu.org\0" +"toga.toyama.jp\0" +"yamanobe.yamagata.jp\0org.nz\0" +"itako.ibaraki.jp\0skole.museum\0" +"maritimo.museum\0org.om\0" +"from-ny.net\0" +"nosegawa.nara.jp\0org.pa\0" +"org.pe\0" +"org.pf\0" +"kamitsue.oita.jp\0blogspot.com.cy\0" +"satx.museum\0org.ph\0" +"zgorzelec.pl\0" +"mill.museum\0" +"ishikari.hokkaido.jp\0minami.tokushima.jp\0org.pk\0better-than.tv\0" +"org.pl\0gift\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0" +"org.pn\0" +"*.api.githubcloud.com\0" +"watch\0" +"meldal.no\0org.qa\0" +"org.pr\0is-a-bulls-fan.com\0" +"org.ps\0blogspot.com.ee\0" +"org.pt\0events\0" +"finance\0blogspot.com.eg\0" +"codespot.com\0" +"beppu.oita.jp\0bytom.pl\0" +"org.py\0" +"izhevsk.ru\0" +"h\xc3\xa1pmir.no\0" +"blogspot.com.ar\0" +"sn.cn\0" +"mw.gov.pl\0education\0blogspot.com.au\0" +"hl.cn\0" +"circus.museum\0" +"shinshiro.aichi.jp\0" +"suwalki.pl\0" +"kijo.miyazaki.jp\0sunndal.no\0snz.ru\0kpn\0" +"citi\0target\0" +"exchange\0" +"uchinomi.kagawa.jp\0" +"ms.it\0" +"shiki.saitama.jp\0org.ro\0" +"ca.it\0tokashiki.okinawa.jp\0blogspot.com.br\0" +"org.sa\0cn-north-1.compute.amazonaws.com.cn\0" +"org.sb\0" +"org.rs\0org.sc\0" +"moma.museum\0org.sd\0" +"yugawara.kanagawa.jp\0org.ru\0org.se\0" +"org.sg\0mo.us\0blogspot.com.by\0" +"mad.museum\0even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0org.sh\0" +"yatomi.aichi.jp\0" +"limanowa.pl\0" +"city\0" +"org.sl\0ddns.net\0" +"recreation.aero\0blogspot.com.co\0" +"org.sn\0" +"horokanai.hokkaido.jp\0org.so\0" +"krd\0lat\0" +"bolt.hu\0ojiya.niigata.jp\0" +"childrensgarden.museum\0law\0" +"fribourg.museum\0org.st\0" +"org.sv\0" +"kaminoyama.yamagata.jp\0dali.museum\0" +"higashiura.aichi.jp\0org.sy\0" +"rieti.it\0org.sz\0org.tj\0" +"v\xc3\xa6r\xc3\xb8y.no\0" +"taiji.wakayama.jp\0ms.kr\0" +"machida.tokyo.jp\0org.tm\0" +"org.tn\0" +"neyagawa.osaka.jp\0org.to\0" +"wiw.gov.pl\0" +"org.ua\0" +"org.tr\0" +"zagan.pl\0mex.com\0" +"org.tt\0" +"org.tw\0org.ug\0caseih\0" +"tec.ve\0" +"ikusaka.nagano.jp\0" +"jeonnam.kr\0org.uk\0" +"ascoli-piceno.it\0" +"homesecuritymac.com\0" +"miyako.iwate.jp\0yoshino.nara.jp\0" +"lupin\0blogspot.com.es\0" +"org.vc\0" +"is-a-anarchist.com\0" +"org.ve\0" +"chizu.tottori.jp\0monash\0" +"dscloud.biz\0" +"tananger.no\0" +"org.uy\0org.vi\0" +"org.uz\0" +"ca.na\0myshopblocks.com\0" +"ing.pa\0org.vn\0" +"stalbans.museum\0lds\0" +"kr.eu.org\0" +"isernia.it\0" +"matsue.shimane.jp\0org.vu\0dev.static.land\0" +"tomobe.ibaraki.jp\0" +"xenapponazure.com\0" +"hn.cn\0farmequipment.museum\0" +"\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xdb\x8c\xdb\x83\0" +"org.ws\0forgot.her.name\0" +"catania.it\0" +"fukumitsu.toyama.jp\0koya.wakayama.jp\0" +"agents.aero\0" +"bs.it\0" +"hidaka.kochi.jp\0" +"konsulat.gov.pl\0" +"aso.kumamoto.jp\0walmart\0" +"froland.no\0" +"hughes\0" +"ne.jp\0onga.fukuoka.jp\0" +"yamanashi.yamanashi.jp\0" +"presse.km\0" +"watarai.mie.jp\0" +"ass.km\0" +"h\xc3\xa6gebostad.no\0" +"bandai.fukushima.jp\0" +"org.za\0" +"is-into-cartoons.com\0" +"tochio.niigata.jp\0" +"futaba.fukushima.jp\0" +"production.aero\0ne.kr\0" +"monzaebrianza.it\0" +"lel.br\0" +"frosinone.it\0is-a-therapist.com\0" +"org.zm\0" +"futtsu.chiba.jp\0" +"tamakawa.fukushima.jp\0" +"nankoku.kochi.jp\0fuji.shizuoka.jp\0" +"dsmynas.net\0" +"myphotos.cc\0" +"\xe4\xb8\x89\xe9\x87\x8d.jp\0presse.ml\0pvt.k12.ma.us\0" +"bnpparibas\0" +"karuizawa.nagano.jp\0" "irish\0" -"logistics.aero\0molde.no\0axa\0industries\0" -"nagano.jp\0gouv.sn\0" -"technology.museum\0" -"press.museum\0s3-fips-us-gov-west-1.amazonaws.com\0" -"munakata.fukuoka.jp\0" -"rodoy.no\0" -"bolt.hu\0" -"flor\xc3\xb8.no\0khabarovsk.ru\0" -"yachiyo.chiba.jp\0miyama.fukuoka.jp\0" -"sanuki.kagawa.jp\0" -"im.it\0" -"bid\0" -"kitaura.miyazaki.jp\0tv.sd\0" -"shizukuishi.iwate.jp\0" -"corsica\0" -"pavia.it\0usui.fukuoka.jp\0" -"chesapeakebay.museum\0bio\0" -"atami.shizuoka.jp\0" -"nanae.hokkaido.jp\0" -"saitama.jp\0" -"ggf.br\0" -"s.bg\0" -"shobara.hiroshima.jp\0himi.toyama.jp\0" -"biz\0takko.aomori.jp\0" -"guovdageaidnu.no\0" -"shishikui.tokushima.jp\0" -"massa-carrara.it\0shimokawa.hokkaido.jp\0" -"erotika.hu\0oppeg\xc3\xa5rd.no\0" -"sayo.hyogo.jp\0" -"bentley\0" -"eidfjord.no\0hamaroy.no\0" -"bv.nl\0tv.tr\0" -"smola.no\0" -"ohira.tochigi.jp\0" -"botanicgarden.museum\0" -"ot.it\0pd.it\0" -"halsa.no\0troms\xc3\xb8.no\0\xd2\x9b\xd0\xb0\xd0\xb7\0" -"fr\xc3\xa6na.no\0" -"niigata.jp\0takayama.gifu.jp\0koshimizu.hokkaido.jp\0tv.tz\0" -"\xc3\xa5l.no\0" -"solar\0" -"belluno.it\0" -"interactive.museum\0lib.co.us\0us-west-2.compute.amazonaws.com\0" -"shikatsu.aichi.jp\0" -"nobeoka.miyazaki.jp\0" -"torsken.no\0" -"\xe9\x95\xb7\xe9\x87\x8e.jp\0iki.nagasaki.jp\0" -"express.aero\0" -"nysa.pl\0" -"miyawaka.fukuoka.jp\0gbiz\0" -"catanzaro.it\0" -"kiyosu.aichi.jp\0ikaruga.nara.jp\0" +"*.transurl.be\0" +"hitachi.ibaraki.jp\0kalisz.pl\0" +"beep.pl\0" +"kushimoto.wakayama.jp\0cc.na\0" +"yk.ca\0" +"kawanishi.nara.jp\0" +"nanbu.yamanashi.jp\0" +"tagajo.miyagi.jp\0" +"chikushino.fukuoka.jp\0ikeda.gifu.jp\0eu-west-1.compute.amazonaws.com\0cloudns.org\0" +"lib.ne.us\0" +"lib.il.us\0" +"hl.no\0akdn\0liaison\0" +"ota.gunma.jp\0\xd8\xa7\xd8\xaa\xd8\xb5\xd8\xa7\xd9\x84\xd8\xa7\xd8\xaa\0" +"suedtirol.it\0shitara.aichi.jp\0jinsekikogen.hiroshima.jp\0" +"szczytno.pl\0nc.tr\0" +"usculture.museum\0sochi.su\0" +"rr.leg.br\0" +"shaw\0" +"blogspot.com.mt\0" +"sp.it\0" +"flesberg.no\0blogspot.com.ng\0" +"ce.it\0olsztyn.pl\0" +"achi.nagano.jp\0" +"go.dyndns.org\0" +"shoes\0" +"geometre-expert.fr\0ms.us\0nc.us\0" +"ca.us\0" +"virtueeldomein.nl\0" +"online\0" +"alto-adige.it\0opencraft.hosting\0" +"naturalhistorymuseum.museum\0" +"\xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x82\xe0\xa6\xb2\xe0\xa6\xbe\0" +"\xe5\x81\xa5\xe5\xba\xb7\0" +"!www.ck\0valle-aosta.it\0ne.pw\0rns.tn\0" +"cincinnati.museum\0" +"rs.leg.br\0sc.leg.br\0*.transurl.eu\0" +"gateway.museum\0" +"roan.no\0" +"togakushi.nagano.jp\0oshima.tokyo.jp\0" +"higashi.fukushima.jp\0musashimurayama.tokyo.jp\0" +"is-certified.com\0" +"kaga.ishikawa.jp\0quicksytes.com\0" +"k12.ut.us\0" +"christiansburg.museum\0vindafjord.no\0k12.pa.us\0" +"kazan.ru\0blogspot.com.tr\0" +"claims\0knightpoint.systems\0" +"ueda.nagano.jp\0ringebu.no\0" +"leikanger.no\0" +"lol\0works\0" +"chiba.jp\0science-fiction.museum\0murmansk.su\0world\0" +"nago.okinawa.jp\0" +"jelenia-gora.pl\0goldpoint\0" +"nahari.kochi.jp\0estate.museum\0" +"mysecuritycamera.com\0" +"hanamaki.iwate.jp\0ube.yamaguchi.jp\0sorfold.no\0" +"fermo.it\0" +"lincoln\0" +"lpl\0" +"country\0" +"whoswho\0" +"hioki.kagoshima.jp\0musashino.tokyo.jp\0muosat.no\0lib.ms.us\0lib.nc.us\0" +"my.id\0" +"bu.no\0" +"north.museum\0is-a-soxfan.org\0" +"blackfriday\0" +"parma.it\0" +"group\0" +"cc.vi.us\0" +"masfjorden.no\0" +"trentino-sued-tirol.it\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"iizuna.nagano.jp\0sor-varanger.no\0engineering\0" +"man\0" +"nishihara.kumamoto.jp\0" +"sveio.no\0ne.ug\0map\0microsoft\0" +"her\xc3\xb8y.nordland.no\0mba\0" +"sr.it\0kouyama.kagoshima.jp\0" +"ne.tz\0" +"canon\0" +"kasugai.aichi.jp\0" +"guitars\0" +"oarai.ibaraki.jp\0selfip.org\0serveminecraft.net\0" +"teo.br\0kochi.jp\0berlev\xc3\xa5g.no\0ne.us\0" +"murmansk.ru\0" +"mel\xc3\xb8y.no\0shia\0" +"grp.lk\0" +"mcd\0" +"ome.tokyo.jp\0" +"izunokuni.shizuoka.jp\0" +"dyndns-work.com\0" +"rnu.tn\0" +"okawa.fukuoka.jp\0misaki.okayama.jp\0" +"hakuba.nagano.jp\0" +"owariasahi.aichi.jp\0s\xc3\xb8rfold.no\0" +"rn.leg.br\0" +"clinique\0" +"gmail\0ltd\0" +"state.museum\0" +"readmyblog.org\0" +"blogspot.com.uy\0" +"niiza.saitama.jp\0" +"v\xc3\xa5gan.no\0williamhill\0" +"rawa-maz.pl\0" +"historisches.museum\0" +"abira.hokkaido.jp\0" +"audible\0med\0" +"from-mi.com\0" +"insurance.aero\0hita.oita.jp\0" +"is-a-techie.com\0" +"id.au\0" +"men\0" +"kr\xc3\xa5""anghke.no\0meo\0" +"ro.leg.br\0" +"takaishi.osaka.jp\0www.ro\0" +"himeji.hyogo.jp\0" +"sakuho.nagano.jp\0*.transurl.nl\0" +"priv.hu\0" +"aki.kochi.jp\0" +"arida.wakayama.jp\0" +"nm.cn\0" +"kawagoe.mie.jp\0" +"pubol.museum\0" +"cc.pr.us\0mini\0" +"square.museum\0chernihiv.ua\0" +"church\0" +"spb.ru\0" +"contractors\0" +"ci.it\0ulan-ude.ru\0" +"avoues.fr\0mint\0" +"trentino-stirol.it\0" +"lincoln.museum\0" +"tottori.jp\0" +"campidano-medio.it\0oamishirasato.chiba.jp\0spb.su\0" +"aichi.jp\0" +"hisamitsu\0" +"kurobe.toyama.jp\0mopar\0drud.io\0" +"hisayama.fukuoka.jp\0" +"time.museum\0" +"skjerv\xc3\xb8y.no\0from-de.com\0" +"ehime.jp\0biei.hokkaido.jp\0" +"koriyama.fukushima.jp\0" +"mugi.tokushima.jp\0idrett.no\0" +"mil\0" +"shop\0\xd8\xb9\xd8\xb1\xd8\xa8\0" +"mit\0" +"show\0us-gov-west-1.compute.amazonaws.com\0" +"takko.aomori.jp\0" +"kamoenai.hokkaido.jp\0tadotsu.kagawa.jp\0kiwi\0" +"jamison.museum\0dupont\0" +"flora.no\0" +"tokushima.jp\0" +"bounceme.net\0" +"garden.museum\0paderborn.museum\0hjelmeland.no\0" +"priv.at\0" +"glass.museum\0plumbing\0" +"training\0compute.amazonaws.com.cn\0" +"*.yokohama.jp\0g\xc3\xa1\xc5\x8bgaviika.no\0" +"stj\xc3\xb8rdal.no\0v\xc3\xa5gs\xc3\xb8y.no\0" +"vlaanderen\0" +"rebun.hokkaido.jp\0cyon.site\0" +"hiraya.nagano.jp\0mlb\0hu.com\0" +"sakae.nagano.jp\0" +"kitashiobara.fukushima.jp\0" +"chernigov.ua\0" +"ce.leg.br\0" +"st.no\0lib.mo.us\0radio\0za.bz\0" +"engineer.aero\0matsuura.nagasaki.jp\0toyosato.shiga.jp\0" +"lib.ca.us\0" +"bunkyo.tokyo.jp\0\xd1\x80\xd1\x83\xd1\x81\0" +"sx.cn\0" +"cloudns.eu\0" +"keisen.fukuoka.jp\0webhop.me\0" +"mma\0" +"actor\0mls\0" +"karpacz.pl\0is-a-conservative.com\0" +"ninja\0" +"misasa.tottori.jp\0rightathome\0" +"id.ir\0sv.it\0" +"buyshouses.net\0" +"oceanographic.museum\0aurskog-holand.no\0" +"uonuma.niigata.jp\0" +"\xe9\xa3\x9e\xe5\x88\xa9\xe6\xb5\xa6\0" +"telefonica\0" +"monza-e-della-brianza.it\0snasa.no\0" +"kozagawa.wakayama.jp\0" +"kragero.no\0" +"isteingeek.de\0" +"sandiego.museum\0" +"agematsu.nagano.jp\0" +"kitahiroshima.hokkaido.jp\0toyonaka.osaka.jp\0" +"bergbau.museum\0" +"moe\0" +"trentino-suedtirol.it\0ralingen.no\0" +"jewelry.museum\0lenug.su\0" +"presse.ci\0" +"shirakawa.fukushima.jp\0takashima.shiga.jp\0moi\0wroc.pl\0" +"norton\0" +"mom\0" +"takino.hyogo.jp\0kviteseid.no\0waw.pl\0" +"google\0" +"dvrdns.org\0is-leet.com\0" +"market\0" +"co.ae\0" +"lenvik.no\0" , -"\xd0\xbe\xd0\xb1\xd1\x80.\xd1\x81\xd1\x80\xd0\xb1\0" -"kitahiroshima.hokkaido.jp\0" -"\xe9\x95\xb7\xe5\xb4\x8e.jp\0" -"student.aero\0kopervik.no\0hof.no\0" -"tula.ru\0" -"izumizaki.fukushima.jp\0" -"g\xc3\xa1ivuotna.no\0cc.tn.us\0" -"fyresdal.no\0bms\0media\0ryukyu\0" -"miyakonojo.miyazaki.jp\0" -"mosj\xc3\xb8""en.no\0nv.us\0bmw\0navy\0" -"iwakura.aichi.jp\0" -"\xe4\xbd\x9b\xe5\xb1\xb1\0" -"bnl\0" -"lib.wa.us\0" -"sabae.fukui.jp\0motosu.gifu.jp\0" -"z.bg\0" -"miharu.fukushima.jp\0" -"higashiyama.kyoto.jp\0" -"skierva.no\0" -"laspezia.it\0" -"if.ua\0" -"himeshima.oita.jp\0" -"imb.br\0caravan\0" -"ct.it\0utashinai.hokkaido.jp\0" -"bom\0" -"pictet\0" -"boo\0" -"biella.it\0" -"gouv.km\0risor.no\0" -"bot\0" -"\xc3\xa5s.no\0gotdns.org\0" -"oskol.ru\0dyndns-blog.com\0" -"gokase.miyazaki.jp\0tonaki.okinawa.jp\0" -"salon\0" -"averoy.no\0press\0" -"halloffame.museum\0h\xc3\xa1""bmer.no\0" -"*.sendai.jp\0" -"oseto.nagasaki.jp\0" -"usantiques.museum\0" -"cab\0" -"download\0" -"nord-odal.no\0" -"unsa.ba\0museet.museum\0galsa.no\0gb.com\0" -"muko.kyoto.jp\0" -"zero\0" -"yasugi.shimane.jp\0cal\0" -"torino.museum\0" -"kami.kochi.jp\0gouv.ml\0" -"idv.tw\0cba\0network\0" -"yokawa.hyogo.jp\0car\0" -"cat\0" -"americana.museum\0e.se\0" -"vr.it\0" -"omi.niigata.jp\0" -"togane.chiba.jp\0toyako.hokkaido.jp\0" -"samara.ru\0" -"nakagawa.fukuoka.jp\0urasoe.okinawa.jp\0cbn\0" -"nordre-land.no\0" -"aquila.it\0gonohe.aomori.jp\0fukusaki.hyogo.jp\0" -"yodobashi\0" -"rimini.it\0sakaiminato.tottori.jp\0" -"plc.ly\0" -"erotica.hu\0" -"eurovision\0" -"jefferson.museum\0gs.bu.no\0" -"uki.kumamoto.jp\0augustow.pl\0" -"gs.ol.no\0sexy\0" -"v\xc3\xa5ler.\xc3\xb8stfold.no\0" -"ayase.kanagawa.jp\0" -"vard\xc3\xb8.no\0" -"recipes\0" -"varese.it\0asahi.mie.jp\0" -"yuzhno-sakhalinsk.ru\0" -"pr.it\0nango.fukushima.jp\0" -"oharu.aichi.jp\0wakasa.fukui.jp\0" -"avianca\0" -"govt.nz\0" -"ruovat.no\0" -"kujukuri.chiba.jp\0" -"weather\0" -"ut.us\0" -"odawara.kanagawa.jp\0" -"shriram\0" -"niiza.saitama.jp\0" -"siljan.no\0" -"ae.org\0" -"latina.it\0iwamizawa.hokkaido.jp\0" -"itami.hyogo.jp\0" -"stange.no\0ceo\0" -"gifu.jp\0yamato.fukushima.jp\0toyo.kochi.jp\0" -"cfa\0" -"kamakura.kanagawa.jp\0" -"cfd\0" -"otago.museum\0" -"baghdad.museum\0" -"buy\0" -"vicenza.it\0" -"ip6.arpa\0" -"skedsmo.no\0l.se\0" -"okinawa.jp\0marugame.kagawa.jp\0" -"\xc3\xb8yer.no\0" -"aukra.no\0" -"luzern.museum\0" -"mihama.mie.jp\0" -"fukushima.hokkaido.jp\0kembuchi.hokkaido.jp\0\xe6\x85\x88\xe5\x96\x84\0" -"gsm.pl\0" -"savannahga.museum\0" -"sanjo.niigata.jp\0\xd8\xb9\xd9\x85\xd8\xa7\xd9\x86\0" -"lesja.no\0vik.no\0" -"minamiizu.shizuoka.jp\0" -"tran\xc3\xb8y.no\0" -"lgbt\0" -"joshkar-ola.ru\0" -"hemsedal.no\0sarpsborg.no\0" -"gob.ar\0calabria.it\0kurashiki.okayama.jp\0" -"irkutsk.ru\0" -"osaki.miyagi.jp\0ginowan.okinawa.jp\0neustar\0" -"higashinaruse.akita.jp\0taketa.oita.jp\0nagatoro.saitama.jp\0" -"ventures\0from-mo.com\0" -"mishima.shizuoka.jp\0" -"vaga.no\0" -"sano.tochigi.jp\0" -"k12.in.us\0" -"gob.bo\0partners\0" -"mediocampidano.it\0kumakogen.ehime.jp\0" -"dyr\xc3\xb8y.no\0lier.no\0groks-this.info\0" -"tsuruta.aomori.jp\0" -"tosu.saga.jp\0office-on-the.net\0" -"bzh\0" -"grong.no\0" -"attorney\0" -"oji.nara.jp\0" -"gob.cl\0" -"froland.no\0meloy.no\0" -"taranto.it\0uk.net\0" -"\xe8\x8c\xa8\xe5\x9f\x8e.jp\0" -"school.museum\0cc.il.us\0" -"s.se\0" -"marketplace.aero\0plc.uk\0" -"ontario.museum\0" -"ranzan.saitama.jp\0" -"ct.us\0" -"memorial\0" -"gob.do\0media.hu\0lib.ks.us\0" -"reise\0" -"horonobe.hokkaido.jp\0" -"gob.ec\0" -"yamal.ru\0" -"yamato.kanagawa.jp\0" -"dr.na\0" -"spydeberg.no\0" -"zgora.pl\0" -"verona.it\0" -"gob.es\0" -"jeju.kr\0" -"chiropractic.museum\0doomdns.com\0" -"kozaki.chiba.jp\0" -"monza-brianza.it\0isen.kagoshima.jp\0glogow.pl\0" -"uchiko.ehime.jp\0yasu.shiga.jp\0" -"sandvik\0eu-west-1.compute.amazonaws.com\0" -"suedtirol.it\0czest.pl\0" -"kashiba.nara.jp\0yuza.yamagata.jp\0" -"tondabayashi.osaka.jp\0toyama.toyama.jp\0" -"\xe6\x95\x8e\xe8\x82\xb2.hk\0k12.vt.us\0" -"astrakhan.ru\0nfshost.com\0" -"!city.kobe.jp\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" -"enebakk.no\0" -"travel\0" -"sandiego.museum\0yokohama\0" -"valleeaoste.it\0parma.it\0kochi.jp\0kunohe.iwate.jp\0" -"izumisano.osaka.jp\0szczecin.pl\0" -"sellsyourhome.org\0" -"gob.gt\0" -"dyndns-remote.com\0" -"pippu.hokkaido.jp\0" -"com\0z.se\0is-a-bookkeeper.com\0" -"kotohira.kagawa.jp\0" -"is-found.org\0" -"gob.hn\0radom.pl\0" -"christiansburg.museum\0" -"tomigusuku.okinawa.jp\0swiebodzin.pl\0" -"bihoro.hokkaido.jp\0minato.osaka.jp\0" -"firenze.it\0" -"pr.us\0" -"takanabe.miyazaki.jp\0" -"jinsekikogen.hiroshima.jp\0" -"computer.museum\0" -"dad\0" -"kikuchi.kumamoto.jp\0sakura.tochigi.jp\0" -"otsu.shiga.jp\0" -"larvik.no\0\xd0\xb0\xd0\xba.\xd1\x81\xd1\x80\xd0\xb1\0" -"berg.no\0cc.dc.us\0" -"tateyama.toyama.jp\0" -"is-an-actor.com\0" -"rg.it\0" -"kep.tr\0from-la.net\0" -"ln.cn\0" -"from-wv.com\0is-a-hunter.com\0" -"day\0" -"kokonoe.oita.jp\0" -"wi.us\0" -"schmidt\0" -"6.bg\0portland.museum\0k12.wa.us\0" -"crs\0csc\0" -"groundhandling.aero\0cahcesuolo.no\0" -"francaise.museum\0dyndns-free.com\0" -"media.pl\0" -"dr.tr\0b.ssl.fastly.net\0" -"everbank\0" -"kitakata.fukushima.jp\0" -"montblanc\0" -"tanohata.iwate.jp\0nishi.osaka.jp\0reisen\0" -"rindal.no\0hamburg\0" -"koriyama.fukushima.jp\0ena.gifu.jp\0" -"foundation.museum\0" -"axis.museum\0" -"helsinki.museum\0cc.wa.us\0myphotos.cc\0" -"vic.edu.au\0" -"cloudapp.net\0" -"yamaxun\0" -"trading\0" -"viterbo.it\0lg.jp\0ise.mie.jp\0" -"lillesand.no\0" -"lib.me.us\0" -"okoppe.hokkaido.jp\0oyodo.nara.jp\0" -"shinshinotsu.hokkaido.jp\0tobetsu.hokkaido.jp\0" -"magadan.ru\0tennis\0" -"\xe5\xba\x83\xe5\xb3\xb6.jp\0mobara.chiba.jp\0" -"ltd.co.im\0" -"fet.no\0elb.amazonaws.com\0" -"kamikawa.hyogo.jp\0sango.nara.jp\0gob.mx\0" -"alta.no\0" -"sowa.ibaraki.jp\0" -"g\xc3\xa1\xc5\x8bgaviika.no\0" -"tattoo\0" -"fg.it\0konan.shiga.jp\0" -"off.ai\0country\0" -"dev\0" -"rn.it\0samukawa.kanagawa.jp\0" -"baidu\0" -"port.fr\0carbonia-iglesias.it\0miyoshi.tokushima.jp\0tabuse.yamaguchi.jp\0sosnowiec.pl\0adult\0" -"in-addr.arpa\0gran.no\0" -"gob.pa\0serveftp.org\0" -"hidaka.hokkaido.jp\0" -"nesseby.no\0" -"satosho.okayama.jp\0" -"gob.pe\0" -"flights\0" -"andriabarlettatrani.it\0" -"nagato.yamaguchi.jp\0host\0" -"nes.akershus.no\0gob.pk\0dvrdns.org\0" -"miyota.nagano.jp\0" -"embroidery.museum\0karasjohka.no\0" -"from-ky.com\0" -"trieste.it\0ashoro.hokkaido.jp\0" -"dealer\0" -"saigawa.fukuoka.jp\0" -"spiegel\0" -"atlanta.museum\0romskog.no\0" -"l\xc3\xa4ns.museum\0evje-og-hornnes.no\0" -"valled-aosta.it\0karasuyama.tochigi.jp\0" -"ing.pa\0" -"siracusa.it\0minano.saitama.jp\0" -"isahaya.nagasaki.jp\0hagi.yamaguchi.jp\0" -"!city.kitakyushu.jp\0uto.kumamoto.jp\0forex\0" -"murayama.yamagata.jp\0virgin\0" -"norddal.no\0cherkasy.ua\0codes\0" -"misato.saitama.jp\0" -"\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" -"iwata.shizuoka.jp\0" -"tjome.no\0mango\0" -"greta.fr\0" -"eu.int\0minokamo.gifu.jp\0oi.kanagawa.jp\0" -"accident-prevention.aero\0" -"hirokawa.fukuoka.jp\0" -"kainan.tokushima.jp\0" -"gob.sv\0" -"gub.uy\0" -"black\0" -"noda.chiba.jp\0" -"tanagura.fukushima.jp\0abu.yamaguchi.jp\0" -"is-a-painter.com\0" -"ikeda.hokkaido.jp\0" -"mitoyo.kagawa.jp\0" -"gausdal.no\0" -"kvafjord.no\0" -"philadelphiaarea.museum\0santafe.museum\0cruises\0" -"ringerike.no\0" -"ven.it\0kamisato.saitama.jp\0przeworsk.pl\0" -"\xe7\x82\xb9\xe7\x9c\x8b\0" -"ask\xc3\xb8y.no\0" -"suli.hu\0is-an-accountant.com\0" -"lu.it\0me.it\0\xe7\xa7\xbb\xe5\x8a\xa8\0" -"flanders.museum\0" -"anquan\0" -"s\xc3\xb8rreisa.no\0" -"gob.ve\0" -"treviso.it\0" -"crew.aero\0" -"jaguar\0" -"barlettatraniandria.it\0happou.akita.jp\0" -"annefrank.museum\0is-a-bulls-fan.com\0" -"medecin.km\0jamal.ru\0dyndns-mail.com\0" -"toyota.aichi.jp\0" -"\xe6\x9c\xba\xe6\x9e\x84\0" -"muos\xc3\xa1t.no\0" -"monzaebrianza.it\0" -"lg.ua\0" -"dnp\0" -"archaeological.museum\0" -"ichikawa.chiba.jp\0kami.miyagi.jp\0" -"media.museum\0" -"ge.it\0unnan.shimane.jp\0walbrzych.pl\0" -"namdalseid.no\0dog\0" -"australia.museum\0\xe3\x82\xb0\xe3\x83\xbc\xe3\x82\xb0\xe3\x83\xab\0" -"shop.ht\0ascolipiceno.it\0" -"trading.aero\0shop.hu\0tr\xc3\xa6na.no\0" -"wroc.pl\0" -"kharkiv.ua\0" -"slattum.no\0" -"zj.cn\0" -"amursk.ru\0" -"miyazaki.jp\0nishinoomote.kagoshima.jp\0" -"\xe0\xae\x87\xe0\xae\xa8\xe0\xaf\x8d\xe0\xae\xa4\xe0\xae\xbf\xe0\xae\xaf\xe0\xae\xbe\0" -"ora.gunma.jp\0" -"chattanooga.museum\0naturalhistorymuseum.museum\0uhren.museum\0" -"emilia-romagna.it\0\xe9\xa6\x99\xe5\xb7\x9d.jp\0" -"spb.ru\0" -"kiso.nagano.jp\0" -"gop.pk\0vote\0" -"krokstadelva.no\0leitungsen.de\0" -"ogi.saga.jp\0" -"broker.aero\0" -"asaka.saitama.jp\0" -"dnipropetrovsk.ua\0" -"minamiechizen.fukui.jp\0kagamiishi.fukushima.jp\0" -"voto\0" -"ostroda.pl\0" -"noheji.aomori.jp\0stalowa-wola.pl\0" -"jolster.no\0" -"iijima.nagano.jp\0" -"blog.br\0gs.cn\0tainai.niigata.jp\0kouzushima.tokyo.jp\0cheap\0" -"kharkov.ua\0cc.wv.us\0" -"s3-website-us-gov-west-1.amazonaws.com\0" -"tj.cn\0onagawa.miyagi.jp\0" -"naples.it\0miyako.iwate.jp\0yaita.tochigi.jp\0eat\0" -"nord-aurdal.no\0servegame.org\0" -"money\0blogdns.org\0" -"lib.mn.us\0" -"aoste.it\0" -"westfalen.museum\0" -"kasaoka.okayama.jp\0" -"bc.ca\0" -"shia\0" -"*.kawasaki.jp\0" -"skodje.no\0" -"\xe7\x86\x8a\xe6\x9c\xac.jp\0" -"varoy.no\0" -"kaga.ishikawa.jp\0cloudfront.net\0" -"ss.it\0" -"shimane.jp\0ryokami.saitama.jp\0yamanakako.yamanashi.jp\0durban\0" -"randaberg.no\0" -"jobs.tt\0" -"bjugn.no\0z-2.compute-1.amazonaws.com\0" -"futaba.fukushima.jp\0" -"kms.ru\0" -"zamami.okinawa.jp\0" -"laquila.it\0" -"mobily\0" -"club\0" -"edu\0" -"a.prod.fastly.net\0" -"tamatsukuri.ibaraki.jp\0" -"kamoenai.hokkaido.jp\0" -"f\xc3\xb8rde.no\0" -"al.it\0" -"ube.yamaguchi.jp\0" -"ms.it\0" -"higashiagatsuma.gunma.jp\0" -"pacific.museum\0" -"gz.cn\0" -"dyndns.org\0" -"otari.nagano.jp\0" -"miyazaki.miyazaki.jp\0" -"texas.museum\0hosting\0" -"mincom.tn\0" -"huissier-justice.fr\0" -"\xc3\xa5lg\xc3\xa5rd.no\0fusa.no\0lib.ny.us\0mtpc\0panerai\0" -"chieti.it\0fujikawaguchiko.yamanashi.jp\0blogspot.com.ar\0" -"gs.fm.no\0" -"chikushino.fukuoka.jp\0" -"blogspot.com.au\0" -"iiyama.nagano.jp\0" -"ms.kr\0" -"tohma.hokkaido.jp\0tara.saga.jp\0" -"is-gone.com\0" -"friuli-vegiulia.it\0saito.miyazaki.jp\0" -"ringebu.no\0" -"bj.cn\0me.tz\0blogspot.com.br\0" -"raisa.no\0me.uk\0" -"tokuyama.yamaguchi.jp\0" -"isesaki.gunma.jp\0" -"kunst.museum\0" -"childrens.museum\0me.us\0" -"mihara.hiroshima.jp\0" -"jogasz.hu\0" -"sayama.saitama.jp\0" -"k12.me.us\0" -"bale.museum\0s\xc3\xb8r-odal.no\0" -"cambridge.museum\0" -"shimotsuke.tochigi.jp\0" -"harima.hyogo.jp\0" -"varggat.no\0barcelona\0" -"kunimi.fukushima.jp\0" -"gallery.museum\0" -"kitayama.wakayama.jp\0" -"nov.ru\0" -"kasumigaura.ibaraki.jp\0taiki.mie.jp\0" -"lierne.no\0is-a-doctor.com\0" -"lidl\0" -"al.no\0\xeb\x8b\xb7\xeb\x84\xb7\0dyndns-office.com\0" -"kunisaki.oita.jp\0ricoh\0" -"biev\xc3\xa1t.no\0" -"yamagata.jp\0ibara.okayama.jp\0" -"shirakawa.fukushima.jp\0" -"is-a-nurse.com\0" -"sagamihara.kanagawa.jp\0" -"verdal.no\0" -"fie.ee\0shoes\0" -"blogspot.com.es\0" -"tachikawa.tokyo.jp\0" -"valley.museum\0oracle\0\xd0\xbe\xd0\xbd\xd0\xbb\xd0\xb0\xd0\xb9\xd0\xbd\0" -"yuzawa.niigata.jp\0higashiizumo.shimane.jp\0" -"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" -"katori.chiba.jp\0" -"vic.gov.au\0center.museum\0ulan-ude.ru\0life\0" -"machida.tokyo.jp\0better-than.tv\0" -"hino.tokyo.jp\0" -"tokoname.aichi.jp\0" -"kawachinagano.osaka.jp\0" -"minnesota.museum\0" -"steinkjer.no\0" -"trentino-stirol.it\0hamatonbetsu.hokkaido.jp\0" -"reggio-calabria.it\0" -"etnedal.no\0vdonsk.ru\0cc.sd.us\0" -"plaza.museum\0" -"nx.cn\0band\0" -"flowers\0" -"bank\0" -"agematsu.nagano.jp\0" -"passenger-association.aero\0mod.gi\0" -"settsu.osaka.jp\0" -"shimokitayama.nara.jp\0" -"washingtondc.museum\0apartments\0is-a-blogger.com\0" -"at-band-camp.net\0" -"med.pro\0" -"torino.it\0" -"merseine.nu\0" -"ine.kyoto.jp\0" -"\xe9\xb3\xa5\xe5\x8f\x96.jp\0" -"komforb.se\0" -"porsgrunn.no\0" -"noboribetsu.hokkaido.jp\0kameoka.kyoto.jp\0" -"analytics\0" -"cng.br\0" -"vladikavkaz.ru\0cc.md.us\0" -"page\0" -"friuli-veneziagiulia.it\0shimamoto.osaka.jp\0uw.gov.pl\0" -"microlight.aero\0canada.museum\0koebenhavn.museum\0" -"olbia-tempio.it\0yukuhashi.fukuoka.jp\0allfinanz\0" -"aerodrome.aero\0" -"\xe6\x84\x9b\xe7\x9f\xa5.jp\0" -"beppu.oita.jp\0nishiazai.shiga.jp\0" -"minami.tokushima.jp\0kaneyama.yamagata.jp\0" -"amber.museum\0from-ga.com\0" -"kita.kyoto.jp\0" -"sakyo.kyoto.jp\0fund\0" -"modern.museum\0" -"ebina.kanagawa.jp\0" -"kuzbass.ru\0" -"namegata.ibaraki.jp\0nowruz\0" -"nc.tr\0" -"like\0" -"valledaosta.it\0" -"tromso.no\0" -"fukui.jp\0" -"b\xc3\xb8.telemark.no\0jpn.com\0" -"kumagaya.saitama.jp\0" -"charter.aero\0" -"gent\0" -"barum.no\0nannestad.no\0homeunix.com\0" -"medecin.fr\0" -"bern.museum\0batsfjord.no\0al.us\0getmyip.com\0" -"fan\0" -"jetzt\0" -"alaska.museum\0zhytomyr.ua\0ms.us\0nc.us\0" -"\xd8\xa7\xd9\x84\xd9\x85\xd8\xba\xd8\xb1\xd8\xa8\0" -"k12.ms.us\0k12.nc.us\0" -"surgeonshall.museum\0" -"g.bg\0from-me.org\0" -"auction\0" -"gs.mr.no\0" -"osakikamijima.hiroshima.jp\0nanao.ishikawa.jp\0" -"yanaizu.fukushima.jp\0muika.niigata.jp\0" -"hjartdal.no\0" -"ca.it\0kawakami.nagano.jp\0support\0" -"co.ae\0" -"co.ag\0" -"naroy.no\0limo\0" -"kawara.fukuoka.jp\0katsushika.tokyo.jp\0" -"bungoono.oita.jp\0" -"co.ao\0esq\0" -"co.ba\0" -"co.bb\0" -"simple-url.com\0" -"co.at\0etc.br\0" -"\xc3\xa5krehamn.no\0vestre-slidre.no\0barclays\0link\0" -"kiryu.gunma.jp\0hamamatsu.shizuoka.jp\0" -"lib.or.us\0" -"taira.toyama.jp\0" -"co.bi\0" -"kazimierz-dolny.pl\0" -"krasnoyarsk.ru\0" -"gucci\0" -"wanggou\0" -"co.ca\0" -"yamatsuri.fukushima.jp\0" -"paris.museum\0" -"\xe0\xa4\x95\xe0\xa5\x89\xe0\xa4\xae\0" -"co.bw\0" -"omi.nagano.jp\0" -"co.ci\0aquarelle\0" -"co.cl\0" +"co.ag\0hanawa.fukushima.jp\0" +"gmina.pl\0" +"mov\0" +"kihoku.ehime.jp\0bir.ru\0cloudns.in\0" +"onna.okinawa.jp\0" +"bygland.no\0" +"far.br\0kongsberg.no\0" +"co.ao\0act.au\0id.lv\0" +"aetna\0" +"co.bb\0id.ly\0" +"co.at\0" +"nab\0" +"utashinai.hokkaido.jp\0" +"obama.nagasaki.jp\0elverum.no\0" +"co.bi\0ato.br\0soni.nara.jp\0" +"homelinux.com\0" +"omitama.ibaraki.jp\0" +"motobu.okinawa.jp\0cloudns.cc\0" +"fujisawa.kanagawa.jp\0boots\0co.ca\0" +"bauern.museum\0" +"nba\0" +"se.leg.br\0" +"co.bw\0lib.id.us\0starhub\0support\0" +"co.ci\0" +"tj.cn\0seki.gifu.jp\0" +"co.cl\0yuza.yamagata.jp\0" "co.cm\0" -"nakagawa.tokushima.jp\0" -"zushi.kanagawa.jp\0tokorozawa.saitama.jp\0" -"eus\0from-ne.com\0" -"co.cr\0szkola.pl\0" -"as.us\0" -"oiso.kanagawa.jp\0xihuan\0blogspot.com.tr\0" -"nj.us\0k12.as.us\0" -"conference.aero\0" -"n.bg\0" -"shop.pl\0" -"ca.na\0n\xc3\xa6r\xc3\xb8y.no\0" -"takaishi.osaka.jp\0" -"miyazu.kyoto.jp\0\xe5\x85\xac\xe7\x9b\x8a\0" -"abr.it\0taiji.wakayama.jp\0" -"v\xc3\xa5gs\xc3\xb8y.no\0bar.pro\0kchr.ru\0lanbib.se\0" -"traeumtgerade.de\0" -"ch.it\0" -"cc.ak.us\0" -"mypets.ws\0" -"owani.aomori.jp\0" -"iwate.jp\0" -"\xe4\xb8\xad\xe5\x9b\xbd\0feedback\0" -"dyndns-at-work.com\0" -"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0organic\0" -"k12.il.us\0" -"yabu.hyogo.jp\0" -"stjohn.museum\0\xe4\xb8\xad\xe5\x9c\x8b\0" -"davvesiida.no\0sucks\0temasek\0" -"drammen.no\0" -"aip.ee\0co.gg\0" -"kumejima.okinawa.jp\0" -"london\0" -"tolga.no\0" -"sakura.chiba.jp\0fit\0" -"tjeldsund.no\0" -"rec.br\0gushikami.okinawa.jp\0" -"navigation.aero\0" -"co.gy\0" -"sanda.hyogo.jp\0daigo.ibaraki.jp\0uenohara.yamanashi.jp\0" -"az.us\0" -"nakatane.kagoshima.jp\0" -"labor.museum\0wang\0" -"matera.it\0shirataka.yamagata.jp\0swatch\0selfip.net\0" -"fashion\0" -"pars\0" -"yugawa.fukushima.jp\0" -"rec.co\0k12.ny.us\0" -"co.id\0" -"co.hu\0lib.vt.us\0" -"jelenia-gora.pl\0" -"u.bg\0" -"\xd8\xa7\xd9\x84\xd8\xac\xd8\xb2\xd8\xa7\xd8\xa6\xd8\xb1\0" -"ito.shizuoka.jp\0maison\0" -"miyada.nagano.jp\0" -"co.im\0yakutia.ru\0" -"co.in\0" -"live\0" -"venice.it\0" -"co.ir\0aizubange.fukushima.jp\0shizuoka.shizuoka.jp\0principe.st\0" -"co.it\0" -"co.je\0cc.ar.us\0review\0" -"heguri.nara.jp\0center\0from-ny.net\0" -"sanfrancisco.museum\0" -"akune.kagoshima.jp\0" -"casadelamoneda.museum\0edeka\0" -"\xe7\x9f\xb3\xe5\xb7\x9d.jp\0fukuchiyama.kyoto.jp\0" -"nissedal.no\0ivanovo.ru\0" -"co.jp\0" -"ia.us\0" -"vantaa.museum\0" -"yanagawa.fukuoka.jp\0" -"aeroclub.aero\0tx.us\0" -"urbinopesaro.it\0" -"army\0fly\0" -"fukudomi.saga.jp\0oguni.yamagata.jp\0" -"val-d-aosta.it\0" -"historyofscience.museum\0tranby.no\0" -"andasuolo.no\0" -"yoshinogari.saga.jp\0co.kr\0" -"championship.aero\0co.lc\0public.museum\0" -"nerima.tokyo.jp\0" -"moscow.museum\0cymru\0" -"site\0" -"namerikawa.toyama.jp\0" -"cc.hi.us\0" -"tsuruga.fukui.jp\0" -"arpa\0news\0nokia\0" -"co.ma\0vf.no\0" -"verm\xc3\xb6gensberater\0" -"co.ls\0cmw.ru\0ca.us\0" -"co.me\0" -"grandrapids.museum\0nuremberg.museum\0oh.us\0" -"shibukawa.gunma.jp\0" -"fujioka.gunma.jp\0asahi.yamagata.jp\0oshino.yamanashi.jp\0" -"foo\0quebec\0" -"co.na\0" -"campidano-medio.it\0" -"austin.museum\0" -"\xe7\xbb\x84\xe7\xbb\x87.hk\0co.mu\0" -"\xe7\xa6\x8f\xe5\xb3\xb6.jp\0" -"co.mw\0" -"yatomi.aichi.jp\0daejeon.kr\0" -"steigen.no\0" -"ogimi.okinawa.jp\0" -"equipment.aero\0settlers.museum\0" -"psc.br\0nara.jp\0tsugaru.aomori.jp\0co.nl\0" -"co.no\0" -"university.museum\0" -"nakagawa.nagano.jp\0email\0" -"sveio.no\0" -"ed.ao\0donostia.museum\0kommunalforbund.se\0" -"cleaning\0technology\0" -"co.nz\0gal\0" -"forsale\0" -"carraramassa.it\0" -"co.om\0" -"emiliaromagna.it\0" -"birdart.museum\0" -"scrapper-site.net\0" -"oceanographic.museum\0" -"aca.pro\0karelia.ru\0" -"atsuma.hokkaido.jp\0hidaka.wakayama.jp\0" -"handson.museum\0" -"chuo.yamanashi.jp\0frl\0" -"co.pl\0" -"gjerstad.no\0" -"co.pn\0" -"bearalvahki.no\0" -"piemonte.it\0" -"ed.ci\0amsterdam.museum\0hk.com\0" -"taishi.hyogo.jp\0" -"arte\0" -"jor.br\0shinshiro.aichi.jp\0kyowa.akita.jp\0" -"g.se\0" -"vt.it\0koto.shiga.jp\0um.gov.pl\0" -"co.pw\0cbg.ru\0" -"ed.cr\0vald-aosta.it\0" -"blogspot.re\0" -"midatlantic.museum\0" -"modum.no\0" -"blogspot.ro\0" -"riodejaneiro.museum\0" -"gdn\0" -"cisco\0blogspot.ru\0blogspot.se\0" -"brand.se\0bbva\0gea\0blogspot.sg\0" -"utah.museum\0porsangu.no\0" -"sakai.osaka.jp\0" -"linz.museum\0co.rs\0blogspot.sk\0" -"trentino-a-adige.it\0aero.tt\0" -"realestate.pl\0" -"bjark\xc3\xb8y.no\0co.rw\0" -"pt.it\0esan.hokkaido.jp\0" -"hsbc\0" -"kawanishi.yamagata.jp\0rec.nf\0" -"blogspot.td\0" -"taxi.aero\0" -"kamigori.hyogo.jp\0aoki.nagano.jp\0" -"ferrero\0lotte\0" -"whaling.museum\0" -"\xe9\xab\x98\xe7\x9f\xa5.jp\0blogdns.net\0" -"broadway\0" -"co.st\0\xe5\xb9\xbf\xe4\xb8\x9c\0" -"aero.mv\0" -"ama.aichi.jp\0iwama.ibaraki.jp\0uruma.okinawa.jp\0hamada.shimane.jp\0co.th\0" -"lotto\0" -"co.sz\0co.tj\0" -"is-not-certified.com\0" -"samegawa.fukushima.jp\0hatogaya.saitama.jp\0" -"co.tm\0" -"zoological.museum\0evenes.no\0blogspot.tw\0" -"b\xc3\xb8.nordland.no\0n\xc3\xb8tter\xc3\xb8y.no\0co.ua\0" -"nishio.aichi.jp\0shibecha.hokkaido.jp\0" -"magazine.aero\0" -"co.tt\0\xe4\xb8\x96\xe7\x95\x8c\0" -"\xeb\x8b\xb7\xec\xbb\xb4\0" -"nordreisa.no\0co.ug\0" -"kvalsund.no\0ggee\0" -"co.tz\0blogspot.mr\0" -"jobs\0giessen.museum\0co.uk\0verm\xc3\xb6gensberatung\0" -"n.se\0" -"yamamoto.miyagi.jp\0" -"asia\0uzhgorod.ua\0" -"blogspot.mx\0" -"burghof.museum\0" -"co.us\0" -"higashiura.aichi.jp\0blogspot.nl\0" -"columbus.museum\0co.ve\0" -"nnov.ru\0yachts\0blogspot.no\0" -"bjerkreim.no\0co.vi\0" -"co.uz\0" -"sekigahara.gifu.jp\0" -"osteroy.no\0\xe9\xa6\x99\xe6\xb8\xaf\0" -"kinko.kagoshima.jp\0" -"tsubetsu.hokkaido.jp\0" -"eiheiji.fukui.jp\0yawata.kyoto.jp\0yamatokoriyama.nara.jp\0" -"sasayama.hyogo.jp\0" -"equipment\0" -"takamori.nagano.jp\0" -"hobol.no\0university\0" -"itabashi.tokyo.jp\0" -"school.na\0chel.ru\0" -"kuroishi.aomori.jp\0" -"timekeeping.museum\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" -"reggiocalabria.it\0" -"rec.ro\0" -"alsace\0" -"royken.no\0" -"ed.jp\0gunma.jp\0" -"amusement.aero\0giehtavuoatna.no\0" -"blogspot.pt\0" -"*.bd\0hokuryu.hokkaido.jp\0" -"and\xc3\xb8y.no\0" -"trd.br\0" -"osakasayama.osaka.jp\0" -"systems\0" -"asahikawa.hokkaido.jp\0" -"takazaki.miyazaki.jp\0school.nz\0" -"\xe5\x95\x86\xe6\xa5\xad.tw\0" -"*.bn\0tosashimizu.kochi.jp\0dabur\0" -"cranbrook.museum\0usa.museum\0cv.ua\0" -"daisen.akita.jp\0shirosato.ibaraki.jp\0" -"perugia.it\0blogspot.it\0" -"atsugi.kanagawa.jp\0" -"oyabe.toyama.jp\0" -"skedsmokorset.no\0cc.in.us\0gle\0" -"*.ck\0hurdal.no\0u.se\0" -"bunkyo.tokyo.jp\0" -"mad.museum\0" -"blogspot.jp\0" -"eco.br\0" -"wa.gov.au\0k\xc3\xa5""fjord.no\0\xc3\xb8rland.no\0space\0" -"oita.jp\0mukawa.hokkaido.jp\0" -"lib.la.us\0" -"bialystok.pl\0szczytno.pl\0democrat\0" -"*.cy\0webhop.org\0" -"neyagawa.osaka.jp\0" -"horology.museum\0audio\0commbank\0" -"ashiya.fukuoka.jp\0" -"hiratsuka.kanagawa.jp\0" -"grimstad.no\0rec.ve\0" -"blogspot.kr\0" -"tokyo\0" -"dellogliastra.it\0shiiba.miyazaki.jp\0" -"gmo\0" -"yaotsu.gifu.jp\0" -"\xd8\xb4\xd8\xa8\xd9\x83\xd8\xa9\0" -"kaisei.kanagawa.jp\0" -"tonsberg.no\0" -"gmx\0" -"b\xc3\xa5tsfjord.no\0law.pro\0suzuki\0" -"oristano.it\0" -"tsukui.kanagawa.jp\0yokkaichi.mie.jp\0" -"*.er\0" -"capebreton.museum\0n\xc3\xa1vuotna.no\0sunndal.no\0" -"nishi.fukuoka.jp\0" -"otsuki.kochi.jp\0" -"*.fj\0*.kobe.jp\0zakopane.pl\0" -"*.fk\0vt.us\0" -"lig.it\0nishikatsura.yamanashi.jp\0" -"valdaosta.it\0takahata.yamagata.jp\0" -"1.bg\0" -"podhale.pl\0capital\0" -"kamo.niigata.jp\0cool\0" -"goo\0" -"gop\0" -"larsson.museum\0" -"coop\0" -"blogspot.fi\0" -"got\0" -"gov\0piacenza.it\0hisayama.fukuoka.jp\0" -"cincinnati.museum\0" -"frog.museum\0hitachi\0" -"kr.it\0fujinomiya.shizuoka.jp\0blogspot.fr\0" -"vistaprint\0" -"kodaira.tokyo.jp\0" -"*.gu\0ed.pw\0nsn.us\0" -"hu.net\0" -"fi.cr\0horokanai.hokkaido.jp\0gwangju.kr\0" -"yamagata.nagano.jp\0" -"lubin.pl\0blogspot.gr\0" -"modelling.aero\0rendalen.no\0kostroma.ru\0from-sc.com\0" -"tarnobrzeg.pl\0" -"ivgu.no\0comsec\0" -"broadcast.museum\0" -"buryatia.ru\0blogspot.hk\0" -"kl\xc3\xa6""bu.no\0" -"*.il\0" -"study\0" -"kameyama.mie.jp\0wakasa.tottori.jp\0" -"bas.it\0kanzaki.saga.jp\0" -"cc.de.us\0blogspot.hu\0blogspot.ie\0" -"hasama.oita.jp\0" -"ri.it\0dynalias.net\0" -"\xe6\x94\xbf\xe5\x8a\xa1\0" -"toscana.it\0shikokuchuo.ehime.jp\0" -"aknoluokta.no\0sor-varanger.no\0" -"kasamatsu.gifu.jp\0kawaue.gifu.jp\0blogspot.in\0" -"*.jm\0" -"ina.nagano.jp\0" -"venezia.it\0misato.shimane.jp\0" -"is-very-good.org\0blogspot.be\0" -"*.ke\0tananger.no\0lib.sc.us\0dating\0" -"kakegawa.shizuoka.jp\0skin\0" -"8.bg\0" -"omachi.nagano.jp\0ichikawamisato.yamanashi.jp\0*.kh\0blogspot.bj\0" -"yashio.saitama.jp\0" -"blogspot.ca\0" -"arq.br\0takayama.gunma.jp\0" -"kagoshima.kagoshima.jp\0cancerresearch\0" -"miami\0" -"mihama.aichi.jp\0blogspot.cf\0" -"blogspot.ch\0" -"*.kw\0bindal.no\0" -"li.it\0" -"nationalfirearms.museum\0" -"rochester.museum\0" -"shibata.miyagi.jp\0" -"blogspot.de\0" -"blogspot.cv\0" -"leirvik.no\0" -"blogspot.cz\0" -"civilwar.museum\0krodsherad.no\0eng.pro\0blogspot.dk\0" -"kamiamakusa.kumamoto.jp\0" -"nic.in\0umbria.it\0" -"*.mm\0stv.ru\0" -"noto.ishikawa.jp\0webhop.biz\0" -"kiyosato.hokkaido.jp\0ueda.nagano.jp\0miyake.nara.jp\0" "scienceandhistory.museum\0" -"nittedal.no\0" -"gorge.museum\0" -"\xe0\xa4\xad\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xa4\0" -"*.ni\0" -"fi.it\0*.mz\0\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" -"vibovalentia.it\0" -"*.np\0" -"sigdal.no\0skype\0" -"ono.fukushima.jp\0" -"mutsu.aomori.jp\0omachi.saga.jp\0" -"yn.cn\0" -"rost.no\0company\0" -"trainer.aero\0scienceandindustry.museum\0" -"kitaakita.akita.jp\0" -"entertainment.aero\0" -"fuettertdasnetz.de\0" -"contemporary.museum\0" -"higashiyodogawa.osaka.jp\0" -"*.pg\0" -"aioi.hyogo.jp\0" -"newyork.museum\0\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0" -"does-it.net\0" -"her\xc3\xb8y.nordland.no\0" -"sosa.chiba.jp\0uryu.hokkaido.jp\0hirakata.osaka.jp\0" -"valle.no\0" -"circus.museum\0" -"citic\0" -"sn.cn\0" -"fukuyama.hiroshima.jp\0hiv\0" -"lenvik.no\0" -"nieruchomosci.pl\0" -"higashihiroshima.hiroshima.jp\0ohtawara.tochigi.jp\0" -"lib.nj.us\0" -"direct\0" -"blogspot.ae\0" -"kamaishi.iwate.jp\0omura.nagasaki.jp\0kaminoyama.yamagata.jp\0" -"s\xc3\xa1lat.no\0" -"towada.aomori.jp\0" -"klabu.no\0" -"padua.it\0" -"kr.ua\0" -"bio.br\0morimachi.shizuoka.jp\0" -"assisi.museum\0" -"tone.ibaraki.jp\0tsuno.miyazaki.jp\0" -"sells-for-less.com\0" -"hichiso.gifu.jp\0czeladz.pl\0" -"hvaler.no\0" -"paragliding.aero\0asnes.no\0" -"tako.chiba.jp\0" -"house.museum\0" -"anan.nagano.jp\0mihama.wakayama.jp\0" -"heritage.museum\0andebu.no\0from-wy.com\0" -"service.gov.uk\0" -"chambagri.fr\0" -"istmein.de\0" -"myoko.niigata.jp\0from-az.net\0" -"wy.us\0" -"yamakita.kanagawa.jp\0" -"garden.museum\0" -"\xe5\x92\x8c\xe6\xad\x8c\xe5\xb1\xb1.jp\0" -"qld.au\0gok.pk\0" -"schokoladen.museum\0" -"southcarolina.museum\0" -"nativeamerican.museum\0s3-website-us-west-1.amazonaws.com\0is-a-personaltrainer.com\0" -"hirosaki.aomori.jp\0" -"homes\0" -"fineart.museum\0" -"crown\0" -"nrw.museum\0" -"from-in.com\0" -"kaufen\0" -"grue.no\0lib.az.us\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa7\0" -"far.br\0arita.saga.jp\0" -"bronnoy.no\0lipetsk.ru\0ri.us\0\xd8\xb3\xd9\x88\xd8\xb1\xd9\x8a\xd8\xa9\0is-a-conservative.com\0" -"honbetsu.hokkaido.jp\0" -"lib.ne.us\0selfip.org\0" -"tmp.br\0wakayama.jp\0" -"lodingen.no\0" -"moriya.ibaraki.jp\0shioya.tochigi.jp\0" -"dolls.museum\0health.museum\0" -"trentinoaadige.it\0" -"ascoli-piceno.it\0fukushima.fukushima.jp\0" +"co.cr\0alesund.no\0from-va.com\0" +"abu.yamaguchi.jp\0" +"presse.fr\0shiriuchi.hokkaido.jp\0" +"storage\0" +"county.museum\0" +"no.it\0tula.su\0msd\0" +"yamanashi.jp\0bod\xc3\xb8.no\0" +"nagareyama.chiba.jp\0larvik.no\0co.cz\0" +"konyvelo.hu\0co.dk\0" +"from.hr\0laspezia.it\0" +"chuvashia.ru\0" +"m\xc3\xa5s\xc3\xb8y.no\0" +"sakata.yamagata.jp\0" +"kishiwada.osaka.jp\0synology.me\0" +"suli.hu\0sakai.ibaraki.jp\0pisz.pl\0" +"ally\0" +"susono.shizuoka.jp\0" +"komae.tokyo.jp\0" "takasaki.gunma.jp\0" -"how\0" -"bandai.fukushima.jp\0takaharu.miyazaki.jp\0" -"muenster.museum\0" -"statoil\0" -"himeji.hyogo.jp\0" -"asti.it\0" -"certification.aero\0santabarbara.museum\0yorkshire.museum\0sandnessjoen.no\0hasvik.no\0" -"bus.museum\0africa.com\0" -"ky.us\0" -"sennan.osaka.jp\0nic.tj\0" -"lib.gu.us\0" -"k12.la.us\0" -"konyvelo.hu\0trolley.museum\0bradesco\0is-a-liberal.com\0" -"mihama.chiba.jp\0misato.miyagi.jp\0madrid\0" -"yalta.ua\0accenture\0" -"b\xc3\xa1l\xc3\xa1t.no\0" -"fujisawa.iwate.jp\0saiki.oita.jp\0" -"countryestate.museum\0*.ye\0" -"yuu.yamaguchi.jp\0" -"airguard.museum\0horten.no\0" -"lukow.pl\0" -"nhs.uk\0" -"forum.hu\0" -"ag.it\0chiryu.aichi.jp\0nankoku.kochi.jp\0" -"asahi.ibaraki.jp\0" -"tr\xc3\xb8gstad.no\0" -"mn.it\0setouchi.okayama.jp\0" -"utsira.no\0cc.la.us\0*.za\0ibm\0" -"uda.nara.jp\0kitagata.saga.jp\0arakawa.saitama.jp\0\xe5\x95\x86\xe5\x9f\x8e\0" -"hole.no\0" -"he.cn\0shiraoi.hokkaido.jp\0mimata.miyazaki.jp\0" -"shingo.aomori.jp\0tateyama.chiba.jp\0kaita.hiroshima.jp\0" -"database.museum\0vodka\0" -"lardal.no\0ice\0" -"spy.museum\0*.zm\0" -"hiraizumi.iwate.jp\0" -"airtraffic.aero\0" -"trentinoaltoadige.it\0" -"enna.it\0" -"association.aero\0*.zw\0" +"nature.museum\0" +"mtn\0" +"valle-daosta.it\0" +"black\0" +"mtr\0xerox\0" +"nec\0" +"tokyo.jp\0shimosuwa.nagano.jp\0hamaroy.no\0drud.us\0" +"nichinan.miyazaki.jp\0" +"championship.aero\0surnadal.no\0" +"jor.br\0ichiba.tokushima.jp\0" +"yandex\0" +"tsukuba.ibaraki.jp\0" +"sa.com\0" +"honefoss.no\0" +"biz.bb\0" +"museum.tt\0" +"lewismiller.museum\0biz.at\0" +"skierv\xc3\xa1.no\0\xd9\x85\xd9\x88\xd9\x82\xd8\xb9\0" +"co.gg\0net\0tula.ru\0" +"fhsk.se\0new\0" +"biz.az\0niimi.okayama.jp\0orland.no\0" +"co.gl\0shimane.shimane.jp\0silk\0" +"capetown\0" +"iwakuni.yamaguchi.jp\0" +"pordenone.it\0nfl\0" +"gifu.gifu.jp\0" +"sula.no\0" +"pointto.us\0" +"orskog.no\0porsanger.no\0" +"co.gy\0hemnes.no\0" +"ns.ca\0tonosho.kagawa.jp\0" +"realty\0" +"fujisato.akita.jp\0" +"comunica\xc3\xa7\xc3\xb5""es.museum\0" +"lib.ok.us\0" +"ngo\0sina\0" +"co.id\0" +"co.hu\0hiraizumi.iwate.jp\0mitoyo.kagawa.jp\0firmdale\0" +"toyota\0" +"inabe.mie.jp\0karelia.ru\0" +"cq.cn\0cc.wa.us\0" +"biz.cy\0" +"naoshima.kagawa.jp\0rzgw.gov.pl\0ck.ua\0" +"co.il\0iijima.nagano.jp\0biz.dk\0" +"co.im\0historicalsociety.museum\0" +"co.in\0nhk\0" +"numazu.shizuoka.jp\0\xd1\x81\xd1\x80\xd0\xb1\0observer\0" +"szczecin.pl\0ricoh\0" +"co.ir\0wodzislaw.pl\0" +"iida.nagano.jp\0zaporizhzhe.ua\0" +"co.it\0" +"co.je\0horonobe.hokkaido.jp\0" +"est-le-patron.com\0" +"\xe5\xb2\xa9\xe6\x89\x8b.jp\0karelia.su\0" +"atm.pl\0" +"is-a-doctor.com\0" +"kainan.tokushima.jp\0" +"himi.toyama.jp\0nm.us\0barrell-of-knowledge.info\0" +"utazu.kagawa.jp\0id.us\0\xe6\xb7\xa1\xe9\xa9\xac\xe9\x94\xa1\0" +"tomioka.gunma.jp\0russia.museum\0kutno.pl\0" +"tran\xc3\xb8y.no\0" +"co.jp\0lillehammer.no\0" +"minamiboso.chiba.jp\0" +"news.hu\0" +"group.aero\0" +"tochigi.tochigi.jp\0maritime.museum\0" +"biz.et\0net.eu.org\0" +"kibichuo.okayama.jp\0" +"management\0dyndns-home.com\0" +"ina.nagano.jp\0service.gov.uk\0" +"shriram\0" +"from-ar.com\0" +"co.kr\0" +"co.lc\0" +"wien\0" +"mukawa.hokkaido.jp\0bedzin.pl\0express\0" +"hokuto.hokkaido.jp\0" +"nakadomari.aomori.jp\0" +"frontdoor\0" +"amami.kagoshima.jp\0kisosaki.mie.jp\0" +"birdart.museum\0seljord.no\0" +"artgallery.museum\0" +"co.ma\0" +"co.ls\0dating\0reliance\0" +"mckinsey\0" +"obama.fukui.jp\0kaneyama.fukushima.jp\0co.me\0" +"omihachiman.shiga.jp\0co.mg\0" +"ushuaia.museum\0" +"morimachi.shizuoka.jp\0namdalseid.no\0" +"iwanuma.miyagi.jp\0limited\0" +"hellas.museum\0cloudns.us\0" +"co.na\0\xc3\xa5snes.no\0" +"yasuda.kochi.jp\0" +"miharu.fukushima.jp\0" +"nu.ca\0biz.id\0co.mu\0preservation.museum\0" +"amex\0" +"minamiise.mie.jp\0co.mw\0nerdpol.ovh\0" +"co.ni\0" +"co.mz\0gniezno.pl\0archi\0" +"lib.ny.us\0co.nl\0" +"a.bg\0co.no\0" +"res.aero\0aremark.no\0" +"air-traffic-control.aero\0aizumisato.fukushima.jp\0" +"exeter.museum\0priv.pl\0" +"if.ua\0" +"cc.la.us\0infiniti\0site\0" +"blogspot.com\0" +"yamato.fukushima.jp\0" +"co.nz\0" +"iiyama.nagano.jp\0" +"botanicgarden.museum\0co.om\0" +"minoh.osaka.jp\0gs.aa.no\0" +"for-our.info\0" +"ogimi.okinawa.jp\0" +"usarts.museum\0nextdirect\0" +"oi.kanagawa.jp\0" +"university.museum\0museum.mv\0\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86\0" +"pharmacien.fr\0museum.mw\0andoy.no\0pictures\0taifun-dns.de\0" +"delta\0" +"newhampshire.museum\0" +"biz.ki\0" +"rec.br\0co.pl\0" +"puglia.it\0" +"co.pn\0" +"nanyo.yamagata.jp\0museum.no\0" +"nikaho.akita.jp\0" +"handa.aichi.jp\0" +"priv.no\0co.pw\0" +"rec.co\0herokussl.com\0" +"mo\xc3\xa5reke.no\0now\0viajes\0go.leg.br\0" +"okayama.okayama.jp\0museum.om\0" +"wiki\0" +"aguni.okinawa.jp\0" +"computer.museum\0" +"jp.eu.org\0" +"k12.al.us\0club\0" +"ozu.kumamoto.jp\0" +"og.ao\0" +"hayashima.okayama.jp\0" +"karasjohka.no\0" +"co.rs\0" +"usdecorativearts.museum\0nra\0" +"wajima.ishikawa.jp\0" +"yahaba.iwate.jp\0biz.mv\0co.rw\0" +"biz.mw\0" +"zama.kanagawa.jp\0kr.com\0" +"biz.ni\0" +"malvik.no\0obi\0" +"priv.me\0" +"ujitawara.kyoto.jp\0malselv.no\0orsta.no\0doctor\0" +"matsushige.tokushima.jp\0" +"biz.nr\0" +"co.st\0" +"dance\0" +"yoshida.saitama.jp\0" +"co.th\0" +"kamisunagawa.hokkaido.jp\0from-ri.com\0" +"c.bg\0co.sz\0co.tj\0nrw\0" +"wine\0" +"co.tm\0" +"cc.ks.us\0co.ua\0" +"sicilia.it\0catering\0" +"okegawa.saitama.jp\0" +"elk.pl\0co.tt\0" +"assisi.museum\0nagoya\0" +"kiho.mie.jp\0" +"tn.it\0co.ug\0" +"nu.it\0" +"ismaili\0" +"cs.it\0co.tz\0" +"co.uk\0" +"decorativearts.museum\0naumburg.museum\0biz.pk\0" +"botanicalgarden.museum\0biz.pl\0" +"computer\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0" +"stuff-4-sale.us\0" +"biz.pr\0co.us\0" +"co.ve\0caravan\0" +"ntt\0" +"co.vi\0" +"toyo.kochi.jp\0co.uz\0" +"izumozaki.niigata.jp\0sel.no\0" +"uzs.gov.pl\0" +"quebec.museum\0" "funagata.yamagata.jp\0" -"kaluga.ru\0clinic\0icu\0" -"okayama.okayama.jp\0" -"is-a-techie.com\0" -"nl.ca\0virtuel.museum\0" -"waw.pl\0" -"is-a-rockstar.com\0" -"higashimatsushima.miyagi.jp\0iruma.saitama.jp\0" -"yusui.kagoshima.jp\0kalisz.pl\0" -"from-va.com\0" -"hiranai.aomori.jp\0" -"te.it\0beer\0" -"mallorca.museum\0svelvik.no\0" -"career\0" -"tver.ru\0" +"yoka.hyogo.jp\0" +"brand.se\0" +"ryokami.saitama.jp\0dscloud.mobi\0" +"uy.com\0" +"trentino-aadige.it\0ide.kyoto.jp\0saarland\0" +"off\0" +"aland.fi\0" +"rocks\0" +"slask.pl\0" +"nore-og-uvdal.no\0" +"semboku.akita.jp\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"\xd8\xa7\xd9\x84\xd8\xb9\xd9\x84\xd9\x8a\xd8\xa7\xd9\x86\0" +"chijiwa.nagasaki.jp\0" +"eastafrica.museum\0radom.pl\0" +"motegi.tochigi.jp\0" +"aya.miyazaki.jp\0ariake.saga.jp\0spy.museum\0" +"shinagawa.tokyo.jp\0" +"utsunomiya.tochigi.jp\0" +"higashi.fukuoka.jp\0izumi.kagoshima.jp\0solund.no\0" +"kagoshima.kagoshima.jp\0" +"homelinux.net\0" +"cloudns.pw\0" +"olbia-tempio.it\0" +"from-ms.com\0from-nc.com\0" +"soccer\0" +"biz.tj\0" +"egersund.no\0yuzhno-sakhalinsk.ru\0" +"science.museum\0" +"bryne.no\0paroch.k12.ma.us\0" +"s3.eu-central-1.amazonaws.com\0" +"co.za\0" +"biz.ua\0" +"yoro.gifu.jp\0biz.tr\0" +"spydeberg.no\0" +"e.bg\0biz.tt\0" +"nyc\0" +"conf.au\0" +"cleaning\0" +"yuki.ibaraki.jp\0" +"cc.fl.us\0co.zm\0" +"wellbeingzone.eu\0" +"tp.it\0" +"og.it\0" +"parliament.nz\0" +"gmbh\0" +"ando.nara.jp\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0" +"biz.vn\0" +"rec.nf\0" +"jerusalem.museum\0selfip.biz\0" +"azumino.nagano.jp\0grimstad.no\0" +"kamikawa.hyogo.jp\0wiih.gov.pl\0" +"olbiatempio.it\0" +"sango.nara.jp\0" +"store\0" +"notaires.km\0" +"inuyama.aichi.jp\0" +"is-gone.com\0" +"shakotan.hokkaido.jp\0" +"\xe5\x8c\x97\xe6\xb5\xb7\xe9\x81\x93.jp\0" +"jus.br\0fhapp.xyz\0" +"rovigo.it\0yamagata.jp\0" +"reg.dk\0" +"k12.vt.us\0" +"kamitonda.wakayama.jp\0turystyka.pl\0" +"children.museum\0" +"c.la\0" +"kyiv.ua\0" +"weatherchannel\0" +"okinawa.okinawa.jp\0" +"lotte\0" +"in.na\0" +"ivgu.no\0from-nj.com\0" +"basketball\0" +"is-a-hunter.com\0" +"imageandsound.museum\0" +"lotto\0one\0" +"in.ni\0osen.no\0" +"ong\0" +"krodsherad.no\0" +"lib.tx.us\0" +"a.se\0" +"arita.saga.jp\0biz.zm\0" +"kamishihoro.hokkaido.jp\0onl\0lib.de.us\0" +"g.bg\0omigawa.chiba.jp\0" +"nagaoka.niigata.jp\0" +"belgorod.ru\0" +"cc.wi.us\0neustar\0" +"fuoisku.no\0" +"namegata.ibaraki.jp\0" +"sakahogi.gifu.jp\0takahagi.ibaraki.jp\0rec.ro\0" +"omura.nagasaki.jp\0" +"tokigawa.saitama.jp\0" +"tr.it\0hoteles\0" +"hanamigawa.chiba.jp\0" +"mortgage\0" +"ooo\0" +"eu.org\0" +"tn.us\0" +"il.us\0rodeo\0" +"dc.us\0shouji\0" +"tamatsukuri.ibaraki.jp\0" +"blogspot.co.at\0" +"caa.aero\0" +"ski.no\0" +"steiermark.museum\0" +"civilization.museum\0" +"blogspot.vn\0" +"kitagata.gifu.jp\0utsira.no\0" +"ono.fukui.jp\0imdb\0" +"lefrak\0*.githubcloudusercontent.com\0" +"fukuchiyama.kyoto.jp\0cloudns.info\0" +"symantec\0" +"giving\0" +"firestone\0quest\0" +"tjmaxx\0" +"shintomi.miyazaki.jp\0" +"org\0" +"grozny.su\0pay\0" +"floro.no\0" +"rec.ve\0" +"it.ao\0" +"tv.bb\0" +"biev\xc3\xa1t.no\0in.rs\0" +"takahama.fukui.jp\0" +"ebiz.tw\0chirurgiens-dentistes-en-france.fr\0" +"higashikawa.hokkaido.jp\0" +"wallonie.museum\0dovre.no\0" +"lipetsk.ru\0" +"tv.bo\0\xd1\x83\xd0\xba\xd1\x80\0" +"broker.aero\0skin\0" +"tv.br\0" +"fredrikstad.no\0hobby-site.org\0" +"sano.tochigi.jp\0" +"arezzo.it\0q-a.eu.org\0" +"metlife\0" +"gokase.miyazaki.jp\0tr.no\0aurland.no\0c.se\0in.th\0" +"lib.dc.us\0" +"i.bg\0" +"is-a-cubicle-slave.com\0blogspot.re\0" +"akune.kagoshima.jp\0" +"gucci\0from-wv.com\0js.org\0" +"tt.im\0in.ua\0" +"cc.ky.us\0" +"matsudo.chiba.jp\0kiwa.mie.jp\0e-burg.ru\0" +"viking\0" +"ott\0" +"ud.it\0blogspot.ro\0" +"karate.museum\0royrvik.no\0" +"prochowice.pl\0warmia.pl\0smart\0" +"nanbu.tottori.jp\0" +"hino.tottori.jp\0americana.museum\0grozny.ru\0blogspot.rs\0" +"erotica.hu\0trentinoalto-adige.it\0" +"blogspot.ru\0blogspot.se\0" +"steinkjer.no\0blogspot.sg\0" +"blogspot.si\0" +"vgs.no\0in.us\0" +"wzmiuw.gov.pl\0de.us\0blogspot.sk\0" +"chippubetsu.hokkaido.jp\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0pet\0blogspot.sn\0" +"\xe9\xb3\xa5\xe5\x8f\x96.jp\0drobak.no\0" +"ovh\0" +"za.com\0blogspot.td\0" +"ichinomiya.chiba.jp\0ikata.ehime.jp\0yuasa.wakayama.jp\0" +"degree\0" +"takasu.hokkaido.jp\0herokuapp.com\0" +"miners.museum\0" +"fukuoka.jp\0moriguchi.osaka.jp\0lodingen.no\0" +"selje.no\0" +"trentinoaadige.it\0minowa.nagano.jp\0rnrt.tn\0" +"mat.br\0verran.no\0" +"is.eu.org\0" +"bar.pro\0" +"cards\0" +"friulivgiulia.it\0cdn77-ssl.net\0" +"kawakami.nagano.jp\0blogspot.co.id\0" +"epilepsy.museum\0blogspot.tw\0blogspot.ug\0" +"schule\0\xe7\x82\xb9\xe7\x9c\x8b\0" +"aizuwakamatsu.fukushima.jp\0" +"isla.pr\0capitalone\0selfip.com\0" +"hornindal.no\0tychy.pl\0" +"blogspot.co.il\0" +"yachiyo.ibaraki.jp\0phd\0" +"nara.nara.jp\0redstone\0" +"iglesias-carbonia.it\0blogspot.mr\0" +"osakikamijima.hiroshima.jp\0kimino.wakayama.jp\0" +"kids.us\0no.com\0" +"mar.it\0" +"mochizuki.nagano.jp\0" +"blogspot.mx\0" +"blogspot.my\0" +"terni.it\0tra.kp\0" +"casino\0blogspot.nl\0" +"kmpsp.gov.pl\0" +"pid\0" +"blogspot.no\0" +"tatsuno.hyogo.jp\0" +"it.eu.org\0" +"sakura.tochigi.jp\0staples\0from-oh.com\0" +"pin\0" +"cymru\0dynalias.net\0" +"togane.chiba.jp\0e.se\0" +"klepp.no\0" +"k.bg\0" +"inazawa.aichi.jp\0" +"moss.no\0" +"khabarovsk.ru\0" +"tv.im\0" +"blogspot.pe\0" +"forde.no\0so.gov.pl\0website\0" +"space-to-rent.com\0" +"indianmarket.museum\0\xd1\x81\xd0\xb0\xd0\xb9\xd1\x82\0" +"tv.it\0" +"tobe.ehime.jp\0" +"aisai.aichi.jp\0hinode.tokyo.jp\0v\xc3\xa1rgg\xc3\xa1t.no\0us-west-1.compute.amazonaws.com\0" +"miyagi.jp\0delaware.museum\0" +"aerodrome.aero\0immo\0" +"ollo\0blogspot.qa\0" +"ny.us\0blogspot.pt\0" +"hatsukaichi.hiroshima.jp\0kvinesdal.no\0" +"kalmykia.su\0" +"nishigo.fukushima.jp\0" +"otsu.shiga.jp\0" +"r\xc3\xb8mskog.no\0" +"gyokuto.kumamoto.jp\0" +"lifeinsurance\0" +"games.hu\0kotohira.kagawa.jp\0" +"brumunddal.no\0" +"blogspot.is\0" +"blogspot.it\0" +"civilisation.museum\0" +"saijo.ehime.jp\0" +"nishinomiya.hyogo.jp\0" +"kuzumaki.iwate.jp\0stor-elvdal.no\0" +"blogspot.jp\0" +"in.eu.org\0" +"solutions\0" +"s\xc3\xb8rum.no\0" +"sekikawa.niigata.jp\0comcast\0" +"fnd.br\0kitaakita.akita.jp\0nakanoto.ishikawa.jp\0" +"hof.no\0withyoutube.com\0" +"store.nf\0pnc\0" +"cechire.com\0" +"mikawa.yamagata.jp\0blogspot.kr\0" +"kalmykia.ru\0" +"shikatsu.aichi.jp\0tv.na\0" +"niepce.museum\0" +"blogspot.li\0" +"hirokawa.fukuoka.jp\0" +"balestrand.no\0" +"realestate\0" +"faith\0" +"hk.com\0" +"saves-the-whales.com\0" +"kawaguchi.saitama.jp\0blogspot.lt\0blogspot.md\0" +"g.se\0blogspot.lu\0" +"lib.co.us\0" +"m.bg\0" +"is-a-lawyer.com\0" +"blogspot.mk\0" +"tamba.hyogo.jp\0" +"bosch\0" +"moka.tochigi.jp\0cc.ak.us\0autos\0br.com\0from-ut.com\0" +"i.ng\0" +"ushistory.museum\0" +"nanmoku.gunma.jp\0pruszkow.pl\0" +"kokonoe.oita.jp\0" +"woodside\0" +"jondal.no\0blogspot.fi\0" +"lahppi.no\0" +"naturalsciences.museum\0" +"ok.us\0" +"utazas.hu\0" +"hachijo.tokyo.jp\0googlecode.com\0" +"trading\0blogspot.fr\0" +"tsubetsu.hokkaido.jp\0creation.museum\0risor.no\0nyc.mn\0" +"!city.nagoya.jp\0" +"field.museum\0" +"servequake.com\0" +"sex.hu\0fujitsu\0" +"is-a-painter.com\0" +"kherson.ua\0" +"minato.osaka.jp\0abbvie\0" +"otsuki.yamanashi.jp\0circle\0blogspot.gr\0" +"i.ph\0" +"muenchen.museum\0" +"pro\0" +"us-east-1.amazonaws.com\0blogspot.hk\0" +"oshu.iwate.jp\0" +"pru\0richardli\0" +"k12.ri.us\0" +"blogspot.hr\0" +"blogspot.hu\0blogspot.ie\0" +"institute\0" +"clothing\0" +"berkeley.museum\0cipriani\0" +"tv.sd\0" +"rodoy.no\0" +"homelinux.org\0blogspot.co.uk\0" +"ssl.origin.cdn77-secure.org\0blogspot.in\0" +"info\0conf.lv\0" +"blogspot.ba\0" +"aibetsu.hokkaido.jp\0blogspot.be\0" +"adv.br\0sr.gov.pl\0\xe5\xb7\xa5\xe8\xa1\x8c\0" +"blogspot.bg\0" +"blogspot.bj\0" +"pub\0" +"fujimi.saitama.jp\0from-tn.com\0" +"friulivenezia-giulia.it\0" +"i.se\0" +"blogspot.ca\0" +"health.museum\0poker\0" +"o.bg\0steam.museum\0" +"fuossko.no\0" +"berlevag.no\0" +"giske.no\0blogspot.cf\0" +"tomigusuku.okinawa.jp\0ashikaga.tochigi.jp\0tv.tr\0for-the.biz\0blogspot.ch\0" +"stavanger.no\0" +"store.ve\0blogspot.cl\0" +"abeno.osaka.jp\0town.museum\0" +"mashiko.tochigi.jp\0" +"tv.tz\0is-a-geek.com\0" +"pa.it\0progressive\0" +"orkdal.no\0" +"torino.museum\0" +"notaires.fr\0corporation.museum\0otago.museum\0blogspot.de\0" +"chase\0blogspot.cv\0" +"blogspot.cz\0" +"blogspot.dk\0" +"parliament.cy\0bridgestone\0" +"pwc\0dyndns-at-home.com\0" +"essex.museum\0" +"inzai.chiba.jp\0oita.oita.jp\0" +"ringsaker.no\0" +"genova.it\0" +"radoy.no\0" +"supplies\0" +"hamburg\0" +"\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\0" +"holtalen.no\0" +"kimobetsu.hokkaido.jp\0" +"virtuel.museum\0" +"skiptvet.no\0" +"kinko.kagoshima.jp\0sakhalin.ru\0" +"komagane.nagano.jp\0" +"finnoy.no\0homesecuritypc.com\0" +"k12.az.us\0point2this.com\0" +"florida.museum\0\xd0\xbe\xd1\x80\xd0\xb3.\xd1\x81\xd1\x80\xd0\xb1\0" +"sex.pl\0" +"cloudns.club\0" +"blogspot.co.ke\0" +"uk.net\0" +"minamiawaji.hyogo.jp\0" +"habmer.no\0" +"\xd8\xa7\xd9\x84\xd9\x8a\xd9\x85\xd9\x86\0" +"pe.ca\0oregon.museum\0mutual\0flynnhub.com\0" +"ug.gov.pl\0store.ro\0" +"udine.it\0" +"*.nom.br\0" +"lib.tn.us\0" +"iz.hr\0k.se\0" +"q.bg\0" +"luzern.museum\0mobile\0" +"jl.cn\0" +"clinton.museum\0" +"cc.ma.us\0blogspot.ae\0" +"kanie.aichi.jp\0" +"building.museum\0" +"gs.rl.no\0store.st\0" +"pc.it\0pub.sa\0cool\0blogspot.al\0" +"podzone.net\0blogspot.am\0myds.me\0" +"coop\0ogawa.saitama.jp\0gulen.no\0" +"matsumae.hokkaido.jp\0public.museum\0" +"sweden.museum\0" +"mobily\0" +"tx.us\0" +"lyngen.no\0" +"shibetsu.hokkaido.jp\0" +"slg.br\0" +"trentinosud-tirol.it\0" +"halden.no\0" +"shiiba.miyazaki.jp\0" +"kartuzy.pl\0vision\0dsmynas.com\0" +"holiday\0" +"sanda.hyogo.jp\0" +"kaita.hiroshima.jp\0" +"photography.museum\0" +"blogspot.co.nz\0" +"askoy.no\0" +"iglesiascarbonia.it\0bjark\xc3\xb8y.no\0" +"sera.hiroshima.jp\0hidaka.hokkaido.jp\0" +"uozu.toyama.jp\0cpa.pro\0" +"omasvuotna.no\0" +"mragowo.pl\0consulting\0" +"\xe5\x85\xab\xe5\x8d\xa6\0" +"rehab\0" +"air.museum\0hol.no\0" +"privatizehealthinsurance.net\0" +"shop.ht\0" +"shop.hu\0" +"\xe6\x94\xbf\xe5\x8a\xa1\0" +"nsupdate.info\0" +"africa\0" +"sklep.pl\0" +"zaporizhzhia.ua\0" +"montblanc\0" +"adv.mz\0" +"koshigaya.saitama.jp\0m\xc4\x81ori.nz\0odessa.ua\0" +"brunel.museum\0s3.amazonaws.com\0" +"lillesand.no\0jaworzno.pl\0" +"m.se\0panasonic\0" +"oishida.yamagata.jp\0lib.in.us\0" +"s.bg\0sciences.museum\0" +"is-a-geek.org\0" +"force.museum\0spacekit.io\0" +"frei.no\0dnepropetrovsk.ua\0police.uk\0" +"nisshin.aichi.jp\0" +"katsuura.chiba.jp\0" +"jgora.pl\0" +"in.net\0" +"pe.it\0taku.saga.jp\0" +"isleofman.museum\0" +"lixil\0" +"hyogo.jp\0" +"pa.us\0" +"campidanomedio.it\0" +"pc.pl\0" +"yakumo.shimane.jp\0" +"flickr\0" +"ibara.okayama.jp\0" +"lexus\0" +"taito.tokyo.jp\0" +"\xd0\xbe\xd0\xb4.\xd1\x81\xd1\x80\xd0\xb1\0hitachi\0" +"cranbrook.museum\0khakassia.ru\0" +"setagaya.tokyo.jp\0" +"pe.kr\0voss.no\0" +"res.in\0williamsburg.museum\0cuisinella\0" +"toshima.tokyo.jp\0" +"ancona.it\0koga.ibaraki.jp\0gold\0" +"barclaycard\0directory\0" +"golf\0" +"omotego.fukushima.jp\0" +"gifts\0" +"maori.nz\0" +"tarumizu.kagoshima.jp\0" +"khakassia.su\0" +"valdaosta.it\0" +"melhus.no\0" +"analytics\0" +"stream\0" +"wazuka.kyoto.jp\0" +"warabi.saitama.jp\0" +"red\0" +"trani-barletta-andria.it\0nsn.us\0" +"hokuryu.hokkaido.jp\0" +"iyo.ehime.jp\0" +"freight.aero\0agrigento.it\0" +"futsu.nagasaki.jp\0" +"ericsson\0mitsubishi\0ren\0" +"iizuka.fukuoka.jp\0" +"karlsoy.no\0" +"vladikavkaz.ru\0" +"sandnes.no\0qvc\0" +"o.se\0webhop.biz\0" +"ashiya.hyogo.jp\0h\xc3\xa5.no\0" +"familyds.com\0" +"u.bg\0lesja.no\0" +"basel.museum\0pagefrontapp.com\0" +"jewishart.museum\0" +"vic.au\0" +"gda.pl\0" +"towada.aomori.jp\0cc.me.us\0" +"vladikavkaz.su\0" +"cc.as.us\0goog\0" +"online.museum\0" +"doomdns.org\0" +"lamborghini\0is-an-actress.com\0" +"pg.it\0bialystok.pl\0" +"enna.it\0kunitomi.miyazaki.jp\0" +"hakodate.hokkaido.jp\0*.kunden.ortsinfo.at\0" +"es.leg.br\0" +"friuli-veneziagiulia.it\0mimata.miyazaki.jp\0blogspot.co.za\0" +"health-carereform.com\0" +"reggio-calabria.it\0museum\0\xe5\x85\xac\xe5\x8f\xb8\0" +"dielddanuorri.no\0" +"perugia.it\0" +"takikawa.hokkaido.jp\0" +"laquila.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0" +"fukuyama.hiroshima.jp\0yokoze.saitama.jp\0pt.eu.org\0" +"farmstead.museum\0" +"ril\0" +"oe.yamagata.jp\0" +"store.bb\0rio\0is-a-liberal.com\0" +"rip\0" +"arakawa.tokyo.jp\0" +"medio-campidano.it\0baby\0" +"przeworsk.pl\0" +"citadel\0" +"kuriyama.hokkaido.jp\0doshi.yamanashi.jp\0" +"entomology.museum\0" +"merckmsd\0" +"dyroy.no\0notteroy.no\0" +"reggiocalabria.it\0mj\xc3\xb8ndalen.no\0" +"hamura.tokyo.jp\0" +"madrid\0thruhere.net\0" +"saka.hiroshima.jp\0" +"gunma.jp\0mito.ibaraki.jp\0mobi\0annefrank.museum\0nebraska.museum\0" +"from-nm.com\0" +"kozaki.chiba.jp\0aknoluokta.no\0\xe6\xb8\xb8\xe6\x88\x8f\0is-an-accountant.com\0is-very-good.org\0" +"kosei.shiga.jp\0" +"zippo\0" +"urawa.saitama.jp\0" +"togura.nagano.jp\0ama.shimane.jp\0" +"avianca\0" +"nayoro.hokkaido.jp\0vistaprint\0" +"w.bg\0" +"sennan.osaka.jp\0appspot.com\0" +"tmall\0" +"garden\0store.dk\0" +"cc.wy.us\0" +"federation.aero\0" +"fie.ee\0takanabe.miyazaki.jp\0hinohara.tokyo.jp\0" +"ishikawa.okinawa.jp\0" +"uhren.museum\0undersea.museum\0moda\0" +"halloffame.museum\0wskr.gov.pl\0cisco\0" +"brescia.it\0vb.it\0" +"pi.it\0cyon.link\0" +"sugito.saitama.jp\0sncf\0dyndns-office.com\0" +"szex.hu\0american.museum\0" +"katsuragi.nara.jp\0" +"sowa.ibaraki.jp\0kiyokawa.kanagawa.jp\0" +"delmenhorst.museum\0" +"mizuho.tokyo.jp\0trondheim.no\0" +"flight.aero\0" +"exchange.aero\0wa.edu.au\0furniture.museum\0dynalias.org\0" +"hitra.no\0" +"toscana.it\0" +"wakayama.jp\0" +"muni.il\0savona.it\0ikano\0" +"miyazaki.miyazaki.jp\0" +"vegarshei.no\0" +"oy.lc\0" +"emiliaromagna.it\0dy.fi\0" +"hyatt\0" +"\xe5\x85\xb5\xe5\xba\xab.jp\0" +"from-hi.com\0" +"carbonia-iglesias.it\0" +"tkmaxx\0" +"agdenes.no\0" +"ebino.miyazaki.jp\0k12.md.us\0\xe0\xb0\xad\xe0\xb0\xbe\xe0\xb0\xb0\xe0\xb0\xa4\xe0\xb1\x8d\0nid.io\0" +"kasahara.gifu.jp\0k12.ga.us\0" +"k12.ar.us\0" +"dolls.museum\0" +"sandefjord.no\0" +"r\xc3\xa1hkker\xc3\xa1vju.no\0" +"sherbrooke.museum\0rendalen.no\0" +"fl\xc3\xa5.no\0" +"fhs.no\0" +"fukaya.saitama.jp\0" +"kwpsp.gov.pl\0kerryhotels\0" +"hasuda.saitama.jp\0vanguard\0" +"umaji.kochi.jp\0royken.no\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0clinic\0" +"ivanovo.ru\0" +"is-a-nascarfan.com\0" +"s.se\0lib.pa.us\0" +"y.bg\0sap\0" +"niyodogawa.kochi.jp\0" +"intl.tn\0" +"surgeonshall.museum\0sas\0" +"funabashi.chiba.jp\0karumai.iwate.jp\0from-wy.com\0" +"cc.mi.us\0" +"sbi\0voting\0" +"ogori.fukuoka.jp\0" +"ivanovo.su\0" +"turin.it\0" +"ishinomaki.miyagi.jp\0" +"sca\0" +"nishi.osaka.jp\0ptz.ru\0scb\0" +"aikawa.kanagawa.jp\0sbs\0" +"ninomiya.kanagawa.jp\0" +"daplie.me\0" +"hammarfeasta.no\0" +"trentino-a-adige.it\0" +"al.eu.org\0" +"bardu.no\0" +"\xd8\xb9\xd8\xb1\xd8\xa7\xd9\x82\0" +"\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"ppg.br\0education.museum\0" +"openair.museum\0" +"higashichichibu.saitama.jp\0" +"from-dc.com\0" +"ashiya.fukuoka.jp\0" +"brussels.museum\0s\xc3\xa1lat.no\0" +"omsk.ru\0" +"genkai.saga.jp\0dnsalias.net\0" +"band\0" +"mypets.ws\0shop.ro\0" +"sucks\0" +"sukagawa.fukushima.jp\0bamble.no\0bank\0" +"kayabe.hokkaido.jp\0yura.wakayama.jp\0" +"daigo.ibaraki.jp\0" +"run\0" +"esp.br\0" +"eng.br\0mediocampidano.it\0is-a-photographer.com\0" +"tarnobrzeg.pl\0" +"cancerresearch\0ses\0" +"southwest.museum\0accountant\0" +"tokushima.tokushima.jp\0sande.m\xc3\xb8re-og-romsdal.no\0" +"sew\0" +"isshiki.aichi.jp\0sex\0" +"andria-trani-barletta.it\0andriatranibarletta.it\0" +"shop.pl\0" +"seranishi.hiroshima.jp\0" +"midori.chiba.jp\0" +"sasebo.nagasaki.jp\0sfr\0" +"kanonji.kagawa.jp\0" +"yamashina.kyoto.jp\0rwe\0" +"lib.ut.us\0" +"u.se\0" +"est-a-la-masion.com\0" +"ibigawa.gifu.jp\0" +"kameoka.kyoto.jp\0toba.mie.jp\0" +"iveland.no\0arab\0" +"sciencesnaturelles.museum\0" +"cam.it\0" +"cc.sd.us\0" +"koge.tottori.jp\0cn.com\0" +"wake.okayama.jp\0bjugn.no\0podzone.org\0" +"gs.sf.no\0" +"oppdal.no\0" +"ito.shizuoka.jp\0" +"psse.gov.pl\0" +"sayo.hyogo.jp\0sydney.museum\0" +"niigata.jp\0" +"hashimoto.wakayama.jp\0" +"hagi.yamaguchi.jp\0gb.net\0" +"ichikawamisato.yamanashi.jp\0" +"kamikoani.akita.jp\0legnica.pl\0" +"msk.ru\0fage\0" +"ohda.shimane.jp\0" +"saiki.oita.jp\0" +"yokawa.hyogo.jp\0" +"lazio.it\0matsuno.ehime.jp\0shimodate.ibaraki.jp\0" +"isen.kagoshima.jp\0" +"onojo.fukuoka.jp\0" +"siljan.no\0" +"properties\0" +"msk.su\0" +"lubin.pl\0" +"sandvik\0" +"tottori.tottori.jp\0" +"toyama.toyama.jp\0" +"cinema.museum\0" +"ski\0" +"british.museum\0" +"daisen.akita.jp\0" +"fail\0" +"ninohe.iwate.jp\0" +"otama.fukushima.jp\0" +"nakagawa.nagano.jp\0at-band-camp.net\0" +"louvre.museum\0" +"tsu.mie.jp\0" +"sky\0" +"kawanishi.hyogo.jp\0" +"is-a-geek.net\0" +"tas.edu.au\0" +"fujixerox\0" +"storfjord.no\0chukotka.ru\0" +"ogawara.miyagi.jp\0lucerne.museum\0vf.no\0w.se\0" +"saintlouis.museum\0" +"forli-cesena.it\0tomakomai.hokkaido.jp\0swinoujscie.pl\0" +"gok.pk\0" +"maintenance.aero\0jx.cn\0" +"zlg.br\0gub.uy\0" +"sue.fukuoka.jp\0moto\0" +"toyota.aichi.jp\0" +"tamamura.gunma.jp\0evenes.no\0" +"misugi.mie.jp\0watari.miyagi.jp\0artanddesign.museum\0donna.no\0" +"stathelle.no\0knowsitall.info\0" +"yoichi.hokkaido.jp\0hamamatsu.shizuoka.jp\0" +"fukuchi.fukuoka.jp\0" +"po.it\0" +"airline.aero\0" +"ut.us\0" +"tokorozawa.saitama.jp\0" +"novara.it\0" +"s3-eu-west-1.amazonaws.com\0" +"office\0" +"kumano.mie.jp\0cambridge.museum\0" +"myoko.niigata.jp\0" +"otari.nagano.jp\0starnberg.museum\0" +"bauhaus\0movie\0" +"oppegard.no\0" +"data\0" +"iwate.jp\0" +"kpmg\0soy\0" +"stalowa-wola.pl\0" +"hakata.fukuoka.jp\0miura.kanagawa.jp\0date\0" +"stranda.no\0from-mo.com\0" +"koori.fukushima.jp\0okutama.tokyo.jp\0" +"matsumoto.nagano.jp\0interactive.museum\0k12.nj.us\0" +"research.museum\0tab\0" +"starachowice.pl\0" +"umig.gov.pl\0fans\0reise\0" +"safety.aero\0" +"yusuhara.kochi.jp\0kudamatsu.yamaguchi.jp\0intelligence.museum\0" +"\xc3\xa5l.no\0" +"balsan.it\0saratov.ru\0" +"mihama.aichi.jp\0" +"hair\0" +"coop.ht\0netflix\0" +"citic\0" +"stat.no\0" +"qc.ca\0broker\0" +"tax\0" +"oslo.no\0servepics.com\0" +"iki.nagasaki.jp\0" +"chitose.hokkaido.jp\0joburg\0" +"misato.wakayama.jp\0srl\0" +"gosen.niigata.jp\0y.se\0" +"shikaoi.hokkaido.jp\0" +"kanegasaki.iwate.jp\0sosnowiec.pl\0" +"ap.gov.pl\0" +"yorii.saitama.jp\0" +"sohu\0" +"srt\0" +"vald-aosta.it\0tsubame.niigata.jp\0cc.mo.us\0" +"togliatti.su\0tci\0sells-for-u.com\0" +"kurume.fukuoka.jp\0" +"servebeer.com\0" +"coop.br\0" +"americanexpress\0" +"oyodo.nara.jp\0hamar.no\0stc\0" +"watch-and-clock.museum\0" +"niihama.ehime.jp\0open\0" +"tmp.br\0" +"statoil\0" +"tdk\0" +"emilia-romagna.it\0roros.no\0" +"experts-comptables.fr\0" +"farm\0" +"toyota.yamaguchi.jp\0" +"consulting.aero\0photography\0serveftp.net\0" +"army\0" +"m\xc3\xa5lselv.no\0" +"cheap\0" +"fundacio.museum\0organic\0ngrok.io\0" +"stuttgart.museum\0" +"sassari.it\0" +"tel\0" +"tysnes.no\0" +"itabashi.tokyo.jp\0americanfamily\0" +"law.za\0" +"ichikawa.chiba.jp\0" +"fast\0" +"hammerfest.no\0" +"sogne.no\0" +"bozen.it\0vlaanderen.museum\0" +"airtraffic.aero\0k12.sc.us\0myactivedirectory.com\0" +"here-for-more.info\0" +"arpa\0" +"\xd5\xb0\xd5\xa1\xd5\xb5\0" +"messina.it\0airforce\0" +"ogaki.gifu.jp\0" +"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" +"nuoro.it\0detroit.museum\0" +"western.museum\0" +"konan.aichi.jp\0" +"s\xc3\xb8mna.no\0" +"brindisi.it\0miasa.nagano.jp\0" +"karasjok.no\0" +"\xd7\xa7\xd7\x95\xd7\x9d\0" +"yuu.yamaguchi.jp\0thd\0" +"song\0" +"podlasie.pl\0" +"productions\0" +"from-tx.com\0" +"rybnik.pl\0mykolaiv.ua\0" +"is-with-theband.com\0" +"kawara.fukuoka.jp\0komoro.nagano.jp\0" +"karm\xc3\xb8y.no\0" +"kautokeino.no\0" +"tr\xc3\xb8gstad.no\0" +"showa.yamanashi.jp\0sony\0" +"maebashi.gunma.jp\0onomichi.hiroshima.jp\0" +"lukow.pl\0" +"kanazawa.ishikawa.jp\0" +"vik.no\0flowers\0" +"services\0" +"ukiha.fukuoka.jp\0dyndns-blog.com\0" +"piacenza.it\0" +"midtre-gauldal.no\0" +"asda\0" +"vardo.no\0" +"kawahara.tottori.jp\0" +"engine.aero\0deatnu.no\0arte\0" +"ntr.br\0" +"\xe6\x85\x88\xe5\x96\x84\0" +"airbus\0" +"tjx\0" +"sellsyourhome.org\0" +"\xe5\x95\x86\xe5\x9f\x8e\0" +"avocat.pro\0" +"caltanissetta.it\0massacarrara.it\0" +"zapto.org\0" +"saga.saga.jp\0overhalla.no\0" +"l\xc3\xb8renskog.no\0" +"chonan.chiba.jp\0" +"cartier\0stuff-4-sale.org\0" +"stavern.no\0" +"friulive-giulia.it\0bbva\0" +"misawa.aomori.jp\0" +"hashima.gifu.jp\0" +"groundhandling.aero\0from-pr.com\0" +"fujimino.saitama.jp\0ulm.museum\0" +"okuma.fukushima.jp\0shizuoka.shizuoka.jp\0vuelos\0" +"zamami.okinawa.jp\0cloudns.biz\0" +"bmoattachments.org\0geekgalaxy.com\0" +"tachiarai.fukuoka.jp\0" +"haus\0" +"aquarium.museum\0manchester.museum\0" +"gitlab.io\0" +"chiropractic.museum\0olayangroup\0" +"*.bd\0" +"izu.shizuoka.jp\0" +"fujieda.shizuoka.jp\0study\0" +"labor.museum\0r\xc3\xa5""de.no\0" +"uz.ua\0" +"songdalen.no\0" +"ostrowwlkp.pl\0kh.ua\0emerck\0" +"cc.ms.us\0cc.nc.us\0" +"*.bn\0s3-us-west-1.amazonaws.com\0" +"sakurai.nara.jp\0haugesund.no\0cc.ca.us\0" +"ltd.co.im\0" +"pu.it\0architecture.museum\0sondre-land.no\0" +"sakura.chiba.jp\0gs.hl.no\0est.pr\0" +"fc.it\0\xc3\xb8ksnes.no\0" +"ginoza.okinawa.jp\0v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"takamatsu.kagawa.jp\0" +"asia\0*.ck\0" +"hepforge.org\0" +"\xe5\xa4\xa7\xe4\xbc\x97\xe6\xb1\xbd\xe8\xbd\xa6\0" +"ardal.no\0top\0" +"bruxelles.museum\0skj\xc3\xa5k.no\0" +"is-an-engineer.com\0" +"\xd9\x85\xd9\x84\xd9\x8a\xd8\xb3\xd9\x8a\xd8\xa7\0" +"erni\0" +"ashoro.hokkaido.jp\0pippu.hokkaido.jp\0dudinka.ru\0" +"sologne.museum\0" +"ap-southeast-2.compute.amazonaws.com\0" +"akagi.shimane.jp\0aquarelle\0" +"es.kr\0" +"land\0" +"yamal.ru\0" +"4u.com\0" +"shari.hokkaido.jp\0" +"kvanangen.no\0" +"sasaguri.fukuoka.jp\0tgory.pl\0" +"yoga\0" +"k12.nh.us\0juniper\0" +"k12.gu.us\0" +"*.er\0" +"embetsu.hokkaido.jp\0" +"trento.it\0shimogo.fukushima.jp\0castle.museum\0" +"portlligat.museum\0" +"tourism.tn\0" +"eco.br\0" +"*.fj\0" +"*.fk\0" +"kumamoto.jp\0" +"sumy.ua\0" +"eid.no\0" +"modelling.aero\0kui.hiroshima.jp\0ubs\0" +"mie.jp\0" +"trv\0" +"abruzzo.it\0java\0" +"aomori.aomori.jp\0beta.bounty-full.com\0" +"homebuilt.aero\0social\0" +"shirataka.yamagata.jp\0" +"f\xc3\xb8rde.no\0v\xc3\xa5g\xc3\xa5.no\0qpon\0repair\0" +"gos.pk\0myasustor.com\0" +"*.gu\0" +"cc.ne.us\0" +"nom.ad\0" +"umbria.it\0movistar\0" +"nom.ag\0rahkkeravju.no\0" +"erotika.hu\0england.museum\0" +"fe.it\0gs.bu.no\0" +"serveirc.com\0" +"\xe6\x84\x9b\xe5\xaa\x9b.jp\0" +"\xe9\xa6\x99\xe5\xb7\x9d.jp\0" +"tui\0" +"bronnoysund.no\0" +"page\0" +"judaica.museum\0" +"nanporo.hokkaido.jp\0" +"lajolla.museum\0wales.museum\0name\0divttasvuotna.no\0" +"coop.tt\0hermes\0" +"ragusa.it\0game-server.cc\0" +"fuefuki.yamanashi.jp\0" +"friuli-v-giulia.it\0" +"walbrzych.pl\0" +"civilwar.museum\0" +"*.jm\0" +"\xe7\xa5\x9e\xe5\xa5\x88\xe5\xb7\x9d.jp\0uda.nara.jp\0" +"cesenaforli.it\0" +"rankoshi.hokkaido.jp\0" +"shinkamigoto.nagasaki.jp\0tvs\0" +"ekloges.cy\0kawakami.nara.jp\0" +"coop.mv\0" +"nom.co\0iwaki.fukushima.jp\0godo.gifu.jp\0*.ke\0coop.mw\0" +"video.hu\0minami.kyoto.jp\0locker\0shiksha\0" +"ichinohe.iwate.jp\0nerima.tokyo.jp\0" +"*.kh\0" +"servehalflife.com\0" +"cityeats\0" +"kitchen\0" +"today\0work\0" +"childrens.museum\0test.tj\0" +"yamada.toyama.jp\0" +"sa.gov.au\0ravenna.it\0" +"kred\0" +"crimea.ua\0" +"avocat.fr\0*.kw\0" +"ena.gifu.jp\0webhop.org\0" +"bato.tochigi.jp\0kuzbass.ru\0" +"bostik\0" +"rauma.no\0" +"dnsalias.org\0" +"dclk\0" +"nishimera.miyazaki.jp\0" +"nord-odal.no\0tunk.org\0" +"kisofukushima.nagano.jp\0pl.eu.org\0" +"nom.es\0" +"okinawa.jp\0wakayama.wakayama.jp\0" +"lib.al.us\0restaurant\0" +"*.mm\0" +"hachirogata.akita.jp\0" +"andriabarlettatrani.it\0minamiizu.shizuoka.jp\0" +"vn.ua\0" +"spot\0" +"kamikawa.hokkaido.jp\0" +"tsk.ru\0" +"fi.cr\0akkeshi.hokkaido.jp\0" +"hattfjelldal.no\0" +"coop.py\0" +"nom.fr\0" +"vr.it\0" +"temasek\0" +"fg.it\0setouchi.okayama.jp\0test.ru\0" +"uri.arpa\0center\0" +"esan.hokkaido.jp\0*.np\0" +"\xe9\xab\x98\xe7\x9f\xa5.jp\0asahi.mie.jp\0hawaii.museum\0" +"ostrowiec.pl\0" +"srv.br\0chel.ru\0" +"tsuru.yamanashi.jp\0" +"yame.fukuoka.jp\0" +"chikuma.nagano.jp\0" +"dreamhosters.com\0" +"environmentalconservation.museum\0valley.museum\0" +"\xe5\x85\xac\xe7\x9b\x8a\0" +"mallorca.museum\0" +"ichinoseki.iwate.jp\0" +"prato.it\0" +"tatsuno.nagano.jp\0" +"anthro.museum\0*.pg\0" +"yamamoto.miyagi.jp\0gets-it.net\0" +"kagamino.okayama.jp\0" +"coop.km\0" +"ayagawa.kagawa.jp\0" +"valle.no\0" +"kamakura.kanagawa.jp\0" +"discover\0" +"yonago.tottori.jp\0" +"s\xc3\xb8r-varanger.no\0" +"honjo.akita.jp\0" +"inami.wakayama.jp\0k12.mt.us\0raid\0" +"cbg.ru\0" +"kitami.hokkaido.jp\0shingu.hyogo.jp\0nishinoomote.kagoshima.jp\0ostre-toten.no\0" +"gorge.museum\0" +"kunimi.fukushima.jp\0" +"kitakata.fukushima.jp\0cyber.museum\0" +"nakanojo.gunma.jp\0misaki.osaka.jp\0" +"bmd.br\0tranibarlettaandria.it\0tourism.pl\0" +"inami.toyama.jp\0" +"reisen\0" +"nsw.edu.au\0" +"torsken.no\0uno\0" +"farm.museum\0" +"ab.ca\0boston\0" +"archaeology.museum\0" +"nom.km\0museumvereniging.museum\0" +"bloomberg\0" +"0.bg\0" +"belluno.it\0" +"\xe9\x9d\x92\xe6\xa3\xae.jp\0nishiwaki.hyogo.jp\0lacaixa\0uol\0" +"nagasu.kumamoto.jp\0" +"tatamotors\0" +"vt.it\0gs.st.no\0" +"navy\0" +"kr.it\0" +"fi.it\0" +"ballangen.no\0" +"sor-fron.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0" +"mod.gi\0nom.mg\0j\xc3\xb8rpeland.no\0" +"intel\0" +"ups\0" +"kemerovo.ru\0taobao\0" +"honeywell\0" +"varoy.no\0" +"pars\0land-4-sale.us\0" +"paris\0" +"modern.museum\0s\xc3\xb8rreisa.no\0living\0" +"katsuyama.fukui.jp\0nom.ni\0" +"military.museum\0" +"rokunohe.aomori.jp\0" +"granvin.no\0" +"ino.kochi.jp\0" +"kasuya.fukuoka.jp\0" +"vicenza.it\0" +"furubira.hokkaido.jp\0loabat.no\0" +"taishi.hyogo.jp\0" +"travelchannel\0" +"wlocl.pl\0" +"mypep.link\0" +"ohi.fukui.jp\0k12.mn.us\0" +"otoineppu.hokkaido.jp\0githubusercontent.com\0" +"tado.mie.jp\0" +"final\0" +"nom.pa\0jamal.ru\0" +"amusement.aero\0ltd.cy\0" +"nom.pe\0psp.gov.pl\0" +"kirkenes.no\0" +"kagamiishi.fukushima.jp\0" +"val-d-aosta.it\0kannami.shizuoka.jp\0auspost\0" +"nom.pl\0" +"fosnes.no\0" +"opoczno.pl\0" +"firebaseapp.com\0" +"cologne\0" +"akishima.tokyo.jp\0" +"lib.ee\0" +"tagami.niigata.jp\0horten.no\0from-nv.com\0" +"fm.br\0" +"sabae.fukui.jp\0omi.nagano.jp\0" +"insure\0" +"lib.vt.us\0" +"nagasaki.nagasaki.jp\0" +"fukui.fukui.jp\0is-a-teacher.com\0" +"2.bg\0" +"gallo\0" +"*.ye\0scrapper-site.net\0github.io\0" +"guide\0" +"co.com\0" +"fujimi.nagano.jp\0nom.re\0" +"research.aero\0oizumi.gunma.jp\0" +"vv.it\0muroran.hokkaido.jp\0s\xc3\xb8ndre-land.no\0" +"ullensaker.no\0" +"sandnessjoen.no\0nannestad.no\0" +"equipment\0vet\0" +"nikko.tochigi.jp\0\xd0\xbc\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0\0" +"nom.ro\0winners\0" +"*.kobe.jp\0" +"talk\0" +"geelvinck.museum\0" +"ltd.gi\0" +"plants.museum\0" +"omaezaki.shizuoka.jp\0" +"fujishiro.ibaraki.jp\0" +"place\0" +"imizu.toyama.jp\0marketing\0" +"monza-brianza.it\0*.zw\0" +"nakai.kanagawa.jp\0ddnsking.com\0" +"romsa.no\0" +"ltd.hk\0" +"bieszczady.pl\0" +"toyokawa.aichi.jp\0" +"aukra.no\0" +"czest.pl\0" +"nom.tm\0cloudapp.net\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0acct.pro\0" +"juif.museum\0" +"gose.nara.jp\0" +"kakogawa.hyogo.jp\0" +"taiwa.miyagi.jp\0" +"club.aero\0fot.br\0" +"lombardy.it\0tsumagoi.gunma.jp\0colonialwilliamsburg.museum\0" +"ebetsu.hokkaido.jp\0" +"serveftp.org\0" +"n\xc3\xa1vuotna.no\0vig\0" +"kepno.pl\0" +"\xe5\xb1\xb1\xe5\x8f\xa3.jp\0" +"nanjo.okinawa.jp\0" +"koshimizu.hokkaido.jp\0" +"agriculture.museum\0vin\0" +"ens.tn\0" +"kaminokawa.tochigi.jp\0vip\0" +"yamagata.nagano.jp\0" +"immobilien\0" +"lundbeck\0" +"\xd8\xa7\xd8\xb1\xd8\xa7\xd9\x85\xd9\x83\xd9\x88\0" +"cherkasy.ua\0" +"browsersafetymark.io\0" +"namerikawa.toyama.jp\0" +"oirm.gov.pl\0" +"mizunami.gifu.jp\0nagiso.nagano.jp\0" +"4.bg\0mesaverde.museum\0cloudfunctions.net\0" +"kasuga.fukuoka.jp\0muncie.museum\0pioneer\0" +"suzaka.nagano.jp\0kr.ua\0audi\0" +"malbork.pl\0cc.nm.us\0" +"cc.id.us\0" +"ferrara.it\0" +"recipes\0" +"gobo.wakayama.jp\0" +"ltd.lk\0" +"fm.it\0roma.museum\0" +"turek.pl\0" +"anjo.aichi.jp\0" +"vt.us\0" +"artdeco.museum\0" +"kita.tokyo.jp\0\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" +"ad.jp\0" +"parts\0" +"beer\0" +"yasuoka.nagano.jp\0flatanger.no\0" +"pilot.aero\0" +"party\0" +"hiratsuka.kanagawa.jp\0" +"hemsedal.no\0" +"nom.za\0" +"vana\0" +"miyashiro.saitama.jp\0strand.no\0" +"kawanabe.kagoshima.jp\0smolensk.ru\0dynathome.net\0" +"hdfc\0" +"valledaosta.it\0" +"nishihara.okinawa.jp\0" +"yaita.tochigi.jp\0deal\0" +"contemporary.museum\0" +"minamifurano.hokkaido.jp\0" +"kin.okinawa.jp\0engerdal.no\0" +"games\0" +"amber.museum\0" +"simbirsk.ru\0" +"sn\xc3\xa5""ase.no\0" +"*.alces.network\0" +"\xe6\x89\x8b\xe6\x9c\xba\0" +"unzen.nagasaki.jp\0" +"shikabe.hokkaido.jp\0hirado.nagasaki.jp\0no.eu.org\0" +"minano.saitama.jp\0" +"murata.miyagi.jp\0itau\0" +"kitagawa.kochi.jp\0" +"gr.com\0" +"windmill.museum\0in-the-band.net\0" +"express.aero\0\xd9\x82\xd8\xb7\xd8\xb1\0" +"fm.no\0" +"6.bg\0wajiki.tokushima.jp\0" +"bonn.museum\0" +"shiraoka.saitama.jp\0" +"ah.cn\0" +"pvt.ge\0anan.tokushima.jp\0" +"bibai.hokkaido.jp\0katsuragi.wakayama.jp\0chuo.yamanashi.jp\0" +"ra.it\0naroy.no\0buryatia.ru\0" +"tatebayashi.gunma.jp\0wakasa.tottori.jp\0swatch\0" +"oshino.yamanashi.jp\0dyndns-mail.com\0" +"earth\0" +"vestre-slidre.no\0" +"cahcesuolo.no\0" +"wios.gov.pl\0wanggou\0" +"matsukawa.nagano.jp\0tyumen.ru\0" +"kolobrzeg.pl\0" +"morotsuka.miyazaki.jp\0olkusz.pl\0" +"taxi\0" +"bloxcms.com\0" +"filatelia.museum\0vagsoy.no\0" +"luroy.no\0" +"yabuki.fukushima.jp\0sokndal.no\0" +"pccw\0" +"polkowice.pl\0" +"name.hr\0" +"vercelli.it\0" +"aquila.it\0" +"vdonsk.ru\0melbourne\0" +"yamagata.gifu.jp\0" +"oji.nara.jp\0snaase.no\0" +"kakegawa.shizuoka.jp\0chocolate.museum\0" +"kashiba.nara.jp\0" +"hamatama.saga.jp\0kirovograd.ua\0" +"lancia\0" +"name.et\0" +"wakasa.fukui.jp\0lans.museum\0" +"freebox-os.com\0" +"takanezawa.tochigi.jp\0ltd.uk\0" +"beauty\0" +"cng.br\0eiheiji.fukui.jp\0" +"taishin.fukushima.jp\0versicherung\0" +"nishiarita.saga.jp\0" +"national.museum\0mattel\0wed\0" +"\xe9\xa3\x9f\xe5\x93\x81\0" +"kikuchi.kumamoto.jp\0" +"nz.eu.org\0" +"global.ssl.fastly.net\0" +"sanuki.kagawa.jp\0" +"iwate.iwate.jp\0" +"gc.ca\0" +"kakamigahara.gifu.jp\0selfip.info\0" +"belau.pw\0" +"kita.osaka.jp\0lib.ri.us\0" +"8.bg\0" +"museumcenter.museum\0" +"charter.aero\0" +"name.cy\0berlin.museum\0" +"suzu.ishikawa.jp\0kv.ua\0" +"sa.gov.pl\0" +"kharkov.ua\0cc.co.us\0" +"government.aero\0" +"rc.it\0" +"name.eg\0norfolk.museum\0" +"oxford.museum\0" +"salzburg.museum\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86\0" +"\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"chicago.museum\0" +"anan.nagano.jp\0" +"hidaka.saitama.jp\0" +"minamidaito.okinawa.jp\0" +"name.az\0\xe5\xb1\xb1\xe5\xbd\xa2.jp\0tienda\0" +"badajoz.museum\0\xe9\x9b\x86\xe5\x9b\xa2\0" +"net-freaks.com\0" +"trentinos-tirol.it\0" +"wmflabs.org\0" +"rockart.museum\0swidnica.pl\0makeup\0" +"univ.sn\0dell\0" +"settlers.museum\0" +"madrid.museum\0" +"tsurugi.ishikawa.jp\0gran.no\0" +"imb.br\0" +"nakagawa.hokkaido.jp\0manno.kagawa.jp\0" +"trust.museum\0\xd8\xb3\xd9\x88\xd8\xaf\xd8\xa7\xd9\x86\0" +"k12.nv.us\0win\0" +"fashion\0" +"agano.niigata.jp\0" +"mol.it\0kamiichi.toyama.jp\0lyngdal.no\0" +"wuoz.gov.pl\0best\0eating-organic.net\0" +"tozawa.yamagata.jp\0" +"meeres.museum\0" +"indian.museum\0" +"kutchan.hokkaido.jp\0kosuge.yamanashi.jp\0snoasa.no\0" +"higashi.okinawa.jp\0meguro.tokyo.jp\0origins\0\xd9\x83\xd8\xa7\xd8\xab\xd9\x88\xd9\x84\xd9\x8a\xd9\x83\0" +"auto\0" +"bearalvahki.no\0" +"ah.no\0" +"amsterdam.museum\0" +"collegefan.org\0" +"ln.cn\0yoshioka.gunma.jp\0" +"toyone.aichi.jp\0" +"webhop.net\0" +"sanjo.niigata.jp\0eastcoast.museum\0" +"re.it\0h\xc3\xb8yanger.no\0" +"kuchinotsu.nagasaki.jp\0" +"zara\0" +"okagaki.fukuoka.jp\0" +"date.fukushima.jp\0" +"accident-prevention.aero\0design.aero\0" +"kyoto.jp\0homesense\0piaget\0wme\0" +"hanyu.saitama.jp\0nuremberg.museum\0utah.museum\0" +"historichouses.museum\0" +"moscow.museum\0stateofdelaware.museum\0" +"from-al.com\0" +"denmark.museum\0" +"sukumo.kochi.jp\0" +"nexus\0" +"trentino-altoadige.it\0" +"smile\0" +"iwama.ibaraki.jp\0karikatur.museum\0\xe6\x9b\xb8\xe7\xb1\x8d\0" +"re.kr\0" +"suisse.museum\0" +"from-ca.com\0" +"usantiques.museum\0" +"vyatka.ru\0\xe5\x8f\xb0\xe7\x81\xa3\0guge\0" +"\xce\xb5\xce\xbb\0" +"yusui.kagoshima.jp\0sytes.net\0" +"shimotsuke.tochigi.jp\0" +"k12.oh.us\0stufftoread.com\0" +"hikimi.shimane.jp\0" +"qc.com\0googleapis.com\0" +"goodyear\0" +"nalchik.ru\0" +"desi\0" +"bremanger.no\0" +"chuo.tokyo.jp\0" +"wow\0" +"christmas\0cricket\0" +"kchr.ru\0" +"bale.museum\0" +"nalchik.su\0" +"ogawa.ibaraki.jp\0" +"toda.saitama.jp\0\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0surgery\0" +"kita.kyoto.jp\0gjesdal.no\0energy\0" +"zachpomor.pl\0" +"\xe8\xb4\xad\xe7\x89\xa9\0" +"tydal.no\0wielun.pl\0" +"otaki.nagano.jp\0" +"sasayama.hyogo.jp\0fed.us\0" +"cc.tn.us\0" +"cc.il.us\0" +"motoyama.kochi.jp\0broadcast.museum\0cc.dc.us\0" +"suwa.nagano.jp\0" +"voagat.no\0" +"off.ai\0nagara.chiba.jp\0" +"rg.it\0\xe0\xb8\x84\xe0\xb8\xad\xe0\xb8\xa1\0" +"os.hordaland.no\0hu.net\0" +"ge.it\0" +"al.it\0" +"olecko.pl\0" +"shibukawa.gunma.jp\0" +"bergamo.it\0" +"mielno.pl\0ga.us\0" }; static const quint16 tldChunkCount = 2; -static const quint32 tldChunks[] = {65528, 84704}; +static const quint32 tldChunks[] = {65512, 93761}; QT_END_NAMESPACE diff --git a/src/corelib/io/qurltlds_p.h.INFO b/src/corelib/io/qurltlds_p.h.INFO index 7e5c0bb19f..3f3d808a21 100644 --- a/src/corelib/io/qurltlds_p.h.INFO +++ b/src/corelib/io/qurltlds_p.h.INFO @@ -9,8 +9,8 @@ Those arrays in qurltlds_p.h are derived from the Public Suffix List ([2]), which was originally provided by Jo Hermans . -The file qurltlds_p.h was last generated Wednesday, -February 11th 14:36 2015. +The file qurltlds_p.h was last generated Thursday, +October 20th 8:40 2016. ---- [1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp index 12ac1e519d..7af057da65 100644 --- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp +++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp @@ -192,16 +192,16 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data() result += cookie; QTest::newRow("effective-tld1-accepted") << preset << cookie << "http://something.co.uk" << result << true; - // 2. anything .mz is an effective TLD ('*.mz'), but 'teledata.mz' is an exception + // 2. anything .ck is an effective TLD ('*.ck'), but 'www.ck' is an exception result.clear(); preset.clear(); - cookie.setDomain(".farmacia.mz"); - QTest::newRow("effective-tld2-denied") << preset << cookie << "http://farmacia.mz" << result << false; - QTest::newRow("effective-tld2-denied2") << preset << cookie << "http://www.farmacia.mz" << result << false; - QTest::newRow("effective-tld2-denied3") << preset << cookie << "http://www.anything.farmacia.mz" << result << false; - cookie.setDomain(".teledata.mz"); + cookie.setDomain(".foo.ck"); + QTest::newRow("effective-tld2-denied") << preset << cookie << "http://foo.ck" << result << false; + QTest::newRow("effective-tld2-denied2") << preset << cookie << "http://www.foo.ck" << result << false; + QTest::newRow("effective-tld2-denied3") << preset << cookie << "http://www.anything.foo.ck" << result << false; + cookie.setDomain(".www.ck"); result += cookie; - QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.teledata.mz" << result << true; + QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.www.ck" << result << true; result.clear(); preset.clear(); From 49d3bb005889b9fb5a06d6aadac23ebd5b2f9f2d Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Thu, 6 Oct 2016 11:24:38 +0200 Subject: [PATCH 110/196] Normalize realpath(3) output to composed form MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All strings coming out of POSIX API calls are converted to composed form by QFile::decodeName. Do the same for realpath(3) output. This is especially important for HFS+, which will store file names in decomposed form, and APIs will therefore return strings in decomposed form. Task-number: QTBUG-55896 Change-Id: I5e51f4e5712ff26bf9644cbcf9a9603995748892 Reviewed-by: Morten Johan Sørvig --- src/corelib/io/qfilesystemengine_unix.cpp | 2 +- tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index 7bc2293b0d..3cc27bf847 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -276,7 +276,7 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry, if (ret) { data.knownFlagsMask |= QFileSystemMetaData::ExistsAttribute; data.entryFlags |= QFileSystemMetaData::ExistsAttribute; - QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret)); + QString canonicalPath = QDir::cleanPath(QFile::decodeName(ret)); free(ret); return QFileSystemEntry(canonicalPath); } else if (errno == ENOENT) { // file doesn't exist diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp index d2c43f79d6..10921ea0a3 100644 --- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp @@ -770,6 +770,19 @@ void tst_QFileInfo::canonicalFilePath() QDir::current().rmdir(linkTarget); } #endif + +#ifdef Q_OS_DARWIN + { + // Check if canonicalFilePath's result is in Composed normalization form. + QString path = QString::fromLatin1("caf\xe9"); + QDir dir(QDir::tempPath()); + dir.mkdir(path); + QString canonical = QFileInfo(dir.filePath(path)).canonicalFilePath(); + QString roundtrip = QFile::decodeName(QFile::encodeName(canonical)); + QCOMPARE(canonical, roundtrip); + dir.rmdir(path); + } +#endif } void tst_QFileInfo::fileName_data() From ef88bf02efdfb1bde447ed924b30b656356a2f59 Mon Sep 17 00:00:00 2001 From: Frederik Schwarzer Date: Tue, 18 Oct 2016 17:38:17 +0200 Subject: [PATCH 111/196] Fix some typos in docs and apidocs While "commonest" is still correct English, it's rather old-fashioned and "most common" predominates Qt's wording style. Change-Id: I20d72c098ee40b2a89f91e42f7208fe5b87286a2 Reviewed-by: Frederik Gladhorn --- src/corelib/doc/src/eventsandfilters.qdoc | 2 +- src/corelib/io/qurl.cpp | 2 +- src/corelib/kernel/qcoreapplication.cpp | 2 +- src/corelib/tools/qregularexpression.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/doc/src/eventsandfilters.qdoc b/src/corelib/doc/src/eventsandfilters.qdoc index 99a40bb1b8..64f015b9cc 100644 --- a/src/corelib/doc/src/eventsandfilters.qdoc +++ b/src/corelib/doc/src/eventsandfilters.qdoc @@ -80,7 +80,7 @@ \section1 Event Types - Most events types have special classes, notably QResizeEvent, + Most event types have special classes, notably QResizeEvent, QPaintEvent, QMouseEvent, QKeyEvent, and QCloseEvent. Each class subclasses QEvent and adds event-specific functions. For example, QResizeEvent adds \l{QResizeEvent::}{size()} and diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index a5643d123d..7512bcd83f 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -149,7 +149,7 @@ dealing with URLs and strings: \list - \li When creating an QString to contain a URL from a QByteArray or a + \li When creating a QString to contain a URL from a QByteArray or a char*, always use QString::fromUtf8(). \endlist */ diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index f5b15207cc..bd3c12ce97 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1031,7 +1031,7 @@ bool QCoreApplication::notifyInternal2(QObject *receiver, QEvent *event) approaches are listed below: \list 1 \li Reimplementing \l {QWidget::}{paintEvent()}, \l {QWidget::}{mousePressEvent()} and so - on. This is the commonest, easiest, and least powerful way. + on. This is the most common, easiest, and least powerful way. \li Reimplementing this function. This is very powerful, providing complete control; but only one subclass can be active at a time. diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp index 81b108059b..9781733abb 100644 --- a/src/corelib/tools/qregularexpression.cpp +++ b/src/corelib/tools/qregularexpression.cpp @@ -542,7 +542,7 @@ QT_BEGIN_NAMESPACE \inmodule QtCore \reentrant - \brief The QRegularExpressionMatch class provides the results of a matching + \brief The QRegularExpressionMatch class provides the results of matching a QRegularExpression against a string. \since 5.0 From 92df823ed6170f6d9d33687e9a8c4f215f7db2a9 Mon Sep 17 00:00:00 2001 From: Frederik Schwarzer Date: Thu, 20 Oct 2016 16:41:49 +0200 Subject: [PATCH 112/196] QFileInfo: fix double sentence in apidoc Change-Id: Ie1cf32565b2fcb828ec381c45595adad1392e2ec Reviewed-by: Frederik Gladhorn --- src/corelib/io/qfileinfo.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index 3458d5eb25..d2e287039f 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -287,8 +287,7 @@ QDateTime &QFileInfoPrivate::getFileTime(QAbstractFileEngine::FileTime request) \note To speed up performance, QFileInfo caches information about the file. - To speed up performance, QFileInfo caches information about the - file. Because files can be changed by other users or programs, or + Because files can be changed by other users or programs, or even by other parts of the same program, there is a function that refreshes the file information: refresh(). If you want to switch off a QFileInfo's caching and force it to access the file system From 016b5bc949b6dfb2f76db2e8b40a40e7eaee6828 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 19 Oct 2016 12:20:10 +0300 Subject: [PATCH 113/196] Plugins: use reserve() to optimize memory allocations Change-Id: Id78ce43137e352292a9933222fe2f92d4ff4d69b Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- .../platforminputcontexts/compose/generator/qtablegenerator.cpp | 1 + src/plugins/platforms/mirclient/qmirclientinput.cpp | 1 + src/plugins/platforms/openwfd/qopenwfdintegration.cpp | 1 + src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp | 1 + src/plugins/platforms/xcb/qxcbmime.cpp | 1 + 5 files changed, 5 insertions(+) diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp index a4d7e504b7..bd25992457 100644 --- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp +++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp @@ -255,6 +255,7 @@ void TableGenerator::initPossibleLocations() // never meant for external software to parse compose tables directly. Best we // can do is to hardcode search paths. To add an extra system path use // the QTCOMPOSE environment variable + m_possibleLocations.reserve(7); if (qEnvironmentVariableIsSet("QTCOMPOSE")) m_possibleLocations.append(QString::fromLocal8Bit(qgetenv("QTCOMPOSE"))); m_possibleLocations.append(QStringLiteral("/usr/share/X11/locale")); diff --git a/src/plugins/platforms/mirclient/qmirclientinput.cpp b/src/plugins/platforms/mirclient/qmirclientinput.cpp index 4817185d41..b3b21ae0e3 100644 --- a/src/plugins/platforms/mirclient/qmirclientinput.cpp +++ b/src/plugins/platforms/mirclient/qmirclientinput.cpp @@ -347,6 +347,7 @@ void QMirClientInput::dispatchTouchEvent(QMirClientWindow *window, const MirInpu // TODO: Is it worth setting the Qt::TouchPointStationary ones? Currently they are left // as Qt::TouchPointMoved const unsigned int kPointerCount = mir_touch_event_point_count(tev); + touchPoints.reserve(int(kPointerCount)); for (unsigned int i = 0; i < kPointerCount; ++i) { QWindowSystemInterface::TouchPoint touchPoint; diff --git a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp index 9ed61f7b2e..4850ca2e45 100644 --- a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp +++ b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp @@ -68,6 +68,7 @@ QOpenWFDIntegration::QOpenWFDIntegration() int actualNumberOfDevices = wfdEnumerateDevices(devices,numberOfDevices,0); Q_ASSERT(actualNumberOfDevices == numberOfDevices); + mDevices.reserve(actualNumberOfDevices); for (int i = 0; i < actualNumberOfDevices; i++) { mDevices.append(new QOpenWFDDevice(this,devices[i])); } diff --git a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp index 90a09d3087..a6236f2376 100644 --- a/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp +++ b/src/plugins/platforms/qnx/qqnxbuttoneventnotifier.cpp @@ -67,6 +67,7 @@ QQnxButtonEventNotifier::QQnxButtonEventNotifier(QObject *parent) // fetch the new button ids int enumeratorIndex = QQnxButtonEventNotifier::staticMetaObject.indexOfEnumerator(QByteArrayLiteral("ButtonId")); QMetaEnum enumerator = QQnxButtonEventNotifier::staticMetaObject.enumerator(enumeratorIndex); + m_buttonKeys.reserve(ButtonCount - bid_minus); for (int buttonId = bid_minus; buttonId < ButtonCount; ++buttonId) { m_buttonKeys.append(enumerator.valueToKey(buttonId)); m_state[buttonId] = ButtonUp; diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index 3e9b0e1e4a..3643b3e975 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -210,6 +210,7 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, if (format == QLatin1String("text/uri-list")) { const auto urls = str.splitRef(QLatin1Char('\n')); QList list; + list.reserve(urls.size()); for (const QStringRef &s : urls) { const QUrl url(s.trimmed().toString()); if (url.isValid()) From 10b9321c1dc19236620ba20bdf54cae73891d1ef Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 19 Oct 2016 15:30:58 +0300 Subject: [PATCH 114/196] qxcbconnection.cpp: fix warning about unused function isXIEvent() is used iff XCB_USE_XINPUT2 is defined. So move declaration of the function in XCB_USE_XINPUT2 define scope. Change-Id: I6f045cd07d572ee7425ee6edc5ac73dcf0afdb37 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/plugins/platforms/xcb/qxcbconnection.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index c533a2a5f5..3d808d1d37 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -110,6 +110,7 @@ Q_LOGGING_CATEGORY(lcQpaScreen, "qt.qpa.screen") #define XCB_GE_GENERIC 35 #endif +#if defined(XCB_USE_XINPUT2) // Starting from the xcb version 1.9.3 struct xcb_ge_event_t has changed: // - "pad0" became "extension" // - "pad1" and "pad" became "pad0" @@ -127,6 +128,7 @@ static inline bool isXIEvent(xcb_generic_event_t *event, int opCode) qt_xcb_ge_event_t *e = (qt_xcb_ge_event_t *)event; return e->extension == opCode; } +#endif // XCB_USE_XINPUT2 #ifdef XCB_USE_XLIB static const char * const xcbConnectionErrors[] = { From 512934f7e70592ed06a790fcb46dde1e435b488e Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Mon, 10 Oct 2016 15:29:26 +0200 Subject: [PATCH 115/196] HTTP/2 - fix the handling of PUSH_PROMISE HTTP/2 allows a server to pre-emptively send (or "push") responses (along with corresponding "promised" requests) to a client in association with a previous client-initiated request. This can be useful when the server knows the client will need to have those responses available in order to fully process the response to the original request. Server push is semantically equivalent to a server responding to a request; however, in this case, that request is also sent by the server, as a PUSH_PROMISE frame. The PUSH_PROMISE frame includes a header block that contains a complete set of request header fields that the server attributes to the request. After sending the PUSH_PROMISE frame, the server can begin delivering the pushed response as a response on a server-initiated stream that uses the promised stream identifier. This patch: - fixes the HPACK decompression of PUSH_PROMISE frames; - allows a user to enable PUSH_PROMISE; - processes and caches pushed data for promised streams; - updates auto-test - emulates a simple PUSH_PROMISE scenario. Change-Id: Ic4850863a5e3895320baac3871a723fc091b4aca Reviewed-by: Edward Welbourne --- src/network/access/http2/http2frames.cpp | 33 ++ src/network/access/http2/http2frames_p.h | 35 +- src/network/access/http2/http2protocol_p.h | 4 + src/network/access/http2/http2streams.cpp | 11 +- src/network/access/http2/http2streams_p.h | 25 +- src/network/access/qhttp2protocolhandler.cpp | 372 ++++++++++++++---- src/network/access/qhttp2protocolhandler_p.h | 19 +- tests/auto/network/access/http2/http2srv.cpp | 63 ++- tests/auto/network/access/http2/http2srv.h | 4 + tests/auto/network/access/http2/tst_http2.cpp | 148 +++++-- 10 files changed, 586 insertions(+), 128 deletions(-) diff --git a/src/network/access/http2/http2frames.cpp b/src/network/access/http2/http2frames.cpp index 978bee09b1..5a684c2f41 100644 --- a/src/network/access/http2/http2frames.cpp +++ b/src/network/access/http2/http2frames.cpp @@ -244,6 +244,24 @@ quint32 Frame::dataSize() const return size; } +quint32 Frame::hpackBlockSize() const +{ + Q_ASSERT(validatePayload() == FrameStatus::goodFrame); + + const auto frameType = type(); + Q_ASSERT(frameType == FrameType::HEADERS || + frameType == FrameType::PUSH_PROMISE || + frameType == FrameType::CONTINUATION); + + quint32 size = dataSize(); + if (frameType == FrameType::PUSH_PROMISE) { + Q_ASSERT(size >= 4); + size -= 4; + } + + return size; +} + const uchar *Frame::dataBegin() const { Q_ASSERT(validatePayload() == FrameStatus::goodFrame); @@ -260,6 +278,21 @@ const uchar *Frame::dataBegin() const return src; } +const uchar *Frame::hpackBlockBegin() const +{ + Q_ASSERT(validatePayload() == FrameStatus::goodFrame); + + const auto frameType = type(); + Q_ASSERT(frameType == FrameType::HEADERS || + frameType == FrameType::PUSH_PROMISE || + frameType == FrameType::CONTINUATION); + + const uchar *begin = dataBegin(); + if (frameType == FrameType::PUSH_PROMISE) + begin += 4; // That's a promised stream, skip it. + return begin; +} + FrameStatus FrameReader::read(QAbstractSocket &socket) { if (offset < frameHeaderSize) { diff --git a/src/network/access/http2/http2frames_p.h b/src/network/access/http2/http2frames_p.h index 84ba9c3662..e5f6d46c67 100644 --- a/src/network/access/http2/http2frames_p.h +++ b/src/network/access/http2/http2frames_p.h @@ -71,27 +71,29 @@ namespace Http2 struct Q_AUTOTEST_EXPORT Frame { Frame(); - // Reading these values without first forming a valid frame - // (either reading it from a socket or building it) will result - // in undefined behavior: + // Reading these values without first forming a valid frame (either reading + // it from a socket or building it) will result in undefined behavior: FrameType type() const; quint32 streamID() const; FrameFlags flags() const; quint32 payloadSize() const; uchar padding() const; - // In HTTP/2 a stream's priority is specified by its weight - // and a stream (id) it depends on: + // In HTTP/2 a stream's priority is specified by its weight and a stream + // (id) it depends on: bool priority(quint32 *streamID = nullptr, uchar *weight = nullptr) const; FrameStatus validateHeader() const; FrameStatus validatePayload() const; - // Number of payload bytes without padding and/or priority + // Number of payload bytes without padding and/or priority. quint32 dataSize() const; - // Beginning of payload without priority/padding - // bytes. + // HEADERS data size for HEADERS, PUSH_PROMISE and CONTINUATION streams: + quint32 hpackBlockSize() const; + // Beginning of payload without priority/padding bytes. const uchar *dataBegin() const; + // HEADERS data beginning for HEADERS, PUSH_PROMISE and CONTINUATION streams: + const uchar *hpackBlockBegin() const; std::vector buffer; }; @@ -134,8 +136,7 @@ public: void setFlags(FrameFlags flags); void addFlag(FrameFlag flag); - // All append functions also update frame's payload - // length. + // All append functions also update frame's payload length. template void append(ValueType val) { @@ -161,16 +162,14 @@ public: // Write as a single frame: bool write(QAbstractSocket &socket) const; - // Two types of frames we are sending are affected by - // frame size limits: HEADERS and DATA. HEADERS' payload - // (hpacked HTTP headers, following a frame header) - // is always in our 'buffer', we send the initial HEADERS + // Two types of frames we are sending are affected by frame size limits: + // HEADERS and DATA. HEADERS' payload (hpacked HTTP headers, following a + // frame header) is always in our 'buffer', we send the initial HEADERS // frame first and then CONTINUTATION frame(s) if needed: bool writeHEADERS(QAbstractSocket &socket, quint32 sizeLimit); - // With DATA frames the actual payload is never in our 'buffer', - // it's a 'readPointer' from QNonContiguousData. We split - // this payload as needed into DATA frames with correct - // payload size fitting into frame size limit: + // With DATA frames the actual payload is never in our 'buffer', it's a + // 'readPointer' from QNonContiguousData. We split this payload as needed + // into DATA frames with correct payload size fitting into frame size limit: bool writeDATA(QAbstractSocket &socket, quint32 sizeLimit, const uchar *src, quint32 size); private: diff --git a/src/network/access/http2/http2protocol_p.h b/src/network/access/http2/http2protocol_p.h index 5c46949e23..5d730404bb 100644 --- a/src/network/access/http2/http2protocol_p.h +++ b/src/network/access/http2/http2protocol_p.h @@ -127,6 +127,10 @@ enum Http2PredefinedParameters maxConcurrentStreams = 100 // HTTP/2, 6.5.2 }; +// It's int, it has internal linkage, it's ok to have it in headers - +// no ODR violation is possible. +const quint32 lastValidStreamID((quint32(1) << 31) - 1); // HTTP/2, 5.1.1 + extern const Q_AUTOTEST_EXPORT char Http2clientPreface[clientPrefaceLength]; enum class FrameStatus diff --git a/src/network/access/http2/http2streams.cpp b/src/network/access/http2/http2streams.cpp index 660100f5e4..fa39c1d57b 100644 --- a/src/network/access/http2/http2streams.cpp +++ b/src/network/access/http2/http2streams.cpp @@ -61,6 +61,15 @@ Stream::Stream(const HttpMessagePair &message, quint32 id, qint32 sendSize, qint { } +Stream::Stream(const QString &cacheKey, quint32 id, qint32 recvSize) + : streamID(id), + // sendWindow is 0, this stream only receives data + recvWindow(recvSize), + state(remoteReserved), + key(cacheKey) +{ +} + QHttpNetworkReply *Stream::reply() const { return httpPair.second; @@ -99,6 +108,6 @@ QNonContiguousByteDevice *Stream::data() const return httpPair.first.uploadByteDevice(); } -} +} // namespace Http2 QT_END_NAMESPACE diff --git a/src/network/access/http2/http2streams_p.h b/src/network/access/http2/http2streams_p.h index 8a825a5457..8465486ae8 100644 --- a/src/network/access/http2/http2streams_p.h +++ b/src/network/access/http2/http2streams_p.h @@ -51,10 +51,16 @@ // We mean it. // +#include "http2frames_p.h" +#include "hpack_p.h" + #include #include #include +#include + +#include QT_BEGIN_NAMESPACE @@ -70,12 +76,16 @@ struct Q_AUTOTEST_EXPORT Stream open, halfClosedLocal, halfClosedRemote, + remoteReserved, closed }; Stream(); + // That's a ctor for a client-initiated stream: Stream(const HttpMessagePair &message, quint32 streamID, qint32 sendSize, qint32 recvSize); + // That's a reserved stream, created by PUSH_PROMISE from a server: + Stream(const QString &key, quint32 streamID, qint32 recvSize); QHttpNetworkReply *reply() const; const QHttpNetworkRequest &request() const; @@ -92,9 +102,22 @@ struct Q_AUTOTEST_EXPORT Stream qint32 recvWindow = 65535; StreamState state = idle; + QString key; // for PUSH_PROMISE }; -} +struct PushPromise +{ + quint32 reservedID = 0; + // PUSH_PROMISE has its own HEADERS, + // usually similar to what request has: + HPack::HttpHeader pushHeader; + // Response has its own (normal) HEADERS: + HPack::HttpHeader responseHeader; + // DATA frames on a promised stream: + std::vector dataFrames; +}; + +} // namespace Http2 QT_END_NAMESPACE diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index 68a00c6837..3fa0c18dc0 100644 --- a/src/network/access/qhttp2protocolhandler.cpp +++ b/src/network/access/qhttp2protocolhandler.cpp @@ -108,6 +108,41 @@ HPack::HttpHeader build_headers(const QHttpNetworkRequest &request, quint32 maxH return header; } +std::vector assemble_hpack_block(const std::vector &frames) +{ + std::vector hpackBlock; + + quint32 total = 0; + for (const auto &frame : frames) + total += frame.hpackBlockSize(); + + if (!total) + return hpackBlock; + + hpackBlock.resize(total); + auto dst = hpackBlock.begin(); + for (const auto &frame : frames) { + if (const auto hpackBlockSize = frame.hpackBlockSize()) { + const uchar *src = frame.hpackBlockBegin(); + std::copy(src, src + hpackBlockSize, dst); + dst += hpackBlockSize; + } + } + + return hpackBlock; +} + +QUrl urlkey_from_request(const QHttpNetworkRequest &request) +{ + QUrl url; + + url.setScheme(request.url().scheme()); + url.setAuthority(request.url().authority(QUrl::FullyEncoded | QUrl::RemoveUserInfo)); + url.setPath(QLatin1String(request.uri(false))); + + return url; +} + bool sum_will_overflow(qint32 windowSize, qint32 delta) { if (windowSize > 0) @@ -131,6 +166,9 @@ QHttp2ProtocolHandler::QHttp2ProtocolHandler(QHttpNetworkConnectionChannel *chan encoder(HPack::FieldLookupTable::DefaultSize, true) { continuedFrames.reserve(20); + bool ok = false; + const int env = qEnvironmentVariableIntValue("QT_HTTP2_ENABLE_PUSH_PROMISE", &ok); + pushPromiseEnabled = ok && env; } void QHttp2ProtocolHandler::_q_uploadDataReadyRead() @@ -241,10 +279,25 @@ bool QHttp2ProtocolHandler::sendRequest() if (!requests.size()) return true; + m_channel->state = QHttpNetworkConnectionChannel::WritingState; + // Check what was promised/pushed, maybe we do not have to send a request + // and have a response already? + + for (auto it = requests.begin(), endIt = requests.end(); it != endIt;) { + const auto key = urlkey_from_request(it->first).toString(); + if (!promisedData.contains(key)) { + ++it; + continue; + } + // Woo-hoo, we do not have to ask, the answer is ready for us: + HttpMessagePair message = *it; + it = requests.erase(it); + initReplyFromPushPromise(message, key); + } + const auto streamsToUse = std::min(maxConcurrentStreams - activeStreams.size(), requests.size()); auto it = requests.begin(); - m_channel->state = QHttpNetworkConnectionChannel::WritingState; for (quint32 i = 0; i < streamsToUse; ++i) { const qint32 newStreamID = createNewStream(*it); if (!newStreamID) { @@ -293,11 +346,11 @@ bool QHttp2ProtocolHandler::sendClientPreface() // 6.5 SETTINGS frameWriter.start(FrameType::SETTINGS, FrameFlag::EMPTY, Http2::connectionStreamID); - // MAX frame size (16 kb), disable PUSH + // MAX frame size (16 kb), enable/disable PUSH frameWriter.append(Settings::MAX_FRAME_SIZE_ID); frameWriter.append(quint32(Http2::maxFrameSize)); frameWriter.append(Settings::ENABLE_PUSH_ID); - frameWriter.append(quint32(0)); + frameWriter.append(quint32(pushPromiseEnabled)); if (!frameWriter.write(*m_socket)) return false; @@ -621,7 +674,7 @@ void QHttp2ProtocolHandler::handlePUSH_PROMISE() // 6.6 PUSH_PROMISE. Q_ASSERT(inboundFrame.type() == FrameType::PUSH_PROMISE); - if (prefaceSent && !waitingForSettingsACK) { + if (!pushPromiseEnabled && prefaceSent && !waitingForSettingsACK) { // This means, server ACKed our 'NO PUSH', // but sent us PUSH_PROMISE anyway. return connectionError(PROTOCOL_ERROR, "unexpected PUSH_PROMISE frame"); @@ -639,15 +692,19 @@ void QHttp2ProtocolHandler::handlePUSH_PROMISE() } const auto reservedID = qFromBigEndian(inboundFrame.dataBegin()); - if (!reservedID || (reservedID & 0x1)) { + if ((reservedID & 1) || reservedID <= lastPromisedID || + reservedID > Http2::lastValidStreamID) { return connectionError(PROTOCOL_ERROR, "PUSH_PROMISE with invalid promised stream ID"); } - // "ignoring a PUSH_PROMISE frame causes the stream - // state to become indeterminate" - let's RST_STREAM it then ... - sendRST_STREAM(reservedID, REFUSE_STREAM); - markAsReset(reservedID); + lastPromisedID = reservedID; + + if (!pushPromiseEnabled) { + // "ignoring a PUSH_PROMISE frame causes the stream state to become + // indeterminate" - let's send RST_STREAM frame with REFUSE_STREAM code. + resetPromisedStream(inboundFrame, Http2::REFUSE_STREAM); + } const bool endHeaders = inboundFrame.flags().testFlag(FrameFlag::END_HEADERS); continuedFrames.clear(); @@ -710,7 +767,7 @@ void QHttp2ProtocolHandler::handleGOAWAY() // "A server that is attempting to gracefully shut down a connection SHOULD // send an initial GOAWAY frame with the last stream identifier set to 2^31-1 // and a NO_ERROR code." - if (lastStreamID != (quint32(1) << 31) - 1 || errorCode != HTTP2_NO_ERROR) + if (lastStreamID != Http2::lastValidStreamID || errorCode != HTTP2_NO_ERROR) return connectionError(PROTOCOL_ERROR, "GOAWAY invalid stream/error code"); lastStreamID = 1; } else { @@ -795,16 +852,24 @@ void QHttp2ProtocolHandler::handleCONTINUATION() void QHttp2ProtocolHandler::handleContinuedHEADERS() { + // 'Continued' HEADERS can be: the initial HEADERS/PUSH_PROMISE frame + // with/without END_HEADERS flag set plus, if no END_HEADERS flag, + // a sequence of one or more CONTINUATION frames. Q_ASSERT(continuedFrames.size()); + const auto firstFrameType = continuedFrames[0].type(); + Q_ASSERT(firstFrameType == FrameType::HEADERS || + firstFrameType == FrameType::PUSH_PROMISE); const auto streamID = continuedFrames[0].streamID(); - if (continuedFrames[0].type() == FrameType::HEADERS) { + if (firstFrameType == FrameType::HEADERS) { if (activeStreams.contains(streamID)) { Stream &stream = activeStreams[streamID]; - if (stream.state != Stream::halfClosedLocal) { - // If we're receiving headers, they're a response to a request we sent; - // and we closed our end when we finished sending that. + if (stream.state != Stream::halfClosedLocal + && stream.state != Stream::remoteReserved) { + // We can receive HEADERS on streams initiated by our requests + // (these streams are in halfClosedLocal state) or remote-reserved + // streams from a server's PUSH_PROMISE. finishStreamWithError(stream, QNetworkReply::ProtocolInvalidOperationError, QLatin1String("HEADERS on invalid stream")); sendRST_STREAM(streamID, CANCEL); @@ -815,42 +880,49 @@ void QHttp2ProtocolHandler::handleContinuedHEADERS() } else if (!streamWasReset(streamID)) { return connectionError(PROTOCOL_ERROR, "HEADERS on invalid stream"); } + // Else: we cannot just ignore our peer's HEADERS frames - they change + // HPACK context - even though the stream was reset; apparently the peer + // has yet to see the reset. } - quint32 total = 0; - for (const auto &frame : continuedFrames) - total += frame.dataSize(); + std::vector hpackBlock(assemble_hpack_block(continuedFrames)); + if (!hpackBlock.size()) { + // It could be a PRIORITY sent in HEADERS - already handled by this + // point in handleHEADERS. If it was PUSH_PROMISE (HTTP/2 8.2.1): + // "The header fields in PUSH_PROMISE and any subsequent CONTINUATION + // frames MUST be a valid and complete set of request header fields + // (Section 8.1.2.3) ... If a client receives a PUSH_PROMISE that does + // not include a complete and valid set of header fields or the :method + // pseudo-header field identifies a method that is not safe, it MUST + // respond with a stream error (Section 5.4.2) of type PROTOCOL_ERROR." + if (firstFrameType == FrameType::PUSH_PROMISE) + resetPromisedStream(continuedFrames[0], Http2::PROTOCOL_ERROR); - if (!total) { - // It could be a PRIORITY sent in HEADERS - handled by this point. return; } - std::vector hpackBlock(total); - auto dst = hpackBlock.begin(); - for (const auto &frame : continuedFrames) { - if (!frame.dataSize()) - continue; - const uchar *src = frame.dataBegin(); - std::copy(src, src + frame.dataSize(), dst); - dst += frame.dataSize(); - } - - HPack::BitIStream inputStream{&hpackBlock[0], - &hpackBlock[0] + hpackBlock.size()}; - + HPack::BitIStream inputStream{&hpackBlock[0], &hpackBlock[0] + hpackBlock.size()}; if (!decoder.decodeHeaderFields(inputStream)) return connectionError(COMPRESSION_ERROR, "HPACK decompression failed"); - if (continuedFrames[0].type() == FrameType::HEADERS) { + switch (firstFrameType) { + case FrameType::HEADERS: if (activeStreams.contains(streamID)) { Stream &stream = activeStreams[streamID]; updateStream(stream, decoder.decodedHeader()); + // No DATA frames. if (continuedFrames[0].flags() & FrameFlag::END_STREAM) { finishStream(stream); deleteActiveStream(stream.streamID); } } + break; + case FrameType::PUSH_PROMISE: + if (!tryReserveStream(continuedFrames[0], decoder.decodedHeader())) + resetPromisedStream(continuedFrames[0], Http2::PROTOCOL_ERROR); + break; + default: + break; } } @@ -923,10 +995,26 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne return true; } -void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader &headers) +void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader &headers, + Qt::ConnectionType connectionType) { const auto httpReply = stream.reply(); - Q_ASSERT(httpReply); + Q_ASSERT(httpReply || stream.state == Stream::remoteReserved); + + if (!httpReply) { + // It's a PUSH_PROMISEd HEADERS, no actual request/reply + // exists yet, we have to cache this data for a future + // (potential) request. + + // TODO: the part with assignment is not especially cool + // or beautiful, good that at least QByteArray is implicitly + // sharing data. To be refactored (std::move). + Q_ASSERT(promisedData.contains(stream.key)); + PushPromise &promise = promisedData[stream.key]; + promise.responseHeader = headers; + return; + } + const auto httpReplyPrivate = httpReply->d_func(); for (const auto &pair : headers) { const auto &name = pair.name; @@ -951,18 +1039,30 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const HPack::HttpHeader } } - emit httpReply->headerChanged(); + if (connectionType == Qt::DirectConnection) + emit httpReply->headerChanged(); + else + QMetaObject::invokeMethod(httpReply, "headerChanged", connectionType); } -void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame) +void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame, + Qt::ConnectionType connectionType) { Q_ASSERT(frame.type() == FrameType::DATA); + auto httpReply = stream.reply(); + Q_ASSERT(httpReply || stream.state == Stream::remoteReserved); + + if (!httpReply) { + Q_ASSERT(promisedData.contains(stream.key)); + PushPromise &promise = promisedData[stream.key]; + // TODO: refactor this to use std::move. + promise.dataFrames.push_back(frame); + return; + } if (const auto length = frame.dataSize()) { const char *data = reinterpret_cast(frame.dataBegin()); auto &httpRequest = stream.request(); - auto httpReply = stream.reply(); - Q_ASSERT(httpReply); auto replyPrivate = httpReply->d_func(); replyPrivate->compressedData.append(data, length); @@ -978,24 +1078,38 @@ void QHttp2ProtocolHandler::updateStream(Stream &stream, const Frame &frame) } if (replyPrivate->shouldEmitSignals()) { - emit httpReply->readyRead(); - emit httpReply->dataReadProgress(replyPrivate->totalProgress, replyPrivate->bodyLength); + if (connectionType == Qt::DirectConnection) { + emit httpReply->readyRead(); + emit httpReply->dataReadProgress(replyPrivate->totalProgress, + replyPrivate->bodyLength); + } else { + QMetaObject::invokeMethod(httpReply, "readyRead", connectionType); + QMetaObject::invokeMethod(httpReply, "dataReadProgress", connectionType, + Q_ARG(qint64, replyPrivate->totalProgress), + Q_ARG(qint64, replyPrivate->bodyLength)); + } } } } -void QHttp2ProtocolHandler::finishStream(Stream &stream) +void QHttp2ProtocolHandler::finishStream(Stream &stream, Qt::ConnectionType connectionType) { + Q_ASSERT(stream.state == Stream::remoteReserved || stream.reply()); + stream.state = Stream::closed; auto httpReply = stream.reply(); - Q_ASSERT(httpReply); - httpReply->disconnect(this); - if (stream.data()) - stream.data()->disconnect(this); + if (httpReply) { + httpReply->disconnect(this); + if (stream.data()) + stream.data()->disconnect(this); + + if (connectionType == Qt::DirectConnection) + emit httpReply->finished(); + else + QMetaObject::invokeMethod(httpReply, "finished", connectionType); + } qCDebug(QT_HTTP2) << "stream" << stream.streamID << "closed"; - - emit httpReply->finished(); } void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, quint32 errorCode) @@ -1009,18 +1123,20 @@ void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, quint32 errorC void QHttp2ProtocolHandler::finishStreamWithError(Stream &stream, QNetworkReply::NetworkError error, const QString &message) { + Q_ASSERT(stream.state == Stream::remoteReserved || stream.reply()); + stream.state = Stream::closed; - auto httpReply = stream.reply(); - Q_ASSERT(httpReply); - httpReply->disconnect(this); - if (stream.data()) - stream.data()->disconnect(this); + if (auto httpReply = stream.reply()) { + httpReply->disconnect(this); + if (stream.data()) + stream.data()->disconnect(this); + + // TODO: error message must be translated!!! (tr) + emit httpReply->finishedWithError(error, message); + } qCWarning(QT_HTTP2) << "stream" << stream.streamID << "finished with error:" << message; - - // TODO: error message must be translated!!! (tr) - emit httpReply->finishedWithError(error, message); } quint32 QHttp2ProtocolHandler::createNewStream(const HttpMessagePair &message) @@ -1066,26 +1182,24 @@ void QHttp2ProtocolHandler::addToSuspended(Stream &stream) void QHttp2ProtocolHandler::markAsReset(quint32 streamID) { - // For now, we trace only client's streams (created by us, - // odd integer numbers). - if (streamID & 0x1) { - qCDebug(QT_HTTP2) << "stream" << streamID << "was reset"; - // This part is quite tricky: I have to clear this set - // so that it does not become tOOO big. - if (recycledStreams.size() > maxRecycledStreams) { - // At least, I'm erasing the oldest first ... - recycledStreams.erase(recycledStreams.begin(), - recycledStreams.begin() + - recycledStreams.size() / 2); - } + Q_ASSERT(streamID); - const auto it = std::lower_bound(recycledStreams.begin(), recycledStreams.end(), - streamID); - if (it != recycledStreams.end() && *it == streamID) - return; - - recycledStreams.insert(it, streamID); + qCDebug(QT_HTTP2) << "stream" << streamID << "was reset"; + // This part is quite tricky: I have to clear this set + // so that it does not become tOOO big. + if (recycledStreams.size() > maxRecycledStreams) { + // At least, I'm erasing the oldest first ... + recycledStreams.erase(recycledStreams.begin(), + recycledStreams.begin() + + recycledStreams.size() / 2); } + + const auto it = std::lower_bound(recycledStreams.begin(), recycledStreams.end(), + streamID); + if (it != recycledStreams.end() && *it == streamID) + return; + + recycledStreams.insert(it, streamID); } quint32 QHttp2ProtocolHandler::popStreamToResume() @@ -1175,7 +1289,7 @@ quint32 QHttp2ProtocolHandler::allocateStreamID() { // With protocol upgrade streamID == 1 will become // invalid. The logic must be updated. - if (nextID > quint32(std::numeric_limits::max())) + if (nextID > Http2::lastValidStreamID) return 0; const quint32 streamID = nextID; @@ -1184,6 +1298,114 @@ quint32 QHttp2ProtocolHandler::allocateStreamID() return streamID; } +bool QHttp2ProtocolHandler::tryReserveStream(const Http2::Frame &pushPromiseFrame, + const HPack::HttpHeader &requestHeader) +{ + Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE); + + QMap pseudoHeaders; + for (const auto &field : requestHeader) { + if (field.name == ":scheme" || field.name == ":path" + || field.name == ":authority" || field.name == ":method") { + if (field.value.isEmpty() || pseudoHeaders.contains(field.name)) + return false; + pseudoHeaders[field.name] = field.value; + } + } + + if (pseudoHeaders.size() != 4) { + // All four required, HTTP/2 8.1.2.3. + return false; + } + + const auto method = pseudoHeaders[":method"].toLower(); + if (method != "get" && method != "head") + return false; + + QUrl url; + url.setScheme(QLatin1String(pseudoHeaders[":scheme"])); + url.setAuthority(QLatin1String(pseudoHeaders[":authority"])); + url.setPath(QLatin1String(pseudoHeaders[":path"])); + + if (!url.isValid()) + return false; + + Q_ASSERT(activeStreams.contains(pushPromiseFrame.streamID())); + const Stream &associatedStream = activeStreams[pushPromiseFrame.streamID()]; + + const auto associatedUrl = urlkey_from_request(associatedStream.request()); + if (url.adjusted(QUrl::RemovePath) != associatedUrl.adjusted(QUrl::RemovePath)) + return false; + + const auto urlKey = url.toString(); + if (promisedData.contains(urlKey)) // duplicate push promise + return false; + + const auto reservedID = qFromBigEndian(pushPromiseFrame.dataBegin()); + // By this time all sanity checks on reservedID were done already + // in handlePUSH_PROMISE. We do not repeat them, only those below: + Q_ASSERT(!activeStreams.contains(reservedID)); + Q_ASSERT(!streamWasReset(reservedID)); + + auto &promise = promisedData[urlKey]; + promise.reservedID = reservedID; + promise.pushHeader = requestHeader; + + activeStreams.insert(reservedID, Stream(urlKey, reservedID, streamInitialRecvWindowSize)); + return true; +} + +void QHttp2ProtocolHandler::resetPromisedStream(const Frame &pushPromiseFrame, + Http2::Http2Error reason) +{ + Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE); + const auto reservedID = qFromBigEndian(pushPromiseFrame.dataBegin()); + sendRST_STREAM(reservedID, reason); + markAsReset(reservedID); +} + +void QHttp2ProtocolHandler::initReplyFromPushPromise(const HttpMessagePair &message, + const QString &cacheKey) +{ + Q_ASSERT(promisedData.contains(cacheKey)); + auto promise = promisedData.take(cacheKey); + + qCDebug(QT_HTTP2) << "found cached/promised response on stream" << promise.reservedID; + + bool replyFinished = false; + Stream *promisedStream = nullptr; + if (activeStreams.contains(promise.reservedID)) { + promisedStream = &activeStreams[promise.reservedID]; + // Ok, we have an active (not closed yet) stream waiting for more frames, + // let's pretend we requested it: + promisedStream->httpPair = message; + } else { + // Let's pretent we're sending a request now: + Stream closedStream(message, promise.reservedID, + streamInitialSendWindowSize, + streamInitialRecvWindowSize); + closedStream.state = Stream::halfClosedLocal; + activeStreams.insert(promise.reservedID, closedStream); + promisedStream = &activeStreams[promise.reservedID]; + replyFinished = true; + } + + Q_ASSERT(promisedStream); + + if (!promise.responseHeader.empty()) + updateStream(*promisedStream, promise.responseHeader, Qt::QueuedConnection); + + for (const auto &frame : promise.dataFrames) + updateStream(*promisedStream, frame, Qt::QueuedConnection); + + if (replyFinished) { + // Good, we already have received ALL the frames of that PUSH_PROMISE, + // nothing more to do. + finishStream(*promisedStream, Qt::QueuedConnection); + deleteActiveStream(promisedStream->streamID); + } +} + void QHttp2ProtocolHandler::connectionError(Http2::Http2Error errorCode, const char *message) { diff --git a/src/network/access/qhttp2protocolhandler_p.h b/src/network/access/qhttp2protocolhandler_p.h index 92c6851078..df0cf6a288 100644 --- a/src/network/access/qhttp2protocolhandler_p.h +++ b/src/network/access/qhttp2protocolhandler_p.h @@ -63,6 +63,7 @@ #include "http2/hpacktable_p.h" #include "http2/hpack_p.h" +#include #include #include #include @@ -123,9 +124,11 @@ private: bool acceptSetting(Http2::Settings identifier, quint32 newValue); - void updateStream(Stream &stream, const HPack::HttpHeader &headers); - void updateStream(Stream &stream, const Http2::Frame &dataFrame); - void finishStream(Stream &stream); + void updateStream(Stream &stream, const HPack::HttpHeader &headers, + Qt::ConnectionType connectionType = Qt::DirectConnection); + void updateStream(Stream &stream, const Http2::Frame &dataFrame, + Qt::ConnectionType connectionType = Qt::DirectConnection); + void finishStream(Stream &stream, Qt::ConnectionType connectionType = Qt::DirectConnection); // Error code send by a peer (GOAWAY/RST_STREAM): void finishStreamWithError(Stream &stream, quint32 errorCode); // Locally encountered error: @@ -194,7 +197,15 @@ private: quint32 allocateStreamID(); bool validPeerStreamID() const; bool goingAway = false; - + bool pushPromiseEnabled = false; + quint32 lastPromisedID = Http2::connectionStreamID; + QHash promisedData; + bool tryReserveStream(const Http2::Frame &pushPromiseFrame, + const HPack::HttpHeader &requestHeader); + void resetPromisedStream(const Http2::Frame &pushPromiseFrame, + Http2::Http2Error reason); + void initReplyFromPushPromise(const HttpMessagePair &message, + const QString &cacheKey); // Errors: void connectionError(Http2::Http2Error errorCode, const char *message); diff --git a/tests/auto/network/access/http2/http2srv.cpp b/tests/auto/network/access/http2/http2srv.cpp index f919937fc3..9d68b5c798 100644 --- a/tests/auto/network/access/http2/http2srv.cpp +++ b/tests/auto/network/access/http2/http2srv.cpp @@ -63,6 +63,16 @@ inline bool is_valid_client_stream(quint32 streamID) return (streamID & 0x1) && streamID <= std::numeric_limits::max(); } +void fill_push_header(const HttpHeader &originalRequest, HttpHeader &promisedRequest) +{ + for (const auto &field : originalRequest) { + if (field.name == QByteArray(":authority") || + field.name == QByteArray(":scheme")) { + promisedRequest.push_back(field); + } + } +} + } Http2Server::Http2Server(bool h2c, const Http2Settings &ss, const Http2Settings &cs) @@ -96,6 +106,12 @@ Http2Server::~Http2Server() { } +void Http2Server::enablePushPromise(bool pushEnabled, const QByteArray &path) +{ + pushPromiseEnabled = pushEnabled; + pushPath = path; +} + void Http2Server::setResponseBody(const QByteArray &body) { responseBody = body; @@ -112,7 +128,6 @@ void Http2Server::startServer() emit serverStarted(serverPort()); } - void Http2Server::sendServerSettings() { Q_ASSERT(socket); @@ -206,7 +221,7 @@ void Http2Server::incomingConnection(qintptr socketDescriptor) if (clearTextHTTP2) { socket.reset(new QTcpSocket); const bool set = socket->setSocketDescriptor(socketDescriptor); - Q_UNUSED(set) Q_ASSERT(set); + Q_ASSERT(set); // Stop listening: close(); QMetaObject::invokeMethod(this, "connectionEstablished", @@ -531,6 +546,48 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody) { Q_ASSERT(activeRequests.find(streamID) != activeRequests.end()); + const quint32 maxFrameSize(clientSetting(Settings::MAX_FRAME_SIZE_ID, + Http2::maxFrameSize)); + + if (pushPromiseEnabled) { + // A real server supporting PUSH_PROMISE will probably first send + // PUSH_PROMISE and then a normal response (to a real request), + // so that a client parsing this response and discovering another + // resource it needs, will _already_ have this additional resource + // in PUSH_PROMISE. + lastPromisedStream += 2; + + writer.start(FrameType::PUSH_PROMISE, FrameFlag::END_HEADERS, streamID); + writer.append(lastPromisedStream); + + HttpHeader pushHeader; + fill_push_header(activeRequests[streamID], pushHeader); + pushHeader.push_back(HeaderField(":method", "GET")); + pushHeader.push_back(HeaderField(":path", pushPath)); + + // Now interesting part, let's make it into 'stream': + activeRequests[lastPromisedStream] = pushHeader; + + HPack::BitOStream ostream(writer.outboundFrame().buffer); + const bool result = encoder.encodeRequest(ostream, pushHeader); + Q_ASSERT(result); + + // Well, it's not HEADERS, it's PUSH_PROMISE with ... HEADERS block. + // Should work. + writer.writeHEADERS(*socket, maxFrameSize); + qDebug() << "server sent a PUSH_PROMISE on" << lastPromisedStream; + + if (responseBody.isEmpty()) + responseBody = QByteArray("I PROMISE (AND PUSH) YOU ..."); + + // Now we send this promised data as a normal response on our reserved + // stream (disabling PUSH_PROMISE for the moment to avoid recursion): + pushPromiseEnabled = false; + sendResponse(lastPromisedStream, false); + pushPromiseEnabled = true; + // Now we'll continue with _normal_ response. + } + writer.start(FrameType::HEADERS, FrameFlag::END_HEADERS, streamID); if (emptyBody) writer.addFlag(FrameFlag::END_STREAM); @@ -544,9 +601,7 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody) HPack::BitOStream ostream(writer.outboundFrame().buffer); const bool result = encoder.encodeResponse(ostream, header); Q_ASSERT(result); - Q_UNUSED(result) - const quint32 maxFrameSize(clientSetting(Settings::MAX_FRAME_SIZE_ID, Http2::maxFrameSize)); writer.writeHEADERS(*socket, maxFrameSize); if (!emptyBody) { diff --git a/tests/auto/network/access/http2/http2srv.h b/tests/auto/network/access/http2/http2srv.h index 73b1d80f8e..15a4f212c9 100644 --- a/tests/auto/network/access/http2/http2srv.h +++ b/tests/auto/network/access/http2/http2srv.h @@ -68,6 +68,7 @@ public: ~Http2Server(); // To be called before server started: + void enablePushPromise(bool enabled, const QByteArray &path = QByteArray()); void setResponseBody(const QByteArray &body); // Invokables, since we can call them from the main thread, @@ -157,6 +158,9 @@ private: QByteArray responseBody; bool clearTextHTTP2 = false; + bool pushPromiseEnabled = false; + quint32 lastPromisedStream = 0; + QByteArray pushPath; protected slots: void ignoreErrorSlot(); diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index 582a103b2e..771ddb01be 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -44,8 +44,8 @@ #endif // NO_OPENSSL #endif // NO_SSL - #include +#include // At the moment our HTTP/2 imlpementation requires ALPN and this means OpenSSL. #if !defined(QT_NO_OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_TLSEXT) @@ -68,6 +68,7 @@ private slots: void multipleRequests(); void flowControlClientSide(); void flowControlServerSide(); + void pushPromise(); protected slots: // Slots to listen to our in-process server: @@ -90,8 +91,8 @@ private: // small payload. void runEventLoop(int ms = 5000); void stopEventLoop(); - // TODO: different parameters like client/server settings ... - Http2Server *newServer(const Http2Settings &serverSettings); + Http2Server *newServer(const Http2Settings &serverSettings, + const Http2Settings &clientSettings = defaultClientSettings); // Send a get or post request, depending on a payload (empty or not). void sendRequest(int streamNumber, QNetworkRequest::Priority priority = QNetworkRequest::NormalPriority, @@ -105,15 +106,57 @@ private: QTimer timer; int nRequests = 0; + int nSentRequests = 0; int windowUpdates = 0; bool prefaceOK = false; bool serverGotSettingsACK = false; static const Http2Settings defaultServerSettings; + static const Http2Settings defaultClientSettings; }; const Http2Settings tst_Http2::defaultServerSettings{{Http2::Settings::MAX_CONCURRENT_STREAMS_ID, 100}}; +const Http2Settings tst_Http2::defaultClientSettings{{Http2::Settings::MAX_FRAME_SIZE_ID, quint32(Http2::maxFrameSize)}, + {Http2::Settings::ENABLE_PUSH_ID, quint32(0)}}; + +namespace { + +// Our server lives/works on a different thread so we invoke its 'deleteLater' +// instead of simple 'delete'. +struct ServerDeleter +{ + static void cleanup(Http2Server *srv) + { + if (srv) + QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection); + } +}; + +using ServerPtr = QScopedPointer; + +struct EnvVarGuard +{ + EnvVarGuard(const char *name, const QByteArray &value) + : varName(name), + prevValue(qgetenv(name)) + { + Q_ASSERT(name); + qputenv(name, value); + } + ~EnvVarGuard() + { + if (prevValue.size()) + qputenv(varName.c_str(), prevValue); + else + qunsetenv(varName.c_str()); + } + + const std::string varName; + const QByteArray prevValue; +}; + +} // unnamed namespace tst_Http2::tst_Http2() : workerThread(new QThread) @@ -146,9 +189,9 @@ void tst_Http2::singleRequest() serverPort = 0; nRequests = 1; - auto srv = newServer(defaultServerSettings); + ServerPtr srv(newServer(defaultServerSettings)); - QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection); + QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection); runEventLoop(); QVERIFY(serverPort != 0); @@ -174,8 +217,6 @@ void tst_Http2::singleRequest() QCOMPARE(reply->error(), QNetworkReply::NoError); QVERIFY(reply->isFinished()); - - QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection); } void tst_Http2::multipleRequests() @@ -185,9 +226,9 @@ void tst_Http2::multipleRequests() serverPort = 0; nRequests = 10; - auto srv = newServer(defaultServerSettings); + ServerPtr srv(newServer(defaultServerSettings)); - QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection); + QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection); runEventLoop(); QVERIFY(serverPort != 0); @@ -198,8 +239,6 @@ void tst_Http2::multipleRequests() QNetworkRequest::NormalPriority, QNetworkRequest::LowPriority}; - - for (int i = 0; i < nRequests; ++i) sendRequest(i, priorities[std::rand() % 3]); @@ -208,8 +247,6 @@ void tst_Http2::multipleRequests() QVERIFY(nRequests == 0); QVERIFY(prefaceOK); QVERIFY(serverGotSettingsACK); - - QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection); } void tst_Http2::flowControlClientSide() @@ -230,12 +267,12 @@ void tst_Http2::flowControlClientSide() const Http2Settings serverSettings = {{Settings::MAX_CONCURRENT_STREAMS_ID, 3}}; - auto srv = newServer(serverSettings); + ServerPtr srv(newServer(serverSettings)); const QByteArray respond(int(Http2::defaultSessionWindowSize * 50), 'x'); srv->setResponseBody(respond); - QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection); + QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection); runEventLoop(); QVERIFY(serverPort != 0); @@ -249,8 +286,6 @@ void tst_Http2::flowControlClientSide() QVERIFY(prefaceOK); QVERIFY(serverGotSettingsACK); QVERIFY(windowUpdates > 0); - - QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection); } void tst_Http2::flowControlServerSide() @@ -270,11 +305,11 @@ void tst_Http2::flowControlServerSide() const Http2Settings serverSettings = {{Settings::MAX_CONCURRENT_STREAMS_ID, 7}}; - auto srv = newServer(serverSettings); + ServerPtr srv(newServer(serverSettings)); const QByteArray payload(int(Http2::defaultSessionWindowSize * 500), 'x'); - QMetaObject::invokeMethod(srv, "startServer", Qt::QueuedConnection); + QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection); runEventLoop(); QVERIFY(serverPort != 0); @@ -287,9 +322,73 @@ void tst_Http2::flowControlServerSide() QVERIFY(nRequests == 0); QVERIFY(prefaceOK); QVERIFY(serverGotSettingsACK); +} - QMetaObject::invokeMethod(srv, "deleteLater", Qt::QueuedConnection); - srv = nullptr; +void tst_Http2::pushPromise() +{ + // We will first send some request, the server should reply and also emulate + // PUSH_PROMISE sending us another response as promised. + using namespace Http2; + + clearHTTP2State(); + + serverPort = 0; + nRequests = 1; + + const EnvVarGuard env("QT_HTTP2_ENABLE_PUSH_PROMISE", "1"); + const Http2Settings clientSettings{{Settings::MAX_FRAME_SIZE_ID, quint32(Http2::maxFrameSize)}, + {Settings::ENABLE_PUSH_ID, quint32(1)}}; + + ServerPtr srv(newServer(defaultServerSettings, clientSettings)); + srv->enablePushPromise(true, QByteArray("/script.js")); + + QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection); + runEventLoop(); + + QVERIFY(serverPort != 0); + + const QString urlAsString((clearTextHTTP2 ? QString("http://127.0.0.1:%1/") + : QString("https://127.0.0.1:%1/")).arg(serverPort)); + const QUrl requestUrl(urlAsString + "index.html"); + + QNetworkRequest request(requestUrl); + request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, QVariant(true)); + + auto reply = manager.get(request); + connect(reply, &QNetworkReply::finished, this, &tst_Http2::replyFinished); + // Since we're using self-signed certificates, ignore SSL errors: + reply->ignoreSslErrors(); + + runEventLoop(); + + QVERIFY(nRequests == 0); + QVERIFY(prefaceOK); + QVERIFY(serverGotSettingsACK); + + QCOMPARE(reply->error(), QNetworkReply::NoError); + QVERIFY(reply->isFinished()); + + // Now, the most interesting part! + nSentRequests = 0; + nRequests = 1; + // Create an additional request (let's say, we parsed reply and realized we + // need another resource): + + const QUrl promisedUrl(urlAsString + "script.js"); + QNetworkRequest promisedRequest(promisedUrl); + promisedRequest.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, QVariant(true)); + reply = manager.get(promisedRequest); + connect(reply, &QNetworkReply::finished, this, &tst_Http2::replyFinished); + reply->ignoreSslErrors(); + + runEventLoop(); + + // Let's check that NO request was actually made: + QCOMPARE(nSentRequests, 0); + // Decreased by replyFinished(): + QCOMPARE(nRequests, 0); + QCOMPARE(reply->error(), QNetworkReply::NoError); + QVERIFY(reply->isFinished()); } void tst_Http2::serverStarted(quint16 port) @@ -318,12 +417,10 @@ void tst_Http2::stopEventLoop() eventLoop.quit(); } -Http2Server *tst_Http2::newServer(const Http2Settings &serverSettings) +Http2Server *tst_Http2::newServer(const Http2Settings &serverSettings, + const Http2Settings &clientSettings) { using namespace Http2; - // Client's settings are fixed by qhttp2protocolhandler. - const Http2Settings clientSettings = {{Settings::MAX_FRAME_SIZE_ID, quint32(Http2::maxFrameSize)}, - {Settings::ENABLE_PUSH_ID, quint32(0)}}; auto srv = new Http2Server(clearTextHTTP2, serverSettings, clientSettings); using Srv = Http2Server; @@ -397,6 +494,7 @@ void tst_Http2::decompressionFailed(quint32 streamID) void tst_Http2::receivedRequest(quint32 streamID) { + ++nSentRequests; qDebug() << " server got a request on stream" << streamID; Http2Server *srv = qobject_cast(sender()); Q_ASSERT(srv); From f773ddd026a6227cdb754dea4a5fe0a25137033f Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 19 Oct 2016 10:49:21 +0200 Subject: [PATCH 116/196] Fix when calling QSurfaceFormat::setDefaultFormat before Q*Application Fixes a regression introduced in commit 51767affb. QOpenGLContext::globalShareContext requires a QGuiApplication to exist. This wasn't required so far. Task-number: QTBUG-56614 Change-Id: I07bcf434fca536c4dc50feee7ea17eb541fd589a Reviewed-by: Liang Qi --- src/gui/kernel/qsurfaceformat.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qsurfaceformat.cpp b/src/gui/kernel/qsurfaceformat.cpp index 109ba8e610..d19690891f 100644 --- a/src/gui/kernel/qsurfaceformat.cpp +++ b/src/gui/kernel/qsurfaceformat.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef major #undef major @@ -760,10 +761,13 @@ Q_GLOBAL_STATIC(QSurfaceFormat, qt_default_surface_format) void QSurfaceFormat::setDefaultFormat(const QSurfaceFormat &format) { #ifndef QT_NO_OPENGL - QOpenGLContext *globalContext = QOpenGLContext::globalShareContext(); - if (globalContext && globalContext->isValid()) { - qWarning("Warning: Setting a new default format with a different version or profile after " - "the global shared context is created may cause issues with context sharing."); + if (qApp) { + QOpenGLContext *globalContext = QOpenGLContext::globalShareContext(); + if (globalContext && globalContext->isValid()) { + qWarning("Warning: Setting a new default format with a different version or profile " + "after the global shared context is created may cause issues with context " + "sharing."); + } } #endif *qt_default_surface_format() = format; From 686c44a69b13f6e884dd2b6d9991f4cd94597c5a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 28 Sep 2016 10:49:57 +0200 Subject: [PATCH 117/196] Plug remaining leaks in tests/auto/widgets/kernel The usual: - delete return values of QLayout::takeAt(), replaceWidget() - delete styles - delete top-level widgets - delete actions Either by naked delete, QScopedPointer or allocation on the stack instead of the heap. This fixes the remaining errors in GCC 6.1 Linux ASan runs of tests/auto/widgets/kernel. Change-Id: I8cc217be114b2e0edf34ad8d60dbf722f900bb7f Reviewed-by: Thiago Macieira --- tests/auto/widgets/kernel/qaction/tst_qaction.cpp | 6 +++--- .../kernel/qapplication/tst_qapplication.cpp | 12 ++++++------ .../kernel/qformlayout/tst_qformlayout.cpp | 15 +++++++++------ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp index 71b55d71ea..b496550f85 100644 --- a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp +++ b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp @@ -329,7 +329,7 @@ void tst_QAction::enabledVisibleInteraction() void tst_QAction::task200823_tooltip() { - QAction *action = new QAction("foo", 0); + const QScopedPointer action(new QAction("foo", Q_NULLPTR)); QString shortcut("ctrl+o"); action->setShortcut(shortcut); @@ -343,8 +343,8 @@ void tst_QAction::task200823_tooltip() void tst_QAction::task229128TriggeredSignalWithoutActiongroup() { // test without a group - QAction *actionWithoutGroup = new QAction("Test", qApp); - QSignalSpy spyWithoutGroup(actionWithoutGroup, SIGNAL(triggered(bool))); + const QScopedPointer actionWithoutGroup(new QAction("Test", Q_NULLPTR)); + QSignalSpy spyWithoutGroup(actionWithoutGroup.data(), SIGNAL(triggered(bool))); QCOMPARE(spyWithoutGroup.count(), 0); actionWithoutGroup->trigger(); // signal should be emitted diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index 87a189fc87..424069c8ae 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -2211,8 +2211,8 @@ void tst_QApplication::noQuitOnHide() { int argc = 0; QApplication app(argc, 0); - QWidget *window1 = new NoQuitOnHideWidget; - window1->show(); + NoQuitOnHideWidget window1; + window1.show(); QCOMPARE(app.exec(), 1); } @@ -2246,12 +2246,12 @@ void tst_QApplication::abortQuitOnShow() { int argc = 0; QApplication app(argc, 0); - QWidget *window1 = new ShowCloseShowWidget(false); - window1->show(); + ShowCloseShowWidget window1(false); + window1.show(); QCOMPARE(app.exec(), 0); - QWidget *window2 = new ShowCloseShowWidget(true); - window2->show(); + ShowCloseShowWidget window2(true); + window2.show(); QCOMPARE(app.exec(), 1); } diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp index e1b494c9f1..5703d7e114 100644 --- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp +++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp @@ -395,7 +395,8 @@ void tst_QFormLayout::setFormStyle() QCOMPARE(layout.rowWrapPolicy(), QFormLayout::DontWrapRows); #endif - widget.setStyle(QStyleFactory::create("windows")); + const QScopedPointer windowsStyle(QStyleFactory::create("windows")); + widget.setStyle(windowsStyle.data()); QCOMPARE(layout.labelAlignment(), Qt::AlignLeft); QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop)); @@ -406,14 +407,16 @@ void tst_QFormLayout::setFormStyle() this test is cross platform.. so create dummy styles that return all the right stylehints. */ - widget.setStyle(new DummyMacStyle()); + DummyMacStyle macStyle; + widget.setStyle(&macStyle); QCOMPARE(layout.labelAlignment(), Qt::AlignRight); QVERIFY(layout.formAlignment() == (Qt::AlignHCenter | Qt::AlignTop)); QCOMPARE(layout.fieldGrowthPolicy(), QFormLayout::FieldsStayAtSizeHint); QCOMPARE(layout.rowWrapPolicy(), QFormLayout::DontWrapRows); - widget.setStyle(new DummyQtopiaStyle()); + DummyQtopiaStyle qtopiaStyle; + widget.setStyle(&qtopiaStyle); QCOMPARE(layout.labelAlignment(), Qt::AlignRight); QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop)); @@ -891,7 +894,7 @@ void tst_QFormLayout::takeAt() QCOMPARE(layout->count(), 7); for (int i = 6; i >= 0; --i) { - layout->takeAt(0); + delete layout->takeAt(0); QCOMPARE(layout->count(), i); } } @@ -983,7 +986,7 @@ void tst_QFormLayout::replaceWidget() QFormLayout::ItemRole role; // replace editor - layout->replaceWidget(edit1, edit3); + delete layout->replaceWidget(edit1, edit3); edit1->hide(); // Not strictly needed for the test, but for normal usage it is. QCOMPARE(layout->indexOf(edit1), -1); QCOMPARE(layout->indexOf(edit3), editIndex); @@ -994,7 +997,7 @@ void tst_QFormLayout::replaceWidget() QCOMPARE(rownum, 0); QCOMPARE(role, QFormLayout::FieldRole); - layout->replaceWidget(label1, label2); + delete layout->replaceWidget(label1, label2); label1->hide(); QCOMPARE(layout->indexOf(label1), -1); QCOMPARE(layout->indexOf(label2), labelIndex); From 080daae7cd7b75ad4a959e66ce91222e84f0bf31 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 28 Sep 2016 10:44:25 +0200 Subject: [PATCH 118/196] Plug new leaks in tst_QFormLayout The new takeRow() functions return a pair of pointers to QLayoutItems and, as the name particle 'take' suggests, releases ownership of these layout items. Which in turn means that the caller of the function is supposed to deal with them. This was not done here. To fix, write a RAII class that takes ownership of the returned layout items, deleting them when it goes out of scope or gets a new value assigned (only move special member functions are implemented, making the class move -only). Deleting the QLayoutItems is not so easy, though: QFormLayout has a special function for clearing the QLayoutItems out, so it appears that just calling their destructors is not going to fly (though I don't know off the top of the head why that should be a problem). Solve this, for now, by adding the layout items back into a temporary QFormLayout for destruction. Change-Id: If862989207b20f1e3f757c19ec9d498c4491184f Reviewed-by: Samuel Gaist Reviewed-by: Thiago Macieira --- .../kernel/qformlayout/tst_qformlayout.cpp | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp index b7ca5d21c7..10a1e9bf6b 100644 --- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp +++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp @@ -51,6 +51,44 @@ static inline void setFrameless(QWidget *w) w->setWindowFlags(flags); } +struct QFormLayoutTakeRowResultHolder { + QFormLayoutTakeRowResultHolder(QFormLayout::TakeRowResult result) Q_DECL_NOTHROW + : labelItem(result.labelItem), + fieldItem(result.fieldItem) + { + } + ~QFormLayoutTakeRowResultHolder() + { + // re-use a QFormLayout to recursively reap the QLayoutItems: + QFormLayout disposer; + if (labelItem) + disposer.setItem(0, QFormLayout::LabelRole, labelItem); + if (fieldItem) + disposer.setItem(0, QFormLayout::FieldRole, fieldItem); + } + QFormLayoutTakeRowResultHolder(QFormLayoutTakeRowResultHolder &&other) Q_DECL_NOTHROW + : labelItem(other.labelItem), + fieldItem(other.fieldItem) + { + other.labelItem = nullptr; + other.fieldItem = nullptr; + } + QFormLayoutTakeRowResultHolder &operator=(QFormLayoutTakeRowResultHolder &&other) Q_DECL_NOTHROW + { + swap(other); + return *this; + } + + void swap(QFormLayoutTakeRowResultHolder &other) Q_DECL_NOTHROW + { + qSwap(labelItem, other.labelItem); + qSwap(fieldItem, other.fieldItem); + } + + QLayoutItem *labelItem; + QLayoutItem *fieldItem; +}; + class tst_QFormLayout : public QObject { Q_OBJECT @@ -814,7 +852,7 @@ void tst_QFormLayout::takeRow() QCOMPARE(layout->count(), 3); QCOMPARE(layout->rowCount(), 2); - QFormLayout::TakeRowResult result = layout->takeRow(1); + QFormLayoutTakeRowResultHolder result = layout->takeRow(1); QVERIFY(w2); QVERIFY(result.fieldItem); @@ -853,7 +891,7 @@ void tst_QFormLayout::takeRow_QWidget() QCOMPARE(layout->count(), 3); QCOMPARE(layout->rowCount(), 2); - QFormLayout::TakeRowResult result = layout->takeRow(w1); + QFormLayoutTakeRowResultHolder result = layout->takeRow(w1); QVERIFY(w1); QVERIFY(result.fieldItem); @@ -898,7 +936,7 @@ void tst_QFormLayout::takeRow_QLayout() QCOMPARE(layout->count(), 3); QCOMPARE(layout->rowCount(), 2); - QFormLayout::TakeRowResult result = layout->takeRow(l1); + QFormLayoutTakeRowResultHolder result = layout->takeRow(l1); QVERIFY(l1); QVERIFY(w1); From 0e888ae1a10750c7f5e644da8f774376f0c8da6a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 7 Oct 2016 10:49:18 +0200 Subject: [PATCH 119/196] tst_QGraphicsItem: plug remaining leaks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Store QGraphicsItems that are either not added to a scene or removed from it again and that are also not children of other items - iow: those that were leaked, even on successful runs of the tests, in either a QScopedPointer, or, where that'd cause too much churn due to adding of .data() calls, back the pointer by a stack-allocated object. This fixes the remaining leaks reported by GCC 6.2.1's ASan on successful runs of tests/auto/widgets/graphicsview/qgraphicsitem. Change-Id: I61c3a1cd39b9e96e83c5d7b8cf392e0b26ecbaf0 Reviewed-by: Edward Welbourne Reviewed-by: Sérgio Martins --- .../qgraphicsitem/tst_qgraphicsitem.cpp | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index 8ee9ffe294..4a5a66dd05 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -848,14 +848,14 @@ void tst_QGraphicsItem::parentItem() void tst_QGraphicsItem::setParentItem() { QGraphicsScene scene; - QGraphicsItem *item = scene.addRect(QRectF(0, 0, 10, 10)); + const QScopedPointer item(scene.addRect(QRectF(0, 0, 10, 10))); QCOMPARE(item->scene(), &scene); - QGraphicsRectItem *child = new QGraphicsRectItem; + const QScopedPointer child(new QGraphicsRectItem); QCOMPARE(child->scene(), (QGraphicsScene *)0); // This implicitly adds the item to the parent's scene - child->setParentItem(item); + child->setParentItem(item.data()); QCOMPARE(child->scene(), &scene); // This just makes it a toplevel @@ -863,8 +863,8 @@ void tst_QGraphicsItem::setParentItem() QCOMPARE(child->scene(), &scene); // Add the child back to the parent, then remove the parent from the scene - child->setParentItem(item); - scene.removeItem(item); + child->setParentItem(item.data()); + scene.removeItem(item.data()); QCOMPARE(child->scene(), (QGraphicsScene *)0); } @@ -962,19 +962,19 @@ void tst_QGraphicsItem::flags() QCOMPARE(item->pos(), QPointF(10, 10)); } { - QGraphicsItem* clippingParent = new QGraphicsRectItem; + const QScopedPointer clippingParent(new QGraphicsRectItem); clippingParent->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); - QGraphicsItem* nonClippingParent = new QGraphicsRectItem; + const QScopedPointer nonClippingParent(new QGraphicsRectItem); nonClippingParent->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false); - QGraphicsItem* child = new QGraphicsRectItem(nonClippingParent); + QGraphicsItem* child = new QGraphicsRectItem(nonClippingParent.data()); QVERIFY(!child->isClipped()); - child->setParentItem(clippingParent); + child->setParentItem(clippingParent.data()); QVERIFY(child->isClipped()); - child->setParentItem(nonClippingParent); + child->setParentItem(nonClippingParent.data()); QVERIFY(!child->isClipped()); } } @@ -3133,7 +3133,8 @@ void tst_QGraphicsItem::isAncestorOf() void tst_QGraphicsItem::commonAncestorItem() { - QGraphicsItem *ancestor = new QGraphicsRectItem; + QGraphicsRectItem ancestorItem; + QGraphicsItem *ancestor = &ancestorItem; QGraphicsItem *grandMa = new QGraphicsRectItem; QGraphicsItem *grandPa = new QGraphicsRectItem; QGraphicsItem *brotherInLaw = new QGraphicsRectItem; @@ -3633,7 +3634,7 @@ void tst_QGraphicsItem::setGroup() QGraphicsItemGroup group1; QGraphicsItemGroup group2; - QGraphicsRectItem *rect = new QGraphicsRectItem; + const QScopedPointer rect(new QGraphicsRectItem); QCOMPARE(rect->group(), (QGraphicsItemGroup *)0); QCOMPARE(rect->parentItem(), (QGraphicsItem *)0); rect->setGroup(&group1); @@ -6831,8 +6832,8 @@ void tst_QGraphicsItem::opacity() QFETCH(qreal, c2_effectiveOpacity); QFETCH(qreal, c3_effectiveOpacity); - QGraphicsRectItem *p = new QGraphicsRectItem; - QGraphicsRectItem *c1 = new QGraphicsRectItem(p); + const QScopedPointer p(new QGraphicsRectItem); + QGraphicsRectItem *c1 = new QGraphicsRectItem(p.data()); QGraphicsRectItem *c2 = new QGraphicsRectItem(c1); QGraphicsRectItem *c3 = new QGraphicsRectItem(c2); @@ -7219,11 +7220,12 @@ void tst_QGraphicsItem::sceneTransformCache() // Test that an item's scene transform is updated correctly when the // parent is transformed. QGraphicsScene scene; - QGraphicsRectItem *rect = scene.addRect(0, 0, 100, 100); + + const QScopedPointer rect(scene.addRect(0, 0, 100, 100)); rect->setPen(QPen(Qt::black, 0)); QGraphicsRectItem *rect2 = scene.addRect(0, 0, 100, 100); rect2->setPen(QPen(Qt::black, 0)); - rect2->setParentItem(rect); + rect2->setParentItem(rect.data()); rect2->rotate(90); rect->translate(0, 50); QGraphicsView view(&scene); @@ -7235,7 +7237,7 @@ void tst_QGraphicsItem::sceneTransformCache() x.rotate(90); QCOMPARE(rect2->sceneTransform(), x); - scene.removeItem(rect); + scene.removeItem(rect.data()); //Crazy use case : rect4 child of rect3 so the transformation of rect4 will be cached.Good! //We remove rect4 from the scene, then the validTransform bit flag is set to 0 and the index of the cache @@ -10688,7 +10690,7 @@ void tst_QGraphicsItem::scenePosChange() { ScenePosChangeTester* root = new ScenePosChangeTester; ScenePosChangeTester* child1 = new ScenePosChangeTester(root); - ScenePosChangeTester* grandChild1 = new ScenePosChangeTester(child1); + const QScopedPointer grandChild1(new ScenePosChangeTester(child1)); ScenePosChangeTester* child2 = new ScenePosChangeTester(root); ScenePosChangeTester* grandChild2 = new ScenePosChangeTester(child2); @@ -10740,7 +10742,7 @@ void tst_QGraphicsItem::scenePosChange() QCOMPARE(grandChild2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 3); // remove - scene.removeItem(grandChild1); + scene.removeItem(grandChild1.data()); delete grandChild2; grandChild2 = 0; QCoreApplication::processEvents(); // QGraphicsScenePrivate::_q_updateScenePosDescendants() root->moveBy(1.0, 1.0); From 84dc7d5f5560d69a0d7973f591ce253605a458ac Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 10 Oct 2016 21:53:09 +0200 Subject: [PATCH 120/196] QComboBox: fix build with GCC 7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC 7 warns about implicit fall-throughs now. Fix by adding the missing comments. Interestingly, Coverity only found one of them, even though all three still exist in dev, too. Change-Id: I9f2c5e2700d5ec5234fee3a532feffe01b7c4ce3 Coverity-Id: 11156 Reviewed-by: Edward Welbourne Reviewed-by: Sérgio Martins --- src/widgets/widgets/qcombobox.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 0ef76b95f0..22ba26b6a3 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -3125,6 +3125,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) case Qt::Key_Up: if (e->modifiers() & Qt::ControlModifier) break; // pass to line edit for auto completion + // fall through case Qt::Key_PageUp: #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled()) @@ -3210,6 +3211,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) switch (move) { case MoveFirst: newIndex = -1; + // fall through case MoveDown: newIndex++; while ((newIndex < count()) && !(d->model->flags(d->model->index(newIndex,d->modelColumn,d->root)) & Qt::ItemIsEnabled)) @@ -3217,6 +3219,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e) break; case MoveLast: newIndex = count(); + // fall through case MoveUp: newIndex--; while ((newIndex >= 0) && !(d->model->flags(d->model->index(newIndex,d->modelColumn,d->root)) & Qt::ItemIsEnabled)) From e70e168abb4b75dc8d00e2cba12efa1a111d429d Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 29 Sep 2016 09:06:12 +0200 Subject: [PATCH 121/196] Plug leaks in tst_QWizard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This completely over-engineered piece of code has a hierarchy of Operation subclasses encapsulating but three actual operations on a QWizard. Because these operations and their containers were all allocated on the heap, but never deleted, asan went crazy and reported over 50 leaks (not the record so far, but a (distant) second). Since these collections are passed through addColumn/QFETCH, too, it's nearly impossible to track their lifetimes. So instead of trying, delegate that to the runtime, ie. pack the Operation objects into QSharedPointer and pass around those instead. Change-Id: I8a0fe7a60cd30aed618667affaa030e80cf2b1ac Reviewed-by: Edward Welbourne Reviewed-by: Sérgio Martins --- .../widgets/dialogs/qwizard/tst_qwizard.cpp | 106 ++++++++++-------- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp index b2bdbac79a..5789f0ca42 100644 --- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp +++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp @@ -1626,28 +1626,44 @@ class SetPage : public Operation wizard->next(); } QString describe() const { return QString("set page %1").arg(page); } - const int page; + int page; public: - SetPage(int page) : page(page) {} + static QSharedPointer create(int page) + { + QSharedPointer o = QSharedPointer::create(); + o->page = page; + return o; + } }; class SetStyle : public Operation { void apply(QWizard *wizard) const { wizard->setWizardStyle(style); } QString describe() const { return QString("set style %1").arg(style); } - const QWizard::WizardStyle style; + QWizard::WizardStyle style; public: - SetStyle(QWizard::WizardStyle style) : style(style) {} + static QSharedPointer create(QWizard::WizardStyle style) + { + QSharedPointer o = QSharedPointer::create(); + o->style = style; + return o; + } }; class SetOption : public Operation { void apply(QWizard *wizard) const { wizard->setOption(option, on); } QString describe() const; - const QWizard::WizardOption option; - const bool on; + QWizard::WizardOption option; + bool on; public: - SetOption(QWizard::WizardOption option, bool on) : option(option), on(on) {} + static QSharedPointer create(QWizard::WizardOption option, bool on) + { + QSharedPointer o = QSharedPointer::create(); + o->option = option; + o->on = on; + return o; + } }; class OptionInfo @@ -1672,16 +1688,16 @@ class OptionInfo tags[QWizard::HaveCustomButton3] = "15/CB3"; for (int i = 0; i < 2; ++i) { - QMap operations_; + QMap > operations_; foreach (QWizard::WizardOption option, tags.keys()) - operations_[option] = new SetOption(option, i == 1); + operations_[option] = SetOption::create(option, i == 1); operations << operations_; } } OptionInfo(OptionInfo const&); OptionInfo& operator=(OptionInfo const&); QMap tags; - QList > operations; + QList > > operations; public: static OptionInfo &instance() { @@ -1690,7 +1706,7 @@ public: } QString tag(QWizard::WizardOption option) const { return tags.value(option); } - Operation * operation(QWizard::WizardOption option, bool on) const + QSharedPointer operation(QWizard::WizardOption option, bool on) const { return operations.at(on).value(option); } QList options() const { return tags.keys(); } }; @@ -1700,10 +1716,7 @@ QString SetOption::describe() const return QString("set opt %1 %2").arg(OptionInfo::instance().tag(option)).arg(on); } -Q_DECLARE_METATYPE(Operation *) -Q_DECLARE_METATYPE(SetPage *) -Q_DECLARE_METATYPE(SetStyle *) -Q_DECLARE_METATYPE(SetOption *) +Q_DECLARE_METATYPE(QVector >) class TestGroup { @@ -1720,14 +1733,17 @@ public: combinations.clear(); } - QList &add() - { combinations << new QList; return *(combinations.last()); } + QVector > &add() + { + combinations.resize(combinations.size() + 1); + return combinations.last(); + } void createTestRows() { for (int i = 0; i < combinations.count(); ++i) { QTest::newRow((name + QString(", row %1").arg(i)).toLatin1().data()) - << (i == 0) << (type == Equality) << *(combinations.at(i)); + << (i == 0) << (type == Equality) << combinations.at(i); ++nRows_; } } @@ -1738,7 +1754,7 @@ private: QString name; Type type; int nRows_; - QList *> combinations; + QVector > > combinations; }; class IntroPage : public QWizardPage @@ -1822,9 +1838,9 @@ public: } } - void applyOperations(const QList &operations) + void applyOperations(const QVector > &operations) { - foreach (Operation * op, operations) { + foreach (const QSharedPointer &op, operations) { if (op) { op->apply(this); opsDescr += QString("(%1) ").arg(op->describe()); @@ -1844,31 +1860,29 @@ public: class CombinationsTestData { TestGroup testGroup; - QList pageOps; - QList styleOps; - QMap *> setAllOptions; + QVector > pageOps; + QVector > styleOps; + QMap > > setAllOptions; public: CombinationsTestData() { QTest::addColumn("ref"); QTest::addColumn("testEquality"); - QTest::addColumn >("operations"); - pageOps << new SetPage(0) << new SetPage(1) << new SetPage(2); - styleOps << new SetStyle(QWizard::ClassicStyle) << new SetStyle(QWizard::ModernStyle) - << new SetStyle(QWizard::MacStyle); + QTest::addColumn > >("operations"); + pageOps << SetPage::create(0) << SetPage::create(1) << SetPage::create(2); + styleOps << SetStyle::create(QWizard::ClassicStyle) << SetStyle::create(QWizard::ModernStyle) + << SetStyle::create(QWizard::MacStyle); #define SETPAGE(page) pageOps.at(page) #define SETSTYLE(style) styleOps.at(style) #define OPT(option, on) OptionInfo::instance().operation(option, on) #define CLROPT(option) OPT(option, false) #define SETOPT(option) OPT(option, true) - setAllOptions[false] = new QList; - setAllOptions[true] = new QList; foreach (QWizard::WizardOption option, OptionInfo::instance().options()) { - *setAllOptions.value(false) << CLROPT(option); - *setAllOptions.value(true) << SETOPT(option); + setAllOptions[false] << CLROPT(option); + setAllOptions[true] << SETOPT(option); } -#define CLRALLOPTS *setAllOptions.value(false) -#define SETALLOPTS *setAllOptions.value(true) +#define CLRALLOPTS setAllOptions.value(false) +#define SETALLOPTS setAllOptions.value(true) } int nRows() const { return testGroup.nRows(); } @@ -1920,7 +1934,7 @@ public: testGroup.createTestRows(); for (int i = 0; i < 2; ++i) { - QList setOptions = *setAllOptions.value(i == 1); + QVector > setOptions = setAllOptions.value(i == 1); testGroup.reset("testAll 3.1"); testGroup.add() << setOptions; @@ -1937,21 +1951,21 @@ public: testGroup.createTestRows(); } - foreach (Operation *pageOp, pageOps) { + foreach (const QSharedPointer &pageOp, pageOps) { testGroup.reset("testAll 4.1"); testGroup.add() << pageOp; testGroup.add() << pageOp << pageOp; testGroup.createTestRows(); for (int i = 0; i < 2; ++i) { - QList optionOps = *setAllOptions.value(i == 1); + QVector > optionOps = setAllOptions.value(i == 1); testGroup.reset("testAll 4.2"); testGroup.add() << optionOps << pageOp; testGroup.add() << pageOp << optionOps; testGroup.createTestRows(); foreach (QWizard::WizardOption option, OptionInfo::instance().options()) { - Operation *optionOp = OPT(option, i == 1); + QSharedPointer optionOp = OPT(option, i == 1); testGroup.reset("testAll 4.3"); testGroup.add() << optionOp << pageOp; testGroup.add() << pageOp << optionOp; @@ -1960,21 +1974,21 @@ public: } } - foreach (Operation *styleOp, styleOps) { + foreach (const QSharedPointer &styleOp, styleOps) { testGroup.reset("testAll 5.1"); testGroup.add() << styleOp; testGroup.add() << styleOp << styleOp; testGroup.createTestRows(); for (int i = 0; i < 2; ++i) { - QList optionOps = *setAllOptions.value(i == 1); + QVector > optionOps = setAllOptions.value(i == 1); testGroup.reset("testAll 5.2"); testGroup.add() << optionOps << styleOp; testGroup.add() << styleOp << optionOps; testGroup.createTestRows(); foreach (QWizard::WizardOption option, OptionInfo::instance().options()) { - Operation *optionOp = OPT(option, i == 1); + QSharedPointer optionOp = OPT(option, i == 1); testGroup.reset("testAll 5.3"); testGroup.add() << optionOp << styleOp; testGroup.add() << styleOp << optionOp; @@ -1983,8 +1997,8 @@ public: } } - foreach (Operation *pageOp, pageOps) { - foreach (Operation *styleOp, styleOps) { + foreach (const QSharedPointer &pageOp, pageOps) { + foreach (const QSharedPointer &styleOp, styleOps) { testGroup.reset("testAll 6.1"); testGroup.add() << pageOp; @@ -2002,7 +2016,7 @@ public: testGroup.createTestRows(); for (int i = 0; i < 2; ++i) { - QList optionOps = *setAllOptions.value(i == 1); + QVector > optionOps = setAllOptions.value(i == 1); testGroup.reset("testAll 6.4"); testGroup.add() << optionOps << pageOp << styleOp; testGroup.add() << pageOp << optionOps << styleOp; @@ -2013,7 +2027,7 @@ public: testGroup.createTestRows(); foreach (QWizard::WizardOption option, OptionInfo::instance().options()) { - Operation *optionOp = OPT(option, i == 1); + QSharedPointer optionOp = OPT(option, i == 1); testGroup.reset("testAll 6.5"); testGroup.add() << optionOp << pageOp << styleOp; testGroup.add() << pageOp << optionOp << styleOp; @@ -2079,7 +2093,7 @@ void tst_QWizard::combinations() QFETCH(bool, ref); QFETCH(bool, testEquality); - QFETCH(QList, operations); + QFETCH(QVector >, operations); TestWizard wizard; #if !defined(QT_NO_STYLE_WINDOWSVISTA) From 30b7278c5cf1df0b507cd3139a53b7adcc190850 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Thu, 6 Oct 2016 16:32:49 +0200 Subject: [PATCH 122/196] Remove type punning from ucstrncmp Type punning is UB. Change-Id: I0022d2a38136d80f5ddda21cea7dc0968c736242 Reviewed-by: Oswald Buddenhagen Reviewed-by: Thiago Macieira --- src/corelib/tools/qstring.cpp | 48 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index ff7e7fd406..b7f83e4b9d 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -480,48 +480,46 @@ static int ucstrncmp(const QChar *a, const QChar *b, int l) if (!l) return 0; - union { - const QChar *w; - const quint32 *d; - quintptr value; - } sa, sb; - sa.w = a; - sb.w = b; - // check alignment - if ((sa.value & 2) == (sb.value & 2)) { + if ((reinterpret_cast(a) & 2) == (reinterpret_cast(b) & 2)) { // both addresses have the same alignment - if (sa.value & 2) { + if (reinterpret_cast(a) & 2) { // both addresses are not aligned to 4-bytes boundaries // compare the first character - if (*sa.w != *sb.w) - return sa.w->unicode() - sb.w->unicode(); + if (*a != *b) + return a->unicode() - b->unicode(); --l; - ++sa.w; - ++sb.w; + ++a; + ++b; // now both addresses are 4-bytes aligned } // both addresses are 4-bytes aligned // do a fast 32-bit comparison - const quint32 *e = sa.d + (l >> 1); - for ( ; sa.d != e; ++sa.d, ++sb.d) { - if (*sa.d != *sb.d) { - if (*sa.w != *sb.w) - return sa.w->unicode() - sb.w->unicode(); - return sa.w[1].unicode() - sb.w[1].unicode(); + const quint32 *da = reinterpret_cast(a); + const quint32 *db = reinterpret_cast(b); + const quint32 *e = da + (l >> 1); + for ( ; da != e; ++da, ++db) { + if (*da != *db) { + a = reinterpret_cast(da); + b = reinterpret_cast(db); + if (*a != *b) + return a->unicode() - b->unicode(); + return a[1].unicode() - b[1].unicode(); } } // do we have a tail? - return (l & 1) ? sa.w->unicode() - sb.w->unicode() : 0; + a = reinterpret_cast(da); + b = reinterpret_cast(db); + return (l & 1) ? a->unicode() - b->unicode() : 0; } else { // one of the addresses isn't 4-byte aligned but the other is - const QChar *e = sa.w + l; - for ( ; sa.w != e; ++sa.w, ++sb.w) { - if (*sa.w != *sb.w) - return sa.w->unicode() - sb.w->unicode(); + const QChar *e = a + l; + for ( ; a != e; ++a, ++b) { + if (*a != *b) + return a->unicode() - b->unicode(); } } return 0; From 33aa2fdd08880d2d6e2a4ff658b34c3a81c0b4ea Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 19 Sep 2016 21:41:36 -0700 Subject: [PATCH 123/196] Fix change-of-sign warnings caught by ICC 17 error #68: integer conversion resulted in a change of sign Change-Id: I33dc971f005a4848bb8ffffd1475ee53d394acf6 Reviewed-by: Andrew Knight Reviewed-by: Laszlo Agocs --- .../eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp | 2 +- src/plugins/platforms/vnc/qvnc.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp index 55d5941e5f..1f672afeb4 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp @@ -88,7 +88,7 @@ void QEglFSKmsEglDeviceScreen::waitForFlip() qCDebug(qLcEglfsKmsDebug, "Setting mode"); int ret = drmModeSetCrtc(device()->fd(), output().crtc_id, - -1, 0, 0, + uint32_t(-1), 0, 0, &output().connector_id, 1, &output().modes[output().mode]); if (ret) diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp index b3613cf18f..f386be193d 100644 --- a/src/plugins/platforms/vnc/qvnc.cpp +++ b/src/plugins/platforms/vnc/qvnc.cpp @@ -41,6 +41,7 @@ #include "qvncclient.h" #include "QtNetwork/qtcpserver.h" #include "QtNetwork/qtcpsocket.h" +#include #include #include @@ -554,7 +555,7 @@ void QVncClientCursor::write(QVncClient *client) const htons(cursor.height()) }; socket->write((char*)tmp, sizeof(tmp)); - const quint32 encoding = htonl(-239); + const qint32 encoding = qToBigEndian(-239); socket->write((char*)(&encoding), sizeof(encoding)); } From 71d4aea64630a84ba4163df7d9b44487ace2c665 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 21 Oct 2016 09:29:08 +0200 Subject: [PATCH 124/196] Fix description of feature 'topleveldomain' The property is 'purpose' now. Also elaborate a bit more on the feature. Change-Id: I66aa4165044f132dff018cfd01d54b939bb64fac Reviewed-by: Lars Knoll --- src/corelib/configure.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/corelib/configure.json b/src/corelib/configure.json index c1bd37fd0c..fbbbef4f21 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -579,7 +579,10 @@ }, "topleveldomain": { "label": "QUrl::topLevelDomain()", - "description": "Provides support for extracting the top level domain from URLs.", + "purpose": "Provides support for extracting the top level domain from URLs. + +If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, +Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie.", "section": "Utilities", "output": [ "publicFeature" ] } From a6a08095a4c5442283ac9b873c90ab0131e5b24f Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 29 Jun 2016 12:46:45 +0200 Subject: [PATCH 125/196] Compile fix for DB2 sqldriver plugin Change-Id: Ib91ffaa0f1f240b9d93e1756cf309a9975f09928 Reviewed-by: Lars Knoll Reviewed-by: Friedemann Kleint --- src/sql/drivers/db2/qsql_db2.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp index 4ccc3aca9e..a2046e17a1 100644 --- a/src/sql/drivers/db2/qsql_db2.cpp +++ b/src/sql/drivers/db2/qsql_db2.cpp @@ -59,8 +59,6 @@ #define SQL_BIGUINT_TYPE quint64 #endif -#define UNICODE - #include #include @@ -1187,8 +1185,8 @@ QDB2Driver::QDB2Driver(Qt::HANDLE env, Qt::HANDLE con, QObject* parent) : QSqlDriver(*new QDB2DriverPrivate, parent) { Q_D(QDB2Driver); - d->hEnv = reinterpret_cast(env); - d->hDbc = reinterpret_cast(con); + d->hEnv = reinterpret_cast(env); + d->hDbc = reinterpret_cast(con); if (env && con) { setOpen(true); setOpenError(false); From 391741bd7b9d07a6c3fd2e5c0bc70d3c00f29ac8 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Wed, 19 Oct 2016 17:50:52 +0200 Subject: [PATCH 126/196] Cocoa integration - remove erroneous warning The conditional statement checks/allows only right/left mouse buttons in handleMouseDraggedEvent and generates a lot of useless/misleading warnings in case we press (for example) a middle mouse button (when we're also moving mouse cursor, intentionally or not). Task-number: QTBUG-54160 Task-number: QTBUG-42846 Change-Id: I5c54b6204cb90036c7d98724537f1c985b40d9cc Reviewed-by: Shawn Rutledge --- src/plugins/platforms/cocoa/qnsview.mm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 51a69be759..0e46c3150b 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -892,11 +892,6 @@ QT_WARNING_POP if (!(m_acceptedMouseDowns & button) == button) return false; - if (!(m_buttons & (m_sendUpAsRightButton ? Qt::RightButton : Qt::LeftButton))) { - qCWarning(lcQpaCocoaWindow) << "QNSView mouseDragged: Internal mouse button tracking" - << "invalid (missing Qt::LeftButton)"; - } - [self handleMouseEvent:theEvent]; return true; } From 398d67198c054ff5fa24103bda62cdaffdc194e2 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 20 Oct 2016 13:26:36 +0200 Subject: [PATCH 127/196] Document Qt Network licenses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also explicitly mention the GPL exception for OpenSSL. Change-Id: I460189ee4d2dd79f8eca320ac82460e186b0f84c Reviewed-by: Topi Reiniö --- src/network/doc/src/external-resources.qdoc | 36 +++++++++++++++++++++ src/network/doc/src/qtnetwork.qdoc | 30 +++++++++++++++++ src/network/doc/src/ssl.qdoc | 9 ++---- 3 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/network/doc/src/external-resources.qdoc diff --git a/src/network/doc/src/external-resources.qdoc b/src/network/doc/src/external-resources.qdoc new file mode 100644 index 0000000000..f033ddc729 --- /dev/null +++ b/src/network/doc/src/external-resources.qdoc @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \externalpage https://www.openssl.org/ + \title OpenSSL Toolkit +*/ + +/*! + \externalpage https://www.openssl.org/source/license.html + \title OpenSSL License +*/ diff --git a/src/network/doc/src/qtnetwork.qdoc b/src/network/doc/src/qtnetwork.qdoc index f15b180625..7a95195da2 100644 --- a/src/network/doc/src/qtnetwork.qdoc +++ b/src/network/doc/src/qtnetwork.qdoc @@ -60,7 +60,37 @@ \list \li \l{Qt Network C++ Classes}{C++ Classes} \endlist + + \section1 Licenses and Attributions + + Qt Network is available under commercial licenses from \l{The Qt Company}. + In addition, it is available under the + \l{GNU Lesser General Public License, version 3}, or + the \l{GNU General Public License, version 2}. + See \l{Qt Licensing} for further details. + + Qt Network can use the \l{OpenSSL Toolkit} as a backend. The library is then + linked against OpenSSL in a way that requires compliance with the \l{OpenSSL + License}. To allow linking OpenSSL with Qt Network under the GPL, following + exceptions to the GPL do apply: + + \badcode + In addition, as a special exception, the copyright holders listed above give + permission to link the code of its release of Qt with the OpenSSL project's + "OpenSSL" library (or modified versions of the "OpenSSL" library that use the + same license as the original version), and distribute the linked executables. + + You must comply with the GNU General Public License version 2 in all + respects for all of the code used other than the "OpenSSL" code. If you + modify this file, you may extend this exception to your version of the file, + but you are not obligated to do so. If you do not wish to do so, delete + this exception statement from your version of this file. + \endcode + + Also note shipping OpenSSL might cause \l{Import and Export Restrictions} + to apply. */ + /*! \module QtNetwork \title Qt Network C++ Classes diff --git a/src/network/doc/src/ssl.qdoc b/src/network/doc/src/ssl.qdoc index 5ad2cfafc6..e4948c393c 100644 --- a/src/network/doc/src/ssl.qdoc +++ b/src/network/doc/src/ssl.qdoc @@ -33,7 +33,7 @@ \keyword SSL The classes below provide support for secure network communication using - the Secure Sockets Layer (SSL) protocol, using the OpenSSL Toolkit (\l{http://www.openssl.org/}) + the Secure Sockets Layer (SSL) protocol, using the \l{OpenSSL Toolkit} to perform encryption and protocol handling. From Qt version 5.2 onwards, the officially supported version for OpenSSL @@ -67,16 +67,13 @@ To disable SSL support in a Qt build, configure Qt with the \c{-no-openssl} option. - \section1 Licensing Information + \section1 Import and Export Restrictions - \note Due to import and export restrictions in some parts of the world, we + Due to import and export restrictions in some parts of the world, we are unable to supply the OpenSSL Toolkit with Qt packages. Developers wishing to use SSL communication in their deployed applications should either ensure that their users have the appropriate libraries installed, or they should consult a suitably qualified legal professional to ensure that applications using code from the OpenSSL project are correctly certified for import and export in relevant regions of the world. - - When the Qt Network module is built with SSL support, the library is linked - against OpenSSL in a way that requires OpenSSL license compliance. */ From cc30177a6927ee9619710efec45dbcd9d9fd4355 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 24 Oct 2016 10:19:59 +0200 Subject: [PATCH 128/196] Fix decorated text in extra-selections Change ddef89b323e8507ea5f451cb53ed151e29a110b3 broke decorations set using setExtraSelections(), because these decorations are drawn with a second drawTextItem() call where numGlyphs is set to 0. When the drawTextDecoration() call was moved into the branches for multi/no-multi font engines, the call for the cut-off when numGlyphs == 0 was unintentionally removed. Task-number: QTBUG-54626 Change-Id: Ieb9fc23099a9d7daf87cc364d3fc9da128ec516d Reviewed-by: Lars Knoll --- src/gui/painting/qpainter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 6472481e7a..74b961f042 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -6439,7 +6439,8 @@ void QPainterPrivate::drawTextItem(const QPointF &p, const QTextItem &_ti, QText updateState(state); if (!ti.glyphs.numGlyphs) { - // nothing to do + drawTextItemDecoration(q, p, ti.fontEngine, textEngine, ti.underlineStyle, + ti.flags, ti.width.toReal(), ti.charFormat); } else if (ti.fontEngine->type() == QFontEngine::Multi) { QFontEngineMulti *multi = static_cast(ti.fontEngine); From cee4d0c0b7bcd1a412b2d4713e80a3ffb676a6e9 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 17 Oct 2016 11:11:09 +0200 Subject: [PATCH 129/196] Add a resetClean() method to the undo stack With the current API it is not possible to reset the index into -1. We have setClean() method, but we are lacking setDirty(). This is needed in case when the document has changed outside of the editor and nothing has changed in the undo stack history. In this case we don't know the state of the file modified externally so we need to mark that editor's contents is different from the file contents and undoing or redoing commands can't bring the editor to the clean state. This may also be useful to call it when we created a new document and haven't saved it yet or when the document was restored from backup file. Task-number: QTCREATORBUG-17048 Change-Id: I64e2052b3559299e0b6939831557a07a59a851b6 Reviewed-by: Friedemann Kleint Reviewed-by: Lars Knoll --- src/widgets/util/qundostack.cpp | 27 +++- src/widgets/util/qundostack.h | 1 + .../util/qundostack/tst_qundostack.cpp | 144 ++++++++++++++++++ 3 files changed, 171 insertions(+), 1 deletion(-) diff --git a/src/widgets/util/qundostack.cpp b/src/widgets/util/qundostack.cpp index 18f85ca505..59d517e77b 100644 --- a/src/widgets/util/qundostack.cpp +++ b/src/widgets/util/qundostack.cpp @@ -633,7 +633,7 @@ void QUndoStack::push(QUndoCommand *cmd) commands, it emits the signal cleanChanged(). This signal is also emitted when the stack leaves the clean state. - \sa isClean(), cleanIndex() + \sa isClean(), resetClean(), cleanIndex() */ void QUndoStack::setClean() @@ -647,6 +647,30 @@ void QUndoStack::setClean() d->setIndex(d->index, true); } +/*! + \since 5.8 + + Leaves the clean state and emits cleanChanged() if the stack was clean. + This method resets the clean index to -1. + + This is typically called in the following cases, when a document has been: + \li created basing on some template and has not been saved, + so no filename has been associated with the document yet. + \li restored from a backup file. + \li changed outside of the editor and the user did not reload it. + + \sa isClean(), setClean(), cleanIndex() +*/ + +void QUndoStack::resetClean() +{ + Q_D(QUndoStack); + const bool was_clean = isClean(); + d->clean_index = -1; + if (was_clean) + emit cleanChanged(false); +} + /*! If the stack is in the clean state, returns \c true; otherwise returns \c false. @@ -668,6 +692,7 @@ bool QUndoStack::isClean() const some commands are undone, then a new command is pushed. Since push() deletes all the undone commands before pushing the new command, the stack can't return to the clean state again. In this case, this function returns -1. + The -1 may also be returned after an explicit call to resetClean(). \sa isClean(), setClean() */ diff --git a/src/widgets/util/qundostack.h b/src/widgets/util/qundostack.h index f4db78300b..ca918b0618 100644 --- a/src/widgets/util/qundostack.h +++ b/src/widgets/util/qundostack.h @@ -128,6 +128,7 @@ public: public Q_SLOTS: void setClean(); + void resetClean(); void setIndex(int idx); void undo(); void redo(); diff --git a/tests/auto/widgets/util/qundostack/tst_qundostack.cpp b/tests/auto/widgets/util/qundostack/tst_qundostack.cpp index 8573cea35f..a3e7219892 100644 --- a/tests/auto/widgets/util/qundostack/tst_qundostack.cpp +++ b/tests/auto/widgets/util/qundostack/tst_qundostack.cpp @@ -1200,6 +1200,150 @@ void tst_QUndoStack::setClean() true, // undoChanged true); // redoChanged QCOMPARE(stack.cleanIndex(), -1); + + stack.setClean(); + QCOMPARE(str, QString()); + checkState(redoTextChangedSpy, + canRedoChangedSpy, + undoTextChangedSpy, + redoAction, + undoAction, + canUndoChangedSpy, + cleanChangedSpy, + indexChangedSpy, + stack, + true, // clean + 1, // count + 0, // index + false, // canUndo + "", // undoText + true, // canRedo + "insert", // redoText + true, // cleanChanged + false, // indexChanged + false, // undoChanged + false); // redoChanged + QCOMPARE(stack.cleanIndex(), 0); + + stack.resetClean(); + QCOMPARE(str, QString()); + checkState(redoTextChangedSpy, + canRedoChangedSpy, + undoTextChangedSpy, + redoAction, + undoAction, + canUndoChangedSpy, + cleanChangedSpy, + indexChangedSpy, + stack, + false, // clean + 1, // count + 0, // index + false, // canUndo + "", // undoText + true, // canRedo + "insert", // redoText + true, // cleanChanged + false, // indexChanged + false, // undoChanged + false); // redoChanged + QCOMPARE(stack.cleanIndex(), -1); + + stack.redo(); + QCOMPARE(str, QString("foo")); + checkState(redoTextChangedSpy, + canRedoChangedSpy, + undoTextChangedSpy, + redoAction, + undoAction, + canUndoChangedSpy, + cleanChangedSpy, + indexChangedSpy, + stack, + false, // clean + 1, // count + 1, // index + true, // canUndo + "insert", // undoText + false, // canRedo + "", // redoText + false, // cleanChanged + true, // indexChanged + true, // undoChanged + true); // redoChanged + QCOMPARE(stack.cleanIndex(), -1); + + stack.setClean(); + QCOMPARE(str, QString("foo")); + checkState(redoTextChangedSpy, + canRedoChangedSpy, + undoTextChangedSpy, + redoAction, + undoAction, + canUndoChangedSpy, + cleanChangedSpy, + indexChangedSpy, + stack, + true, // clean + 1, // count + 1, // index + true, // canUndo + "insert", // undoText + false, // canRedo + "", // redoText + true, // cleanChanged + false, // indexChanged + false, // undoChanged + false); // redoChanged + QCOMPARE(stack.cleanIndex(), 1); + + stack.undo(); + QCOMPARE(str, QString()); + checkState(redoTextChangedSpy, + canRedoChangedSpy, + undoTextChangedSpy, + redoAction, + undoAction, + canUndoChangedSpy, + cleanChangedSpy, + indexChangedSpy, + stack, + false, // clean + 1, // count + 0, // index + false, // canUndo + "", // undoText + true, // canRedo + "insert", // redoText + true, // cleanChanged + true, // indexChanged + true, // undoChanged + true); // redoChanged + QCOMPARE(stack.cleanIndex(), 1); + + stack.resetClean(); + QCOMPARE(str, QString()); + checkState(redoTextChangedSpy, + canRedoChangedSpy, + undoTextChangedSpy, + redoAction, + undoAction, + canUndoChangedSpy, + cleanChangedSpy, + indexChangedSpy, + stack, + false, // clean + 1, // count + 0, // index + false, // canUndo + "", // undoText + true, // canRedo + "insert", // redoText + false, // cleanChanged + false, // indexChanged + false, // undoChanged + false); // redoChanged + QCOMPARE(stack.cleanIndex(), -1); } void tst_QUndoStack::clear() From bdcc9d4e73c00d8297a4d0bd2a86b05b200d9bc9 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Wed, 19 Oct 2016 12:34:31 +0200 Subject: [PATCH 130/196] Add attribution file for Khronos headers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: If2db8db20cac00a0e4fa89721ede17a41a18e3c1 Reviewed-by: Topi Reiniö --- src/gui/opengl/KHRONOS_LICENSE.txt | 20 +++++++++++++++++++ src/gui/opengl/qt_attribution.json | 32 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/gui/opengl/KHRONOS_LICENSE.txt create mode 100644 src/gui/opengl/qt_attribution.json diff --git a/src/gui/opengl/KHRONOS_LICENSE.txt b/src/gui/opengl/KHRONOS_LICENSE.txt new file mode 100644 index 0000000000..63b1e1f940 --- /dev/null +++ b/src/gui/opengl/KHRONOS_LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) 2013-2014 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/src/gui/opengl/qt_attribution.json b/src/gui/opengl/qt_attribution.json new file mode 100644 index 0000000000..d3ff10d803 --- /dev/null +++ b/src/gui/opengl/qt_attribution.json @@ -0,0 +1,32 @@ +[ + { + "Id": "opengl-headers", + "Name": "OpenGL Headers", + "QDocModule": "qtgui", + "Description": "OpenGL header generated from the Khronos OpenGL / OpenGL ES XML API Registry.", + "QtUsage": "Used on Windows and Linux in the OpenGL related headers of Qt GUI.", + "Path": "qopenglext.h", + + "Homepage": "https://www.khronos.org/", + "Version": "Revision 27684", + "License": "MIT License", + "LicenseId": "MIT", + "LicenseFile": "KHRONOS_LICENSE.txt", + "Copyright": "Copyright (c) 2013-2014 The Khronos Group Inc." + }, + { + "Id": "opengl-es2-headers", + "Name": "OpenGL ES 2 Headers", + "QDocModule": "qtgui", + "Description": "OpenGL ES 2 header generated from the Khronos OpenGL / OpenGL ES XML API Registry.", + "QtUsage": "Used on Windows and Linux in the OpenGL related headers of Qt GUI.", + "Path": "qopengles2ext.h", + + "Homepage": "https://www.khronos.org/", + "Version": "Revision 27673", + "License": "MIT License", + "LicenseId": "MIT", + "LicenseFile": "KHRONOS_LICENSE.txt", + "Copyright": "Copyright (c) 2013-2014 The Khronos Group Inc." + } +] From 592614ea3ecd90ede2ae1b8e6579d1b898f474ec Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Fri, 21 Oct 2016 10:13:20 +0200 Subject: [PATCH 131/196] Don't claim all fonts are smoothly scalable on Windows Since 40ebda3efbcf00c3393cb70c9eee203c68a57311, bitmap fonts are detected as smoothly scalable on Windows. While the fontsAlwaysScalable() does say whether or not the font engine can rasterize the fonts at any size, it does not determine whether or not the result is "attractive" as the documentation for isSmoothlyScalable() says. Only outline fonts are smoothly scalable, and this fact is used in Qt Quick to determine whether we can use the distance field renderer for the font or if we have to fall back to the native renderer. The consequence was that the fonts were no longer usable in Qt Quick. We also need to revert the optimization for isBitmapScalable() since there a font that is smoothly scalable should not be identified as bitmap scalable (basically this means: Font is not smoothly scalable, but it can be scaled with bitmap scaling artifacts). [ChangeLog][QtGui][Text] Fixed a regression where raster fonts on Windows were detected as smoothly scalable and thus rendering with said fonts in Qt Quick would break. Task-number: QTBUG-56659 Change-Id: Ia7db6fee8249aca347233a488388be5c3a00c2df Reviewed-by: Lars Knoll --- src/gui/text/qfontdatabase.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index f063541249..04081a5ca7 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1657,9 +1657,6 @@ bool QFontDatabase::isFixedPitch(const QString &family, bool QFontDatabase::isBitmapScalable(const QString &family, const QString &style) const { - if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) - return true; - bool bitmapScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); @@ -1700,9 +1697,6 @@ bool QFontDatabase::isBitmapScalable(const QString &family, */ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style) const { - if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) - return true; - bool smoothScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); From f6eb570c7dee2ec92383607c614db91f31804707 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Thu, 29 Sep 2016 11:59:01 +0200 Subject: [PATCH 132/196] Darwin: normalize all watched paths to composed from MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be done by all POSIX APIs for strings coming in that way, but because other code (like NSWhateverViews) will most likely return decomposed form, we make sure that those are in composed form too. Task-number: QTBUG-55896 Change-Id: I065e11cee6b59706d4346ed20d4b59b9b95163b8 Reviewed-by: Morten Johan Sørvig --- src/corelib/io/qfilesystemwatcher_fsevents.mm | 2 +- .../tst_qfilesystemwatcher.cpp | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm index c6fa6c9846..6af9e5f5ef 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents.mm +++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm @@ -343,7 +343,7 @@ QStringList QFseventsFileSystemWatcherEngine::addPaths(const QStringList &paths, QStringList p = paths; QMutableListIterator it(p); while (it.hasNext()) { - QString origPath = it.next(); + QString origPath = it.next().normalized(QString::NormalizationForm_C); QString realPath = origPath; if (realPath.endsWith(QDir::separator())) realPath = realPath.mid(0, realPath.size() - 1); diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 026743257c..4ede1e69f3 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -78,6 +78,8 @@ private slots: void signalsEmittedAfterFileMoved(); + void watchUnicodeCharacters(); + private: QString m_tempDirPattern; #endif // QT_NO_FILESYSTEMWATCHER @@ -763,6 +765,25 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved() QVERIFY2(changedSpy.count() <= fileCount, changedSpy.receivedFilesMessage()); QTRY_COMPARE(changedSpy.count(), fileCount); } + +void tst_QFileSystemWatcher::watchUnicodeCharacters() +{ + QTemporaryDir temporaryDirectory(m_tempDirPattern); + QVERIFY2(temporaryDirectory.isValid(), qPrintable(temporaryDirectory.errorString())); + + QDir testDir(temporaryDirectory.path()); + const QString subDir(QString::fromLatin1("caf\xe9")); + QVERIFY(testDir.mkdir(subDir)); + testDir = QDir(temporaryDirectory.path() + QDir::separator() + subDir); + + QFileSystemWatcher watcher; + QVERIFY(watcher.addPath(testDir.path())); + + FileSystemWatcherSpy changedSpy(&watcher, FileSystemWatcherSpy::SpyOnDirectoryChanged); + QCOMPARE(changedSpy.count(), 0); + QVERIFY(testDir.mkdir("creme")); + QTRY_COMPARE(changedSpy.count(), 1); +} #endif // QT_NO_FILESYSTEMWATCHER QTEST_MAIN(tst_QFileSystemWatcher) From 843247e1c509ec3ce55a2e2051b83fcfa6634135 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Fri, 14 Oct 2016 13:05:00 +0200 Subject: [PATCH 133/196] Call raise on the window that contains the widget and not the widget When the mouse is clicked on the widget in a window while a popup is visible then it should raise just the window and not the widget inside it. If the widget is in a stacked layout then calling raise() on it can cause it to appear on top so avoid this by calling raise() directly on the window. Task-number: QTBUG-52670 Change-Id: Idd287c6cc7038c57e14e92f4a3e1c50985925684 Reviewed-by: Friedemann Kleint --- src/widgets/kernel/qwidgetwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index 95f63025fb..40c488857e 100644 --- a/src/widgets/kernel/qwidgetwindow.cpp +++ b/src/widgets/kernel/qwidgetwindow.cpp @@ -529,7 +529,7 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event) // activate window of the widget under mouse pointer if (!w->isActiveWindow()) { w->activateWindow(); - w->raise(); + w->window()->raise(); } QWindow *win = w->windowHandle(); From e2d8c7bf2203cbc0c7ff923caf3132881aafa0b0 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 1 Sep 2016 11:53:15 +0200 Subject: [PATCH 134/196] Don't change the size of widgets just because it is in a floating dock When a QDockWidget was floating on macOS then it would force the size of various widgets, such as buttons, comboboxes, to be the smallest needed rather than the size they had when it was docked. Task-number: QTBUG-7460 Task-number: QTBUG-52354 Change-Id: Id348180934f113f3a9a9ce5622a9af03eed04108 Reviewed-by: Jake Petroules --- src/widgets/styles/qmacstyle_mac.mm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 46918a2d5f..84445bfce4 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -1034,6 +1034,8 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg #if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT) static QAquaWidgetSize qt_aqua_guess_size(const QWidget *widg, QSize large, QSize small, QSize mini) { + Q_UNUSED(widg); + if (large == QSize(-1, -1)) { if (small != QSize(-1, -1)) return QAquaSizeSmall; @@ -1049,7 +1051,7 @@ static QAquaWidgetSize qt_aqua_guess_size(const QWidget *widg, QSize large, QSiz } #ifndef QT_NO_MAINWINDOW - if (qobject_cast(widg->window()) || qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) { + if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) { //if (small.width() != -1 || small.height() != -1) return QAquaSizeSmall; } else if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) { From 9c83d7f871f95b1cc03fb404bd602df32056b9cb Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Fri, 30 Sep 2016 15:39:03 -0700 Subject: [PATCH 135/196] QCocoaMenuBar: Update even if no window is attached Then we need to check if the current active (or focused) window has any menubar associated. In case there isn't, and the menubar has no window associated, then we should update immediately. The previous condition is still valid. Change-Id: I4532ccc87354d91c76b53f5433dc3944b9e29584 Task-number: QTBUG-56275 Reviewed-by: Erik Verbruggen --- src/plugins/platforms/cocoa/qcocoamenubar.h | 1 + src/plugins/platforms/cocoa/qcocoamenubar.mm | 28 +++++++++++- .../widgets/widgets/qmenubar/qmenubar.pro | 5 +++ .../widgets/widgets/qmenubar/tst_qmenubar.cpp | 24 ++++++++++ .../widgets/qmenubar/tst_qmenubar_mac.mm | 44 +++++++++++++++++++ 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.h b/src/plugins/platforms/cocoa/qcocoamenubar.h index e84da7aeb0..2865dd2460 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.h +++ b/src/plugins/platforms/cocoa/qcocoamenubar.h @@ -70,6 +70,7 @@ private: static QCocoaWindow *findWindowForMenubar(); static QCocoaMenuBar *findGlobalMenubar(); + bool needsImmediateUpdate(); bool shouldDisable(QCocoaWindow *active) const; NSMenuItem *nativeItemForMenu(QCocoaMenu *menu) const; diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index 3523182e6d..82aebf8cf3 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -89,6 +89,32 @@ QCocoaMenuBar::~QCocoaMenuBar() } } +bool QCocoaMenuBar::needsImmediateUpdate() +{ + if (m_window && m_window->window()->isActive()) { + return true; + } else if (!m_window) { + // Only update if the focus/active window has no + // menubar, which means it'll be using this menubar. + // This is to avoid a modification in a parentless + // menubar to affect a window-assigned menubar. + QWindow *fw = QGuiApplication::focusWindow(); + if (!fw) { + // Same if there's no focus window, BTW. + return true; + } else { + QCocoaWindow *cw = static_cast(fw->handle()); + if (cw && !cw->menubar()) + return true; + } + } + + // Either the menubar is attached to a non-active window, + // or the application's focus window has its own menubar + // (which is different from this one) + return false; +} + void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *before) { QCocoaMenu *menu = static_cast(platformMenu); @@ -129,7 +155,7 @@ void QCocoaMenuBar::insertMenu(QPlatformMenu *platformMenu, QPlatformMenu *befor syncMenu(menu); - if (m_window && m_window->window()->isActive()) + if (needsImmediateUpdate()) updateMenuBarImmediately(); } diff --git a/tests/auto/widgets/widgets/qmenubar/qmenubar.pro b/tests/auto/widgets/widgets/qmenubar/qmenubar.pro index 3fb6ae61a8..e680cf4d7d 100644 --- a/tests/auto/widgets/widgets/qmenubar/qmenubar.pro +++ b/tests/auto/widgets/widgets/qmenubar/qmenubar.pro @@ -2,3 +2,8 @@ CONFIG += testcase TARGET = tst_qmenubar QT += widgets testlib SOURCES += tst_qmenubar.cpp + +macos: { + OBJECTIVE_SOURCES += tst_qmenubar_mac.mm + LIBS += -framework AppKit +} diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index b2d15fffef..45eae18240 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -133,6 +133,9 @@ private slots: void cornerWidgets_data(); void cornerWidgets(); void taskQTBUG53205_crashReparentNested(); +#ifdef Q_OS_MACOS + void taskQTBUG56275_reinsertMenuInParentlessQMenuBar(); +#endif protected slots: void onSimpleActivated( QAction*); @@ -1495,7 +1498,28 @@ void tst_QMenuBar::slotForTaskQTBUG53205() taskQTBUG53205MenuBar->setParent(parent); } +#ifdef Q_OS_MACOS +extern bool tst_qmenubar_taskQTBUG56275(QMenuBar *); +void tst_QMenuBar::taskQTBUG56275_reinsertMenuInParentlessQMenuBar() +{ + QMenuBar menubar; + + QMenu *menu = new QMenu("menu", &menubar); + QMenu* submenu = menu->addMenu("submenu"); + submenu->addAction("action1"); + submenu->addAction("action2"); + menu->addAction("action3"); + menubar.addMenu(menu); + + QTest::qWait(100); + menubar.clear(); + menubar.addMenu(menu); + QTest::qWait(100); + + QVERIFY(tst_qmenubar_taskQTBUG56275(&menubar)); +} +#endif // Q_OS_MACOS QTEST_MAIN(tst_QMenuBar) #include "tst_qmenubar.moc" diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm new file mode 100644 index 0000000000..4645de4d7a --- /dev/null +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import + +#include +#include + +bool tst_qmenubar_taskQTBUG56275(QMenuBar *menubar) +{ + NSMenu *mainMenu = menubar->toNSMenu(); + return mainMenu.numberOfItems == 2 + && [[mainMenu itemAtIndex:1].title isEqualToString:@"menu"]; +} From 26ac91c832c2a8db1327e24e6ff88eef82cc4530 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 19 Oct 2016 12:59:18 +0300 Subject: [PATCH 136/196] qwindowsdirect2dintegration.cpp: replace QVector with QVarLengthArray QVector was used as just RAII for local array. It's inefficient usage of CoW type. So use QVarLengthArray instead. Change-Id: I494ecc49af9049569a65e258581137bad3ce7dc7 Reviewed-by: Edward Welbourne Reviewed-by: Marc Mutz --- .../platforms/direct2d/qwindowsdirect2dintegration.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp index 1d24247d75..da4a4e6ce6 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp @@ -52,6 +52,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE class QWindowsDirect2DEventDispatcher : public QWindowsGuiEventDispatcher @@ -106,7 +108,7 @@ public: if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) { DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL); if (versionInfoSize) { - QVector info(versionInfoSize); + QVarLengthArray info(versionInfoSize); if (GetFileVersionInfo(filename, NULL, versionInfoSize, info.data())) { UINT size; DWORD *fi; From c30e62c7750b804bfe6f3ed29914ebb42890230d Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 19 Oct 2016 14:27:51 +0300 Subject: [PATCH 137/196] Plugins: use const (and const APIs) more For CoW types, prefer const methods to avoid needless detach()ing. Change-Id: I625d57c0c19e87ac2de681bb16d0cc5a7a59b366 Reviewed-by: Edward Welbourne --- src/plugins/platforms/android/androidjnimain.cpp | 2 +- src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp | 2 +- .../deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp | 2 +- src/plugins/platforms/qnx/qqnxwindow.cpp | 2 +- src/plugins/platforms/xcb/qxcbmime.cpp | 2 +- src/plugins/platforms/xcb/qxcbsessionmanager.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index c79198d7fe..370c3426f5 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -514,7 +514,7 @@ static jboolean startQtApplication(JNIEnv *env, jobject /*object*/, jstring para if (m_applicationParams.length()) { // Obtain a handle to the main library (the library that contains the main() function). // This library should already be loaded, and calling dlopen() will just return a reference to it. - m_mainLibraryHnd = dlopen(m_applicationParams.first().data(), 0); + m_mainLibraryHnd = dlopen(m_applicationParams.constFirst().data(), 0); if (Q_UNLIKELY(!m_mainLibraryHnd)) { qCritical() << "dlopen failed:" << dlerror(); return false; diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp index 48e0af5479..3e1e93f1e4 100644 --- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp +++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp @@ -199,7 +199,7 @@ void QEglFSDeviceIntegration::screenDestroy() QEglFSIntegration *platformIntegration = static_cast( QGuiApplicationPrivate::platformIntegration()); while (!app->screens().isEmpty()) - platformIntegration->removeScreen(app->screens().last()->handle()); + platformIntegration->removeScreen(app->screens().constLast()->handle()); } QSizeF QEglFSDeviceIntegration::physicalScreenSize() const diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp index a78f445995..38419a55c8 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp @@ -126,7 +126,7 @@ QEglFSKmsDevice *QEglFSKmsGbmIntegration::createDevice(const QString &devicePath } else { QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask); - QStringList devices = d->scanConnectedDevices(); + const QStringList devices = d->scanConnectedDevices(); qCDebug(qLcEglfsKmsDebug) << "Found the following video devices:" << devices; d->deleteLater(); diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp index 7b3a5ec70c..6fd0191e43 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.cpp +++ b/src/plugins/platforms/qnx/qqnxwindow.cpp @@ -569,7 +569,7 @@ void QQnxWindow::requestActivateWindow() for (int i = 1; i < windowList.size(); ++i) windowList.at(i-1)->setFocus(windowList.at(i)->nativeHandle()); - windowList.last()->setFocus(windowList.last()->nativeHandle()); + windowList.last()->setFocus(windowList.constLast()->nativeHandle()); } screen_flush_context(m_screenContext, 0); diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp index 3643b3e975..7592eb2887 100644 --- a/src/plugins/platforms/xcb/qxcbmime.cpp +++ b/src/plugins/platforms/xcb/qxcbmime.cpp @@ -220,7 +220,7 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, // The atomName variable is not used because mimeAtomToString() // converts "text/x-moz-url" to "text/uri-list". if (!list.isEmpty() && connection->atomName(a) == "text/x-moz-url") - return list.first(); + return list.constFirst(); return list; } else { return str; diff --git a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp index 8744fcba3e..2303ccf806 100644 --- a/src/plugins/platforms/xcb/qxcbsessionmanager.cpp +++ b/src/plugins/platforms/xcb/qxcbsessionmanager.cpp @@ -146,7 +146,7 @@ static void sm_setProperty(const QString &name, const QStringList &value) for (QStringList::ConstIterator it = value.begin(); it != value.end(); ++it) { prop[count].length = (*it).length(); vl.append((*it).toUtf8()); - prop[count].value = (char*)vl.last().data(); + prop[count].value = (char*)vl.constLast().data(); ++count; } sm_setProperty(name.toLatin1().data(), SmLISTofARRAY8, count, prop); From fe8f387794853b0456f554a783e2769edab9aecb Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 21 Oct 2016 21:16:10 +0200 Subject: [PATCH 138/196] don't moc OBJECTIVE_SOURCES twice since 9ff1310af, the variable's contents are simply added to SOURCES, and the variable is not cleared. and qmake does not de-duplicate ... Task-number: QTBUG-53905 Change-Id: I3e551d21cbbd2d0cbfbf7aa7efaa5babac112f9d Reviewed-by: Jake Petroules --- mkspecs/features/moc.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf index 8e8deec63c..9cc2bf3b76 100644 --- a/mkspecs/features/moc.prf +++ b/mkspecs/features/moc.prf @@ -56,7 +56,7 @@ moc_source.CONFIG = no_link moc_verify moc_source.dependency_type = TYPE_C moc_source.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC} -moc_source.input = SOURCES OBJECTIVE_SOURCES +moc_source.input = SOURCES moc_source.name = MOC ${QMAKE_FILE_IN} moc_source.depends += $$WIN_INCLUDETEMP silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands From d507cd40b6fc3b7271e3ba83c668f33b8aab8683 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 21 Oct 2016 21:18:58 +0200 Subject: [PATCH 139/196] unset OBJECTIVE_SOURCES and QMAKE_OBJECTIVE_CFLAGS after absorbing them this is a bit easier on the backwards compat code in qt creator, which needs to merge and then de-duplicate the lists itself. Change-Id: I79f9319c26af541f5efa85700878e7ddbd00e2b7 Reviewed-by: Jake Petroules --- mkspecs/features/mac/objective_c.prf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mkspecs/features/mac/objective_c.prf b/mkspecs/features/mac/objective_c.prf index b3b1d4be99..ed1ad8ad38 100644 --- a/mkspecs/features/mac/objective_c.prf +++ b/mkspecs/features/mac/objective_c.prf @@ -1,6 +1,7 @@ # Objective-C/C++ sources go in SOURCES, like all other sources SOURCES += $$OBJECTIVE_SOURCES +unset(OBJECTIVE_SOURCES) # Strip C/C++ flags from QMAKE_OBJECTIVE_CFLAGS just in case QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS @@ -8,3 +9,4 @@ QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS # Add Objective-C/C++ flags to C/C++ flags, the compiler can handle it QMAKE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS QMAKE_CXXFLAGS += $$QMAKE_OBJECTIVE_CFLAGS +unset(QMAKE_OBJECTIVE_CFLAGS) From 0cffe2135e7303bd103bdf888a345fe0a8b94cd6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 14 Sep 2016 11:29:37 -0700 Subject: [PATCH 140/196] qversiontagging.h: Don't tag binaries in static mode Though there should have been no ill-effects, they happen. Task-number: QTBUG-52605 Change-Id: I9093948278414644a416fffd147444078edc3183 Reviewed-by: Oswald Buddenhagen Reviewed-by: Thiago Macieira --- src/corelib/global/qversiontagging.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/global/qversiontagging.h b/src/corelib/global/qversiontagging.h index fa824d1c89..b46bb7aa77 100644 --- a/src/corelib/global/qversiontagging.h +++ b/src/corelib/global/qversiontagging.h @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE * There will only be one copy of the section in the output library or application. */ -#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING) +#if defined(QT_BUILD_CORE_LIB) || defined(QT_BOOTSTRAPPED) || defined(QT_NO_VERSION_TAGGING) || defined(QT_STATIC) // don't make tags in QtCore, bootstrapped systems or if the user asked not to #elif defined(Q_CC_GNU) && !defined(Q_OS_ANDROID) # if defined(Q_PROCESSOR_X86) && (defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD_KERNEL)) From b82793e7909d38482662a8de0f16d8ab0df232ec Mon Sep 17 00:00:00 2001 From: Jesus Fernandez Date: Tue, 25 Oct 2016 11:43:56 +0200 Subject: [PATCH 141/196] Fix possible loss of data in conversion from size_t to int warning Change-Id: I72c74e67708f1e164a0c35e1e92d9bf3ec99ffd6 Reviewed-by: Oswald Buddenhagen Reviewed-by: Timur Pocheptsov --- qmake/generators/makefiledeps.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp index ff613ea8f1..65f401affd 100644 --- a/qmake/generators/makefiledeps.cpp +++ b/qmake/generators/makefiledeps.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #if defined(_MSC_VER) && _MSC_VER >= 1400 #include #endif @@ -983,9 +984,11 @@ bool QMakeSourceFileInfo::findMocs(SourceFile *file) continue; int matchlen = 0, extralines = 0; + size_t needle_len = strlen(interesting[interest]); + Q_ASSERT(needle_len <= INT_MAX); if (matchWhileUnsplitting(buffer, buffer_len, y, interesting[interest], - strlen(interesting[interest]), + static_cast(needle_len), &matchlen, &extralines) && y + matchlen < buffer_len && !isCWordChar(buffer[y + matchlen])) { From 047e3f8f046ac9267cc27d47a48189ae2cbfe0ef Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 29 Sep 2016 15:14:22 -0700 Subject: [PATCH 142/196] Autotest: fix silly mistake in assigning where a comparison was intended MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file descriptor has been closed and this test is checking if we get EBADF. Change-Id: I33dc971f005a4848bb8ffffd1478eaffd99aa2e9 Reviewed-by: Jake Petroules Reviewed-by: Jędrzej Nowacki --- tests/auto/corelib/io/qfile/tst_qfile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index b38620fcbb..b26db788de 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -3446,7 +3446,7 @@ void tst_QFile::autocloseHandle() //file is closed, read should fail char buf; QCOMPARE((int)QT_READ(fd, &buf, 1), -1); - QVERIFY(errno = EBADF); + QVERIFY(errno == EBADF); } { From 8daa050ed2bc3502f19ae38e2c3060941a19a5a6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 14 Sep 2016 15:07:23 -0700 Subject: [PATCH 143/196] Fix syncqt warning about wrong include syncqt says: QtGui: WARNING: /Users/tjmaciei/src/qt/qt5/qtbase/src/gui/kernel/qevent.h includes qiodevice.h when it should include QtCore/qiodevice.h Change-Id: I9093948278414644a416fffd14744fe9c6c9c5f8 Reviewed-by: Kai Koehne --- src/gui/kernel/qevent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h index 570212966f..7fdad24f52 100644 --- a/src/gui/kernel/qevent.h +++ b/src/gui/kernel/qevent.h @@ -51,7 +51,7 @@ #include #include // ### Qt 6: Remove #include -#include // ### Qt 6: Replace by and forward declare QFile +#include // ### Qt 6: Replace by and forward declare QFile #include #include // ### Qt 6: Replace by forward declaration From 6ec86513ddbc19cd988878c8431c47820f68a00e Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 14 Sep 2016 10:23:19 -0700 Subject: [PATCH 144/196] Increase the resolution for QDeadlineTimer unit test Apparently, the CI can run something over 1000x slower than on my machine. We're getting over 100 ms delays in operations that shouldn't have taken more than half a millisecond. The last report was of 136% over budget, so I multiplied the resolution by 4. Change-Id: I9093948278414644a416fffd1474406967b2a6ee Reviewed-by: Frederik Gladhorn --- tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp index 7642604cfe..6ab24d2480 100644 --- a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp +++ b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp @@ -35,7 +35,7 @@ # include #endif -static const int minResolution = 100; // the minimum resolution for the tests +static const int minResolution = 400; // the minimum resolution for the tests Q_DECLARE_METATYPE(Qt::TimerType) From 951b34453b575a314971a00c81e03a29082857b1 Mon Sep 17 00:00:00 2001 From: Jesus Fernandez Date: Wed, 12 Oct 2016 15:14:46 +0200 Subject: [PATCH 145/196] Include intrin.h header when using MSVC Allows the usage of _BitScanForward, _BitScanReverse, __popcnt and __popcnt16 functions. Fixes part of the build with MSVC15. Change-Id: I5ec37184209196ad19beddb4d6a36f9a9fd3b315 Reviewed-by: Thiago Macieira --- src/corelib/tools/qalgorithms.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h index 6e472e8b22..038f4149c3 100644 --- a/src/corelib/tools/qalgorithms.h +++ b/src/corelib/tools/qalgorithms.h @@ -42,6 +42,10 @@ #include +#if defined(Q_CC_MSVC) +#include +#endif + QT_BEGIN_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations") From 443c9c1db5dc2b3eb8fb754ff3b63f0b7d68e7e1 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Mon, 24 Oct 2016 16:48:53 +0200 Subject: [PATCH 146/196] Remove QSegfaultHandler class The origin of the class predate git history, but it has been apparently unused in Qt since Qt 4.5 times. Removing this relieves us from documenting its custom license. Change-Id: Ie91be5f0b2fbaf10dc212c44ebd37e6b9d781592 Reviewed-by: Lars Knoll --- src/corelib/kernel/kernel.pri | 2 - src/corelib/kernel/qcrashhandler.cpp | 421 --------------------------- src/corelib/kernel/qcrashhandler_p.h | 79 ----- 3 files changed, 502 deletions(-) delete mode 100644 src/corelib/kernel/qcrashhandler.cpp delete mode 100644 src/corelib/kernel/qcrashhandler_p.h diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index a78397e46c..7799113d30 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -140,14 +140,12 @@ nacl { unix|integrity { SOURCES += \ kernel/qcore_unix.cpp \ - kernel/qcrashhandler.cpp \ kernel/qeventdispatcher_unix.cpp \ kernel/qtimerinfo_unix.cpp !darwin|nacl: SOURCES += kernel/qelapsedtimer_unix.cpp HEADERS += \ kernel/qcore_unix_p.h \ - kernel/qcrashhandler_p.h \ kernel/qeventdispatcher_unix_p.h \ kernel/qpoll_p.h \ kernel/qtimerinfo_unix_p.h diff --git a/src/corelib/kernel/qcrashhandler.cpp b/src/corelib/kernel/qcrashhandler.cpp deleted file mode 100644 index 46bb8b7c11..0000000000 --- a/src/corelib/kernel/qcrashhandler.cpp +++ /dev/null @@ -1,421 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/************************************************************************* - * - * stacktrace.c 1.2 1998/12/21 - * - * Copyright (c) 1998 by Bjorn Reese - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND - * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. - * - ************************************************************************/ - -#include "qplatformdefs.h" -#include "private/qcrashhandler_p.h" -#include "qbytearray.h" // for qvsnprintf() - -#ifndef QT_NO_CRASHHANDLER - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QtCrashHandler QSegfaultHandler::callback = 0; - -#if defined(__GLIBC__) && (__GLIBC__ >= 2) && !defined(__UCLIBC__) && !defined(QT_LINUXBASE) -QT_BEGIN_INCLUDE_NAMESPACE -# include "qstring.h" -# include -QT_END_INCLUDE_NAMESPACE - -static void print_backtrace(FILE *outb) -{ - void *stack[128]; - int stack_size = backtrace(stack, sizeof(stack) / sizeof(void *)); - char **stack_symbols = backtrace_symbols(stack, stack_size); - fprintf(outb, "Stack [%d]:\n", stack_size); - if(FILE *cppfilt = popen("c++filt", "rw")) { - dup2(fileno(outb), fileno(cppfilt)); - for(int i = stack_size-1; i>=0; --i) - fwrite(stack_symbols[i], 1, strlen(stack_symbols[i]), cppfilt); - pclose(cppfilt); - } else { - for(int i = stack_size-1; i>=0; --i) - fprintf(outb, "#%d %p [%s]\n", i, stack[i], stack_symbols[i]); - } -} -static void init_backtrace(char **, int) -{ -} - -#else /* Don't use the GLIBC callback */ -/* Code sourced from: */ -QT_BEGIN_INCLUDE_NAMESPACE -#include -#include -#include -#include -#include -#if defined(Q_OS_IRIX) && defined(USE_LIBEXC) -# include -#endif -QT_END_INCLUDE_NAMESPACE - - -static char *globalProgName = NULL; -static bool backtrace_command(FILE *outb, const char *format, ...) -{ - - bool ret = false; - char buffer[50]; - - /* - * Please note that vsnprintf() is not ASync safe (ie. cannot safely - * be used from a signal handler.) If this proves to be a problem - * then the cmd string can be built by more basic functions such as - * strcpy, strcat, and a home-made integer-to-ascii function. - */ - va_list args; - char cmd[512]; - va_start(args, format); - qvsnprintf(cmd, 512, format, args); - va_end(args); - - char *foo = cmd; -#if 0 - foo = "echo hi"; -#endif - if(FILE *inb = popen(foo, "r")) { - while(!feof(inb)) { - int len = fread(buffer, 1, sizeof(buffer), inb); - if(!len) - break; - if(!ret) { - fwrite("Output from ", 1, strlen("Output from "), outb); - strtok(cmd, " "); - fwrite(cmd, 1, strlen(cmd), outb); - fwrite("\n", 1, 1, outb); - ret = true; - } - fwrite(buffer, 1, len, outb); - } - fclose(inb); - } - return ret; -} - -static void init_backtrace(char **argv, int argc) -{ - if(argc >= 1) - globalProgName = argv[0]; -} - -static void print_backtrace(FILE *outb) -{ - /* - * In general dbx seems to do a better job than gdb. - * - * Different dbx implementations require different flags/commands. - */ -#if defined(Q_OS_AIX) - if(backtrace_command(outb, "dbx -a %d 2>/dev/null </dev/null </dev/null <&1 </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null </dev/null <&1 < </dev/null </dev/null < - -#ifndef QT_NO_CRASHHANDLER - -QT_BEGIN_NAMESPACE - -typedef void (*QtCrashHandler)(); - -class Q_CORE_EXPORT QSegfaultHandler -{ - friend void qt_signal_handler(int); - static QtCrashHandler callback; -public: - static void initialize(char **, int); - - inline static void installCrashHandler(QtCrashHandler h) { callback = h; } - inline static QtCrashHandler crashHandler() { return callback; } - -private: -}; - -QT_END_NAMESPACE - -#endif // QT_NO_CRASHHANDLER - -#endif // QCRASHHANDLER_P_H From 60dbd80e5a26182b3ed9e2c60bb7212dfd32632b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Somers?= Date: Wed, 28 Sep 2016 10:13:27 +0200 Subject: [PATCH 147/196] Document that qFuzzyCompare does not work on NaN or infinity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On a discussion in the Development mailing list it became clear that qFuzzyCompare does not work for NaN or infinity values. That was not mentioned in the method documentation though. This patch fixes that hiatus. It also clarifies how to deal with the comparing to 0.0 limitation. Change-Id: I8b6d54cc0c1136e79b0d7be1a62bc9ed394d2575 Reviewed-by: Topi Reiniö Reviewed-by: Martin Smith --- src/corelib/global/qglobal.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 6d7fbce946..59799b07bb 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -4109,8 +4109,10 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters) Compares the floating point value \a p1 and \a p2 and returns \c true if they are considered equal, otherwise \c false. - Note that comparing values where either \a p1 or \a p2 is 0.0 will not work. - The solution to this is to compare against values greater than or equal to 1.0. + Note that comparing values where either \a p1 or \a p2 is 0.0 will not work, + nor does comparing values where one of the values is NaN or infinity. + If one of the values is always 0.0, use qFuzzyIsNull instead. If one of the + values is likely to be 0.0, one solution is to add 1.0 to both values. \snippet code/src_corelib_global_qglobal.cpp 46 From c00af2a38343c8f7e893e42717ce1cb2f34fa44c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 11 Oct 2016 20:57:12 +0200 Subject: [PATCH 148/196] fix over-exposure of private dependencies QT_FOR_PRIVATE should end up in QT_PRIVATE instead of QT after being recorded in the private module pri. otherwise it's added to LIBS and becomes part of the library's (and thus also the public module's) link interface. after the fix, only the (semantically redundant) resolution of qt module dependencies will add the private deps, and only when the private module is explicitly requested. Change-Id: I3378457013cad5fa611a22ccbe184e6aa675a2ef Reviewed-by: Lars Knoll --- mkspecs/features/qt_module.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index f19abec8be..954fdb2501 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -90,7 +90,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.inclu QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF -QT += $$QT_FOR_PRIVATE +QT_PRIVATE += $$QT_FOR_PRIVATE unset(QT_FOR_PRIVATE) QMAKE_USE_PRIVATE += $$QMAKE_USE_FOR_PRIVATE unset(QMAKE_USE_FOR_PRIVATE) From 4184e15654148f832828e743289768ebdf3ff896 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 18 Oct 2016 15:30:18 +0200 Subject: [PATCH 149/196] make use of top-level return() to beautify code Change-Id: Ia192aab9981a790f1a74a83d4894395b454ab0c1 Reviewed-by: Jake Petroules --- mkspecs/features/testcase.prf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf index 64a6a9266b..83ff177856 100644 --- a/mkspecs/features/testcase.prf +++ b/mkspecs/features/testcase.prf @@ -1,4 +1,4 @@ -have_target { +!have_target: return() # qt_build_config.prf disables execptions for all Qt modules which don't # explicitly turn it on again, while the qmake default is to build with @@ -204,5 +204,3 @@ macx-xcode:bundle:isEmpty(QMAKE_BUNDLE_EXTENSION) { QMAKE_BUNDLE_EXTENSION = .xctest } -} # have_target - From c70d77dc766c9372a689035038420fb414e49b48 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 18 Oct 2016 15:28:14 +0200 Subject: [PATCH 150/196] add launch targets to qt apps this enables running non-installed prefix builds. Change-Id: I4169f276ff28506d0532cfe01a03e0fa102a25f8 Reviewed-by: Friedemann Kleint Reviewed-by: Oswald Buddenhagen --- mkspecs/features/qt_app.prf | 24 ++++++++++++++++++++++++ mkspecs/features/qt_tool.prf | 1 + 2 files changed, 25 insertions(+) diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf index 90135b00a3..87e32d6d42 100644 --- a/mkspecs/features/qt_app.prf +++ b/mkspecs/features/qt_app.prf @@ -36,3 +36,27 @@ INSTALLS += target load(qt_targets) load(qt_common) + +no_launch_target: return() + +load(resolve_target) +launch.commands = $$shell_quote($$shell_path($$QMAKE_RESOLVED_TARGET)) +QMAKE_EXTRA_TARGETS += launch + +# Add environment for non-installed builds. +QT_TOOL_NAME = target +qtAddTargetEnv(launch.commands, QT) + +isEmpty(BUILDS)|build_pass { + launch.depends = first +} else { + # For exclusive builds, run the app only once. + launch.CONFIG = recursive + launch.target = launch_all + launch.recurse_target = launch + launch.commands = + + launch_first.depends = $$eval($$first(BUILDS).target)-launch + launch_first.target = launch + QMAKE_EXTRA_TARGETS += launch_first +} diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf index 93c952617d..4b73b4b8f7 100644 --- a/mkspecs/features/qt_tool.prf +++ b/mkspecs/features/qt_tool.prf @@ -9,6 +9,7 @@ # We mean it. # +CONFIG += no_launch_target load(qt_app) CONFIG += console From 99ce5d5e85007cb656cd48ab161be14af8f16238 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 28 Sep 2016 13:58:56 +0200 Subject: [PATCH 151/196] iOS: refactor usage of photos into optional plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Starting from iOS 10, apps that tries to access photos on the device need to specify the reason for this up front by adding the key 'NSPhotoLibraryUsageDescription' into Info.plist. If the key is missing, the app will be rejected from AppStore. This causes problems for the iOS plugin as it stands since parts of it already tries to access photos, e.g to show an image picker dialog if a file dialog is set to open QStandardPaths::PicturesLocation. This means that currently, all apps written with Qt will be rejected from AppStore unless the developer adds this key, whether he tries to access photos or not. To solve this, we choose to split the plugin into two parts, one that contains the core functionality, and one that contains optional support. The latter will need to be enabled explicit by the developer in the pro file, or in this case, indirectly by adding the right key to the Info.plist. This patch refactors the code in the plugin that gives access to photos into a separate optional plugin called 'nsphotolibrarysupport'. Change-Id: Ic4351eb0bbfffdf840fd88cd00bb29a25907798f Reviewed-by: Tor Arne Vestbø Reviewed-by: Jake Petroules --- src/gui/gui.pro | 1 + src/plugins/platforms/ios/ios.pro | 63 +-------------- src/plugins/platforms/ios/kernel.pro | 58 ++++++++++++++ .../nsphotolibrarysupport.pro | 22 ++++++ .../nsphotolibrarysupport/plugin.json | 3 + .../optional/nsphotolibrarysupport/plugin.mm | 64 +++++++++++++++ .../qiosfileengineassetslibrary.h | 2 +- .../qiosfileengineassetslibrary.mm | 2 +- .../qiosfileenginefactory.h | 2 +- .../qiosimagepickercontroller.h | 42 ++++++++++ .../qiosimagepickercontroller.mm | 66 ++++++++++++++++ .../platforms/ios/optional/optional.pro | 2 + src/plugins/platforms/ios/qiosfiledialog.h | 2 + src/plugins/platforms/ios/qiosfiledialog.mm | 79 ++++++++----------- src/plugins/platforms/ios/qiosintegration.h | 7 +- src/plugins/platforms/ios/qiosintegration.mm | 8 ++ .../ios/qiosoptionalplugininterface.h | 59 ++++++++++++++ 17 files changed, 370 insertions(+), 112 deletions(-) create mode 100644 src/plugins/platforms/ios/kernel.pro create mode 100644 src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro create mode 100644 src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json create mode 100644 src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm rename src/plugins/platforms/ios/{ => optional/nsphotolibrarysupport}/qiosfileengineassetslibrary.h (98%) rename src/plugins/platforms/ios/{ => optional/nsphotolibrarysupport}/qiosfileengineassetslibrary.mm (99%) rename src/plugins/platforms/ios/{ => optional/nsphotolibrarysupport}/qiosfileenginefactory.h (98%) create mode 100644 src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h create mode 100644 src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm create mode 100644 src/plugins/platforms/ios/optional/optional.pro create mode 100644 src/plugins/platforms/ios/qiosoptionalplugininterface.h diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 69434e801f..2cdb3a7ab7 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -9,6 +9,7 @@ QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf MODULE_PLUGIN_TYPES = \ platforms \ + platforms/darwin \ xcbglintegrations \ platformthemes \ platforminputcontexts \ diff --git a/src/plugins/platforms/ios/ios.pro b/src/plugins/platforms/ios/ios.pro index 545db8c093..594ccefcf1 100644 --- a/src/plugins/platforms/ios/ios.pro +++ b/src/plugins/platforms/ios/ios.pro @@ -1,61 +1,2 @@ -TARGET = qios - -QT += core-private gui-private platformsupport-private -LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AssetsLibrary - -OBJECTIVE_SOURCES = \ - plugin.mm \ - qiosintegration.mm \ - qioseventdispatcher.mm \ - qioswindow.mm \ - qiosscreen.mm \ - qiosbackingstore.mm \ - qiosapplicationdelegate.mm \ - qiosapplicationstate.mm \ - qiosviewcontroller.mm \ - qioscontext.mm \ - qiosinputcontext.mm \ - qiostheme.mm \ - qiosglobal.mm \ - qiosservices.mm \ - quiview.mm \ - qiosclipboard.mm \ - quiaccessibilityelement.mm \ - qiosplatformaccessibility.mm \ - qiostextresponder.mm \ - qiosmenu.mm \ - qiosfileengineassetslibrary.mm \ - qiosfiledialog.mm - -HEADERS = \ - qiosintegration.h \ - qioseventdispatcher.h \ - qioswindow.h \ - qiosscreen.h \ - qiosbackingstore.h \ - qiosapplicationdelegate.h \ - qiosapplicationstate.h \ - qiosviewcontroller.h \ - qioscontext.h \ - qiosinputcontext.h \ - qiostheme.h \ - qiosglobal.h \ - qiosservices.h \ - quiview.h \ - qiosclipboard.h \ - quiaccessibilityelement.h \ - qiosplatformaccessibility.h \ - qiostextresponder.h \ - qiosmenu.h \ - qiosfileenginefactory.h \ - qiosfileengineassetslibrary.h \ - qiosfiledialog.h - -OTHER_FILES = \ - quiview_textinput.mm \ - quiview_accessibility.mm - -PLUGIN_TYPE = platforms -PLUGIN_CLASS_NAME = QIOSIntegrationPlugin -!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - -load(qt_plugin) +TEMPLATE = subdirs +SUBDIRS = kernel.pro optional diff --git a/src/plugins/platforms/ios/kernel.pro b/src/plugins/platforms/ios/kernel.pro new file mode 100644 index 0000000000..84035877c5 --- /dev/null +++ b/src/plugins/platforms/ios/kernel.pro @@ -0,0 +1,58 @@ +TARGET = qios + +QT += core-private gui-private platformsupport-private +LIBS += -framework Foundation -framework UIKit -framework QuartzCore + +OBJECTIVE_SOURCES = \ + plugin.mm \ + qiosintegration.mm \ + qioseventdispatcher.mm \ + qioswindow.mm \ + qiosscreen.mm \ + qiosbackingstore.mm \ + qiosapplicationdelegate.mm \ + qiosapplicationstate.mm \ + qiosviewcontroller.mm \ + qioscontext.mm \ + qiosinputcontext.mm \ + qiostheme.mm \ + qiosglobal.mm \ + qiosservices.mm \ + quiview.mm \ + qiosclipboard.mm \ + quiaccessibilityelement.mm \ + qiosplatformaccessibility.mm \ + qiostextresponder.mm \ + qiosmenu.mm \ + qiosfiledialog.mm + +HEADERS = \ + qiosintegration.h \ + qioseventdispatcher.h \ + qioswindow.h \ + qiosscreen.h \ + qiosbackingstore.h \ + qiosapplicationdelegate.h \ + qiosapplicationstate.h \ + qiosviewcontroller.h \ + qioscontext.h \ + qiosinputcontext.h \ + qiostheme.h \ + qiosglobal.h \ + qiosservices.h \ + quiview.h \ + qiosclipboard.h \ + quiaccessibilityelement.h \ + qiosplatformaccessibility.h \ + qiostextresponder.h \ + qiosmenu.h \ + qiosfiledialog.h + +OTHER_FILES = \ + quiview_textinput.mm \ + quiview_accessibility.mm + +PLUGIN_TYPE = platforms +PLUGIN_CLASS_NAME = QIOSIntegrationPlugin +!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - +load(qt_plugin) diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro new file mode 100644 index 0000000000..f4588dda03 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/nsphotolibrarysupport.pro @@ -0,0 +1,22 @@ +TARGET = qiosnsphotolibrarysupport + +QT += core gui gui-private +LIBS += -framework UIKit -framework AssetsLibrary + +HEADERS = \ + qiosfileengineassetslibrary.h \ + qiosfileenginefactory.h \ + qiosimagepickercontroller.h + +OBJECTIVE_SOURCES = \ + plugin.mm \ + qiosfileengineassetslibrary.mm \ + qiosimagepickercontroller.mm \ + +OTHER_FILES = \ + plugin.json + +PLUGIN_CLASS_NAME = QIosOptionalPlugin_NSPhotoLibrary +PLUGIN_EXTENDS = - +PLUGIN_TYPE = platforms/darwin +load(qt_plugin) diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json new file mode 100644 index 0000000000..4491fb3d59 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "NSPhotoLibrarySupport" ] +} diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm new file mode 100644 index 0000000000..2ec0d33a41 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/plugin.mm @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../../qiosoptionalplugininterface.h" +#include "../../qiosfiledialog.h" + +#include "qiosimagepickercontroller.h" +#include "qiosfileenginefactory.h" + +QT_BEGIN_NAMESPACE + +class QIosOptionalPlugin_NSPhotoLibrary : public QObject, QIosOptionalPluginInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QIosOptionalPluginInterface_iid FILE "plugin.json") + Q_INTERFACES(QIosOptionalPluginInterface) + +public: + explicit QIosOptionalPlugin_NSPhotoLibrary(QObject* = 0) {}; + ~QIosOptionalPlugin_NSPhotoLibrary() {} + + UIViewController* createImagePickerController(QIOSFileDialog *fileDialog) const override + { + return [[[QIOSImagePickerController alloc] initWithQIOSFileDialog:fileDialog] autorelease]; + } + +private: + QIOSFileEngineFactory m_fileEngineFactory; + +}; + +QT_END_NAMESPACE + +#include "plugin.moc" diff --git a/src/plugins/platforms/ios/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h similarity index 98% rename from src/plugins/platforms/ios/qiosfileengineassetslibrary.h rename to src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h index 37bbc7bf23..0e29a1003e 100644 --- a/src/plugins/platforms/ios/qiosfileengineassetslibrary.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2016 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. diff --git a/src/plugins/platforms/ios/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm similarity index 99% rename from src/plugins/platforms/ios/qiosfileengineassetslibrary.mm rename to src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm index bb12c164d6..2e88c37c01 100644 --- a/src/plugins/platforms/ios/qiosfileengineassetslibrary.mm +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2016 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. diff --git a/src/plugins/platforms/ios/qiosfileenginefactory.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h similarity index 98% rename from src/plugins/platforms/ios/qiosfileenginefactory.h rename to src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h index a8604c77d1..29f543caae 100644 --- a/src/plugins/platforms/ios/qiosfileenginefactory.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. +** Copyright (C) 2016 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h new file mode 100644 index 0000000000..df3f6b9fa3 --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import + +#include "../../qiosfiledialog.h" + +@interface QIOSImagePickerController : UIImagePickerController { + QIOSFileDialog *m_fileDialog; +} +- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog; +@end diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm new file mode 100644 index 0000000000..f9662b964a --- /dev/null +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosimagepickercontroller.mm @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#import + +#include "qiosimagepickercontroller.h" + +@implementation QIOSImagePickerController + +- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog +{ + self = [super init]; + if (self) { + m_fileDialog = fileDialog; + [self setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; + [self setDelegate:self]; + } + return self; +} + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + Q_UNUSED(picker); + NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL]; + QUrl fileUrl = QUrl::fromLocalFile(QString::fromNSString([url description])); + m_fileDialog->selectedFilesChanged(QList() << fileUrl); + emit m_fileDialog->accept(); +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker +{ + Q_UNUSED(picker) + emit m_fileDialog->reject(); +} + +@end diff --git a/src/plugins/platforms/ios/optional/optional.pro b/src/plugins/platforms/ios/optional/optional.pro new file mode 100644 index 0000000000..5e3421a025 --- /dev/null +++ b/src/plugins/platforms/ios/optional/optional.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS = nsphotolibrarysupport diff --git a/src/plugins/platforms/ios/qiosfiledialog.h b/src/plugins/platforms/ios/qiosfiledialog.h index b4bf85edd9..668cf18caf 100644 --- a/src/plugins/platforms/ios/qiosfiledialog.h +++ b/src/plugins/platforms/ios/qiosfiledialog.h @@ -66,6 +66,8 @@ private: QList m_selection; QEventLoop m_eventLoop; UIViewController *m_viewController; + + bool showImagePickerDialog(QWindow *parent); }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/ios/qiosfiledialog.mm b/src/plugins/platforms/ios/qiosfiledialog.mm index 7c32784e9d..a70eb11ef8 100644 --- a/src/plugins/platforms/ios/qiosfiledialog.mm +++ b/src/plugins/platforms/ios/qiosfiledialog.mm @@ -31,52 +31,18 @@ ** ****************************************************************************/ -#include "qiosfiledialog.h" - #import #include #include +#include -@interface QIOSImagePickerController : UIImagePickerController { - QIOSFileDialog *m_fileDialog; -} -@end - -@implementation QIOSImagePickerController - -- (id)initWithQIOSFileDialog:(QIOSFileDialog *)fileDialog -{ - self = [super init]; - if (self) { - m_fileDialog = fileDialog; - [self setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; - [self setDelegate:self]; - } - return self; -} - -- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info -{ - Q_UNUSED(picker); - NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL]; - QUrl fileUrl = QUrl::fromLocalFile(QString::fromNSString([url description])); - m_fileDialog->selectedFilesChanged(QList() << fileUrl); - emit m_fileDialog->accept(); -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker -{ - Q_UNUSED(picker) - emit m_fileDialog->reject(); -} - -@end - -// -------------------------------------------------------------------------- +#include "qiosfiledialog.h" +#include "qiosintegration.h" +#include "qiosoptionalplugininterface.h" QIOSFileDialog::QIOSFileDialog() - : m_viewController(0) + : m_viewController(Q_NULLPTR) { } @@ -98,17 +64,36 @@ bool QIOSFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality window bool acceptOpen = options()->acceptMode() == QFileDialogOptions::AcceptOpen; QString directory = options()->initialDirectory().toLocalFile(); - if (acceptOpen && directory.startsWith(QLatin1String("assets-library:"))) { - m_viewController = [[QIOSImagePickerController alloc] initWithQIOSFileDialog:this]; - UIWindow *window = parent ? reinterpret_cast(parent->winId()).window - : [UIApplication sharedApplication].keyWindow; - [window.rootViewController presentViewController:m_viewController animated:YES completion:nil]; - return true; - } + if (acceptOpen && directory.startsWith(QLatin1String("assets-library:"))) + return showImagePickerDialog(parent); return false; } +bool QIOSFileDialog::showImagePickerDialog(QWindow *parent) +{ + if (!m_viewController) { + QFactoryLoader *plugins = QIOSIntegration::instance()->optionalPlugins(); + for (int i = 0; i < plugins->metaData().size(); ++i) { + QIosOptionalPluginInterface *plugin = qobject_cast(plugins->instance(i)); + m_viewController = [plugin->createImagePickerController(this) retain]; + if (m_viewController) + break; + } + } + + if (!m_viewController) { + qWarning() << "QIOSFileDialog: Could not resolve Qt plugin that gives access to photos on iOS"; + return false; + } + + UIWindow *window = parent ? reinterpret_cast(parent->winId()).window + : [UIApplication sharedApplication].keyWindow; + [window.rootViewController presentViewController:m_viewController animated:YES completion:nil]; + + return true; +} + void QIOSFileDialog::hide() { // QFileDialog will remember the last directory set, and open subsequent dialogs in the same @@ -120,6 +105,8 @@ void QIOSFileDialog::hide() emit directoryEntered(QUrl::fromLocalFile(QDir::currentPath())); [m_viewController dismissViewControllerAnimated:YES completion:nil]; + [m_viewController release]; + m_viewController = Q_NULLPTR; m_eventLoop.exit(); } diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h index 7d23fe1d62..25eb8990cb 100644 --- a/src/plugins/platforms/ios/qiosintegration.h +++ b/src/plugins/platforms/ios/qiosintegration.h @@ -38,8 +38,9 @@ #include #include +#include + #include "qiosapplicationstate.h" -#include "qiosfileenginefactory.h" QT_BEGIN_NAMESPACE @@ -91,6 +92,8 @@ public: void setDebugWindowManagement(bool); bool debugWindowManagement() const; + QFactoryLoader *optionalPlugins() { return m_optionalPlugins; } + private: QPlatformFontDatabase *m_fontDatabase; QPlatformClipboard *m_clipboard; @@ -99,7 +102,7 @@ private: QIOSApplicationState m_applicationState; QIOSServices *m_platformServices; mutable QPlatformAccessibility *m_accessibility; - QIOSFileEngineFactory m_fileEngineFactory; + QFactoryLoader *m_optionalPlugins; bool m_debugWindowManagement; }; diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 85b5c477cc..d33c8cf47c 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -43,6 +43,7 @@ #include "qiosinputcontext.h" #include "qiostheme.h" #include "qiosservices.h" +#include "qiosoptionalplugininterface.h" #include @@ -68,6 +69,7 @@ QIOSIntegration::QIOSIntegration() , m_inputContext(0) , m_platformServices(new QIOSServices) , m_accessibility(0) + , m_optionalPlugins(new QFactoryLoader(QIosOptionalPluginInterface_iid, QLatin1String("/platforms/darwin"))) , m_debugWindowManagement(false) { if (![UIApplication sharedApplication]) { @@ -112,6 +114,9 @@ QIOSIntegration::QIOSIntegration() m_touchDevice->setCapabilities(touchCapabilities); QWindowSystemInterface::registerTouchDevice(m_touchDevice); QMacInternalPasteboardMime::initializeMimeTypes(); + + for (int i = 0; i < m_optionalPlugins->metaData().size(); ++i) + qobject_cast(m_optionalPlugins->instance(i))->initPlugin(); } QIOSIntegration::~QIOSIntegration() @@ -134,6 +139,9 @@ QIOSIntegration::~QIOSIntegration() delete m_accessibility; m_accessibility = 0; + + delete m_optionalPlugins; + m_optionalPlugins = 0; } bool QIOSIntegration::hasCapability(Capability cap) const diff --git a/src/plugins/platforms/ios/qiosoptionalplugininterface.h b/src/plugins/platforms/ios/qiosoptionalplugininterface.h new file mode 100644 index 0000000000..bcb8978e02 --- /dev/null +++ b/src/plugins/platforms/ios/qiosoptionalplugininterface.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QIOPLUGININTERFACE_H +#define QIOPLUGININTERFACE_H + +#include + +#include "qiosfiledialog.h" + +QT_BEGIN_NAMESPACE + +Q_FORWARD_DECLARE_OBJC_CLASS(UIViewController); + +#define QIosOptionalPluginInterface_iid "org.qt-project.Qt.QPA.ios.optional" + +class QIosOptionalPluginInterface +{ +public: + virtual ~QIosOptionalPluginInterface() {} + virtual void initPlugin() const {}; + virtual UIViewController* createImagePickerController(QIOSFileDialog *) const { return Q_NULLPTR; }; +}; + +Q_DECLARE_INTERFACE(QIosOptionalPluginInterface, QIosOptionalPluginInterface_iid) + +QT_END_NAMESPACE + +#endif // QIOPLUGININTERFACE_H From 78ee77f49122ac525590715a0a034965e3e59adf Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 4 Oct 2016 15:04:04 +0200 Subject: [PATCH 152/196] iOS: link photo lib plugin based on Info.plist contents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the application's Info.plist contains the key 'NSPhotoLibraryUsageDescription', we know that we can safely link in qiosnsphotolibrarysupport without violating AppStore requirements. This is a simple feature that doesn't introduce additional qmake API for doing app deployment with optional iOS QPA plugins. [ChangeLog][iOS] Starting from iOS 10, Apple requires all apps that need access to photos to have the key 'NSPhotoLibraryUsageDescription' in the Info.plist. Therefore, to get the same support in Qt (when, e.g., using a file dialog), the Info.plist assigned to QMAKE_INFO_PLIST will need this key as well. Change-Id: I7a93afe24b589cad96d5a1d9e2a155ad1671178a Reviewed-by: Tor Arne Vestbø Reviewed-by: Jake Petroules --- mkspecs/macx-ios-clang/features/default_post.prf | 8 ++++++++ qmake/doc/src/qmake-manual.qdoc | 6 ++++++ src/widgets/dialogs/qfiledialog.cpp | 3 +++ 3 files changed, 17 insertions(+) diff --git a/mkspecs/macx-ios-clang/features/default_post.prf b/mkspecs/macx-ios-clang/features/default_post.prf index 4c8a6eaae6..93e9e10ec3 100644 --- a/mkspecs/macx-ios-clang/features/default_post.prf +++ b/mkspecs/macx-ios-clang/features/default_post.prf @@ -80,3 +80,11 @@ macx-xcode { QMAKE_CXXFLAGS += $$arch_flags QMAKE_LFLAGS += $$arch_flags } + +!xcodebuild:equals(TEMPLATE, app):!isEmpty(QMAKE_INFO_PLIST) { + # Only link in photo library support if Info.plist contains + # NSPhotoLibraryUsageDescription. Otherwise it will be rejected from AppStore. + plist_path = $$absolute_path($$QMAKE_INFO_PLIST, $$_PRO_FILE_PWD_) + system("/usr/libexec/PlistBuddy -c 'Print NSPhotoLibraryUsageDescription' $$system_quote($$plist_path) &>/dev/null"): \ + QTPLUGIN += qiosnsphotolibrarysupport +} diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc index 7386af881e..ccb79f4a9f 100644 --- a/qmake/doc/src/qmake-manual.qdoc +++ b/qmake/doc/src/qmake-manual.qdoc @@ -1813,6 +1813,12 @@ which qmake will replace with the actual executable name. Other variables include @ICON@, @TYPEINFO@, @LIBRARY@, and @SHORT_VERSION@. + If building for iOS, and the \c{.plist} file contains the key + \c NSPhotoLibraryUsageDescription, qmake will include an additional plugin + to the build that adds photo access support (to, e.g., + \l{QFileDialog::setDirectory()}{QFile/QFileDialog}). See Info.plist + documentation from Apple for more information regarding this key. + \note Most of the time, the default \c{Info.plist} is good enough. \section1 QMAKE_LFLAGS diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 61f5f7b0d2..f8e4299397 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -896,6 +896,9 @@ void QFileDialogPrivate::_q_goToUrl(const QUrl &url) {QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last()}, a native image picker dialog will be used for accessing the user's photo album. The filename returned can be loaded using QFile and related APIs. + For this to be enabled, the Info.plist assigned to QMAKE_INFO_PLIST in the + project file must contain the key \c NSPhotoLibraryUsageDescription. See + Info.plist documentation from Apple for more information regarding this key. This feature was added in Qt 5.5. */ void QFileDialog::setDirectory(const QString &directory) From aa2e2a8d5e4712d93879098675c0a46df0fd7a41 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 25 Oct 2016 11:56:33 +0200 Subject: [PATCH 153/196] Android: Fix synthesized oblique for non-latin scripts In 5e3e34731b7880ac775e8f1fa156ce016e6820f1, a default implementation of QPlatformFontDatabase::fallbacksForFamily() was added, but this implementation included only the fonts with a matching style in the returned list. The result of this was that if a font face for a specific language did not have e.g. an italic font, then we would show missing glyph boxes instead. On Android, it would be impossible to show any italic text in Chinese, Japanese, Hebrew, or Arabic. [ChangeLog][QtGui][Text] Fixed synthesized oblique for non-latin text on platforms using the basic font database, such as Android. Task-number: QTBUG-51223 Change-Id: I494d8ad87292b65d4380a2e600c1c0dc7fc8f937 Reviewed-by: Lars Knoll Reviewed-by: Konstantin Ritt --- src/gui/text/qfontdatabase.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 04081a5ca7..f1b2e84a1e 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -805,7 +805,8 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo Q_UNUSED(family); Q_UNUSED(styleHint); - QStringList retList; + QStringList preferredFallbacks; + QStringList otherFallbacks; size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem + QFontDatabase::WritingSystemsCount, @@ -826,18 +827,18 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFo QtFontFoundry *foundry = f->foundries[j]; for (int k = 0; k < foundry->count; ++k) { - if (style == foundry->styles[k]->key.style) { - if (foundry->name.isEmpty()) - retList.append(f->name); - else - retList.append(f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']')); - break; - } + QString name = foundry->name.isEmpty() + ? f->name + : f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']'); + if (style == foundry->styles[k]->key.style) + preferredFallbacks.append(name); + else + otherFallbacks.append(name); } } } - return retList; + return preferredFallbacks + otherFallbacks; } static void initializeDb(); From b9af823ef7a4131bc61b07620e7825d757df69db Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 18 Oct 2016 13:09:37 +0200 Subject: [PATCH 154/196] qiosfileengineassetslibrary: replace Q_DECL_OVERRIDE with override Change-Id: Iba67e1a1fa86dff3c82543597351b597be69ed1f Reviewed-by: Jake Petroules --- .../qiosfileengineassetslibrary.h | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h index 0e29a1003e..89696751c6 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h @@ -45,20 +45,20 @@ public: QIOSFileEngineAssetsLibrary(const QString &fileName); ~QIOSFileEngineAssetsLibrary(); - bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE; - bool close() Q_DECL_OVERRIDE; - FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE; - qint64 size() const Q_DECL_OVERRIDE; - qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE; - qint64 pos() const Q_DECL_OVERRIDE; - bool seek(qint64 pos) Q_DECL_OVERRIDE; - QString fileName(FileName file) const Q_DECL_OVERRIDE; - void setFileName(const QString &file) Q_DECL_OVERRIDE; - QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE; + bool open(QIODevice::OpenMode openMode) override; + bool close() override; + FileFlags fileFlags(FileFlags type) const override; + qint64 size() const override; + qint64 read(char *data, qint64 maxlen) override; + qint64 pos() const override; + bool seek(qint64 pos) override; + QString fileName(FileName file) const override; + void setFileName(const QString &file) override; + QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const override; #ifndef QT_NO_FILESYSTEMITERATOR - Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE; - Iterator *endEntryList() Q_DECL_OVERRIDE; + Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override; + Iterator *endEntryList() override; #endif void setError(QFile::FileError error, const QString &str) { QAbstractFileEngine::setError(error, str); } From e8b55a6d2a6e44337b75dd0d116b1b020a437631 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Wed, 19 Oct 2016 20:22:10 +0200 Subject: [PATCH 155/196] Document qGuiApp and tweap qApp Change-Id: I2cd865da0e081251a2702c11cb83dde35444693a Reviewed-by: Edward Welbourne --- src/gui/kernel/qguiapplication.cpp | 10 ++++++++++ src/widgets/kernel/qapplication.cpp | 9 +++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 9cbcd714ab..950385f0ce 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -344,6 +344,16 @@ void QWindowGeometrySpecification::applyTo(QWindow *window) const static QWindowGeometrySpecification windowGeometrySpecification = Q_WINDOW_GEOMETRY_SPECIFICATION_INITIALIZER; +/*! + \macro qGuiApp + \relates QGuiApplication + + A global pointer referring to the unique application object. + Only valid for use when that object is a QGuiApplication. + + \sa QCoreApplication::instance(), qApp +*/ + /*! \class QGuiApplication \brief The QGuiApplication class manages the GUI application's control diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index b64d6e2159..93ee820c98 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -4229,13 +4229,10 @@ void QApplication::beep() \relates QApplication A global pointer referring to the unique application object. It is - equivalent to the pointer returned by the QCoreApplication::instance() - function except that, in GUI applications, it is a pointer to a - QApplication instance. + equivalent to QCoreApplication::instance(), but cast as a QApplication pointer, + so only valid when the unique application object is a QApplication. - Only one application object can be created. - - \sa QCoreApplication::instance() + \sa QCoreApplication::instance(), qGuiApp */ /*! From 4e196159077a820e99bc8bd306d31d0ccaa17c57 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 26 Oct 2016 11:19:19 +0200 Subject: [PATCH 156/196] qmacmime: convert UTF-16 using QTextCodec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The current implementation of QMacPasteboardMimeUnicodeText didn't contain any logic to handle unicode text with a byte order mark (BOM). According to the docs (*), 'public.utf16-plain-text' can have an optional BOM. Because of that, Qt would fail encoding UTF-16 text from the pasteboard if it had a BOM. Additionally, perhaps because of a bug in iOS 10, UTF-16 text placed on the pasteboard by Qt ends up being encoded wrong by native apps, unless the text has a BOM. Rather than hard-coding UTF-16 encoding/decoding in qmacmime, we now leave it to QTextCodec. QTextCodec will add a BOM by default, and can handle decoding of UTF-16 both with, and without, a BOM. *: https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html Task-number: QTBUG-56229 Change-Id: I3a08deb0262350c67e5622cf23eb3c3a4907ec39 Reviewed-by: Tor Arne Vestbø --- src/platformsupport/clipboard/qmacmime.mm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/platformsupport/clipboard/qmacmime.mm b/src/platformsupport/clipboard/qmacmime.mm index 2e3257cfcf..cdb5d6b08e 100644 --- a/src/platformsupport/clipboard/qmacmime.mm +++ b/src/platformsupport/clipboard/qmacmime.mm @@ -405,8 +405,7 @@ QVariant QMacPasteboardMimeUnicodeText::convertToMime(const QString &mimetype, Q if (flavor == QLatin1String("public.utf8-plain-text")) { ret = QString::fromUtf8(firstData); } else if (flavor == QLatin1String("public.utf16-plain-text")) { - ret = QString(reinterpret_cast(firstData.constData()), - firstData.size() / sizeof(QChar)); + ret = QTextCodec::codecForName("UTF-16")->toUnicode(firstData); } else { qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype)); } @@ -420,7 +419,7 @@ QList QMacPasteboardMimeUnicodeText::convertFromMime(const QString & if (flavor == QLatin1String("public.utf8-plain-text")) ret.append(string.toUtf8()); else if (flavor == QLatin1String("public.utf16-plain-text")) - ret.append(QByteArray((char*)string.utf16(), string.length()*2)); + ret.append(QTextCodec::codecForName("UTF-16")->fromUnicode(string)); return ret; } From 04f0a69e96fca03c18e0c7eaaab7babc49e35198 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Tue, 25 Oct 2016 15:22:01 +0200 Subject: [PATCH 157/196] Replace PKGCONFIG+=foo usages with QMAKE_USE replace explicit pkg-config uses with the results of configure tests, for consistency. Change-Id: I3587db6085798ea7a49f8871fc6838eb687a6391 Reviewed-by: Oswald Buddenhagen --- src/corelib/configure.json | 1 - src/corelib/global/global.pri | 6 +----- src/gui/configure.json | 3 --- src/platformsupport/input/evdevtouch/evdevtouch.pri | 3 +-- src/plugins/bearer/connman/connman.pro | 1 - .../eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro | 3 +-- src/plugins/platforms/mirclient/mirclient.pro | 3 +-- 7 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/corelib/configure.json b/src/corelib/configure.json index fbbbef4f21..e7eb5fe482 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -61,7 +61,6 @@ "journald": { "label": "journald", "test": "unix/journald", - "export": "", "sources": [ { "type": "pkgConfig", "args": "libsystemd" }, { "type": "pkgConfig", "args": "libsystemd-journal" } diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 6a8948822c..f74662b464 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -53,11 +53,7 @@ slog2 { } journald { - CONFIG += link_pkgconfig - packagesExist(libsystemd): \ - PKGCONFIG_PRIVATE += libsystemd - else: \ - PKGCONFIG_PRIVATE += libsystemd-journal + QMAKE_USE_PRIVATE += journald DEFINES += QT_USE_JOURNALD } diff --git a/src/gui/configure.json b/src/gui/configure.json index b361679101..f4e2faf08b 100644 --- a/src/gui/configure.json +++ b/src/gui/configure.json @@ -165,7 +165,6 @@ }, "mirclient": { "label": "Mir client libraries", - "export": "", "test": "qpa/mirclient", "sources": [ { "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api" } @@ -173,7 +172,6 @@ }, "mtdev": { "label": "mtdev", - "export": "", "test": "unix/mtdev", "sources": [ { "type": "pkgConfig", "args": "mtdev" } @@ -204,7 +202,6 @@ }, "wayland_server": { "label": "Wayland Server", - "export": "", "test": "qpa/wayland-server", "sources": [ { "type": "pkgConfig", "args": "wayland-server" } diff --git a/src/platformsupport/input/evdevtouch/evdevtouch.pri b/src/platformsupport/input/evdevtouch/evdevtouch.pri index 58fafcd8f9..0ad236e882 100644 --- a/src/platformsupport/input/evdevtouch/evdevtouch.pri +++ b/src/platformsupport/input/evdevtouch/evdevtouch.pri @@ -12,6 +12,5 @@ qtConfig(libudev): \ QMAKE_USE_PRIVATE += libudev qtConfig(mtdev) { - CONFIG += link_pkgconfig - PKGCONFIG_PRIVATE += mtdev + QMAKE_USE_PRIVATE += mtdev } diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro index 9f3fff304b..065ed11dad 100644 --- a/src/plugins/bearer/connman/connman.pro +++ b/src/plugins/bearer/connman/connman.pro @@ -1,7 +1,6 @@ TARGET = qconnmanbearer QT = core network-private dbus -CONFIG += link_pkgconfig HEADERS += qconnmanservice_linux_p.h \ ../linux_common/qofonoservice_linux_p.h \ diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro index f934fd85ed..065a103376 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/eglfs_viv_wl.pro @@ -14,8 +14,7 @@ HEADERS += $$PWD/qeglfsvivwlintegration.h OTHER_FILES += $$PWD/eglfs_viv_wl.json -CONFIG += link_pkgconfig -PKGCONFIG_PRIVATE += wayland-server +QMAKE_USE_PRIVATE += wayland_server PLUGIN_TYPE = egldeviceintegrations PLUGIN_CLASS_NAME = QEglFSVivWaylandIntegrationPlugin diff --git a/src/plugins/platforms/mirclient/mirclient.pro b/src/plugins/platforms/mirclient/mirclient.pro index 623f7bf97b..0ba63601a9 100644 --- a/src/plugins/platforms/mirclient/mirclient.pro +++ b/src/plugins/platforms/mirclient/mirclient.pro @@ -10,8 +10,7 @@ DEFINES += MESA_EGL_NO_X11_HEADERS QMAKE_CXXFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -Werror -Wall QMAKE_LFLAGS += -std=c++11 -Wl,-no-undefined -CONFIG += link_pkgconfig -PKGCONFIG += egl mirclient ubuntu-platform-api +QMAKE_USE_PRIVATE += mirclient SOURCES = \ qmirclientbackingstore.cpp \ From 99331f661d6ef88f9bb964133ee4eaf8b6d74e80 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 24 Oct 2016 10:17:35 +0200 Subject: [PATCH 158/196] Fix QStandardPaths::FontsLocation to be compliant with the latest XDG spec According to the latest XDG spec, FontsLocation should point to XDG_DATA_DIR/fonts, not ~/.fonts. Task-number: QTBUG-55507 Change-Id: Ia62ffe172abbb93d5ce7fd58bdf038ff13954f1b Reviewed-by: David Faure --- src/corelib/io/qstandardpaths_unix.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp index 0561e5833f..7974dc8cca 100644 --- a/src/corelib/io/qstandardpaths_unix.cpp +++ b/src/corelib/io/qstandardpaths_unix.cpp @@ -245,7 +245,7 @@ QString QStandardPaths::writableLocation(StandardLocation type) break; case FontsLocation: - path = QDir::homePath() + QLatin1String("/.fonts"); + path = writableLocation(GenericDataLocation) + QLatin1String("/fonts"); break; case MusicLocation: @@ -340,6 +340,9 @@ QStringList QStandardPaths::standardLocations(StandardLocation type) for (int i = 0; i < dirs.count(); ++i) appendOrganizationAndApp(dirs[i]); break; + case FontsLocation: + dirs += QDir::homePath() + QLatin1String("/.fonts"); + break; default: break; } From ed99ffdc32270633058eed45d64ccceea9b9de4f Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 26 Oct 2016 13:42:24 +0200 Subject: [PATCH 159/196] Write PKG_CONFIG_EXECUTABLE to qmodule.pri ... and use that variable in qt_configure.prf to find the pkg-config we detected during qtbase configuration. This is required for modules outside of qtbase being able to use pkg-config to configure external libraries. We do not use the PKG_CONFIG variable any more, as that interferes with the $$pkgConfigExecutable() function, which some Qt modules still use. Change-Id: I8886a266207e04301009fe8207c16b02c5455b2f Reviewed-by: Oswald Buddenhagen --- configure.pri | 5 +++-- mkspecs/features/qt_configure.prf | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/configure.pri b/configure.pri index 7ec845375e..57c266a581 100644 --- a/configure.pri +++ b/configure.pri @@ -325,8 +325,9 @@ defineTest(qtConfOutput_qreal) { defineTest(qtConfOutput_pkgConfig) { !$${2}: return() - PKG_CONFIG = $$eval($${currentConfig}.tests.pkg-config.pkgConfig) - export(PKG_CONFIG) + PKG_CONFIG_EXECUTABLE = $$eval($${currentConfig}.tests.pkg-config.pkgConfig) + qtConfOutputVar(assign, "privatePro", "PKG_CONFIG_EXECUTABLE", $$PKG_CONFIG_EXECUTABLE) + export(PKG_CONFIG_EXECUTABLE) # this method also exports PKG_CONFIG_(LIB|SYSROOT)DIR, so that tests using pkgConfig will work correctly PKG_CONFIG_SYSROOT_DIR = $$eval($${currentConfig}.tests.pkg-config.pkgConfigSysrootDir) !isEmpty(PKG_CONFIG_SYSROOT_DIR) { diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index e8fa0c6f76..7118a177fe 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -376,7 +376,7 @@ defineReplace(qtConfPkgConfig) { $$host { pkg_config = $$qtConfFindInPath("pkg-config") } else { - pkg_config = "$$qtConfPkgConfigEnv()$$PKG_CONFIG" + pkg_config = "$$qtConfPkgConfigEnv()$$PKG_CONFIG_EXECUTABLE" } return($$pkg_config) From 8da1828d7a1fb025b051fb6a1cd1607169085c15 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 20 Oct 2016 15:37:34 +0200 Subject: [PATCH 160/196] QtWidgets: Remove function documentation from Qt 4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes qdoc warnings: qtbase/src/widgets/kernel/qwidget.cpp:13053: warning: Cannot find 'macCGHandle(...)' in '\fn' Qt::HANDLE QWidget::macCGHandle() const qtbase/src/widgets/kernel/qwidget.cpp:13062: warning: Cannot find 'macQDHandle(...)' in '\fn' Qt::HANDLE QWidget::macQDHandle() const qtbase/src/widgets/kernel/qwidget.cpp:13071: warning: Cannot find 'x11Info(...)' in '\fn' const QX11Info &QWidget::x11Info() const qtbase/src/widgets/kernel/qwidget.cpp:13080: warning: Cannot find 'x11PictureHandle(...)' in '\fn' Qt::HANDLE QWidget::x11PictureHandle() const They were accidentally re-added in e6ddae07e1e571a7a6e0c531b961dbddcd217643. Change-Id: I1531a795ad182bc0b54d70d52e83422e782cc948 Reviewed-by: Tor Arne Vestbø --- src/widgets/kernel/qwidget.cpp | 39 ---------------------------------- 1 file changed, 39 deletions(-) diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index cf52a21716..c7026781b5 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -13050,45 +13050,6 @@ QDebug operator<<(QDebug debug, const QWidget *widget) } #endif // !QT_NO_DEBUG_STREAM -/*! \fn Qt::HANDLE QWidget::macCGHandle() const - \internal - - Returns the CoreGraphics handle of the widget. Use of this function is not portable. - This function will return 0 if no painter context can be established, or if the handle - could not be created. - - \warning This function is only available on \macos. -*/ -/*! \fn Qt::HANDLE QWidget::macQDHandle() const - \internal - - Returns the QuickDraw handle of the widget. Use of this function is not portable. - This function will return 0 if QuickDraw is not supported, or if the handle could - not be created. - - \warning This function is only available on \macos. -*/ -/*! \fn const QX11Info &QWidget::x11Info() const - \internal - - Returns information about the configuration of the X display used to display - the widget. - - \warning This function is only available on X11. -*/ - -/*! \fn Qt::HANDLE QWidget::x11PictureHandle() const - \internal - - Returns the X11 picture handle of the widget for XRender - support. Use of this function is not portable. This function will - return 0 if XRender support is not compiled into Qt, if the - XRender extension is not supported on the X11 display, or if the - handle could not be created. - - \warning This function is only available on X11. - -*/ QT_END_NAMESPACE #include "moc_qwidget.cpp" From 7f0d43fd332519e2689ffbff8198590d768864bc Mon Sep 17 00:00:00 2001 From: Dongmei Wang Date: Fri, 30 Sep 2016 12:01:02 -0700 Subject: [PATCH 161/196] Don't overlap the menu scrollers with QAction items The QAction items overlap with the menu scrollers. The patch is to set correct clip regions for QAction items in order not to overlap with the scroll arrows. Change-Id: Ie724bd2be522daf5935fb489523b5d5f32bb7f71 Reviewed-by: Gabriel de Dietrich --- src/widgets/widgets/qmenu.cpp | 89 ++++++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index a983dc6fde..b0c9512344 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -2539,51 +2539,85 @@ void QMenu::paintEvent(QPaintEvent *e) menuOpt.tabWidth = 0; style()->drawPrimitive(QStyle::PE_PanelMenu, &menuOpt, &p, this); + //calculate the scroll up / down rect + const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this); + QRect scrollUpRect, scrollDownRect; + if (d->scroll) { + if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + scrollUpRect.setRect(fw, fw, width() - (fw * 2), d->scrollerHeight()); + + if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollDown) + scrollDownRect.setRect(fw, height() - d->scrollerHeight() - fw, width() - (fw * 2), + d->scrollerHeight()); + } + + //calculate the tear off rect + QRect tearOffRect; + if (d->tearoff) { + tearOffRect.setRect(fw, fw, width() - (fw * 2), + style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, this)); + if (d->scroll && d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + tearOffRect.translate(0, d->scrollerHeight()); + } + //draw the items that need updating.. + QRect scrollUpTearOffRect = scrollUpRect.united(tearOffRect); for (int i = 0; i < d->actions.count(); ++i) { QAction *action = d->actions.at(i); - QRect adjustedActionRect = d->actionRects.at(i); - if (!e->rect().intersects(adjustedActionRect) + QRect actionRect = d->actionRects.at(i); + if (!e->rect().intersects(actionRect) || d->widgetItems.value(action)) continue; //set the clip region to be extra safe (and adjust for the scrollers) + emptyArea -= QRegion(actionRect); + + QRect adjustedActionRect = actionRect; + if (adjustedActionRect.intersects(scrollUpTearOffRect)) { + if (adjustedActionRect.bottom() <= scrollUpTearOffRect.bottom()) + continue; + else + adjustedActionRect.setTop(scrollUpTearOffRect.bottom()+1); + } + + if (adjustedActionRect.intersects(scrollDownRect)) { + if (adjustedActionRect.top() >= scrollDownRect.top()) + continue; + else + adjustedActionRect.setBottom(scrollDownRect.top()-1); + } + QRegion adjustedActionReg(adjustedActionRect); - emptyArea -= adjustedActionReg; p.setClipRegion(adjustedActionReg); QStyleOptionMenuItem opt; initStyleOption(&opt, action); - opt.rect = adjustedActionRect; + opt.rect = actionRect; style()->drawControl(QStyle::CE_MenuItem, &opt, &p, this); } - const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, 0, this); - //draw the scroller regions.. - if (d->scroll) { + if (!scrollUpRect.isEmpty()) { menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; menuOpt.state |= QStyle::State_Enabled; - if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) { - menuOpt.rect.setRect(fw, fw, width() - (fw * 2), d->scrollerHeight()); - emptyArea -= QRegion(menuOpt.rect); - p.setClipRect(menuOpt.rect); - style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); - } - if (d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollDown) { - menuOpt.rect.setRect(fw, height() - d->scrollerHeight() - fw, width() - (fw * 2), - d->scrollerHeight()); - emptyArea -= QRegion(menuOpt.rect); - menuOpt.state |= QStyle::State_DownArrow; - p.setClipRect(menuOpt.rect); - style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); - } + menuOpt.rect = scrollUpRect; + emptyArea -= QRegion(menuOpt.rect); + p.setClipRect(menuOpt.rect); + style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); } + + if (!scrollDownRect.isEmpty()) { + menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; + menuOpt.state |= QStyle::State_Enabled; + menuOpt.state |= QStyle::State_DownArrow; + menuOpt.rect = scrollDownRect; + emptyArea -= QRegion(menuOpt.rect); + p.setClipRect(menuOpt.rect); + style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); + } + //paint the tear off.. - if (d->tearoff) { + if (!tearOffRect.isEmpty()) { menuOpt.menuItemType = QStyleOptionMenuItem::TearOff; - menuOpt.rect.setRect(fw, fw, width() - (fw * 2), - style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, this)); - if (d->scroll && d->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) - menuOpt.rect.translate(0, d->scrollerHeight()); + menuOpt.rect = tearOffRect; emptyArea -= QRegion(menuOpt.rect); p.setClipRect(menuOpt.rect); menuOpt.state = QStyle::State_None; @@ -2591,6 +2625,7 @@ void QMenu::paintEvent(QPaintEvent *e) menuOpt.state |= QStyle::State_Selected; style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, &p, this); } + //draw border if (fw) { QRegion borderReg; @@ -2609,7 +2644,7 @@ void QMenu::paintEvent(QPaintEvent *e) style()->drawPrimitive(QStyle::PE_FrameMenu, &frame, &p, this); } - //finally the rest of the space + //finally the rest of the spaces p.setClipRegion(emptyArea); menuOpt.state = QStyle::State_None; menuOpt.menuItemType = QStyleOptionMenuItem::EmptyArea; From c8c3d39e2116251133fb3ee25b615a1522685861 Mon Sep 17 00:00:00 2001 From: Dongmei Wang Date: Tue, 4 Oct 2016 13:05:15 -0700 Subject: [PATCH 162/196] Paint menu scrollers, tear off on top of QWidgetAction items The menu scrollers and the tear off items are painted in the layer of QMenu. In a case that QMenu contains QWidgetAction items, the items are painted under QWidgetAction items. They are visually hidden unless QWidgetAction items' background is transparent. The tear off doesn't work since QWidgetAction item on top of it grabs mouse events. To fix the issue, add two child widgets in QMenu, paint the scroll up and the tear off items in one child widget and the scroll down item in the other one. Both child widgets are painted on top of overlapping sibling menu item widgets. Change-Id: I7eaef21b667b388fbb78b60664f4a4bd91215309 Reviewed-by: Gabriel de Dietrich --- src/widgets/widgets/qmenu.cpp | 139 +++++++++++++++++++++++++++------- src/widgets/widgets/qmenu_p.h | 21 ++++- 2 files changed, 130 insertions(+), 30 deletions(-) diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index b0c9512344..36a8a96b79 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -816,6 +816,93 @@ void QMenuPrivate::updateLayoutDirection() } } +void QMenuPrivate::drawScroller(QPainter *painter, QMenuPrivate::ScrollerTearOffItem::Type type, const QRect &rect) +{ + if (!painter || rect.isEmpty()) + return; + + if (!scroll || !(scroll->scrollFlags & (QMenuPrivate::QMenuScroller::ScrollUp + | QMenuPrivate::QMenuScroller::ScrollDown))) + return; + + Q_Q(QMenu); + QStyleOptionMenuItem menuOpt; + menuOpt.initFrom(q); + menuOpt.state = QStyle::State_None; + menuOpt.checkType = QStyleOptionMenuItem::NotCheckable; + menuOpt.maxIconWidth = 0; + menuOpt.tabWidth = 0; + menuOpt.rect = rect; + menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; + menuOpt.state |= QStyle::State_Enabled; + if (type == QMenuPrivate::ScrollerTearOffItem::ScrollDown) + menuOpt.state |= QStyle::State_DownArrow; + + painter->setClipRect(menuOpt.rect); + q->style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, painter, q); +} + +void QMenuPrivate::drawTearOff(QPainter *painter, const QRect &rect) +{ + if (!painter || rect.isEmpty()) + return; + + if (!tearoff) + return; + + Q_Q(QMenu); + QStyleOptionMenuItem menuOpt; + menuOpt.initFrom(q); + menuOpt.state = QStyle::State_None; + menuOpt.checkType = QStyleOptionMenuItem::NotCheckable; + menuOpt.maxIconWidth = 0; + menuOpt.tabWidth = 0; + menuOpt.rect = rect; + menuOpt.menuItemType = QStyleOptionMenuItem::TearOff; + if (tearoffHighlighted) + menuOpt.state |= QStyle::State_Selected; + + painter->setClipRect(menuOpt.rect); + q->style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, painter, q); +} + +QMenuPrivate::ScrollerTearOffItem::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::Type type, QMenuPrivate *mPrivate, QWidget *parent, Qt::WindowFlags f) + : QWidget(parent, f), menuPrivate(mPrivate), scrollType(type) +{ + if (parent) + setMouseTracking(parent->style()->styleHint(QStyle::SH_Menu_MouseTracking, 0, parent)); +} + +void QMenuPrivate::ScrollerTearOffItem::paintEvent(QPaintEvent *e) +{ + if (!e->rect().intersects(rect())) + return; + + QPainter p(this); + QWidget *parent = parentWidget(); + + //paint scroll up / down arrows + menuPrivate->drawScroller(&p, scrollType, QRect(0, 0, width(), menuPrivate->scrollerHeight())); + //paint the tear off + if (scrollType == QMenuPrivate::ScrollerTearOffItem::ScrollUp) { + QRect rect(0, 0, width(), parent->style()->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, parent)); + if (menuPrivate->scroll && menuPrivate->scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + rect.translate(0, menuPrivate->scrollerHeight()); + menuPrivate->drawTearOff(&p, rect); + } +} + +void QMenuPrivate::ScrollerTearOffItem::updateScrollerRects(const QRect &rect) +{ + if (rect.isEmpty()) + setVisible(false); + else { + setGeometry(rect); + raise(); + setVisible(true); + } +} + /*! Returns the action associated with this menu. @@ -2595,35 +2682,20 @@ void QMenu::paintEvent(QPaintEvent *e) style()->drawControl(QStyle::CE_MenuItem, &opt, &p, this); } - if (!scrollUpRect.isEmpty()) { - menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; - menuOpt.state |= QStyle::State_Enabled; - menuOpt.rect = scrollUpRect; - emptyArea -= QRegion(menuOpt.rect); - p.setClipRect(menuOpt.rect); - style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); - } + emptyArea -= QRegion(scrollUpTearOffRect); + emptyArea -= QRegion(scrollDownRect); - if (!scrollDownRect.isEmpty()) { - menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; - menuOpt.state |= QStyle::State_Enabled; - menuOpt.state |= QStyle::State_DownArrow; - menuOpt.rect = scrollDownRect; - emptyArea -= QRegion(menuOpt.rect); - p.setClipRect(menuOpt.rect); - style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p, this); - } - - //paint the tear off.. - if (!tearOffRect.isEmpty()) { - menuOpt.menuItemType = QStyleOptionMenuItem::TearOff; - menuOpt.rect = tearOffRect; - emptyArea -= QRegion(menuOpt.rect); - p.setClipRect(menuOpt.rect); - menuOpt.state = QStyle::State_None; - if (d->tearoffHighlighted) - menuOpt.state |= QStyle::State_Selected; - style()->drawControl(QStyle::CE_MenuTearoff, &menuOpt, &p, this); + if (d->scrollUpTearOffItem || d->scrollDownItem) { + if (d->scrollUpTearOffItem) + d->scrollUpTearOffItem->updateScrollerRects(scrollUpTearOffRect); + if (d->scrollDownItem) + d->scrollDownItem->updateScrollerRects(scrollDownRect); + } else { + //paint scroll up /down + d->drawScroller(&p, QMenuPrivate::ScrollerTearOffItem::ScrollUp, scrollUpRect); + d->drawScroller(&p, QMenuPrivate::ScrollerTearOffItem::ScrollDown, scrollDownRect); + //paint the tear off.. + d->drawTearOff(&p, tearOffRect); } //draw border @@ -3356,8 +3428,17 @@ void QMenu::actionEvent(QActionEvent *e) } if (QWidgetAction *wa = qobject_cast(e->action())) { QWidget *widget = wa->requestWidget(this); - if (widget) + if (widget) { d->widgetItems.insert(wa, widget); + if (d->scroll) { + if (!d->scrollUpTearOffItem) + d->scrollUpTearOffItem = + new QMenuPrivate::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::ScrollUp, d, this); + if (!d->scrollDownItem) + d->scrollDownItem = + new QMenuPrivate::ScrollerTearOffItem(QMenuPrivate::ScrollerTearOffItem::ScrollDown, d, this); + } + } } } else if (e->type() == QEvent::ActionRemoved) { e->action()->disconnect(this); diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h index 3166e6f6cd..64291e842f 100644 --- a/src/widgets/widgets/qmenu_p.h +++ b/src/widgets/widgets/qmenu_p.h @@ -276,7 +276,8 @@ public: cancelAction(0), #endif scroll(0), eventLoop(0), tearoff(0), tornoff(0), tearoffHighlighted(0), - hasCheckableItems(0), doChildEffects(false), platformMenu(0) + hasCheckableItems(0), doChildEffects(false), platformMenu(0), + scrollUpTearOffItem(nullptr), scrollDownItem(nullptr) { } ~QMenuPrivate() @@ -445,6 +446,24 @@ public: QPointer actionAboutToTrigger; QPointer noReplayFor; + + class ScrollerTearOffItem : public QWidget { + public: + enum Type { ScrollUp, ScrollDown }; + ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate, + QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); + void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; + void updateScrollerRects(const QRect &rect); + + private: + QMenuPrivate *menuPrivate; + Type scrollType; + }; + ScrollerTearOffItem *scrollUpTearOffItem; + ScrollerTearOffItem *scrollDownItem; + + void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect); + void drawTearOff(QPainter *painter, const QRect &rect); }; #endif // QT_NO_MENU From 145587a521c9c757d20220c9957b9003d66ccf7b Mon Sep 17 00:00:00 2001 From: James McDonnell Date: Wed, 26 Oct 2016 11:03:11 -0400 Subject: [PATCH 163/196] Recontribute QUrl::fromUserInput Recontribute QUrl::fromUserInput under the corporate license agreement; i.e. remove the separate BSD license from the code. Change-Id: I1e0b4aab921fb20d2fd558fe732cea596ecbc9ca Reviewed-by: Lars Knoll --- src/corelib/io/qurl.cpp | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index c165aef5a2..cdc6b964e7 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -4128,35 +4128,6 @@ static bool isIp6(const QString &text) return !text.isEmpty() && QIPAddressUtils::parseIp6(address, text.begin(), text.end()) == 0; } -// The following code has the following copyright: -/* - Copyright (C) Research In Motion Limited 2009. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Research In Motion Limited nor the - contributors may be used to endorse or promote products derived - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY Research In Motion Limited ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL Research In Motion Limited BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - - /*! Returns a valid URL from a user supplied \a userInput string if one can be deducted. In the case that is not possible, an invalid QUrl() is returned. @@ -4275,6 +4246,5 @@ QUrl QUrl::fromUserInput(const QString &userInput) return QUrl(); } -// end of BSD code QT_END_NAMESPACE From 456f0e0f1a4fb422b029c5abd30e2e622435f76a Mon Sep 17 00:00:00 2001 From: Vyacheslav Koscheev Date: Thu, 27 Oct 2016 11:06:09 +0700 Subject: [PATCH 164/196] Compilation fix If qreal is float, then android-clang compilation was breaking here Change-Id: Ieccc357ecbbea5cbb22a5808dd0791795240a985 Reviewed-by: Marc Mutz --- src/gui/text/qfontengine_ft.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 1711865e59..199e207578 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -1790,7 +1790,7 @@ void QFontEngineFT::unlockAlphaMapForGlyph() static inline bool is2dRotation(const QTransform &t) { return qFuzzyCompare(t.m11(), t.m22()) && qFuzzyCompare(t.m12(), -t.m21()) - && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), 1.0); + && qFuzzyCompare(t.m11()*t.m22() - t.m12()*t.m21(), qreal(1.0)); } QFontEngineFT::Glyph *QFontEngineFT::loadGlyphFor(glyph_t g, From 5a92b6e8beeb9aa6d3d904c7901f13a6b22502f6 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 25 Oct 2016 10:23:20 +0200 Subject: [PATCH 165/196] Document use of 3rd party code in qgrayraster qgrayraster_p.h, qgrayraster.cpp contain code from Freetype which unfortunately cannot be excluded by e.g. '-no-freetype'. Document this code therefore separately. Change-Id: I20d79e984013b2aec874774ddc765b1dc57ebe0e Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/painting/qt_attribution.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/gui/painting/qt_attribution.json diff --git a/src/gui/painting/qt_attribution.json b/src/gui/painting/qt_attribution.json new file mode 100644 index 0000000000..f635cf98ac --- /dev/null +++ b/src/gui/painting/qt_attribution.json @@ -0,0 +1,14 @@ +{ + "Id": "grayraster", + "Name": "Anti-aliasing rasterizer from FreeType 2", + "QDocModule": "qtgui", + "QtUsage": "Used in Qt GUI.", + "Path": "qgrayraster.c", + + "Description": "FreeType is a freely available software library to render fonts.", + "Homepage": "http://www.freetype.org", + "License": "Freetype Project License or GNU General Public License v2.0 only", + "LicenseId": "FTL or GPL-2.0", + "LicenseFile": "../../3rdparty/freetype/docs/LICENSE.TXT", + "Copyright": "Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg." +} From 1bd53131d83cdf595f95f82f0c049d2d68957159 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 27 Oct 2016 12:51:43 +0200 Subject: [PATCH 166/196] configure: Determine MSVC version by evaluating macro _MSC_FULL_VER The previously used regular expression failed for messages in local languages, particularly for the French message containing a non-breaking space. Task-number: QTBUG-56388 Change-Id: Ie757617f1b3a31820d0ed274c4b157d544ac1ea6 Reviewed-by: Oswald Buddenhagen --- tools/configure/environment.cpp | 35 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp index 60616f35e7..153a141d7a 100644 --- a/tools/configure/environment.cpp +++ b/tools/configure/environment.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -172,25 +173,23 @@ QString Environment::gccVersion() QString Environment::msvcVersion() { int returnValue = 0; - // Extract version from standard error output of "cl /?" - const QString command = QFile::decodeName(qgetenv("ComSpec")) - + QLatin1String(" /c ") + QLatin1String(compilerInfo(CC_MSVC2015)->executable) - + QLatin1String(" /? 2>&1"); - SetEnvironmentVariable(L"CL", NULL); // May contain /nologo, which suppresses the version. - QString version = execute(command, &returnValue); - if (returnValue != 0) { - cout << "Could not get cl version" << returnValue << qPrintable(version) << '\n';; - version.clear(); - } else { - QRegExp versionRegexp(QStringLiteral("^.*\\b(\\d{2,2}\\.\\d{2,2}\\.\\d{5,5})\\b.*$")); - Q_ASSERT(versionRegexp.isValid()); - if (versionRegexp.exactMatch(version)) { - version = versionRegexp.cap(1); - } else { - cout << "Unable to determine cl version from the output of \"" - << qPrintable(command) << "\"\n"; - } + QString tempSourceName; + { // QTemporaryFile needs to go out of scope, otherwise cl.exe refuses to open it. + QTemporaryFile tempSource(QDir::tempPath() + QLatin1String("/XXXXXX.cpp")); + tempSource.setAutoRemove(false); + if (!tempSource.open()) + return QString(); + tempSource.write("_MSC_FULL_VER\n"); + tempSourceName = tempSource.fileName(); } + QString version = execute(QLatin1String("cl /nologo /EP \"") + + QDir::toNativeSeparators(tempSourceName) + QLatin1Char('"'), + &returnValue).trimmed(); + QFile::remove(tempSourceName); + if (returnValue || version.size() < 9 || !version.at(0).isDigit()) + return QString(); + version.insert(4, QLatin1Char('.')); + version.insert(2, QLatin1Char('.')); return version; } From d19f01acbf9547762150a479793b84898f1a115e Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Tue, 18 Oct 2016 13:02:34 +0200 Subject: [PATCH 167/196] nsphotolibrarysupport: add missing namespace macros Change-Id: Ib2014dc64dfcc1ea8de63a1668907ace6d26c530 Reviewed-by: Jake Petroules --- .../nsphotolibrarysupport/qiosfileengineassetslibrary.h | 5 +++++ .../nsphotolibrarysupport/qiosfileengineassetslibrary.mm | 4 ++++ .../optional/nsphotolibrarysupport/qiosfileenginefactory.h | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h index 89696751c6..d4dc77b1a3 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.h @@ -37,6 +37,9 @@ #include Q_FORWARD_DECLARE_OBJC_CLASS(ALAsset); + +QT_BEGIN_NAMESPACE + class QIOSAssetData; class QIOSFileEngineAssetsLibrary : public QAbstractFileEngine @@ -72,5 +75,7 @@ private: ALAsset *loadAsset() const; }; +QT_END_NAMESPACE + #endif // QIOSFILEENGINEASSETSLIBRARY_H diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm index 2e88c37c01..110348d32b 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm @@ -42,6 +42,8 @@ #include #include +QT_BEGIN_NAMESPACE + static QThreadStorage g_iteratorCurrentUrl; static QThreadStorage > g_assetDataCache; @@ -466,4 +468,6 @@ QAbstractFileEngine::Iterator *QIOSFileEngineAssetsLibrary::endEntryList() return 0; } +QT_END_NAMESPACE + #endif diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h index 29f543caae..f41de5f8ec 100644 --- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h +++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileenginefactory.h @@ -38,6 +38,8 @@ #include #include "qiosfileengineassetslibrary.h" +QT_BEGIN_NAMESPACE + class QIOSFileEngineFactory : public QAbstractFileEngineHandler { public: @@ -52,4 +54,6 @@ public: } }; +QT_END_NAMESPACE + #endif // QIOSFILEENGINEFACTORY_H From 0e2d38b4477ffec6941d0f88cfa7bf92a8b79843 Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Mon, 24 Oct 2016 19:16:13 +0300 Subject: [PATCH 168/196] QAbstractSocket: avoid unspecified behavior in writing on TCP Passing zero as size parameter to QAbstractSocketEngine::write() has unspecified behavior, at least for TCP sockets. This could happen on flush() when writeBuffer is empty or on writeData() with size 0. Avoid by explicitly checking against zero size. Change-Id: I070630d244ce6c3de3da94f84c2cded2c7a4b081 Reviewed-by: Edward Welbourne --- src/network/socket/qabstractsocket.cpp | 4 ++-- src/network/socket/qnativesocketengine.cpp | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 3d665270fd..f28dc6698a 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -881,7 +881,7 @@ bool QAbstractSocketPrivate::flush() const char *ptr = writeBuffer.readPointer(); // Attempt to write it all in one chunk. - qint64 written = socketEngine->write(ptr, nextSize); + qint64 written = nextSize ? socketEngine->write(ptr, nextSize) : Q_INT64_C(0); if (written < 0) { #if defined (QABSTRACTSOCKET_DEBUG) qDebug() << "QAbstractSocketPrivate::flush() write error, aborting." << socketEngine->errorString(); @@ -2477,7 +2477,7 @@ qint64 QAbstractSocket::writeData(const char *data, qint64 size) if (!d->isBuffered && d->socketType == TcpSocket && d->socketEngine && d->writeBuffer.isEmpty()) { // This code is for the new Unbuffered QTcpSocket use case - qint64 written = d->socketEngine->write(data, size); + qint64 written = size ? d->socketEngine->write(data, size) : Q_INT64_C(0); if (written < 0) { d->setError(d->socketEngine->error(), d->socketEngine->errorString()); return written; diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 805acde860..86d13d82a2 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -846,6 +846,10 @@ qint64 QNativeSocketEngine::writeDatagram(const char *data, qint64 size, const Q /*! Writes a block of \a size bytes from \a data to the socket. Returns the number of bytes written, or -1 if an error occurred. + + Passing zero as the \a size parameter on a connected UDP socket + will send an empty datagram. For other socket types results are + unspecified. */ qint64 QNativeSocketEngine::write(const char *data, qint64 size) { From 3daa76d49499a1b03ff8296d3aab8f6fa4c23267 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Thu, 27 Oct 2016 14:06:49 +0200 Subject: [PATCH 169/196] iOS: ensure we return a non-null clipboard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QPlatformIntegration::clipboard() is not allowed to return null. This will lead to a crash as soon as someone tries to access QClipboard. Change-Id: I3c1e7cdc5103fe4424f9739a09f599d6c0af40b2 Reviewed-by: Tor Arne Vestbø Reviewed-by: Jake Petroules --- src/plugins/platforms/ios/qiosintegration.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 82b5f3b755..44e636bae6 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -227,7 +227,7 @@ QPlatformClipboard *QIOSIntegration::clipboard() const #ifndef Q_OS_TVOS return m_clipboard; #else - return 0; + return QPlatformIntegration::clipboard(); #endif } #endif From 5700644a4268fdf8717b83a63e4843dcb86814b6 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Thu, 27 Oct 2016 13:50:21 +0200 Subject: [PATCH 170/196] iOS: guard iOS only code to not break tvOS build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit inputAssistantItem is not available on tvOS. Change-Id: Icff684d6299688fbeaf40ffcb32ff9c46371b305 Reviewed-by: Tor Arne Vestbø Reviewed-by: Jake Petroules --- src/plugins/platforms/ios/qiostextresponder.mm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm index d7b0a323ad..e8d216fbc2 100644 --- a/src/plugins/platforms/ios/qiostextresponder.mm +++ b/src/plugins/platforms/ios/qiostextresponder.mm @@ -236,6 +236,8 @@ self.inputView = [[[WrapperView alloc] initWithView:inputView] autorelease]; if (UIView *accessoryView = static_cast(platformData.value(kImePlatformDataInputAccessoryView).value())) self.inputAccessoryView = [[[WrapperView alloc] initWithView:accessoryView] autorelease]; + +#ifndef Q_OS_TVOS if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_9_0) { if (platformData.value(kImePlatformDataHideShortcutsBar).toBool()) { // According to the docs, leadingBarButtonGroups/trailingBarButtonGroups should be set to nil to hide the shortcuts bar. @@ -247,6 +249,7 @@ self.inputAssistantItem.trailingBarButtonGroups = @[trailing]; } } +#endif self.undoManager.groupsByEvent = NO; [self rebuildUndoStack]; From af3e697ad60358d5a68b8692ee4d2e4f92ab65f8 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 13 Sep 2016 08:34:06 +0200 Subject: [PATCH 171/196] QWindowsXPStyle: Use qreal scale factors in theme drawing helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This improves support for fractional scale factors. Task-number: QTBUG-49374 Change-Id: Ied6579ee831f3ea29f238baaffa67374ea6823d9 Reviewed-by: Morten Johan Sørvig --- src/widgets/styles/qwindowsxpstyle.cpp | 36 ++++++++++++------------ src/widgets/styles/qwindowsxpstyle_p_p.h | 4 +-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp index 3017707117..e85d0360f9 100644 --- a/src/widgets/styles/qwindowsxpstyle.cpp +++ b/src/widgets/styles/qwindowsxpstyle.cpp @@ -803,7 +803,7 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData) bool translucentToplevel = false; const QPaintDevice *paintDevice = painter->device(); - const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatio() : 1; + const qreal aditionalDevicePixelRatio = themeData.widget ? themeData.widget->devicePixelRatioF() : qreal(1); if (paintDevice->devType() == QInternal::Widget) { const QWidget *window = static_cast(paintDevice)->window(); translucentToplevel = window->testAttribute(Qt::WA_TranslucentBackground); @@ -832,28 +832,28 @@ bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData) const HDC dc = canDrawDirectly ? hdcForWidgetBackingStore(themeData.widget) : HDC(0); const bool result = dc - ? drawBackgroundDirectly(dc, themeData, qRound(aditionalDevicePixelRatio)) - : drawBackgroundThruNativeBuffer(themeData, qRound(aditionalDevicePixelRatio)); + ? drawBackgroundDirectly(dc, themeData, aditionalDevicePixelRatio) + : drawBackgroundThruNativeBuffer(themeData, aditionalDevicePixelRatio); painter->restore(); return result; } -static inline QRect scaleRect(const QRect &r, int factor) +static inline QRectF scaleRect(const QRectF &r, qreal factor) { return r.isValid() && factor > 1 - ? QRect(r.topLeft() * factor, r.size() * factor) + ? QRectF(r.topLeft() * factor, r.size() * factor) : r; } -static QRegion scaleRegion(const QRegion ®ion, int factor) +static QRegion scaleRegion(const QRegion ®ion, qreal factor) { - if (region.isEmpty() || factor == 1) + if (region.isEmpty() || qFuzzyCompare(factor, qreal(1))) return region; if (region.rectCount() == 1) - return QRegion(scaleRect(region.boundingRect(), factor)); + return QRegion(scaleRect(QRectF(region.boundingRect()), factor).toRect()); QRegion result; foreach (const QRect &rect, region.rects()) - result += QRect(rect.topLeft() * factor, rect.size() * factor); + result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect(); return result; } @@ -862,13 +862,12 @@ static QRegion scaleRegion(const QRegion ®ion, int factor) Do not use this if you need to perform other transformations on the resulting data. */ -bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int additionalDevicePixelRatio) +bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal additionalDevicePixelRatio) { QPainter *painter = themeData.painter; - QPoint redirectionDelta(int(painter->deviceMatrix().dx()), - int(painter->deviceMatrix().dy())); - QRect area = scaleRect(themeData.rect, additionalDevicePixelRatio).translated(redirectionDelta); + const QPointF redirectionDelta(painter->deviceMatrix().dx(), painter->deviceMatrix().dy()); + const QRect area = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio).translated(redirectionDelta).toRect(); QRegion sysRgn = painter->paintEngine()->systemClip(); if (sysRgn.isEmpty()) @@ -876,7 +875,7 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa else sysRgn &= area; if (painter->hasClipping()) - sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta); + sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta.toPoint()); HRGN hrgn = qt_hrgn_from_qregion(sysRgn); SelectClipRgn(dc, hrgn); @@ -948,15 +947,16 @@ bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeDa engine). */ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeData, - int additionalDevicePixelRatio) + qreal additionalDevicePixelRatio) { QPainter *painter = themeData.painter; - QRect rect = scaleRect(themeData.rect, additionalDevicePixelRatio); + QRectF rectF = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio); if ((themeData.rotate + 90) % 180 == 0) { // Catch 90,270,etc.. degree flips. - rect = QRect(0, 0, rect.height(), rect.width()); + rectF = QRectF(0, 0, rectF.height(), rectF.width()); } - rect.moveTo(0,0); + rectF.moveTo(0, 0); + QRect rect = rectF.toRect(); int partId = themeData.partId; int stateId = themeData.stateId; int w = rect.width(); diff --git a/src/widgets/styles/qwindowsxpstyle_p_p.h b/src/widgets/styles/qwindowsxpstyle_p_p.h index 51541ed218..5a6a23511f 100644 --- a/src/widgets/styles/qwindowsxpstyle_p_p.h +++ b/src/widgets/styles/qwindowsxpstyle_p_p.h @@ -388,8 +388,8 @@ public: void setTransparency(QWidget *widget, XPThemeData &themeData); bool drawBackground(XPThemeData &themeData); - bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, int aditionalDevicePixelRatio); - bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, int aditionalDevicePixelRatio); + bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, qreal aditionalDevicePixelRatio); + bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal aditionalDevicePixelRatio); bool hasAlphaChannel(const QRect &rect); bool fixAlphaChannel(const QRect &rect); From f9a80e06ac928bf796d013dd7fba10ba30827202 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Fri, 3 Jun 2016 16:22:21 -0700 Subject: [PATCH 172/196] Move Windows font DB and engines to QtFontDatabaseSupport This allows creating or extending QPA plugins to provide access to QFont and related types. It concerns both GDI and DirectWrite engines, as well as the regular and the freetype based font databases. The qt.qpa.fonts logging category has been moved together into the QWindowsFontDatabase related files to avoid depending on the qwindowscontext.h header file. Finally, QwindowsNativeImage is following pending a future refactor with similar code in qpixmap_win.cpp and the Windows XP style. Change-Id: Iddff2f3d715e3ab7695e6c2052b7596a01fd6fa8 Reviewed-by: Friedemann Kleint --- .../fontdatabases/fontdatabases.pro | 4 ++ .../windows/qwindowsfontdatabase.cpp | 62 +++++++++++++------ .../windows/qwindowsfontdatabase_ft.cpp | 7 +-- .../windows/qwindowsfontdatabase_ft_p.h} | 11 ++++ .../windows/qwindowsfontdatabase_p.h} | 27 ++++++++ .../windows/qwindowsfontengine.cpp | 26 ++++---- .../windows/qwindowsfontengine_p.h} | 5 +- .../windows/qwindowsfontenginedirectwrite.cpp | 5 +- .../qwindowsfontenginedirectwrite_p.h} | 11 ++++ .../windows/qwindowsnativeimage.cpp | 15 ++++- .../windows/qwindowsnativeimage_p.h} | 13 +++- .../fontdatabases/windows/windows.pri | 33 ++++++++++ src/platformsupport/platformsupport.pro | 2 +- src/plugins/platforms/direct2d/direct2d.pro | 3 +- .../direct2d/qwindowsdirect2dpaintengine.cpp | 4 +- .../windows/qwindowsbackingstore.cpp | 2 +- .../platforms/windows/qwindowscontext.cpp | 1 - .../platforms/windows/qwindowscontext.h | 1 - .../platforms/windows/qwindowsintegration.cpp | 4 +- .../platforms/windows/qwindowsintegration.h | 6 +- .../windows/qwindowsnativeinterface.cpp | 2 +- .../platforms/windows/qwindowstheme.cpp | 2 +- .../platforms/windows/qwindowswindow.cpp | 1 - src/plugins/platforms/windows/windows.pri | 21 ------- 24 files changed, 188 insertions(+), 80 deletions(-) rename src/{plugins/platforms => platformsupport/fontdatabases}/windows/qwindowsfontdatabase.cpp (97%) rename src/{plugins/platforms => platformsupport/fontdatabases}/windows/qwindowsfontdatabase_ft.cpp (99%) rename src/{plugins/platforms/windows/qwindowsfontdatabase_ft.h => platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h} (92%) rename src/{plugins/platforms/windows/qwindowsfontdatabase.h => platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h} (88%) rename src/{plugins/platforms => platformsupport/fontdatabases}/windows/qwindowsfontengine.cpp (98%) rename src/{plugins/platforms/windows/qwindowsfontengine.h => platformsupport/fontdatabases/windows/qwindowsfontengine_p.h} (98%) rename src/{plugins/platforms => platformsupport/fontdatabases}/windows/qwindowsfontenginedirectwrite.cpp (99%) rename src/{plugins/platforms/windows/qwindowsfontenginedirectwrite.h => platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h} (95%) rename src/{plugins/platforms => platformsupport/fontdatabases}/windows/qwindowsnativeimage.cpp (92%) rename src/{plugins/platforms/windows/qwindowsnativeimage.h => platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h} (90%) create mode 100644 src/platformsupport/fontdatabases/windows/windows.pri diff --git a/src/platformsupport/fontdatabases/fontdatabases.pro b/src/platformsupport/fontdatabases/fontdatabases.pro index 7ffeda6fe2..7fc4ecc115 100644 --- a/src/platformsupport/fontdatabases/fontdatabases.pro +++ b/src/platformsupport/fontdatabases/fontdatabases.pro @@ -20,6 +20,10 @@ darwin:!if(watchos:CONFIG(simulator, simulator|device)) { include($$PWD/fontconfig/fontconfig.pri) } } + + win32:!winrt { + include($$PWD/windows/windows.pri) + } } load(qt_module) diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp similarity index 97% rename from src/plugins/platforms/windows/qwindowsfontdatabase.cpp rename to src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index 1630b80306..ad653ab95d 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -37,12 +37,10 @@ ** ****************************************************************************/ -#include "qwindowsfontdatabase.h" -#include "qwindowsfontdatabase_ft.h" // for default font -#include "qwindowscontext.h" -#include "qwindowsintegration.h" -#include "qwindowsfontengine.h" -#include "qwindowsfontenginedirectwrite.h" +#include "qwindowsfontdatabase_p.h" +#include "qwindowsfontdatabase_ft_p.h" // for default font +#include "qwindowsfontengine_p.h" +#include "qwindowsfontenginedirectwrite_p.h" #include #include @@ -69,6 +67,8 @@ QT_BEGIN_NAMESPACE +Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") + #ifndef QT_NO_DIRECTWRITE // ### fixme: Consider direct linking of dwrite.dll once Windows Vista pre SP2 is dropped (QTBUG-49711) @@ -114,17 +114,18 @@ static inline bool useDirectWrite(QFont::HintingPreference hintingPreference, const QString &familyName = QString(), bool isColorFont = false) { - const unsigned options = QWindowsIntegration::instance()->options(); - if (Q_UNLIKELY(options & QWindowsIntegration::DontUseDirectWriteFonts)) + const unsigned options = QWindowsFontDatabase::fontOptions(); + if (Q_UNLIKELY(options & QWindowsFontDatabase::DontUseDirectWriteFonts)) return false; - if (isColorFont) - return (options & QWindowsIntegration::DontUseColorFonts) == 0; // At some scales, GDI will misrender the MingLiU font, so we force use of // DirectWrite to work around the issue. if (Q_UNLIKELY(familyName.startsWith(QLatin1String("MingLiU")))) return true; + if (isColorFont) + return (options & QWindowsFontDatabase::DontUseColorFonts) == 0; + return hintingPreference == QFont::PreferNoHinting || hintingPreference == QFont::PreferVerticalHinting || (QHighDpiScaling::isActive() && hintingPreference == QFont::PreferDefaultHinting); @@ -610,6 +611,19 @@ QWindowsFontEngineData::QWindowsFontEngineData() ReleaseDC(0, displayDC); } +unsigned QWindowsFontDatabase::m_fontOptions = 0; + +void QWindowsFontDatabase::setFontOptions(unsigned options) +{ + m_fontOptions = options & (QWindowsFontDatabase::DontUseDirectWriteFonts | + QWindowsFontDatabase::DontUseColorFonts); +} + +unsigned QWindowsFontDatabase::fontOptions() +{ + return m_fontOptions; +} + QWindowsFontEngineData::~QWindowsFontEngineData() { if (hdc) @@ -992,7 +1006,7 @@ static bool addFontToDatabase(const QString &familyName, const QString &styleNam const QFont::Stretch stretch = QFont::Unstretched; #ifndef QT_NO_DEBUG_OUTPUT - if (QWindowsContext::verbose > 2) { + if (lcQpaFonts().isDebugEnabled()) { QString message; QTextStream str(&message); str << __FUNCTION__ << ' ' << familyName << ' ' << charSet << " TTF=" << ttf; @@ -1214,7 +1228,7 @@ QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, void *handle) { QFontEngine *fe = QWindowsFontDatabase::createEngine(fontDef, - QWindowsContext::instance()->defaultDPI(), + defaultVerticalDPI(), sharedFontData()); qCDebug(lcQpaFonts) << __FUNCTION__ << "FONTDEF" << fontDef << fe << handle; return fe; @@ -1268,7 +1282,7 @@ QT_WARNING_POP request.stretch = QFont::Unstretched; fontEngine = QWindowsFontDatabase::createEngine(request, - QWindowsContext::instance()->defaultDPI(), + defaultVerticalDPI(), sharedFontData()); if (fontEngine) { @@ -1924,11 +1938,6 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, return fe; } -static inline int verticalDPI() -{ - return GetDeviceCaps(QWindowsContext::instance()->displayContext(), LOGPIXELSY); -} - QFont QWindowsFontDatabase::systemDefaultFont() { LOGFONT lf; @@ -1944,7 +1953,7 @@ QFont QWindowsFontDatabase::systemDefaultFont() QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int verticalDPI_In) { if (verticalDPI_In <= 0) - verticalDPI_In = verticalDPI(); + verticalDPI_In = defaultVerticalDPI(); QFont qFont(QString::fromWCharArray(logFont.lfFaceName)); qFont.setItalic(logFont.lfItalic); if (logFont.lfWeight != FW_DONTCARE) @@ -1957,4 +1966,19 @@ QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int vertica return qFont; } +int QWindowsFontDatabase::defaultVerticalDPI() +{ + static int vDPI = -1; + if (vDPI == -1) { + if (HDC defaultDC = GetDC(0)) { + vDPI = GetDeviceCaps(defaultDC, LOGPIXELSY); + ReleaseDC(0, defaultDC); + } else { + // FIXME: Resolve now or return 96 and keep unresolved? + vDPI = 96; + } + } + return vDPI; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp similarity index 99% rename from src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp rename to src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp index bc0e5cc523..4d973bbf17 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp @@ -37,9 +37,8 @@ ** ****************************************************************************/ -#include "qwindowsfontdatabase_ft.h" -#include "qwindowsfontdatabase.h" -#include "qwindowscontext.h" +#include "qwindowsfontdatabase_ft_p.h" +#include "qwindowsfontdatabase_p.h" #include #include FT_TRUETYPE_TABLES_H @@ -188,7 +187,7 @@ static bool addFontToDatabase(const QString &faceName, const QFont::Stretch stretch = QFont::Unstretched; #ifndef QT_NO_DEBUG_STREAM - if (QWindowsContext::verbose > 2) { + if (lcQpaFonts().isDebugEnabled()) { QString message; QTextStream str(&message); str << __FUNCTION__ << ' ' << faceName << "::" << fullName << ' ' << charSet << " TTF=" << ttf; diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h similarity index 92% rename from src/plugins/platforms/windows/qwindowsfontdatabase_ft.h rename to src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h index 90008e20a4..3a432842e5 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h @@ -40,6 +40,17 @@ #ifndef QWINDOWSFONTDATABASEFT_H #define QWINDOWSFONTDATABASEFT_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + #include #include #include diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h similarity index 88% rename from src/plugins/platforms/windows/qwindowsfontdatabase.h rename to src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h index 8b8c9c15f4..d240f77a66 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h @@ -40,8 +40,20 @@ #ifndef QWINDOWSFONTDATABASE_H #define QWINDOWSFONTDATABASE_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + #include #include +#include #include #if !defined(QT_NO_DIRECTWRITE) @@ -51,6 +63,8 @@ QT_BEGIN_NAMESPACE +Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) + class QWindowsFontEngineData { Q_DISABLE_COPY(QWindowsFontEngineData) @@ -72,6 +86,12 @@ public: class QWindowsFontDatabase : public QPlatformFontDatabase { public: + enum FontOptions { + // Relevant bits from QWindowsIntegration::Options + DontUseDirectWriteFonts = 0x40, + DontUseColorFonts = 0x80 + }; + QWindowsFontDatabase(); ~QWindowsFontDatabase(); @@ -105,6 +125,11 @@ public: static QStringList extraTryFontsForFamily(const QString &family); static QString familyForStyleHint(QFont::StyleHint styleHint); + static int defaultVerticalDPI(); + + static void setFontOptions(unsigned options); + static unsigned fontOptions(); + private: void populateFamily(const QString &familyName, bool registerAlias); void removeApplicationFonts(); @@ -122,6 +147,8 @@ private: }; QMap m_uniqueFontData; + + static unsigned m_fontOptions; }; #ifndef QT_NO_DEBUG_STREAM diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp similarity index 98% rename from src/plugins/platforms/windows/qwindowsfontengine.cpp rename to src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp index f5d1ed9fad..9fc6fec915 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp @@ -37,14 +37,13 @@ ** ****************************************************************************/ -#include "qwindowsintegration.h" -#include "qwindowsfontengine.h" -#include "qwindowsnativeimage.h" -#include "qwindowscontext.h" -#include "qwindowsfontdatabase.h" +#include "qwindowsfontengine_p.h" +#include "qwindowsnativeimage_p.h" +#include "qwindowsfontdatabase_p.h" #include -#include "qwindowsfontenginedirectwrite.h" +#include "qwindowsfontenginedirectwrite_p.h" +#include #include // glyph_metrics_t #include #include @@ -315,8 +314,10 @@ QWindowsFontEngine::~QWindowsFontEngine() qCDebug(lcQpaFonts) << __FUNCTION__ << _name; if (!uniqueFamilyName.isEmpty()) { - QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase(); - static_cast(pfdb)->derefUniqueFont(uniqueFamilyName); + if (QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration()) { + QPlatformFontDatabase *pfdb = pi->fontDatabase(); + static_cast(pfdb)->derefUniqueFont(uniqueFamilyName); + } } } @@ -1194,14 +1195,16 @@ QFontEngine *QWindowsFontEngine::cloneWithSize(qreal pixelSize) const QFontEngine *fontEngine = QWindowsFontDatabase::createEngine(request, - QWindowsContext::instance()->defaultDPI(), + QWindowsFontDatabase::defaultVerticalDPI(), m_fontEngineData); if (fontEngine) { fontEngine->fontDef.family = actualFontName; if (!uniqueFamilyName.isEmpty()) { static_cast(fontEngine)->setUniqueFamilyName(uniqueFamilyName); - QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase(); - static_cast(pfdb)->refUniqueFont(uniqueFamilyName); + if (QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration()) { + QPlatformFontDatabase *pfdb = pi->fontDatabase(); + static_cast(pfdb)->refUniqueFont(uniqueFamilyName); + } } } return fontEngine; @@ -1325,4 +1328,3 @@ bool QWindowsFontEngine::supportsTransformation(const QTransform &transform) con } QT_END_NAMESPACE - diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h similarity index 98% rename from src/plugins/platforms/windows/qwindowsfontengine.h rename to src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h index b63d8fd282..709de7d11d 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h @@ -44,8 +44,8 @@ // W A R N I N G // ------------- // -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. @@ -184,4 +184,3 @@ Q_DECLARE_METATYPE(HFONT) Q_DECLARE_METATYPE(LOGFONT) #endif // QWINDOWSFONTENGINE_H - diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp similarity index 99% rename from src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp rename to src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp index 334e9cb8b9..a1d8c2b9e8 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp @@ -39,9 +39,8 @@ #ifndef QT_NO_DIRECTWRITE -#include "qwindowsfontenginedirectwrite.h" -#include "qwindowsfontdatabase.h" -#include "qwindowscontext.h" +#include "qwindowsfontenginedirectwrite_p.h" +#include "qwindowsfontdatabase_p.h" #include #include diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h similarity index 95% rename from src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h rename to src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h index e4a82c6a6e..65b16b9ba7 100644 --- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h @@ -40,6 +40,17 @@ #ifndef QWINDOWSFONTENGINEDIRECTWRITE_H #define QWINDOWSFONTENGINEDIRECTWRITE_H +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + #include #ifndef QT_NO_DIRECTWRITE diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.cpp b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp similarity index 92% rename from src/plugins/platforms/windows/qwindowsnativeimage.cpp rename to src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp index ec9683ea8d..7022615511 100644 --- a/src/plugins/platforms/windows/qwindowsnativeimage.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp @@ -37,8 +37,7 @@ ** ****************************************************************************/ -#include "qwindowsnativeimage.h" -#include "qwindowscontext.h" +#include "qwindowsnativeimage_p.h" #include #include @@ -143,7 +142,17 @@ QWindowsNativeImage::~QWindowsNativeImage() QImage::Format QWindowsNativeImage::systemFormat() { - static const int depth = QWindowsContext::instance()->screenDepth(); + static int depth = -1; + if (depth == -1) { + if (HDC defaultDC = GetDC(0)) { + depth = GetDeviceCaps(defaultDC, BITSPIXEL); + ReleaseDC(0, defaultDC); + } else { + // FIXME Same remark as in QWindowsFontDatabase::defaultVerticalDPI() + // BONUS FIXME: Is 32 too generous/optimistic? + depth = 32; + } + } return depth == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32; } diff --git a/src/plugins/platforms/windows/qwindowsnativeimage.h b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h similarity index 90% rename from src/plugins/platforms/windows/qwindowsnativeimage.h rename to src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h index bfe0f07dfd..c27c0d1e98 100644 --- a/src/plugins/platforms/windows/qwindowsnativeimage.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage_p.h @@ -40,8 +40,19 @@ #ifndef QWINDOWSNATIVEIMAGE_H #define QWINDOWSNATIVEIMAGE_H -#include +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// +#include +#include #include QT_BEGIN_NAMESPACE diff --git a/src/platformsupport/fontdatabases/windows/windows.pri b/src/platformsupport/fontdatabases/windows/windows.pri new file mode 100644 index 0000000000..419c4dc6d9 --- /dev/null +++ b/src/platformsupport/fontdatabases/windows/windows.pri @@ -0,0 +1,33 @@ +QT *= gui-private + +SOURCES += \ + $$PWD/qwindowsfontdatabase.cpp \ + $$PWD/qwindowsfontengine.cpp \ + $$PWD/qwindowsnativeimage.cpp + +HEADERS += \ + $$PWD/qwindowsfontdatabase_p.h \ + $$PWD/qwindowsfontengine_p.h \ + $$PWD/qwindowsnativeimage_p.h + +qtConfig(freetype) { + SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp + HEADERS += $$PWD/qwindowsfontdatabase_ft_p.h + qtConfig(system-freetype) { + include($$QT_SOURCE_TREE/src/platformsupport/fontdatabases/basic/basic.pri) + } else { + include($$QT_SOURCE_TREE/src/3rdparty/freetype_dependency.pri) + } +} + +qtConfig(directwrite) { + qtConfig(directwrite2): \ + DEFINES *= QT_USE_DIRECTWRITE2 + + SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp + HEADERS += $$PWD/qwindowsfontenginedirectwrite_p.h +} else { + DEFINES *= QT_NO_DIRECTWRITE +} + +LIBS += -lole32 -lgdi32 -luser32 diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro index 5161ce3520..bb0b7b81a3 100644 --- a/src/platformsupport/platformsupport.pro +++ b/src/platformsupport/platformsupport.pro @@ -7,7 +7,7 @@ SUBDIRS = \ fbconvenience \ themes -qtConfig(freetype)|if(darwin:!if(watchos:CONFIG(simulator, simulator|device))): \ +qtConfig(freetype)|if(darwin:!if(watchos:CONFIG(simulator, simulator|device)))|win32: \ SUBDIRS += fontdatabases qtConfig(evdev)|qtConfig(tslib)|qtConfig(libinput) { diff --git a/src/plugins/platforms/direct2d/direct2d.pro b/src/plugins/platforms/direct2d/direct2d.pro index 83c4a730f4..c30703720c 100644 --- a/src/plugins/platforms/direct2d/direct2d.pro +++ b/src/plugins/platforms/direct2d/direct2d.pro @@ -2,7 +2,8 @@ TARGET = qdirect2d QT += \ core-private gui-private \ - eventdispatcher_support-private + eventdispatcher_support-private \ + fontdatabase_support-private theme_support-private LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lVersion -lgdi32 diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp index 0ea2fcfa74..69d2e12778 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp @@ -45,8 +45,8 @@ #include "qwindowsdirect2dbitmap.h" #include "qwindowsdirect2ddevicecontext.h" -#include "qwindowsfontengine.h" -#include "qwindowsfontdatabase.h" +#include +#include #include "qwindowsintegration.h" #include diff --git a/src/plugins/platforms/windows/qwindowsbackingstore.cpp b/src/plugins/platforms/windows/qwindowsbackingstore.cpp index 3b7374dc92..49c7144221 100644 --- a/src/plugins/platforms/windows/qwindowsbackingstore.cpp +++ b/src/plugins/platforms/windows/qwindowsbackingstore.cpp @@ -39,11 +39,11 @@ #include "qwindowsbackingstore.h" #include "qwindowswindow.h" -#include "qwindowsnativeimage.h" #include "qwindowscontext.h" #include #include +#include #include #include diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index bc317c7f5d..1a03df6ac2 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -84,7 +84,6 @@ QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(lcQpaWindows, "qt.qpa.windows") Q_LOGGING_CATEGORY(lcQpaBackingStore, "qt.qpa.backingstore") Q_LOGGING_CATEGORY(lcQpaEvents, "qt.qpa.events") -Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") Q_LOGGING_CATEGORY(lcQpaGl, "qt.qpa.gl") Q_LOGGING_CATEGORY(lcQpaMime, "qt.qpa.mime") Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods") diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h index 843f7e2ad6..9dfde67797 100644 --- a/src/plugins/platforms/windows/qwindowscontext.h +++ b/src/plugins/platforms/windows/qwindowscontext.h @@ -59,7 +59,6 @@ QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQpaWindows) Q_DECLARE_LOGGING_CATEGORY(lcQpaBackingStore) Q_DECLARE_LOGGING_CATEGORY(lcQpaEvents) -Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) Q_DECLARE_LOGGING_CATEGORY(lcQpaGl) Q_DECLARE_LOGGING_CATEGORY(lcQpaMime) Q_DECLARE_LOGGING_CATEGORY(lcQpaInputMethods) diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 16a2b56774..004b03d9a9 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -47,9 +47,8 @@ #include "qwindowstheme.h" #include "qwindowsservices.h" #ifndef QT_NO_FREETYPE -# include "qwindowsfontdatabase_ft.h" +# include #endif -#include "qwindowsfontdatabase.h" #ifndef QT_NO_CLIPBOARD # include "qwindowsclipboard.h" # ifndef QT_NO_DRAGANDDROP @@ -220,6 +219,7 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mL // are connected to Windows 8.1 QtWindows::ProcessDpiAwareness dpiAwareness = QtWindows::ProcessPerMonitorDpiAware; m_options = parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness); + QWindowsFontDatabase::setFontOptions(m_options); if (tabletAbsoluteRange >= 0) m_context.setTabletAbsoluteRange(tabletAbsoluteRange); if (!dpiAwarenessSet) { // Set only once in case of repeated instantiations of QGuiApplication. diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h index 4258f908e7..a668470993 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.h +++ b/src/plugins/platforms/windows/qwindowsintegration.h @@ -43,6 +43,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -61,8 +62,9 @@ public: NoNativeDialogs = 0x8, XpNativeDialogs = 0x10, DontPassOsMouseEventsSynthesizedFromTouch = 0x20, // Do not pass OS-generated mouse events from touch. - DontUseDirectWriteFonts = 0x40, - DontUseColorFonts = 0x80 + // Keep in sync with QWindowsFontDatabase::FontOptions + DontUseDirectWriteFonts = QWindowsFontDatabase::DontUseDirectWriteFonts, + DontUseColorFonts = QWindowsFontDatabase::DontUseColorFonts }; explicit QWindowsIntegration(const QStringList ¶mList); diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index e0ae111b9a..eaa6e45b9f 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -41,7 +41,6 @@ #include "qwindowswindow.h" #include "qwindowscontext.h" #include "qwindowscursor.h" -#include "qwindowsfontdatabase.h" #include "qwindowsopenglcontext.h" #include "qwindowsopengltester.h" #include "qwindowsintegration.h" @@ -51,6 +50,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index fe67c0ce37..ed12c8124e 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -48,7 +48,6 @@ #include "qwindowscontext.h" #include "qwindowsintegration.h" #include "qt_windows.h" -#include "qwindowsfontdatabase.h" #include #include #ifndef Q_CC_MINGW @@ -69,6 +68,7 @@ #include #include #include +#include #include #include diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 0ebed59a1d..a9b061ad73 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -38,7 +38,6 @@ ****************************************************************************/ #include "qwindowswindow.h" -#include "qwindowsnativeimage.h" #include "qwindowscontext.h" #include "qwindowsdrag.h" #include "qwindowsscreen.h" diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri index 411c9e032b..d97e49309f 100644 --- a/src/plugins/platforms/windows/windows.pri +++ b/src/plugins/platforms/windows/windows.pri @@ -9,24 +9,12 @@ LIBS += -lshlwapi -lshell32 -ladvapi32 DEFINES *= QT_NO_CAST_FROM_ASCII -qtConfig(directwrite) { - qtConfig(directwrite2): \ - DEFINES *= QT_USE_DIRECTWRITE2 - - SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp - HEADERS += $$PWD/qwindowsfontenginedirectwrite.h -} else { - DEFINES *= QT_NO_DIRECTWRITE -} - SOURCES += \ $$PWD/qwindowswindow.cpp \ $$PWD/qwindowsintegration.cpp \ $$PWD/qwindowscontext.cpp \ $$PWD/qwindowsscreen.cpp \ $$PWD/qwindowskeymapper.cpp \ - $$PWD/qwindowsfontengine.cpp \ - $$PWD/qwindowsfontdatabase.cpp \ $$PWD/qwindowsmousehandler.cpp \ $$PWD/qwindowsole.cpp \ $$PWD/qwindowsmime.cpp \ @@ -36,7 +24,6 @@ SOURCES += \ $$PWD/qwindowstheme.cpp \ $$PWD/qwindowsdialoghelpers.cpp \ $$PWD/qwindowsservices.cpp \ - $$PWD/qwindowsnativeimage.cpp \ $$PWD/qwindowsnativeinterface.cpp \ $$PWD/qwindowsopengltester.cpp @@ -46,8 +33,6 @@ HEADERS += \ $$PWD/qwindowscontext.h \ $$PWD/qwindowsscreen.h \ $$PWD/qwindowskeymapper.h \ - $$PWD/qwindowsfontengine.h \ - $$PWD/qwindowsfontdatabase.h \ $$PWD/qwindowsmousehandler.h \ $$PWD/qtwindowsglobal.h \ $$PWD/qwindowsole.h \ @@ -58,7 +43,6 @@ HEADERS += \ $$PWD/qwindowstheme.h \ $$PWD/qwindowsdialoghelpers.h \ $$PWD/qwindowsservices.h \ - $$PWD/qwindowsnativeimage.h \ $$PWD/qwindowsnativeinterface.h \ $$PWD/qwindowsopengltester.h \ $$PWD/qwindowsthreadpoolrunner.h @@ -111,11 +95,6 @@ qtConfig(dynamicgl) { RESOURCES += $$PWD/openglblacklists.qrc -qtConfig(freetype) { - HEADERS += $$PWD/qwindowsfontdatabase_ft.h - SOURCES += $$PWD/qwindowsfontdatabase_ft.cpp -} - qtConfig(accessibility): include($$PWD/accessible/accessible.pri) DEFINES *= LIBEGL_NAME=$${LIBEGL_NAME} From 8d9c42e36217e14efa69974c2cdc8d90f465a959 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 27 Oct 2016 09:49:24 +0200 Subject: [PATCH 173/196] xcb: Avoid crash when requesting non-supported stereo formats Introduced in the 5.7 branch by 5f39a0ef8d037ed8d1fa19d5514308ed4a2ca161. Add also a warning in the GLX backend instead of just dereferencing the null pointer. Task-number: QTBUG-55291 Change-Id: I1f2930768b39a04ee443a68d0ac7dc9ecf26cb9c Reviewed-by: Louai Al-Khanji --- src/platformsupport/glxconvenience/qglxconvenience.cpp | 5 +++++ .../platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/platformsupport/glxconvenience/qglxconvenience.cpp b/src/platformsupport/glxconvenience/qglxconvenience.cpp index 7dc29fae6d..4225bebf37 100644 --- a/src/platformsupport/glxconvenience/qglxconvenience.cpp +++ b/src/platformsupport/glxconvenience/qglxconvenience.cpp @@ -386,5 +386,10 @@ bool qglx_reduceFormat(QSurfaceFormat *format) return true; } + if (format->stereo()) { + format->setStereo(false); + return true; + } + return false; } diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp index 8ae83b8084..a8d51d5e8c 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp @@ -59,6 +59,10 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual() if (!scr) return Q_NULLPTR; XVisualInfo *visualInfo = qglx_findVisualInfo(DISPLAY_FROM_XCB(scr), scr->screenNumber(), &m_format); + if (!visualInfo) { + qWarning() << "No XVisualInfo for format" << m_format; + return Q_NULLPTR; + } const xcb_visualtype_t *xcb_visualtype = scr->visualForId(visualInfo->visualid); XFree(visualInfo); return xcb_visualtype; From f577a01f5e8d9678d268917ca727a6e9a3e819a6 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 27 Oct 2016 12:29:26 +0200 Subject: [PATCH 174/196] eglfs: Cast to EGLNativeDisplayType in EGLDevice backend When compiling with EGL native types being the Xlib types (uncommon since we disable this both for Mesa and NVIDIA embedded, but can happen with other vendor's headers), the types for EGLDeviceEXT (void*) and EGLNativeDisplayType (Display, i.e. _XDisplay*) won't match, breaking compilation. At runtime we won't hit that path, so all we need to ensure is that the code compiles. Do this via a cast. When the native types are generic, both types are void* so the cast has no effect. Change-Id: Ib54f569d4494906f74107f08b47bd6b521d700db Reviewed-by: Louai Al-Khanji --- .../eglfs_kms_egldevice/qeglfskmsegldevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp index 743f714cf0..f6e86bf0bc 100644 --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp @@ -71,7 +71,7 @@ void QEglFSKmsEglDevice::close() EGLNativeDisplayType QEglFSKmsEglDevice::nativeDisplay() const { - return static_cast(m_integration)->eglDevice(); + return reinterpret_cast(static_cast(m_integration)->eglDevice()); } QEglFSKmsScreen *QEglFSKmsEglDevice::createScreen(QEglFSKmsIntegration *integration, QEglFSKmsDevice *device, QEglFSKmsOutput output, QPoint position) From f9280ba45ed6e492871cd25026a1bce7a17042dc Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Mon, 24 Oct 2016 13:49:41 -0700 Subject: [PATCH 175/196] QNSColorPanelDelegate: Don't restore stolen view on dealloc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We may not be playing nice with Cocoa's internals when we decide to reparent NSColorPanel's contents to add QColorDialog's own OK/Cancel buttons. In order to reduce issues, we should avoid poking at things during the application's shutdown sequence. Simply releasing the stolen view should be enough at that point. A similar pattern exists in QNSFontPanelDelegate. Change-Id: I678c236e0c57c4d08a1109a479d965f924288c54 Task-number: QTBUG-56448 Reviewed-by: Tor Arne Vestbø Reviewed-by: Timur Pocheptsov Reviewed-by: Erik Verbruggen --- src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm | 2 +- src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm index ed17ef8fe9..3c924bec94 100644 --- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm @@ -116,7 +116,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSColorPanelDelegate); - (void)dealloc { - [self restoreOriginalContentView]; + [mStolenContentView release]; [mColorPanel setDelegate:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; diff --git a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm index d1802fe4f9..5b27dc1da9 100644 --- a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm +++ b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm @@ -144,7 +144,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSFontPanelDelegate); - (void)dealloc { - [self restoreOriginalContentView]; + [mStolenContentView release]; [mFontPanel setDelegate:nil]; [[NSFontManager sharedFontManager] setDelegate:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; From d245db2f8350a949a83a75ff36f5d9d8ec75db9a Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Wed, 12 Oct 2016 18:29:40 +0300 Subject: [PATCH 176/196] QWidgetPrivate: remove unused declarations of methods ... such as beginSharedPainter() and endSharedPainter() Change-Id: I0e76dd172c2f3bce169f58e4c62bd47c73c99dcd Reviewed-by: Edward Welbourne Reviewed-by: Marc Mutz Reviewed-by: Thiago Macieira --- src/widgets/kernel/qwidget_p.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 37f2c0e5c7..dbc9d86172 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -395,9 +395,6 @@ public: const QRegion &rgn, const QPoint &offset, int flags, QPainter *sharedPainter, QWidgetBackingStore *backingStore); - - QPainter *beginSharedPainter(); - bool endSharedPainter(); #ifndef QT_NO_GRAPHICSVIEW static QGraphicsProxyWidget * nearestGraphicsProxyWidget(const QWidget *origin); #endif From bda6c2b018d31eaa53e67d0274d0d5863ae2f11c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 29 Sep 2016 18:52:07 +0200 Subject: [PATCH 177/196] remove monolithic platformsupport module all users have migrated to the modular libraries. Change-Id: Ifc470583c86a4f30af5335c21f2e3e4d19d39954 Reviewed-by: Lars Knoll --- src/platformsupport/legacy.cpp | 48 ------------------------- src/platformsupport/legacy.pro | 32 ----------------- src/platformsupport/platformsupport.pro | 5 --- sync.profile | 1 - 4 files changed, 86 deletions(-) delete mode 100644 src/platformsupport/legacy.cpp delete mode 100644 src/platformsupport/legacy.pro diff --git a/src/platformsupport/legacy.cpp b/src/platformsupport/legacy.cpp deleted file mode 100644 index 49def2ecca..0000000000 --- a/src/platformsupport/legacy.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -QT_BEGIN_NAMESPACE - -void dummy() -{ -} - -QT_END_NAMESPACE diff --git a/src/platformsupport/legacy.pro b/src/platformsupport/legacy.pro deleted file mode 100644 index 042f16301d..0000000000 --- a/src/platformsupport/legacy.pro +++ /dev/null @@ -1,32 +0,0 @@ -TARGET = QtPlatformSupport -MODULE = platformsupport - -QT_FOR_CONFIG += gui-private -CONFIG += static internal_module - -SOURCES += legacy.cpp - -mods = \ - accessibility \ - cgl \ - clipboard \ - devicediscovery \ - egl \ - eventdispatcher \ - fb \ - fontdatabase \ - glx \ - graphics \ - input \ - linuxaccessibility \ - platformcompositor \ - service \ - theme - -for (mod, mods) { - mod = $${mod}_support-private - qtHaveModule($$mod): \ - QT += $$mod -} - -load(qt_module) diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro index bb0b7b81a3..09e2922505 100644 --- a/src/platformsupport/platformsupport.pro +++ b/src/platformsupport/platformsupport.pro @@ -40,8 +40,3 @@ darwin { macos: \ SUBDIRS += cglconvenience } - -# This aggregates all of them. -legacy.file = legacy.pro -legacy.depends = $$SUBDIRS -SUBDIRS += legacy diff --git a/sync.profile b/sync.profile index aca82db53d..2f6c5399d4 100644 --- a/sync.profile +++ b/sync.profile @@ -25,7 +25,6 @@ "QtEglSupport" => "$basedir/src/platformsupport/eglconvenience", "QtFbSupport" => "$basedir/src/platformsupport/fbconvenience", "QtGlxSupport" => "$basedir/src/platformsupport/glxconvenience", - "QtPlatformSupport" => "$basedir/src/platformsupport", "QtPlatformHeaders" => "$basedir/src/platformheaders", "QtANGLE/KHR" => "!$basedir/src/3rdparty/angle/include/KHR", "QtANGLE/GLES2" => "!$basedir/src/3rdparty/angle/include/GLES2", From d10c4f08d46cfe457e0e802b4f654f7911155cb0 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Thu, 27 Oct 2016 01:36:01 -0700 Subject: [PATCH 178/196] Be more robust about ensuring that device and simulator are set These CONFIG entries are also needed during configure, and preemptively fixes build errors uncovered by an upcoming forward merge, due to code restructuring. Change-Id: I39ae5e0f24bbd43dd3c04225d42cce4edd199094 Reviewed-by: Oswald Buddenhagen --- mkspecs/features/uikit/default_pre.prf | 29 ++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/mkspecs/features/uikit/default_pre.prf b/mkspecs/features/uikit/default_pre.prf index b6974388ce..ecc3b9d3ab 100644 --- a/mkspecs/features/uikit/default_pre.prf +++ b/mkspecs/features/uikit/default_pre.prf @@ -1,20 +1,23 @@ +sim_and_dev = false +!isEmpty(QT_VERSION):qtConfig(simulator_and_device): \ + sim_and_dev = true -!isEmpty(QT_VERSION) { - qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \ - CONFIG += device $${device.sdk} - qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \ - CONFIG += simulator $${simulator.sdk} +$$sim_and_dev|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \ + CONFIG += device $${device.sdk} +$$sim_and_dev|contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \ + CONFIG += simulator $${simulator.sdk} - qtConfig(simulator_and_device) { - # For a simulator_and_device build all the config tests - # are based on the device's ARM SDK, but we know that the simulator - # is Intel and that we support SSE/SSE2. - QT_CPU_FEATURES.$$QT_ARCH += sse sse2 - CONFIG += sse sse2 - DEFINES += QT_COMPILER_SUPPORTS_SSE2 - } +$$sim_and_dev { + # For a simulator_and_device build all the config tests + # are based on the device's ARM SDK, but we know that the simulator + # is Intel and that we support SSE/SSE2. + QT_CPU_FEATURES.$$QT_ARCH += sse sse2 + CONFIG += sse sse2 + DEFINES += QT_COMPILER_SUPPORTS_SSE2 } +unset(sim_and_dev) + load(default_pre) # Check for supported Xcode versions From cc842ca4aa2d66cb19027ee6d144c6625a4ff0f0 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 28 Oct 2016 11:37:31 +0200 Subject: [PATCH 179/196] Enable the "use" option for library checks that come with a test The "use" option was so far only available for tests, to define that the test requires usage of a certain library. Extend this to libraries, so they can also define that running the test for the library requires usage of another lib. Change-Id: I2749c21e27c08ad6e12040590317c06c97f493db Reviewed-by: Oswald Buddenhagen --- mkspecs/features/qt_configure.prf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 7118a177fe..6b500c0f3e 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -602,6 +602,8 @@ defineTest(qtConfHandleLibrary) { defined($${lpfx}.result, var): return() qtConfEnsureTestTypeDeps("library") + qtConfTestPrepare_compile($$lpfx) + use_args = $$eval($${lpfx}.literal_args) qtConfLoadResult($${lpfx}, $$1) { $$eval($${lpfx}.result): \ @@ -636,7 +638,7 @@ defineTest(qtConfHandleLibrary) { # if the library defines a test, use it to verify the source. !isEmpty($${lpfx}.test) { - $${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) + $${lpfx}.literal_args = $$use_args $$qtConfLibraryArgs($$spfx) $${lpfx}.host = $$eval($${spfx}.host) !qtConfTest_compile($$lpfx) { qtLog(" => source failed verification.") From eb9681397609eee38703f0e0f005a234f95ad99f Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 25 Oct 2016 14:23:22 +0200 Subject: [PATCH 180/196] Document use of BSD code in Qt Core Change-Id: I31305e40dc57ddd37e5ef35a52cc99dc7ebb3bc5 Reviewed-by: Lars Knoll --- src/corelib/codecs/QBKCODEC_LICENSE.txt | 24 ++ src/corelib/codecs/QEUCJPCODEC_LICENSE.txt | 22 ++ src/corelib/codecs/QEUCKRCODEC_LICENSE.txt | 22 ++ src/corelib/codecs/QJISCODEC_LICENSE.txt | 22 ++ src/corelib/codecs/QSJISCODEC_LICENSE.txt | 22 ++ src/corelib/codecs/QTSCIICODEC_LICENSE.txt | 22 ++ src/corelib/codecs/codecs.qdoc | 249 +----------------- src/corelib/codecs/qt_attribution.json | 103 ++++++++ src/corelib/io/QTEMPORARYFILE_LICENSE.txt | 26 ++ src/corelib/io/qt_attribution.json | 13 + .../kernel/QEVENTDISPATCHER_CF_LICENSE.txt | 29 ++ src/corelib/kernel/qt_attribution.json | 13 + 12 files changed, 329 insertions(+), 238 deletions(-) create mode 100644 src/corelib/codecs/QBKCODEC_LICENSE.txt create mode 100644 src/corelib/codecs/QEUCJPCODEC_LICENSE.txt create mode 100644 src/corelib/codecs/QEUCKRCODEC_LICENSE.txt create mode 100644 src/corelib/codecs/QJISCODEC_LICENSE.txt create mode 100644 src/corelib/codecs/QSJISCODEC_LICENSE.txt create mode 100644 src/corelib/codecs/QTSCIICODEC_LICENSE.txt create mode 100644 src/corelib/codecs/qt_attribution.json create mode 100644 src/corelib/io/QTEMPORARYFILE_LICENSE.txt create mode 100644 src/corelib/io/qt_attribution.json create mode 100644 src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt create mode 100644 src/corelib/kernel/qt_attribution.json diff --git a/src/corelib/codecs/QBKCODEC_LICENSE.txt b/src/corelib/codecs/QBKCODEC_LICENSE.txt new file mode 100644 index 0000000000..1eb9e3b0d4 --- /dev/null +++ b/src/corelib/codecs/QBKCODEC_LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen. +Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su. +Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt b/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt new file mode 100644 index 0000000000..b1754cf198 --- /dev/null +++ b/src/corelib/codecs/QEUCJPCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999 Serika Kurusugawa, All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt b/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt new file mode 100644 index 0000000000..81327f1bcb --- /dev/null +++ b/src/corelib/codecs/QEUCKRCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QJISCODEC_LICENSE.txt b/src/corelib/codecs/QJISCODEC_LICENSE.txt new file mode 100644 index 0000000000..b1754cf198 --- /dev/null +++ b/src/corelib/codecs/QJISCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999 Serika Kurusugawa, All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QSJISCODEC_LICENSE.txt b/src/corelib/codecs/QSJISCODEC_LICENSE.txt new file mode 100644 index 0000000000..b1754cf198 --- /dev/null +++ b/src/corelib/codecs/QSJISCODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1999 Serika Kurusugawa, All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/QTSCIICODEC_LICENSE.txt b/src/corelib/codecs/QTSCIICODEC_LICENSE.txt new file mode 100644 index 0000000000..c66ff21389 --- /dev/null +++ b/src/corelib/codecs/QTSCIICODEC_LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 2000 Hans Petter Bieker. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/codecs/codecs.qdoc b/src/corelib/codecs/codecs.qdoc index e0f1c9b060..9364b7a989 100644 --- a/src/corelib/codecs/codecs.qdoc +++ b/src/corelib/codecs/codecs.qdoc @@ -55,35 +55,7 @@ \ \ to adapt the code for Qt. - \legalese - Copyright (C) 2000 Ming-Che Chuang - Copyright (C) 2002 James Su, Turbolinux Inc. - Copyright (C) 2002 Anthony Fok, ThizLinux Laboratory Ltd. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codecs: Big5, Big5-HKSCS} */ /*! @@ -124,36 +96,7 @@ Li18nux Big5 Standard Subgroup. See \l{http://www.autrijus.org/xml/} for the various Big5 CharMapML tables. - \legalese - Copyright (C) 2000 Ming-Che Chuang - Copyright (C) 2001, 2002 James Su, Turbolinux Inc. - Copyright (C) 2002 WU Yi, HancomLinux Inc. - Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codecs: Big5, Big5-HKSCS} */ /*! @@ -171,37 +114,9 @@ Most of the code here was written by Serika Kurusugawa, a.k.a. Junji Takagi, and is included in Qt with the author's - permission and the grateful thanks of the Qt team. Here is - the copyright statement for that code: + permission and the grateful thanks of the Qt team. - \legalese - - Copyright (C) 1999 Serika Kurusugawa. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS". - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: EUC-JP} */ /*! @@ -217,34 +132,7 @@ contribution. The subsequent modifications are covered by the usual copyright for Qt. - \legalese - - Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: EUC-KR} */ /*! @@ -292,37 +180,7 @@ A copy of the source Perl script is available at \l{http://people.debian.org/~foka/gb18030/gen-qgb18030codec.pl} - The copyright notice for their code follows: - - \legalese - Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen. - Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su. - Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: GBK} */ /*! @@ -381,37 +239,9 @@ Most of the code here was written by Serika Kurusugawa, a.k.a. Junji Takagi, and is included in Qt with the author's - permission and the grateful thanks of the Qt team. Here is - the copyright statement for that code: + permission and the grateful thanks of the Qt team. - \legalese - - Copyright (C) 1999 Serika Kurusugawa. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS". - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: ISO 2022-JP (JIS)} */ /*! @@ -433,34 +263,7 @@ contribution. The subsequent modifications are covered by the usual copyright for Qt. - \legalese - - Copyright (C) 1999 Serika Kurusugawa. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS". - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: Shift-JIS} */ /*! @@ -483,37 +286,7 @@ Most of the code was written by Hans Petter Bieker and is included in Qt with the author's permission and the grateful - thanks of the Qt team. Here is the copyright statement for - the code as it was at the point of contribution. The - subsequent modifications are covered by the usual copyright for - Qt: + thanks of the Qt team. - \legalese - - Copyright (c) 2000 Hans Petter Bieker. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - \list 1 - \li Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - \li Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - \endlist - - THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. - \endlegalese + \sa{Text Codec: TSCII} */ diff --git a/src/corelib/codecs/qt_attribution.json b/src/corelib/codecs/qt_attribution.json new file mode 100644 index 0000000000..41f644a030 --- /dev/null +++ b/src/corelib/codecs/qt_attribution.json @@ -0,0 +1,103 @@ +[ + { + "Id": "qbig5codecs", + "Name": "Text Codecs: Big5, Big5-HKSCS", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qbig5codec.cpp", + + "Description": "The Big5 codecs (QBig5Codec, QBig5hkscsCodec) +provide conversion to and from the Big5 encodings.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QBIG5CODEC_LICENSE.txt", + "Copyright": "Copyright (C) 2000 Ming-Che Chuang +Copyright (C) 2001, 2002 James Su, Turbolinux Inc. +Copyright (C) 2002 WU Yi, HancomLinux Inc. +Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd." +}, + { + "Id": "qeucjpcodec", + "Name": "Text Codec: EUC-JP", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qeucjpcodec.cpp", + + "Description": "The EUC-JP text codec provides conversion to and from EUC-JP, +the main legacy encoding for Unix machines in Japan.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QEUCJPCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999 Serika Kurusugawa." + }, + { + "Id": "qeuckrcodec", + "Name": "Text Codec: EUC-KR", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qeuckrcodec.cpp", + + "Description": "The EUC-KR text codec provides conversion to and from EUC-KR, KR, +the main legacy encoding for Unix machines in Korea.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QEUCKRCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999-2000 Mizi Research Inc." + }, + { + "Id": "qjiscodec", + "Name": "Text Codec: ISO 2022-JP (JIS)", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qjiscodec.cpp", + + "Description": "The ISO 2022-JP (JIS) text codec provides conversion to and from ISO 2022-JP.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QJISCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999 Serika Kurusugawa." + }, + { + "Id": "qsjiscodec", + "Name": "Text Codec: Shift-JIS", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qsjiscodec.cpp", + + "Description": "The Shift-JIS text codec provides conversion to and from Shift-JIS.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QSJISCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 1999 Serika Kurusugawa." + }, + { + "Id": "qtsciicodec", + "Name": "Text Codec: TSCII", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core.", + "Path": "qtsciicodec.cpp", + + "Description": "The TSCII text codec provides conversion to and from the Tamil TSCII +encoding.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QTSCIICODEC_LICENSE.txt", + "Copyright": "Copyright (C) 2000 Hans Petter Bieker." + }, + { + "Id": "qbkcodec", + "Name": "Text Codec: GBK", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core if ICU is not used. Configure with -icu to avoid.", + "Path": "qgb18030codec.cpp", + + "Description": "The GBK codec provides conversion to and from the Chinese +GB18030/GBK/GB2312 encoding.", + "License": "BSD 2-clause \"Simplified\" License", + "LicenseId": "BSD-2-Clause", + "LicenseFile": "QBKCODEC_LICENSE.txt", + "Copyright": "Copyright (C) 2000 TurboLinux, Inc. Written by Justin Yu and Sean Chen. +Copyright (C) 2001, 2002 Turbolinux, Inc. Written by James Su. +Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd. Written by Anthony Fok." + } +] diff --git a/src/corelib/io/QTEMPORARYFILE_LICENSE.txt b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt new file mode 100644 index 0000000000..f5f1a2e05e --- /dev/null +++ b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 1987, 1993 + The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json new file mode 100644 index 0000000000..2a616a2819 --- /dev/null +++ b/src/corelib/io/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "qtemporaryfile", + "Name": "Parts of QTemporaryFile", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core. Disable the qtemporaryfile feature to avoid.", + "Path": "qtemporaryfile.cpp", + + "Description": "Generates a unique file path and returns a native handle to the open file.", + "License": "BSD 3-clause \"New\" or \"Revised\" License", + "LicenseId": "BSD-3-Clause", + "LicenseFile": "QTEMPORARYFILE_LICENSE.txt", + "Copyright": "Copyright (c) 1987, 1993 The Regents of the University of California." +} diff --git a/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt b/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt new file mode 100644 index 0000000000..8c08f48528 --- /dev/null +++ b/src/corelib/kernel/QEVENTDISPATCHER_CF_LICENSE.txt @@ -0,0 +1,29 @@ +Copyright (c) 2007-2008, Apple, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Apple, Inc. nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/corelib/kernel/qt_attribution.json b/src/corelib/kernel/qt_attribution.json new file mode 100644 index 0000000000..37764a5330 --- /dev/null +++ b/src/corelib/kernel/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "qeventdispatcher_cf", + "Name": "QEventDispatcher on macOS", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core on macOS.", + "Path": "qeventdispatcher_cf_p.h", + + "Description": "Implementation of QAbstractEventDispatcher for macOS.", + "License": "BSD 3-clause \"New\" or \"Revised\" License", + "LicenseId": "BSD-3-Clause", + "LicenseFile": "QEVENTDISPATCHER_CF_LICENSE.txt", + "Copyright": "Copyright (c) 2007-2008, Apple, Inc." +} From e46cf80f8a9b3ef9b5ab46f25f947d8cf88415de Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 25 Oct 2016 16:23:55 +0200 Subject: [PATCH 181/196] Remove legalese text from QLocale MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mentioned functions are now documented in src/3rdparty/freebsd. Anyhow, the license and copyright differs ... Change-Id: Ib59ace624d1d8244f591668ed05993787ca65d24 Reviewed-by: Topi Reiniö --- src/corelib/tools/qlocale.qdoc | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/corelib/tools/qlocale.qdoc b/src/corelib/tools/qlocale.qdoc index f4b49095df..8c5711fb5e 100644 --- a/src/corelib/tools/qlocale.qdoc +++ b/src/corelib/tools/qlocale.qdoc @@ -94,26 +94,6 @@ QLocale's data is based on Common Locale Data Repository v29. - The double-to-string and string-to-double conversion functions are - covered by the following licenses: - - \legalese - Copyright (c) 1991 by AT&T. - - Permission to use, copy, modify, and distribute this software for any - purpose without fee is hereby granted, provided that this entire notice - is included in all copies of any software which is or includes a copy - or modification of this software and in all copies of the supporting - documentation for such software. - - THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED - WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY - REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY - OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - - This product includes software developed by the University of - California, Berkeley and its contributors. - \sa QString::arg(), QString::toInt(), QString::toDouble(), QInputMethod::locale() */ From e5451f086bb9551527a4f0da06525eef860a53a9 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 27 Oct 2016 12:46:58 +0200 Subject: [PATCH 182/196] Document license for CLDR data in Qt Core Change-Id: I21bf76a5603f3384fccad46a16b7304380a7a444 Reviewed-by: Lars Knoll --- src/corelib/tools/CLDR_LICENSE.txt | 31 +++++++++++++++++++++++++++ src/corelib/tools/qt_attribution.json | 13 +++++++++++ src/corelib/tools/qtimezone.cpp | 24 ++------------------- 3 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 src/corelib/tools/CLDR_LICENSE.txt create mode 100644 src/corelib/tools/qt_attribution.json diff --git a/src/corelib/tools/CLDR_LICENSE.txt b/src/corelib/tools/CLDR_LICENSE.txt new file mode 100644 index 0000000000..ad28161436 --- /dev/null +++ b/src/corelib/tools/CLDR_LICENSE.txt @@ -0,0 +1,31 @@ +Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. diff --git a/src/corelib/tools/qt_attribution.json b/src/corelib/tools/qt_attribution.json new file mode 100644 index 0000000000..eec2cd6795 --- /dev/null +++ b/src/corelib/tools/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "cldr-data", + "Name": "Unicode CLDR (Unicode Common Locale Data Repository)", + "QDocModule": "qtcore", + "QtUsage": "Used in Qt Core (QTimeZone). Disable the timezone feature to avoid.", + "Files": "qlocale_data_p.h", + + "Description": "QTimeZone includes data obtained from the CLDR data files.", + "License": "Unicode Data Files and Software License", + "LicenseId": "Unicode-TOU", + "LicenseFile": "CLDR_LICENSE.txt", + "Copyright": "Copyright (C) 1991-2016 Unicode, Inc." +} diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp index 63a21ec75c..e423d9af0c 100644 --- a/src/corelib/tools/qtimezone.cpp +++ b/src/corelib/tools/qtimezone.cpp @@ -218,28 +218,8 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz); \section2 License This class includes data obtained from the CLDR data files under the terms - of the Unicode license. - - \legalese - COPYRIGHT AND PERMISSION NOTICE - - Copyright © 1991-2012 Unicode, Inc. All rights reserved. Distributed under - the Terms of Use in http://www.unicode.org/copyright.html. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of the Unicode data files and any associated documentation (the "Data - Files") or Unicode software and any associated documentation (the "Software") - to deal in the Data Files or Software without restriction, including without - limitation the rights to use, copy, modify, merge, publish, distribute, and/or - sell copies of the Data Files or Software, and to permit persons to whom the - Data Files or Software are furnished to do so, provided that (a) the above - copyright notice(s) and this permission notice appear with all copies of the - Data Files or Software, (b) both the above copyright notice(s) and this - permission notice appear in associated documentation, and (c) there is clear - notice in each modified Data File or in the Software as well as in the - documentation associated with the Data File(s) or Software that the data or - software has been modified. - \endlegalese + of the Unicode Data Files and Software License. See + \l{Unicode CLDR (Unicode Common Locale Data Repository)} for the details. \sa QDateTime */ From 431bc3321f85a23ae41944a53df3934ce4c3a381 Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Mon, 24 Oct 2016 11:12:03 +0200 Subject: [PATCH 183/196] Doc: CSS: Add styling for content generated with \legalese command Even though the \legalese command is no longer used in Qt 5 documentation as it doesn't support collating legalese texts across modules, it may still be useful for stand-alone doc projects. Add CSS rules so the \legalese text is styled similarly to code blocks, to make it stand out from the rest of the content. Change-Id: I533d8e2375ea2f8054c0671ff34dfa6f0dfe01d1 Reviewed-by: Leena Miettinen Reviewed-by: Venugopal Shivashankar --- doc/global/template/style/offline-simple.css | 2 +- doc/global/template/style/offline.css | 8 ++++++-- doc/global/template/style/online.css | 6 +++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/doc/global/template/style/offline-simple.css b/doc/global/template/style/offline-simple.css index 84d206b2d0..a805b924a3 100644 --- a/doc/global/template/style/offline-simple.css +++ b/doc/global/template/style/offline-simple.css @@ -1,4 +1,4 @@ -pre { +pre, .LegaleseLeft { background-color: #f0f0f0; font-family: Courier, monospace; font-weight: 600; diff --git a/doc/global/template/style/offline.css b/doc/global/template/style/offline.css index 612c1087d5..b943dbb7ac 100644 --- a/doc/global/template/style/offline.css +++ b/doc/global/template/style/offline.css @@ -424,7 +424,7 @@ table styles /* table with border alternative colours*/ -table, pre { +table, pre, .LegaleseLeft { -moz-border-radius: 7px 7px 7px 7px; -webkit-border-radius: 7px 7px 7px 7px; border-radius: 7px 7px 7px 7px; @@ -481,6 +481,10 @@ table, pre { margin: 0px } +.LegaleseLeft { + font-family: monospace; + white-space: pre-wrap; +} /* table bodless & white*/ .borderless { @@ -543,7 +547,7 @@ ol.a > li{ text-align: left } -.cpp { +.cpp, .LegaleseLeft { display: block; margin: 10px; overflow: auto; diff --git a/doc/global/template/style/online.css b/doc/global/template/style/online.css index be278a27da..c0caa84027 100644 --- a/doc/global/template/style/online.css +++ b/doc/global/template/style/online.css @@ -1364,7 +1364,7 @@ div.qt_commercial { border-top:5px solid #5caa15; margin-bottom:50px } -pre { +pre, .LegaleseLeft { background-color:#404244; color:#fff; display:block; @@ -1375,6 +1375,10 @@ pre { padding:25px; margin-top:0.75em } +.mainContent .LegaleseLeft p { + color:#fff; + white-space: pre-wrap +} .copy_text { background-color:#46a2da; color:#fff; From dbf35d75714fac1e836e697650e32365a2a3493e Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Thu, 7 Apr 2016 11:05:04 +0200 Subject: [PATCH 184/196] Doc: Fix a typo in QtConcurrent example snippet And use different wording to describe QtConcurrent::filtered(), as it doesn't modify the sequence it operates on. Change-Id: I768c0d121e027c5de36ba7bd548c2d4c2a7f1bd9 Reviewed-by: Martin Smith --- .../doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp index 86ca09a421..77233bdbf7 100644 --- a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp +++ b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp @@ -103,9 +103,9 @@ QSet dictionary = QtConcurrent::blockingFilteredReduced(strings, allLow //! [7] // keep only images with an alpha channel QList images = ...; -QFuture alphaImages = QtConcurrent::filter(strings, &QImage::hasAlphaChannel); +QFuture alphaImages = QtConcurrent::filter(images, &QImage::hasAlphaChannel); -// keep only gray scale images +// retrieve gray scale images QList images = ...; QFuture grayscaleImages = QtConcurrent::filtered(images, &QImage::isGrayscale); From 4c00246fea63c348a2992f5a54499f2928bf0605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Somers?= Date: Tue, 25 Oct 2016 16:27:58 +0200 Subject: [PATCH 185/196] Fixed crash taking null central widget When no central widget has been set, calling takeCentralWidget should just return a null pointer instead of crashing. [ChangeLog][QtWidgets][QMainWindow] Fixed crash using takeCentralWidget when the central widget was not set. Task-number: QTBUG-56628 Change-Id: I240ccf4caa41d2716a78851571fbfbf444a4922e Reviewed-by: Giuseppe D'Angelo --- src/widgets/widgets/qmainwindow.cpp | 6 ++++-- tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 50ba7f97ec..e454e3e991 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -664,8 +664,10 @@ QWidget *QMainWindow::takeCentralWidget() { Q_D(QMainWindow); QWidget *oldcentralwidget = d->layout->centralWidget(); - oldcentralwidget->setParent(0); - d->layout->setCentralWidget(0); + if (oldcentralwidget) { + oldcentralwidget->setParent(0); + d->layout->setCentralWidget(0); + } return oldcentralwidget; } diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp index 6282028746..ece011d145 100644 --- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp +++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp @@ -864,6 +864,10 @@ void tst_QMainWindow::takeCentralWidget() { QVERIFY(!mw.centralWidget()); + // verify that we don't crash when trying to take a non-set + // central widget but just return a null pointer instead + QVERIFY(!mw.takeCentralWidget()); + mw.setCentralWidget(w1); QWidget *oldCentralWidget = mw.takeCentralWidget(); From 8cd812455932f896b45aae84c4dc571f60f60b25 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 28 Oct 2016 14:11:21 +0200 Subject: [PATCH 186/196] Windows QPA: Do not use QSettings to access the registry When commenting out the warning in createOrOpenKey() (src\corelib\io\qsettings_win.cpp:157), applications produce warnings: QSettings: Failed to create subkey "Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes": Access is denied. indicating that an attempt to open the registry in read/write mode fails. Add a utility function to read out registry strings in read-only mode to the font database and use that instead. Change-Id: I4187344cac7ec2ba27f15b51e237575efc171853 Reviewed-by: Joerg Bornemann --- .../windows/qwindowsfontdatabase.cpp | 22 +++++++++++++++++ .../windows/qwindowsfontdatabase_p.h | 2 ++ .../windows/qwindowsfontenginedirectwrite.cpp | 9 +++---- .../accessible/qwindowsaccessibility.cpp | 24 +++++++++---------- .../accessible/qwindowsmsaaaccessible.cpp | 1 - 5 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp index ad653ab95d..434aa16d16 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp @@ -1981,4 +1981,26 @@ int QWindowsFontDatabase::defaultVerticalDPI() return vDPI; } +QString QWindowsFontDatabase::readRegistryString(HKEY parentHandle, const wchar_t *keyPath, const wchar_t *keyName) +{ + QString result; + HKEY handle = 0; + if (RegOpenKeyEx(parentHandle, keyPath, 0, KEY_READ, &handle) == ERROR_SUCCESS) { + // get the size and type of the value + DWORD dataType; + DWORD dataSize; + if (RegQueryValueEx(handle, keyName, 0, &dataType, 0, &dataSize) == ERROR_SUCCESS) { + if (dataType == REG_SZ || dataType == REG_EXPAND_SZ) { + dataSize += 2; // '\0' missing? + QVarLengthArray data(dataSize); + data[dataSize - 2] = data[dataSize - 1] = '\0'; + if (RegQueryValueEx(handle, keyName, 0, 0, data.data(), &dataSize) == ERROR_SUCCESS) + result = QString::fromWCharArray(reinterpret_cast(data.data())); + } + } + RegCloseKey(handle); + } + return result; +} + QT_END_NAMESPACE diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h index d240f77a66..b7ebfc033f 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h @@ -130,6 +130,8 @@ public: static void setFontOptions(unsigned options); static unsigned fontOptions(); + static QString readRegistryString(HKEY parentHandle, const wchar_t *keyPath, const wchar_t *keyName); + private: void populateFamily(const QString &familyName, bool registerAlias); void removeApplicationFonts(); diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp index a1d8c2b9e8..f266e85126 100644 --- a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp +++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp @@ -42,7 +42,6 @@ #include "qwindowsfontenginedirectwrite_p.h" #include "qwindowsfontdatabase_p.h" -#include #include #include #include @@ -915,9 +914,11 @@ void QWindowsFontEngineDirectWrite::initFontInfo(const QFontDef &request, QString QWindowsFontEngineDirectWrite::fontNameSubstitute(const QString &familyName) { - static const char keyC[] = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\" - "FontSubstitutes"; - return QSettings(QLatin1String(keyC), QSettings::NativeFormat).value(familyName, familyName).toString(); + const wchar_t key[] = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes"; + const QString substitute = + QWindowsFontDatabase::readRegistryString(HKEY_LOCAL_MACHINE, key, + reinterpret_cast(familyName.utf16())); + return substitute.isEmpty() ? familyName : substitute; } glyph_metrics_t QWindowsFontEngineDirectWrite::alphaMapBoundingBox(glyph_t glyph, diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp index 7cf24421f8..aed9c94003 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp @@ -47,13 +47,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include // registry helper #include "qwindowsaccessibility.h" #ifdef Q_CC_MINGW @@ -114,6 +114,14 @@ static inline QString messageBoxAlertSound(const QObject *messageBox) return QString(); } +static QString soundFileName(const QString &soundName) +{ + const QString key = QStringLiteral("AppEvents\\Schemes\\Apps\\.Default\\") + + soundName + QStringLiteral("\\.Current"); + return QWindowsFontDatabase::readRegistryString(HKEY_CURRENT_USER, + reinterpret_cast(key.utf16()), L""); +} + void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) { QString soundName; @@ -134,17 +142,9 @@ void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event) break; } - if (!soundName.isEmpty()) { -#ifndef QT_NO_SETTINGS - QSettings settings(QLatin1String("HKEY_CURRENT_USER\\AppEvents\\Schemes\\Apps\\.Default\\") + soundName, - QSettings::NativeFormat); - QString file = settings.value(QLatin1String(".Current/.")).toString(); -#else - QString file; -#endif - if (!file.isEmpty()) { - PlaySound(reinterpret_cast(soundName.utf16()), 0, SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT); - } + if (!soundName.isEmpty() && !soundFileName(soundName).isEmpty()) { + PlaySound(reinterpret_cast(soundName.utf16()), 0, + SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT); } // An event has to be associated with a window, diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp index ff115a2249..9803dedb1e 100644 --- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp +++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp @@ -50,7 +50,6 @@ #include #include #include -#include #include #include #include From 4039568837919fa3e172a71950b235fcf1ddedc7 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 27 Oct 2016 09:17:54 +0200 Subject: [PATCH 187/196] Direct2d: Add missing dependency to platformsupport's accessibility Change-Id: I620370bb5f4bbac11c1e5740c706e0cb64d9d407 Reviewed-by: Joerg Bornemann --- src/plugins/platforms/direct2d/direct2d.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/direct2d/direct2d.pro b/src/plugins/platforms/direct2d/direct2d.pro index c30703720c..224f122fc4 100644 --- a/src/plugins/platforms/direct2d/direct2d.pro +++ b/src/plugins/platforms/direct2d/direct2d.pro @@ -2,7 +2,7 @@ TARGET = qdirect2d QT += \ core-private gui-private \ - eventdispatcher_support-private \ + eventdispatcher_support-private accessibility_support-private \ fontdatabase_support-private theme_support-private LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lVersion -lgdi32 From d16d56a05ee9219ba6b7985b56a7bd69fb248875 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 28 Oct 2016 15:38:59 +0200 Subject: [PATCH 188/196] MSVC: Fix installation of PDB files for static libraries Commit 3d3d65f5 separated the PDB files for compiling and linking. Only the PDB file the linker produces would be installed. However, this does not work for static libraries as the LIB tool does not create a PDB file from the compiler's PDB file. This patch turns the separation between PDB files off for static libraries. Task-number: QTBUG-56594 Change-Id: I08dcb7889c67b2f6370efa1ee19be8558355bbc9 Reviewed-by: Oswald Buddenhagen --- qmake/generators/win32/msvc_nmake.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp index ae139c23be..41bec4c36d 100644 --- a/qmake/generators/win32/msvc_nmake.cpp +++ b/qmake/generators/win32/msvc_nmake.cpp @@ -409,14 +409,21 @@ void NmakeMakefileGenerator::init() project->values("QMAKE_DISTCLEAN").append(tgt + ".lib"); } if (project->isActiveConfig("debug_info")) { - // Add the compiler's PDB file. - QString pdbfile = var("OBJECTS_DIR") + project->first("TARGET") + ".vc.pdb"; + QString pdbfile; + QString distPdbFile = tgt + ".pdb"; + if (project->isActiveConfig("staticlib")) { + // For static libraries, the compiler's pdb file and the dist pdb file are the same. + pdbfile = distPdbFile; + } else { + // Use $${TARGET}.vc.pdb in the OBJECTS_DIR for the compiler and + // $${TARGET}.pdb (the default) for the linker. + pdbfile = var("OBJECTS_DIR") + project->first("TARGET") + ".vc.pdb"; + } QString escapedPdbFile = escapeFilePath(pdbfile); project->values("QMAKE_CFLAGS").append("/Fd" + escapedPdbFile); project->values("QMAKE_CXXFLAGS").append("/Fd" + escapedPdbFile); project->values("QMAKE_CLEAN").append(pdbfile); - // Add the linker's PDB file to the distclean target. - project->values("QMAKE_DISTCLEAN").append(tgt + ".pdb"); + project->values("QMAKE_DISTCLEAN").append(distPdbFile); } if (project->isActiveConfig("debug")) { project->values("QMAKE_CLEAN").append(tgt + ".ilk"); From f2f39946d2911fe1157d3f71094cc7acf06e2f46 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 28 Oct 2016 11:57:38 +0200 Subject: [PATCH 189/196] Fix a mis-merge in af0d0b9 "-framework AudioToolbox" was lost. Task-number: QTBUG-56784 Change-Id: Ibd536c53e7e1456077559c021a70407339f33971 Reviewed-by: Richard Moe Gustavsen --- src/plugins/platforms/ios/kernel.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/ios/kernel.pro b/src/plugins/platforms/ios/kernel.pro index d8235ee011..955f8d9642 100644 --- a/src/plugins/platforms/ios/kernel.pro +++ b/src/plugins/platforms/ios/kernel.pro @@ -1,7 +1,7 @@ TARGET = qios QT += core-private gui-private platformsupport-private -LIBS += -framework Foundation -framework UIKit -framework QuartzCore +LIBS += -framework Foundation -framework UIKit -framework QuartzCore -framework AudioToolbox OBJECTIVE_SOURCES = \ plugin.mm \ From 56734cdf3383837f1fd59f2a0e8b0f39fcce71f3 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 30 Sep 2016 11:53:07 +0200 Subject: [PATCH 190/196] QFileSystemModel: improve readability of the renaming code Instead of calling QHash::value(), inserting the return value into the hash with a different name and only many lines later removing the old node, do the extraction into a QScopedPointer, and the insertion into the hash from the QScopedPoiner, keeping the node update in between the two. Avoids the double-lookup of 'oldName', makes it clearer what's going on, and limits the potential for some return between the insertion under the new name and the removal under the old one sneaking in, which would cause a double-delete later in the dtor. Change-Id: Ia2d1cca77c04708421ccb5e594729ec83de85345 Reviewed-by: Edward Welbourne --- src/widgets/dialogs/qfilesystemmodel.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 6e1bee94c4..db1ce3fe0e 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -904,16 +904,14 @@ bool QFileSystemModel::setData(const QModelIndex &idx, const QVariant &value, in int visibleLocation = parentNode->visibleLocation(parentNode->children.value(indexNode->fileName)->fileName); parentNode->visibleChildren.removeAt(visibleLocation); - QFileSystemModelPrivate::QFileSystemNode * oldValue = parentNode->children.value(oldName); - parentNode->children[newName] = oldValue; - oldValue->fileName = newName; - oldValue->parent = parentNode; + QScopedPointer nodeToRename(parentNode->children.take(oldName)); + nodeToRename->fileName = newName; + nodeToRename->parent = parentNode; #ifndef QT_NO_FILESYSTEMWATCHER - oldValue->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName))); + nodeToRename->populate(d->fileInfoGatherer.getInfo(QFileInfo(parentPath, newName))); #endif - oldValue->isVisible = true; - - parentNode->children.remove(oldName); + nodeToRename->isVisible = true; + parentNode->children[newName] = nodeToRename.take(); parentNode->visibleChildren.insert(visibleLocation, newName); d->delayedSort(); From 5545e5aa6e265469d278e1fb576a737535784422 Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Mon, 17 Oct 2016 16:14:40 +0200 Subject: [PATCH 191/196] Doc: Template: Add CSS rules for bordered images 9f45d2ab added a documentation macro for bordered images - Add the corresponding CSS rules to apply a drop shadow for such images. Change-Id: I18c4fbd7498db7b9391f33e568219e67b329e618 Reviewed-by: Venugopal Shivashankar --- doc/global/template/style/offline.css | 6 +++++- doc/global/template/style/online.css | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/global/template/style/offline.css b/doc/global/template/style/offline.css index 612c1087d5..6621b6bbcb 100644 --- a/doc/global/template/style/offline.css +++ b/doc/global/template/style/offline.css @@ -18,8 +18,12 @@ img { height: auto; } -.content { +.content .border img { + box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5) +} +.content .border .player { + box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5) } .content .indexboxcont li { diff --git a/doc/global/template/style/online.css b/doc/global/template/style/online.css index be278a27da..080b45749d 100644 --- a/doc/global/template/style/online.css +++ b/doc/global/template/style/online.css @@ -1280,6 +1280,12 @@ li a.active { margin-top:0.75em; max-width:100% } +.context .border img { + box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5) + } +.context .border .player { + box-shadow:3px 3px 8px 3px rgba(200,200,200,0.5) + } .context table { vertical-align:initial } From 401172a1986f834cf2010c3af988b3234c47abe2 Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Thu, 6 Oct 2016 11:52:36 +0200 Subject: [PATCH 192/196] Doc: Fix typos: handing > handling Change-Id: Iecc64cba620ec639d06684e30264171052f21e10 Reviewed-by: Nico Vertriest --- examples/widgets/doc/src/calculator.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/widgets/doc/src/calculator.qdoc b/examples/widgets/doc/src/calculator.qdoc index 8d00bc7512..ea5051ce0a 100644 --- a/examples/widgets/doc/src/calculator.qdoc +++ b/examples/widgets/doc/src/calculator.qdoc @@ -261,7 +261,7 @@ \snippet widgets/calculator/calculator.cpp 20 - Like in \c additiveOperatorClicked(), we start by handing any + Like in \c additiveOperatorClicked(), we start by handling any pending multiplicative and additive operators. Then we display \c sumSoFar and reset the variable to zero. Resetting the variable to zero is necessary to avoid counting the value twice. From f9ec707e4960bf7d5298ee2ba8f22d7506ef54a7 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 18 Oct 2016 10:56:11 -0700 Subject: [PATCH 193/196] windows: Disable OpenGL proper on Intel 945 Change-Id: I77fbf5bafcd6b0fe5040513ef6b0d049600f9b33 Task-number: QTBUG-40991 Reviewed-by: Friedemann Kleint --- .../platforms/windows/openglblacklists/default.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/plugins/platforms/windows/openglblacklists/default.json b/src/plugins/platforms/windows/openglblacklists/default.json index 1e00da52eb..dd99e674ec 100644 --- a/src/plugins/platforms/windows/openglblacklists/default.json +++ b/src/plugins/platforms/windows/openglblacklists/default.json @@ -102,6 +102,18 @@ "features": [ "disable_desktopgl", "disable_d3d11", "disable_d3d9" ] + }, + { + "id": 9, + "description": "Intel 945 crash (QTBUG-40991)", + "vendor_id": "0x8086", + "device_id": [ "0x27A2" ], + "os": { + "type": "win" + }, + "features": [ + "disable_desktopgl" + ] } ] } From ca5d4137aa352d61d796c82b06e2d8f19a07cf10 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 27 Oct 2016 12:37:02 +0200 Subject: [PATCH 194/196] minimalegl: Reorder includes to avoid EGL native type clashes Some of the qminimaleglscreen.h includes are not even necessary. With the inclusion of egl.h (or qt_egl_p.h in 5.7 and up) isolated to this header, all we need to ensure is that the sources that include it place the include at a suitable place. This is not the only possible solution, there are alternatives (each with its own caveat), but this is likely the least intrusive. Task-number: QTBUG-56559 Change-Id: I17db031c8e401d9895a417ba3568ad1e4ba30f72 Reviewed-by: Louai Al-Khanji --- src/plugins/platforms/minimalegl/qminimaleglintegration.cpp | 3 ++- src/plugins/platforms/minimalegl/qminimaleglintegration.h | 2 -- src/plugins/platforms/minimalegl/qminimaleglwindow.h | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp index 1bcb22618e..5328a8b353 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp +++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp @@ -52,7 +52,8 @@ #include #include -#include +// this is where EGL headers are pulled in, make sure it is last +#include "qminimaleglscreen.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.h b/src/plugins/platforms/minimalegl/qminimaleglintegration.h index 7a2c23ced4..8ceeb7b193 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglintegration.h +++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.h @@ -34,8 +34,6 @@ #ifndef QMINIMALEGLINTEGRATION_H #define QMINIMALEGLINTEGRATION_H -#include "qminimaleglscreen.h" - #include #include diff --git a/src/plugins/platforms/minimalegl/qminimaleglwindow.h b/src/plugins/platforms/minimalegl/qminimaleglwindow.h index ba7f999602..4edeaf4da9 100644 --- a/src/plugins/platforms/minimalegl/qminimaleglwindow.h +++ b/src/plugins/platforms/minimalegl/qminimaleglwindow.h @@ -35,7 +35,6 @@ #define QMINIMALEGLWINDOW_H #include "qminimaleglintegration.h" -#include "qminimaleglscreen.h" #include From 694702e09d9b17d91db282784f009178cfb1059b Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Fri, 14 Oct 2016 15:37:19 +0200 Subject: [PATCH 195/196] Mark the entire widget dirty when changing flush paths This augments 2a7cee47e5e84c73e32a6953e145771196645f1a Task-number: QTBUG-56534 Task-number: QTBUG-54241 Change-Id: I635478c43e353b0e435d3ac30e4cc608a5a2a6a5 Reviewed-by: Friedemann Kleint Reviewed-by: Paul Olav Tvete --- src/widgets/kernel/qwidgetbackingstore.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 557e71014e..e00dbaba14 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -106,6 +106,7 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion ®ion, QBack if (widget != tlw) offset += widget->mapTo(tlw, QPoint()); + QRegion effectiveRegion = region; #ifndef QT_NO_OPENGL const bool compositionWasActive = widget->d_func()->renderToTextureComposeActive; if (!widgetTextures) { @@ -119,6 +120,11 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion ®ion, QBack } else { widget->d_func()->renderToTextureComposeActive = true; } + // When changing the composition status, make sure the dirty region covers + // the entire widget. Just having e.g. the shown/hidden render-to-texture + // widget's area marked as dirty is incorrect when changing flush paths. + if (compositionWasActive != widget->d_func()->renderToTextureComposeActive) + effectiveRegion = widget->rect(); // re-test since we may have been forced to this path via the dummy texture list above if (widgetTextures) { @@ -130,12 +136,12 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion ®ion, QBack const bool translucentBackground = widget->testAttribute(Qt::WA_TranslucentBackground); // Use the tlw's context, not widget's. The difference is important with native child // widgets where tlw != widget. - backingStore->handle()->composeAndFlush(widget->windowHandle(), region, offset, widgetTextures, + backingStore->handle()->composeAndFlush(widget->windowHandle(), effectiveRegion, offset, widgetTextures, tlw->d_func()->shareContext(), translucentBackground); widget->window()->d_func()->sendComposeStatus(widget->window(), true); } else #endif - backingStore->flush(region, widget->windowHandle(), offset); + backingStore->flush(effectiveRegion, widget->windowHandle(), offset); } #ifndef QT_NO_PAINT_DEBUG From cd9de59177ccbeb7fdfacf8716af7bb20112c880 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Mon, 31 Oct 2016 11:15:17 +0100 Subject: [PATCH 196/196] Revert "Deduplication fetchTransformed" A merge from 5.7 with this change will trigger a compiler crash on gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6) on Linux RHEL_7_2 (gcc-x86_64). This reverts commit eeb03fbf262e2a4790579c2100930799b0866057. Task-number: QTBUG-56817 Change-Id: I143fdf43e0530d68d627718c515c2063630bd920 Reviewed-by: Olivier Goffart (Woboq GmbH) Reviewed-by: Eirik Aavitsland --- src/gui/painting/qdrawhelper.cpp | 185 +++++++++++++++++++++++-------- 1 file changed, 137 insertions(+), 48 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 928a56fd2f..2716d92d13 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -836,10 +836,7 @@ static const uint *QT_FASTCALL convertGrayscale8FromARGB32PM(uint *buffer, const } template static -uint QT_FASTCALL fetchPixel(const uchar *, int) -{ - Q_UNREACHABLE(); -} +uint QT_FASTCALL fetchPixel(const uchar *src, int index); template <> inline uint QT_FASTCALL fetchPixel(const uchar *src, int index) @@ -1557,11 +1554,92 @@ static const QRgba64 *QT_FASTCALL fetchUntransformed64(QRgba64 *buffer, const Op } } -template +// blendType is either BlendTransformed or BlendTransformedTiled +template +static const uint *QT_FASTCALL fetchTransformedARGB32PM(uint *buffer, const Operator *, const QSpanData *data, + int y, int x, int length) +{ + int image_width = data->texture.width; + int image_height = data->texture.height; + + const qreal cx = x + qreal(0.5); + const qreal cy = y + qreal(0.5); + + const uint *end = buffer + length; + uint *b = buffer; + if (data->fast_matrix) { + // The increment pr x in the scanline + int fdx = (int)(data->m11 * fixed_scale); + int fdy = (int)(data->m12 * fixed_scale); + + int fx = int((data->m21 * cy + + data->m11 * cx + data->dx) * fixed_scale); + int fy = int((data->m22 * cy + + data->m12 * cx + data->dy) * fixed_scale); + + while (b < end) { + int px = fx >> 16; + int py = fy >> 16; + + if (blendType == BlendTransformedTiled) { + px %= image_width; + py %= image_height; + if (px < 0) px += image_width; + if (py < 0) py += image_height; + } else { + px = qBound(0, px, image_width - 1); + py = qBound(0, py, image_height - 1); + } + *b = reinterpret_cast(data->texture.scanLine(py))[px]; + + fx += fdx; + fy += fdy; + ++b; + } + } else { + const qreal fdx = data->m11; + const qreal fdy = data->m12; + const qreal fdw = data->m13; + + qreal fx = data->m21 * cy + data->m11 * cx + data->dx; + qreal fy = data->m22 * cy + data->m12 * cx + data->dy; + qreal fw = data->m23 * cy + data->m13 * cx + data->m33; + + while (b < end) { + const qreal iw = fw == 0 ? 1 : 1 / fw; + const qreal tx = fx * iw; + const qreal ty = fy * iw; + int px = int(tx) - (tx < 0); + int py = int(ty) - (ty < 0); + + if (blendType == BlendTransformedTiled) { + px %= image_width; + py %= image_height; + if (px < 0) px += image_width; + if (py < 0) py += image_height; + } else { + px = qBound(0, px, image_width - 1); + py = qBound(0, py, image_height - 1); + } + *b = reinterpret_cast(data->texture.scanLine(py))[px]; + + fx += fdx; + fy += fdy; + fw += fdw; + //force increment to avoid /0 + if (!fw) { + fw += fdw; + } + ++b; + } + } + return buffer; +} + +template /* either BlendTransformed or BlendTransformedTiled */ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, const QSpanData *data, int y, int x, int length) { - Q_STATIC_ASSERT(blendType == BlendTransformed || blendType == BlendTransformedTiled); int image_width = data->texture.width; int image_height = data->texture.height; @@ -1569,12 +1647,9 @@ static const uint *QT_FASTCALL fetchTransformed(uint *buffer, const Operator *, const qreal cy = y + qreal(0.5); const QPixelLayout *layout = &qPixelLayouts[data->texture.format]; - if (bpp != QPixelLayout::BPPNone) // Like this to not ICE on GCC 5.3.1 - Q_ASSERT(layout->bpp == bpp); - // When templated 'fetch' should be inlined at compile time: - const FetchPixelFunc fetch = (bpp == QPixelLayout::BPPNone) ? qFetchPixel[layout->bpp] : fetchPixel; + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; - uint *const end = buffer + length; + const uint *end = buffer + length; uint *b = buffer; if (data->fast_matrix) { // The increment pr x in the scanline @@ -2510,17 +2585,12 @@ static const uint * QT_FASTCALL fetchTransformedBilinearARGB32PM(uint *buffer, c } // blendType = BlendTransformedBilinear or BlendTransformedBilinearTiled -template +template static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator *, const QSpanData *data, int y, int x, int length) { const QPixelLayout *layout = &qPixelLayouts[data->texture.format]; const QVector *clut = data->texture.colorTable; - if (bpp != QPixelLayout::BPPNone) // Like this to not ICE on GCC 5.3.1 - Q_ASSERT(layout->bpp == bpp); - // When templated 'fetch' should be inlined at compile time: - const FetchPixelsFunc fetch = (bpp == QPixelLayout::BPPNone) ? qFetchPixels[layout->bpp] : fetchPixels; - const FetchPixelFunc fetch1 = (bpp == QPixelLayout::BPPNone) ? qFetchPixel[layout->bpp] : fetchPixel; int image_width = data->texture.width; int image_height = data->texture.height; @@ -2558,6 +2628,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper // The idea is first to do the interpolation between the row s1 and the row s2 // into an intermediate buffer, then we interpolate between two pixel of this buffer. + FetchPixelsFunc fetch = qFetchPixels[layout->bpp]; // +1 for the last pixel to interpolate with, and +1 for rounding errors. uint buf1[buffer_size + 2]; uint buf2[buffer_size + 2]; @@ -2646,6 +2717,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper fx += fdx; } } else { + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; uint buf1[buffer_size]; uint buf2[buffer_size]; uint *b = buffer; @@ -2656,10 +2728,19 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper int x1 = (fx >> 16); int x2; fetchTransformedBilinear_pixelBounds(image_width, image_x1, image_x2, x1, x2); - buf1[i * 2 + 0] = fetch1(s1, x1); - buf1[i * 2 + 1] = fetch1(s1, x2); - buf2[i * 2 + 0] = fetch1(s2, x1); - buf2[i * 2 + 1] = fetch1(s2, x2); + + if (layout->bpp == QPixelLayout::BPP32) { + buf1[i * 2 + 0] = ((const uint*)s1)[x1]; + buf1[i * 2 + 1] = ((const uint*)s1)[x2]; + buf2[i * 2 + 0] = ((const uint*)s2)[x1]; + buf2[i * 2 + 1] = ((const uint*)s2)[x2]; + } else { + buf1[i * 2 + 0] = fetch(s1, x1); + buf1[i * 2 + 1] = fetch(s1, x2); + buf2[i * 2 + 0] = fetch(s2, x1); + buf2[i * 2 + 1] = fetch(s2, x2); + } + fx += fdx; } layout->convertToARGB32PM(buf1, buf1, len * 2, clut, 0); @@ -2689,6 +2770,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper } } } else { //rotation + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; uint buf1[buffer_size]; uint buf2[buffer_size]; uint *b = buffer; @@ -2707,10 +2789,19 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper const uchar *s1 = data->texture.scanLine(y1); const uchar *s2 = data->texture.scanLine(y2); - buf1[i * 2 + 0] = fetch1(s1, x1); - buf1[i * 2 + 1] = fetch1(s1, x2); - buf2[i * 2 + 0] = fetch1(s2, x1); - buf2[i * 2 + 1] = fetch1(s2, x2); + + if (layout->bpp == QPixelLayout::BPP32) { + buf1[i * 2 + 0] = ((const uint*)s1)[x1]; + buf1[i * 2 + 1] = ((const uint*)s1)[x2]; + buf2[i * 2 + 0] = ((const uint*)s2)[x1]; + buf2[i * 2 + 1] = ((const uint*)s2)[x2]; + } else { + buf1[i * 2 + 0] = fetch(s1, x1); + buf1[i * 2 + 1] = fetch(s1, x2); + buf2[i * 2 + 0] = fetch(s2, x1); + buf2[i * 2 + 1] = fetch(s2, x2); + } + fx += fdx; fy += fdy; } @@ -2757,6 +2848,7 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper qreal fy = data->m22 * cy + data->m12 * cx + data->dy; qreal fw = data->m23 * cy + data->m13 * cx + data->m33; + FetchPixelFunc fetch = qFetchPixel[layout->bpp]; uint buf1[buffer_size]; uint buf2[buffer_size]; uint *b = buffer; @@ -2784,10 +2876,18 @@ static const uint *QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Oper const uchar *s1 = data->texture.scanLine(y1); const uchar *s2 = data->texture.scanLine(y2); - buf1[i * 2 + 0] = fetch1(s1, x1); - buf1[i * 2 + 1] = fetch1(s1, x2); - buf2[i * 2 + 0] = fetch1(s2, x1); - buf2[i * 2 + 1] = fetch1(s2, x2); + + if (layout->bpp == QPixelLayout::BPP32) { + buf1[i * 2 + 0] = ((const uint*)s1)[x1]; + buf1[i * 2 + 1] = ((const uint*)s1)[x2]; + buf2[i * 2 + 0] = ((const uint*)s2)[x1]; + buf2[i * 2 + 1] = ((const uint*)s2)[x2]; + } else { + buf1[i * 2 + 0] = fetch(s1, x1); + buf1[i * 2 + 1] = fetch(s1, x2); + buf2[i * 2 + 0] = fetch(s2, x1); + buf2[i * 2 + 1] = fetch(s2, x2); + } fx += fdx; fy += fdy; @@ -3193,32 +3293,23 @@ static SourceFetchProc sourceFetchUntransformed[QImage::NImageFormats] = { }; static const SourceFetchProc sourceFetchGeneric[NBlendTypes] = { - fetchUntransformed, // Untransformed - fetchUntransformed, // Tiled - fetchTransformed, // Transformed - fetchTransformed, // TransformedTiled - fetchTransformedBilinear, // TransformedBilinear - fetchTransformedBilinear // TransformedBilinearTiled + fetchUntransformed, // Untransformed + fetchUntransformed, // Tiled + fetchTransformed, // Transformed + fetchTransformed, // TransformedTiled + fetchTransformedBilinear, // Bilinear + fetchTransformedBilinear // BilinearTiled }; static SourceFetchProc sourceFetchARGB32PM[NBlendTypes] = { fetchUntransformedARGB32PM, // Untransformed fetchUntransformedARGB32PM, // Tiled - fetchTransformed, // Transformed - fetchTransformed, // TransformedTiled + fetchTransformedARGB32PM, // Transformed + fetchTransformedARGB32PM, // TransformedTiled fetchTransformedBilinearARGB32PM, // Bilinear fetchTransformedBilinearARGB32PM // BilinearTiled }; -static SourceFetchProc sourceFetchAny32[NBlendTypes] = { - fetchUntransformed, // Untransformed - fetchUntransformed, // Tiled - fetchTransformed, // Transformed - fetchTransformed, // TransformedTiled - fetchTransformedBilinear, // TransformedBilinear - fetchTransformedBilinear // TransformedBilinearTiled -}; - static const SourceFetchProc64 sourceFetchGeneric64[NBlendTypes] = { fetchUntransformed64, // Untransformed fetchUntransformed64, // Tiled @@ -3234,8 +3325,6 @@ static inline SourceFetchProc getSourceFetch(TextureBlendType blendType, QImage: return sourceFetchARGB32PM[blendType]; if (blendType == BlendUntransformed || blendType == BlendTiled) return sourceFetchUntransformed[format]; - if (qPixelLayouts[format].bpp == QPixelLayout::BPP32) - return sourceFetchAny32[blendType]; return sourceFetchGeneric[blendType]; }