diff --git a/.gitignore b/.gitignore index b0f84a5..4fbb1c0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /qtbase-opensource-src-5.6.0-rc.tar.xz /sources /qtbase-opensource-src-5.6.0.tar.xz +/qtbase-opensource-src-5.6.1.tar.xz diff --git a/0058-QtGui-Avoid-rgba64-rgba32-conversion-on-every-pixel-.patch b/0058-QtGui-Avoid-rgba64-rgba32-conversion-on-every-pixel-.patch deleted file mode 100644 index fc29b1b..0000000 --- a/0058-QtGui-Avoid-rgba64-rgba32-conversion-on-every-pixel-.patch +++ /dev/null @@ -1,178 +0,0 @@ -From 8dc55367ca3993f465f270ef79c2cb212d821d0c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= -Date: Mon, 8 Feb 2016 15:02:17 +0100 -Subject: [PATCH 058/328] QtGui: Avoid rgba64->rgba32 conversion on every pixel - in gradient - -Convert rgba64 color table to a new rgb32 color table only once. Use -this cache when required. - -This patch can 2x speed up gradient painting using 32bit color format. - -Task-number: QTBUG-50930 -Change-Id: I9212e01e397c2e0127cdf3070cc49880a2d8df88 -Reviewed-by: Allan Sandfeld Jensen ---- - src/gui/painting/qdrawhelper.cpp | 4 ++-- - src/gui/painting/qdrawhelper_p.h | 9 ++++---- - src/gui/painting/qpaintengine_raster.cpp | 38 ++++++++++++++++++++++++-------- - 3 files changed, 36 insertions(+), 15 deletions(-) - -diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp -index 28c7099..f0e5810 100644 ---- a/src/gui/painting/qdrawhelper.cpp -+++ b/src/gui/painting/qdrawhelper.cpp -@@ -3433,13 +3433,13 @@ static SourceFetchProc64 sourceFetch64[NBlendTypes][QImage::NImageFormats] = { - static uint qt_gradient_pixel_fixed(const QGradientData *data, int fixed_pos) - { - int ipos = (fixed_pos + (FIXPT_SIZE / 2)) >> FIXPT_BITS; -- return data->colorTable[qt_gradient_clamp(data, ipos)].toArgb32(); -+ return data->colorTable32[qt_gradient_clamp(data, ipos)]; - } - - static const QRgba64& qt_gradient_pixel64_fixed(const QGradientData *data, int fixed_pos) - { - int ipos = (fixed_pos + (FIXPT_SIZE / 2)) >> FIXPT_BITS; -- return data->colorTable[qt_gradient_clamp(data, ipos)]; -+ return data->colorTable64[qt_gradient_clamp(data, ipos)]; - } - - static void QT_FASTCALL getLinearGradientValues(LinearGradientValues *v, const QSpanData *data) -diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h -index 1ff19f4..ff98d18 100644 ---- a/src/gui/painting/qdrawhelper_p.h -+++ b/src/gui/painting/qdrawhelper_p.h -@@ -268,7 +268,8 @@ struct QGradientData - #define GRADIENT_STOPTABLE_SIZE 1024 - #define GRADIENT_STOPTABLE_SIZE_SHIFT 10 - -- QRgba64* colorTable; //[GRADIENT_STOPTABLE_SIZE]; -+ const QRgba64 *colorTable64; //[GRADIENT_STOPTABLE_SIZE]; -+ const QRgb *colorTable32; //[GRADIENT_STOPTABLE_SIZE]; - - uint alphaColor : 1; - }; -@@ -376,13 +377,13 @@ static inline uint qt_gradient_clamp(const QGradientData *data, int ipos) - static inline uint qt_gradient_pixel(const QGradientData *data, qreal pos) - { - int ipos = int(pos * (GRADIENT_STOPTABLE_SIZE - 1) + qreal(0.5)); -- return data->colorTable[qt_gradient_clamp(data, ipos)].toArgb32(); -+ return data->colorTable32[qt_gradient_clamp(data, ipos)]; - } - - static inline const QRgba64& qt_gradient_pixel64(const QGradientData *data, qreal pos) - { - int ipos = int(pos * (GRADIENT_STOPTABLE_SIZE - 1) + qreal(0.5)); -- return data->colorTable[qt_gradient_clamp(data, ipos)]; -+ return data->colorTable64[qt_gradient_clamp(data, ipos)]; - } - - static inline qreal qRadialDeterminant(qreal a, qreal b, qreal c) -@@ -550,7 +551,7 @@ public: - delta_det4_vec.v = Simd::v_add(delta_det4_vec.v, v_delta_delta_det16); \ - b_vec.v = Simd::v_add(b_vec.v, v_delta_b4); \ - for (int i = 0; i < 4; ++i) \ -- *buffer++ = (extended_mask | v_buffer_mask.i[i]) & data->gradient.colorTable[index_vec.i[i]].toArgb32(); \ -+ *buffer++ = (extended_mask | v_buffer_mask.i[i]) & data->gradient.colorTable32[index_vec.i[i]]; \ - } - - #define FETCH_RADIAL_LOOP(FETCH_RADIAL_LOOP_CLAMP) \ -diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp -index 05ccff5..fb44a7a 100644 ---- a/src/gui/painting/qpaintengine_raster.cpp -+++ b/src/gui/painting/qpaintengine_raster.cpp -@@ -4138,7 +4138,8 @@ class QGradientCache - { - inline CacheInfo(QGradientStops s, int op, QGradient::InterpolationMode mode) : - stops(qMove(s)), opacity(op), interpolationMode(mode) {} -- QRgba64 buffer[GRADIENT_STOPTABLE_SIZE]; -+ QRgba64 buffer64[GRADIENT_STOPTABLE_SIZE]; -+ QRgb buffer32[GRADIENT_STOPTABLE_SIZE]; - QGradientStops stops; - int opacity; - QGradient::InterpolationMode interpolationMode; -@@ -4147,7 +4148,9 @@ class QGradientCache - typedef QMultiHash QGradientColorTableHash; - - public: -- inline const QRgba64 *getBuffer(const QGradient &gradient, int opacity) { -+ typedef QPair ColorBufferPair; -+ -+ inline ColorBufferPair getBuffer(const QGradient &gradient, int opacity) { - quint64 hash_val = 0; - - const QGradientStops stops = gradient.stops(); -@@ -4163,7 +4166,8 @@ public: - do { - const CacheInfo &cache_info = it.value(); - if (cache_info.stops == stops && cache_info.opacity == opacity && cache_info.interpolationMode == gradient.interpolationMode()) -- return cache_info.buffer; -+ return qMakePair(reinterpret_cast(cache_info.buffer32), -+ reinterpret_cast(cache_info.buffer64)); - ++it; - } while (it != cache.constEnd() && it.key() == hash_val); - // an exact match for these stops and opacity was not found, create new cache -@@ -4177,14 +4181,18 @@ protected: - inline void generateGradientColorTable(const QGradient& g, - QRgba64 *colorTable, - int size, int opacity) const; -- QRgba64 *addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) { -+ ColorBufferPair 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.buffer, paletteSize(), opacity); -- return cache.insert(hash_val, cache_entry).value().buffer; -+ 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)); - } - - QGradientColorTableHash cache; -@@ -4418,7 +4426,11 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode - type = LinearGradient; - const QLinearGradient *g = static_cast(brush.gradient()); - gradient.alphaColor = !brush.isOpaque() || alpha != 256; -- gradient.colorTable = const_cast(qt_gradient_cache()->getBuffer(*g, alpha)); -+ -+ QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); -+ gradient.colorTable64 = colorBuffers.second; -+ gradient.colorTable32 = colorBuffers.first; -+ - gradient.spread = g->spread(); - - QLinearGradientData &linearData = gradient.linear; -@@ -4435,7 +4447,11 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode - type = RadialGradient; - const QRadialGradient *g = static_cast(brush.gradient()); - gradient.alphaColor = !brush.isOpaque() || alpha != 256; -- gradient.colorTable = const_cast(qt_gradient_cache()->getBuffer(*g, alpha)); -+ -+ QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); -+ gradient.colorTable64 = colorBuffers.second; -+ gradient.colorTable32 = colorBuffers.first; -+ - gradient.spread = g->spread(); - - QRadialGradientData &radialData = gradient.radial; -@@ -4456,7 +4472,11 @@ void QSpanData::setup(const QBrush &brush, int alpha, QPainter::CompositionMode - type = ConicalGradient; - const QConicalGradient *g = static_cast(brush.gradient()); - gradient.alphaColor = !brush.isOpaque() || alpha != 256; -- gradient.colorTable = const_cast(qt_gradient_cache()->getBuffer(*g, alpha)); -+ -+ QGradientCache::ColorBufferPair colorBuffers = qt_gradient_cache()->getBuffer(*g, alpha); -+ gradient.colorTable64 = colorBuffers.second; -+ gradient.colorTable32 = colorBuffers.first; -+ - gradient.spread = QGradient::RepeatSpread; - - QConicalGradientData &conicalData = gradient.conical; --- -1.9.3 - diff --git a/0067-Search-for-libsystemd-first-fall-back-to-libsystemd-.patch b/0067-Search-for-libsystemd-first-fall-back-to-libsystemd-.patch deleted file mode 100644 index 3cd2dfc..0000000 --- a/0067-Search-for-libsystemd-first-fall-back-to-libsystemd-.patch +++ /dev/null @@ -1,57 +0,0 @@ -From c689bcafd3196aad22372e8056fe0ccb13c15f35 Mon Sep 17 00:00:00 2001 -From: Heiko Becker -Date: Fri, 12 Feb 2016 12:37:15 +0100 -Subject: [PATCH 067/652] Search for libsystemd first, fall back to - libsystemd-journal - -systemd >= 209 merged the individual libraries libsystemd-journal, -libsystemd-login, libsystemd-id128 and libsystemd-daemon into -a single library, libsystemd. To ease the transition one could pass -an option to its build to generate stub libraries and matching -pkg-config files. With systemd >= 229 this option has now been -removed, causing the build to fail when the journald option is -enabled. - -Change-Id: I26670f207f1a9e79c16be5ce8c8a49353143c5ba -Reviewed-by: Oswald Buddenhagen -Reviewed-by: Robin Burchell ---- - config.tests/unix/journald/journald.pro | 6 +++++- - src/corelib/global/global.pri | 5 ++++- - 2 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/config.tests/unix/journald/journald.pro b/config.tests/unix/journald/journald.pro -index 2bb50ce..ea76564 100644 ---- a/config.tests/unix/journald/journald.pro -+++ b/config.tests/unix/journald/journald.pro -@@ -1,6 +1,10 @@ - SOURCES = journald.c - - CONFIG += link_pkgconfig --PKGCONFIG_PRIVATE += libsystemd-journal -+ -+packagesExist(libsystemd): \ -+ PKGCONFIG_PRIVATE += libsystemd -+else: \ -+ PKGCONFIG_PRIVATE += libsystemd-journal - - CONFIG -= qt -diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri -index aa4945f..dd84695 100644 ---- a/src/corelib/global/global.pri -+++ b/src/corelib/global/global.pri -@@ -53,7 +53,10 @@ slog2 { - - journald { - CONFIG += link_pkgconfig -- PKGCONFIG_PRIVATE += libsystemd-journal -+ packagesExist(libsystemd): \ -+ PKGCONFIG_PRIVATE += libsystemd -+ else: \ -+ PKGCONFIG_PRIVATE += libsystemd-journal - DEFINES += QT_USE_JOURNALD - } - --- -2.7.4 - diff --git a/0076-QListView-fix-skipping-indexes-in-selectedIndexes.patch b/0076-QListView-fix-skipping-indexes-in-selectedIndexes.patch deleted file mode 100644 index 95fb7c4..0000000 --- a/0076-QListView-fix-skipping-indexes-in-selectedIndexes.patch +++ /dev/null @@ -1,78 +0,0 @@ -From a3b8e355fc17783a5d4badfb9ad50247655000cd Mon Sep 17 00:00:00 2001 -From: Anton Kudryavtsev -Date: Fri, 12 Feb 2016 15:31:07 +0300 -Subject: [PATCH 076/122] QListView: fix skipping indexes in selectedIndexes(). - -Remove spurious increment of i. - -Task-number: QTBUG-51086 -Change-Id: I4307a6728de1e7f25c8afa31fe2066f92373f3fc -Reviewed-by: Edward Welbourne -Reviewed-by: Oswald Buddenhagen -Reviewed-by: Marc Mutz ---- - src/widgets/itemviews/qlistview.cpp | 2 +- - .../widgets/itemviews/qlistview/tst_qlistview.cpp | 28 ++++++++++++++++++++++ - 2 files changed, 29 insertions(+), 1 deletion(-) - -diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp -index 9c79509..a17d89e 100644 ---- a/src/widgets/itemviews/qlistview.cpp -+++ b/src/widgets/itemviews/qlistview.cpp -@@ -1437,7 +1437,7 @@ QModelIndexList QListView::selectedIndexes() const - return QModelIndexList(); - - QModelIndexList viewSelected = d->selectionModel->selectedIndexes(); -- for (int i = 0; i < viewSelected.count(); ++i) { -+ for (int i = 0; i < viewSelected.count();) { - const QModelIndex &index = viewSelected.at(i); - if (!isIndexHidden(index) && index.parent() == d->root && index.column() == d->column) - ++i; -diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp -index 5b206af..3cf9f7f 100644 ---- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp -+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp -@@ -152,6 +152,7 @@ private slots: - void taskQTBUG_39902_mutualScrollBars_data(); - void taskQTBUG_39902_mutualScrollBars(); - void horizontalScrollingByVerticalWheelEvents(); -+ void taskQTBUG_51086_skippingIndexesInSelectedIndexes(); - }; - - // Testing get/set functions -@@ -2493,5 +2494,32 @@ void tst_QListView::horizontalScrollingByVerticalWheelEvents() - QVERIFY(lv.verticalScrollBar()->value() > vValue); - } - -+void tst_QListView::taskQTBUG_51086_skippingIndexesInSelectedIndexes() -+{ -+ // simple way to get access to selectedIndexes() -+ class QListViewWithPublicSelectedIndexes : public QListView -+ { -+ public: -+ using QListView::selectedIndexes; -+ }; -+ -+ QStandardItemModel data(10, 1); -+ QItemSelectionModel selections(&data); -+ QListViewWithPublicSelectedIndexes list; -+ list.setModel(&data); -+ list.setSelectionModel(&selections); -+ -+ list.setRowHidden(7, true); -+ list.setRowHidden(8, true); -+ -+ for (int i = 0, count = data.rowCount(); i < count; ++i) -+ selections.select(data.index(i, 0), QItemSelectionModel::Select); -+ -+ const QModelIndexList indexes = list.selectedIndexes(); -+ -+ QVERIFY(!indexes.contains(data.index(7, 0))); -+ QVERIFY(!indexes.contains(data.index(8, 0))); -+} -+ - QTEST_MAIN(tst_QListView) - #include "tst_qlistview.moc" --- -2.5.0 - diff --git a/0087-xcb-Fix-drag-and-drop-between-xcb-screens.patch b/0087-xcb-Fix-drag-and-drop-between-xcb-screens.patch deleted file mode 100644 index ebed49b..0000000 --- a/0087-xcb-Fix-drag-and-drop-between-xcb-screens.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 78ad8f208d8dbe3575194bb9b97d4e42efdc32d5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= -Date: Mon, 15 Feb 2016 20:50:16 +0100 -Subject: [PATCH 087/652] xcb: Fix drag and drop between xcb screens - -Set the proper screen before creating a shaped pixmap window in -QBasicDrag::startDrag(). Grab mouse again when D&D window is -recreated. - -Task-number: QTBUG-51215 -Change-Id: I5cb47d3b11672b56d17b32072d84a722bdcdcd9a -Reviewed-by: Friedemann Kleint -Reviewed-by: Shawn Rutledge ---- - src/gui/kernel/qsimpledrag.cpp | 5 +++-- - src/gui/kernel/qsimpledrag_p.h | 3 +++ - src/plugins/platforms/xcb/qxcbdrag.cpp | 4 ++++ - 3 files changed, 10 insertions(+), 2 deletions(-) - -diff --git a/src/gui/kernel/qsimpledrag.cpp b/src/gui/kernel/qsimpledrag.cpp -index 9f38c9b..00589d2 100644 ---- a/src/gui/kernel/qsimpledrag.cpp -+++ b/src/gui/kernel/qsimpledrag.cpp -@@ -88,7 +88,8 @@ static QWindow* topLevelAt(const QPoint &pos) - QBasicDrag::QBasicDrag() : - m_restoreCursor(false), m_eventLoop(0), - m_executed_drop_action(Qt::IgnoreAction), m_can_drop(false), -- m_drag(0), m_drag_icon_window(0), m_useCompositing(true) -+ m_drag(0), m_drag_icon_window(0), m_useCompositing(true), -+ m_screen(Q_NULLPTR) - { - } - -@@ -211,7 +212,7 @@ void QBasicDrag::startDrag() - pos = QPoint(); - } - #endif -- recreateShapedPixmapWindow(Q_NULLPTR, pos); -+ recreateShapedPixmapWindow(m_screen, pos); - enableEventFilter(); - } - -diff --git a/src/gui/kernel/qsimpledrag_p.h b/src/gui/kernel/qsimpledrag_p.h -index 055136c..b208c8c 100644 ---- a/src/gui/kernel/qsimpledrag_p.h -+++ b/src/gui/kernel/qsimpledrag_p.h -@@ -90,6 +90,8 @@ protected: - bool useCompositing() const { return m_useCompositing; } - void setUseCompositing(bool on) { m_useCompositing = on; } - -+ void setScreen(QScreen *screen) { m_screen = screen; } -+ - Qt::DropAction executedDropAction() const { return m_executed_drop_action; } - void setExecutedDropAction(Qt::DropAction da) { m_executed_drop_action = da; } - -@@ -108,6 +110,7 @@ private: - QDrag *m_drag; - QShapedPixmapWindow *m_drag_icon_window; - bool m_useCompositing; -+ QScreen *m_screen; - }; - - class Q_GUI_EXPORT QSimpleDrag : public QBasicDrag -diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp -index 9296a6d..aa6445d 100644 ---- a/src/plugins/platforms/xcb/qxcbdrag.cpp -+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp -@@ -193,6 +193,7 @@ void QXcbDrag::startDrag() - XCB_ATOM_ATOM, 32, drag_types.size(), (const void *)drag_types.constData()); - - setUseCompositing(current_virtual_desktop->compositingActive()); -+ setScreen(current_virtual_desktop->screens().constFirst()->screen()); - QBasicDrag::startDrag(); - if (connection()->mouseGrabber() == Q_NULLPTR) - shapedPixmapWindow()->setMouseGrabEnabled(true); -@@ -322,6 +323,9 @@ void QXcbDrag::move(const QPoint &globalPos) - if (virtualDesktop != current_virtual_desktop) { - setUseCompositing(virtualDesktop->compositingActive()); - recreateShapedPixmapWindow(static_cast(screen)->screen(), deviceIndependentPos); -+ if (connection()->mouseGrabber() == Q_NULLPTR) -+ shapedPixmapWindow()->setMouseGrabEnabled(true); -+ - current_virtual_desktop = virtualDesktop; - } else { - QBasicDrag::moveShapedPixmapWindow(deviceIndependentPos); --- -2.7.4 - diff --git a/0101-xcb-include-cmath.patch b/0101-xcb-include-cmath.patch deleted file mode 100644 index 6a66a50..0000000 --- a/0101-xcb-include-cmath.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 9868d8af8316c01f28255110c28e11344ea6f7a5 Mon Sep 17 00:00:00 2001 -From: Shawn Rutledge -Date: Thu, 18 Feb 2016 14:06:02 +0100 -Subject: [PATCH 101/328] xcb: include - -Fix trouble compiling with gcc 4.4.7 on Centos 6 - -Change-Id: Id81bd570e896507a07388257c4f75f80b4b468fd -Reviewed-by: Friedemann Kleint ---- - src/plugins/platforms/xcb/qxcbconnection_xi2.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp -index 969b6de..81cdaa5 100644 ---- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp -+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp -@@ -38,6 +38,7 @@ - #include "qtouchdevice.h" - #include - #include -+#include - - #ifdef XCB_USE_XINPUT2 - --- -1.9.3 - diff --git a/0177-Fix-GCC-6-Wunused-functions-warnings.patch b/0177-Fix-GCC-6-Wunused-functions-warnings.patch deleted file mode 100644 index 17bc9ff..0000000 --- a/0177-Fix-GCC-6-Wunused-functions-warnings.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 4f577051676ad8ff161d481030f016d0c6bb324f Mon Sep 17 00:00:00 2001 -From: Marc Mutz -Date: Sat, 5 Mar 2016 00:34:01 +0100 -Subject: [PATCH 177/328] Fix GCC 6 -Wunused-functions warnings - -GCC 6 is able to identify member functions that are unused. - -Remove them. - -Change-Id: Ic77548164b38a1cd3c957d2c57a5bccb979bc02e -Reviewed-by: Olivier Goffart (Woboq GmbH) ---- - src/gui/painting/qpathclipper.cpp | 8 -------- - src/widgets/dialogs/qcolordialog.cpp | 15 --------------- - src/widgets/widgets/qcalendarwidget.cpp | 6 ------ - 3 files changed, 29 deletions(-) - -diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp -index 3a686bd..a5557c9 100644 ---- a/src/gui/painting/qpathclipper.cpp -+++ b/src/gui/painting/qpathclipper.cpp -@@ -252,8 +252,6 @@ class SegmentTree - public: - SegmentTree(QPathSegments &segments); - -- QRectF boundingRect() const; -- - void produceIntersections(int segment); - - private: -@@ -304,12 +302,6 @@ SegmentTree::SegmentTree(QPathSegments &segments) - m_tree[0] = root; - } - --QRectF SegmentTree::boundingRect() const --{ -- return QRectF(QPointF(m_bounds.x1, m_bounds.y1), -- QPointF(m_bounds.x2, m_bounds.y2)); --} -- - static inline qreal coordinate(const QPointF &pos, int axis) - { - return axis == 0 ? pos.x() : pos.y(); -diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp -index 468bffe..9a8bfc5 100644 ---- a/src/widgets/dialogs/qcolordialog.cpp -+++ b/src/widgets/dialogs/qcolordialog.cpp -@@ -190,7 +190,6 @@ public: - QSize sizeHint() const Q_DECL_OVERRIDE; - - virtual void setCellBrush(int row, int col, const QBrush &); -- QBrush cellBrush(int row, int col); - - inline int cellWidth() const - { return cellw; } -@@ -459,20 +458,6 @@ void QWellArray::setCellBrush(int row, int col, const QBrush &b) - d->brush[row*numCols()+col] = b; - } - --/* -- Returns the brush set for the cell at \a row, \a column. If no brush is -- set, Qt::NoBrush is returned. --*/ -- --QBrush QWellArray::cellBrush(int row, int col) --{ -- if (d && row >= 0 && row < numRows() && col >= 0 && col < numCols()) -- return d->brush[row*numCols()+col]; -- return Qt::NoBrush; --} -- -- -- - /*!\reimp - */ - -diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp -index 48b224f..89cde85 100644 ---- a/src/widgets/widgets/qcalendarwidget.cpp -+++ b/src/widgets/widgets/qcalendarwidget.cpp -@@ -654,7 +654,6 @@ public: - int dateEditAcceptDelay() const; - void setDateEditAcceptDelay(int delay); - -- QDate date() const; - void setDate(const QDate &date); - - bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE; -@@ -690,11 +689,6 @@ void QCalendarTextNavigator::setWidget(QWidget *widget) - m_widget = widget; - } - --QDate QCalendarTextNavigator::date() const --{ -- return m_date; --} -- - void QCalendarTextNavigator::setDate(const QDate &date) - { - m_date = date; --- -1.9.3 - diff --git a/0178-qt_common.prf-when-looking-for-GCC-4.6-match-GCC-6-t.patch b/0178-qt_common.prf-when-looking-for-GCC-4.6-match-GCC-6-t.patch deleted file mode 100644 index 5f7ba92..0000000 --- a/0178-qt_common.prf-when-looking-for-GCC-4.6-match-GCC-6-t.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 992e762f66f6dd5ed2c5e369da77c7b3fdfcfd80 Mon Sep 17 00:00:00 2001 -From: Marc Mutz -Date: Sat, 5 Mar 2016 01:50:54 +0100 -Subject: [PATCH 178/328] qt_common.prf: when looking for GCC >= 4.6, match GCC - 6+, too - -Change-Id: Ia04690f62faa214fb91dffc758e253b5a64e5648 -Reviewed-by: Olivier Goffart (Woboq GmbH) ---- - mkspecs/features/qt_common.prf | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf -index 38602f6..e70d3bf 100644 ---- a/mkspecs/features/qt_common.prf -+++ b/mkspecs/features/qt_common.prf -@@ -69,9 +69,9 @@ warnings_are_errors:warning_clean { - QMAKE_CXXFLAGS_WARN_ON += -Werror -ww177,1224,1478,1881 $$WERROR - } - } else:gcc:!clang:!intel_icc { -- # GCC 4.6-4.9, 5.x -+ # GCC 4.6-4.9, 5.x, ... - ver = $${QT_GCC_MAJOR_VERSION}.$${QT_GCC_MINOR_VERSION} -- contains(ver, "(4\\.[6789]|5\\..)") { -+ contains(ver, "(4\\.[6789]|[5-9]\\..)") { - QMAKE_CXXFLAGS_WARN_ON += -Werror -Wno-error=cpp -Wno-error=deprecated-declarations $$WERROR - - # GCC prints this bogus warning, after it has inlined a lot of code --- -1.9.3 - diff --git a/0201-alsatest-Fix-the-check-to-treat-alsalib-1.1.x-as-cor.patch b/0201-alsatest-Fix-the-check-to-treat-alsalib-1.1.x-as-cor.patch deleted file mode 100644 index 80acfb8..0000000 --- a/0201-alsatest-Fix-the-check-to-treat-alsalib-1.1.x-as-cor.patch +++ /dev/null @@ -1,29 +0,0 @@ -From b8f98d956501dfa4ce03a137f15d404930a56066 Mon Sep 17 00:00:00 2001 -From: Dmitry Shachnev -Date: Sat, 5 Mar 2016 10:25:33 +0300 -Subject: [PATCH 201/328] alsatest: Fix the check to treat alsalib 1.1.x as - correct version - -Task-number: QTBUG-51681 -Change-Id: I63266c33342f02f4d1a5ea5786f5fbc5a1b421b3 -Reviewed-by: Oswald Buddenhagen ---- - config.tests/unix/alsa/alsatest.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/config.tests/unix/alsa/alsatest.cpp b/config.tests/unix/alsa/alsatest.cpp -index cab6533..0b45819 100644 ---- a/config.tests/unix/alsa/alsatest.cpp -+++ b/config.tests/unix/alsa/alsatest.cpp -@@ -32,7 +32,7 @@ - ****************************************************************************/ - - #include --#if(!(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 10)) -+#if SND_LIB_VERSION < 0x1000a // 1.0.10 - #error "Alsa version found too old, require >= 1.0.10" - #endif - --- -1.9.3 - diff --git a/0221-QObject-fix-GCC-6-warning-about-qt_static_metacall-s.patch b/0221-QObject-fix-GCC-6-warning-about-qt_static_metacall-s.patch deleted file mode 100644 index 13e1646..0000000 --- a/0221-QObject-fix-GCC-6-warning-about-qt_static_metacall-s.patch +++ /dev/null @@ -1,149 +0,0 @@ -From 2020d2cb63b851723e188c002acbe25b5f066525 Mon Sep 17 00:00:00 2001 -From: Marc Mutz -Date: Fri, 4 Mar 2016 15:19:50 -0800 -Subject: [PATCH 221/328] QObject: fix GCC 6 warning about qt_static_metacall's - 'hidden' attribute use -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This warning is triggered when we try to apply the Q_DECL_HIDDEN -attribute to a class in an unnamed namespace. Such classes are -already not exported. - - qobjectdefs.h:175:108: warning: ‘visibility’ attribute ignored [-Wattributes] - qobjectdefs.h:198:108: warning: ‘visibility’ attribute ignored [-Wattributes] - -Added a test on gadgets (and QObjects) in unnamed namespaces, -because qtbase currently does not contain such Q_GADGETs. - -Done-with: Thiago Macieira -Change-Id: Ic747cc2ab45e4dc6bb70ffff1438c747b05c5672 -Reviewed-by: Lars Knoll -Reviewed-by: Olivier Goffart (Woboq GmbH) ---- - src/corelib/kernel/qobjectdefs.h | 15 ++++++++++-- - tests/auto/tools/moc/tst_moc.cpp | 50 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 63 insertions(+), 2 deletions(-) - -diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h -index b1ed971..2e9ed4f 100644 ---- a/src/corelib/kernel/qobjectdefs.h -+++ b/src/corelib/kernel/qobjectdefs.h -@@ -152,6 +152,12 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} - # define Q_OBJECT_NO_OVERRIDE_WARNING - #endif - -+#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 600 -+# define Q_OBJECT_NO_ATTRIBUTES_WARNING QT_WARNING_DISABLE_GCC("-Wattributes") -+#else -+# define Q_OBJECT_NO_ATTRIBUTES_WARNING -+#endif -+ - /* qmake ignore Q_OBJECT */ - #define Q_OBJECT \ - public: \ -@@ -162,10 +168,11 @@ public: \ - virtual const QMetaObject *metaObject() const; \ - virtual void *qt_metacast(const char *); \ - virtual int qt_metacall(QMetaObject::Call, int, void **); \ -- QT_WARNING_POP \ - QT_TR_FUNCTIONS \ - private: \ -+ Q_OBJECT_NO_ATTRIBUTES_WARNING \ - Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \ -+ QT_WARNING_POP \ - struct QPrivateSignal {}; - - /* qmake ignore Q_OBJECT */ -@@ -179,7 +186,11 @@ public: \ - void qt_check_for_QGADGET_macro(); \ - typedef void QtGadgetHelper; \ - private: \ -- Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); -+ QT_WARNING_PUSH \ -+ Q_OBJECT_NO_ATTRIBUTES_WARNING \ -+ Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \ -+ QT_WARNING_POP \ -+ /*end*/ - #endif // QT_NO_META_MACROS - - #else // Q_MOC_RUN -diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp -index c113b7c..5c16c7a 100644 ---- a/tests/auto/tools/moc/tst_moc.cpp -+++ b/tests/auto/tools/moc/tst_moc.cpp -@@ -131,6 +131,33 @@ typedef struct { - int doNotConfuseMoc; - } OldStyleCStruct; - -+namespace { -+ -+ class GadgetInUnnamedNS -+ { -+ Q_GADGET -+ Q_PROPERTY(int x READ x WRITE setX) -+ Q_PROPERTY(int y READ y WRITE setY) -+ public: -+ explicit GadgetInUnnamedNS(int x, int y) : m_x(x), m_y(y) {} -+ int x() const { return m_x; } -+ int y() const { return m_y; } -+ void setX(int x) { m_x = x; } -+ void setY(int y) { m_y = y; } -+ -+ private: -+ int m_x, m_y; -+ }; -+ -+ class ObjectInUnnamedNS : public QObject -+ { -+ Q_OBJECT -+ public: -+ explicit ObjectInUnnamedNS(QObject *parent = Q_NULLPTR) : QObject(parent) {} -+ }; -+ -+} -+ - class Sender : public QObject - { - Q_OBJECT -@@ -597,6 +624,7 @@ private slots: - void relatedMetaObjectsNameConflict_data(); - void relatedMetaObjectsNameConflict(); - void strignLiteralsInMacroExtension(); -+ void unnamedNamespaceObjectsAndGadgets(); - void veryLongStringData(); - void gadgetHierarchy(); - -@@ -3421,6 +3449,28 @@ class VeryLongStringData : public QObject - #undef repeat65534 - }; - -+void tst_Moc::unnamedNamespaceObjectsAndGadgets() -+{ -+ // these just test very basic functionality of gadgets and objects -+ // defined in unnamed namespaces. -+ { -+ GadgetInUnnamedNS gadget(21, 42); -+ QCOMPARE(gadget.x(), 21); -+ QCOMPARE(gadget.y(), 42); -+ gadget.staticMetaObject.property(0).writeOnGadget(&gadget, 12); -+ gadget.staticMetaObject.property(1).writeOnGadget(&gadget, 24); -+ QCOMPARE(gadget.x(), 12); -+ QCOMPARE(gadget.y(), 24); -+ } -+ -+ { -+ ObjectInUnnamedNS object; -+ QObject *qObject = &object; -+ QCOMPARE(static_cast(qObject), -+ qobject_cast(qObject)); -+ } -+} -+ - void tst_Moc::veryLongStringData() - { - const QMetaObject *mobj = &VeryLongStringData::staticMetaObject; --- -1.9.3 - diff --git a/0293-Fix-QtDBus-deadlock-inside-kded-kiod.patch b/0293-Fix-QtDBus-deadlock-inside-kded-kiod.patch deleted file mode 100644 index 4f231a8..0000000 --- a/0293-Fix-QtDBus-deadlock-inside-kded-kiod.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 2e02de165115c9d67ac343ff0960ed80f9c09bc8 Mon Sep 17 00:00:00 2001 -From: Thiago Macieira -Date: Tue, 15 Mar 2016 11:00:20 -0700 -Subject: [PATCH 293/328] Fix QtDBus deadlock inside kded/kiod -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Whenever a message spy was installed, we failed to actually process -looped-back messages by queueing them for processing by the spy. That -had as a consequence that the caller got an error reply. Worse, since -the message had been queued, QtDBus would attempt to deliver it later. -Since that message had isLocal==true, bad things happened inside the -manager thread. - -The correct solution is not to queue the message for the filter. If the -message is local, then simply deliver directly, as we're still in the -user's thread. This used to be the behavior in Qt 5.5. - -Task-number: QTBUG-51676 -Change-Id: I1dc112894cde7121e8ce302ae51b438ade1ff612 -Reviewed-by: David Faure -Reviewed-by: Dmitry Shachnev -Reviewed-by: Jan Kundrát ---- - src/dbus/qdbusintegrator.cpp | 42 ++++++++++++++++++++++++++++++++---------- - src/dbus/qdbusintegrator_p.h | 1 + - 2 files changed, 33 insertions(+), 10 deletions(-) - -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index cd44861..478a2c4 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -481,6 +481,11 @@ QDBusSpyCallEvent::~QDBusSpyCallEvent() - - void QDBusSpyCallEvent::placeMetaCall(QObject *) - { -+ invokeSpyHooks(msg, hooks, hookCount); -+} -+ -+inline void QDBusSpyCallEvent::invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount) -+{ - // call the spy hook list - for (int i = 0; i < hookCount; ++i) - hooks[i](msg); -@@ -509,7 +514,12 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) - { - if (!ref.load()) - return false; -- if (!dispatchEnabled && !QDBusMessagePrivate::isLocal(amsg)) { -+ -+ // local message are always delivered, regardless of filtering -+ // or whether the dispatcher is enabled -+ bool isLocal = QDBusMessagePrivate::isLocal(amsg); -+ -+ if (!dispatchEnabled && !isLocal) { - // queue messages only, we'll handle them later - qDBusDebug() << this << "delivery is suspended"; - pendingMessages << amsg; -@@ -523,13 +533,23 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) - // let them see the signal too - return false; - case QDBusMessage::MethodCallMessage: -- // run it through the spy filters (if any) before the regular processing -+ // run it through the spy filters (if any) before the regular processing: -+ // a) if it's a local message, we're in the caller's thread, so invoke the filter directly -+ // b) if it's an external message, post to the main thread - if (Q_UNLIKELY(qDBusSpyHookList.exists()) && qApp) { - const QDBusSpyHookList &list = *qDBusSpyHookList; -- qDBusDebug() << this << "invoking message spies"; -- QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this), -- amsg, list.constData(), list.size())); -- return true; -+ if (isLocal) { -+ Q_ASSERT(QThread::currentThread() != thread()); -+ qDBusDebug() << this << "invoking message spies directly"; -+ QDBusSpyCallEvent::invokeSpyHooks(amsg, list.constData(), list.size()); -+ } else { -+ qDBusDebug() << this << "invoking message spies via event"; -+ QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this), -+ amsg, list.constData(), list.size())); -+ -+ // we'll be called back, so return -+ return true; -+ } - } - - handleObjectCall(amsg); -@@ -1451,9 +1471,9 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg) - // that means the dispatchLock mutex is locked - // must not call out to user code in that case - // -- // however, if the message is internal, handleMessage was called -- // directly and no lock is in place. We can therefore call out to -- // user code, if necessary -+ // however, if the message is internal, handleMessage was called directly -+ // (user's thread) and no lock is in place. We can therefore call out to -+ // user code, if necessary. - ObjectTreeNode result; - int usedLength; - QThread *objThread = 0; -@@ -1492,12 +1512,14 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg) - usedLength, msg)); - return; - } else if (objThread != QThread::currentThread()) { -- // synchronize with other thread -+ // looped-back message, targeting another thread: -+ // synchronize with it - postEventToThread(HandleObjectCallPostEventAction, result.obj, - new QDBusActivateObjectEvent(QDBusConnection(this), this, result, - usedLength, msg, &sem)); - semWait = true; - } else { -+ // looped-back message, targeting current thread - semWait = false; - } - } // release the lock -diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h -index 2bbebdf..c0d9c22 100644 ---- a/src/dbus/qdbusintegrator_p.h -+++ b/src/dbus/qdbusintegrator_p.h -@@ -145,6 +145,7 @@ public: - {} - ~QDBusSpyCallEvent(); - void placeMetaCall(QObject *) Q_DECL_OVERRIDE; -+ static inline void invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount); - - QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up - QDBusMessage msg; --- -1.9.3 - diff --git a/0415-QtDBus-clean-up-signal-hooks-and-object-tree-in-clos.patch b/0415-QtDBus-clean-up-signal-hooks-and-object-tree-in-clos.patch deleted file mode 100644 index 3cac1ec..0000000 --- a/0415-QtDBus-clean-up-signal-hooks-and-object-tree-in-clos.patch +++ /dev/null @@ -1,87 +0,0 @@ -From b77ef8a7e6e4104067d52824e29eadc8c66f5929 Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Sat, 5 Mar 2016 12:23:21 -0800 -Subject: [PATCH 415/595] QtDBus: clean up signal hooks and object tree in - closeConnection - -If a QObject is added or passed as receiver to QDBusConnection::connect() -and it is managed by Q_GLOBAL_STATIC or similar mechanism, it is -possible that when that its destructor is called after the dbus daemon -thread ends. In that case, QObject::destroyed connected via -Qt::BlockingQueuedConnection to QDBusConnectionPrivate will cause dead -lock since the thread is no longer processing events. - -Task-number: QTBUG-51648 -Change-Id: I1a1810a6d6d0234af0269d5f3fc1f54101bf1547 -Reviewed-by: Thiago Macieira ---- - src/dbus/qdbusconnection_p.h | 1 + - src/dbus/qdbusintegrator.cpp | 26 +++++++++++++++++++++++++- - 2 files changed, 26 insertions(+), 1 deletion(-) - -diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h -index c77daf7..565eb83 100644 ---- a/src/dbus/qdbusconnection_p.h -+++ b/src/dbus/qdbusconnection_p.h -@@ -254,6 +254,7 @@ private: - const QVector &metaTypes, int slotIdx); - - SignalHookHash::Iterator removeSignalHookNoLock(SignalHookHash::Iterator it); -+ void disconnectObjectTree(ObjectTreeNode &node); - - bool isServiceRegisteredByThread(const QString &serviceName); - -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index 478a2c4..3be775d 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -1050,7 +1050,6 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate() - qPrintable(name)); - - closeConnection(); -- rootNode.children.clear(); // free resources - qDeleteAll(cachedMetaObjects); - - if (mode == ClientMode || mode == PeerMode) { -@@ -1072,6 +1071,19 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate() - } - } - -+void QDBusConnectionPrivate::disconnectObjectTree(QDBusConnectionPrivate::ObjectTreeNode &haystack) -+{ -+ QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin(); -+ -+ while (it != haystack.children.end()) { -+ disconnectObjectTree(*it); -+ it++; -+ } -+ -+ if (haystack.obj) -+ haystack.obj->disconnect(this); -+} -+ - void QDBusConnectionPrivate::closeConnection() - { - QDBusWriteLocker locker(CloseConnectionAction, this); -@@ -1095,6 +1107,18 @@ void QDBusConnectionPrivate::closeConnection() - } - - qDeleteAll(pendingCalls); -+ -+ // Disconnect all signals from signal hooks and from the object tree to -+ // avoid QObject::destroyed being sent to dbus daemon thread which has -+ // already quit. -+ SignalHookHash::iterator sit = signalHooks.begin(); -+ while (sit != signalHooks.end()) { -+ sit.value().obj->disconnect(this); -+ sit++; -+ } -+ -+ disconnectObjectTree(rootNode); -+ rootNode.children.clear(); // free resources - } - - void QDBusConnectionPrivate::checkThread() --- -2.7.4 - diff --git a/0508-xcb-Fix-drag-and-drop-to-applications-like-Emacs-and.patch b/0508-xcb-Fix-drag-and-drop-to-applications-like-Emacs-and.patch deleted file mode 100644 index f3b8916..0000000 --- a/0508-xcb-Fix-drag-and-drop-to-applications-like-Emacs-and.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 269fdbdd2bedda5f5eacb751224d3a3fc3eed5bc Mon Sep 17 00:00:00 2001 -From: Urs Fleisch -Date: Fri, 26 Feb 2016 17:46:09 +0100 -Subject: [PATCH 508/652] xcb: Fix drag and drop to applications like Emacs and - Chromium. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Drops without matching time stamp do not work. I have fixed the issue by -reanimating the findXdndAwareParent() function (adapted to XCB) and -using it to find a matching transaction if all else fails. - -Task-number: QTBUG-45812 -Change-Id: Ibca15bbab02ccf2f25280418e9edf36972ebf9a0 -Reviewed-by: Błażej Szczygieł -Reviewed-by: Dmitry Shachnev -Reviewed-by: Shawn Rutledge ---- - src/plugins/platforms/xcb/qxcbdrag.cpp | 55 +++++++++++++++++++++++++++------- - 1 file changed, 44 insertions(+), 11 deletions(-) - -diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp -index f5cc873..f1428d0 100644 ---- a/src/plugins/platforms/xcb/qxcbdrag.cpp -+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp -@@ -1072,6 +1072,40 @@ void QXcbDrag::cancel() - send_leave(); - } - -+// find an ancestor with XdndAware on it -+static xcb_window_t findXdndAwareParent(QXcbConnection *c, xcb_window_t window) -+{ -+ xcb_window_t target = 0; -+ forever { -+ // check if window has XdndAware -+ xcb_get_property_cookie_t gpCookie = Q_XCB_CALL( -+ xcb_get_property(c->xcb_connection(), false, window, -+ c->atom(QXcbAtom::XdndAware), XCB_GET_PROPERTY_TYPE_ANY, 0, 0)); -+ xcb_get_property_reply_t *gpReply = xcb_get_property_reply( -+ c->xcb_connection(), gpCookie, 0); -+ bool aware = gpReply && gpReply->type != XCB_NONE; -+ free(gpReply); -+ if (aware) { -+ target = window; -+ break; -+ } -+ -+ // try window's parent -+ xcb_query_tree_cookie_t qtCookie = Q_XCB_CALL( -+ xcb_query_tree_unchecked(c->xcb_connection(), window)); -+ xcb_query_tree_reply_t *qtReply = xcb_query_tree_reply( -+ c->xcb_connection(), qtCookie, NULL); -+ if (!qtReply) -+ break; -+ xcb_window_t root = qtReply->root; -+ xcb_window_t parent = qtReply->parent; -+ free(qtReply); -+ if (window == root) -+ break; -+ window = parent; -+ } -+ return target; -+} - - void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event) - { -@@ -1099,17 +1133,16 @@ void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event - // xcb_convert_selection() that we sent the XdndDrop event to. - at = findTransactionByWindow(event->requestor); - } --// if (at == -1 && event->time == XCB_CURRENT_TIME) { --// // previous Qt versions always requested the data on a child of the target window --// // using CurrentTime... but it could be asking for either drop data or the current drag's data --// Window target = findXdndAwareParent(event->requestor); --// if (target) { --// if (current_target && current_target == target) --// at = -2; --// else --// at = findXdndDropTransactionByWindow(target); --// } --// } -+ -+ if (at == -1 && event->time == XCB_CURRENT_TIME) { -+ xcb_window_t target = findXdndAwareParent(connection(), event->requestor); -+ if (target) { -+ if (current_target == target) -+ at = -2; -+ else -+ at = findTransactionByWindow(target); -+ } -+ } - } - - QDrag *transactionDrag = 0; --- -2.7.4 - diff --git a/0537-QtDBus-finish-all-pending-call-with-error-if-disconn.patch b/0537-QtDBus-finish-all-pending-call-with-error-if-disconn.patch deleted file mode 100644 index 18fdfad..0000000 --- a/0537-QtDBus-finish-all-pending-call-with-error-if-disconn.patch +++ /dev/null @@ -1,205 +0,0 @@ -From 9be4ee52021bbb3227611979319ab5e3106063b2 Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Thu, 3 Mar 2016 21:56:53 -0800 -Subject: [PATCH 537/595] QtDBus: finish all pending call with error if - disconnected - -libdbus will send a local signal if connection gets disconnected. When -this happens, end all pending calls with QDBusError::Disconnected. - -Task-number: QTBUG-51649 -Change-Id: I5c7d2a468bb5da746d0c0e53e458c1e376f186a9 -Reviewed-by: Thiago Macieira ---- - src/dbus/dbus_minimal_p.h | 2 ++ - src/dbus/qdbusconnection_p.h | 3 ++ - src/dbus/qdbusintegrator.cpp | 41 ++++++++++++++++++---- - src/dbus/qdbusutil_p.h | 2 ++ - .../dbus/qdbusconnection/tst_qdbusconnection.cpp | 21 +++++++++++ - .../dbus/qdbusconnection/tst_qdbusconnection.h | 1 + - 6 files changed, 64 insertions(+), 6 deletions(-) - -diff --git a/src/dbus/dbus_minimal_p.h b/src/dbus/dbus_minimal_p.h -index f0a2954..8f25b24 100644 ---- a/src/dbus/dbus_minimal_p.h -+++ b/src/dbus/dbus_minimal_p.h -@@ -99,9 +99,11 @@ typedef dbus_uint32_t dbus_bool_t; - /* dbus-shared.h */ - #define DBUS_SERVICE_DBUS "org.freedesktop.DBus" - #define DBUS_PATH_DBUS "/org/freedesktop/DBus" -+#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local" - #define DBUS_INTERFACE_DBUS "org.freedesktop.DBus" - #define DBUS_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable" - #define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties" -+#define DBUS_INTERFACE_LOCAL "org.freedesktop.DBus.Local" - - #define DBUS_NAME_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */ - #define DBUS_NAME_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */ -diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h -index 565eb83..b733a68 100644 ---- a/src/dbus/qdbusconnection_p.h -+++ b/src/dbus/qdbusconnection_p.h -@@ -260,6 +260,8 @@ private: - - QString getNameOwnerNoCache(const QString &service); - -+ void watchForDBusDisconnection(); -+ - void _q_newConnection(QDBusConnectionPrivate *newConnection); - - protected: -@@ -279,6 +281,7 @@ private slots: - void serviceOwnerChangedNoLock(const QString &name, const QString &oldOwner, const QString &newOwner); - void registerServiceNoLock(const QString &serviceName); - void unregisterServiceNoLock(const QString &serviceName); -+ void handleDBusDisconnection(); - - signals: - void dispatchStatusChanged(); -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index 3be775d..d0468f4 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -1121,6 +1121,12 @@ void QDBusConnectionPrivate::closeConnection() - rootNode.children.clear(); // free resources - } - -+void QDBusConnectionPrivate::handleDBusDisconnection() -+{ -+ while (!pendingCalls.isEmpty()) -+ processFinishedCall(pendingCalls.first()); -+} -+ - void QDBusConnectionPrivate::checkThread() - { - Q_ASSERT(thread() == QDBusConnectionManager::instance()); -@@ -1646,6 +1652,19 @@ void QDBusConnectionPrivate::handleSignal(const QDBusMessage& msg) - handleSignal(key, msg); // third try - } - -+void QDBusConnectionPrivate::watchForDBusDisconnection() -+{ -+ SignalHook hook; -+ // Initialize the hook for Disconnected signal -+ hook.service.clear(); // org.freedesktop.DBus.Local.Disconnected uses empty service name -+ hook.path = QDBusUtil::dbusPathLocal(); -+ hook.obj = this; -+ hook.params << QMetaType::Void; -+ hook.midx = staticMetaObject.indexOfSlot("handleDBusDisconnection()"); -+ Q_ASSERT(hook.midx != -1); -+ signalHooks.insert(QLatin1String("Disconnected:" DBUS_INTERFACE_LOCAL), hook); -+} -+ - void QDBusConnectionPrivate::setServer(QDBusServer *object, DBusServer *s, const QDBusErrorInternal &error) - { - mode = ServerMode; -@@ -1711,6 +1730,8 @@ void QDBusConnectionPrivate::setPeer(DBusConnection *c, const QDBusErrorInternal - qDBusSignalFilter, - this, 0); - -+ watchForDBusDisconnection(); -+ - QMetaObject::invokeMethod(this, "doDispatch", Qt::QueuedConnection); - } - -@@ -1787,6 +1808,8 @@ void QDBusConnectionPrivate::setConnection(DBusConnection *dbc, const QDBusError - Q_ASSERT(hook.midx != -1); - signalHooks.insert(QLatin1String("NameOwnerChanged:" DBUS_INTERFACE_DBUS), hook); - -+ watchForDBusDisconnection(); -+ - qDBusDebug() << this << ": connected successfully"; - - // schedule a dispatch: -@@ -1813,10 +1836,16 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call) - - QDBusMessage &msg = call->replyMessage; - if (call->pending) { -- // decode the message -- DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending); -- msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities); -- q_dbus_message_unref(reply); -+ // when processFinishedCall is called and pending call is not completed, -+ // it means we received disconnected signal from libdbus -+ if (q_dbus_pending_call_get_completed(call->pending)) { -+ // decode the message -+ DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending); -+ msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities); -+ q_dbus_message_unref(reply); -+ } else { -+ msg = QDBusMessage::createError(QDBusError::Disconnected, QDBusUtil::disconnectedErrorMessage()); -+ } - } - qDBusDebug() << connection << "got message reply:" << msg; - -@@ -2116,8 +2145,8 @@ void QDBusConnectionPrivate::sendInternal(QDBusPendingCallPrivate *pcall, void * - pcall->pending = pending; - q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0); - -- // DBus won't notify us when a peer disconnects so we need to track these ourselves -- if (mode == QDBusConnectionPrivate::PeerMode) -+ // DBus won't notify us when a peer disconnects or server terminates so we need to track these ourselves -+ if (mode == QDBusConnectionPrivate::PeerMode || mode == QDBusConnectionPrivate::ClientMode) - pendingCalls.append(pcall); - - return; -diff --git a/src/dbus/qdbusutil_p.h b/src/dbus/qdbusutil_p.h -index 8f5ae92..f4ab9b9 100644 ---- a/src/dbus/qdbusutil_p.h -+++ b/src/dbus/qdbusutil_p.h -@@ -155,6 +155,8 @@ namespace QDBusUtil - { return QStringLiteral(DBUS_SERVICE_DBUS); } - inline QString dbusPath() - { return QStringLiteral(DBUS_PATH_DBUS); } -+ inline QString dbusPathLocal() -+ { return QStringLiteral(DBUS_PATH_LOCAL); } - inline QString dbusInterface() - { - // it's the same string, but just be sure -diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp -index e91f87d..f378091 100644 ---- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp -+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp -@@ -1218,6 +1218,27 @@ void tst_QDBusConnection::callVirtualObjectLocal() - QCOMPARE(obj.replyArguments, subPathReply.arguments()); - } - -+void tst_QDBusConnection::pendingCallWhenDisconnected() -+{ -+ if (!QCoreApplication::instance()) -+ QSKIP("Test requires a QCoreApplication"); -+ -+ QDBusServer *server = new QDBusServer; -+ QDBusConnection con = QDBusConnection::connectToPeer(server->address(), "disconnect"); -+ QTestEventLoop::instance().enterLoop(2); -+ QVERIFY(con.isConnected()); -+ QDBusMessage message = QDBusMessage::createMethodCall("", "/", QString(), "method"); -+ QDBusPendingCall reply = con.asyncCall(message); -+ -+ delete server; -+ -+ QTestEventLoop::instance().enterLoop(2); -+ QVERIFY(!con.isConnected()); -+ QVERIFY(reply.isFinished()); -+ QVERIFY(reply.isError()); -+ QVERIFY(reply.error().type() == QDBusError::Disconnected); -+} -+ - QString MyObject::path; - QString MyObjectWithoutInterface::path; - QString MyObjectWithoutInterface::interface; -diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h -index a53ba32..720e484 100644 ---- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h -+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h -@@ -121,6 +121,7 @@ private slots: - void registerVirtualObject(); - void callVirtualObject(); - void callVirtualObjectLocal(); -+ void pendingCallWhenDisconnected(); - - public: - QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; } --- -2.7.4 - diff --git a/0554-xcb-Fix-drag-and-drop-to-Emacs.patch b/0554-xcb-Fix-drag-and-drop-to-Emacs.patch deleted file mode 100644 index a2b4cf7..0000000 --- a/0554-xcb-Fix-drag-and-drop-to-Emacs.patch +++ /dev/null @@ -1,41 +0,0 @@ -From c6d041e7ca3eb7945bf143a5c4fffcb2b2afba75 Mon Sep 17 00:00:00 2001 -From: Urs Fleisch -Date: Sun, 1 May 2016 14:31:48 +0200 -Subject: [PATCH 554/652] xcb: Fix drag and drop to Emacs. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Unfortunately, the improved patch for QTBUG-45812 fixed things for -Chromium, but did no longer work for Emacs. This fixes commit [269fdb] -to make it work for both Emacs and Chromium. - -Task-number: QTBUG-45812 -Change-Id: I2fca708503f27679681bc6959de1ad94943a063e -Reviewed-by: Dmitry Shachnev -Reviewed-by: Błażej Szczygieł -Reviewed-by: Shawn Rutledge ---- - src/plugins/platforms/xcb/qxcbdrag.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp -index f1428d0..529f91e 100644 ---- a/src/plugins/platforms/xcb/qxcbdrag.cpp -+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp -@@ -1134,10 +1134,10 @@ void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event - at = findTransactionByWindow(event->requestor); - } - -- if (at == -1 && event->time == XCB_CURRENT_TIME) { -+ if (at == -1) { - xcb_window_t target = findXdndAwareParent(connection(), event->requestor); - if (target) { -- if (current_target == target) -+ if (event->time == XCB_CURRENT_TIME && current_target == target) - at = -2; - else - at = findTransactionByWindow(target); --- -2.7.4 - diff --git a/qt5-qtbase.spec b/qt5-qtbase.spec index bdaf9df..47e0d77 100644 --- a/qt5-qtbase.spec +++ b/qt5-qtbase.spec @@ -55,8 +55,8 @@ BuildRequires: pkgconfig(libsystemd) Summary: Qt5 - QtBase components Name: qt5-qtbase -Version: 5.6.0 -Release: 21%{?prerelease:.%{prerelease}}%{?dist} +Version: 5.6.1 +Release: 1%{?prerelease:.%{prerelease}}%{?dist} # See LGPL_EXCEPTIONS.txt, for exception details License: LGPLv2 with exceptions or GPLv3 with exceptions @@ -102,22 +102,6 @@ Patch61: qt5-qtbase-cxxflag.patch ## upstream patches -# Item views, https://bugreports.qt.io/browse/QTBUG-48870 -Patch158: 0058-QtGui-Avoid-rgba64-rgba32-conversion-on-every-pixel-.patch -Patch167: 0067-Search-for-libsystemd-first-fall-back-to-libsystemd-.patch -Patch176: 0076-QListView-fix-skipping-indexes-in-selectedIndexes.patch -Patch187: 0087-xcb-Fix-drag-and-drop-between-xcb-screens.patch -Patch201: 0101-xcb-include-cmath.patch -Patch277: 0177-Fix-GCC-6-Wunused-functions-warnings.patch -Patch278: 0178-qt_common.prf-when-looking-for-GCC-4.6-match-GCC-6-t.patch -Patch301: 0201-alsatest-Fix-the-check-to-treat-alsalib-1.1.x-as-cor.patch -Patch321: 0221-QObject-fix-GCC-6-warning-about-qt_static_metacall-s.patch -Patch393: 0293-Fix-QtDBus-deadlock-inside-kded-kiod.patch -Patch515: 0415-QtDBus-clean-up-signal-hooks-and-object-tree-in-clos.patch -Patch608: 0508-xcb-Fix-drag-and-drop-to-applications-like-Emacs-and.patch -Patch637: 0537-QtDBus-finish-all-pending-call-with-error-if-disconn.patch -Patch654: 0554-xcb-Fix-drag-and-drop-to-Emacs.patch - # macros, be mindful to keep sync'd with macros.qt5 Source10: macros.qt5 %define _qt5 %{name} @@ -370,21 +354,6 @@ RPM macros for building Qt5 packages. %patch60 -p1 -b .moc_system_defines %patch61 -p1 -b .qt5-qtbase-cxxflag -%patch158 -p1 -b .0058 -%patch167 -p1 -b .0067 -%patch176 -p1 -b .0076 -%patch187 -p1 -b .0087 -%patch201 -p1 -b .0101 -%patch277 -p1 -b .0177 -%patch278 -p1 -b .0178 -%patch301 -p1 -b .0201 -%patch321 -p1 -b .0221 -%patch393 -p1 -b .0293 -%patch515 -p1 -b .0415 -%patch608 -p1 -b .0508 -%patch637 -p1 -b .0537 -%patch654 -p1 -b .0554 - %define platform linux-g++ %if 0%{?inject_optflags} @@ -978,6 +947,9 @@ fi %changelog +* Thu Jun 09 2016 Jan Grulich - 5.6.1-1 +- Update to 5.6.1 + * Thu Jun 02 2016 Than Ngo - 5.6.0-21 - drop gcc6 workaround on arm diff --git a/sources b/sources index d796aec..06cee79 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -833a991814a38947aa07da7dfd4eb153 qtbase-opensource-src-5.6.0.tar.xz +b23232190a3df61fe1ba81636987b036 qtbase-opensource-src-5.6.1.tar.xz