Compare commits
9 Commits
Author | SHA1 | Date |
---|---|---|
Rex Dieter | af36745340 | |
Rex Dieter | faeac394c1 | |
Rex Dieter | 51f0f46cf3 | |
Rex Dieter | ef0f887e51 | |
Rex Dieter | ad01462fdc | |
Rex Dieter | 82b494dbc8 | |
Rex Dieter | f90371fa4a | |
Than Ngo | ea881bcd07 | |
Than Ngo | e22e0113cd |
|
@ -1,6 +1 @@
|
|||
/qtbase-everywhere-src-5.12.1.tar.xz
|
||||
/qtbase-everywhere-src-5.12.3.tar.xz
|
||||
/qtbase-everywhere-src-5.12.4.tar.xz
|
||||
/qtbase-everywhere-src-5.12.5.tar.xz
|
||||
/qtbase-everywhere-src-5.13.2.tar.xz
|
||||
/qtbase-everywhere-src-5.14.2.tar.xz
|
||||
/qtbase-opensource-src-5.9.4.tar.xz
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
From d196036024697a75868c1f1626525710495ca428 Mon Sep 17 00:00:00 2001
|
||||
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
||||
Date: Thu, 23 Nov 2017 14:25:04 +0100
|
||||
Subject: [PATCH 12/74] Avoid providing bad pixelDeltas on X11
|
||||
|
||||
With libinput we now get a hardcoded resolution that is unrelated to
|
||||
the hardware. So avoid using that as a real pixel delta and document
|
||||
pixel deltas as being driver specific and unreliable on X11.
|
||||
|
||||
Task-number: QTBUG-59261
|
||||
Change-Id: I9fe86d80e7ccd290ed2e4091d7eafa52cb537d34
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
Reviewed-by: Marco Martin <mart@kde.org>
|
||||
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
|
||||
---
|
||||
src/gui/kernel/qevent.cpp | 1 +
|
||||
src/plugins/platforms/xcb/qxcbconnection_xi2.cpp | 14 ++++++++------
|
||||
2 files changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
|
||||
index 06d52aa78d..c68f9afa56 100644
|
||||
--- a/src/gui/kernel/qevent.cpp
|
||||
+++ b/src/gui/kernel/qevent.cpp
|
||||
@@ -971,6 +971,7 @@ QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF& globalPos,
|
||||
\li scrolling is about to begin, but the distance did not yet change (Qt::ScrollBegin),
|
||||
\li or scrolling has ended and the distance did not change anymore (Qt::ScrollEnd).
|
||||
\endlist
|
||||
+ \note On X11 this value is driver specific and unreliable, use angleDelta() instead
|
||||
*/
|
||||
|
||||
/*!
|
||||
diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
|
||||
index d1d97affe8..94f543fd39 100644
|
||||
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
|
||||
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
|
||||
@@ -953,10 +953,12 @@ void QXcbConnection::xi2HandleScrollEvent(void *event, ScrollingDevice &scrollin
|
||||
double delta = scrollingDevice.lastScrollPosition.y() - value;
|
||||
scrollingDevice.lastScrollPosition.setY(value);
|
||||
angleDelta.setY((delta / scrollingDevice.verticalIncrement) * 120);
|
||||
- // We do not set "pixel" delta if it is only measured in ticks.
|
||||
- if (scrollingDevice.verticalIncrement > 1)
|
||||
+ // With most drivers the increment is 1 for wheels.
|
||||
+ // For libinput it is hardcoded to a useless 15.
|
||||
+ // For a proper touchpad driver it should be in the same order of magnitude as 120
|
||||
+ if (scrollingDevice.verticalIncrement > 15)
|
||||
rawDelta.setY(delta);
|
||||
- else if (scrollingDevice.verticalIncrement < -1)
|
||||
+ else if (scrollingDevice.verticalIncrement < -15)
|
||||
rawDelta.setY(-delta);
|
||||
}
|
||||
}
|
||||
@@ -965,10 +967,10 @@ void QXcbConnection::xi2HandleScrollEvent(void *event, ScrollingDevice &scrollin
|
||||
double delta = scrollingDevice.lastScrollPosition.x() - value;
|
||||
scrollingDevice.lastScrollPosition.setX(value);
|
||||
angleDelta.setX((delta / scrollingDevice.horizontalIncrement) * 120);
|
||||
- // We do not set "pixel" delta if it is only measured in ticks.
|
||||
- if (scrollingDevice.horizontalIncrement > 1)
|
||||
+ // See comment under vertical
|
||||
+ if (scrollingDevice.horizontalIncrement > 15)
|
||||
rawDelta.setX(delta);
|
||||
- else if (scrollingDevice.horizontalIncrement < -1)
|
||||
+ else if (scrollingDevice.horizontalIncrement < -15)
|
||||
rawDelta.setX(-delta);
|
||||
}
|
||||
}
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From 43e444d1ffac9d63eeb2053465d02ce4a6cc7410 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Funk <kevin.funk@kdab.com>
|
||||
Date: Fri, 29 Sep 2017 23:53:29 +0200
|
||||
Subject: [PATCH 16/74] CMake: qt5_add_binary_resource: re-run if needed
|
||||
|
||||
qt5_add_binary_resources() macro did not recompile for CMake generated
|
||||
input before this patch.
|
||||
|
||||
Adding the input files to the DEPENDS option corrects this issue:
|
||||
|
||||
Task-number: QTBUG-60714
|
||||
Change-Id: I0f46918c6f1079fed7ee1b21305b18ff38f863f8
|
||||
Reviewed-by: David Faure <david.faure@kdab.com>
|
||||
---
|
||||
src/corelib/Qt5CoreMacros.cmake | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake
|
||||
index 8b65db95cb..8d3dbe3ecf 100644
|
||||
--- a/src/corelib/Qt5CoreMacros.cmake
|
||||
+++ b/src/corelib/Qt5CoreMacros.cmake
|
||||
@@ -257,7 +257,7 @@ function(QT5_ADD_BINARY_RESOURCES target )
|
||||
add_custom_command(OUTPUT ${rcc_destination}
|
||||
COMMAND ${Qt5Core_RCC_EXECUTABLE}
|
||||
ARGS ${rcc_options} --binary --name ${target} --output ${rcc_destination} ${infiles}
|
||||
- DEPENDS ${rc_depends} ${out_depends} VERBATIM)
|
||||
+ DEPENDS ${rc_depends} ${out_depends} ${infiles} VERBATIM)
|
||||
add_custom_target(${target} ALL DEPENDS ${rcc_destination})
|
||||
endfunction()
|
||||
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
From 276fa8383a7535765be7182883ef4aade17ce013 Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Thu, 2 Apr 2020 12:08:41 -0300
|
||||
Subject: [PATCH 44/49] QLibrary: fix deadlock caused by fix to QTBUG-39642
|
||||
|
||||
Commit ae6f73e8566fa76470937aca737141183929a5ec inserted a mutex around
|
||||
the entire load_sys(). We had reasoed that deadlocks would only occur if
|
||||
the object creation in instance() recursed into its own instance(),
|
||||
which was already a bug. But we had forgotten that dlopen()/
|
||||
LoadLibrary() executes initialization code from the module being loaded,
|
||||
which could cause a recursion back into the same QPluginLoader or
|
||||
QLibrary object. This recursion is benign because the module *is* loaded
|
||||
and dlopen()/LoadLibrary() returns the same handle.
|
||||
|
||||
[ChangeLog][QtCore][QLibrary and QPluginLoader] Fixed a deadlock that
|
||||
would happen if the plugin or library being loaded has load-time
|
||||
initialization code (C++ global variables) that recursed back into the
|
||||
same QLibrary or QPluginLoader object.
|
||||
|
||||
PS: QLibraryPrivate::loadPlugin() updates pluginState outside a mutex
|
||||
lock, so pluginState should be made an atomic variable. Once that is
|
||||
done, we'll only need locking the mutex to update errorString (no
|
||||
locking before loading).
|
||||
|
||||
Fixes: QTBUG-83207
|
||||
Task-number: QTBUG-39642
|
||||
Change-Id: Ibdc95e9af7bd456a94ecfffd160209304e5ab2eb
|
||||
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||
Reviewed-by: David Faure <david.faure@kdab.com>
|
||||
---
|
||||
src/corelib/plugin/qlibrary.cpp | 2 --
|
||||
src/corelib/plugin/qlibrary_unix.cpp | 4 ++++
|
||||
src/corelib/plugin/qlibrary_win.cpp | 3 +++
|
||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
|
||||
index ddb053c26f..be9d92b204 100644
|
||||
--- a/src/corelib/plugin/qlibrary.cpp
|
||||
+++ b/src/corelib/plugin/qlibrary.cpp
|
||||
@@ -576,9 +576,7 @@ bool QLibraryPrivate::load()
|
||||
|
||||
Q_TRACE(QLibraryPrivate_load_entry, fileName);
|
||||
|
||||
- mutex.lock();
|
||||
bool ret = load_sys();
|
||||
- mutex.unlock();
|
||||
if (qt_debug_component()) {
|
||||
if (ret) {
|
||||
qDebug() << "loaded library" << fileName;
|
||||
diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp
|
||||
index 017aa97b66..a5c72f81d9 100644
|
||||
--- a/src/corelib/plugin/qlibrary_unix.cpp
|
||||
+++ b/src/corelib/plugin/qlibrary_unix.cpp
|
||||
@@ -123,6 +123,7 @@ QStringList QLibraryPrivate::prefixes_sys()
|
||||
|
||||
bool QLibraryPrivate::load_sys()
|
||||
{
|
||||
+ QMutexLocker locker(&mutex);
|
||||
QString attempt;
|
||||
QFileSystemEntry fsEntry(fileName);
|
||||
|
||||
@@ -213,6 +214,7 @@ bool QLibraryPrivate::load_sys()
|
||||
}
|
||||
#endif
|
||||
|
||||
+ locker.unlock();
|
||||
bool retry = true;
|
||||
Handle hnd = nullptr;
|
||||
for (int prefix = 0; retry && !hnd && prefix < prefixes.size(); prefix++) {
|
||||
@@ -273,6 +275,8 @@ bool QLibraryPrivate::load_sys()
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+
|
||||
+ locker.relock();
|
||||
if (!hnd) {
|
||||
errorString = QLibrary::tr("Cannot load library %1: %2").arg(fileName, qdlerror());
|
||||
}
|
||||
diff --git a/src/corelib/plugin/qlibrary_win.cpp b/src/corelib/plugin/qlibrary_win.cpp
|
||||
index 000bf76276..ef58724be8 100644
|
||||
--- a/src/corelib/plugin/qlibrary_win.cpp
|
||||
+++ b/src/corelib/plugin/qlibrary_win.cpp
|
||||
@@ -78,6 +78,7 @@ bool QLibraryPrivate::load_sys()
|
||||
// fileName
|
||||
//
|
||||
// NB If it's a plugin we do not ever try the ".dll" extension
|
||||
+ QMutexLocker locker(&mutex);
|
||||
QStringList attempts;
|
||||
|
||||
if (pluginState != IsAPlugin)
|
||||
@@ -95,6 +96,7 @@ bool QLibraryPrivate::load_sys()
|
||||
attempts.prepend(QDir::rootPath() + fileName);
|
||||
#endif
|
||||
|
||||
+ locker.unlock();
|
||||
Handle hnd = nullptr;
|
||||
for (const QString &attempt : qAsConst(attempts)) {
|
||||
#ifndef Q_OS_WINRT
|
||||
@@ -115,6 +117,7 @@ bool QLibraryPrivate::load_sys()
|
||||
#ifndef Q_OS_WINRT
|
||||
SetErrorMode(oldmode);
|
||||
#endif
|
||||
+ locker.relock();
|
||||
if (!hnd) {
|
||||
errorString = QLibrary::tr("Cannot load library %1: %2").arg(
|
||||
QDir::toNativeSeparators(fileName), qt_error_string());
|
||||
--
|
||||
2.25.2
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
From e211ab76d766878b4dbe88901b9a7a4a70ce7332 Mon Sep 17 00:00:00 2001
|
||||
From: Andre de la Rocha <andre.rocha@qt.io>
|
||||
Date: Thu, 18 Jan 2018 18:43:25 +0100
|
||||
Subject: [PATCH 45/74] Handle OOM condition in the validation of plugin
|
||||
metadata
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
A large plugin dll (e.g., one with many MB of debug info) could cause
|
||||
a 32-bit application to crash when the entire dll file could not fit
|
||||
within the address space of the process. The code for validating a
|
||||
plugin library and retrieving metadata from it first tried to map
|
||||
the entire file in memory, which failed for large files, returning
|
||||
NULL. In this case, the code tried then to read the entire file via
|
||||
QFile::readAll(), which deep below caused a bad_alloc exception in
|
||||
malloc, resulting in the termination of the application. This change
|
||||
handles the case where the library could not be mapped into memory,
|
||||
in spite of memory mapping being supported, by reporting the error
|
||||
and returning false, making the plugin unavailable.
|
||||
|
||||
[ChangeLog][QtCore][QPluginLoader] Fixed a bug that would cause the
|
||||
Qt plugin scanning system to allocate too much memory and possibly
|
||||
crash the process.
|
||||
|
||||
Task-number: QTBUG-65197
|
||||
Change-Id: I8c7235d86175c9fcd2b87fcb1151570da9b9ebe3
|
||||
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
||||
---
|
||||
src/corelib/plugin/qlibrary.cpp | 29 +++++++++++++++++++++--------
|
||||
1 file changed, 21 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
|
||||
index ebad7f1751..9e6e70756f 100644
|
||||
--- a/src/corelib/plugin/qlibrary.cpp
|
||||
+++ b/src/corelib/plugin/qlibrary.cpp
|
||||
@@ -237,21 +237,34 @@ static bool findPatternUnloaded(const QString &library, QLibraryPrivate *lib)
|
||||
if (lib)
|
||||
lib->errorString = file.errorString();
|
||||
if (qt_debug_component()) {
|
||||
- qWarning("%s: %s", (const char*) QFile::encodeName(library),
|
||||
+ qWarning("%s: %s", QFile::encodeName(library).constData(),
|
||||
qPrintable(QSystemError::stdString()));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QByteArray data;
|
||||
- const char *filedata = 0;
|
||||
ulong fdlen = file.size();
|
||||
- filedata = (char *) file.map(0, fdlen);
|
||||
+ const char *filedata = reinterpret_cast<char *>(file.map(0, fdlen));
|
||||
+
|
||||
if (filedata == 0) {
|
||||
- // try reading the data into memory instead
|
||||
- data = file.readAll();
|
||||
- filedata = data.constData();
|
||||
- fdlen = data.size();
|
||||
+ if (uchar *mapdata = file.map(0, 1)) {
|
||||
+ file.unmap(mapdata);
|
||||
+ // Mapping is supported, but failed for the entire file, likely due to OOM.
|
||||
+ // Return false, as readAll() would cause a bad_alloc and terminate the process.
|
||||
+ if (lib)
|
||||
+ lib->errorString = QLibrary::tr("Out of memory while loading plugin '%1'.").arg(library);
|
||||
+ if (qt_debug_component()) {
|
||||
+ qWarning("%s: %s", QFile::encodeName(library).constData(),
|
||||
+ qPrintable(QSystemError::stdString(ENOMEM)));
|
||||
+ }
|
||||
+ return false;
|
||||
+ } else {
|
||||
+ // Try reading the data into memory instead.
|
||||
+ data = file.readAll();
|
||||
+ filedata = data.constData();
|
||||
+ fdlen = data.size();
|
||||
+ }
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -745,7 +758,7 @@ void QLibraryPrivate::updatePluginState()
|
||||
if (qt_debug_component()) {
|
||||
qWarning("In %s:\n"
|
||||
" Plugin uses incompatible Qt library (%d.%d.%d) [%s]",
|
||||
- (const char*) QFile::encodeName(fileName),
|
||||
+ QFile::encodeName(fileName).constData(),
|
||||
(qt_version&0xff0000) >> 16, (qt_version&0xff00) >> 8, qt_version&0xff,
|
||||
debug ? "debug" : "release");
|
||||
}
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From a69a0e8254b79c62fad7372e8c14f66d440ad744 Mon Sep 17 00:00:00 2001
|
||||
From: Laszlo Agocs <laszlo.agocs@qt.io>
|
||||
Date: Tue, 23 Jan 2018 10:21:49 +0100
|
||||
Subject: [PATCH 50/74] glx: Avoid losing the stereo flag in QSurfaceFormat
|
||||
|
||||
Task-number: QTBUG-59636
|
||||
Change-Id: I38394009993e92ab9db853a1450687fc48e471f5
|
||||
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
||||
---
|
||||
src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
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 e2e573f0e1..fc1806f982 100644
|
||||
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
|
||||
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
|
||||
@@ -134,7 +134,11 @@ static void updateFormatFromContext(QSurfaceFormat &format)
|
||||
}
|
||||
|
||||
format.setProfile(QSurfaceFormat::NoProfile);
|
||||
+ const bool isStereo = format.testOption(QSurfaceFormat::StereoBuffers);
|
||||
format.setOptions(QSurfaceFormat::FormatOptions());
|
||||
+ // Restore flags that come from the VisualInfo/FBConfig.
|
||||
+ if (isStereo)
|
||||
+ format.setOption(QSurfaceFormat::StereoBuffers);
|
||||
|
||||
if (format.renderableType() == QSurfaceFormat::OpenGL) {
|
||||
if (format.version() < qMakePair(3, 0)) {
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,226 @@
|
|||
From 3adfcbf1ed9b63c3ce41d7417658db3836fd3530 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Ehrlicher <ch.ehrlicher@gmx.de>
|
||||
Date: Sun, 21 Jan 2018 19:55:40 +0100
|
||||
Subject: [PATCH 68/74] QHeaderView: properly restore section data after
|
||||
layoutChanged()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
QHeaderView is doing a complete rebuild of the sections when the layout
|
||||
changed because everything could have happened. But since layoutChanged
|
||||
is also called during e.g. sorting, the old data must be restored when
|
||||
possible.
|
||||
|
||||
Task-number: QTBUG-65478
|
||||
Change-Id: I088d4d843cad362b97df6dc5e0dcb9819b13547f
|
||||
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
|
||||
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
||||
---
|
||||
src/widgets/itemviews/qheaderview.cpp | 88 ++++++++++++++++------
|
||||
src/widgets/itemviews/qheaderview_p.h | 11 +--
|
||||
.../itemviews/qheaderview/tst_qheaderview.cpp | 13 +++-
|
||||
3 files changed, 82 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp
|
||||
index 0905a20812..e1aec3f4bd 100644
|
||||
--- a/src/widgets/itemviews/qheaderview.cpp
|
||||
+++ b/src/widgets/itemviews/qheaderview.cpp
|
||||
@@ -351,7 +351,7 @@ void QHeaderView::setModel(QAbstractItemModel *model)
|
||||
if (model == this->model())
|
||||
return;
|
||||
Q_D(QHeaderView);
|
||||
- d->persistentHiddenSections.clear();
|
||||
+ d->layoutChangePersistentSections.clear();
|
||||
if (d->model && d->model != QAbstractItemModelPrivate::staticEmptyModel()) {
|
||||
if (d->orientation == Qt::Horizontal) {
|
||||
QObject::disconnect(d->model, SIGNAL(columnsInserted(QModelIndex,int,int)),
|
||||
@@ -2072,14 +2072,28 @@ void QHeaderViewPrivate::_q_layoutAboutToBeChanged()
|
||||
|| model->columnCount(root) == 0)
|
||||
return;
|
||||
|
||||
- if (hiddenSectionSize.count() == 0)
|
||||
- return;
|
||||
+ layoutChangePersistentSections.clear();
|
||||
+ layoutChangePersistentSections.reserve(std::min(10, sectionItems.count()));
|
||||
+ // after layoutChanged another section can be last stretched section
|
||||
+ if (stretchLastSection) {
|
||||
+ const int visual = visualIndex(lastSectionLogicalIdx);
|
||||
+ sectionItems[visual].size = lastSectionSize;
|
||||
+ }
|
||||
+ for (int i = 0; i < sectionItems.size(); ++i) {
|
||||
+ const auto &s = sectionItems.at(i);
|
||||
+ // only add if the section is not default and not visually moved
|
||||
+ if (s.size == defaultSectionSize && !s.isHidden && s.resizeMode == globalResizeMode)
|
||||
+ continue;
|
||||
|
||||
- for (int i = 0; i < sectionItems.count(); ++i)
|
||||
- if (isVisualIndexHidden(i)) // ### note that we are using column or row 0
|
||||
- persistentHiddenSections.append(orientation == Qt::Horizontal
|
||||
- ? model->index(0, logicalIndex(i), root)
|
||||
- : model->index(logicalIndex(i), 0, root));
|
||||
+ // ### note that we are using column or row 0
|
||||
+ layoutChangePersistentSections.append({orientation == Qt::Horizontal
|
||||
+ ? model->index(0, logicalIndex(i), root)
|
||||
+ : model->index(logicalIndex(i), 0, root),
|
||||
+ s});
|
||||
+
|
||||
+ if (layoutChangePersistentSections.size() > 1000)
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
void QHeaderViewPrivate::_q_layoutChanged()
|
||||
@@ -2087,25 +2101,57 @@ void QHeaderViewPrivate::_q_layoutChanged()
|
||||
Q_Q(QHeaderView);
|
||||
viewport->update();
|
||||
|
||||
- const auto hiddenSections = persistentHiddenSections;
|
||||
- persistentHiddenSections.clear();
|
||||
-
|
||||
- clear();
|
||||
- q->initializeSections();
|
||||
- invalidateCachedSizeHint();
|
||||
+ const auto oldPersistentSections = layoutChangePersistentSections;
|
||||
+ layoutChangePersistentSections.clear();
|
||||
|
||||
- if (modelIsEmpty()) {
|
||||
+ const int newCount = modelSectionCount();
|
||||
+ const int oldCount = sectionItems.size();
|
||||
+ if (newCount == 0) {
|
||||
+ clear();
|
||||
+ if (oldCount != 0)
|
||||
+ emit q->sectionCountChanged(oldCount, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
- for (const auto &index : hiddenSections) {
|
||||
- if (index.isValid()) {
|
||||
- const int logical = (orientation == Qt::Horizontal
|
||||
- ? index.column()
|
||||
- : index.row());
|
||||
- q->setSectionHidden(logical, true);
|
||||
+ // adjust section size
|
||||
+ if (newCount != oldCount) {
|
||||
+ const int min = qBound(0, oldCount, newCount - 1);
|
||||
+ q->initializeSections(min, newCount - 1);
|
||||
+ }
|
||||
+ // reset sections
|
||||
+ sectionItems.fill(SectionItem(defaultSectionSize, globalResizeMode), newCount);
|
||||
+
|
||||
+ // all hidden sections are in oldPersistentSections
|
||||
+ hiddenSectionSize.clear();
|
||||
+
|
||||
+ for (const auto &item : oldPersistentSections) {
|
||||
+ const auto &index = item.index;
|
||||
+ if (!index.isValid())
|
||||
+ continue;
|
||||
+
|
||||
+ const int newLogicalIndex = (orientation == Qt::Horizontal
|
||||
+ ? index.column()
|
||||
+ : index.row());
|
||||
+ // the new visualIndices are already adjusted / reset by initializeSections()
|
||||
+ const int newVisualIndex = visualIndex(newLogicalIndex);
|
||||
+ auto &newSection = sectionItems[newVisualIndex];
|
||||
+ newSection = item.section;
|
||||
+
|
||||
+ if (newSection.isHidden) {
|
||||
+ // otherwise setSectionHidden will return without doing anything
|
||||
+ newSection.isHidden = false;
|
||||
+ q->setSectionHidden(newLogicalIndex, true);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ recalcSectionStartPos();
|
||||
+ length = headerLength();
|
||||
+
|
||||
+ if (stretchLastSection) {
|
||||
+ // force rebuild of stretched section later on
|
||||
+ lastSectionLogicalIdx = -1;
|
||||
+ maybeRestorePrevLastSectionAndStretchLast();
|
||||
+ }
|
||||
}
|
||||
|
||||
/*!
|
||||
diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h
|
||||
index 8fc8b88aa5..c9c2cf8493 100644
|
||||
--- a/src/widgets/itemviews/qheaderview_p.h
|
||||
+++ b/src/widgets/itemviews/qheaderview_p.h
|
||||
@@ -231,10 +231,6 @@ public:
|
||||
: model->rowCount(root));
|
||||
}
|
||||
|
||||
- inline bool modelIsEmpty() const {
|
||||
- return (model->rowCount(root) == 0 || model->columnCount(root) == 0);
|
||||
- }
|
||||
-
|
||||
inline void doDelayedResizeSections() {
|
||||
if (!delayedResize.isActive())
|
||||
delayedResize.start(0, q_func());
|
||||
@@ -304,7 +300,6 @@ public:
|
||||
QLabel *sectionIndicator;
|
||||
#endif
|
||||
QHeaderView::ResizeMode globalResizeMode;
|
||||
- QList<QPersistentModelIndex> persistentHiddenSections;
|
||||
mutable bool sectionStartposRecalc;
|
||||
int resizeContentsPrecision;
|
||||
// header sections
|
||||
@@ -335,6 +330,11 @@ public:
|
||||
};
|
||||
|
||||
QVector<SectionItem> sectionItems;
|
||||
+ struct LayoutChangeItem {
|
||||
+ QPersistentModelIndex index;
|
||||
+ SectionItem section;
|
||||
+ };
|
||||
+ QVector<LayoutChangeItem> layoutChangePersistentSections;
|
||||
|
||||
void createSectionItems(int start, int end, int size, QHeaderView::ResizeMode mode);
|
||||
void removeSectionsFromSectionItems(int start, int end);
|
||||
@@ -388,6 +388,7 @@ public:
|
||||
|
||||
};
|
||||
Q_DECLARE_TYPEINFO(QHeaderViewPrivate::SectionItem, Q_PRIMITIVE_TYPE);
|
||||
+Q_DECLARE_TYPEINFO(QHeaderViewPrivate::LayoutChangeItem, Q_MOVABLE_TYPE);
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
|
||||
index 90019a1798..6dae2cf8e4 100644
|
||||
--- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
|
||||
+++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
|
||||
@@ -2251,10 +2251,6 @@ void tst_QHeaderView::QTBUG6058_reset()
|
||||
|
||||
void tst_QHeaderView::QTBUG7833_sectionClicked()
|
||||
{
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
QTableView tv;
|
||||
QStandardItemModel *sim = new QStandardItemModel(&tv);
|
||||
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(&tv);
|
||||
@@ -2278,11 +2274,20 @@ void tst_QHeaderView::QTBUG7833_sectionClicked()
|
||||
tv.horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
|
||||
|
||||
tv.setModel(proxyModel);
|
||||
+ const int section4Size = tv.horizontalHeader()->sectionSize(4) + 1;
|
||||
+ tv.horizontalHeader()->resizeSection(4, section4Size);
|
||||
tv.setColumnHidden(5, true);
|
||||
tv.setColumnHidden(6, true);
|
||||
tv.horizontalHeader()->swapSections(8, 10);
|
||||
tv.sortByColumn(1, Qt::AscendingOrder);
|
||||
|
||||
+ QCOMPARE(tv.isColumnHidden(5), true);
|
||||
+ QCOMPARE(tv.isColumnHidden(6), true);
|
||||
+ QCOMPARE(tv.horizontalHeader()->sectionsMoved(), true);
|
||||
+ QCOMPARE(tv.horizontalHeader()->logicalIndex(8), 10);
|
||||
+ QCOMPARE(tv.horizontalHeader()->logicalIndex(10), 8);
|
||||
+ QCOMPARE(tv.horizontalHeader()->sectionSize(4), section4Size);
|
||||
+
|
||||
QSignalSpy clickedSpy(tv.horizontalHeader(), SIGNAL(sectionClicked(int)));
|
||||
QSignalSpy pressedSpy(tv.horizontalHeader(), SIGNAL(sectionPressed(int)));
|
||||
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,170 @@
|
|||
From 4a7771f206d4b29be549d3827c36a46679d90de6 Mon Sep 17 00:00:00 2001
|
||||
From: Eike Hein <hein@kde.org>
|
||||
Date: Sun, 7 Jan 2018 13:02:01 +0900
|
||||
Subject: [PATCH 69/74] QSimpleDrag: Fix mouse release coords for delayed event
|
||||
transmission
|
||||
|
||||
On platforms such as XCB, the drag cursor pixmap is shown via a window
|
||||
(a QShapedPixmapWindow) under the cursor.
|
||||
|
||||
The mouse button release event at the end of the drag is received in
|
||||
this QXcbWindow, but intercepted by an event filter that QSimpleDrag
|
||||
installs on the QApplication. It then resends it unmodified(!) after
|
||||
the drag has ended and the drag pixmap window destroyed, causing it to
|
||||
be delivered to the new top-level window.
|
||||
|
||||
The local coordinates in the unmodified QMouseEvent are local to the
|
||||
drag pixmap window and don't match the window it is delayed-transmitted
|
||||
to.
|
||||
|
||||
This ends up having fatal, user-visible effects particularly in Qt
|
||||
Quick: QQuickWindow synthesizes a hover event once per frame using
|
||||
the last received mouse coordinates, here: the release posted by
|
||||
QSimpleDrag. This is done to update the hover event state for items
|
||||
under the cursor when the mouse hasn't moved (e.g. QQuickMouseArea::
|
||||
containsMouse). The bogus event coordinates in the release event then
|
||||
usually end up causing an item near the top-left of the QQuickWindow
|
||||
to assume it is hovered (because drag pixmap windows tend to be small),
|
||||
even when the mouse cursor is actually far away from it at the end of
|
||||
the drag.
|
||||
|
||||
This shows up e.g. in the Plasma 5 desktop, where dragging an icon
|
||||
on the desktop will cause the icon at the top-left of the screen (if
|
||||
any) to switch to hovered state, as the release coordinates on the
|
||||
drag pixmap window (showing a dragged icon) fall into the geometry
|
||||
of the top-left icon.
|
||||
|
||||
QSimpleDrag contains a topLevelAt() function to find the top-level
|
||||
window under the global cursor coordinates that is not the drag
|
||||
pixmap window. This is used by the drop event delivery code.
|
||||
|
||||
This patch uses this function to find the relevant top-level window,
|
||||
then asks it to map the global cusor coordinates to its local
|
||||
coordinate system, then synthesizes a new QMouseEvent with local
|
||||
coordinates computed in this fashion. As a result the window now
|
||||
gets a release event with coordinates that make sense and are
|
||||
correct.
|
||||
|
||||
Task-number: QTBUG-66103
|
||||
Change-Id: I04ebe6ccd4a991fdd4b540ff0227973ea8896a9d
|
||||
Reviewed-by: Eike Hein <hein@kde.org>
|
||||
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
||||
---
|
||||
src/gui/kernel/qsimpledrag.cpp | 32 +++++++++++++++++++++++++++-----
|
||||
src/gui/kernel/qsimpledrag_p.h | 6 +++---
|
||||
2 files changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/gui/kernel/qsimpledrag.cpp b/src/gui/kernel/qsimpledrag.cpp
|
||||
index a1e25dc53c..87d3ba5915 100644
|
||||
--- a/src/gui/kernel/qsimpledrag.cpp
|
||||
+++ b/src/gui/kernel/qsimpledrag.cpp
|
||||
@@ -58,6 +58,7 @@
|
||||
|
||||
#include <QtCore/QEventLoop>
|
||||
#include <QtCore/QDebug>
|
||||
+#include <QtCore/QLoggingCategory>
|
||||
|
||||
#include <private/qguiapplication_p.h>
|
||||
#include <private/qdnd_p.h>
|
||||
@@ -69,6 +70,8 @@ QT_BEGIN_NAMESPACE
|
||||
|
||||
#ifndef QT_NO_DRAGANDDROP
|
||||
|
||||
+Q_LOGGING_CATEGORY(lcDnd, "qt.gui.dnd")
|
||||
+
|
||||
static QWindow* topLevelAt(const QPoint &pos)
|
||||
{
|
||||
QWindowList list = QGuiApplication::topLevelWindows();
|
||||
@@ -94,10 +97,10 @@ static QWindow* topLevelAt(const QPoint &pos)
|
||||
*/
|
||||
|
||||
QBasicDrag::QBasicDrag() :
|
||||
- m_restoreCursor(false), m_eventLoop(0),
|
||||
+ m_current_window(nullptr), m_restoreCursor(false), m_eventLoop(nullptr),
|
||||
m_executed_drop_action(Qt::IgnoreAction), m_can_drop(false),
|
||||
- m_drag(0), m_drag_icon_window(0), m_useCompositing(true),
|
||||
- m_screen(Q_NULLPTR)
|
||||
+ m_drag(nullptr), m_drag_icon_window(nullptr), m_useCompositing(true),
|
||||
+ m_screen(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -161,6 +164,7 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e)
|
||||
return true; // Eat all mouse move events
|
||||
}
|
||||
case QEvent::MouseButtonRelease:
|
||||
+ {
|
||||
disableEventFilter();
|
||||
if (canDrop()) {
|
||||
QPoint nativePosition = getNativeMousePos(e, m_drag_icon_window);
|
||||
@@ -169,8 +173,25 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e)
|
||||
cancel();
|
||||
}
|
||||
exitDndEventLoop();
|
||||
- QCoreApplication::postEvent(o, new QMouseEvent(*static_cast<QMouseEvent *>(e)));
|
||||
+
|
||||
+ // If a QShapedPixmapWindow (drag feedback) is being dragged along, the
|
||||
+ // mouse event's localPos() will be relative to that, which is useless.
|
||||
+ // We want a position relative to the window where the drag ends, if possible (?).
|
||||
+ // If there is no such window (belonging to this Qt application),
|
||||
+ // make the event relative to the window where the drag started. (QTBUG-66103)
|
||||
+ const QMouseEvent *release = static_cast<QMouseEvent *>(e);
|
||||
+ const QWindow *releaseWindow = topLevelAt(release->globalPos());
|
||||
+ qCDebug(lcDnd) << "mouse released over" << releaseWindow << "after drag from" << m_current_window << "globalPos" << release->globalPos();
|
||||
+ if (!releaseWindow)
|
||||
+ releaseWindow = m_current_window;
|
||||
+ QPoint releaseWindowPos = (releaseWindow ? releaseWindow->mapFromGlobal(release->globalPos()) : release->globalPos());
|
||||
+ QMouseEvent *newRelease = new QMouseEvent(release->type(),
|
||||
+ releaseWindowPos, releaseWindowPos, release->screenPos(),
|
||||
+ release->button(), release->buttons(),
|
||||
+ release->modifiers(), release->source());
|
||||
+ QCoreApplication::postEvent(o, newRelease);
|
||||
return true; // defer mouse release events until drag event loop has returned
|
||||
+ }
|
||||
case QEvent::MouseButtonDblClick:
|
||||
case QEvent::Wheel:
|
||||
return true;
|
||||
@@ -349,7 +370,7 @@ static inline QPoint fromNativeGlobalPixels(const QPoint &point)
|
||||
into account.
|
||||
*/
|
||||
|
||||
-QSimpleDrag::QSimpleDrag() : m_current_window(0)
|
||||
+QSimpleDrag::QSimpleDrag()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -373,6 +394,7 @@ void QSimpleDrag::startDrag()
|
||||
updateCursor(Qt::IgnoreAction);
|
||||
}
|
||||
setExecutedDropAction(Qt::IgnoreAction);
|
||||
+ qCDebug(lcDnd) << "drag began from" << m_current_window<< "cursor pos" << QCursor::pos() << "can drop?" << canDrop();
|
||||
}
|
||||
|
||||
void QSimpleDrag::cancel()
|
||||
diff --git a/src/gui/kernel/qsimpledrag_p.h b/src/gui/kernel/qsimpledrag_p.h
|
||||
index 0b8a0bc703..bbd7f7f4bb 100644
|
||||
--- a/src/gui/kernel/qsimpledrag_p.h
|
||||
+++ b/src/gui/kernel/qsimpledrag_p.h
|
||||
@@ -105,6 +105,9 @@ protected:
|
||||
|
||||
QDrag *drag() const { return m_drag; }
|
||||
|
||||
+protected:
|
||||
+ QWindow *m_current_window;
|
||||
+
|
||||
private:
|
||||
void enableEventFilter();
|
||||
void disableEventFilter();
|
||||
@@ -132,9 +135,6 @@ protected:
|
||||
virtual void cancel() Q_DECL_OVERRIDE;
|
||||
virtual void move(const QPoint &globalPos) Q_DECL_OVERRIDE;
|
||||
virtual void drop(const QPoint &globalPos) Q_DECL_OVERRIDE;
|
||||
-
|
||||
-private:
|
||||
- QWindow *m_current_window;
|
||||
};
|
||||
|
||||
#endif // QT_NO_DRAGANDDROP
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From 4cd90a3579986ae7441c3e982a5f34cdfd92c152 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Richardson <arichardson.kde@gmail.com>
|
||||
Date: Tue, 17 Jan 2017 22:31:04 +0000
|
||||
Subject: [PATCH 70/74] Fix native QFileDialog initial selection for remote
|
||||
URLs
|
||||
|
||||
When using QFileDialog::getOpenFileUrl() with dir set to e.g.
|
||||
"sftp://foo/bar.cpp" we call q->selectDirectoryUrl("sftp://foo")
|
||||
followed by q->selectFile("bar.cpp").
|
||||
Inside QFileDialog::selectFile() we unconditionally convert "bar.cpp"
|
||||
to an absolute URL and then call d->selectFile_sys("$CWD/bar.cpp")
|
||||
This then calls platform integration that detects that an absolute URL
|
||||
is being passed to selectFile() and therefore overrides the initial
|
||||
directory.
|
||||
|
||||
Initially reported as https://bugs.kde.org/show_bug.cgi?id=374913
|
||||
|
||||
This is a regression that appeared some time between Qt 5.7.0 and 5.7.1.
|
||||
I have not had time to bisect this but the only commit that may have
|
||||
change behavior in that time range appears to be
|
||||
007f92c6eef6191c48da0c44916591d48813ae62.
|
||||
|
||||
Change-Id: I6968abe9ed5c5b9de067c453a7e9d2c5cdb3a190
|
||||
Reviewed-by: Christoph Resch
|
||||
Reviewed-by: David Faure <david.faure@kdab.com>
|
||||
---
|
||||
src/widgets/dialogs/qfiledialog.cpp | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
|
||||
index 8d37969be4..cb2c534b24 100644
|
||||
--- a/src/widgets/dialogs/qfiledialog.cpp
|
||||
+++ b/src/widgets/dialogs/qfiledialog.cpp
|
||||
@@ -2830,7 +2830,10 @@ void QFileDialogPrivate::init(const QUrl &directory, const QString &nameFilter,
|
||||
if (!nameFilter.isEmpty())
|
||||
q->setNameFilter(nameFilter);
|
||||
q->setDirectoryUrl(workingDirectory(directory));
|
||||
- q->selectFile(initialSelection(directory));
|
||||
+ if (directory.isLocalFile())
|
||||
+ q->selectFile(initialSelection(directory));
|
||||
+ else
|
||||
+ q->selectUrl(directory);
|
||||
|
||||
#ifndef QT_NO_SETTINGS
|
||||
// Try to restore from the FileDialog settings group; if it fails, fall back
|
||||
--
|
||||
2.14.3
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
diff -up qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json.firebird qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json
|
||||
--- qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json.firebird 2019-01-28 11:11:52.000000000 -0600
|
||||
+++ qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/configure.json 2019-02-03 13:41:27.392305128 -0600
|
||||
@@ -49,10 +49,11 @@
|
||||
"ibase": {
|
||||
"label": "InterBase",
|
||||
"test": {},
|
||||
- "headers": "ibase.h",
|
||||
+ "headers": "firebird/ibase.h",
|
||||
"sources": [
|
||||
{ "libs": "-lgds32_ms", "condition": "config.win32" },
|
||||
- { "libs": "-lgds", "condition": "!config.win32" }
|
||||
+ { "libs": "-lgds", "condition": "!config.win32" },
|
||||
+ { "libs": "-lfbclient", "condition": "!config.win32" }
|
||||
]
|
||||
},
|
||||
"mysql": {
|
||||
diff -up qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h.firebird qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
|
||||
--- qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h.firebird 2019-01-28 11:11:52.000000000 -0600
|
||||
+++ qtbase-everywhere-src-5.12.1/src/plugins/sqldrivers/ibase/qsql_ibase_p.h 2019-02-03 13:27:30.683142996 -0600
|
||||
@@ -52,7 +52,7 @@
|
||||
//
|
||||
|
||||
#include <QtSql/qsqldriver.h>
|
||||
-#include <ibase.h>
|
||||
+#include <firebird/ibase.h>
|
||||
|
||||
#ifdef QT_PLUGIN
|
||||
#define Q_EXPORT_SQLDRIVER_IBASE
|
|
@ -0,0 +1,32 @@
|
|||
diff --git a/src/plugins/sqldrivers/configure.json b/src/plugins/sqldrivers/configure.json
|
||||
index 234f880..7b13671 100644
|
||||
--- a/src/plugins/sqldrivers/configure.json
|
||||
+++ b/src/plugins/sqldrivers/configure.json
|
||||
@@ -50,11 +50,12 @@
|
||||
"ibase": {
|
||||
"label": "InterBase",
|
||||
"test": {
|
||||
- "include": "ibase.h"
|
||||
+ "include": "firebird/ibase.h"
|
||||
},
|
||||
"sources": [
|
||||
{ "libs": "-lgds32_ms", "condition": "config.win32" },
|
||||
- { "libs": "-lgds", "condition": "!config.win32" }
|
||||
+ { "libs": "-lgds", "condition": "!config.win32" },
|
||||
+ { "libs": "-lfbclient", "condition": "!config.win32" }
|
||||
]
|
||||
},
|
||||
"mysql": {
|
||||
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase_p.h b/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
|
||||
index c7cee41..6a9c56c 100644
|
||||
--- a/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
|
||||
+++ b/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
|
||||
@@ -52,7 +52,7 @@
|
||||
//
|
||||
|
||||
#include <QtSql/qsqldriver.h>
|
||||
-#include <ibase.h>
|
||||
+#include <firebird/ibase.h>
|
||||
|
||||
#ifdef QT_PLUGIN
|
||||
#define Q_EXPORT_SQLDRIVER_IBASE
|
File diff suppressed because it is too large
Load Diff
|
@ -1,146 +0,0 @@
|
|||
From f432c08882ffebe5074ea28de871559a98a4d094 Mon Sep 17 00:00:00 2001
|
||||
From: Lars Knoll <lars.knoll@qt.io>
|
||||
Date: Wed, 26 Feb 2020 10:42:10 +0100
|
||||
Subject: Add an expansion limit for entities
|
||||
|
||||
Recursively defined entities can easily exhaust all available
|
||||
memory. Limit entity expansion to a default of 4096 characters to
|
||||
avoid DoS attacks when a user loads untrusted content.
|
||||
|
||||
[ChangeLog][QtCore][QXmlStream] QXmlStreamReader does now
|
||||
limit the expansion of entities to 4096 characters. Documents where
|
||||
a single entity expands to more characters than the limit are not
|
||||
considered well formed. The limit is there to avoid DoS attacks through
|
||||
recursively expanding entities when loading untrusted content. Qt 5.15
|
||||
will add methods that allow changing that limit.
|
||||
|
||||
Fixes: QTBUG-47417
|
||||
Change-Id: I94387815d74fcf34783e136387ee57fac5ded0c9
|
||||
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
|
||||
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
|
||||
(cherry picked from commit fd4be84d23a0db4186cb42e736a9de3af722c7f7)
|
||||
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
||||
---
|
||||
src/corelib/serialization/qxmlstream.g | 14 ++++++++++++-
|
||||
src/corelib/serialization/qxmlstream_p.h | 14 ++++++++++++-
|
||||
.../serialization/qxmlstream/tst_qxmlstream.cpp | 23 ++++++++++++++++++++--
|
||||
3 files changed, 47 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/serialization/qxmlstream.g b/src/corelib/serialization/qxmlstream.g
|
||||
index 10bfcd491c..5726bafb26 100644
|
||||
--- a/src/corelib/serialization/qxmlstream.g
|
||||
+++ b/src/corelib/serialization/qxmlstream.g
|
||||
@@ -277,9 +277,19 @@ public:
|
||||
QHash<QStringView, Entity> entityHash;
|
||||
QHash<QStringView, Entity> parameterEntityHash;
|
||||
QXmlStreamSimpleStack<Entity *>entityReferenceStack;
|
||||
+ int entityExpansionLimit = 4096;
|
||||
+ int entityLength = 0;
|
||||
inline bool referenceEntity(Entity &entity) {
|
||||
if (entity.isCurrentlyReferenced) {
|
||||
- raiseWellFormedError(QXmlStream::tr("Recursive entity detected."));
|
||||
+ raiseWellFormedError(QXmlStream::tr("Self-referencing entity detected."));
|
||||
+ return false;
|
||||
+ }
|
||||
+ // entityLength represents the amount of additional characters the
|
||||
+ // entity expands into (can be negative for e.g. &). It's used to
|
||||
+ // avoid DoS attacks through recursive entity expansions
|
||||
+ entityLength += entity.value.size() - entity.name.size() - 2;
|
||||
+ if (entityLength > entityExpansionLimit) {
|
||||
+ raiseWellFormedError(QXmlStream::tr("Entity expands to more characters than the entity expansion limit."));
|
||||
return false;
|
||||
}
|
||||
entity.isCurrentlyReferenced = true;
|
||||
@@ -830,6 +840,8 @@ entity_done ::= ENTITY_DONE;
|
||||
/.
|
||||
case $rule_number:
|
||||
entityReferenceStack.pop()->isCurrentlyReferenced = false;
|
||||
+ if (entityReferenceStack.isEmpty())
|
||||
+ entityLength = 0;
|
||||
clearSym();
|
||||
break;
|
||||
./
|
||||
diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
|
||||
index 61f501f81b..31053f8e0b 100644
|
||||
--- a/src/corelib/serialization/qxmlstream_p.h
|
||||
+++ b/src/corelib/serialization/qxmlstream_p.h
|
||||
@@ -774,9 +774,19 @@ public:
|
||||
QHash<QStringView, Entity> entityHash;
|
||||
QHash<QStringView, Entity> parameterEntityHash;
|
||||
QXmlStreamSimpleStack<Entity *>entityReferenceStack;
|
||||
+ int entityExpansionLimit = 4096;
|
||||
+ int entityLength = 0;
|
||||
inline bool referenceEntity(Entity &entity) {
|
||||
if (entity.isCurrentlyReferenced) {
|
||||
- raiseWellFormedError(QXmlStream::tr("Recursive entity detected."));
|
||||
+ raiseWellFormedError(QXmlStream::tr("Self-referencing entity detected."));
|
||||
+ return false;
|
||||
+ }
|
||||
+ // entityLength represents the amount of additional characters the
|
||||
+ // entity expands into (can be negative for e.g. &). It's used to
|
||||
+ // avoid DoS attacks through recursive entity expansions
|
||||
+ entityLength += entity.value.size() - entity.name.size() - 2;
|
||||
+ if (entityLength > entityExpansionLimit) {
|
||||
+ raiseWellFormedError(QXmlStream::tr("Entity expands to more characters than the entity expansion limit."));
|
||||
return false;
|
||||
}
|
||||
entity.isCurrentlyReferenced = true;
|
||||
@@ -1308,6 +1318,8 @@ bool QXmlStreamReaderPrivate::parse()
|
||||
|
||||
case 10:
|
||||
entityReferenceStack.pop()->isCurrentlyReferenced = false;
|
||||
+ if (entityReferenceStack.isEmpty())
|
||||
+ entityLength = 0;
|
||||
clearSym();
|
||||
break;
|
||||
|
||||
diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
|
||||
index 8fdf91b090..1f9a0d575d 100644
|
||||
--- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
|
||||
+++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
|
||||
@@ -393,8 +393,6 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
- QXmlStreamReader reader(&inputFile);
|
||||
-
|
||||
/* See testcases.dtd which reads: 'Nonvalidating parsers
|
||||
* must also accept "invalid" testcases, but validating ones must reject them.' */
|
||||
if(type == QLatin1String("invalid") || type == QLatin1String("valid"))
|
||||
@@ -580,6 +578,8 @@ private slots:
|
||||
void roundTrip() const;
|
||||
void roundTrip_data() const;
|
||||
|
||||
+ void entityExpansionLimit() const;
|
||||
+
|
||||
private:
|
||||
static QByteArray readFile(const QString &filename);
|
||||
|
||||
@@ -1756,6 +1756,25 @@ void tst_QXmlStream::roundTrip_data() const
|
||||
"</root>\n";
|
||||
}
|
||||
|
||||
+void tst_QXmlStream::entityExpansionLimit() const
|
||||
+{
|
||||
+ QString xml = QStringLiteral("<?xml version=\"1.0\"?>"
|
||||
+ "<!DOCTYPE foo ["
|
||||
+ "<!ENTITY a \"0123456789\" >"
|
||||
+ "<!ENTITY b \"&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;\" >"
|
||||
+ "<!ENTITY c \"&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;\" >"
|
||||
+ "<!ENTITY d \"&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;\" >"
|
||||
+ "]>"
|
||||
+ "<foo>&d;&d;&d;</foo>");
|
||||
+ {
|
||||
+ QXmlStreamReader reader(xml);
|
||||
+ do {
|
||||
+ reader.readNext();
|
||||
+ } while (!reader.atEnd());
|
||||
+ QCOMPARE(reader.error(), QXmlStreamReader::NotWellFormedError);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void tst_QXmlStream::roundTrip() const
|
||||
{
|
||||
QFETCH(QString, in);
|
||||
--
|
||||
cgit v0.2.1
|
456
qt5-qtbase.spec
456
qt5-qtbase.spec
|
@ -8,19 +8,6 @@
|
|||
%endif
|
||||
%global openssl -openssl-linked
|
||||
|
||||
%if 0%{?fedora} < 29
|
||||
%ifarch %{ix86}
|
||||
%global no_sse2 -no-sse2
|
||||
%endif
|
||||
%endif
|
||||
|
||||
# workaround https://bugzilla.redhat.com/show_bug.cgi?id=1668865
|
||||
# for current stable releases
|
||||
%if 0%{?fedora} && 0%{?fedora} < 30
|
||||
%global no_feature_statx -no-feature-statx
|
||||
%global no_feature_renameat2 -no-feature-renameat2
|
||||
%endif
|
||||
|
||||
# support qtchooser (adds qtchooser .conf file)
|
||||
%global qtchooser 1
|
||||
%if 0%{?qtchooser}
|
||||
|
@ -40,26 +27,40 @@
|
|||
|
||||
%global rpm_macros_dir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
|
||||
|
||||
%if 0%{?fedora} > 21
|
||||
# use external qt_settings pkg
|
||||
%global qt_settings 1
|
||||
%endif
|
||||
|
||||
# See http://bugzilla.redhat.com/1279265
|
||||
%if 0%{?fedora} < 24
|
||||
%global inject_optflags 1
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} > 23 || 0%{?rhel} > 6
|
||||
%global journald -journald
|
||||
BuildRequires: pkgconfig(libsystemd)
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} > 23
|
||||
# gcc6: FTBFS
|
||||
%global qt5_deprecated_flag -Wno-deprecated-declarations
|
||||
# gcc6: Qt assumes this in places
|
||||
%global qt5_null_flag -fno-delete-null-pointer-checks
|
||||
%endif
|
||||
|
||||
%global examples 1
|
||||
## skip for now, until we're better at it --rex
|
||||
#global tests 1
|
||||
%global tests 1
|
||||
|
||||
Name: qt5-qtbase
|
||||
Summary: Qt5 - QtBase components
|
||||
Version: 5.14.2
|
||||
Version: 5.9.4
|
||||
Release: 4%{?dist}
|
||||
|
||||
# See LGPL_EXCEPTIONS.txt, for exception details
|
||||
License: LGPLv2 with exceptions or GPLv3 with exceptions
|
||||
Url: http://qt-project.org/
|
||||
%global majmin %(echo %{version} | cut -d. -f1-2)
|
||||
Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-src-%{version}.tar.xz
|
||||
Source0: https://download.qt.io/official_releases/qt/5.9/%{version}/submodules/%{qt_module}-opensource-src-%{version}.tar.xz
|
||||
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1227295
|
||||
Source1: qtlogging.ini
|
||||
|
@ -78,11 +79,8 @@ Source10: macros.qt5-qtbase
|
|||
# support multilib optflags
|
||||
Patch2: qtbase-multilib_optflags.patch
|
||||
|
||||
# borrowed from opensuse
|
||||
# track private api via properly versioned symbols
|
||||
# downside: binaries produced with these differently-versioned symbols are no longer
|
||||
# compatible with qt-project.org's Qt binary releases.
|
||||
Patch8: tell-the-truth-about-private-api.patch
|
||||
# fix QTBUG-35459 (too low entityCharacterLimit=1024 for CVE-2013-4549)
|
||||
Patch4: qtbase-opensource-src-5.3.2-QTBUG-35459.patch
|
||||
|
||||
# upstreamable patches
|
||||
# namespace QT_VERSION_CHECK to workaround major/minor being pre-defined (#1396755)
|
||||
|
@ -99,37 +97,39 @@ Patch51: qtbase-hidpi_scale_at_192.patch
|
|||
# 2. Workaround sysmacros.h (pre)defining major/minor a breaking stuff
|
||||
Patch52: qtbase-opensource-src-5.7.1-moc_macros.patch
|
||||
|
||||
# CMake generates wrong -isystem /usr/include compilations flags with Qt5::Gui
|
||||
# https://bugzilla.redhat.com/1704474
|
||||
Patch53: qtbase-everywhere-src-5.12.1-qt5gui_cmake_isystem_includes.patch
|
||||
|
||||
# respect QMAKE_LFLAGS_RELEASE when building qmake
|
||||
Patch54: qtbase-qmake_LFLAGS.patch
|
||||
|
||||
# don't use relocatable heuristics to guess prefix when using -no-feature-relocatable
|
||||
Patch55: qtbase-everywhere-src-5.14.2-no_relocatable.patch
|
||||
# QMimeType: remove unwanted *.bin as preferredSuffix for octet-stream
|
||||
# This leads to an automatically appended .bin when saving a file.
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=101667
|
||||
# https://bugs.kde.org/382437
|
||||
# Fixed upstream in shared-mime-info 1.10
|
||||
Patch53: qtbase-fdo101667.patch
|
||||
|
||||
# drop -O3 and make -O2 by default
|
||||
Patch61: qt5-qtbase-cxxflag.patch
|
||||
|
||||
# backport from upstream
|
||||
Patch63: qt5-qtbase-5.9.1-openssl11.patch
|
||||
|
||||
# support firebird version 3.x
|
||||
Patch64: qt5-qtbase-5.12.1-firebird.patch
|
||||
Patch64: qt5-qtbase-5.9.1-firebird.patch
|
||||
|
||||
# fix for new mariadb
|
||||
Patch65: qtbase-opensource-src-5.9.0-mysql.patch
|
||||
Patch66: qtbase-mariadb.patch
|
||||
|
||||
# python3
|
||||
Patch68: qtbase-everywhere-src-5.11.1-python3.patch
|
||||
# use categorized logging for xcb log entries
|
||||
# https://bugreports.qt.io/browse/QTBUG-55167
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1497564
|
||||
Patch67: https://bugreports.qt.io/secure/attachment/66353/xcberror_filter.patch
|
||||
|
||||
# https://fedoraproject.org/wiki/Changes/Qt_Wayland_By_Default_On_Gnome
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1732129
|
||||
Patch80: qtbase-use-wayland-on-gnome.patch
|
||||
|
||||
# glibc stat
|
||||
|
||||
## upstream patches
|
||||
Patch100: qt5-qtbase-CVE-2015-9541.patch
|
||||
Patch144: 0044-QLibrary-fix-deadlock-caused-by-fix-to-QTBUG-39642.patch
|
||||
## upstream patches (5.9 branch)
|
||||
Patch112: 0012-Avoid-providing-bad-pixelDeltas-on-X11.patch
|
||||
Patch116: 0016-CMake-qt5_add_binary_resource-re-run-if-needed.patch
|
||||
Patch445: 0045-Handle-OOM-condition-in-the-validation-of-plugin-met.patch
|
||||
Patch150: 0050-glx-Avoid-losing-the-stereo-flag-in-QSurfaceFormat.patch
|
||||
Patch168: 0068-QHeaderView-properly-restore-section-data-after-layo.patch
|
||||
Patch169: 0069-QSimpleDrag-Fix-mouse-release-coords-for-delayed-eve.patch
|
||||
Patch170: 0070-Fix-native-QFileDialog-initial-selection-for-remote-.patch
|
||||
|
||||
# Do not check any files in %%{_qt5_plugindir}/platformthemes/ for requires.
|
||||
# Those themes are there for platform integration. If the required libraries are
|
||||
|
@ -144,15 +144,11 @@ BuildRequires: cups-devel
|
|||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: findutils
|
||||
BuildRequires: libjpeg-devel
|
||||
BuildRequires: libmng-devel
|
||||
BuildRequires: libtiff-devel
|
||||
BuildRequires: pkgconfig(alsa)
|
||||
# required for -accessibility
|
||||
BuildRequires: pkgconfig(atspi-2)
|
||||
%if 0%{?use_clang}
|
||||
BuildRequires: clang >= 3.7.0
|
||||
%else
|
||||
BuildRequires: gcc-c++
|
||||
%endif
|
||||
# http://bugzilla.redhat.com/1196359
|
||||
%if 0%{?fedora} || 0%{?rhel} > 6
|
||||
|
@ -176,7 +172,7 @@ BuildRequires: openssl-devel%{?openssl11: >= 1.1}
|
|||
%endif
|
||||
BuildRequires: pkgconfig(libpulse) pkgconfig(libpulse-mainloop-glib)
|
||||
%if 0%{?fedora}
|
||||
#global xkbcommon -system-xkbcommon
|
||||
%global xkbcommon -system-xkbcommon
|
||||
BuildRequires: pkgconfig(libinput)
|
||||
BuildRequires: pkgconfig(xcb-xkb) >= 1.10
|
||||
BuildRequires: pkgconfig(xkbcommon) >= 0.4.1
|
||||
|
@ -186,19 +182,15 @@ BuildRequires: pkgconfig(xkbcommon-x11) >= 0.4.1
|
|||
%if 0%{?rhel} == 6
|
||||
%global xcb -qt-xcb
|
||||
%endif
|
||||
#global xkbcommon -qt-xkbcommon
|
||||
%global xkbcommon -qt-xkbcommon
|
||||
Provides: bundled(libxkbcommon) = 0.4.1
|
||||
%endif
|
||||
BuildRequires: pkgconfig(xkeyboard-config)
|
||||
%if 0%{?fedora} || 0%{?rhel} > 6
|
||||
%global egl 1
|
||||
BuildRequires: libEGL-devel
|
||||
BuildRequires: pkgconfig(egl)
|
||||
BuildRequires: pkgconfig(gbm)
|
||||
## TODO: apparently only needed if building opengl_es2 support, do we actually use it? -- rex
|
||||
## this dep was removed in rawhide with introduction of mesa-19.1
|
||||
%if 0%{?fedora} < 30
|
||||
BuildRequires: pkgconfig(glesv2)
|
||||
%endif
|
||||
%global sqlite -system-sqlite
|
||||
BuildRequires: pkgconfig(sqlite3) >= 3.7
|
||||
%if 0%{?fedora} > 22
|
||||
|
@ -217,9 +209,7 @@ BuildRequires: libicu-devel
|
|||
BuildRequires: pkgconfig(xcb) pkgconfig(xcb-glx) pkgconfig(xcb-icccm) pkgconfig(xcb-image) pkgconfig(xcb-keysyms) pkgconfig(xcb-renderutil)
|
||||
BuildRequires: pkgconfig(zlib)
|
||||
BuildRequires: perl-generators
|
||||
# see patch68
|
||||
BuildRequires: python3
|
||||
BuildRequires: qt5-rpm-macros
|
||||
BuildRequires: qt5-rpm-macros >= 5.7.1
|
||||
|
||||
%if 0%{?tests}
|
||||
BuildRequires: dbus-x11
|
||||
|
@ -246,12 +236,12 @@ Requires: %{name}-common = %{version}-%{release}
|
|||
%global tds -no-sql-tds
|
||||
%endif
|
||||
|
||||
# workaround gold linker bug(s) by not using it
|
||||
# workaround gold linker bug by not using it
|
||||
# https://bugzilla.redhat.com/1458003
|
||||
# https://sourceware.org/bugzilla/show_bug.cgi?id=21074
|
||||
# reportedly fixed or worked-around, re-enable if there's evidence of problems -- rex
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1635973
|
||||
%if 0%{?fedora} > 26
|
||||
%global use_gold_linker -no-use-gold-linker
|
||||
%endif
|
||||
|
||||
%description
|
||||
Qt is a software toolkit for developing applications.
|
||||
|
@ -271,29 +261,20 @@ BuildArch: noarch
|
|||
|
||||
%package devel
|
||||
Summary: Development files for %{name}
|
||||
Provides: %{name}-private-devel = %{version}-%{release}
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: %{name}-gui%{?_isa}
|
||||
%if 0%{?egl}
|
||||
Requires: libEGL-devel
|
||||
Requires: pkgconfig(egl)
|
||||
%endif
|
||||
Requires: pkgconfig(gl)
|
||||
Requires: qt5-rpm-macros
|
||||
Requires: qt5-rpm-macros >= 5.7.1
|
||||
%if 0%{?use_clang}
|
||||
Requires: clang >= 3.7.0
|
||||
%endif
|
||||
%description devel
|
||||
%{summary}.
|
||||
|
||||
%package private-devel
|
||||
Summary: Development files for %{name} private APIs
|
||||
# upgrade path, when private-devel was introduced
|
||||
Obsoletes: %{name}-devel < 5.12.1-3
|
||||
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
|
||||
# QtPrintSupport/private requires cups/ppd.h
|
||||
Requires: cups-devel
|
||||
%description private-devel
|
||||
%{summary}.
|
||||
|
||||
%package examples
|
||||
Summary: Programming examples for %{name}
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
@ -344,7 +325,7 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
|||
|
||||
%package postgresql
|
||||
Summary: PostgreSQL driver for Qt5's SQL classes
|
||||
BuildRequires: libpq-devel
|
||||
BuildRequires: postgresql-devel
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
%description postgresql
|
||||
%{summary}.
|
||||
|
@ -375,34 +356,51 @@ Qt5 libraries used for drawing widgets and OpenGL items.
|
|||
|
||||
|
||||
%prep
|
||||
%setup -q -n %{qt_module}-everywhere-src-%{version}
|
||||
%setup -q -n %{qt_module}-opensource-src-%{version}
|
||||
|
||||
## upstream fixes
|
||||
|
||||
# omit '-b .tell-the-truth-about-private-api' so it doesn't end up in installed files -- rdieter
|
||||
%patch8 -p1
|
||||
%patch4 -p1 -b .QTBUG-35459
|
||||
|
||||
%patch50 -p1 -b .QT_VERSION_CHECK
|
||||
# FIXME/TODO : rebase or drop -- rdieter
|
||||
#patch51 -p1 -b .hidpi_scale_at_192
|
||||
%patch51 -p1 -b .hidpi_scale_at_192
|
||||
%patch52 -p1 -b .moc_macros
|
||||
%patch53 -p1 -b .qt5gui_cmake_isystem_includes
|
||||
%patch54 -p1 -b .qmake_LFLAGS
|
||||
%patch55 -p1 -b .no_relocatable
|
||||
%patch53 -p1 -b .fdo101667
|
||||
%patch61 -p1 -b .qt5-qtbase-cxxflag
|
||||
%if 0%{?openssl11}
|
||||
%patch63 -p1 -b .openssl11
|
||||
%endif
|
||||
%patch64 -p1 -b .firebird
|
||||
%if 0%{?fedora} > 27
|
||||
%patch65 -p1 -b .mysql
|
||||
%endif
|
||||
%patch68 -p1
|
||||
|
||||
%if 0%{?fedora} > 30
|
||||
%patch80 -p1 -b .use-wayland-on-gnome.patch
|
||||
%endif
|
||||
%patch66 -p1 -b .mariadb
|
||||
%patch67 -p1 -b .xcberror_filter
|
||||
|
||||
## upstream patches
|
||||
%patch100 -p1 -b .CVE-2015-9541
|
||||
%patch144 -p1 -b .0044
|
||||
%patch112 -p1 -b .0012
|
||||
%patch116 -p1 -b .0016
|
||||
%patch445 -p1 -b .0045
|
||||
%patch150 -p1 -b .0050
|
||||
#patch168 -p1 -b .0068
|
||||
%patch169 -p1 -b .0069
|
||||
%patch170 -p1 -b .0070
|
||||
|
||||
%if 0%{?inject_optflags}
|
||||
## adjust $RPM_OPT_FLAGS
|
||||
|
||||
%patch2 -p1 -b .multilib_optflags
|
||||
# drop backup file(s), else they get installed too, http://bugzilla.redhat.com/639463
|
||||
rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
|
||||
|
||||
sed -i -e "s|-O2|$RPM_OPT_FLAGS|g" \
|
||||
mkspecs/%{platform}/qmake.conf
|
||||
|
||||
sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 $RPM_LD_FLAGS|" \
|
||||
mkspecs/common/g++-unix.conf
|
||||
|
||||
# undefine QMAKE_STRIP (and friends), so we get useful -debuginfo pkgs (#1065636)
|
||||
sed -i -e 's|^\(QMAKE_STRIP.*=\).*$|\1|g' mkspecs/common/linux.conf
|
||||
%endif
|
||||
|
||||
# move some bundled libs to ensure they're not accidentally used
|
||||
pushd src/3rdparty
|
||||
|
@ -427,6 +425,10 @@ sed -i -e "s|^#!/usr/bin/env perl$|#!%{__perl}|" \
|
|||
bin/syncqt.pl \
|
||||
mkspecs/features/data/unix/findclasslist.pl
|
||||
|
||||
# Fix missing private includes https://bugreports.qt.io/browse/QTBUG-37417
|
||||
sed -e '/CMAKE_NO_PRIVATE_INCLUDES\ \=\ true/d' -i \
|
||||
mkspecs/features/create_cmake.prf
|
||||
|
||||
|
||||
%build
|
||||
## FIXME/TODO:
|
||||
|
@ -482,7 +484,9 @@ export MAKEFLAGS="%{?_smp_mflags}"
|
|||
-no-pch \
|
||||
-no-rpath \
|
||||
-no-separate-debug-info \
|
||||
%{?no_sse2} \
|
||||
%ifarch %{ix86}
|
||||
-no-sse2 \
|
||||
%endif
|
||||
-no-strip \
|
||||
-system-libjpeg \
|
||||
-system-libpng \
|
||||
|
@ -495,22 +499,21 @@ export MAKEFLAGS="%{?_smp_mflags}"
|
|||
-system-zlib \
|
||||
%{?use_gold_linker} \
|
||||
-no-directfb \
|
||||
-no-feature-relocatable \
|
||||
%{?no_feature_renameat2} \
|
||||
%{?no_feature_statx} \
|
||||
QMAKE_CFLAGS_RELEASE="${CFLAGS:-$RPM_OPT_FLAGS}" \
|
||||
QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS:-$RPM_OPT_FLAGS}" \
|
||||
QMAKE_LFLAGS_RELEASE="${LDFLAGS:-$RPM_LD_FLAGS}"
|
||||
|
||||
%if ! 0%{?inject_optflags}
|
||||
# ensure qmake build using optflags (which can happen if not munging qmake.conf defaults)
|
||||
make clean -C qmake
|
||||
%make_build -C qmake all binary \
|
||||
make %{?_smp_mflags} -C qmake \
|
||||
QMAKE_CFLAGS_RELEASE="${CFLAGS:-$RPM_OPT_FLAGS}" \
|
||||
QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS:-$RPM_OPT_FLAGS}" \
|
||||
QMAKE_LFLAGS_RELEASE="${LDFLAGS:-$RPM_LD_FLAGS}" \
|
||||
QMAKE_STRIP=
|
||||
%endif
|
||||
|
||||
%make_build
|
||||
make %{?_smp_mflags}
|
||||
|
||||
|
||||
%install
|
||||
|
@ -540,7 +543,7 @@ translationdir=%{_qt5_translationdir}
|
|||
|
||||
Name: Qt5
|
||||
Description: Qt5 Configuration
|
||||
Version: %{version}
|
||||
Version: 5.9.4
|
||||
EOF
|
||||
|
||||
# rpm macros
|
||||
|
@ -584,7 +587,6 @@ popd
|
|||
mkdir -p %{buildroot}%{_sysconfdir}/xdg/qtchooser
|
||||
pushd %{buildroot}%{_sysconfdir}/xdg/qtchooser
|
||||
echo "%{_qt5_bindir}" > 5-%{__isa_bits}.conf
|
||||
## FIXME/TODO: verify qtchooser (still) happy if _qt5_prefix uses %%_prefix instead of %%_libdir/qt5
|
||||
echo "%{_qt5_prefix}" >> 5-%{__isa_bits}.conf
|
||||
# alternatives targets
|
||||
touch default.conf 5.conf
|
||||
|
@ -605,8 +607,6 @@ popd
|
|||
|
||||
install -p -m755 -D %{SOURCE6} %{buildroot}%{_sysconfdir}/X11/xinit/xinitrc.d/10-qt5-check-opengl2.sh
|
||||
|
||||
# f29+ enables sse2 unconditionally on ix86 -- rex
|
||||
%if 0%{?fedora} < 29
|
||||
# fix bz#1442553 multilib issue
|
||||
privat_header_file=%{buildroot}%{_qt5_headerdir}/QtCore/%{version}/QtCore/private/qconfig_p.h
|
||||
grep -v QT_FEATURE_sse2 $privat_header_file > ${privat_header_file}.me
|
||||
|
@ -618,17 +618,12 @@ cat >>${privat_header_file}<<EOF
|
|||
#define QT_FEATURE_sse2 -1
|
||||
#endif
|
||||
EOF
|
||||
%endif
|
||||
|
||||
# install privat headers for qtxcb
|
||||
mkdir -p %{buildroot}%{_qt5_headerdir}/QtXcb
|
||||
install -m 644 src/plugins/platforms/xcb/*.h %{buildroot}%{_qt5_headerdir}/QtXcb/
|
||||
|
||||
|
||||
%check
|
||||
# verify Qt5.pc
|
||||
export PKG_CONFIG_PATH=%{buildroot}%{_libdir}/pkgconfig
|
||||
test "$(pkg-config --modversion Qt5)" = "%{version}"
|
||||
%if 0%{?tests}
|
||||
## see tests/README for expected environment (running a plasma session essentially)
|
||||
## we are not quite there yet
|
||||
|
@ -637,7 +632,7 @@ export PATH=%{buildroot}%{_qt5_bindir}:$PATH
|
|||
export LD_LIBRARY_PATH=%{buildroot}%{_qt5_libdir}
|
||||
# dbus tests error out when building if session bus is not available
|
||||
dbus-launch --exit-with-session \
|
||||
%make_build sub-tests -k ||:
|
||||
make sub-tests %{?_smp_mflags} -k ||:
|
||||
xvfb-run -a --server-args="-screen 0 1280x1024x32" \
|
||||
dbus-launch --exit-with-session \
|
||||
time \
|
||||
|
@ -660,7 +655,7 @@ fi
|
|||
%endif
|
||||
|
||||
%post
|
||||
%{?ldconfig}
|
||||
/sbin/ldconfig
|
||||
%if 0%{?qtchooser}
|
||||
%{_sbindir}/update-alternatives \
|
||||
--install %{_sysconfdir}/xdg/qtchooser/5.conf \
|
||||
|
@ -676,7 +671,7 @@ fi
|
|||
%endif
|
||||
|
||||
%postun
|
||||
%{?ldconfig}
|
||||
/sbin/ldconfig
|
||||
%if 0%{?qtchooser}
|
||||
if [ $1 -eq 0 ]; then
|
||||
%{_sbindir}/update-alternatives \
|
||||
|
@ -690,9 +685,8 @@ fi
|
|||
%endif
|
||||
|
||||
%files
|
||||
%license LICENSE.FDL
|
||||
%license LICENSE.GPL*
|
||||
%license LICENSE.LGPL*
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license LICENSE.LGPL* LGPL_EXCEPTION.txt LICENSE.FDL
|
||||
%if 0%{?qtchooser}
|
||||
%dir %{_sysconfdir}/xdg/qtchooser
|
||||
# not editable config files, so not using %%config here
|
||||
|
@ -708,6 +702,7 @@ fi
|
|||
%{_qt5_libdir}/libQt5Sql.so.5*
|
||||
%{_qt5_libdir}/libQt5Test.so.5*
|
||||
%{_qt5_libdir}/libQt5Xml.so.5*
|
||||
%{_qt5_libdir}/libQt5EglFSDeviceIntegration.so.5*
|
||||
%dir %{_qt5_libdir}/cmake/
|
||||
%dir %{_qt5_libdir}/cmake/Qt5/
|
||||
%dir %{_qt5_libdir}/cmake/Qt5Concurrent/
|
||||
|
@ -723,13 +718,9 @@ fi
|
|||
%dir %{_qt5_libdir}/cmake/Qt5Xml/
|
||||
%dir %{_qt5_docdir}/
|
||||
%{_qt5_docdir}/global/
|
||||
%{_qt5_docdir}/config/
|
||||
%{_qt5_importdir}/
|
||||
%{_qt5_translationdir}/
|
||||
%if "%{_qt5_prefix}" != "%{_prefix}"
|
||||
%dir %{_qt5_prefix}/
|
||||
%endif
|
||||
%dir %{_qt5_archdatadir}/
|
||||
%dir %{_qt5_datadir}/
|
||||
%{_qt5_datadir}/qtlogging.ini
|
||||
%dir %{_qt5_libexecdir}/
|
||||
|
@ -772,8 +763,6 @@ fi
|
|||
%{_bindir}/uic*
|
||||
%{_bindir}/qlalr
|
||||
%{_bindir}/fixqt4headers.pl
|
||||
%{_bindir}/qvkgen
|
||||
%{_bindir}/tracegen
|
||||
%{_qt5_bindir}/moc*
|
||||
%{_qt5_bindir}/qdbuscpp2xml*
|
||||
%{_qt5_bindir}/qdbusxml2cpp*
|
||||
|
@ -783,7 +772,6 @@ fi
|
|||
%{_qt5_bindir}/uic*
|
||||
%{_qt5_bindir}/qlalr
|
||||
%{_qt5_bindir}/fixqt4headers.pl
|
||||
%{_qt5_bindir}/qvkgen
|
||||
%if "%{_qt5_headerdir}" != "%{_includedir}"
|
||||
%dir %{_qt5_headerdir}
|
||||
%endif
|
||||
|
@ -802,8 +790,6 @@ fi
|
|||
%{_qt5_headerdir}/QtXml/
|
||||
%{_qt5_headerdir}/QtEglFSDeviceIntegration
|
||||
%{_qt5_headerdir}/QtInputSupport
|
||||
%{_qt5_headerdir}/QtEdidSupport
|
||||
%{_qt5_headerdir}/QtXkbCommonSupport
|
||||
%{_qt5_archdatadir}/mkspecs/
|
||||
%{_qt5_libdir}/libQt5Concurrent.prl
|
||||
%{_qt5_libdir}/libQt5Concurrent.so
|
||||
|
@ -848,25 +834,6 @@ fi
|
|||
%{_qt5_libdir}/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5Xml/Qt5XmlConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5/Qt5ModuleLocation.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5AccessibilitySupport/Qt5AccessibilitySupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5Bootstrap/Qt5BootstrapConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5DeviceDiscoverySupport/Qt5DeviceDiscoverySupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5EdidSupport/Qt5EdidSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5EglFSDeviceIntegration/Qt5EglFSDeviceIntegrationConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5EglFsKmsSupport/Qt5EglFsKmsSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5EglSupport/Qt5EglSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5EventDispatcherSupport/Qt5EventDispatcherSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5FbSupport/Qt5FbSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5FontDatabaseSupport/Qt5FontDatabaseSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5GlxSupport/Qt5GlxSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5InputSupport/Qt5InputSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5KmsSupport/Qt5KmsSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5LinuxAccessibilitySupport/Qt5LinuxAccessibilitySupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5PlatformCompositorSupport/Qt5PlatformCompositorSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5ServiceSupport/Qt5ServiceSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5ThemeSupport/Qt5ThemeSupportConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5XcbQpa/Qt5XcbQpaConfig*.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5XkbCommonSupport/Qt5XkbCommonSupportConfig*.cmake
|
||||
%{_qt5_libdir}/pkgconfig/Qt5.pc
|
||||
%{_qt5_libdir}/pkgconfig/Qt5Concurrent.pc
|
||||
%{_qt5_libdir}/pkgconfig/Qt5Core.pc
|
||||
|
@ -883,15 +850,7 @@ fi
|
|||
%{_qt5_libdir}/libQt5EglFsKmsSupport.prl
|
||||
%{_qt5_libdir}/libQt5EglFsKmsSupport.so
|
||||
%endif
|
||||
%{_qt5_libdir}/qt5/bin/tracegen
|
||||
## private-devel globs
|
||||
# keep mkspecs/modules stuff in -devel for now, https://bugzilla.redhat.com/show_bug.cgi?id=1705280
|
||||
%{_qt5_archdatadir}/mkspecs/modules/qt_lib_*_private.pri
|
||||
%exclude %{_qt5_headerdir}/*/%{version}/*/private/
|
||||
|
||||
%files private-devel
|
||||
%{_qt5_headerdir}/*/%{version}/*/private/
|
||||
#{_qt5_archdatadir}/mkspecs/modules/qt_lib_*_private.pri
|
||||
|
||||
%files static
|
||||
%{_qt5_libdir}/libQt5Bootstrap.*a
|
||||
|
@ -939,10 +898,6 @@ fi
|
|||
%{_qt5_libdir}/libQt5KmsSupport.*a
|
||||
%{_qt5_libdir}/libQt5KmsSupport.prl
|
||||
%{_qt5_headerdir}/QtKmsSupport
|
||||
%{_qt5_libdir}/libQt5EdidSupport.*a
|
||||
%{_qt5_libdir}/libQt5EdidSupport.prl
|
||||
%{_qt5_libdir}/libQt5XkbCommonSupport.*a
|
||||
%{_qt5_libdir}/libQt5XkbCommonSupport.prl
|
||||
|
||||
%if 0%{?examples}
|
||||
%files examples
|
||||
|
@ -973,7 +928,8 @@ fi
|
|||
%{_qt5_libdir}/cmake/Qt5Sql/Qt5Sql_QTDSDriverPlugin.cmake
|
||||
%endif
|
||||
|
||||
%ldconfig_scriptlets gui
|
||||
%post gui -p /sbin/ldconfig
|
||||
%postun gui -p /sbin/ldconfig
|
||||
|
||||
%files gui
|
||||
%dir %{_sysconfdir}/X11/xinit
|
||||
|
@ -1009,7 +965,6 @@ fi
|
|||
%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QComposePlatformInputContextPlugin.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QIbusPlatformInputContextPlugin.cmake
|
||||
%if 0%{?egl}
|
||||
%{_qt5_libdir}/libQt5EglFSDeviceIntegration.so.5*
|
||||
%{_qt5_libdir}/libQt5EglFsKmsSupport.so.5*
|
||||
%{_qt5_plugindir}/platforms/libqeglfs.so
|
||||
%{_qt5_plugindir}/platforms/libqminimalegl.so
|
||||
|
@ -1039,203 +994,24 @@ fi
|
|||
%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QXcbIntegrationPlugin.cmake
|
||||
%{_qt5_plugindir}/xcbglintegrations/libqxcb-glx-integration.so
|
||||
%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake
|
||||
%{_qt5_plugindir}/platformthemes/libqxdgdesktopportal.so
|
||||
%{_qt5_plugindir}/platformthemes/libqgtk3.so
|
||||
%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QXdgDesktopPortalThemePlugin.cmake
|
||||
%{_qt5_libdir}/cmake/Qt5Gui/Qt5Gui_QGtk3ThemePlugin.cmake
|
||||
%{_qt5_plugindir}/printsupport/libcupsprintersupport.so
|
||||
%{_qt5_libdir}/cmake/Qt5PrintSupport/Qt5PrintSupport_QCupsPrinterSupportPlugin.cmake
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Apr 14 2020 Rex Dieter <rdieter@fedoraproject.org> - 5.14.2-4
|
||||
- backport "Mutex deadlock in QPluginLoader, Krita fails to start" (QTBUG-83207)
|
||||
* Tue Feb 13 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-4
|
||||
- omit 0068-QHeaderView.patch, reports of regression'y behavior
|
||||
|
||||
* Mon Apr 13 2020 Rex Dieter <rdieter@fedoraproject.org> - 5.14.2-3
|
||||
- %%build: -no-feature-relocatable + matching patch (#1823118)
|
||||
* Fri Feb 02 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-3
|
||||
- 5.9 branch fixes
|
||||
|
||||
* Wed Apr 08 2020 Than Ngo <than@redhat.com> - 5.14.2-2
|
||||
- Fixed bz#1801370 - CVE-2015-9541 XML entity expansion vulnerability via a crafted SVG document
|
||||
|
||||
* Sat Apr 04 2020 Rex Dieter <rdieter@fedoraproject.org> - 5.14.2-1
|
||||
- 5.14.2
|
||||
|
||||
* Sun Mar 22 2020 Robert-André Mauchin <zebob.m@gmail.com> - 5.13.2-4
|
||||
- Upstream patch to add support for PostgreSQL 12 (#1815921)
|
||||
|
||||
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 5.13.2-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Mon Jan 20 2020 Than Ngo <than@redhat.com> - 5.13.2-2
|
||||
- upstream patches fix following issues:
|
||||
Do-not-load-plugin-from-the-PWD
|
||||
QLibrary-Unix-do-not-attempt-to-load-a-library-relat
|
||||
|
||||
* Mon Dec 09 2019 Jan Grulich <jgrulich@redhat.com> - 5.13.2-1
|
||||
- 5.13.2
|
||||
|
||||
* Fri Nov 01 2019 Pete Walter <pwalter@fedoraproject.org> - 5.12.5-2
|
||||
- Rebuild for ICU 65
|
||||
|
||||
* Tue Sep 24 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.5-1
|
||||
- 5.12.5
|
||||
|
||||
* Wed Aug 21 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.4-7
|
||||
- s/pkgconfig(egl)/libEGL-devel/
|
||||
|
||||
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.12.4-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Tue Jul 23 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.4-5
|
||||
- Use qtwayland by default on Gnome Wayland sessions
|
||||
Resolves: bz#1732129
|
||||
|
||||
* Mon Jul 15 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.4-4
|
||||
- Revert "Reset QWidget's winId when backing window surface is destroyed"
|
||||
|
||||
* Fri Jun 28 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.4-3
|
||||
- omit QTBUG-73231 patch fix, appears to introduce incompatible symbols
|
||||
|
||||
* Wed Jun 26 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.4-2
|
||||
- pull in some upstream crash fixes
|
||||
|
||||
* Fri Jun 14 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.4-1
|
||||
- 5.12.4
|
||||
|
||||
* Wed Jun 12 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.3-2
|
||||
- pull in candidate upstream nvidia/optima fix (kde#406180)
|
||||
|
||||
* Tue Jun 04 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.3-1
|
||||
- 5.12.3
|
||||
|
||||
* Fri May 10 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-7
|
||||
- Fix install targets for generated private headers (#1702858)
|
||||
|
||||
* Wed May 08 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-6
|
||||
- Blacklist nouveau and llvmpipe for multithreading (#1706420)
|
||||
- drop BR: pkgconfig(glesv2) on f31+, no longer provided in mesa-19.1+
|
||||
|
||||
* Thu May 02 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-5
|
||||
- keep mkspecs/modules/*_private.pri in -devel #1705280)
|
||||
|
||||
* Tue Apr 30 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-4
|
||||
- CMake generates wrong -isystem /usr/include compilations flags with Qt5::Gui (#1704474)
|
||||
|
||||
* Tue Apr 30 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-3
|
||||
- -private-devel subpkg, move Requires: cups-devel here
|
||||
|
||||
* Mon Mar 04 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-2
|
||||
- -devel: Requires: cups-devel
|
||||
|
||||
* Thu Feb 14 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-1
|
||||
- 5.12.1
|
||||
|
||||
* Wed Feb 13 2019 Than Ngo <than@redhat.com> - 5.11.3-4
|
||||
- fixed build issue with gcc9
|
||||
|
||||
* Sun Feb 03 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.11.3-3
|
||||
- disable renameat2/statx feature on < f30 (#1668865)
|
||||
|
||||
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.11.3-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Dec 07 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.3-1
|
||||
- 5.11.3
|
||||
|
||||
* Thu Oct 25 2018 Than Ngo <than@redhat.com> - 5.11.2-3
|
||||
- backported patch to fix selection rendering issues if rounding leads to left-out pixels
|
||||
- backported patch to optimize insertionPointsForLine
|
||||
|
||||
* Thu Oct 11 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.2-2
|
||||
- -no-use-gold-linker (#1635973)
|
||||
|
||||
|
||||
* Fri Sep 21 2018 Jan Grulich <jgrulich@redhat.com> - 5.11.2-1
|
||||
- 5.11.2
|
||||
|
||||
* Thu Jul 26 2018 Than Ngo <than@redhat.com> - 5.11.1-7
|
||||
- fixed FTBFS
|
||||
|
||||
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 5.11.1-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Tue Jul 10 2018 Pete Walter <pwalter@fedoraproject.org> - 5.11.1-5
|
||||
- Rebuild for ICU 62
|
||||
|
||||
* Mon Jul 02 2018 Than Ngo <than@redhat.com> - 5.11.1-4
|
||||
- fixed bz#1597110 - BRP mangle shebangs and calculation of provides should ignore backups files
|
||||
|
||||
* Fri Jun 29 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.1-3
|
||||
- apply sse2-related multilib hack on < f29 only
|
||||
- safer %%_qt5_prefix, %%qt5_archdatadir ownership
|
||||
- rebuild for %%_qt5_prefix = %%_prefix
|
||||
|
||||
* Sat Jun 23 2018 Than Ngo <than@redhat.com> - 5.11.1-2
|
||||
- fixed #1592146, python3
|
||||
|
||||
* Tue Jun 19 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.1-1
|
||||
- 5.11.1
|
||||
- relax qt5-rpm-macros dep
|
||||
- drop workaround for QTBUG-37417
|
||||
- drop CMake-Restore-qt5_use_modules-function.patch (upstreamed)
|
||||
|
||||
* Mon Jun 18 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.0-3
|
||||
- backport CMake-Restore-qt5_use_modules-function.patch
|
||||
- %%build: %%ix86 --no-sse2 on < f29 only
|
||||
|
||||
* Wed May 30 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.0-2
|
||||
- move libQt5EglFSDeviceIntegration to -gui (#1557223)
|
||||
|
||||
* Tue May 22 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.0-1
|
||||
- 5.11.0
|
||||
- drop support for inject_optflags (not used since f23)
|
||||
|
||||
* Mon Apr 30 2018 Pete Walter <pwalter@fedoraproject.org> - 5.10.1-8
|
||||
- Rebuild for ICU 61.1
|
||||
|
||||
* Thu Mar 08 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-7
|
||||
- enforce qt5-rpm-macros versioning
|
||||
- BR: gcc-c++
|
||||
- Qt5.pc: fix version, add %%check
|
||||
|
||||
* Fri Feb 23 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-6
|
||||
- qt5-qtbase: RPM build flags only partially injected (#1543888)
|
||||
|
||||
* Wed Feb 21 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-5
|
||||
- QOpenGLShaderProgram: glProgramBinary() resulting in LINK_STATUS=FALSE not handled properly (QTBUG-66420)
|
||||
|
||||
* Fri Feb 16 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-4
|
||||
- use %%make_build, %%ldconfig
|
||||
- drop %%_licensedir hack
|
||||
|
||||
* Thu Feb 15 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-3
|
||||
- qt5-qtbase: RPM build flags only partially injected (#1543888)
|
||||
|
||||
* Tue Feb 13 2018 Jan Grulich <jgrulich@redhat.com> - 5.10.1-2
|
||||
- enable patch to track private api
|
||||
|
||||
* Tue Feb 13 2018 Jan Grulich <jgrulich@redhat.com> - 5.10.1-1
|
||||
- 5.10.1
|
||||
|
||||
* Fri Feb 09 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.0-5
|
||||
- track private api use via properly versioned symbols (unused for now)
|
||||
|
||||
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 5.10.0-4
|
||||
- Escape macros in %%changelog
|
||||
|
||||
* Sun Jan 28 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.0-3
|
||||
* Sun Jan 28 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-2
|
||||
- QMimeType: remove unwanted *.bin as preferredSuffix for octet-stream (fdo#101667,kde#382437)
|
||||
|
||||
* Fri Jan 26 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.0-2
|
||||
- re-enable gold linker (#1458003)
|
||||
- drop qt5_null_flag/qt5_deprecated_flag hacks (should be fixed upstream for awhile)
|
||||
- make qt_settings/journald support unconditional
|
||||
|
||||
* Fri Dec 15 2017 Jan Grulich <jgrulich@redhat.com> - 5.10.0-1
|
||||
- 5.10.0
|
||||
|
||||
* Thu Nov 30 2017 Pete Walter <pwalter@fedoraproject.org> - 5.9.3-3
|
||||
- Rebuild for ICU 60.1
|
||||
* Tue Jan 23 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-1
|
||||
- 5.9.4
|
||||
|
||||
* Thu Nov 30 2017 Than Ngo <than@redhat.com> - 5.9.3-2
|
||||
- bz#1518958, backport to fix out of bounds reads in qdnslookup_unix
|
||||
|
@ -1570,7 +1346,7 @@ fi
|
|||
- Crash in QXcbWindow::setParent() due to NULL xcbScreen (QTBUG-50081, #1291003)
|
||||
|
||||
* Mon Dec 21 2015 Rex Dieter <rdieter@fedoraproject.org> 5.6.0-0.17.beta
|
||||
- fix/update Release: 1%%{?dist}
|
||||
- fix/update Release: 1%{?dist}
|
||||
|
||||
* Fri Dec 18 2015 Rex Dieter <rdieter@fedoraproject.org> 5.6.0-0.16
|
||||
- 5.6.0-beta (final)
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
diff -up qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py.me qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py
|
||||
--- qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py.me 2018-06-23 11:29:21.750066271 +0200
|
||||
+++ qtbase-everywhere-src-5.11.1/mkspecs/features/uikit/devices.py 2018-06-23 11:30:07.457292033 +0200
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/usr/bin/python
|
||||
+#!/usr/bin/python3
|
||||
|
||||
#############################################################################
|
||||
##
|
|
@ -1,14 +0,0 @@
|
|||
diff -up qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in.foo qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
--- qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in.foo 2019-04-30 15:18:24.886346423 -0500
|
||||
+++ qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in 2019-04-30 15:19:48.303873296 -0500
|
||||
@@ -66,8 +66,10 @@ unset(_GL_INCDIRS)
|
||||
# Don\'t check for existence of the "_qt5gui_OPENGL_INCLUDE_DIR" because it is
|
||||
# optional.
|
||||
|
||||
+if (NOT ${_qt5gui_OPENGL_INCLUDE_DIR} STREQUAL "/usr/include")
|
||||
list(APPEND Qt5Gui_INCLUDE_DIRS ${_qt5gui_OPENGL_INCLUDE_DIR})
|
||||
set_property(TARGET Qt5::Gui APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${_qt5gui_OPENGL_INCLUDE_DIR})
|
||||
+endif()
|
||||
|
||||
unset(_qt5gui_OPENGL_INCLUDE_DIR CACHE)
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
diff -up qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp.no_relocatable qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp
|
||||
--- qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp.no_relocatable 2020-03-27 04:49:31.000000000 -0500
|
||||
+++ qtbase-everywhere-src-5.14.2/src/corelib/global/qlibraryinfo.cpp 2020-04-13 15:13:44.075705226 -0500
|
||||
@@ -671,8 +671,11 @@ static QString getPrefix(
|
||||
# if QT_CONFIGURE_CROSSBUILD
|
||||
if (group == QLibraryInfo::DevicePaths)
|
||||
return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
|
||||
-# endif
|
||||
+# elif 0 //QT_CONFIG(relocatable)
|
||||
return getExtPrefixFromHostBinDir();
|
||||
+# else
|
||||
+ return QString::fromLocal8Bit(QT_CONFIGURE_PREFIX_PATH);
|
||||
+# endif
|
||||
#elif QT_CONFIG(relocatable)
|
||||
return getRelocatablePrefix();
|
||||
#else
|
|
@ -0,0 +1,12 @@
|
|||
diff -up qtbase-opensource-src-5.9.4/src/corelib/mimetypes/qmimetype.cpp.fdo101667 qtbase-opensource-src-5.9.4/src/corelib/mimetypes/qmimetype.cpp
|
||||
--- qtbase-opensource-src-5.9.4/src/corelib/mimetypes/qmimetype.cpp.fdo101667 2018-01-16 00:53:43.000000000 -0600
|
||||
+++ qtbase-opensource-src-5.9.4/src/corelib/mimetypes/qmimetype.cpp 2018-01-28 07:18:09.502534397 -0600
|
||||
@@ -418,6 +418,8 @@ QStringList QMimeType::suffixes() const
|
||||
*/
|
||||
QString QMimeType::preferredSuffix() const
|
||||
{
|
||||
+ if (isDefault()) // workaround for unwanted *.bin suffix for octet-stream, https://bugs.freedesktop.org/show_bug.cgi?id=101667, fixed upstream in 1.10
|
||||
+ return QString();
|
||||
const QStringList suffixList = suffixes();
|
||||
return suffixList.isEmpty() ? QString() : suffixList.at(0);
|
||||
}
|
|
@ -1,12 +1,13 @@
|
|||
diff -up qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp.hidpi_scale_at_192 qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp
|
||||
--- qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp.hidpi_scale_at_192 2019-02-03 13:21:27.866906481 -0600
|
||||
+++ qtbase-everywhere-src-5.12.1/src/plugins/platforms/xcb/qxcbscreen.cpp 2019-02-03 13:23:47.554767565 -0600
|
||||
@@ -744,7 +744,7 @@ void QXcbScreen::updateGeometry(const QR
|
||||
// Use 128 as a reference DPI on small screens. This favors "small UI" over "large UI".
|
||||
qreal referenceDpi = physicalSize().width() <= 320 ? 128 : 96;
|
||||
|
||||
- m_pixelDensity = qMax(1, qRound(dpi/referenceDpi));
|
||||
+ m_pixelDensity = qMax(1, (int) (dpi/referenceDpi)); //instead of rounding at 1.5, round at 2.0 (same as GNOME)
|
||||
m_geometry = geometry;
|
||||
m_availableGeometry = geometry & m_virtualDesktop->workArea();
|
||||
diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp
|
||||
index 5e136b5..0ad2842 100644
|
||||
--- a/src/plugins/platforms/xcb/qxcbscreen.cpp
|
||||
+++ b/src/plugins/platforms/xcb/qxcbscreen.cpp
|
||||
@@ -620,7 +620,7 @@ void QXcbScreen::updateGeometry(const QRect &geom, uint8_t rotation)
|
||||
m_sizeMillimeters = sizeInMillimeters(xGeometry.size(), virtualDpi());
|
||||
|
||||
qreal dpi = xGeometry.width() / physicalSize().width() * qreal(25.4);
|
||||
- m_pixelDensity = qMax(1, qRound(dpi/96));
|
||||
+ m_pixelDensity = qMax(1, (int) (dpi/96)); // instead of rounding at 1.5, round at 2.0 (same as GNOME)
|
||||
m_geometry = QRect(xGeometry.topLeft(), xGeometry.size());
|
||||
m_availableGeometry = xGeometry & m_virtualDesktop->workArea();
|
||||
QWindowSystemInterface::handleScreenGeometryChange(QPlatformScreen::screen(), m_geometry, m_availableGeometry);
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
diff -up qtbase-opensource-src-5.9.2/src/plugins/sqldrivers/mysql/qsql_mysql.cpp.rex qtbase-opensource-src-5.9.2/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
|
||||
--- qtbase-opensource-src-5.9.2/src/plugins/sqldrivers/mysql/qsql_mysql.cpp.rex 2017-10-02 03:43:38.000000000 -0500
|
||||
+++ qtbase-opensource-src-5.9.2/src/plugins/sqldrivers/mysql/qsql_mysql.cpp 2017-10-19 14:56:16.752878279 -0500
|
||||
@@ -1159,14 +1159,15 @@ static void qLibraryInit()
|
||||
# endif // MYSQL_VERSION_ID
|
||||
#endif // Q_NO_MYSQL_EMBEDDED
|
||||
|
||||
-#ifdef MARIADB_BASE_VERSION
|
||||
+#if defined(MARIADB_BASE_VERSION) || defined(MARIADB_VERSION_ID)
|
||||
qAddPostRoutine(mysql_server_end);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void qLibraryEnd()
|
||||
{
|
||||
-#if !defined(MARIADB_BASE_VERSION)
|
||||
+#if !defined(MARIADB_BASE_VERSION) && !defined(MARIADB_VERSION_ID)
|
||||
+//#error should not get here on f27+ says rex
|
||||
# if !defined(Q_NO_MYSQL_EMBEDDED)
|
||||
# if MYSQL_VERSION_ID > 40000
|
||||
# if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003
|
|
@ -0,0 +1,13 @@
|
|||
diff -up qtbase-opensource-src-5.3.2/src/xml/sax/qxml.cpp.QTBUG-35459 qtbase-opensource-src-5.3.2/src/xml/sax/qxml.cpp
|
||||
diff -up qtbase-opensource-src-5.3.2/src/xml/sax/qxml_p.h.QTBUG-35459 qtbase-opensource-src-5.3.2/src/xml/sax/qxml_p.h
|
||||
--- qtbase-opensource-src-5.3.2/src/xml/sax/qxml_p.h.QTBUG-35459 2014-09-11 05:48:05.000000000 -0500
|
||||
+++ qtbase-opensource-src-5.3.2/src/xml/sax/qxml_p.h 2014-09-16 09:35:01.189255615 -0500
|
||||
@@ -223,7 +223,7 @@ private:
|
||||
// for the DTD currently being parsed.
|
||||
static const int dtdRecursionLimit = 2;
|
||||
// The maximum amount of characters an entity value may contain, after expansion.
|
||||
- static const int entityCharacterLimit = 1024;
|
||||
+ static const int entityCharacterLimit = 4096;
|
||||
|
||||
const QString &string();
|
||||
void stringClear();
|
|
@ -1,12 +0,0 @@
|
|||
diff -up qtbase-everywhere-src-5.10.1/qmake/Makefile.unix.qmake_LFLAGS qtbase-everywhere-src-5.10.1/qmake/Makefile.unix
|
||||
--- qtbase-everywhere-src-5.10.1/qmake/Makefile.unix.qmake_LFLAGS 2018-02-08 12:24:48.000000000 -0600
|
||||
+++ qtbase-everywhere-src-5.10.1/qmake/Makefile.unix 2018-02-15 10:25:07.077763061 -0600
|
||||
@@ -142,7 +142,7 @@ CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
|
||||
-DQT_NO_FOREACH
|
||||
|
||||
CXXFLAGS = $(EXTRA_CXXFLAGS) $(CONFIG_CXXFLAGS) $(CPPFLAGS)
|
||||
-LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS)
|
||||
+LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS) $(QMAKE_LFLAGS_RELEASE)
|
||||
|
||||
first all: $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
||||
qmake: $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
|
@ -1,20 +0,0 @@
|
|||
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
|
||||
index b8bfad4f16..676fdfad5e 100644
|
||||
--- a/src/gui/kernel/qguiapplication.cpp
|
||||
+++ b/src/gui/kernel/qguiapplication.cpp
|
||||
@@ -1376,14 +1376,7 @@ void QGuiApplicationPrivate::createPlatformIntegration()
|
||||
if (sessionType == QByteArrayLiteral("x11") && !platformName.contains(QByteArrayLiteral("xcb"))) {
|
||||
platformName = QByteArrayLiteral("xcb");
|
||||
} else if (sessionType == QByteArrayLiteral("wayland") && !platformName.contains(QByteArrayLiteral("wayland"))) {
|
||||
- QByteArray currentDesktop = qgetenv("XDG_CURRENT_DESKTOP").toLower();
|
||||
- QByteArray sessionDesktop = qgetenv("XDG_SESSION_DESKTOP").toLower();
|
||||
- if (currentDesktop.contains("gnome") || sessionDesktop.contains("gnome")) {
|
||||
- qInfo() << "Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome."
|
||||
- << "Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.";
|
||||
- } else {
|
||||
- platformName = QByteArrayLiteral("wayland");
|
||||
- }
|
||||
+ platformName = QByteArrayLiteral("wayland");
|
||||
}
|
||||
}
|
||||
#ifdef QT_QPA_DEFAULT_PLATFORM_NAME
|
2
sources
2
sources
|
@ -1 +1 @@
|
|||
SHA512 (qtbase-everywhere-src-5.14.2.tar.xz) = 8c83e06d58b56e9f288e83d6c3dd4ad6cc9f1eb1a32c7b44fb912fda34ed7255766fd9fa60cd740ee001df7d6172f25df05f1f95e986c3e793fbcd9bf4f18de9
|
||||
SHA512 (qtbase-opensource-src-5.9.4.tar.xz) = 82be3af6cbe83458a17a5dc53b9f57e56d9c1dbc1bae11e36c5a44e11b1f4cf62ef609cb775f55bfad7be38fbfeffc9cf12dd557bf7c64cbd26634c024a394dd
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
qtbase-everywhere-src
|
|
@ -1,16 +0,0 @@
|
|||
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
|
||||
index e6a0d97..cf93041 100644
|
||||
--- a/mkspecs/features/qt_module.prf
|
||||
+++ b/mkspecs/features/qt_module.prf
|
||||
@@ -216,9 +216,9 @@ android: CONFIG += qt_android_deps no_linker_version_script
|
||||
QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript
|
||||
|
||||
internal_module {
|
||||
- verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };"
|
||||
+ verscript_content = "Qt_$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}_PRIVATE_API { *; };"
|
||||
} else {
|
||||
- verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \
|
||||
+ verscript_content = "Qt_$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}_PRIVATE_API {" \
|
||||
" qt_private_api_tag*;"
|
||||
|
||||
private_api_headers = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.QPA_HEADER_FILES
|
|
@ -0,0 +1,58 @@
|
|||
--- qtbase-opensource-src-5.7.1/src/plugins/platforms/xcb/qxcbconnection.cpp 2016-12-01 02:17:04.000000000 -0600
|
||||
+++ qtbase-opensource-src-5.7.1/src/plugins/platforms/xcb.new/qxcbconnection.cpp 2017-09-20 15:41:47.057359162 -0500
|
||||
@@ -109,6 +109,9 @@
|
||||
Q_LOGGING_CATEGORY(lcQpaXInputDevices, "qt.qpa.input.devices")
|
||||
Q_LOGGING_CATEGORY(lcQpaXInputEvents, "qt.qpa.input.events")
|
||||
Q_LOGGING_CATEGORY(lcQpaScreen, "qt.qpa.screen")
|
||||
+Q_LOGGING_CATEGORY(lcQpaXcb, "qt.qpa.xcb")
|
||||
+Q_LOGGING_CATEGORY(lcQpaXcbError, "qt.qpa.xcb.xcberror")
|
||||
+// TODO: How to categorize by xcberror type? (e.g. only BadWindow)
|
||||
|
||||
// this event type was added in libxcb 1.10,
|
||||
// but we support also older version
|
||||
@@ -996,7 +999,9 @@
|
||||
uint clamped_error_code = qMin<uint>(error->error_code, (sizeof(xcb_errors) / sizeof(xcb_errors[0])) - 1);
|
||||
uint clamped_major_code = qMin<uint>(error->major_code, (sizeof(xcb_protocol_request_codes) / sizeof(xcb_protocol_request_codes[0])) - 1);
|
||||
|
||||
- qWarning("QXcbConnection: XCB error: %d (%s), sequence: %d, resource id: %d, major code: %d (%s), minor code: %d",
|
||||
+ //TODO: Make the category filterable based on the XCB Error
|
||||
+ qCWarning(lcQpaXcbError,
|
||||
+ "QXcbConnection: XCB error: %d (%s), sequence: %d, resource id: %d, major code: %d (%s), minor code: %d",
|
||||
int(error->error_code), xcb_errors[clamped_error_code],
|
||||
int(error->sequence), int(error->resource_id),
|
||||
int(error->major_code), xcb_protocol_request_codes[clamped_major_code],
|
||||
@@ -1006,19 +1011,19 @@
|
||||
int i = 0;
|
||||
for (; i < m_callLog.size(); ++i) {
|
||||
if (m_callLog.at(i).sequence == error->sequence) {
|
||||
- qDebug("Caused by: %s:%d", m_callLog.at(i).file.constData(), m_callLog.at(i).line);
|
||||
+ qCDebug(lcQpaXcbError, "Caused by: %s:%d", m_callLog.at(i).file.constData(), m_callLog.at(i).line);
|
||||
break;
|
||||
} else if (m_callLog.at(i).sequence > error->sequence) {
|
||||
- qDebug("Caused some time before: %s:%d", m_callLog.at(i).file.constData(),
|
||||
+ qCDebug(lcQpaXcbError, "Caused some time before: %s:%d", m_callLog.at(i).file.constData(),
|
||||
m_callLog.at(i).line);
|
||||
if (i > 0)
|
||||
- qDebug("and after: %s:%d", m_callLog.at(i-1).file.constData(),
|
||||
+ qCDebug(lcQpaXcbError, "and after: %s:%d", m_callLog.at(i-1).file.constData(),
|
||||
m_callLog.at(i-1).line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == m_callLog.size() && !m_callLog.isEmpty())
|
||||
- qDebug("Caused some time after: %s:%d", qAsConst(m_callLog).first().file.constData(),
|
||||
+ qCDebug(lcQpaXcbError, "Caused some time after: %s:%d", qAsConst(m_callLog).first().file.constData(),
|
||||
qAsConst(m_callLog).first().line);
|
||||
#endif
|
||||
}
|
||||
--- qtbase-opensource-src-5.7.1/src/plugins/platforms/xcb/qxcbconnection.h 2016-12-01 02:17:04.000000000 -0600
|
||||
+++ qtbase-opensource-src-5.7.1/src/plugins/platforms/xcb.new/qxcbconnection.h 2017-09-20 15:35:55.655555316 -0500
|
||||
@@ -87,6 +87,8 @@
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcQpaXInputDevices)
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcQpaXInputEvents)
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcQpaScreen)
|
||||
+Q_DECLARE_LOGGING_CATEGORY(lcQpaXcb)
|
||||
+Q_DECLARE_LOGGING_CATEGORY(lcQpaXcbError)
|
||||
|
||||
class QXcbVirtualDesktop;
|
||||
class QXcbScreen;
|
Loading…
Reference in New Issue