commit libqt5-qtbase for openSUSE:Factory
Hello community, here is the log from the commit of package libqt5-qtbase for openSUSE:Factory checked in at 2015-09-27 08:38:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqt5-qtbase (Old) and /work/SRC/openSUSE:Factory/.libqt5-qtbase.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "libqt5-qtbase" Changes: -------- --- /work/SRC/openSUSE:Factory/libqt5-qtbase/libqt5-qtbase.changes 2015-08-07 00:19:30.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.libqt5-qtbase.new/libqt5-qtbase.changes 2015-09-27 08:37:44.000000000 +0200 @@ -1,0 +2,30 @@ +Tue Aug 18 16:38:29 UTC 2015 - hrvoje.senjan@gmail.com + +- Added patches from upstream: + ignore-disabling-of-outputs-in-the-middle-of-the-mode-switch.patch + (qtbug#44158, qtbug#46786, qtbug#46822) + when-a-screen-comes-back-online-the-windows-need-to-be-told-about-it.patch + (qtbug#47041) + +------------------------------------------------------------------- +Sun Aug 16 08:31:58 UTC 2015 - hrvoje.senjan@gmail.com + +- Update to 5.5.0 + * For more details please see: + http://blog.qt.io/blog/2015/07/01/qt-5-5-released/ + and https://wiki.qt.io/New_Features_in_Qt_5.5 +- Drop patches merged upstream: + 0001-Speed-up-compose-file-parsing-in-the-X11-composition.patch, + 0002-Speed-up-application-startup-on-X11.patch, + Fix-regression-in-compose-table-parsing.patch, + libqt5-libtool-nodate.diff and + make-qdbusxml2cpp-output-reproducible.patch +- Add patches from upstream: + Add-a-linker-version-script-to-Qt-libraries.patch, + Add-a-qt_version_tag-symbol-to-QtCore-that-uses-ELF-versions.patch + and Add-an-automatic-use-of-the-ELF-versioned-QtCore-symbol.patch +- Added tslib-devel and libinput-devel (Build)Requires +- Drop all openSUSE 13.1 conditionals, we won't build Qt >= 5.5 on + that distro version anymore + +------------------------------------------------------------------- Old: ---- 0001-Speed-up-compose-file-parsing-in-the-X11-composition.patch 0002-Speed-up-application-startup-on-X11.patch Fix-regression-in-compose-table-parsing.patch libqt5-libtool-nodate.diff make-qdbusxml2cpp-output-reproducible.patch qtbase-opensource-src-5.4.2.tar.xz New: ---- Add-a-linker-version-script-to-Qt-libraries.patch Add-a-qt_version_tag-symbol-to-QtCore-that-uses-ELF-versions.patch Add-an-automatic-use-of-the-ELF-versioned-QtCore-symbol.patch ignore-disabling-of-outputs-in-the-middle-of-the-mode-switch.patch qtbase-opensource-src-5.5.0.tar.xz when-a-screen-comes-back-online-the-windows-need-to-be-told-about-it.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqt5-qtbase.spec ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -26,15 +26,15 @@ %endif Name: libqt5-qtbase -Version: 5.4.2 +Version: 5.5.0 Release: 0 Summary: C++ Program Library, Core Components License: GPL-3.0 or SUSE-LGPL-2.1-with-digia-exception-1.1 Group: System/Libraries Url: http://qt.digia.com %define base_name libqt5 -%define real_version 5.4.2 -%define so_version 5.4.2 +%define real_version 5.5.0 +%define so_version 5.5.0 %define tar_version qtbase-opensource-src-%{real_version} Source: %{tar_version}.tar.xz # to get mtime of file: @@ -43,8 +43,6 @@ Source3: baselibs.conf Source99: libqt5-qtbase-rpmlintrc # patches 0-1000 are openSUSE and/or non-upstream(able) patches # -# PATCH-FIX-UPSTREAM libqt5-libtool-nodate.diff -- for ommiting date/time on build -Patch0: libqt5-libtool-nodate.diff # PATCH-FIX-UPSTREAM use-freetype-default.patch -- allow using lcd-default filter regardless of how freetype2 library has been built (w/ & w/o subpixel) Patch2: use-freetype-default.patch # PATCH-FIX-SUSE libqt5-Fix-Gujarati-font.patch bnc#878292 fix broken Gujarati font rendering @@ -53,18 +51,12 @@ 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 make-qdbusxml2cpp-output-reproducible.patch -- https://codereview.qt-project.org/#/c/105210/1 -Patch7: make-qdbusxml2cpp-output-reproducible.patch # PATCH-FIX-OPENSUSE Fix-shortcuts-with-keypad-keys.patch -- https://codereview.qt-project.org/#/c/95219/ Patch8: Fix-shortcuts-with-keypad-keys.patch # patches 1000-2000 and above from upstream 5.3 branch # # patches 2000-3000 and above from upstream 5.5 branch # -# PATCH-FIX-UPSTREAM 0001-Speed-up-compose-file-parsing-in-the-X11-composition.patch -Patch2007: 0001-Speed-up-compose-file-parsing-in-the-X11-composition.patch -# PATCH-FIX-UPSTREAM 0002-Speed-up-application-startup-on-X11.patch -Patch2008: 0002-Speed-up-application-startup-on-X11.patch -# PATCH-FIX-UPSTREAM Fix-regression-in-compose-table-parsing.patch -Patch2009: Fix-regression-in-compose-table-parsing.patch +Patch2000: ignore-disabling-of-outputs-in-the-middle-of-the-mode-switch.patch +Patch2001: when-a-screen-comes-back-online-the-windows-need-to-be-told-about-it.patch Patch2010: 0001-Fix-QWidget-setWindowRole.patch Patch2011: 0002-xcb-Fix-getting-the-window-types-from-the-property-o.patch Patch2012: 0003-Fix-centering-dialogs.patch @@ -72,6 +64,9 @@ Patch2014: 0005-Restore-documented-behavior-for-the-WA_X11NetWmWindo.patch Patch2015: 0006-xcb-set-SM_CLIENT_ID-property.patch Patch2016: QMimeDatabase-use-QElapsedTimer.patch +Patch3000: Add-a-linker-version-script-to-Qt-libraries.patch +Patch3001: Add-a-qt_version_tag-symbol-to-QtCore-that-uses-ELF-versions.patch +Patch3002: Add-an-automatic-use-of-the-ELF-versioned-QtCore-symbol.patch BuildRequires: alsa-devel BuildRequires: cups-devel BuildRequires: gcc-c++ @@ -103,6 +98,7 @@ %endif BuildRequires: libicu-devel BuildRequires: libpulse-devel +BuildRequires: tslib-devel BuildRequires: xcb-util-image-devel BuildRequires: xcb-util-keysyms-devel BuildRequires: xcb-util-renderutil-devel @@ -111,18 +107,13 @@ BuildRequires: xz BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gtk+-2.0) -BuildRequires: pkgconfig(libudev) -%if 0%{?suse_version} > 1310 BuildRequires: pkgconfig(harfbuzz) -%endif BuildRequires: pkgconfig(ice) +BuildRequires: pkgconfig(libinput) +BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(sm) -%if 0%{?suse_version} > 1310 BuildRequires: pkgconfig(xkbcommon) >= 0.4.1 BuildRequires: pkgconfig(xkbcommon-x11) >= 0.4.1 -%else -BuildRequires: xkeyboard-config -%endif %if %journald BuildRequires: pkgconfig(libsystemd-journal) %endif @@ -152,23 +143,23 @@ %prep %setup -q -n qtbase-opensource-src-%{real_version} -%patch0 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 -%patch7 -p0 %patch8 -p1 -%patch2007 -p1 -%patch2008 -p1 -%patch2009 -p1 -%patch2010 -p1 +%patch2000 -p1 +%patch2001 -p1 %patch2011 -p1 %patch2012 -p1 %patch2013 -p1 +%patch2010 -p1 %patch2014 -p1 %patch2015 -p1 %patch2016 -p1 +%patch3000 -p1 +%patch3001 -p1 +%patch3002 -p1 # be sure not to use them rm -r src/3rdparty/{libjpeg,freetype,libpng,zlib} @@ -637,16 +628,20 @@ Requires: libQt5Gui-devel = %{version} Requires: libQt5PlatformHeaders-devel = %{version} # List the below ones manually - they are private, but this is a static lib +Requires: tslib-devel Requires: pkgconfig(Qt5DBus) Requires: pkgconfig(egl) Requires: pkgconfig(fontconfig) Requires: pkgconfig(freetype2) Requires: pkgconfig(gl) Requires: pkgconfig(glib-2.0) +Requires: pkgconfig(libinput) Requires: pkgconfig(libudev) Requires: pkgconfig(mtdev) Requires: pkgconfig(x11) Requires: pkgconfig(xext) +Requires: pkgconfig(xkbcommon) >= 0.4.1 +Requires: pkgconfig(xkbcommon-x11) >= 0.4.1 Requires: pkgconfig(xrender) %description -n libQt5PlatformSupport-devel-static @@ -703,10 +698,10 @@ platform="" %endif %define xkbconfigroot %(pkg-config --variable=xkb_base xkeyboard-config) -%if %qt5_snapshot +#if %qt5_snapshot #force the configure script to generate the forwarding headers (it checks whether .git directory exists) mkdir .git -%endif +#endif # Record mtime of changes file instead of build time export CHANGES=`stat --format="%y" %{SOURCE1}|cut --characters=1-10` sed -i 's|qt_instdate=`date +%Y-%m-%d`|qt_instdate=$CHANGES|g' configure @@ -744,12 +739,7 @@ -no-separate-debug-info \ -shared \ -xkb \ -%if 0%{?suse_version} >= 1315 -system-xkbcommon \ -%else - -qt-xkbcommon \ - -xkb-config-root %{xkbconfigroot} \ -%endif -xrender \ -xcursor \ -dbus-linked \ @@ -761,9 +751,7 @@ -system-libjpeg \ -openssl-linked \ -system-libpng \ -%if 0%{?suse_version} > 1310 -system-harfbuzz \ -%endif -fontconfig \ -system-freetype \ -cups \ @@ -1069,10 +1057,14 @@ %ifarch %ix86 %{libqt5_libdir}/sse2/libQt5Gui.so.* %endif +%{libqt5_libdir}/libQt5EglDeviceIntegration.so.* +%{libqt5_libdir}/libQt5XcbQpa.so.* %{libqt5_plugindir}/generic %{libqt5_plugindir}/imageformats %{libqt5_plugindir}/platforminputcontexts %{libqt5_plugindir}/platforms +%{libqt5_plugindir}/egldeviceintegrations +%{libqt5_plugindir}/xcbglintegrations %files platformtheme-gtk2 %defattr(-,root,root,755) @@ -1160,9 +1152,15 @@ %files -n libQt5PlatformSupport-devel-static %defattr(-,root,root,755) %doc *.txt LICENSE.* +%{libqt5_libdir}/libQt5EglDeviceIntegration.so +%{libqt5_libdir}/libQt5XcbQpa.so %{libqt5_libdir}/libQt5PlatformSupport.a %{libqt5_libdir}/libQt5PlatformSupport.prl +%{libqt5_libdir}/libQt5EglDeviceIntegration.prl +%{libqt5_libdir}/libQt5XcbQpa.prl %{libqt5_libdir}/pkgconfig/Qt5PlatformSupport.pc +%{libqt5_libdir}/pkgconfig/Qt5EglDeviceIntegration.pc +%{libqt5_libdir}/pkgconfig/Qt5XcbQpa.pc %{libqt5_includedir}/QtPlatformSupport/ %exclude %{libqt5_includedir}/QtPlatformSupport/%{so_version} ++++++ 0001-Fix-QWidget-setWindowRole.patch ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -1,7 +1,7 @@ From 5944a751857de997ee674a90c2e35ff3adaa655b Mon Sep 17 00:00:00 2001 From: Alexander Volkov <a.volkov@rusbitech.ru> Date: Mon, 8 Jun 2015 14:35:22 +0300 -Subject: [PATCH 1/1] Fix QWidget::setWindowRole() +Subject: [PATCH] Fix QWidget::setWindowRole() Introduce QXcbWindowFunctions::setWmWindowRole() and call it either from the implementation of QWidget::setWindowRole() or after the creation of @@ -10,22 +10,21 @@ Change-Id: I143450f4673dd707bb491c1d0f0e8b61d564283d Task-number: QTBUG-45484 --- - .../xcbfunctions/qxcbwindowfunctions.h | 11 +++++++++++ - src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 3 +++ - src/plugins/platforms/xcb/qxcbwindow.cpp | 20 ++++++++++++++++++++ - src/plugins/platforms/xcb/qxcbwindow.h | 2 ++ - src/widgets/kernel/qwidget.cpp | 12 +++++++----- + .../xcbfunctions/qxcbwindowfunctions.h | 10 ++++++++++ + src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 3 +++ + src/plugins/platforms/xcb/qxcbwindow.cpp | 21 +++++++++++++++++++++ + src/plugins/platforms/xcb/qxcbwindow.h | 2 ++ + src/widgets/kernel/qwidget.cpp | 12 +++++++----- 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h b/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h -index 5227732..81cb32f 100644 +index ae05cf5..a7fe8d9 100644 --- a/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h +++ b/src/platformheaders/xcbfunctions/qxcbwindowfunctions.h -@@ -72,6 +72,17 @@ public: - if (func) +@@ -73,6 +73,16 @@ public: func(window, type); } -+ + + typedef void (*SetWmWindowRole)(QWindow *window, const QByteArray &role); + static const QByteArray setWmWindowRoleIdentifier() { return QByteArrayLiteral("XcbSetWmWindowRole"); } + @@ -36,36 +35,36 @@ + func(window, role); + } + - }; - + typedef uint (*VisualId)(QWindow *window); + static const QByteArray visualIdIdentifier() { return QByteArrayLiteral("XcbVisualId"); } diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp -index 31dedd4..0bd49b8 100644 +index 8bf9003..3cfdbde 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp -@@ -339,6 +339,9 @@ QFunctionPointer QXcbNativeInterface::platformFunction(const QByteArray &functio +@@ -392,6 +392,9 @@ QFunctionPointer QXcbNativeInterface::platformFunction(const QByteArray &functio if (function == QXcbWindowFunctions::setWmWindowTypeIdentifier()) { return QFunctionPointer(QXcbWindow::setWmWindowTypeStatic); } + if (function == QXcbWindowFunctions::setWmWindowRoleIdentifier()) { + return QFunctionPointer(QXcbWindow::setWmWindowRoleStatic); + } - return Q_NULLPTR; - } - + if (function == QXcbWindowFunctions::visualIdIdentifier()) { + return QFunctionPointer(QXcbWindowFunctions::VisualId(QXcbWindow::visualIdStatic)); + } diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp -index c0076a9..c736814 100644 +index 6e021ce..edf68d4 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp -@@ -236,6 +236,7 @@ static inline bool positionIncludesFrame(QWindow *w) - } +@@ -322,6 +322,7 @@ static inline XTextProperty* qstringToXTP(Display *dpy, const QString& s) + #endif // XCB_USE_XLIB static const char *wm_window_type_property_id = "_q_xcb_wm_window_type"; +static const char *wm_window_role_property_id = "_q_xcb_wm_window_role"; QXcbWindow::QXcbWindow(QWindow *window) : QPlatformWindow(window) -@@ -557,6 +558,11 @@ void QXcbWindow::create() +@@ -660,6 +661,11 @@ void QXcbWindow::create() setOpacity(opacity); if (window()->isTopLevel()) setWindowIcon(window()->icon()); @@ -77,8 +76,8 @@ } QXcbWindow::~QXcbWindow() -@@ -1597,6 +1603,14 @@ void QXcbWindow::setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmW - window->setProperty(wm_window_type_property_id, QVariant::fromValue(static_cast<int>(windowTypes))); +@@ -1674,6 +1680,14 @@ void QXcbWindow::setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmW + static_cast<QXcbWindow *>(window->handle())->setWmWindowType(windowTypes, window->flags()); } +void QXcbWindow::setWmWindowRoleStatic(QWindow *window, const QByteArray &role) @@ -89,10 +88,10 @@ + window->setProperty(wm_window_role_property_id, role); +} + - QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const + uint QXcbWindow::visualIdStatic(QWindow *window) { - QXcbWindowFunctions::WmWindowTypes result(0); -@@ -1713,6 +1727,13 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types) + if (window && window->handle()) +@@ -1839,6 +1853,13 @@ void QXcbWindow::setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::W xcb_flush(xcb_connection()); } @@ -107,23 +106,24 @@ { public: diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h -index 254421e..2c9964c 100644 +index a379a6f..15d5c1b 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h -@@ -143,9 +143,11 @@ public: - #endif +@@ -140,10 +140,12 @@ public: + void updateNetWmUserTime(xcb_timestamp_t timestamp); static void setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes); + static void setWmWindowRoleStatic(QWindow *window, const QByteArray &role); + static uint visualIdStatic(QWindow *window); QXcbWindowFunctions::WmWindowTypes wmWindowTypes() const; - void setWmWindowType(QXcbWindowFunctions::WmWindowTypes types); + void setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::WindowFlags flags); + void setWmWindowRole(const QByteArray &role); - bool needsSync() const; + uint visualId() const; diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp -index 637afb3..e38262d 100644 +index bd77e7f..4b64490 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -100,6 +100,7 @@ @@ -134,7 +134,7 @@ // widget/widget data creation count //#define QWIDGET_EXTRA_DEBUG -@@ -1453,6 +1454,9 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO +@@ -1451,6 +1452,9 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO data.window_flags = win->flags(); @@ -144,11 +144,11 @@ QBackingStore *store = q->backingStore(); if (!store) { -@@ -6247,13 +6251,11 @@ QString QWidget::windowRole() const +@@ -6254,13 +6258,11 @@ QString QWidget::windowRole() const */ void QWidget::setWindowRole(const QString &role) { --#if defined(Q_WS_X11) +-#if defined(Q_DEAD_CODE_FROM_QT4_X11) Q_D(QWidget); + d->createTLExtra(); d->topData()->role = role; @@ -162,6 +162,4 @@ /*! -- -2.4.2 - - +2.3.5 ++++++ 0004-xcb-Set-_NET_WM_WINDOW_TYPE-from-a-single-place.patch ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -1,7 +1,10 @@ -From f211b79ef00f8a8874c96389699e788e0855df3c Mon Sep 17 00:00:00 2001 +From 1d9a6d0859a7daca0385cbdfdf4c6b7caf32e6d8 Mon Sep 17 00:00:00 2001 From: Alexander Volkov <a.volkov@rusbitech.ru> Date: Tue, 5 May 2015 23:04:26 +0300 -Subject: [PATCH 1/1] xcb: Set _NET_WM_WINDOW_TYPE from a single place +Subject: xcb: Set _NET_WM_WINDOW_TYPE from a single place +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit Merge QXcbWindow::setNetWmWindowFlags(), which was called from QXcbWindow::setWindowFlags(), into QXcbWindow::setWmWindowType(). @@ -12,16 +15,17 @@ as it was in Qt 4. Change-Id: Id1752d78f91caf04e9d16bb1ac40ed180597df7b +Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com> --- src/plugins/platforms/xcb/qxcbwindow.cpp | 117 ++++++++++++++++--------------- src/plugins/platforms/xcb/qxcbwindow.h | 3 +- 2 files changed, 63 insertions(+), 57 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp -index 42a86ae8104641d24b0ce4dbd7418ad17bf8bd38..a0c21abf4f49fdaf52cd6ceef8e4ed66b3cd7043 100644 +index cb5f410..6e021ce 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp -@@ -762,11 +762,6 @@ void QXcbWindow::show() +@@ -873,11 +873,6 @@ void QXcbWindow::show() updateNetWmStateBeforeMap(); } @@ -33,7 +37,7 @@ if (connection()->time() != XCB_TIME_CURRENT_TIME) updateNetWmUserTime(connection()->time()); -@@ -1027,7 +1022,13 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags) +@@ -1140,7 +1135,13 @@ void QXcbWindow::setWindowFlags(Qt::WindowFlags flags) xcb_change_window_attributes(xcb_connection(), xcb_window(), mask, values); @@ -48,7 +52,7 @@ setMotifWindowFlags(flags); setTransparentForMouseEvents(flags & Qt::WindowTransparentForInput); -@@ -1176,42 +1177,6 @@ void QXcbWindow::setWindowState(Qt::WindowState state) +@@ -1291,42 +1292,6 @@ void QXcbWindow::setWindowState(Qt::WindowState state) m_windowState = state; } @@ -91,7 +95,7 @@ void QXcbWindow::updateMotifWmHintsBeforeMap() { QtMotifWmHints mwmhints = getMotifWmHints(connection(), m_window); -@@ -1596,10 +1561,10 @@ QXcbEGLSurface *QXcbWindow::eglSurface() const +@@ -1703,10 +1668,10 @@ QSurfaceFormat QXcbWindow::format() const void QXcbWindow::setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes) { @@ -104,8 +108,8 @@ + static_cast<QXcbWindow *>(window->handle())->setWmWindowType(windowTypes, window->flags()); } - void QXcbWindow::setWmWindowRoleStatic(QWindow *window, const QByteArray &role) -@@ -1681,40 +1646,82 @@ QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const + uint QXcbWindow::visualIdStatic(QWindow *window) +@@ -1787,40 +1752,82 @@ QXcbWindowFunctions::WmWindowTypes QXcbWindow::wmWindowTypes() const return result; } @@ -199,19 +203,19 @@ if (atoms.isEmpty()) { Q_XCB_CALL(xcb_delete_property(xcb_connection(), m_window, atom(QXcbAtom::_NET_WM_WINDOW_TYPE))); diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h -index 2c9964c5b16dc863c4dd0837a7b71bf3dba6be65..8d754286c57e1d8e16d1b8b1b55627bfde620f10 100644 +index e62bfcb..a379a6f 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h -@@ -146,7 +146,7 @@ public: - static void setWmWindowRoleStatic(QWindow *window, const QByteArray &role); +@@ -143,7 +143,7 @@ public: + static uint visualIdStatic(QWindow *window); QXcbWindowFunctions::WmWindowTypes wmWindowTypes() const; - void setWmWindowType(QXcbWindowFunctions::WmWindowTypes types); + void setWmWindowType(QXcbWindowFunctions::WmWindowTypes types, Qt::WindowFlags flags); - void setWmWindowRole(const QByteArray &role); - bool needsSync() const; -@@ -166,7 +166,6 @@ private: + uint visualId() const; + +@@ -179,7 +179,6 @@ protected: NetWmStates netWmStates(); void setNetWmStates(NetWmStates); @@ -220,5 +224,4 @@ void updateMotifWmHintsBeforeMap(); -- -2.4.2 - +cgit v0.11.0 ++++++ 0005-Restore-documented-behavior-for-the-WA_X11NetWmWindo.patch ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -1,8 +1,8 @@ -From 0b27bcd6d15f34ad62667dd3b0f2f23f6261b2c6 Mon Sep 17 00:00:00 2001 +From 552cbc0d89dcdbf32dfe652ff7d3bbe45dafe595 Mon Sep 17 00:00:00 2001 From: Alexander Volkov <a.volkov@rusbitech.ru> Date: Thu, 7 May 2015 17:36:57 +0300 -Subject: [PATCH 1/1] Restore documented behavior for the - WA_X11NetWmWindowType* attributes +Subject: [PATCH] Restore documented behavior for the WA_X11NetWmWindowType* + attributes Use QXcbWindowFunctions::setWmWindowType() to add the corresponding types to the window's _NET_WM_WINDOW_TYPE X11 window property. @@ -10,14 +10,29 @@ Change-Id: Ia2413ad7a69ab8d49b448de11dd07c77101a564c Task-number: QTBUG-39887 --- - src/widgets/kernel/qwidget.cpp | 44 ++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 40 insertions(+), 4 deletions(-) + src/src.pro | 2 +- + src/widgets/kernel/qwidget.cpp | 45 ++++++++++++++++++++++++++++++++++++++---- + src/widgets/kernel/qwidget_p.h | 3 ++- + 3 files changed, 44 insertions(+), 6 deletions(-) +diff --git a/src/src.pro b/src/src.pro +index b4d62aa..090ae68 100644 +--- a/src/src.pro ++++ b/src/src.pro +@@ -110,7 +110,7 @@ src_platformsupport.depends = src_corelib src_gui src_platformheaders + + src_widgets.subdir = $$PWD/widgets + src_widgets.target = sub-widgets +-src_widgets.depends = src_corelib src_gui src_tools_uic ++src_widgets.depends = src_corelib src_gui src_tools_uic src_platformheaders + + src_opengl.subdir = $$PWD/opengl + src_opengl.target = sub-opengl diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp -index e38262d97fc8e28618141868165a5526cb952aa8..78680f8961b9911fafea68d33db243dba1b901c1 100644 +index b2ea83c..d918b1a 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp -@@ -1409,6 +1409,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO +@@ -1406,6 +1407,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO win->setProperty("_q_showWithoutActivating", QVariant(true)); if (q->testAttribute(Qt::WA_MacAlwaysShowToolWindow)) win->setProperty("_q_macAlwaysShowToolWindow", QVariant::fromValue(QVariant(true))); @@ -25,15 +40,15 @@ win->setFlags(data.window_flags); fixPosIncludesFrame(); if (q->testAttribute(Qt::WA_Moved) -@@ -11128,7 +11129,6 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) +@@ -11135,7 +11137,6 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; } --#ifdef Q_WS_X11 +-#ifdef Q_DEAD_CODE_FROM_QT4_X11 case Qt::WA_X11NetWmWindowTypeDesktop: case Qt::WA_X11NetWmWindowTypeDock: case Qt::WA_X11NetWmWindowTypeToolBar: -@@ -11142,10 +11142,8 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) +@@ -11149,10 +11150,8 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) case Qt::WA_X11NetWmWindowTypeNotification: case Qt::WA_X11NetWmWindowTypeCombo: case Qt::WA_X11NetWmWindowTypeDND: @@ -45,8 +60,8 @@ case Qt::WA_StaticContents: if (QWidgetBackingStore *bs = d->maybeBackingStore()) { -@@ -12784,6 +12782,44 @@ void QWidget::clearMask() - setMask(QRegion()); +@@ -12796,6 +12795,44 @@ void QWidgetPrivate::setWidgetParentHelper(QObject *widgetAsObject, QObject *new + widget->setParent(static_cast<QWidget*>(newParent)); } +void QWidgetPrivate::setNetWmWindowTypes() @@ -91,10 +106,10 @@ #include "moc_qwidget.cpp" diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h -index 85e1cf9..2d2948a 100644 +index fe65cb1..dc1c580 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h -@@ -750,7 +750,6 @@ public: +@@ -752,7 +752,6 @@ public: void setWindowRole(); void sendStartupMessage(const char *message) const; @@ -102,7 +117,7 @@ void x11UpdateIsOpaque(); bool isBackgroundInherited() const; void updateX11AcceptFocus(); -@@ -847,6 +846,8 @@ public: +@@ -849,6 +848,8 @@ public: static bool qt_widget_rgn(QWidget *, short, RgnHandle, bool); void registerTouchWindow(bool enable = true); #endif @@ -112,5 +127,4 @@ bool stealMouseGrab(bool grab); }; -- -2.4.2 - +2.3.5 ++++++ 0006-xcb-set-SM_CLIENT_ID-property.patch ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -1,80 +1,18 @@ -From f0b07d5e9d6db6b7717de198bc5bcd303705e895 Mon Sep 17 00:00:00 2001 -From: Stefan Becker <chemobejk@gmail.com> -Date: Mon, 25 May 2015 17:46:49 +0300 -Subject: [PATCH 1/1] xcb: set SM_CLIENT_ID property - -SM_CLIENT_ID is required by kwin for proper session management. - -- move client leader initialization from screen to connection -- add SM_CLIENT_ID property to client leader - -Change-Id: I19fb0d098811c865f6f13d5bc3e59a173c596a65 -Task-number: QTBUG-46310 ---- - src/plugins/platforms/xcb/qxcbconnection.cpp | 53 ++++++++++++++++++++++++++++ - src/plugins/platforms/xcb/qxcbconnection.h | 2 ++ - src/plugins/platforms/xcb/qxcbscreen.h | 3 -- - src/plugins/platforms/xcb/qxcbwindow.cpp | 4 +-- - 4 files changed, 57 insertions(+), 5 deletions(-) - -diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp -index 7136455..264883a 100644 ---- a/src/plugins/platforms/xcb/qxcbscreen.cpp -+++ b/src/plugins/platforms/xcb/qxcbscreen.cpp -@@ -163,38 +163,6 @@ QXcbScreen::QXcbScreen(QXcbConnection *connection, xcb_screen_t *scr, - else - m_syncRequestSupported = true; - -- m_clientLeader = xcb_generate_id(xcb_connection()); -- Q_XCB_CALL2(xcb_create_window(xcb_connection(), -- XCB_COPY_FROM_PARENT, -- m_clientLeader, -- screen()->root, -- 0, 0, 1, 1, -- 0, -- XCB_WINDOW_CLASS_INPUT_OUTPUT, -- screen()->root_visual, -- 0, 0), connection); --#ifndef QT_NO_DEBUG -- QByteArray ba("Qt client leader window for screen "); -- ba += m_outputName.toUtf8(); -- Q_XCB_CALL2(xcb_change_property(xcb_connection(), -- XCB_PROP_MODE_REPLACE, -- m_clientLeader, -- atom(QXcbAtom::_NET_WM_NAME), -- atom(QXcbAtom::UTF8_STRING), -- 8, -- ba.length(), -- ba.constData()), connection); --#endif -- -- Q_XCB_CALL2(xcb_change_property(xcb_connection(), -- XCB_PROP_MODE_REPLACE, -- m_clientLeader, -- atom(QXcbAtom::WM_CLIENT_LEADER), -- XCB_ATOM_WINDOW, -- 32, -- 1, -- &m_clientLeader), connection); -- - xcb_depth_iterator_t depth_iterator = - xcb_screen_allowed_depths_iterator(screen()); - diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp -index 77e4601485bdeee8cce3b35bd746e9c1e5c2ecfd..7e234e920ac7a7e92f01fa053e9e0ffb7ae77ac1 100644 +index b8b6651..06fec12 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp -@@ -321,6 +321,7 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra +@@ -454,6 +454,7 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra , has_xkb(false) , m_buttons(0) , m_focusWindow(0) + , m_clientLeader(0) , m_systemTrayTracker(0) - { - #ifdef XCB_USE_EGL -@@ -1238,6 +1239,58 @@ xcb_window_t QXcbConnection::rootWindow() - return primaryScreen()->root(); - } + , m_glIntegration(Q_NULLPTR) + , m_xiGrab(false) +@@ -1358,6 +1359,58 @@ void *QXcbConnection::createVisualInfoForDefaultVisualId() const + + #endif +xcb_window_t QXcbConnection::clientLeader() +{ @@ -132,40 +70,83 @@ { int connection_error = xcb_connection_has_error(xcb_connection()); diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h -index 9a73006cec6435039042c0f6bb94df3b8b77857f..ccc0d3e95d59e22c6f62fb3b0d082f454935c2a0 100644 +index 2911936..891fa9f 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.h +++ b/src/plugins/platforms/xcb/qxcbconnection.h -@@ -394,6 +394,7 @@ public: +@@ -402,6 +402,7 @@ public: QXcbWMSupport *wmSupport() const { return m_wmSupport.data(); } xcb_window_t rootWindow(); + xcb_window_t clientLeader(); - #ifdef XCB_USE_XLIB - void *xlib_display() const { return m_xlib_display; } - #endif -@@ -620,6 +621,7 @@ private: + + bool hasDefaultVisualId() const { return m_defaultVisualId != UINT_MAX; } + xcb_visualid_t defaultVisualId() const { return m_defaultVisualId; } +@@ -639,6 +640,7 @@ private: QXcbWindow *m_focusWindow; + xcb_window_t m_clientLeader; QByteArray m_startupId; QXcbSystemTrayTracker *m_systemTrayTracker; + QXcbGlIntegration *m_glIntegration; +diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp +index 040cea1..c7f8114 100644 +--- a/src/plugins/platforms/xcb/qxcbscreen.cpp ++++ b/src/plugins/platforms/xcb/qxcbscreen.cpp +@@ -170,38 +170,6 @@ QXcbScreen::QXcbScreen(QXcbConnection *connection, QXcbVirtualDesktop *virtualDe + else + m_syncRequestSupported = true; + +- m_clientLeader = xcb_generate_id(xcb_connection()); +- Q_XCB_CALL2(xcb_create_window(xcb_connection(), +- XCB_COPY_FROM_PARENT, +- m_clientLeader, +- screen()->root, +- 0, 0, 1, 1, +- 0, +- XCB_WINDOW_CLASS_INPUT_OUTPUT, +- screen()->root_visual, +- 0, 0), connection); +-#ifndef QT_NO_DEBUG +- QByteArray ba("Qt client leader window for screen "); +- ba += m_outputName.toUtf8(); +- Q_XCB_CALL2(xcb_change_property(xcb_connection(), +- XCB_PROP_MODE_REPLACE, +- m_clientLeader, +- atom(QXcbAtom::_NET_WM_NAME), +- atom(QXcbAtom::UTF8_STRING), +- 8, +- ba.length(), +- ba.constData()), connection); +-#endif +- +- Q_XCB_CALL2(xcb_change_property(xcb_connection(), +- XCB_PROP_MODE_REPLACE, +- m_clientLeader, +- atom(QXcbAtom::WM_CLIENT_LEADER), +- XCB_ATOM_WINDOW, +- 32, +- 1, +- &m_clientLeader), connection); +- + xcb_depth_iterator_t depth_iterator = + xcb_screen_allowed_depths_iterator(screen()); diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h -index e9ab2edaa0921c0d36d0f83dd131901e6983fba4..6bc143f02a6fceca022097762d8930f10a599af9 100644 +index 4451947..ccc30c0 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.h +++ b/src/plugins/platforms/xcb/qxcbscreen.h -@@ -80,8 +80,6 @@ public: - xcb_screen_t *screen() const { return m_screen; } - xcb_window_t root() const { return m_screen->root; } +@@ -116,8 +116,6 @@ public: + xcb_randr_crtc_t crtc() const { return m_crtc; } + xcb_randr_mode_t mode() const { return m_mode; } - xcb_window_t clientLeader() const { return m_clientLeader; } - void windowShown(QXcbWindow *window); QString windowManagerName() const { return m_windowManagerName; } bool syncRequestSupported() const { return m_syncRequestSupported; } -@@ -125,7 +123,6 @@ private: - int m_number; +@@ -173,7 +171,6 @@ private: + Qt::ScreenOrientation m_orientation; QString m_windowManagerName; bool m_syncRequestSupported; - xcb_window_t m_clientLeader; @@ -173,27 +154,24 @@ QMap<xcb_visualid_t, quint8> m_visualDepths; QXcbCursor *m_cursor; diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp -index a0c21abf4f49fdaf52cd6ceef8e4ed66b3cd7043..9282dd45c877177a9b739fb4a606d707042642a1 100644 +index edf68d4..6e39f59 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp -@@ -519,7 +519,7 @@ void QXcbWindow::create() +@@ -623,7 +623,7 @@ void QXcbWindow::create() xcb_set_wm_hints(xcb_connection(), m_window, &hints); -- xcb_window_t leader = m_screen->clientLeader(); +- xcb_window_t leader = platformScreen->clientLeader(); + xcb_window_t leader = connection()->clientLeader(); Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, atom(QXcbAtom::WM_CLIENT_LEADER), XCB_ATOM_WINDOW, 32, 1, &leader)); -@@ -747,7 +747,7 @@ void QXcbWindow::show() +@@ -864,7 +864,7 @@ void QXcbWindow::show() // Default to client leader if there is no transient parent, else modal dialogs can // be hidden by their parents. if (!transientXcbParent) -- transientXcbParent = static_cast<QXcbScreen *>(screen())->clientLeader(); +- transientXcbParent = xcbScreen()->clientLeader(); + transientXcbParent = connection()->clientLeader(); if (transientXcbParent) { // ICCCM 4.1.2.6 Q_XCB_CALL(xcb_change_property(xcb_connection(), XCB_PROP_MODE_REPLACE, m_window, XCB_ATOM_WM_TRANSIENT_FOR, XCB_ATOM_WINDOW, 32, --- -2.4.2 - ++++++ Add-a-linker-version-script-to-Qt-libraries.patch ++++++
From 38c28ad2420542d795a27c5359226260c886b112 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@intel.com> Date: Tue, 2 Jun 2015 11:10:22 -0700 Subject: [PATCH] Add a linker version script to Qt libraries
This linker script is only enabled for systems with GCC or GCC-like compilers, though technically it should work on the BSDs too (will enable after testing). For regular modules, this declares one ELF version "Qt_5" and places all QtCore symbols inside, then it declares unused ELF versions "Qt_5.x" for each older minor release. For modules declared "internal_module", all symbols are placed in version Qt_5_PRIVATE_API. The big advantage of an ELF version is that, when we do Qt 6, both versions of QtCore could be loaded in memory without conflicts and all symbols would be resolved to the correct library. No module can talk to both at the same time, but this avoids mistakes of loading them indirectly by plugins. The extra Qt_5.x versions will be used in the next commit. Change-Id: I049a653beeb5454c9539ffff13e3fe6f050fdf31 --- mkspecs/common/gcc-base-unix.conf | 1 + mkspecs/common/qcc-base-qnx.conf | 1 + mkspecs/features/qt_module.prf | 22 ++++++++++++++++++++++ mkspecs/linux-icc/qmake.conf | 1 + mkspecs/unsupported/linux-host-g++/qmake.conf | 1 + 5 files changed, 26 insertions(+) diff --git a/mkspecs/common/gcc-base-unix.conf b/mkspecs/common/gcc-base-unix.conf index 29e0521..3e0b3ba 100644 --- a/mkspecs/common/gcc-base-unix.conf +++ b/mkspecs/common/gcc-base-unix.conf @@ -22,3 +22,4 @@ QMAKE_LFLAGS_USE_GOLD = -fuse-ld=gold # -Bsymbolic-functions (ld) support QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, +QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script, diff --git a/mkspecs/common/qcc-base-qnx.conf b/mkspecs/common/qcc-base-qnx.conf index a0a88b9..cebbe06 100644 --- a/mkspecs/common/qcc-base-qnx.conf +++ b/mkspecs/common/qcc-base-qnx.conf @@ -19,6 +19,7 @@ QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link, # -Bsymbolic-functions (ld) support QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, +QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script, # Generic options for all BlackBerry/QNX qcc mkspecs QMAKE_CFLAGS_THREAD = -D_REENTRANT diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 8919d41..3264740 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -185,6 +185,28 @@ equals(QT_ARCH, i386):contains(QT_CPU_FEATURES.$$QT_ARCH, sse2):compiler_support QMAKE_CXXFLAGS += -mfpmath=sse } +!isEmpty(QMAKE_LFLAGS_VERSION_SCRIPT):!static { + verscript = $$OUT_PWD/$${TARGET}.version + QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript + + internal_module { + verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };" + } else { + current = Qt_$$QT_MAJOR_VERSION + verscript_content = "$$current { *; };" + for(i, 0..$$section(VERSION, ., 1, 1)) { + previous = $$current + current = Qt_$${QT_MAJOR_VERSION}.$$i + verscript_content += "$$current {} $$previous;" + } + } + write_file($$verscript, verscript_content)|error("Aborting.") + unset(current) + unset(previous) + unset(verscript) + unset(verscript_content) +} + android: CONFIG += qt_android_deps #install directives diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index 8119c8a..0cd55ee 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -97,6 +97,7 @@ QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_ # -Bsymbolic-functions (ld) support QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, +QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script, # Symbol visibility control QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden diff --git a/mkspecs/unsupported/linux-host-g++/qmake.conf b/mkspecs/unsupported/linux-host-g++/qmake.conf index 1523126..546ff21 100644 --- a/mkspecs/unsupported/linux-host-g++/qmake.conf +++ b/mkspecs/unsupported/linux-host-g++/qmake.conf @@ -71,6 +71,7 @@ QMAKE_PCH_OUTPUT_EXT = .gch # -Bsymbolic-functions (ld) support QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, +QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script, # # qmake configuration for common linux -- 2.3.5 ++++++ Add-a-qt_version_tag-symbol-to-QtCore-that-uses-ELF-versions.patch ++++++
From c665b0ce8c663030b856073262bd2ce30347bd7b Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@intel.com> Date: Tue, 2 Jun 2015 11:15:05 -0700 Subject: [PATCH] Add a qt_version_tag symbol to QtCore that uses ELF versions
This symbol will exist with different ELF versions, allowing us to know which version of Qt a given library or application was linked against. When this symbol gets used, automatic packaging tools will extract the dependency. The trick here is that the application uses qt_version_tag without knowing which version is current, but the linker resolves it to the current version and records that. For example, if this were used with Qt 5.5, RPM's find-requires on an application using QtCore would print: libQt5Core.so.5()(64bit) libQt5Core.so.5(Qt_5.5)(64bit) libQt5Core.so.5(Qt_5)(64bit) Whereas find-provides on QtCore would print: libQt5Core.so.5()(64bit) libQt5Core.so.5(libQt5Core.so.5)(64bit) libQt5Core.so.5(Qt_5.0)(64bit) libQt5Core.so.5(Qt_5.1)(64bit) libQt5Core.so.5(Qt_5.2)(64bit) libQt5Core.so.5(Qt_5.3)(64bit) libQt5Core.so.5(Qt_5.4)(64bit) libQt5Core.so.5(Qt_5.5)(64bit) libQt5Core.so.5(Qt_5)(64bit) Therefore, automatic dependency resolution would have the information it needs to conclude that the application requires Qt >= 5.5. Change-Id: I049a653beeb5454c9539ffff13e3fec9aeb50197 --- src/corelib/global/global.pri | 3 +- src/corelib/global/qversiontagging.cpp | 62 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/corelib/global/qversiontagging.cpp diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index bc11c77..fdbebca 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -27,7 +27,8 @@ SOURCES += \ global/qmalloc.cpp \ global/qnumeric.cpp \ global/qlogging.cpp \ - global/qhooks.cpp + global/qhooks.cpp \ + global/qversiontagging.cpp # qlibraryinfo.cpp includes qconfig.cpp INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global diff --git a/src/corelib/global/qversiontagging.cpp b/src/corelib/global/qversiontagging.cpp new file mode 100644 index 0000000..e3d9efa --- /dev/null +++ b/src/corelib/global/qversiontagging.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Intel Corporation. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qglobal.h" + +#if defined(Q_CC_GNU) && defined(Q_OS_LINUX) && defined(Q_PROCESSOR_X86) && !defined(QT_STATIC) +# define SYM QT_MANGLE_NAMESPACE(qt_version_tag) +# define SSYM QT_STRINGIFY(SYM) + +asm( +// ASM macro that makes one ELF versioned symbol qt_version_tag{sep}Qt_{major}.{minor} +// that is an alias to qt_version_tag_{major}_{minor}. +// The {sep} parameter must be @ for all old versions and @@ for the current version. +".macro make_one_tag major minor sep\n" +".globl " SSYM "_\\major\\()_\\minor\n" // make the symbol global +SSYM "_\\major\\()_\\minor:\n" // declare it +" .symver " SSYM "_\\major\\()_\\minor, " SSYM "\\sep\\()Qt_\\major\\().\\minor\n" +".endm\n" + +".altmacro\n" +".bss\n" +".set qt_version_major, " QT_STRINGIFY(QT_VERSION) " >> 16\n" // set qt_version_major +".set qt_version_minor, 0\n" // set qt_version_minor to 0 (it will grow to the current) +".rept (" QT_STRINGIFY(QT_VERSION) " >> 8) & 0xff\n" // repeat minor version times (0 to N-1) +" make_one_tag %qt_version_major, %qt_version_minor, @\n" +" .set qt_version_minor, (qt_version_minor + 1)\n" +".endr\n" +" make_one_tag %qt_version_major, %qt_version_minor, @@\n" // call the macro for the current version +" .space 1\n" // variable is 1 byte, value 0 +); + +#endif -- 2.3.5 ++++++ Add-an-automatic-use-of-the-ELF-versioned-QtCore-symbol.patch ++++++
From 7a2d2a1c3b66308cf03a00757f8fd97f043ccde4 Mon Sep 17 00:00:00 2001 From: Thiago Macieira <thiago.macieira@intel.com> Date: Tue, 2 Jun 2015 11:30:57 -0700 Subject: [PATCH] Add an automatic use of the ELF-versioned QtCore symbol
See the comment in the header for an explanation of what it does. This trick is enabled for every single .o that is compiled, unless QT_NO_VERSION_TAGGING is defined. The assembly expands to a COMDAT section, which is mergeable by the linker, so only one copy of the output is present in the ELF module. The next commit will add a configure-time option to set QT_NO_VERSION_TAGGING to qconfig.h. This is enabled only for Linux and x86 / x86-64 / x32 due to the requirement of writing assembly and relocations, so it needs to be tested on each platform, which I have not done. It probably works on the BSDs too and might work on Solaris/x86, but again it requires testing. Support for other architectures requires different assembly output and relocations and can be added as needed, but they are not as important since this trick is has most value on desktop systems. Change-Id: I049a653beeb5454c9539ffff13e3ff5782a8cb86 --- src/corelib/global/global.pri | 3 +- src/corelib/global/qglobal.h | 1 + src/corelib/global/qversiontagging.h | 80 ++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/corelib/global/qversiontagging.h diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index fdbebca..9f31fb9 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -17,7 +17,8 @@ HEADERS += \ global/qisenum.h \ global/qtypetraits.h \ global/qflags.h \ - global/qhooks_p.h + global/qhooks_p.h \ + global/qversiontagging.h SOURCES += \ global/archdetect.cpp \ diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index c4e2f76..e7995ac 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -1103,6 +1103,7 @@ QT_END_NAMESPACE #include <QtCore/qatomic.h> #include <QtCore/qglobalstatic.h> #include <QtCore/qnumeric.h> +#include <QtCore/qversiontagging.h> #endif /* __cplusplus */ diff --git a/src/corelib/global/qversiontagging.h b/src/corelib/global/qversiontagging.h new file mode 100644 index 0000000..94246dd --- /dev/null +++ b/src/corelib/global/qversiontagging.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Intel Corporation. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// qglobal.h includes this header, so keep it outside of our include guards +#include <QtCore/qglobal.h> + +#if !defined(QVERSIONTAGGING_H) && !defined(QT_NO_VERSION_TAGGING) +#define QVERSIONTAGGING_H + +QT_BEGIN_NAMESPACE + +/* + * Ugly hack warning and explanation: + * + * This file causes all ELF modules, be they libraries or applications, to use the + * qt_version_tag symbol that is present in QtCore. Such symbol is versioned, + * so the linker will automatically pull the current Qt version and add it to + * the ELF header of the library/application. The assembly produces one section + * called ".qtversion" containing two pointer-sized values. The first is a + * relocation to the qt_version_tag symbol (which is what causes the ELF + * version to get used). The second value is the current Qt version at the time + * of compilation. + * + * There will only be one copy of the section in the output library or application. + */ + +#if defined(QT_BUILD_CORE_LIB) +// skip +#elif defined(Q_CC_GNU) +# if defined(Q_PROCESSOR_X86) && defined(Q_OS_LINUX) +asm ( +".section .qtversion, \"aG\", @progbits, qt_version_tag, comdat\n" +".align 8\n" +# ifdef __LP64__ +".quad " QT_STRINGIFY(QT_MANGLE_NAMESPACE(qt_version_tag)) "@GOTPCREL\n" +# elif defined(Q_PROCESSOR_X86_64) // x32 +".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(qt_version_tag)) "@GOTPCREL\n" +# else // x86 +".long " QT_STRINGIFY(QT_MANGLE_NAMESPACE(qt_version_tag)) "@GOT\n" +#endif +".long " QT_STRINGIFY(QT_VERSION) "\n" +".align 8\n" +".previous" +); +# endif +#endif + +QT_END_NAMESPACE + +#endif // QVERSIONTAGGING_H && !QT_NO_VERSION_TAGGING -- 2.3.5 ++++++ QMimeDatabase-use-QElapsedTimer.patch ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -1,7 +1,7 @@ -From 3426ce9b8e62e8d76db0d9cc2899113c0c3cb073 Mon Sep 17 00:00:00 2001 +From 849aebc0ce344dedc91035bf4bcc7ccb4c15ffe4 Mon Sep 17 00:00:00 2001 From: David Faure <david.faure@kdab.com> Date: Mon, 27 Jul 2015 00:22:11 +0200 -Subject: [PATCH 1/1] QMimeDatabase: use QElapsedTimer instead of +Subject: [PATCH] QMimeDatabase: use QElapsedTimer instead of QDateTime::currentDateTime() This reduces the number of syscalls greatly, by avoiding the timezone @@ -14,10 +14,10 @@ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp -index cca9a40b9f28e1b45a6e5e0172f512c5880a10d6..9f6bdb30981f4f236ef422cfd16f6c1cd38c643f 100644 +index 7342a5c..3914710 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp -@@ -77,10 +77,9 @@ Q_CORE_EXPORT int qmime_secondsBetweenChecks = 5; // exported for the unit test +@@ -79,10 +79,9 @@ Q_CORE_EXPORT int qmime_secondsBetweenChecks = 5; // exported for the unit test bool QMimeProviderBase::shouldCheck() { @@ -31,18 +31,18 @@ } diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h -index 027fddd2c81ddb52fb3c383edfeda3a03f9ccaac..e4bc55a1a2deb5f4d030f451dd97729c2ca95bb8 100644 +index 5a89ac2..eaf9594 100644 --- a/src/corelib/mimetypes/qmimeprovider_p.h +++ b/src/corelib/mimetypes/qmimeprovider_p.h -@@ -48,6 +48,7 @@ +@@ -51,6 +51,7 @@ + #include <QtCore/qdatetime.h> - #include "qmimedatabase_p.h" #include <QtCore/qset.h> +#include <QtCore/qelapsedtimer.h> QT_BEGIN_NAMESPACE -@@ -74,7 +75,7 @@ public: +@@ -77,7 +78,7 @@ public: QMimeDatabasePrivate *m_db; protected: bool shouldCheck(); @@ -52,5 +52,4 @@ /* -- -2.4.6 - +2.3.5 ++++++ ignore-disabling-of-outputs-in-the-middle-of-the-mode-switch.patch ++++++
From ae51e360f986698eaf41fdb38f8a878a50f69be1 Mon Sep 17 00:00:00 2001 From: Alexander Volkov <a.volkov@rusbitech.ru> Date: Fri, 19 Jun 2015 13:34:11 +0300 Subject: xcb: Ignore disabling of outputs in the middle of the mode switch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit
X server may send RROutputChangeNotify event with null crtc and mode, when it switches an output mode. Request RROutputInfo to distinguish this case from the case when the output is explicitly disabled. Change-Id: I4c2356ec71dbcc8013009ea8a6f46dd11f19d6bb Task-number: QTBUG-44158 Task-number: QTBUG-46786 Task-number: QTBUG-46822 Reviewed-by: Daniel Vrátil <dvratil@redhat.com> Reviewed-by: Gatis Paeglis <gatis.paeglis@digia.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com> --- src/plugins/platforms/xcb/qxcbconnection.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 0867615..29e1fd1 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -265,11 +265,19 @@ void QXcbConnection::updateScreens(const xcb_randr_notify_event_t *event) } else if (screen) { // Screen has been disabled -> remove if (output.crtc == XCB_NONE && output.mode == XCB_NONE) { - qCDebug(lcQpaScreen) << "output" << screen->name() << "has been disabled"; - m_screens.removeOne(screen); - foreach (QXcbScreen *otherScreen, m_screens) - otherScreen->removeVirtualSibling((QPlatformScreen *) screen); - QXcbIntegration::instance()->destroyScreen(screen); + xcb_randr_get_output_info_cookie_t outputInfoCookie = + xcb_randr_get_output_info(xcb_connection(), output.output, output.config_timestamp); + QScopedPointer<xcb_randr_get_output_info_reply_t, QScopedPointerPodDeleter> outputInfo( + xcb_randr_get_output_info_reply(xcb_connection(), outputInfoCookie, NULL)); + if (outputInfo->crtc == XCB_NONE) { + qCDebug(lcQpaScreen) << "output" << screen->name() << "has been disabled"; + m_screens.removeOne(screen); + foreach (QXcbScreen *otherScreen, m_screens) + otherScreen->removeVirtualSibling((QPlatformScreen *) screen); + QXcbIntegration::instance()->destroyScreen(screen); + } else { + qCDebug(lcQpaScreen) << "output" << screen->name() << "has been temporarily disabled for the mode switch"; + } } else { // Just update existing screen screen->updateGeometry(output.config_timestamp); -- cgit v0.11.0 ++++++ libqt5-Fix-Gujarati-font.patch ++++++ --- /var/tmp/diff_new_pack.Jtuj2U/_old 2015-09-27 08:37:47.000000000 +0200 +++ /var/tmp/diff_new_pack.Jtuj2U/_new 2015-09-27 08:37:47.000000000 +0200 @@ -4,10 +4,10 @@ --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp -@@ -1549,6 +1549,7 @@ void QTextEngine::itemize() const - case QChar::Script_Hiragana: +@@ -1640,6 +1640,7 @@ void QTextEngine::itemize() const case QChar::Script_Katakana: case QChar::Script_Bopomofo: + case QChar::Script_Han: + case QChar::Script_Gujarati: analysis[i].script = QChar::Script_Common; break; ++++++ qtbase-opensource-src-5.4.2.tar.xz -> qtbase-opensource-src-5.5.0.tar.xz ++++++ /work/SRC/openSUSE:Factory/libqt5-qtbase/qtbase-opensource-src-5.4.2.tar.xz /work/SRC/openSUSE:Factory/.libqt5-qtbase.new/qtbase-opensource-src-5.5.0.tar.xz differ: char 25, line 1 ++++++ when-a-screen-comes-back-online-the-windows-need-to-be-told-about-it.patch ++++++
From b0b08cc0e4e38504d6b833702f7477aee4e2a192 Mon Sep 17 00:00:00 2001 From: Ralf Jung <post@ralfj.de> Date: Sun, 5 Jul 2015 12:15:29 +0200 Subject: When a screen comes back online, the windows need to be told about it
On my system, this fixes the misbehavior of Qt applications when the (only) active screen is switched, e.g. from an external screen to the laptop. This behavior is caused by the screen() of widgets to be set to NULL when their screen goes away. When a new screen comes online, the widgets *should* be told about it, but they are not. The only place that "maybeSetScreen" is called is when an existing screen changes its geometry, but not when a screen gets enabled without its geometry being affected in any way (e.g. because it was just disabled via xrandr, but has been connected all along). This makes sure that "maybeSetScreen" is also called when a screen gets enabled. Task-number: QTBUG-47041 Change-Id: Ic72d6beaa544bf9a4efdbea0830b1bc0d6ce5362 Reviewed-by: Dmitry Shachnev <mitya57@gmail.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com> --- src/plugins/platforms/xcb/qxcbconnection.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp index 74f48b0..0867615 100644 --- a/src/plugins/platforms/xcb/qxcbconnection.cpp +++ b/src/plugins/platforms/xcb/qxcbconnection.cpp @@ -252,6 +252,14 @@ void QXcbConnection::updateScreens(const xcb_randr_notify_event_t *event) otherScreen->addVirtualSibling(screen); m_screens << screen; QXcbIntegration::instance()->screenAdded(screen, screen->isPrimary()); + + // Windows which had null screens have already had expose events by now. + // They need to be told the screen is back, it's OK to render. + foreach (QWindow *window, QGuiApplication::topLevelWindows()) { + QXcbWindow *xcbWin = static_cast<QXcbWindow*>(window->handle()); + if (xcbWin) + xcbWin->maybeSetScreen(screen); + } } // else ignore disabled screens } else if (screen) { -- cgit v0.11.0
participants (1)
-
root@hilbert.suse.de