From 666e598418c1ea0d0523bd7721c7cee3e786f0f3 Mon Sep 17 00:00:00 2001 From: giresun28 Date: Mon, 25 Jul 2016 13:43:15 +0000 Subject: [PATCH] =?UTF-8?q?qt5.g=C3=BCncellendi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- talimatname/genel/qt5/qt5-alsa1.11.patch | 10 -- talimatname/genel/qt5/qt5-webengine-nss.patch | 49 ------ talimatname/genel/qt5/qtbug-44964.patch | 100 ----------- talimatname/genel/qt5/qtbug-45812.patch | 97 ----------- talimatname/genel/qt5/qtbug-51648.patch | 87 ---------- talimatname/genel/qt5/qtbug-51649.patch | 158 ------------------ talimatname/genel/qt5/qtbug-51676.patch | 125 -------------- talimatname/genel/qt5/qtbug-53071.patch | 1 + talimatname/genel/qt5/qtbug-53071b.patch | 1 + talimatname/genel/qt5/qtbug-53237.patch | 90 ++++++++++ talimatname/genel/qt5/talimat | 85 ++++------ 11 files changed, 124 insertions(+), 679 deletions(-) delete mode 100644 talimatname/genel/qt5/qt5-alsa1.11.patch delete mode 100644 talimatname/genel/qt5/qt5-webengine-nss.patch delete mode 100644 talimatname/genel/qt5/qtbug-44964.patch delete mode 100644 talimatname/genel/qt5/qtbug-45812.patch delete mode 100644 talimatname/genel/qt5/qtbug-51648.patch delete mode 100644 talimatname/genel/qt5/qtbug-51649.patch delete mode 100644 talimatname/genel/qt5/qtbug-51676.patch create mode 100644 talimatname/genel/qt5/qtbug-53237.patch diff --git a/talimatname/genel/qt5/qt5-alsa1.11.patch b/talimatname/genel/qt5/qt5-alsa1.11.patch deleted file mode 100644 index c1bf57027..000000000 --- a/talimatname/genel/qt5/qt5-alsa1.11.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- qtbase-opensource-src-5.6.0-rc/config.tests/unix/alsa/alsatest.cpp.0 2016-02-29 08:15:48.203031809 +0000 -+++ qtbase-opensource-src-5.6.0-rc/config.tests/unix/alsa/alsatest.cpp 2016-02-29 08:16:39.712811962 +0000 -@@ -32,7 +32,7 @@ - ****************************************************************************/ - - #include --#if(!(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 10)) -+#if(!(SND_LIB_MAJOR == 1 && (SND_LIB_MINOR > 0 || SND_LIB_SUBMINOR >= 10))) - #error "Alsa version found too old, require >= 1.0.10" - #endif diff --git a/talimatname/genel/qt5/qt5-webengine-nss.patch b/talimatname/genel/qt5/qt5-webengine-nss.patch deleted file mode 100644 index f0e236361..000000000 --- a/talimatname/genel/qt5/qt5-webengine-nss.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff -ur qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/net/socket/ssl_client_socket_openssl.cc -qtwebengine-opensource-src-5.6.0-beta-chimera-nss-init/src/3rdparty/chromium/net/socket/ssl_client_socket_openssl.cc ---- qtwebengine-opensource-src-5.6.0-beta/src/3rdparty/chromium/net/socket/ssl_client_socket_openssl.cc 2015-12-10 18:17:21.000000000 +0100 -+++ qtwebengine-opensource-src-5.6.0-beta-chimera-nss-init/src/3rdparty/chromium/net/socket/ssl_client_socket_openssl.cc 2016-01-14 -17:11:38.432633534 +0100 -@@ -57,6 +57,10 @@ - #include "net/ssl/ssl_platform_key.h" - #endif - -+#if defined(USE_NSS_CERTS) || defined(OS_IOS) -+#include "net/cert_net/nss_ocsp.h" -+#endif -+ - namespace net { - - namespace { -@@ -795,6 +799,14 @@ - DCHECK(!ssl_); - DCHECK(!transport_bio_); - -+#if defined(USE_NSS_CERTS) || defined(OS_IOS) -+ if (ssl_config_.cert_io_enabled) { -+ // TODO(davidben): Move this out of SSLClientSocket. See -+ // https://crbug.com/539520. -+ EnsureNSSHttpIOInit(); -+ } -+#endif -+ - SSLContext* context = SSLContext::GetInstance(); - crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); - -diff -ur qtwebengine-opensource-src-5.6.0-beta/src/core/config/linux.pri qtwebengine-opensource-src-5.6.0-beta-linux-pri/src/core/config/linux.pri ---- qtwebengine-opensource-src-5.6.0-beta/src/core/config/linux.pri 2015-12-14 16:27:24.000000000 +0100 -+++ qtwebengine-opensource-src-5.6.0-beta-linux-pri/src/core/config/linux.pri 2016-01-14 17:31:05.765975551 +0100 -@@ -18,7 +18,13 @@ - use_kerberos=0 \ - use_pango=0 - --!use?(nss) { -+use?(nss) { -+# do a "chimera build" (BoringSSL code, NSS certs): This is the default in -+# Chromium 47+, and it is the only variant that works with NSS 3.21. -+ GYP_CONFIG += use_nss_certs=1 \ -+ use_openssl=1 \ -+ use_openssl_certs=0 -+} else { - GYP_CONFIG += use_nss_certs=0 \ - use_openssl=1 \ - use_openssl_certs=1 diff --git a/talimatname/genel/qt5/qtbug-44964.patch b/talimatname/genel/qt5/qtbug-44964.patch deleted file mode 100644 index 1890adbeb..000000000 --- a/talimatname/genel/qt5/qtbug-44964.patch +++ /dev/null @@ -1,100 +0,0 @@ -From 60cd1c67759642018ef93cc45a90714729100d9d Mon Sep 17 00:00:00 2001 -From: Shawn Rutledge -Date: Thu, 28 Apr 2016 11:30:30 +0200 -Subject: [PATCH] xcb: don't compress tablet motion events - -7edd10e6c added this compression feature, but it's not a good idea for -drawing-tablet applications, because smooth drawing depends on receiving -every movement of the stylus. - -Also show the device ID in qt.qpa.input.devices category logging. - -[ChangeLog][X11] The new X event compression feature that was added in -5.6.0 no longer applies to motion events from drawing tablets. - -Task-number: QTBUG-44964 -Change-Id: Icd2ca8ca77d8f80c2f39160c74208db10e382501 -Reviewed-by: Gatis Paeglis ---- - src/plugins/platforms/xcb/qxcbconnection.cpp | 7 ++++++- - src/plugins/platforms/xcb/qxcbconnection.h | 1 + - src/plugins/platforms/xcb/qxcbconnection_xi2.cpp | 21 ++++++++++++++------- - 3 files changed, 21 insertions(+), 8 deletions(-) - -diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp -index edfaf2b..669ef3a 100644 ---- a/src/plugins/platforms/xcb/qxcbconnection.cpp -+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp -@@ -1626,8 +1626,13 @@ bool QXcbConnection::compressEvent(xcb_generic_event_t *event, int currentIndex, - if (!m_xi2Enabled) - return false; - -- // compress XI_Motion -+ // compress XI_Motion, but not from tablet devices - if (isXIType(event, m_xiOpCode, XI_Motion)) { -+#ifndef QT_NO_TABLETEVENT -+ xXIDeviceEvent *xdev = reinterpret_cast(event); -+ if (const_cast(this)->tabletDataForDevice(xdev->sourceid)) -+ return false; -+#endif // QT_NO_TABLETEVENT - for (int j = nextIndex; j < eventqueue->size(); ++j) { - xcb_generic_event_t *next = eventqueue->at(j); - if (!isValid(next)) -diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h -index 7ba9588..501da1c 100644 ---- a/src/plugins/platforms/xcb/qxcbconnection.h -+++ b/src/plugins/platforms/xcb/qxcbconnection.h -@@ -578,6 +578,7 @@ private slots: - bool xi2HandleTabletEvent(void *event, TabletData *tabletData, QXcbWindowEventListener *eventListener); - void xi2ReportTabletEvent(TabletData &tabletData, void *event); - QVector m_tabletData; -+ TabletData *tabletDataForDevice(int id); - #endif // !QT_NO_TABLETEVENT - struct ScrollingDevice { - ScrollingDevice() : deviceId(0), verticalIndex(0), horizontalIndex(0), orientations(0), legacyOrientations(0) { } -diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp -index 9911afb..025dde3 100644 ---- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp -+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp -@@ -113,7 +113,7 @@ void QXcbConnection::xi2SetupDevices() - // Only non-master pointing devices are relevant here. - if (devices[i].use != XISlavePointer) - continue; -- qCDebug(lcQpaXInputDevices) << "input device "<< devices[i].name; -+ qCDebug(lcQpaXInputDevices) << "input device " << devices[i].name << "ID" << devices[i].deviceid; - #ifndef QT_NO_TABLETEVENT - TabletData tabletData; - #endif -@@ -507,12 +507,9 @@ void QXcbConnection::xi2HandleEvent(xcb_ge_event_t *event) - } - - #ifndef QT_NO_TABLETEVENT -- for (int i = 0; i < m_tabletData.count(); ++i) { -- if (m_tabletData.at(i).deviceId == sourceDeviceId) { -- if (xi2HandleTabletEvent(xiEvent, &m_tabletData[i], eventListener)) -- return; -- } -- } -+ QXcbConnection::TabletData *tablet = tabletDataForDevice(sourceDeviceId); -+ if (tablet && xi2HandleTabletEvent(xiEvent, tablet, eventListener)) -+ return; - #endif // QT_NO_TABLETEVENT - - #ifdef XCB_USE_XINPUT21 -@@ -1198,6 +1195,16 @@ void QXcbConnection::xi2ReportTabletEvent(TabletData &tabletData, void *event) - xTilt, yTilt, tangentialPressure, - rotation, 0, tabletData.serialId); - } -+ -+QXcbConnection::TabletData *QXcbConnection::tabletDataForDevice(int id) -+{ -+ for (int i = 0; i < m_tabletData.count(); ++i) { -+ if (m_tabletData.at(i).deviceId == id) -+ return &m_tabletData[i]; -+ } -+ return Q_NULLPTR; -+} -+ - #endif // QT_NO_TABLETEVENT - - #endif // XCB_USE_XINPUT2 diff --git a/talimatname/genel/qt5/qtbug-45812.patch b/talimatname/genel/qt5/qtbug-45812.patch deleted file mode 100644 index c81fa50c4..000000000 --- a/talimatname/genel/qt5/qtbug-45812.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 269fdbdd2bedda5f5eacb751224d3a3fc3eed5bc Mon Sep 17 00:00:00 2001 -From: Urs Fleisch -Date: Fri, 26 Feb 2016 17:46:09 +0100 -Subject: [PATCH] xcb: Fix drag and drop to applications like Emacs and - Chromium. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Drops without matching time stamp do not work. I have fixed the issue by -reanimating the findXdndAwareParent() function (adapted to XCB) and -using it to find a matching transaction if all else fails. - -Task-number: QTBUG-45812 -Change-Id: Ibca15bbab02ccf2f25280418e9edf36972ebf9a0 -Reviewed-by: Błażej Szczygieł -Reviewed-by: Dmitry Shachnev -Reviewed-by: Shawn Rutledge ---- - src/plugins/platforms/xcb/qxcbdrag.cpp | 55 +++++++++++++++++++++++++++------- - 1 file changed, 44 insertions(+), 11 deletions(-) - -diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp -index f5cc873..f1428d0 100644 ---- a/src/plugins/platforms/xcb/qxcbdrag.cpp -+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp -@@ -1072,6 +1072,40 @@ void QXcbDrag::cancel() - send_leave(); - } - -+// find an ancestor with XdndAware on it -+static xcb_window_t findXdndAwareParent(QXcbConnection *c, xcb_window_t window) -+{ -+ xcb_window_t target = 0; -+ forever { -+ // check if window has XdndAware -+ xcb_get_property_cookie_t gpCookie = Q_XCB_CALL( -+ xcb_get_property(c->xcb_connection(), false, window, -+ c->atom(QXcbAtom::XdndAware), XCB_GET_PROPERTY_TYPE_ANY, 0, 0)); -+ xcb_get_property_reply_t *gpReply = xcb_get_property_reply( -+ c->xcb_connection(), gpCookie, 0); -+ bool aware = gpReply && gpReply->type != XCB_NONE; -+ free(gpReply); -+ if (aware) { -+ target = window; -+ break; -+ } -+ -+ // try window's parent -+ xcb_query_tree_cookie_t qtCookie = Q_XCB_CALL( -+ xcb_query_tree_unchecked(c->xcb_connection(), window)); -+ xcb_query_tree_reply_t *qtReply = xcb_query_tree_reply( -+ c->xcb_connection(), qtCookie, NULL); -+ if (!qtReply) -+ break; -+ xcb_window_t root = qtReply->root; -+ xcb_window_t parent = qtReply->parent; -+ free(qtReply); -+ if (window == root) -+ break; -+ window = parent; -+ } -+ return target; -+} - - void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event) - { -@@ -1099,17 +1133,16 @@ void QXcbDrag::handleSelectionRequest(const xcb_selection_request_event_t *event - // xcb_convert_selection() that we sent the XdndDrop event to. - at = findTransactionByWindow(event->requestor); - } --// if (at == -1 && event->time == XCB_CURRENT_TIME) { --// // previous Qt versions always requested the data on a child of the target window --// // using CurrentTime... but it could be asking for either drop data or the current drag's data --// Window target = findXdndAwareParent(event->requestor); --// if (target) { --// if (current_target && current_target == target) --// at = -2; --// else --// at = findXdndDropTransactionByWindow(target); --// } --// } -+ -+ if (at == -1 && event->time == XCB_CURRENT_TIME) { -+ xcb_window_t target = findXdndAwareParent(connection(), event->requestor); -+ if (target) { -+ if (current_target == target) -+ at = -2; -+ else -+ at = findTransactionByWindow(target); -+ } -+ } - } - - QDrag *transactionDrag = 0; --- -2.7.1 diff --git a/talimatname/genel/qt5/qtbug-51648.patch b/talimatname/genel/qt5/qtbug-51648.patch deleted file mode 100644 index 944a08af1..000000000 --- a/talimatname/genel/qt5/qtbug-51648.patch +++ /dev/null @@ -1,87 +0,0 @@ -From b024fbe83863fc57364a52c717d5b43d654bdb5d Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Sat, 5 Mar 2016 12:23:21 -0800 -Subject: [PATCH] QtDBus: clean up signal hooks and object tree in - closeConnection - -If a QObject is added or passed as receiver to QDBusConnection::connect() -and it is managed by Q_GLOBAL_STATIC or similar mechanism, it is -possible that when that its destructor is called after the dbus daemon -thread ends. In that case, QObject::destroyed connected via -Qt::BlockingQueuedConnection to QDBusConnectionPrivate will cause dead -lock since the thread is no longer processing events. - -Task-number: QTBUG-51648 -Change-Id: I1a1810a6d6d0234af0269d5f3fc1f54101bf1547 ---- - src/dbus/qdbusconnection_p.h | 1 + - src/dbus/qdbusintegrator.cpp | 28 +++++++++++++++++++++++++++- - 2 files changed, 28 insertions(+), 1 deletion(-) - -diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h -index c77daf7..565eb83 100644 ---- a/src/dbus/qdbusconnection_p.h -+++ b/src/dbus/qdbusconnection_p.h -@@ -254,6 +254,7 @@ private: - const QVector &metaTypes, int slotIdx); - - SignalHookHash::Iterator removeSignalHookNoLock(SignalHookHash::Iterator it); -+ void disconnectObjectTree(ObjectTreeNode &node); - - bool isServiceRegisteredByThread(const QString &serviceName); - -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index cd44861..a3cd47b 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -1030,7 +1030,6 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate() - qPrintable(name)); - - closeConnection(); -- rootNode.children.clear(); // free resources - qDeleteAll(cachedMetaObjects); - - if (mode == ClientMode || mode == PeerMode) { -@@ -1052,6 +1051,20 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate() - } - } - -+void QDBusConnectionPrivate::disconnectObjectTree(QDBusConnectionPrivate::ObjectTreeNode &haystack) -+{ -+ QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin(); -+ -+ while (it != haystack.children.end()) { -+ disconnectObjectTree(*it); -+ it++; -+ } -+ -+ if (haystack.obj) { -+ haystack.obj->disconnect(this); -+ } -+} -+ - void QDBusConnectionPrivate::closeConnection() - { - QDBusWriteLocker locker(CloseConnectionAction, this); -@@ -1075,6 +1088,19 @@ void QDBusConnectionPrivate::closeConnection() - } - - qDeleteAll(pendingCalls); -+ -+ // clean up all signal hook and object tree, to avoid QObject::destroyed -+ // being activated to dbus daemon thread which already quits. -+ // dbus connection is already closed, so there is nothing we could do be clean -+ // up everything here. -+ SignalHookHash::iterator sit = signalHooks.begin(); -+ while (sit != signalHooks.end()) { -+ sit.value().obj->disconnect(this); -+ sit++; -+ } -+ -+ disconnectObjectTree(rootNode); -+ rootNode.children.clear(); // free resources - } - - void QDBusConnectionPrivate::checkThread() --- -2.7.1 diff --git a/talimatname/genel/qt5/qtbug-51649.patch b/talimatname/genel/qt5/qtbug-51649.patch deleted file mode 100644 index ba6c30268..000000000 --- a/talimatname/genel/qt5/qtbug-51649.patch +++ /dev/null @@ -1,158 +0,0 @@ -From acde2e69df5dedc624674107596f276125e22864 Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Thu, 3 Mar 2016 21:56:53 -0800 -Subject: [PATCH] QtDBus: finish all pending call with error if disconnected - -libdbus will send a local signal if connection gets disconnected. When -this happens, end all pending calls with QDBusError::Disconnected. - -Task-number: QTBUG-51649 -Change-Id: I5c7d2a468bb5da746d0c0e53e458c1e376f186a9 ---- - src/dbus/dbus_minimal_p.h | 2 ++ - src/dbus/qdbusintegrator.cpp | 26 +++++++++++++++++----- - src/dbus/qdbusutil_p.h | 6 +++++ - .../dbus/qdbusconnection/tst_qdbusconnection.cpp | 22 ++++++++++++++++++ - .../dbus/qdbusconnection/tst_qdbusconnection.h | 1 + - 5 files changed, 51 insertions(+), 6 deletions(-) - -diff --git a/src/dbus/dbus_minimal_p.h b/src/dbus/dbus_minimal_p.h -index f0a2954..8f25b24 100644 ---- a/src/dbus/dbus_minimal_p.h -+++ b/src/dbus/dbus_minimal_p.h -@@ -99,9 +99,11 @@ typedef dbus_uint32_t dbus_bool_t; - /* dbus-shared.h */ - #define DBUS_SERVICE_DBUS "org.freedesktop.DBus" - #define DBUS_PATH_DBUS "/org/freedesktop/DBus" -+#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local" - #define DBUS_INTERFACE_DBUS "org.freedesktop.DBus" - #define DBUS_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable" - #define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties" -+#define DBUS_INTERFACE_LOCAL "org.freedesktop.DBus.Local" - - #define DBUS_NAME_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */ - #define DBUS_NAME_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */ -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index cd44861..320419f 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -519,6 +519,14 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) - switch (amsg.type()) { - case QDBusMessage::SignalMessage: - handleSignal(amsg); -+ // Check local disconnected signal from libdbus -+ if (amsg.interface() == QDBusUtil::dbusInterfaceLocal() -+ && amsg.path() == QDBusUtil::dbusPathLocal() -+ && amsg.member() == QDBusUtil::disconnected() -+ && !QDBusMessagePrivate::isLocal(amsg)) { -+ while (!pendingCalls.isEmpty()) -+ processFinishedCall(pendingCalls.first()); -+ } - // if there are any other filters in this DBusConnection, - // let them see the signal too - return false; -@@ -1767,10 +1775,16 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call) - - QDBusMessage &msg = call->replyMessage; - if (call->pending) { -- // decode the message -- DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending); -- msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities); -- q_dbus_message_unref(reply); -+ // when processFinishedCall is called and pending call is not completed, -+ // it means we received disconnected signal from libdbus -+ if (q_dbus_pending_call_get_completed(call->pending)) { -+ // decode the message -+ DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending); -+ msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities); -+ q_dbus_message_unref(reply); -+ } else { -+ msg = QDBusMessage::createError(QDBusError::Disconnected, QDBusUtil::disconnectedErrorMessage()); -+ } - } - qDBusDebug() << connection << "got message reply:" << msg; - -@@ -2070,8 +2084,8 @@ void QDBusConnectionPrivate::sendInternal(QDBusPendingCallPrivate *pcall, void * - pcall->pending = pending; - q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0); - -- // DBus won't notify us when a peer disconnects so we need to track these ourselves -- if (mode == QDBusConnectionPrivate::PeerMode) -+ // DBus won't notify us when a peer disconnects or server terminates so we need to track these ourselves -+ if (mode == QDBusConnectionPrivate::PeerMode || mode == QDBusConnectionPrivate::ClientMode) - pendingCalls.append(pcall); - - return; -diff --git a/src/dbus/qdbusutil_p.h b/src/dbus/qdbusutil_p.h -index 8f5ae92..ca70ff9 100644 ---- a/src/dbus/qdbusutil_p.h -+++ b/src/dbus/qdbusutil_p.h -@@ -155,6 +155,8 @@ namespace QDBusUtil - { return QStringLiteral(DBUS_SERVICE_DBUS); } - inline QString dbusPath() - { return QStringLiteral(DBUS_PATH_DBUS); } -+ inline QString dbusPathLocal() -+ { return QStringLiteral(DBUS_PATH_LOCAL); } - inline QString dbusInterface() - { - // it's the same string, but just be sure -@@ -165,8 +167,12 @@ namespace QDBusUtil - { return QStringLiteral(DBUS_INTERFACE_PROPERTIES); } - inline QString dbusInterfaceIntrospectable() - { return QStringLiteral(DBUS_INTERFACE_INTROSPECTABLE); } -+ inline QString dbusInterfaceLocal() -+ { return QStringLiteral(DBUS_INTERFACE_LOCAL); } - inline QString nameOwnerChanged() - { return QStringLiteral("NameOwnerChanged"); } -+ inline QString disconnected() -+ { return QStringLiteral("Disconnected"); } - inline QString disconnectedErrorMessage() - { return QStringLiteral("Not connected to D-Bus server"); } - } -diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp -index e91f87d..6c7e6b1 100644 ---- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp -+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp -@@ -1218,6 +1218,28 @@ void tst_QDBusConnection::callVirtualObjectLocal() - QCOMPARE(obj.replyArguments, subPathReply.arguments()); - } - -+void tst_QDBusConnection::pendingCallWhenDisconnected() -+{ -+ QDBusServer *server = new QDBusServer; -+ QDBusConnection con = QDBusConnection::connectToPeer(server->address(), "disconnect"); -+ QTestEventLoop::instance().enterLoop(2); -+ QVERIFY(!QTestEventLoop::instance().timeout()); -+ QVERIFY(con.isConnected()); -+ -+ delete server; -+ -+ // Make sure we call the method before we know it is disconnected. -+ QVERIFY(con.isConnected()); -+ QDBusMessage message = QDBusMessage::createMethodCall("", "/", QString(), "method"); -+ QDBusPendingCall reply = con.asyncCall(message); -+ -+ QTestEventLoop::instance().enterLoop(2); -+ QVERIFY(!con.isConnected()); -+ QVERIFY(reply.isFinished()); -+ QVERIFY(reply.isError()); -+ QVERIFY(reply.error().type() == QDBusError::Disconnected); -+} -+ - QString MyObject::path; - QString MyObjectWithoutInterface::path; - QString MyObjectWithoutInterface::interface; -diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h -index a53ba32..720e484 100644 ---- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h -+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h -@@ -121,6 +121,7 @@ private slots: - void registerVirtualObject(); - void callVirtualObject(); - void callVirtualObjectLocal(); -+ void pendingCallWhenDisconnected(); - - public: - QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; } --- -2.7.1 diff --git a/talimatname/genel/qt5/qtbug-51676.patch b/talimatname/genel/qt5/qtbug-51676.patch deleted file mode 100644 index da9b1d69a..000000000 --- a/talimatname/genel/qt5/qtbug-51676.patch +++ /dev/null @@ -1,125 +0,0 @@ -From 11c5e716b08b6b3c5a7c9fce96b0cde8624ec869 Mon Sep 17 00:00:00 2001 -From: Thiago Macieira -Date: Tue, 15 Mar 2016 11:00:20 -0700 -Subject: [PATCH] Fix QtDBus deadlock inside kded/kiod - -Whenever a message spy was installed, we failed to actually process -looped-back messages by queueing them for processing by the spy. That -had as a consequence that the caller got an error reply. Worse, since -the message had been queued, QtDBus would attempt to deliver it later. -Since that message had isLocal==true, bad things happened inside the -manager thread. - -The correct solution is not to queue the message for the filter. If the -message is local, then simply deliver directly, as we're still in the -user's thread. This used to be the behavior in Qt 5.5. - -Task-number: QTBUG-51676 -Change-Id: I1dc112894cde7121e8ce302ae51b438ade1ff612 ---- - src/dbus/qdbusintegrator.cpp | 42 ++++++++++++++++++++++++++++++++---------- - src/dbus/qdbusintegrator_p.h | 1 + - 2 files changed, 33 insertions(+), 10 deletions(-) - -diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp -index cd44861..478a2c4 100644 ---- a/src/dbus/qdbusintegrator.cpp -+++ b/src/dbus/qdbusintegrator.cpp -@@ -481,6 +481,11 @@ QDBusSpyCallEvent::~QDBusSpyCallEvent() - - void QDBusSpyCallEvent::placeMetaCall(QObject *) - { -+ invokeSpyHooks(msg, hooks, hookCount); -+} -+ -+inline void QDBusSpyCallEvent::invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount) -+{ - // call the spy hook list - for (int i = 0; i < hookCount; ++i) - hooks[i](msg); -@@ -509,7 +514,12 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) - { - if (!ref.load()) - return false; -- if (!dispatchEnabled && !QDBusMessagePrivate::isLocal(amsg)) { -+ -+ // local message are always delivered, regardless of filtering -+ // or whether the dispatcher is enabled -+ bool isLocal = QDBusMessagePrivate::isLocal(amsg); -+ -+ if (!dispatchEnabled && !isLocal) { - // queue messages only, we'll handle them later - qDBusDebug() << this << "delivery is suspended"; - pendingMessages << amsg; -@@ -523,13 +533,23 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg) - // let them see the signal too - return false; - case QDBusMessage::MethodCallMessage: -- // run it through the spy filters (if any) before the regular processing -+ // run it through the spy filters (if any) before the regular processing: -+ // a) if it's a local message, we're in the caller's thread, so invoke the filter directly -+ // b) if it's an external message, post to the main thread - if (Q_UNLIKELY(qDBusSpyHookList.exists()) && qApp) { - const QDBusSpyHookList &list = *qDBusSpyHookList; -- qDBusDebug() << this << "invoking message spies"; -- QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this), -- amsg, list.constData(), list.size())); -- return true; -+ if (isLocal) { -+ Q_ASSERT(QThread::currentThread() != thread()); -+ qDBusDebug() << this << "invoking message spies directly"; -+ QDBusSpyCallEvent::invokeSpyHooks(amsg, list.constData(), list.size()); -+ } else { -+ qDBusDebug() << this << "invoking message spies via event"; -+ QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this), -+ amsg, list.constData(), list.size())); -+ -+ // we'll be called back, so return -+ return true; -+ } - } - - handleObjectCall(amsg); -@@ -1451,9 +1471,9 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg) - // that means the dispatchLock mutex is locked - // must not call out to user code in that case - // -- // however, if the message is internal, handleMessage was called -- // directly and no lock is in place. We can therefore call out to -- // user code, if necessary -+ // however, if the message is internal, handleMessage was called directly -+ // (user's thread) and no lock is in place. We can therefore call out to -+ // user code, if necessary. - ObjectTreeNode result; - int usedLength; - QThread *objThread = 0; -@@ -1492,12 +1512,14 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg) - usedLength, msg)); - return; - } else if (objThread != QThread::currentThread()) { -- // synchronize with other thread -+ // looped-back message, targeting another thread: -+ // synchronize with it - postEventToThread(HandleObjectCallPostEventAction, result.obj, - new QDBusActivateObjectEvent(QDBusConnection(this), this, result, - usedLength, msg, &sem)); - semWait = true; - } else { -+ // looped-back message, targeting current thread - semWait = false; - } - } // release the lock -diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h -index 2bbebdf..c0d9c22 100644 ---- a/src/dbus/qdbusintegrator_p.h -+++ b/src/dbus/qdbusintegrator_p.h -@@ -145,6 +145,7 @@ public: - {} - ~QDBusSpyCallEvent(); - void placeMetaCall(QObject *) Q_DECL_OVERRIDE; -+ static inline void invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount); - - QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up - QDBusMessage msg; --- -2.7.1 diff --git a/talimatname/genel/qt5/qtbug-53071.patch b/talimatname/genel/qt5/qtbug-53071.patch index ce4fa6e99..a348cda20 100644 --- a/talimatname/genel/qt5/qtbug-53071.patch +++ b/talimatname/genel/qt5/qtbug-53071.patch @@ -269,3 +269,4 @@ index ea83510..ce72e7c 100644 + } #endif // Q_OS_UNIX } + diff --git a/talimatname/genel/qt5/qtbug-53071b.patch b/talimatname/genel/qt5/qtbug-53071b.patch index 0efac6ef2..c4f954280 100644 --- a/talimatname/genel/qt5/qtbug-53071b.patch +++ b/talimatname/genel/qt5/qtbug-53071b.patch @@ -119,3 +119,4 @@ index cb9581a..bfa967e 100644 + stdTime = parsePosixTransitionTime(stdParts.at(1)); else stdTime = QTime(2, 0, 0); + diff --git a/talimatname/genel/qt5/qtbug-53237.patch b/talimatname/genel/qt5/qtbug-53237.patch new file mode 100644 index 000000000..c6d5739d5 --- /dev/null +++ b/talimatname/genel/qt5/qtbug-53237.patch @@ -0,0 +1,90 @@ +From 8e889378115c69508b050a511621ac8e30ec4158 Mon Sep 17 00:00:00 2001 +From: Jesus Fernandez +Date: Mon, 13 Jun 2016 19:09:15 +0200 +Subject: [PATCH] Fix UNSIGNED values in QMYSQL + +The unsigned flag in columns was ignored when creating the list of +bound values in a mysql table. So the result iteration with +QSqlQuery::next stops after the first wrong truncated value. + +[ChangeLog][QtSql] Fixed QSqlQuery::prepare value truncation error when +using UNSIGNED values in a MySQL database. + +Task-number: QTBUG-53969 +Task-number: QTBUG-53237 +Change-Id: I10d977993445f2794f1dd8c88b2e83517ef524f3 +Reviewed-by: Milian Wolff +--- + src/sql/drivers/mysql/qsql_mysql.cpp | 1 + + tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 39 +++++++++++++++++++++++ + 2 files changed, 40 insertions(+) + +diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp +index 96bdcc4..55bf499 100644 +--- a/src/sql/drivers/mysql/qsql_mysql.cpp ++++ b/src/sql/drivers/mysql/qsql_mysql.cpp +@@ -387,6 +387,7 @@ bool QMYSQLResultPrivate::bindInValues() + bind->buffer_length = f.bufLength = fieldInfo->length + 1; + bind->is_null = &f.nullIndicator; + bind->length = &f.bufLength; ++ bind->is_unsigned = fieldInfo->flags & UNSIGNED_FLAG ? 1 : 0; + f.outField=field; + + ++i; +diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +index bd553d5..f1c4333 100644 +--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp ++++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp +@@ -233,6 +233,9 @@ private slots: + void QTBUG_36211_data() { generic_data("QPSQL"); } + void QTBUG_36211(); + ++ void QTBUG_53969_data() { generic_data("QMYSQL"); } ++ void QTBUG_53969(); ++ + void sqlite_constraint_data() { generic_data("QSQLITE"); } + void sqlite_constraint(); + +@@ -3652,6 +3655,42 @@ void tst_QSqlQuery::QTBUG_36211() + } + } + ++void tst_QSqlQuery::QTBUG_53969() ++{ ++ QFETCH( QString, dbName ); ++ QVector values = QVector() << 10 << 20 << 127 << 128 << 1, tableValues; ++ QSqlDatabase db = QSqlDatabase::database( dbName ); ++ CHECK_DATABASE( db ); ++ tableValues.reserve(values.size()); ++ if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer) { ++ const QString tableName(qTableName("bug53969", __FILE__, db)); ++ tst_Databases::safeDropTable( db, tableName ); ++ ++ QSqlQuery q(db); ++ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id INT AUTO_INCREMENT PRIMARY KEY, " ++ "test_number TINYINT(3) UNSIGNED)") ++ .arg(tableName))); ++ ++ QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (test_number) VALUES (:value)")); ++ ++ QVector::iterator begin = values.begin(), end = values.end(), it; ++ for (it = begin; it != end; ++it) { ++ q.bindValue(":value", *it); ++ QVERIFY_SQL(q, exec()); ++ } ++ ++ QVERIFY_SQL(q, prepare("SELECT test_number FROM " + tableName)); ++ QVERIFY_SQL(q, exec()); ++ ++ while (q.next()) { ++ bool ok; ++ tableValues.push_back(q.value(0).toUInt(&ok)); ++ QVERIFY(ok); ++ } ++ QCOMPARE(values, tableValues); ++ } ++} ++ + void tst_QSqlQuery::oraOCINumber() + { + QFETCH( QString, dbName ); diff --git a/talimatname/genel/qt5/talimat b/talimatname/genel/qt5/talimat index a8300c02d..d4ea70388 100644 --- a/talimatname/genel/qt5/talimat +++ b/talimatname/genel/qt5/talimat @@ -4,45 +4,27 @@ # Depends on: xorg-proto xorg-libxkbfile xorg-xtrans xorg-libx11 xorg-libxext xorg-libfs xorg-libice xorg-libsm xorg-libxscrnsaver xorg-libxt xorg-libxmu xorg-libxpm xorg-libxaw xorg-libxfixes xorg-libxcomposite xorg-libxrender xorg-libxcursor xorg-libxdamage xorg-libfontenc xorg-libxfont xorg-libxft xorg-libxi xorg-libxinerama xorg-libxrandr xorg-libxres xorg-libxtst xorg-libxv xorg-libxvmc xorg-libxxf86dga xorg-libxxf86vm xorg-libdmx xorg-libpciaccess xorg-libxkbfile xorg-libxshmfence xcb-proto xcb-util-image xcb-util-keysyms xcb-util-renderutil xcb-util-wm alsa-lib cups dbus glib gstreamer-plugins-base icu jasper libjpeg-turbo libmng libpng libtiff libwebp xorg-mesa mtdev pcre sqlite ruby gstreamer1-plugins-base geoclue gtk2 harfbuzz postgresql pulseaudio unixodbc libxkbcommon mariadb name=qt5 -version=5.6.0 +version=5.7.0 release=1 source=(http://download.qt.io/official_releases/qt/${version%.*}/$version/single/qt-everywhere-opensource-src-$version.tar.xz - qt5-alsa1.11.patch - qtbug-51648.patch - qtbug-51649.patch - qtbug-51676.patch - qtbug-45812.patch - qtbug-44964.patch - qtbug-53071.patch - qtbug-53071b.patch - qt5-webengine-nss.patch) + qtbug-53237.patch + qtbug-53071.patch + qtbug-53071b.patch) build() { + QT5PREFIX=/usr QT5BINDIR=$QT5PREFIX/lib/qt5/bin - cd qt-everywhere-opensource-src-$version -# Backport fixes for QtDBus deadlocks -patch -p1 -d qtbase -i $SRC/qtbug-51648.patch -patch -p1 -d qtbase -i $SRC/qtbug-51649.patch -patch -p1 -d qtbase -i $SRC/qtbug-51676.patch - -# Fix drag and drop from some applications -patch -p1 -d qtbase -i $SRC/qtbug-45812.patch - # Fix parsing of tzfile(5) POSIX rule zone names with bracket quotes patch -p1 -d qtbase -i $SRC/qtbug-53071.patch patch -p1 -d qtbase -i $SRC/qtbug-53071b.patch -# Don't compress tablet motion events -patch -p1 -d qtbase -i $SRC/qtbug-44964.patch - -# Broken SSL for some sites #1870 -# https://github.com/QupZilla/qupzilla/issues/1870 -patch -p1 -d qtwebengine -i $SRC/qt5-webengine-nss.patch +# Fix UNSIGNED values in QMYSQL +patch -p1 -d qtbase -i $SRC/qtbug-53237.patch # Respect system CXX [ "$CXX" ] || CXX=g++ @@ -53,20 +35,13 @@ sed -i 's|X11R6/||g' qtbase/mkspecs/*/*.conf # Respect system CXXFLAGS sed -i "s|^\(QMAKE_CFLAGS_RELEASE.*\)|\1 ${CXXFLAGS}|" qtbase/mkspecs/common/gcc-base.conf -#sed -i "s|-O2|$CXXFLAGS|" qtbase/mkspecs/common/g++-unix.conf -#sed -i "s|-O2|${CXXFLAGS}|" qtbase/mkspecs/common/{g++,gcc}-base.conf # Respect system LDFLAGS sed -i "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 ${LDFLAGS}|" qtbase/mkspecs/common/g++-unix.conf -#sed -i "/^QMAKE_LFLAGS\s/s|+=|+= ${LDFLAGS}|g" qtbase/mkspecs/common/gcc-base.conf # Fix quoting bug sed -i 's|"$COMPILER" -c|$COMPILER -c|' qtbase/config.tests/unix/fvisibility.test -export QTDIR="$PWD" -export LD_LIBRARY_PATH="$QTDIR/qtbase/lib:$QTDIR/qttools/lib:$LD_LIBRARY_PATH" -export QT_PLUGIN_PATH="$QTDIR/qtbase/plugins" - ./configure -opensource -confirm-license \ -prefix $QT5PREFIX \ -sysconfdir /etc/xdg \ @@ -77,12 +52,17 @@ export QT_PLUGIN_PATH="$QTDIR/qtbase/plugins" -datadir /usr/share/qt5 \ -translationdir /usr/share/qt5/translations \ -plugin-sql-{psql,mysql,sqlite,odbc} \ - -openssl-linked -dbus-linked \ - -system-lib{png,jpeg} -system-{zlib,sqlite} \ - -no-cups -optimized-qmake \ - -x{cursor,inerama,kb,randr,render} \ + -openssl-linked \ + -dbus-linked \ + -system-sqlite \ + -system-zlib \ + -system-harfbuzz \ + -optimized-qmake \ -nomake examples \ - -no-separate-debug-info -no-strip -shared -no-rpath \ + -no-separate-debug-info \ + -no-strip \ + -shared \ + -no-rpath \ -release -reduce-relocations make @@ -114,53 +94,53 @@ install -dm755 $PKG/usr/share/applications cat > $PKG/usr/share/applications/assistant-qt5.desktop << "EOf" [Desktop Entry] Name=Qt5 Assistant -comment=Shows Qt5 documentation and examples +Comment=Shows Qt5 documentation and examples Exec=assistant-qt5 -icon=/usr/share/pixmaps/assistant-qt5 +Icon=/usr/share/pixmaps/assistant-qt5 Terminal=false Encoding=UTf-8 Type=Application -categories=Qt;Development;Documentation; +Categories=Qt;Development;Documentation; EOf cat > $PKG/usr/share/applications/designer-qt5.desktop << "EOf" [Desktop Entry] Name=Qt5 Designer GenericName=interface Designer -comment=Design GUis for Qt5 applications +Comment=Design GUis for Qt5 applications Exec=designer-qt5 -icon=/usr/share/pixmaps/designer-qt5 -mimeType=application/x-designer; +Icon=/usr/share/pixmaps/designer-qt5 +MimeType=application/x-designer; Terminal=false Encoding=UTf-8 Type=Application -categories=Qt;Development; +Categories=Qt;Development; EOf cat > $PKG/usr/share/applications/linguist-qt5.desktop << "EOf" [Desktop Entry] Name=Qt5 Linguist -comment=Add translations to Qt5 applications +Comment=Add translations to Qt5 applications Exec=linguist-qt5 -icon=/usr/share/pixmaps/linguist-qt5 -mimeType=text/vnd.trolltech.linguist;application/x-linguist; +Icon=/usr/share/pixmaps/linguist-qt5 +MimeType=text/vnd.trolltech.linguist;application/x-linguist; Terminal=false Encoding=UTf-8 Type=Application -categories=Qt;Development; +Categories=Qt;Development; EOf cat > $PKG/usr/share/applications/qdbusviewer-qt5.desktop << "EOf" [Desktop Entry] Name=Qt5 QDbusviewer GenericName=D-Bus Debugger -comment=Debug D-Bus applications +Comment=Debug D-Bus applications Exec=qdbusviewer-qt5 -icon=/usr/share/pixmaps/qdbusviewer-qt5 +Icon=/usr/share/pixmaps/qdbusviewer-qt5 Terminal=false Encoding=UTf-8 Type=Application -categories=Qt;Development;Debugger; +Categories=Qt;Development;Debugger; EOf mkdir -p $PKG/etc/profile.d @@ -175,8 +155,7 @@ export QT5PREFIX QT5BINDIR QT5DIR # End /etc/profile.d/qt5.sh EOf -### Creation des liens /usr/bin vers les binaires se trouvant -### dans le dossier /usr/lib/qt5/bin en ajoutant qt5 à la fin du lien + mkdir -p $PKG/usr/bin for i in $PKG/usr/lib/qt5/bin/*; do