diff --git a/0001-xcb-Properly-interpret-data.l-0-field-of-XdndStatus-.patch b/0001-xcb-Properly-interpret-data.l-0-field-of-XdndStatus-.patch new file mode 100644 index 0000000..c0c3bc1 --- /dev/null +++ b/0001-xcb-Properly-interpret-data.l-0-field-of-XdndStatus-.patch @@ -0,0 +1,37 @@ +From 46f1c4c86bbfe7b6917907700bec998626ad4a8b Mon Sep 17 00:00:00 2001 +From: Alexander Volkov +Date: Wed, 11 May 2016 18:42:24 +0300 +Subject: [PATCH 001/178] xcb: Properly interpret data.l[0] field of XdndStatus + message + +The standard https://freedesktop.org/wiki/Specifications/XDND/ +states: "In order for the proxy window to behave correctly, the +appropriate field of the client messages, window or data.l[0], +must contain the ID of the window in which the mouse is located, +not the proxy window that is receiving the messages." + +So compare it with the current target window instead of the +current proxy window. + +Change-Id: Ie31fd3aeadebcf5a9be7b9a9194f35a4ec7bdebb +Reviewed-by: Lars Knoll +--- + src/plugins/platforms/xcb/qxcbdrag.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp +index 6fa5dfa..f93e420 100644 +--- a/src/plugins/platforms/xcb/qxcbdrag.cpp ++++ b/src/plugins/platforms/xcb/qxcbdrag.cpp +@@ -829,7 +829,7 @@ void QXcbDrag::handle_xdnd_status(const xcb_client_message_event_t *event) + DEBUG("xdndHandleStatus"); + waiting_for_status = false; + // ignore late status messages +- if (event->data.data32[0] && event->data.data32[0] != current_proxy_target) ++ if (event->data.data32[0] && event->data.data32[0] != current_target) + return; + + const bool dropPossible = event->data.data32[1]; +-- +2.7.4 + diff --git a/0011-XCB-Auto-detect-xcb-glx-also-with-xcb-qt.patch b/0011-XCB-Auto-detect-xcb-glx-also-with-xcb-qt.patch new file mode 100644 index 0000000..edaccef --- /dev/null +++ b/0011-XCB-Auto-detect-xcb-glx-also-with-xcb-qt.patch @@ -0,0 +1,31 @@ +From 2852a8b87e3a8ed95b72d26b0e180b7fd4491cf3 Mon Sep 17 00:00:00 2001 +From: Gabriel de Dietrich +Date: Fri, 26 Feb 2016 11:53:01 -0800 +Subject: [PATCH 011/178] XCB: Auto-detect xcb-glx also with xcb-qt + +Task-number: QTBUG-43784 +Change-Id: Iaa0388e34900f6241db8cd864caed4fb6fc32819 +Reviewed-by: Laszlo Agocs +--- + configure | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure b/configure +index ce5b9c2..a481981 100755 +--- a/configure ++++ b/configure +@@ -5555,6 +5555,11 @@ if [ "$CFG_XCB" != "no" ]; then + + if [ "$CFG_XCB" = "qt" ]; then + QT_CONFIG="$QT_CONFIG xcb-qt" ++ ++ if compileTest qpa/xcb-glx "xcb-glx" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then ++ CFG_XCB_GLX=yes ++ QT_CONFIG="$QT_CONFIG xcb-glx" ++ fi + else + CFG_XCB="system" + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then +-- +2.7.4 + diff --git a/0032-xcb-Fix-drop-of-text-uri-list-and-text-html.patch b/0032-xcb-Fix-drop-of-text-uri-list-and-text-html.patch new file mode 100644 index 0000000..db96ec5 --- /dev/null +++ b/0032-xcb-Fix-drop-of-text-uri-list-and-text-html.patch @@ -0,0 +1,78 @@ +From 1108291e1a2e7de23440c2b36b2fd31010ae3f51 Mon Sep 17 00:00:00 2001 +From: Urs Fleisch +Date: Tue, 3 May 2016 20:01:01 +0200 +Subject: [PATCH 032/178] xcb: Fix drop of text/uri-list and text/html. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When dropping URLs from Firefox or Chrome, the contents are encoded as +UTF16, but not correctly decoded. Moreover, the special handling of +"text/x-moz-url" drops does not work because this format is converted to +"text/uri-list" before. This fixes the handling for URL list and also +for UTF16 "text/html". + +Task-number: QTBUG-47981 +Change-Id: I1153f21ede07b2bfe4d104e0fe8bc8487ec5c165 +Reviewed-by: Błażej Szczygieł +Reviewed-by: Shawn Rutledge +--- + src/plugins/platforms/xcb/qxcbmime.cpp | 42 +++++++++++++++++++++++++--------- + 1 file changed, 31 insertions(+), 11 deletions(-) + +diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp +index eeac561..cef2210 100644 +--- a/src/plugins/platforms/xcb/qxcbmime.cpp ++++ b/src/plugins/platforms/xcb/qxcbmime.cpp +@@ -182,17 +182,37 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, + a == connection->atom(QXcbAtom::TEXT)) + return QString::fromLatin1(data); + } +- +- // special case for uri types +- if (format == QLatin1String("text/uri-list")) { +- if (atomName == QLatin1String("text/x-moz-url")) { +- // we expect this as utf16 +- // the first part is a url that should only contain ascci char +- // so it should be safe to check that the second char is 0 +- // to verify that it is utf16 +- if (data.size() > 1 && data.at(1) == 0) +- return QString::fromRawData((const QChar *)data.constData(), +- data.size() / 2).split(QLatin1Char('\n')).first().toLatin1(); ++ // If data contains UTF16 text, convert it to a string. ++ // Firefox uses UTF16 without BOM for text/x-moz-url, "text/html", ++ // Google Chrome uses UTF16 without BOM for "text/x-moz-url", ++ // UTF16 with BOM for "text/html". ++ if ((format == QLatin1String("text/html") || format == QLatin1String("text/uri-list")) ++ && data.size() > 1) { ++ const quint8 byte0 = data.at(0); ++ const quint8 byte1 = data.at(1); ++ if ((byte0 == 0xff && byte1 == 0xfe) || (byte0 == 0xfe && byte1 == 0xff) ++ || (byte0 != 0 && byte1 == 0) || (byte0 == 0 && byte1 != 0)) { ++ const QString str = QString::fromUtf16( ++ reinterpret_cast<const ushort *>(data.constData()), data.size() / 2); ++ if (!str.isNull()) { ++ if (format == QLatin1String("text/uri-list")) { ++ const QStringList urls = str.split(QLatin1Char('\n')); ++ QList<QVariant> list; ++ foreach (const QString &s, urls) { ++ const QUrl url(s.trimmed()); ++ if (url.isValid()) ++ list.append(url); ++ } ++ // We expect "text/x-moz-url" as <url><space><title>. ++ // The atomName variable is not used because mimeAtomToString() ++ // converts "text/x-moz-url" to "text/uri-list". ++ if (!list.isEmpty() && connection->atomName(a) == "text/x-moz-url") ++ return list.first(); ++ return list; ++ } else { ++ return str; ++ } ++ } + } + } + +-- +2.7.4 + diff --git a/0033-xcb-Fix-dropping-URL-on-Firefox-window.patch b/0033-xcb-Fix-dropping-URL-on-Firefox-window.patch new file mode 100644 index 0000000..c48076a --- /dev/null +++ b/0033-xcb-Fix-dropping-URL-on-Firefox-window.patch @@ -0,0 +1,58 @@ +From f162e29acca99aaab173fb323d112aad9ec6c2b5 Mon Sep 17 00:00:00 2001 +From: Urs Fleisch <ufleisch@users.sourceforge.net> +Date: Wed, 4 May 2016 19:47:16 +0200 +Subject: [PATCH 033/178] xcb: Fix dropping URL on Firefox window. + +When a URL is dropped on a Firefox window, the "text/x-moz-url" data +takes precedence over the "text/uri-list". The "text/x-moz-url" is +interpreted as UTF16, however, the data from Qt 5 applications is not +in the correct format. The code to create correct UTF16 data exists, +but it is not called for two reasons: The atomName will never be +"text/x-moz-url" because it is changed to "text/uri-list" by +mimeAtomToString() and the InternalMimeData::hasFormatHelper() case is +already handled above and the else part will never be considered. +This patch fixes the check and brings it into the right order. + +Task-number: QTBUG-49947 +Change-Id: I5ebd31914cc6c1417c513c1ff09e0e858a16915d +Reviewed-by: Dmitry Shachnev <mitya57@gmail.com> +Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com> +--- + src/plugins/platforms/xcb/qxcbmime.cpp | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp +index cef2210..7fea068 100644 +--- a/src/plugins/platforms/xcb/qxcbmime.cpp ++++ b/src/plugins/platforms/xcb/qxcbmime.cpp +@@ -111,17 +111,18 @@ bool QXcbMime::mimeDataForAtom(QXcbConnection *connection, xcb_atom_t a, QMimeDa + QString atomName = mimeAtomToString(connection, a); + if (QInternalMimeData::hasFormatHelper(atomName, mimeData)) { + *data = QInternalMimeData::renderDataHelper(atomName, mimeData); +- if (atomName == QLatin1String("application/x-color")) ++ // mimeAtomToString() converts "text/x-moz-url" to "text/uri-list", ++ // so QXcbConnection::atomName() has to be used. ++ if (atomName == QLatin1String("text/uri-list") ++ && connection->atomName(a) == "text/x-moz-url") { ++ const QByteArray uri = data->split('\n').first(); ++ QString mozUri = QString::fromLatin1(uri, uri.size()); ++ mozUri += QLatin1Char('\n'); ++ *data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), ++ mozUri.length() * 2); ++ } else if (atomName == QLatin1String("application/x-color")) + *dataFormat = 16; + ret = true; +- } else if (atomName == QLatin1String("text/x-moz-url") && +- QInternalMimeData::hasFormatHelper(QLatin1String("text/uri-list"), mimeData)) { +- QByteArray uri = QInternalMimeData::renderDataHelper( +- QLatin1String("text/uri-list"), mimeData).split('\n').first(); +- QString mozUri = QString::fromLatin1(uri, uri.size()); +- mozUri += QLatin1Char('\n'); +- *data = QByteArray(reinterpret_cast<const char *>(mozUri.utf16()), mozUri.length() * 2); +- ret = true; + } else if ((a == XCB_ATOM_PIXMAP || a == XCB_ATOM_BITMAP) && mimeData->hasImage()) { + ret = true; + } +-- +2.7.4 + diff --git a/0148-xcb-Disable-GLX-pbuffers-with-Chromium-in-VMs.patch b/0148-xcb-Disable-GLX-pbuffers-with-Chromium-in-VMs.patch new file mode 100644 index 0000000..3df92a5 --- /dev/null +++ b/0148-xcb-Disable-GLX-pbuffers-with-Chromium-in-VMs.patch @@ -0,0 +1,37 @@ +From 76810e1495b65a09e9abd6164639e0caf34d61b8 Mon Sep 17 00:00:00 2001 +From: Laszlo Agocs <laszlo.agocs@theqtcompany.com> +Date: Fri, 20 May 2016 14:52:18 +0200 +Subject: [PATCH 148/178] xcb: Disable GLX pbuffers with Chromium in VMs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: I474e4a4ce424a92b46381eb26aeda811ed059819 +Task-number: QTCREATORBUG-16252 +Task-number: QTCREATORBUG-14937 +Reviewed-by: Błażej Szczygieł <spaz16@wp.pl> +Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io> +--- + .../platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp +index a3a8aa2..55d0ff3 100644 +--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp ++++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp +@@ -201,8 +201,10 @@ QPlatformOffscreenSurface *QXcbGlxIntegration::createPlatformOffscreenSurface(QO + display = static_cast<Display *>(m_connection->xlib_display()); + #endif + const char *glxvendor = glXGetClientString(display, GLX_VENDOR); +- if (glxvendor && !strcmp(glxvendor, "ATI")) +- glxPbufferUsable = false; ++ if (glxvendor) { ++ if (!strcmp(glxvendor, "ATI") || !strcmp(glxvendor, "Chromium")) ++ glxPbufferUsable = false; ++ } + } + if (glxPbufferUsable) + return new QGLXPbuffer(surface); +-- +2.7.4 + diff --git a/0155-xcb-Fix-transient-parent-and-Qt-Window-flag.patch b/0155-xcb-Fix-transient-parent-and-Qt-Window-flag.patch new file mode 100644 index 0000000..3157aac --- /dev/null +++ b/0155-xcb-Fix-transient-parent-and-Qt-Window-flag.patch @@ -0,0 +1,64 @@ +From 4762fabce16c611f12542a48b0dd31b3cec8e530 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= <spaz16@wp.pl> +Date: Thu, 14 Apr 2016 13:20:23 +0200 +Subject: [PATCH 155/178] xcb: Fix transient parent and "Qt::Window" flag + +Don't set transient parent property when Qt::Window flag is set. +Delete transient parent property if a window doesn't have a transient parent. +Force setting standard window flags for Qt::Window only if there are no other +flags. + +Amends 98c10a02c5b77e023471ad6993dc66b013889cfb + +Task-number: QTBUG-52550 +Change-Id: I68ee715b632487e9dd0e7ffbbfc0c2cdd0f0e151 +Reviewed-by: Dmitry Shachnev <mitya57@gmail.com> +Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> +--- + src/plugins/platforms/xcb/qxcbwindow.cpp | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp +index 429ba8d..0c2f0d7 100644 +--- a/src/plugins/platforms/xcb/qxcbwindow.cpp ++++ b/src/plugins/platforms/xcb/qxcbwindow.cpp +@@ -821,9 +821,9 @@ void QXcbWindow::show() + propagateSizeHints(); + + // update WM_TRANSIENT_FOR +- const QWindow *tp = window()->transientParent(); +- if (isTransient(window()) || tp != 0) { +- xcb_window_t transientXcbParent = 0; ++ xcb_window_t transientXcbParent = 0; ++ if (isTransient(window())) { ++ const QWindow *tp = window()->transientParent(); + if (tp && tp->handle()) + transientXcbParent = static_cast<const QXcbWindow *>(tp->handle())->winId(); + // Default to client leader if there is no transient parent, else modal dialogs can +@@ -836,6 +836,8 @@ void QXcbWindow::show() + 1, &transientXcbParent)); + } + } ++ if (!transientXcbParent) ++ Q_XCB_CALL(xcb_delete_property(xcb_connection(), m_window, XCB_ATOM_WM_TRANSIENT_FOR)); + + // update _MOTIF_WM_HINTS + updateMotifWmHintsBeforeMap(); +@@ -1195,9 +1197,11 @@ void QXcbWindow::setMotifWindowFlags(Qt::WindowFlags flags) + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; +- if (type == Qt::Window && !customize) +- flags |= Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint; +- ++ if (type == Qt::Window && !customize) { ++ const Qt::WindowFlags defaultFlags = Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint; ++ if (!(flags & defaultFlags)) ++ flags |= defaultFlags; ++ } + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; +-- +2.7.4 + diff --git a/qt5-qtbase.spec b/qt5-qtbase.spec index e4ee461..c21f571 100644 --- a/qt5-qtbase.spec +++ b/qt5-qtbase.spec @@ -56,7 +56,7 @@ BuildRequires: pkgconfig(libsystemd) Summary: Qt5 - QtBase components Name: qt5-qtbase Version: 5.6.1 -Release: 2%{?prerelease:.%{prerelease}}%{?dist} +Release: 3%{?prerelease:.%{prerelease}}%{?dist} # See LGPL_EXCEPTIONS.txt, for exception details License: LGPLv2 with exceptions or GPLv3 with exceptions @@ -101,6 +101,12 @@ Patch60: moc-get-the-system-defines-from-the-compiler-itself.patch Patch61: qt5-qtbase-cxxflag.patch ## upstream patches +Patch101: 0001-xcb-Properly-interpret-data.l-0-field-of-XdndStatus-.patch +Patch111: 0011-XCB-Auto-detect-xcb-glx-also-with-xcb-qt.patch +Patch132: 0032-xcb-Fix-drop-of-text-uri-list-and-text-html.patch +Patch133: 0033-xcb-Fix-dropping-URL-on-Firefox-window.patch +Patch148: 0148-xcb-Disable-GLX-pbuffers-with-Chromium-in-VMs.patch +Patch155: 0155-xcb-Fix-transient-parent-and-Qt-Window-flag.patch # macros, be mindful to keep sync'd with macros.qt5 Source10: macros.qt5 @@ -354,6 +360,13 @@ RPM macros for building Qt5 packages. %patch60 -p1 -b .moc_system_defines %patch61 -p1 -b .qt5-qtbase-cxxflag +%patch101 -p1 -b .0001-xcb +%patch111 -p1 -b .0011 +%patch132 -p1 -b .0032 +%patch133 -p1 -b .0033 +%patch148 -p1 -b .0148 +%patch155 -p1 -b .0155 + %define platform linux-g++ %if 0%{?inject_optflags} @@ -947,6 +960,9 @@ fi %changelog +* Tue Jun 14 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.1-3 +- backport some xcb-plugin-related fixes + * Thu Jun 09 2016 Rex Dieter <rdieter@fedoraproject.org> - 5.6.1-2 - fix Qt5.pc version