From 7b9f15840068dfaeea5684f8a1af1fe460dfa14c Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sat, 2 Jun 2018 17:18:14 +0100 Subject: gentoo resync : 02.06.2018 --- x11-themes/qtcurve/Manifest | 4 +- .../files/qtcurve-1.9.0-rare_crash_hang_fix.patch | 238 +++++++++++++++++++++ x11-themes/qtcurve/qtcurve-1.9.0_rc1-r2.ebuild | 88 ++++++++ x11-themes/qtcurve/qtcurve-9999.ebuild | 26 +-- 4 files changed, 339 insertions(+), 17 deletions(-) create mode 100644 x11-themes/qtcurve/files/qtcurve-1.9.0-rare_crash_hang_fix.patch create mode 100644 x11-themes/qtcurve/qtcurve-1.9.0_rc1-r2.ebuild (limited to 'x11-themes/qtcurve') diff --git a/x11-themes/qtcurve/Manifest b/x11-themes/qtcurve/Manifest index fcd9ab790388..8f1e8f479a2a 100644 --- a/x11-themes/qtcurve/Manifest +++ b/x11-themes/qtcurve/Manifest @@ -1,4 +1,6 @@ +AUX qtcurve-1.9.0-rare_crash_hang_fix.patch 9205 BLAKE2B 30f40705b238d390f05a7c71ac44ae94fabccc66a56c97f280a28b44b4ee1e1f8dc3c1fe41aa0df2ba9690f725e1535557ede6c371f7af87eff17d3080f85d85 SHA512 dbffea87cd3e88e2c06bb7fb6a0e684e3e8bc3e58e841cba8838acf3ca9624364f40b74b05ea827706cb386d53b1fd298152a6f758c349a2fdac7efafda5d2f1 DIST qtcurve-1.9.0_rc1.tar.gz 800845 BLAKE2B a63049086d967bb755d4f071ac4a5058a679d4d2914855b98e82763cbd9a22cdc6d75afb6ddb15b7e24a55e8e248b8df0a5cb517fc9be7ef3b07881448c2b5be SHA512 c586c5c922dcc2a374bf9e3b3abb3e64dcb6299531615fe980b8eba7d2e5a68038ec2eafae24a0c0d4782b2e08984534723bb713386d5119fa8016b9fbdd436e EBUILD qtcurve-1.9.0_rc1-r1.ebuild 2065 BLAKE2B 4b45d665aeba947e5b51477e6f720fe0f756c9e16e0659cb0504fd03df123a2b81829e3a24ab699d60b12a1dcf96a688002df8eae6a06409ffcccf53e104a9d8 SHA512 84a6fa3e5d59a3fc10e632aa27a864c256fcd569ced6fb49f77802b2a8d30675da3768503f30426d5c284c221ee6f59f7507ac8a0fb1717d2d48137f4332e6a3 -EBUILD qtcurve-9999.ebuild 2070 BLAKE2B 0b7c27c6e71105428ca5c0d0ea3e9a9baa53fa7cca133e6fd9001c0e4d922412d7dc038fe286763836669cfe25b70a5b4a0ecb975581865a5fa702338f5c0ee3 SHA512 04ee4f5cfd20c4244a2de44f5edfbbeb732e76906b3b9454f1f9b20c42c660a1703e25801e991fe6439a36251e014c0b4c758294dfed26a41115f31fab23b913 +EBUILD qtcurve-1.9.0_rc1-r2.ebuild 1977 BLAKE2B 921b6cef96cf568a6cb6bbaf81f258219c08c022e7e25b947b680d99f3073b27e9d705412b074ce42f92d035c0dac5ac186d3a24f5622c834ecb2bbd80ea49f9 SHA512 596fe6dc2a13f557c222e2ec53741046fe7b01bcc05683a1d2ae2909c2148effaedb564e6c24d4dbf19d93d801d1d1c5d2ad16ab17538e60fcd7f0c1766d259f +EBUILD qtcurve-9999.ebuild 1971 BLAKE2B df4f9f6c79453d76dbe65bdeb2657d1d80763a35073898fa32b03b118ebba732561be8711ae43215b748dea9069defa12691d0bb3b59c8e8ee6b446c5c6000be SHA512 4ad09d774e114645fd74ef7d4f8841af3cc6229e7d49ebef4cc88638b89def50743e79e44568c95ccdbad79939f11c3684ebcade4323d5aaca1d0836050b89b1 MISC metadata.xml 571 BLAKE2B 39c415e51cd1ad85b251d9a3801b4d7883826f7d83a7e41778289a70285d58bd10663010d540b24a9d54010518ac7258fb9c845c41f7a2d54004a9ce527bb1fe SHA512 63d721869c8b2fcef4fb4f8a5bfcf3e728a7d3d369f4d71b95c2ce1edb1f5010b1369df5b8daaf46221d1f8085c17b790b611a350a599d0741112cebb0c37684 diff --git a/x11-themes/qtcurve/files/qtcurve-1.9.0-rare_crash_hang_fix.patch b/x11-themes/qtcurve/files/qtcurve-1.9.0-rare_crash_hang_fix.patch new file mode 100644 index 000000000000..921001f44544 --- /dev/null +++ b/x11-themes/qtcurve/files/qtcurve-1.9.0-rare_crash_hang_fix.patch @@ -0,0 +1,238 @@ +From b7da5ec7e2965332e3922dfb03a3d100aa203b94 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ren=C3=A9=20J=2EV=2E=20Bertin?= +Date: Fri, 8 Dec 2017 10:10:47 +0100 +Subject: address a rare crash/hang on exit + +Under rare circumstances Qt would attempt to deliver signals to stale +style instances, or leave orphaned style instances after unloading the +plugin. This is addressed by disconnecting the (currently only) signal +originating from an external application and the plugin now ensures it +leaves no orphaned style instances behind. +Also, moves the code handling pre-exit disconnection to a subclass. + +Differential Revision: https://phabricator.kde.org/D9229 +--- + qt5/style/qtcurve.cpp | 72 ++++++++++++++++++++++++++++++++------------ + qt5/style/qtcurve.h | 5 +-- + qt5/style/qtcurve_plugin.cpp | 15 ++++++--- + 3 files changed, 67 insertions(+), 25 deletions(-) + +diff --git a/qt5/style/qtcurve.cpp b/qt5/style/qtcurve.cpp +index 1bf6e1d..07eca0f 100644 +--- a/qt5/style/qtcurve.cpp ++++ b/qt5/style/qtcurve.cpp +@@ -101,6 +101,26 @@ + + namespace QtCurve { + ++class Style::DBusHelper { ++public: ++ DBusHelper() ++ : m_dBus(0) ++ , m_dbusConnected(false) ++ {} ++ ~DBusHelper() ++ { ++ if (m_dBus) { ++ m_dBus->disconnect(); ++ m_dBus->deleteLater(); ++ m_dBus = 0; ++ } ++ } ++ ++ std::once_flag m_aboutToQuitInit; ++ QDBusInterface *m_dBus; ++ bool m_dbusConnected; ++}; ++ + static inline void setPainterPen(QPainter *p, const QColor &col, const qreal width=1.0) + { + p->setPen(QPen(col, width)); +@@ -321,6 +341,7 @@ static void parseWindowLine(const QString &line, QList &data) + #endif + + Style::Style() : ++ m_dBusHelper(new DBusHelper()), + m_popupMenuCols(0L), + m_sliderCols(0L), + m_defBtnCols(0L), +@@ -343,13 +364,11 @@ Style::Style() : + m_progressBarAnimateTimer(0), + m_animateStep(0), + m_titlebarHeight(0), +- m_dBus(0), + m_shadowHelper(new ShadowHelper(this)), + m_sViewSBar(0L), + m_windowManager(new WindowManager(this)), + m_blurHelper(new BlurHelper(this)), +- m_shortcutHandler(new ShortcutHandler(this)), +- m_dbusConnected(false) ++ m_shortcutHandler(new ShortcutHandler(this)) + { + const char *env = getenv(QTCURVE_PREVIEW_CONFIG); + #ifdef QTC_QT5_ENABLE_KDE +@@ -394,6 +413,23 @@ void Style::init(bool initial) + #ifdef QTC_QT5_ENABLE_KDE + connect(KWindowSystem::self(), &KWindowSystem::compositingChanged, this, &Style::compositingToggled); + #endif ++ // prepare the cleanup handler ++ if (QCoreApplication::instance()) { ++ std::call_once(m_dBusHelper->m_aboutToQuitInit, [this] { ++ connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, [this] () { ++ // disconnect from the session DBus. We're no longer interested in the ++ // information it might send when the app we're serving is shutting down. ++ disconnectDBus(); ++ // Stop listening to select signals. We shouldn't stop emitting signals ++ // (like QObject::destroyed) but we can reduce the likelihood that pending ++ // signals will be sent to us post-mortem. ++#ifdef QTC_QT5_ENABLE_KDE ++ disconnect(KWindowSystem::self(), &KWindowSystem::compositingChanged, ++ this, &Style::compositingToggled); ++#endif ++ } ); ++ } ); ++ } + } + } + +@@ -663,14 +699,11 @@ void Style::init(bool initial) + + void Style::connectDBus() + { +- if (m_dbusConnected) ++ if (m_dBusHelper->m_dbusConnected) + return; + auto bus = QDBusConnection::sessionBus(); + if (bus.isConnected()) { +- m_dbusConnected = true; +- if (QCoreApplication::instance()) { +- connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, this, &Style::disconnectDBus); +- } ++ m_dBusHelper->m_dbusConnected = true; + bus.connect(QString(), "/KGlobalSettings", "org.kde.KGlobalSettings", + "notifyChange", this, SLOT(kdeGlobalSettingsChange(int, int))); + #ifndef QTC_QT5_ENABLE_KDE +@@ -699,12 +732,15 @@ void Style::connectDBus() + + void Style::disconnectDBus() + { +- if (!m_dbusConnected) ++ if (!m_dBusHelper->m_dbusConnected) + return; +- m_dbusConnected = false; + auto bus = QDBusConnection::sessionBus(); ++ if (!bus.isConnected()) ++ return; ++ m_dBusHelper->m_dbusConnected = false; + if (getenv("QTCURVE_DEBUG")) { + qWarning() << Q_FUNC_INFO << this << "Disconnecting from" << bus.name() << "/" << bus.baseService(); ++ dumpObjectInfo(); + } + bus.disconnect(QString(), "/KGlobalSettings", "org.kde.KGlobalSettings", + "notifyChange", +@@ -739,9 +775,7 @@ Style::~Style() + m_plugin->m_styleInstances.removeAll(this); + } + freeColors(); +- if (m_dBus) { +- delete m_dBus; +- } ++ delete m_dBusHelper; + } + + void Style::freeColor(QSet &freedColors, QColor **cols) +@@ -4467,10 +4501,10 @@ void Style::emitMenuSize(QWidget *w, unsigned short size, bool force) + if (oldSize != size) { + w->setProperty(constMenuSizeProperty, size); + qtcX11SetMenubarSize(wid, size); +- if(!m_dBus) +- m_dBus = new QDBusInterface("org.kde.kwin", "/QtCurve", ++ if(!m_dBusHelper->m_dBus) ++ m_dBusHelper->m_dBus = new QDBusInterface("org.kde.kwin", "/QtCurve", + "org.kde.QtCurve"); +- m_dBus->call(QDBus::NoBlock, "menuBarSize", ++ m_dBusHelper->m_dBus->call(QDBus::NoBlock, "menuBarSize", + (unsigned int)wid, (int)size); + } + } +@@ -4479,10 +4513,10 @@ void Style::emitMenuSize(QWidget *w, unsigned short size, bool force) + void Style::emitStatusBarState(QStatusBar *sb) + { + if (opts.statusbarHiding & HIDE_KWIN) { +- if (!m_dBus) +- m_dBus = new QDBusInterface("org.kde.kwin", "/QtCurve", ++ if (!m_dBusHelper->m_dBus) ++ m_dBusHelper->m_dBus = new QDBusInterface("org.kde.kwin", "/QtCurve", + "org.kde.QtCurve"); +- m_dBus->call(QDBus::NoBlock, "statusBarState", ++ m_dBusHelper->m_dBus->call(QDBus::NoBlock, "statusBarState", + (unsigned int)qtcGetWid(sb->window()), + sb->isVisible()); + } +diff --git a/qt5/style/qtcurve.h b/qt5/style/qtcurve.h +index 56960a5..ecfa2e7 100644 +--- a/qt5/style/qtcurve.h ++++ b/qt5/style/qtcurve.h +@@ -522,6 +522,9 @@ private: + const QWidget *widget) const; + + private: ++ class DBusHelper; ++ DBusHelper *m_dBusHelper; ++ + mutable Options opts; + QColor m_highlightCols[TOTAL_SHADES + 1], + m_backgroundCols[TOTAL_SHADES + 1], +@@ -564,14 +567,12 @@ private: + mutable QList m_mdiButtons[2]; // 0=left, 1=right + mutable int m_titlebarHeight; + +- QDBusInterface *m_dBus; + ShadowHelper *m_shadowHelper; + mutable QScrollBar *m_sViewSBar; + mutable QMap > m_sViewContainers; + WindowManager *m_windowManager; + BlurHelper *m_blurHelper; + ShortcutHandler *m_shortcutHandler; +- bool m_dbusConnected; + #ifdef QTC_QT5_ENABLE_KDE + KSharedConfigPtr m_configFile; + KSharedConfigPtr m_kdeGlobals; +diff --git a/qt5/style/qtcurve_plugin.cpp b/qt5/style/qtcurve_plugin.cpp +index ce363ac..481fffc 100644 +--- a/qt5/style/qtcurve_plugin.cpp ++++ b/qt5/style/qtcurve_plugin.cpp +@@ -129,6 +129,11 @@ StylePlugin::create(const QString &key) + if (key.toLower() == "qtcurve") { + qtc = new Style; + qtc->m_plugin = this; ++ // keep track of all style instances we allocate, for instance ++ // for KLineEdit widgets which apparently insist on overriding ++ // certain things (cf. KLineEditStyle). We want to be able to ++ // delete those instances as properly and as early as ++ // possible during the global destruction phase. + m_styleInstances << qtc; + } else { + qtc = nullptr; +@@ -151,12 +156,14 @@ StylePlugin::~StylePlugin() + qtcInfo("Deleting QtCurve plugin (%p)\n", this); + if (!m_styleInstances.isEmpty()) { + qtcWarn("there remain(s) %d Style instance(s)\n", m_styleInstances.count()); +- QList::Iterator it = m_styleInstances.begin(); +- while (it != m_styleInstances.end()) { +- Style *that = *it; +- it = m_styleInstances.erase(it); ++ foreach (Style *that, m_styleInstances) { ++ // don't let ~Style() touch m_styleInstances from here. ++ that->m_plugin = nullptr; ++ // each instance should already have disconnected from the D-Bus ++ // and disconnected from receiving select signals. + delete that; + } ++ m_styleInstances.clear(); + } + if (firstPlInstance == this) { + firstPlInstance = nullptr; +-- +cgit v0.11.2 + diff --git a/x11-themes/qtcurve/qtcurve-1.9.0_rc1-r2.ebuild b/x11-themes/qtcurve/qtcurve-1.9.0_rc1-r2.ebuild new file mode 100644 index 000000000000..4f5a52d2a5f3 --- /dev/null +++ b/x11-themes/qtcurve/qtcurve-1.9.0_rc1-r2.ebuild @@ -0,0 +1,88 @@ +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +KDE_AUTODEPS="false" +inherit kde5 + +DESCRIPTION="Widget styles for Qt and GTK2" +HOMEPAGE="https://cgit.kde.org/qtcurve.git" + +LICENSE="LGPL-2+" +SLOT="0" +IUSE="+X gtk nls plasma +qt5 test" + +if [[ "${PV}" != 9999 ]] ; then + SRC_URI="https://github.com/KDE/qtcurve/archive/${PV/_/-}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~ppc64 ~sparc ~x86" + S="${WORKDIR}/${P/_/-}" +fi + +REQUIRED_USE="gtk? ( X ) + || ( gtk qt5 ) + plasma? ( qt5 ) +" + +COMMON_DEPEND=" + gtk? ( x11-libs/gtk+:2 ) + plasma? ( + $(add_frameworks_dep frameworkintegration) + $(add_frameworks_dep karchive) + $(add_frameworks_dep kcompletion) + $(add_frameworks_dep kconfig) + $(add_frameworks_dep kconfigwidgets) + $(add_frameworks_dep kcoreaddons) + $(add_frameworks_dep kdelibs4support) + $(add_frameworks_dep kguiaddons) + $(add_frameworks_dep ki18n) + $(add_frameworks_dep kiconthemes) + $(add_frameworks_dep kio) + $(add_frameworks_dep kwidgetsaddons) + $(add_frameworks_dep kwindowsystem) + $(add_frameworks_dep kxmlgui) + $(add_qt_dep qtprintsupport) + ) + qt5? ( + $(add_qt_dep qtdbus) + $(add_qt_dep qtgui) + $(add_qt_dep qtsvg) + $(add_qt_dep qtwidgets) + $(add_qt_dep qtx11extras) + ) + X? ( + x11-libs/libX11 + x11-libs/libxcb + ) +" +DEPEND="${COMMON_DEPEND} + virtual/pkgconfig + nls? ( sys-devel/gettext ) +" +RDEPEND="${COMMON_DEPEND} + !x11-themes/gtk-engines-qtcurve +" + +DOCS=( AUTHORS ChangeLog.md README.md TODO.md ) + +PATCHES=( + "${FILESDIR}/${PN}-1.9.0-rare_crash_hang_fix.patch" +) + +src_configure() { + local mycmakeargs=( + -DENABLE_QT4=OFF + -DLIB_INSTALL_DIR="$(get_libdir)" + -DQTC_QT4_ENABLE_KDE=OFF + -DQTC_QT4_ENABLE_KWIN=OFF + -DQTC_KDE4_DEFAULT_HOME=ON + -DENABLE_GTK2="$(usex gtk)" + -DENABLE_QT5="$(usex qt5)" + -DENABLE_TEST="$(usex test)" + -DQTC_ENABLE_X11="$(usex X)" + -DQTC_INSTALL_PO="$(usex nls)" + -DQTC_QT5_ENABLE_KDE="$(usex plasma)" + ) + + kde5_src_configure +} diff --git a/x11-themes/qtcurve/qtcurve-9999.ebuild b/x11-themes/qtcurve/qtcurve-9999.ebuild index f201fa6e79a4..0c90108fce51 100644 --- a/x11-themes/qtcurve/qtcurve-9999.ebuild +++ b/x11-themes/qtcurve/qtcurve-9999.ebuild @@ -11,7 +11,7 @@ HOMEPAGE="https://cgit.kde.org/qtcurve.git" LICENSE="LGPL-2+" SLOT="0" -IUSE="+X gtk nls plasma qt4 +qt5 test" +IUSE="+X gtk nls plasma +qt5 test" if [[ "${PV}" != 9999 ]] ; then SRC_URI="https://github.com/KDE/qtcurve/archive/${PV/_/-}.tar.gz -> ${P}.tar.gz" @@ -20,25 +20,12 @@ if [[ "${PV}" != 9999 ]] ; then fi REQUIRED_USE="gtk? ( X ) - || ( gtk qt4 qt5 ) + || ( gtk qt5 ) plasma? ( qt5 ) " COMMON_DEPEND=" gtk? ( x11-libs/gtk+:2 ) - qt4? ( - dev-qt/qtcore:4 - dev-qt/qtdbus:4 - dev-qt/qtgui:4 - dev-qt/qtsvg:4 - ) - qt5? ( - $(add_qt_dep qtdbus) - $(add_qt_dep qtgui) - $(add_qt_dep qtsvg) - $(add_qt_dep qtwidgets) - $(add_qt_dep qtx11extras) - ) plasma? ( $(add_frameworks_dep frameworkintegration) $(add_frameworks_dep karchive) @@ -56,6 +43,13 @@ COMMON_DEPEND=" $(add_frameworks_dep kxmlgui) $(add_qt_dep qtprintsupport) ) + qt5? ( + $(add_qt_dep qtdbus) + $(add_qt_dep qtgui) + $(add_qt_dep qtsvg) + $(add_qt_dep qtwidgets) + $(add_qt_dep qtx11extras) + ) X? ( x11-libs/libX11 x11-libs/libxcb @@ -78,11 +72,11 @@ DOCS=( AUTHORS ChangeLog.md README.md TODO.md ) src_configure() { local mycmakeargs=( -DLIB_INSTALL_DIR="$(get_libdir)" + -DENABLE_QT4=OFF -DQTC_QT4_ENABLE_KDE=OFF -DQTC_QT4_ENABLE_KWIN=OFF -DQTC_KDE4_DEFAULT_HOME=ON -DENABLE_GTK2="$(usex gtk)" - -DENABLE_QT4="$(usex qt4)" -DENABLE_QT5="$(usex qt5)" -DENABLE_TEST="$(usex test)" -DQTC_ENABLE_X11="$(usex X)" -- cgit v1.2.3