diff --git a/0001-Allow-panels-outside-of-availableGeometry.patch b/0001-Allow-panels-outside-of-availableGeometry.patch new file mode 100644 index 0000000..979bfba --- /dev/null +++ b/0001-Allow-panels-outside-of-availableGeometry.patch @@ -0,0 +1,46 @@ +From 0ac4019528888aba8528432434300341df732c4e Mon Sep 17 00:00:00 2001 +From: Marco Martin +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 +(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(screen); + QWindowSystemInterface::handleWindowScreenChanged(window(), m_screen->QPlatformScreen::screen()); + break; +-- +2.1.2 + diff --git a/0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch b/0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch new file mode 100644 index 0000000..ed66d00 --- /dev/null +++ b/0002-Always-lock-the-DBus-dispatcher-before-dbus_connecti.patch @@ -0,0 +1,96 @@ +From 596a3d701bfb96de01ff2e127cd628c6b50fd9d6 Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +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 +Reviewed-by: Frederik Gladhorn +(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 + diff --git a/0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch b/0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch new file mode 100644 index 0000000..a8c1003 --- /dev/null +++ b/0003-QDBusConnection-Merge-the-dispatch-and-the-watch-and.patch @@ -0,0 +1,188 @@ +From a006c934177263675302cd5f4ae0c3b1e35215e3 Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +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 +Reviewed-by: Albert Astals Cid +Reviewed-by: Frederik Gladhorn +(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(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(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 entry = timeoutsPendingAdd.takeFirst(); + qDBusRealAddTimeout(this, entry.first, entry.second); +@@ -1188,7 +1188,7 @@ void QDBusConnectionPrivate::socketRead(int fd) + QVarLengthArray 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 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 + diff --git a/0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch b/0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch new file mode 100644 index 0000000..b7be182 --- /dev/null +++ b/0004-Partially-revert-Fix-a-deadlock-introduced-by-the-ra.patch @@ -0,0 +1,91 @@ +From a08d09767513ac2d6232f2d6d1cf2bc30974f632 Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +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 +Reviewed-by: Albert Astals Cid +Reviewed-by: Frederik Gladhorn +(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 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 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 + diff --git a/QTBUG41590.patch b/QTBUG41590.patch new file mode 100644 index 0000000..81b182c --- /dev/null +++ b/QTBUG41590.patch @@ -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: diff --git a/baselibs.conf b/baselibs.conf index 8f0c166..31282d1 100644 --- a/baselibs.conf +++ b/baselibs.conf @@ -60,10 +60,6 @@ libQt5Gui-devel libQt5Sql-devel requires "libQt5Core-devel- = " requires "libQt5Sql5- = " - requires "libQt5Sql5-mysql- = " - requires "libQt5Sql5-postgresql- = " - requires "libQt5Sql5-sqlite- = " - requires "libQt5Sql5-unixODBC- = " libQt5Bootstrap-devel-static libQt5OpenGLExtensions-devel-static requires "libQt5Core-devel- = " diff --git a/libqt5-qtbase.changes b/libqt5-qtbase.changes index f43a77d..e801fa2 100644 --- a/libqt5-qtbase.changes +++ b/libqt5-qtbase.changes @@ -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 diff --git a/libqt5-qtbase.spec b/libqt5-qtbase.spec index 1a97ca5..e69c4e8 100644 --- a/libqt5-qtbase.spec +++ b/libqt5-qtbase.spec @@ -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