kde-frameworks/kxmlgui: Fix Qt5 app artifacts w/ kcheckaccelerators
authorAndreas Sturmlechner <asturm@gentoo.org>
Wed, 30 Jan 2019 17:03:40 +0000 (18:03 +0100)
committerAndreas Sturmlechner <asturm@gentoo.org>
Wed, 30 Jan 2019 17:03:40 +0000 (18:03 +0100)
Fixes long-standing bug in applications under Plasma-5 not linking to KXmlGui,
as seen in QtCreator and Clementine e.g.

KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=337491
Package-Manager: Portage-2.3.59, Repoman-2.3.12
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
kde-frameworks/kxmlgui/files/kxmlgui-5.54.0-kcheckaccelerators.patch [new file with mode: 0644]
kde-frameworks/kxmlgui/kxmlgui-5.54.0-r1.ebuild [new file with mode: 0644]

diff --git a/kde-frameworks/kxmlgui/files/kxmlgui-5.54.0-kcheckaccelerators.patch b/kde-frameworks/kxmlgui/files/kxmlgui-5.54.0-kcheckaccelerators.patch
new file mode 100644 (file)
index 0000000..0882d5f
--- /dev/null
@@ -0,0 +1,79 @@
+From 02b523bad09aab062355e46771889b0f3709692f Mon Sep 17 00:00:00 2001
+From: Albert Astals Cid <aacid@kde.org>
+Date: Sat, 12 Jan 2019 18:39:33 +0100
+Subject: Make KCheckAccelerators less invasive for apps that don't directly
+ link to KXmlGui
+
+Summary: BUGS: 337491
+
+Test Plan:
+Ran qtcreator and it no longer has the & in Details
+Added some debug and checked that okular still gets the code called
+
+Reviewers: anthonyfieroni
+
+Reviewed By: anthonyfieroni
+
+Subscribers: davidedmundson, anthonyfieroni, kde-frameworks-devel
+
+Tags: #frameworks
+
+Differential Revision: https://phabricator.kde.org/D18204
+---
+ src/kcheckaccelerators.cpp | 38 ++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/src/kcheckaccelerators.cpp b/src/kcheckaccelerators.cpp
+index 13fc012..e08447d 100644
+--- a/src/kcheckaccelerators.cpp
++++ b/src/kcheckaccelerators.cpp
+@@ -80,10 +80,44 @@ public Q_SLOTS:
+ static void startupFunc()
+ {
+-    // Call initiateIfNeeded once we're in the event loop
+-    // This is to prevent using KSharedConfig before main() can set the app name
++    // Static because in some cases this is called multiple times
++    // but if an application had any of the bad cases we always want
++    // to skip the check
++    static bool doCheckAccelerators = true;
++
++    if (!doCheckAccelerators) {
++        return;
++    }
++
+     QCoreApplication *app = QCoreApplication::instance();
++    if (!app) {
++        // We're being loaded by something that doesn't have a QCoreApplication
++        // this would probably crash at some later point since we do use qApp->
++        // quite a lot, so skip the magic
++        doCheckAccelerators = false;
++        return;
++    }
++
++    if (!QCoreApplication::startingUp()) {
++        // If the app has already started, this means we're not being run as part of
++        // qt_call_pre_routines, which most probably means that we're being run as part
++        // of KXmlGui being loaded as part of some plugin of the app, so don't
++        // do any magic
++        doCheckAccelerators = false;
++        return;
++    }
++
++    if (!QCoreApplication::eventDispatcher()) {
++        // We are called with event dispatcher being null when KXmlGui is being loaded
++        // through plasma-integration instead of being linked to the app (i.e. QtCreator vs Okular)
++        // For apps that don't link directly to KXmlGui do not do the accelerator magic
++        doCheckAccelerators = false;
++        return;
++    }
++
+     KCheckAcceleratorsInitializer *initializer = new KCheckAcceleratorsInitializer(app);
++    // Call initiateIfNeeded once we're in the event loop
++    // This is to prevent using KSharedConfig before main() can set the app name
+     QMetaObject::invokeMethod(initializer, "initiateIfNeeded", Qt::QueuedConnection);
+ }
+-- 
+cgit v1.1
+
diff --git a/kde-frameworks/kxmlgui/kxmlgui-5.54.0-r1.ebuild b/kde-frameworks/kxmlgui/kxmlgui-5.54.0-r1.ebuild
new file mode 100644 (file)
index 0000000..eac5c3c
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+VIRTUALX_REQUIRED="test"
+inherit kde5
+
+DESCRIPTION="Framework for managing menu and toolbar actions in an abstract way"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+LICENSE="LGPL-2+"
+IUSE="attica"
+
+# slot op: includes QtCore/private/qlocale_p.h
+RDEPEND="
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kconfigwidgets)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kglobalaccel)
+       $(add_frameworks_dep ki18n)
+       $(add_frameworks_dep kiconthemes)
+       $(add_frameworks_dep kitemviews)
+       $(add_frameworks_dep ktextwidgets)
+       $(add_frameworks_dep kwidgetsaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_qt_dep qtcore '' '' '5=')
+       $(add_qt_dep qtdbus)
+       $(add_qt_dep qtgui)
+       $(add_qt_dep qtnetwork 'ssl')
+       $(add_qt_dep qtprintsupport)
+       $(add_qt_dep qtwidgets)
+       $(add_qt_dep qtxml)
+       attica? ( $(add_frameworks_dep attica) )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}/${P}-kcheckaccelerators.patch" )
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake-utils_use_find_package attica KF5Attica)
+       )
+
+       kde5_src_configure
+}
+
+src_test() {
+       # Files are missing; whatever. Bugs 650290, 668198
+       local myctestargs=(
+               -E "(ktoolbar_unittest|kxmlgui_unittest)"
+       )
+
+       kde5_src_test
+}