summaryrefslogtreecommitdiff
path: root/kde-frameworks/kxmlgui/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-10-03 17:49:12 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-10-03 17:49:12 +0100
commitc99c2410831577bef101e22948e954f85f56cba1 (patch)
tree3a441417709f2a7a24673267462b405615c5df40 /kde-frameworks/kxmlgui/files
parent8e3f5a0e42ba2822463660764321da4ed3b52ef9 (diff)
gentoo auto-resync : 03:10:2023 - 17:49:12
Diffstat (limited to 'kde-frameworks/kxmlgui/files')
-rw-r--r--kde-frameworks/kxmlgui/files/kxmlgui-5.111.0-fix-xml-merging.patch156
1 files changed, 156 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