summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2023-10-03 16:28:54 +0100
committerSam James <sam@gentoo.org>2023-10-03 16:29:42 +0100
commit84f85d1105409ac7cd5119e9ff7a47b91c2cb172 (patch)
tree51b7865f8a31c193d7b8f5f87a602d912186945d /kde-frameworks/kxmlgui
parentkde-plasma/xdg-desktop-portal-kde: backport GTK settings fix (diff)
downloadgentoo-84f85d1105409ac7cd5119e9ff7a47b91c2cb172.tar.gz
gentoo-84f85d1105409ac7cd5119e9ff7a47b91c2cb172.tar.bz2
gentoo-84f85d1105409ac7cd5119e9ff7a47b91c2cb172.zip
kde-frameworks/kxmlgui: fix XML merging (shortcut scheme handling)
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=475016 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'kde-frameworks/kxmlgui')
-rw-r--r--kde-frameworks/kxmlgui/files/kxmlgui-5.111.0-fix-xml-merging.patch156
-rw-r--r--kde-frameworks/kxmlgui/kxmlgui-5.110.0-r1.ebuild49
2 files changed, 205 insertions, 0 deletions
diff --git a/kde-frameworks/kxmlgui/files/kxmlgui-5.111.0-fix-xml-merging.patch b/kde-frameworks/kxmlgui/files/kxmlgui-5.111.0-fix-xml-merging.patch
new file mode 100644
index 000000000000..013fbab9d1c7
--- /dev/null
+++ b/kde-frameworks/kxmlgui/files/kxmlgui-5.111.0-fix-xml-merging.patch
@@ -0,0 +1,156 @@
+https://invent.kde.org/frameworks/kxmlgui/-/merge_requests/190
+https://bugs.kde.org/show_bug.cgi?id=475016
+
+From f015fa6006d2e2eea2d2aac11c18219b255722ef Mon Sep 17 00:00:00 2001
+From: Mladen Milinkovic <maxrd2@smoothware.net>
+Date: Fri, 29 Sep 2023 20:01:49 +0200
+Subject: [PATCH] Fix merging of XMLs with multiple ActionProperties tags
+
+BUG: 475016
+--- a/autotests/kxmlgui_unittest.cpp
++++ b/autotests/kxmlgui_unittest.cpp
+@@ -88,6 +88,26 @@ static void createXmlFile(QFile &file, int version, int flags, const QByteArray
+ file.write("</" + toplevelTag + ">\n");
+ }
+
++class ShortcutSchemeHandler
++{
++public:
++ ShortcutSchemeHandler(const QString &scheme)
++ : cgScheme(KSharedConfig::openConfig(), "Shortcut Schemes")
++ , prevScheme(cgScheme.readEntry("Current Scheme", QStringLiteral("Default")))
++ {
++ cgScheme.writeEntry("Current Scheme", scheme);
++ }
++
++ ~ShortcutSchemeHandler()
++ {
++ cgScheme.writeEntry("Current Scheme", prevScheme);
++ }
++
++private:
++ KConfigGroup cgScheme;
++ const QString prevScheme;
++};
++
+ static void clickApply(KEditToolBar *dialog)
+ {
+ QDialogButtonBox *box = dialog->findChild<QDialogButtonBox *>();
+@@ -106,6 +126,15 @@ void KXmlGui_UnitTest::initTestCase()
+ QFile::remove(configFile);
+ KSharedConfig::openConfig()->reparseConfiguration();
+ }
++
++ // Create "Test" shortcut scheme to eliminate the KF warning
++ QFile testScheme = QFile(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)
++ + QLatin1String("/%1/shortcuts/%2").arg(QCoreApplication::applicationName(), QStringLiteral("Test")));
++ if (!testScheme.exists()) {
++ QVERIFY(QFileInfo(testScheme).dir().mkpath(QStringLiteral(".")));
++ QVERIFY(testScheme.open(QIODevice::WriteOnly));
++ testScheme.write(QByteArray("<gui><ActionProperties/></gui>"));
++ }
+ }
+
+ void KXmlGui_UnitTest::testFindVersionNumber_data()
+@@ -457,6 +486,56 @@ void KXmlGui_UnitTest::testPartMerging()
+ factory.removeClient(&hostClient);
+ }
+
++void KXmlGui_UnitTest::testShortcutSchemeMerging()
++{
++ TestGuiClient client;
++
++ ShortcutSchemeHandler sss(QStringLiteral("Test"));
++
++ KActionCollection *ac = client.actionCollection();
++
++ QAction *a = ac->addAction(QStringLiteral("test_action"));
++ ac->setDefaultShortcut(a, QKeySequence(QStringLiteral("Ctrl+A")));
++
++ const QByteArray appXml = R"(<?xml version = "1.0"?>
++<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
++<kpartgui name="foo" version="5">
++<MenuBar>
++ <Menu name="file"><text>&amp;File</text>
++ <Action name="test_action" />
++ </Menu>
++</MenuBar></kpartgui>
++)";
++ client.createGUI(appXml, false);
++
++ const QByteArray settingsXml = R"(<!DOCTYPE kpartgui SYSTEM 'kpartgui.dtd'>
++<kpartgui name="foo" version="1">
++ <MenuBar>
++ <Menu name="file">
++ <text>&amp;File</text>
++ <Action name="test_action" />
++ </Menu>
++ </MenuBar>
++ <ActionProperties scheme="Default">
++ <Action name="test_action" shortcut="Ctrl+B"/>
++ </ActionProperties>
++ <ActionProperties scheme="Test">
++ <Action name="test_action" shortcut="Ctrl+C"/>
++ </ActionProperties>
++</kpartgui>
++)";
++ client.mergeXML(settingsXml);
++
++ KMainWindow mainWindow;
++ KXMLGUIBuilder builder(&mainWindow);
++ KXMLGUIFactory factory(&builder);
++ factory.addClient(&client);
++
++ QCOMPARE(a->shortcut(), QKeySequence(QStringLiteral("Ctrl+C")));
++
++ factory.removeClient(&client);
++}
++
+ void KXmlGui_UnitTest::testPartMergingSettings() // #252911
+ {
+ const QByteArray hostXml =
+--- a/autotests/kxmlgui_unittest.h
++++ b/autotests/kxmlgui_unittest.h
+@@ -23,6 +23,7 @@ private Q_SLOTS:
+ void testVersionHandlerNewVersionUserChanges();
+ void testPartMerging();
+ void testPartMergingSettings();
++ void testShortcutSchemeMerging();
+ void testUiStandardsMerging_data();
+ void testUiStandardsMerging();
+ void testActionListAndSeparator();
+--- a/autotests/testguiclient.h
++++ b/autotests/testguiclient.h
+@@ -42,6 +42,10 @@ public:
+
+ setXML(QString::fromLatin1(xml), true);
+ }
++ void mergeXML(const QByteArray &xml)
++ {
++ setXML(QString::fromLatin1(xml), true);
++ }
+ void createActions(const QStringList &actionNames)
+ {
+ KActionCollection *coll = actionCollection();
+--- a/src/kxmlguiclient.cpp
++++ b/src/kxmlguiclient.cpp
+@@ -587,6 +587,8 @@ bool KXMLGUIClientPrivate::isEmptyContainer(const QDomElement &base, KActionColl
+
+ QDomElement KXMLGUIClientPrivate::findMatchingElement(const QDomElement &base, const QDomElement &additive)
+ {
++ const QString idAttribute(base.tagName() == QLatin1String("ActionProperties") ? QStringLiteral("scheme") : QStringLiteral("name"));
++
+ QDomNode n = additive.firstChild();
+ while (!n.isNull()) {
+ QDomElement e = n.toElement();
+@@ -604,7 +606,7 @@ QDomElement KXMLGUIClientPrivate::findMatchingElement(const QDomElement &base, c
+
+ // now see if our tags are equivalent
+ if (equalstr(tag, base.tagName()) //
+- && e.attribute(QStringLiteral("name")) == base.attribute(QStringLiteral("name"))) {
++ && e.attribute(idAttribute) == base.attribute(idAttribute)) {
+ return e;
+ }
+ }
+--
+GitLab
diff --git a/kde-frameworks/kxmlgui/kxmlgui-5.110.0-r1.ebuild b/kde-frameworks/kxmlgui/kxmlgui-5.110.0-r1.ebuild
new file mode 100644
index 000000000000..e891a27f3694
--- /dev/null
+++ b/kde-frameworks/kxmlgui/kxmlgui-5.110.0-r1.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+ECM_DESIGNERPLUGIN="true"
+PVCUT=$(ver_cut 1-2)
+QTMIN=5.15.9
+inherit ecm frameworks.kde.org
+
+DESCRIPTION="Framework for managing menu and toolbar actions in an abstract way"
+
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+LICENSE="LGPL-2+"
+IUSE=""
+
+# slot op: includes QtCore/private/qlocale_p.h
+DEPEND="
+ >=dev-qt/qtcore-${QTMIN}:5=
+ >=dev-qt/qtdbus-${QTMIN}:5
+ >=dev-qt/qtgui-${QTMIN}:5
+ >=dev-qt/qtnetwork-${QTMIN}:5[ssl]
+ >=dev-qt/qtprintsupport-${QTMIN}:5
+ >=dev-qt/qtwidgets-${QTMIN}:5
+ >=dev-qt/qtxml-${QTMIN}:5
+ =kde-frameworks/kconfig-${PVCUT}*:5
+ =kde-frameworks/kconfigwidgets-${PVCUT}*:5
+ =kde-frameworks/kcoreaddons-${PVCUT}*:5
+ =kde-frameworks/kglobalaccel-${PVCUT}*:5
+ =kde-frameworks/kguiaddons-${PVCUT}*:5
+ =kde-frameworks/ki18n-${PVCUT}*:5
+ =kde-frameworks/kiconthemes-${PVCUT}*:5
+ =kde-frameworks/kitemviews-${PVCUT}*:5
+ =kde-frameworks/kwidgetsaddons-${PVCUT}*:5
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-5.111.0-fix-xml-merging.patch
+)
+
+src_test() {
+ # Files are missing; whatever. Bugs 650290, 668198, 808216
+ local myctestargs=(
+ -E "(ktoolbar_unittest|kxmlgui_unittest|ktooltiphelper_unittest)"
+ )
+
+ ecm_src_test
+}