Accepting request 260193 from KDE:Qt5
- Added patches from upstream: 0001-Allow-panels-outside-of-availableGeometry.patch (kde#339846) and 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch, 0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch, 0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch, for QTBUG#42189 - Don't install CMake files for plugins, they are useful only for bundled Qt builds - Downgrade sql-plugins from libQt5Sql-devel's requires to suggests - Added QTBUG41590.patch, improve font rendering (QTBUG41590,QTBUG40971) OBS-URL: https://build.opensuse.org/request/show/260193 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=31
This commit is contained in:
parent
e4c21e8f38
commit
4f78de248e
46
0001-Allow-panels-outside-of-availableGeometry.patch
Normal file
46
0001-Allow-panels-outside-of-availableGeometry.patch
Normal file
@ -0,0 +1,46 @@
|
||||
From 0ac4019528888aba8528432434300341df732c4e Mon Sep 17 00:00:00 2001
|
||||
From: Marco Martin <mart@kde.org>
|
||||
Date: Tue, 14 Oct 2014 16:55:17 +0200
|
||||
Subject: [PATCH 1/4] Allow panels outside of availableGeometry
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Panels windows are usually outside QScreen::availableGeometry, because
|
||||
they will usually set extended struts to reserve the screen area for
|
||||
themselves, but their own screen() must remain the one in which they
|
||||
are.
|
||||
This cause one downstream behavior to KDE
|
||||
https://bugs.kde.org/show_bug.cgi?id=339846
|
||||
in which a panel got by mistake few pixels on another screen, and
|
||||
was immediately reassigned to that screen, because its geometry was
|
||||
intersecting the new screen availableGeometry() but not the geometry
|
||||
of its own screen, because itself reserved its own geometry away
|
||||
from availableGeometry()
|
||||
|
||||
Change-Id: If6c9defdef62732473687dd336dbcec582bd0ea2
|
||||
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
|
||||
(cherry picked from commit 47ec22a50975d6f616043fc12424ae1e12e584bd)
|
||||
---
|
||||
src/plugins/platforms/xcb/qxcbwindow.cpp | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
|
||||
index 586068d8d9ed9c1987e51d664f76d4f33769f293..a99a5cfab51861b2c64ad552709f5d0bd39a62f3 100644
|
||||
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
|
||||
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
|
||||
@@ -1687,9 +1687,9 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *
|
||||
QPlatformWindow::setGeometry(rect);
|
||||
QWindowSystemInterface::handleGeometryChange(window(), rect);
|
||||
|
||||
- if (!m_screen->availableGeometry().intersects(rect)) {
|
||||
+ if (!m_screen->geometry().intersects(rect)) {
|
||||
Q_FOREACH (QPlatformScreen* screen, m_screen->virtualSiblings()) {
|
||||
- if (screen->availableGeometry().intersects(rect)) {
|
||||
+ if (screen->geometry().intersects(rect)) {
|
||||
m_screen = static_cast<QXcbScreen*>(screen);
|
||||
QWindowSystemInterface::handleWindowScreenChanged(window(), m_screen->QPlatformScreen::screen());
|
||||
break;
|
||||
--
|
||||
2.1.2
|
||||
|
@ -0,0 +1,96 @@
|
||||
From 596a3d701bfb96de01ff2e127cd628c6b50fd9d6 Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Tue, 28 Oct 2014 17:23:09 -0700
|
||||
Subject: [PATCH 2/4] Always lock the DBus dispatcher before
|
||||
dbus_connection_send*
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We lock it before dbus_connection_send_with_reply (the async version) in
|
||||
QDBusConnectionPrivate::sendWithReplyAsync. We weren't locking it before
|
||||
send_with_reply_and_block and we apparently should. The locking around
|
||||
the dbus_connection_send function might not be necessary, but let's do
|
||||
it to be safe.
|
||||
|
||||
The lock now needs to be recursive because we may be inside
|
||||
QDBusConnectionPrivate::doDispatch.
|
||||
|
||||
Task-number: QTBUG-42189
|
||||
Change-Id: I7b6b350909359817ea8b3f9c693bced042c9779a
|
||||
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
|
||||
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
||||
(cherry picked from commit 6a2bdc4ee2dc49b5d89d09a1f255a7a0e2f18acf)
|
||||
---
|
||||
src/dbus/qdbusintegrator.cpp | 19 +++++++++++++++----
|
||||
src/dbus/qdbusthreaddebug_p.h | 3 +++
|
||||
2 files changed, 18 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
||||
index 8f088443169ff6be013d77b149995f556196d588..03f9eef96ed160b8b6df888661d5c1bd5840047b 100644
|
||||
--- a/src/dbus/qdbusintegrator.cpp
|
||||
+++ b/src/dbus/qdbusintegrator.cpp
|
||||
@@ -1023,7 +1023,7 @@ extern bool qDBusInitThreads();
|
||||
|
||||
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
|
||||
: QObject(p), ref(1), capabilities(0), mode(InvalidMode), connection(0), server(0), busService(0),
|
||||
- watchAndTimeoutLock(QMutex::Recursive),
|
||||
+ watchAndTimeoutLock(QMutex::Recursive), dispatchLock(QMutex::Recursive),
|
||||
rootNode(QString(QLatin1Char('/'))),
|
||||
anonymousAuthenticationAllowed(false)
|
||||
{
|
||||
@@ -1272,7 +1272,10 @@ void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, in
|
||||
//qDBusDebug() << "Emitting signal" << message;
|
||||
//qDBusDebug() << "for paths:";
|
||||
q_dbus_message_set_no_reply(msg, true); // the reply would not be delivered to anything
|
||||
- huntAndEmit(connection, msg, obj, rootNode, isScriptable, isAdaptor);
|
||||
+ {
|
||||
+ QDBusDispatchLocker locker(HuntAndEmitAction, this);
|
||||
+ huntAndEmit(connection, msg, obj, rootNode, isScriptable, isAdaptor);
|
||||
+ }
|
||||
q_dbus_message_unref(msg);
|
||||
}
|
||||
|
||||
@@ -1929,7 +1932,11 @@ int QDBusConnectionPrivate::send(const QDBusMessage& message)
|
||||
|
||||
qDBusDebug() << this << "sending message (no reply):" << message;
|
||||
checkThread();
|
||||
- bool isOk = q_dbus_connection_send(connection, msg, 0);
|
||||
+ bool isOk;
|
||||
+ {
|
||||
+ QDBusDispatchLocker locker(SendMessageAction, this);
|
||||
+ isOk = q_dbus_connection_send(connection, msg, 0);
|
||||
+ }
|
||||
int serial = 0;
|
||||
if (isOk)
|
||||
serial = q_dbus_message_get_serial(msg);
|
||||
@@ -1961,7 +1968,11 @@ QDBusMessage QDBusConnectionPrivate::sendWithReply(const QDBusMessage &message,
|
||||
|
||||
qDBusDebug() << this << "sending message (blocking):" << message;
|
||||
QDBusErrorInternal error;
|
||||
- DBusMessage *reply = q_dbus_connection_send_with_reply_and_block(connection, msg, timeout, error);
|
||||
+ DBusMessage *reply;
|
||||
+ {
|
||||
+ QDBusDispatchLocker locker(SendWithReplyAndBlockAction, this);
|
||||
+ reply = q_dbus_connection_send_with_reply_and_block(connection, msg, timeout, error);
|
||||
+ }
|
||||
|
||||
q_dbus_message_unref(msg);
|
||||
|
||||
diff --git a/src/dbus/qdbusthreaddebug_p.h b/src/dbus/qdbusthreaddebug_p.h
|
||||
index f9039ef3cd3925c4484686c1d73c2c3f5499dfff..dcde99169cc15424c7cfa0acf3fd18272ef12aca 100644
|
||||
--- a/src/dbus/qdbusthreaddebug_p.h
|
||||
+++ b/src/dbus/qdbusthreaddebug_p.h
|
||||
@@ -94,6 +94,9 @@ enum ThreadAction {
|
||||
MessageResultReceivedAction = 26,
|
||||
ActivateSignalAction = 27,
|
||||
PendingCallBlockAction = 28,
|
||||
+ SendMessageAction = 29,
|
||||
+ SendWithReplyAndBlockAction = 30,
|
||||
+ HuntAndEmitAction = 31,
|
||||
|
||||
AddTimeoutAction = 50,
|
||||
RealAddTimeoutAction = 51,
|
||||
--
|
||||
2.1.2
|
||||
|
188
0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
Normal file
188
0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
Normal file
@ -0,0 +1,188 @@
|
||||
From a006c934177263675302cd5f4ae0c3b1e35215e3 Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Tue, 28 Oct 2014 19:26:17 -0700
|
||||
Subject: [PATCH 3/4] QDBusConnection: Merge the dispatch and the
|
||||
watch-and-timeout locks
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We don't need two anymore because they now protect the same thing: the
|
||||
state of the DBusConnection. The difference existed when it was possible
|
||||
for two threads to access the DBusConnection at the same time: one doing
|
||||
dispatching and one doing something else. Unfortunately, even though
|
||||
DBusConnection supports this, QtDBus doesn't.
|
||||
|
||||
From d47c05b1889bb4f06203bbc65f4660b8d0128954 (2008-10-08):
|
||||
Details: if we're removing a timer or a watcher from our list,
|
||||
there's a race condition: one thread (not the QDBusConnection thread)
|
||||
could be asking for the removal (which causes an event to be sent),
|
||||
then deletes the pointer. In the meantime, QDBusConnection will
|
||||
process the timers and socket notifiers and could end up calling
|
||||
lidbus-1 with deleted pointers.
|
||||
|
||||
That commit fixed the race condition but introduced a deadlock.
|
||||
|
||||
Task-number: QTBUG-42189
|
||||
Change-Id: I034038f763cbad3a67398909defd31a23c27c965
|
||||
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
|
||||
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
|
||||
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
||||
(cherry picked from commit eb99c28861f5e841f306cfe8689627fe0e9bf2e8)
|
||||
---
|
||||
src/dbus/qdbusconnection_p.h | 16 +++++-----------
|
||||
src/dbus/qdbusintegrator.cpp | 22 +++++++++++-----------
|
||||
src/dbus/qdbusthreaddebug_p.h | 7 -------
|
||||
3 files changed, 16 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
|
||||
index fd4ced078d667d966920728252d5ee55dda76ec1..a75dabeeee5c2b920fc4708f2eeefdaeb97ba32c 100644
|
||||
--- a/src/dbus/qdbusconnection_p.h
|
||||
+++ b/src/dbus/qdbusconnection_p.h
|
||||
@@ -290,24 +290,18 @@ public:
|
||||
QStringList serverConnectionNames;
|
||||
|
||||
ConnectionMode mode;
|
||||
+ QDBusConnectionInterface *busService;
|
||||
|
||||
- // members accessed in unlocked mode (except for deletion)
|
||||
- // connection and server provide their own locking mechanisms
|
||||
- // busService doesn't have state to be changed
|
||||
+ // the dispatch lock protects everything related to the DBusConnection or DBusServer
|
||||
+ // including the timeouts and watches
|
||||
+ QMutex dispatchLock;
|
||||
DBusConnection *connection;
|
||||
DBusServer *server;
|
||||
- QDBusConnectionInterface *busService;
|
||||
-
|
||||
- // watchers and timeouts are accessed from any thread
|
||||
- // but the corresponding timer and QSocketNotifier must be handled
|
||||
- // only in the object's thread
|
||||
- QMutex watchAndTimeoutLock;
|
||||
WatcherHash watchers;
|
||||
TimeoutHash timeouts;
|
||||
PendingTimeoutList timeoutsPendingAdd;
|
||||
|
||||
- // members accessed through a lock
|
||||
- QMutex dispatchLock;
|
||||
+ // the master lock protects our own internal state
|
||||
QReadWriteLock lock;
|
||||
QDBusError lastError;
|
||||
|
||||
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
||||
index 03f9eef96ed160b8b6df888661d5c1bd5840047b..b396c23a1d0c1958971ce76c8b93ab43c9a18c68 100644
|
||||
--- a/src/dbus/qdbusintegrator.cpp
|
||||
+++ b/src/dbus/qdbusintegrator.cpp
|
||||
@@ -161,7 +161,7 @@ static dbus_bool_t qDBusAddTimeout(DBusTimeout *timeout, void *data)
|
||||
if (!q_dbus_timeout_get_enabled(timeout))
|
||||
return true;
|
||||
|
||||
- QDBusWatchAndTimeoutLocker locker(AddTimeoutAction, d);
|
||||
+ QDBusDispatchLocker locker(AddTimeoutAction, d);
|
||||
if (QCoreApplication::instance() && QThread::currentThread() == d->thread()) {
|
||||
// correct thread
|
||||
return qDBusRealAddTimeout(d, timeout, q_dbus_timeout_get_interval(timeout));
|
||||
@@ -196,7 +196,7 @@ static void qDBusRemoveTimeout(DBusTimeout *timeout, void *data)
|
||||
|
||||
QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
|
||||
|
||||
- QDBusWatchAndTimeoutLocker locker(RemoveTimeoutAction, d);
|
||||
+ QDBusDispatchLocker locker(RemoveTimeoutAction, d);
|
||||
|
||||
// is it pending addition?
|
||||
QDBusConnectionPrivate::PendingTimeoutList::iterator pit = d->timeoutsPendingAdd.begin();
|
||||
@@ -269,7 +269,7 @@ static bool qDBusRealAddWatch(QDBusConnectionPrivate *d, DBusWatch *watch, int f
|
||||
{
|
||||
QDBusConnectionPrivate::Watcher watcher;
|
||||
|
||||
- QDBusWatchAndTimeoutLocker locker(AddWatchAction, d);
|
||||
+ QDBusDispatchLocker locker(AddWatchAction, d);
|
||||
if (flags & DBUS_WATCH_READABLE) {
|
||||
//qDebug("addReadWatch %d", fd);
|
||||
watcher.watch = watch;
|
||||
@@ -303,7 +303,7 @@ static void qDBusRemoveWatch(DBusWatch *watch, void *data)
|
||||
QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
|
||||
int fd = q_dbus_watch_get_unix_fd(watch);
|
||||
|
||||
- QDBusWatchAndTimeoutLocker locker(RemoveWatchAction, d);
|
||||
+ QDBusDispatchLocker locker(RemoveWatchAction, d);
|
||||
QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
|
||||
while (i != d->watchers.end() && i.key() == fd) {
|
||||
if (i.value().watch == watch) {
|
||||
@@ -347,7 +347,7 @@ static void qDBusToggleWatch(DBusWatch *watch, void *data)
|
||||
|
||||
static void qDBusRealToggleWatch(QDBusConnectionPrivate *d, DBusWatch *watch, int fd)
|
||||
{
|
||||
- QDBusWatchAndTimeoutLocker locker(ToggleWatchAction, d);
|
||||
+ QDBusDispatchLocker locker(ToggleWatchAction, d);
|
||||
|
||||
QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
|
||||
while (i != d->watchers.end() && i.key() == fd) {
|
||||
@@ -1022,8 +1022,8 @@ void QDBusConnectionPrivate::deliverCall(QObject *object, int /*flags*/, const Q
|
||||
extern bool qDBusInitThreads();
|
||||
|
||||
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
|
||||
- : QObject(p), ref(1), capabilities(0), mode(InvalidMode), connection(0), server(0), busService(0),
|
||||
- watchAndTimeoutLock(QMutex::Recursive), dispatchLock(QMutex::Recursive),
|
||||
+ : QObject(p), ref(1), capabilities(0), mode(InvalidMode), busService(0),
|
||||
+ dispatchLock(QMutex::Recursive), connection(0), server(0),
|
||||
rootNode(QString(QLatin1Char('/'))),
|
||||
anonymousAuthenticationAllowed(false)
|
||||
{
|
||||
@@ -1133,7 +1133,7 @@ bool QDBusConnectionPrivate::handleError(const QDBusErrorInternal &error)
|
||||
void QDBusConnectionPrivate::timerEvent(QTimerEvent *e)
|
||||
{
|
||||
{
|
||||
- QDBusWatchAndTimeoutLocker locker(TimerEventAction, this);
|
||||
+ QDBusDispatchLocker locker(TimerEventAction, this);
|
||||
DBusTimeout *timeout = timeouts.value(e->timerId(), 0);
|
||||
if (timeout)
|
||||
q_dbus_timeout_handle(timeout);
|
||||
@@ -1152,7 +1152,7 @@ void QDBusConnectionPrivate::customEvent(QEvent *e)
|
||||
switch (ev->subtype)
|
||||
{
|
||||
case QDBusConnectionCallbackEvent::AddTimeout: {
|
||||
- QDBusWatchAndTimeoutLocker locker(RealAddTimeoutAction, this);
|
||||
+ QDBusDispatchLocker locker(RealAddTimeoutAction, this);
|
||||
while (!timeoutsPendingAdd.isEmpty()) {
|
||||
QPair<DBusTimeout *, int> entry = timeoutsPendingAdd.takeFirst();
|
||||
qDBusRealAddTimeout(this, entry.first, entry.second);
|
||||
@@ -1188,7 +1188,7 @@ void QDBusConnectionPrivate::socketRead(int fd)
|
||||
QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||
|
||||
{
|
||||
- QDBusWatchAndTimeoutLocker locker(SocketReadAction, this);
|
||||
+ QDBusDispatchLocker locker(SocketReadAction, this);
|
||||
WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
while (it != watchers.constEnd() && it.key() == fd) {
|
||||
if (it->watch && it->read && it->read->isEnabled())
|
||||
@@ -1208,7 +1208,7 @@ void QDBusConnectionPrivate::socketWrite(int fd)
|
||||
QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||
|
||||
{
|
||||
- QDBusWatchAndTimeoutLocker locker(SocketWriteAction, this);
|
||||
+ QDBusDispatchLocker locker(SocketWriteAction, this);
|
||||
WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
while (it != watchers.constEnd() && it.key() == fd) {
|
||||
if (it->watch && it->write && it->write->isEnabled())
|
||||
diff --git a/src/dbus/qdbusthreaddebug_p.h b/src/dbus/qdbusthreaddebug_p.h
|
||||
index dcde99169cc15424c7cfa0acf3fd18272ef12aca..726ab051d0739ece9d1ea623e04b39f9368464ec 100644
|
||||
--- a/src/dbus/qdbusthreaddebug_p.h
|
||||
+++ b/src/dbus/qdbusthreaddebug_p.h
|
||||
@@ -207,13 +207,6 @@ struct QDBusDispatchLocker: QDBusMutexLocker
|
||||
{ }
|
||||
};
|
||||
|
||||
-struct QDBusWatchAndTimeoutLocker: QDBusMutexLocker
|
||||
-{
|
||||
- inline QDBusWatchAndTimeoutLocker(ThreadAction a, QDBusConnectionPrivate *s)
|
||||
- : QDBusMutexLocker(a, s, &s->watchAndTimeoutLock)
|
||||
- { }
|
||||
-};
|
||||
-
|
||||
#if QDBUS_THREAD_DEBUG
|
||||
# define SEM_ACQUIRE(action, sem) \
|
||||
do { \
|
||||
--
|
||||
2.1.2
|
||||
|
@ -0,0 +1,91 @@
|
||||
From a08d09767513ac2d6232f2d6d1cf2bc30974f632 Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Tue, 28 Oct 2014 19:34:01 -0700
|
||||
Subject: [PATCH 4/4] Partially revert "Fix a deadlock introduced by the race
|
||||
condition fix"
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The commit was 9361be58f47ec256bf920c378479a02501219c1f (2008-11-17),
|
||||
referring to the race condition fix that was applied in commit
|
||||
d47c05b1889bb4f06203bbc65f4660b8d0128954 (2008-10-08). The fix for the
|
||||
deadlock reintroduced the race condition and the commit message noted
|
||||
it.
|
||||
|
||||
The workaround is no longer necessary since we've fixed the original race
|
||||
condition differently now (see the previous two commits).
|
||||
|
||||
Task-number: QTBUG-42189
|
||||
Change-Id: I5a83249597a83c4d4caa2ae57964ad3cc61c1d70
|
||||
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
|
||||
Reviewed-by: Albert Astals Cid <albert.astals@canonical.com>
|
||||
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
|
||||
(cherry picked from commit 73a1e8c60d894701f34806cc4b847aa2814bf389)
|
||||
---
|
||||
src/dbus/qdbusintegrator.cpp | 40 ++++++++++++++--------------------------
|
||||
1 file changed, 14 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
||||
index b396c23a1d0c1958971ce76c8b93ab43c9a18c68..c87999a48d5ad2fa39a183fe67aad8021065eb1f 100644
|
||||
--- a/src/dbus/qdbusintegrator.cpp
|
||||
+++ b/src/dbus/qdbusintegrator.cpp
|
||||
@@ -1185,41 +1185,29 @@ void QDBusConnectionPrivate::doDispatch()
|
||||
|
||||
void QDBusConnectionPrivate::socketRead(int fd)
|
||||
{
|
||||
- QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||
-
|
||||
- {
|
||||
- QDBusDispatchLocker locker(SocketReadAction, this);
|
||||
- WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
- while (it != watchers.constEnd() && it.key() == fd) {
|
||||
- if (it->watch && it->read && it->read->isEnabled())
|
||||
- pendingWatches.append(it.value().watch);
|
||||
- ++it;
|
||||
+ QDBusDispatchLocker locker(SocketReadAction, this);
|
||||
+ WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
+ while (it != watchers.constEnd() && it.key() == fd) {
|
||||
+ if (it->watch && it->read && it->read->isEnabled()) {
|
||||
+ if (!q_dbus_watch_handle(it.value().watch, DBUS_WATCH_READABLE))
|
||||
+ qDebug("OUT OF MEM");
|
||||
}
|
||||
+ ++it;
|
||||
}
|
||||
-
|
||||
- for (int i = 0; i < pendingWatches.size(); ++i)
|
||||
- if (!q_dbus_watch_handle(pendingWatches[i], DBUS_WATCH_READABLE))
|
||||
- qDebug("OUT OF MEM");
|
||||
doDispatch();
|
||||
}
|
||||
|
||||
void QDBusConnectionPrivate::socketWrite(int fd)
|
||||
{
|
||||
- QVarLengthArray<DBusWatch *, 2> pendingWatches;
|
||||
-
|
||||
- {
|
||||
- QDBusDispatchLocker locker(SocketWriteAction, this);
|
||||
- WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
- while (it != watchers.constEnd() && it.key() == fd) {
|
||||
- if (it->watch && it->write && it->write->isEnabled())
|
||||
- pendingWatches.append(it.value().watch);
|
||||
- ++it;
|
||||
+ QDBusDispatchLocker locker(SocketWriteAction, this);
|
||||
+ WatcherHash::ConstIterator it = watchers.constFind(fd);
|
||||
+ while (it != watchers.constEnd() && it.key() == fd) {
|
||||
+ if (it->watch && it->write && it->write->isEnabled()) {
|
||||
+ if (!q_dbus_watch_handle(it.value().watch, DBUS_WATCH_WRITABLE))
|
||||
+ qDebug("OUT OF MEM");
|
||||
}
|
||||
+ ++it;
|
||||
}
|
||||
-
|
||||
- for (int i = 0; i < pendingWatches.size(); ++i)
|
||||
- if (!q_dbus_watch_handle(pendingWatches[i], DBUS_WATCH_WRITABLE))
|
||||
- qDebug("OUT OF MEM");
|
||||
}
|
||||
|
||||
void QDBusConnectionPrivate::objectDestroyed(QObject *obj)
|
||||
--
|
||||
2.1.2
|
||||
|
11
QTBUG41590.patch
Normal file
11
QTBUG41590.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- src/gui/kernel/qplatformintegration.cpp.orig 2014-10-21 12:24:35.314606929 +0200
|
||||
+++ src/gui/kernel/qplatformintegration.cpp 2014-10-21 12:24:45.668477488 +0200
|
||||
@@ -360,7 +360,7 @@ QVariant QPlatformIntegration::styleHint
|
||||
case PasswordMaskCharacter:
|
||||
return QPlatformTheme::defaultThemeHint(QPlatformTheme::PasswordMaskCharacter);
|
||||
case FontSmoothingGamma:
|
||||
- return qreal(1.7);
|
||||
+ return qreal(1.4);
|
||||
case StartDragVelocity:
|
||||
return QPlatformTheme::defaultThemeHint(QPlatformTheme::StartDragVelocity);
|
||||
case UseRtlExtensions:
|
@ -60,10 +60,6 @@ libQt5Gui-devel
|
||||
libQt5Sql-devel
|
||||
requires "libQt5Core-devel-<targettype> = <version>"
|
||||
requires "libQt5Sql5-<targettype> = <version>"
|
||||
requires "libQt5Sql5-mysql-<targettype> = <version>"
|
||||
requires "libQt5Sql5-postgresql-<targettype> = <version>"
|
||||
requires "libQt5Sql5-sqlite-<targettype> = <version>"
|
||||
requires "libQt5Sql5-unixODBC-<targettype> = <version>"
|
||||
libQt5Bootstrap-devel-static
|
||||
libQt5OpenGLExtensions-devel-static
|
||||
requires "libQt5Core-devel-<targettype> = <version>"
|
||||
|
@ -1,3 +1,22 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Nov 5 16:51:36 UTC 2014 - hrvoje.senjan@gmail.com
|
||||
|
||||
- Added patches from upstream:
|
||||
0001-Allow-panels-outside-of-availableGeometry.patch (kde#339846)
|
||||
and 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch,
|
||||
0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch,
|
||||
0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch,
|
||||
for QTBUG#42189
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Oct 29 19:09:33 UTC 2014 - hrvoje.senjan@gmail.com
|
||||
|
||||
- Don't install CMake files for plugins, they are useful only for
|
||||
bundled Qt builds
|
||||
- Downgrade sql-plugins from libQt5Sql-devel's requires to suggests
|
||||
- Added QTBUG41590.patch, improve font rendering
|
||||
(QTBUG41590,QTBUG40971)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Oct 12 15:21:11 UTC 2014 - hrvoje.senjan@gmail.com
|
||||
|
||||
|
@ -48,6 +48,8 @@ Patch3: libqt5-Fix-Gujarati-font.patch
|
||||
Patch4: protect-geometry-QTBUG-40584.patch
|
||||
# Patch-FIX-SUSE libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch -- bnc#888858
|
||||
Patch5: libqt5-do-not-use-shm-if-display-name-doesnt-look-local.patch
|
||||
# PATCH-FIX-OPENSUSE QTBUG41590.patch -- https://bugreports.qt-project.org/browse/QTBUG-40971 https://bugreports.qt-project.org/browse/QTBUG-41590
|
||||
Patch6: QTBUG41590.patch
|
||||
# patches 1000-2000 and above from upstream 5.3 branch #
|
||||
# patches 2000-3000 and above from upstream 5.4 branch #
|
||||
# PATCH-FIX-UPSTREAM f1ee10f81ac18789e9a7dc715b464415ba2bc2b8.patch -- prefer QPA implementation in qsystemtrayicon_x11 if available
|
||||
@ -78,6 +80,14 @@ Patch2011: 0002-Move-SubpixelAntialiasingType-from-QFontEngineFT-to-.patch
|
||||
Patch2012: 0003-Support-autohint-and-lcdfilter-fontconfig-configurat.patch
|
||||
# PATCH-FIX-UPSTREAM 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
|
||||
Patch2013: 0004-GTK2-theme-should-use-GTK-configured-font-variant.patch
|
||||
# PATCH-FIX-UPSTREAM 0001-Allow-panels-outside-of-availableGeometry.patch
|
||||
Patch2014: 0001-Allow-panels-outside-of-availableGeometry.patch
|
||||
# PATCH-FIX-UPSTREAM 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch
|
||||
Patch2015: 0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch
|
||||
# PATCH-FIX-UPSTREAM 0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
|
||||
Patch2016: 0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch
|
||||
# PATCH-FIX-UPSTREAM 0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch
|
||||
Patch2017: 0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch
|
||||
BuildRequires: alsa-devel
|
||||
BuildRequires: cups-devel
|
||||
BuildRequires: fdupes
|
||||
@ -162,6 +172,7 @@ handling.
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p0
|
||||
%patch2000 -p1
|
||||
%patch2001 -p1
|
||||
%patch2002 -p1
|
||||
@ -176,6 +187,10 @@ handling.
|
||||
%patch2011 -p1
|
||||
%patch2012 -p1
|
||||
%patch2013 -p1
|
||||
%patch2014 -p1
|
||||
%patch2015 -p1
|
||||
%patch2016 -p1
|
||||
%patch2017 -p1
|
||||
|
||||
# be sure not to use them
|
||||
rm -r src/3rdparty/{libjpeg,freetype,libpng,zlib}
|
||||
@ -541,10 +556,10 @@ Summary: Qt 5 SQL related libraries - development files
|
||||
Group: Development/Libraries/C and C++
|
||||
Requires: libQt5Core-devel = %{version}
|
||||
Requires: libQt5Sql5 = %{version}
|
||||
Requires: libQt5Sql5-mysql = %{version}
|
||||
Requires: libQt5Sql5-postgresql = %{version}
|
||||
Requires: libQt5Sql5-sqlite = %{version}
|
||||
Requires: libQt5Sql5-unixODBC = %{version}
|
||||
Suggests: libQt5Sql5-mysql = %{version}
|
||||
Suggests: libQt5Sql5-postgresql = %{version}
|
||||
Suggests: libQt5Sql5-sqlite = %{version}
|
||||
Suggests: libQt5Sql5-unixODBC = %{version}
|
||||
|
||||
%description -n libQt5Sql-devel
|
||||
Qt 5 libraries which are used for connection with an SQL server. You
|
||||
@ -783,6 +798,10 @@ find %{buildroot}/%{libqt5_libdir} -type f -name '*pc' -print -exec perl -pi -e
|
||||
find %{buildroot}/%{libqt5_libdir}/ -name 'lib*.a' -exec chmod -x -- {} \;
|
||||
# kill .la files
|
||||
rm -f %{buildroot}%{libqt5_libdir}/lib*.la
|
||||
|
||||
#
|
||||
rm -fv %{buildroot}%{libqt5_libdir}/cmake/Qt5*/Q*Plugin.cmake
|
||||
|
||||
mkdir -p %{buildroot}/%{libqt5_plugindir}/sqldrivers
|
||||
|
||||
# put all the binaries to %{_bindir}, add -qt5 suffix, and symlink them back to %_qt5_bindir
|
||||
|
Loading…
Reference in New Issue
Block a user