1 |
commit: 0f5e823650417f6d4598d24407c6b6de8983906c |
2 |
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Nov 23 11:22:02 2021 +0000 |
4 |
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Nov 23 14:59:10 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0f5e8236 |
7 |
|
8 |
kde-frameworks/kwidgetsaddons: Fix conflicts w/ actions w/ Alt+X shortcuts |
9 |
|
10 |
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=444990 |
11 |
Upstream commit 294fe8ddc2f10d0a783bf9b80769c31ecc5922b1 |
12 |
|
13 |
Package-Manager: Portage-3.0.28, Repoman-3.0.3 |
14 |
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org> |
15 |
|
16 |
....88.0-kacceleratormanager-alt-x-shortcuts.patch | 149 +++++++++++++++++++++ |
17 |
.../kwidgetsaddons/kwidgetsaddons-5.88.0-r1.ebuild | 38 ++++++ |
18 |
2 files changed, 187 insertions(+) |
19 |
|
20 |
diff --git a/kde-frameworks/kwidgetsaddons/files/kwidgetsaddons-5.88.0-kacceleratormanager-alt-x-shortcuts.patch b/kde-frameworks/kwidgetsaddons/files/kwidgetsaddons-5.88.0-kacceleratormanager-alt-x-shortcuts.patch |
21 |
new file mode 100644 |
22 |
index 000000000000..6e7ca9e47298 |
23 |
--- /dev/null |
24 |
+++ b/kde-frameworks/kwidgetsaddons/files/kwidgetsaddons-5.88.0-kacceleratormanager-alt-x-shortcuts.patch |
25 |
@@ -0,0 +1,149 @@ |
26 |
+From 294fe8ddc2f10d0a783bf9b80769c31ecc5922b1 Mon Sep 17 00:00:00 2001 |
27 |
+From: Albert Astals Cid <aacid@×××.org> |
28 |
+Date: Fri, 5 Nov 2021 23:23:59 +0100 |
29 |
+Subject: [PATCH] KAcceleratorManager: Take into account actions with Alt+X |
30 |
+ shortcuts |
31 |
+ |
32 |
+We need to mark those X labels as used, otherwise the accelerator |
33 |
+manager may decide to use X for an accelerator and when pressing Alt+X |
34 |
+we will have a conflict |
35 |
+ |
36 |
+BUGS: 444990 |
37 |
+--- |
38 |
+ autotests/kacceleratormanagertest.cpp | 21 +++++++++++++++++++ |
39 |
+ src/kacceleratormanager.cpp | 30 ++++++++++++++++++++------- |
40 |
+ src/kacceleratormanager_p.h | 4 ++-- |
41 |
+ 3 files changed, 46 insertions(+), 9 deletions(-) |
42 |
+ |
43 |
+diff --git a/autotests/kacceleratormanagertest.cpp b/autotests/kacceleratormanagertest.cpp |
44 |
+index 3fc07928..2bdc4f74 100644 |
45 |
+--- a/autotests/kacceleratormanagertest.cpp |
46 |
++++ b/autotests/kacceleratormanagertest.cpp |
47 |
+@@ -8,6 +8,7 @@ |
48 |
+ #include <kacceleratormanager.h> |
49 |
+ |
50 |
+ #include <QMenu> |
51 |
++#include <QPushButton> |
52 |
+ #include <QTest> |
53 |
+ |
54 |
+ #define QSL QStringLiteral |
55 |
+@@ -75,6 +76,26 @@ private Q_SLOTS: |
56 |
+ QCOMPARE(texts, expectedTexts); |
57 |
+ } |
58 |
+ |
59 |
++ void testExistingActionsShortcutsAreTakenIntoAccount() |
60 |
++ { |
61 |
++ std::unique_ptr<QWidget> w(new QWidget()); |
62 |
++ |
63 |
++ QPushButton *pb = new QPushButton(QSL("Open"), w.get()); |
64 |
++ |
65 |
++ KAcceleratorManager::manage(w.get()); |
66 |
++ QCOMPARE(pb->text(), QSL("&Open")); |
67 |
++ |
68 |
++ delete pb; |
69 |
++ pb = new QPushButton(QSL("Open"), w.get()); |
70 |
++ |
71 |
++ QAction *a = new QAction(); |
72 |
++ a->setShortcut(QSL("Alt+O")); |
73 |
++ w->addAction(a); |
74 |
++ |
75 |
++ KAcceleratorManager::manage(w.get()); |
76 |
++ QCOMPARE(pb->text(), QSL("O&pen")); |
77 |
++ } |
78 |
++ |
79 |
+ void testActionIconTexts_data() |
80 |
+ { |
81 |
+ QTest::addColumn<QStringList>("initialTexts"); |
82 |
+diff --git a/src/kacceleratormanager.cpp b/src/kacceleratormanager.cpp |
83 |
+index 66d596d3..2f7b1879 100644 |
84 |
+--- a/src/kacceleratormanager.cpp |
85 |
++++ b/src/kacceleratormanager.cpp |
86 |
+@@ -94,9 +94,8 @@ void KAcceleratorManagerPrivate::manage(QWidget *widget) |
87 |
+ |
88 |
+ Item *root = new Item; |
89 |
+ |
90 |
+- manageWidget(widget, root); |
91 |
+- |
92 |
+ QString used; |
93 |
++ manageWidget(widget, root, used); |
94 |
+ calculateAccelerators(root, used); |
95 |
+ delete root; |
96 |
+ } |
97 |
+@@ -175,7 +174,7 @@ void KAcceleratorManagerPrivate::calculateAccelerators(Item *item, QString &used |
98 |
+ } |
99 |
+ } |
100 |
+ |
101 |
+-void KAcceleratorManagerPrivate::traverseChildren(QWidget *widget, Item *item) |
102 |
++void KAcceleratorManagerPrivate::traverseChildren(QWidget *widget, Item *item, QString &used) |
103 |
+ { |
104 |
+ const QList<QWidget *> childList = widget->findChildren<QWidget *>(); |
105 |
+ for (QWidget *w : childList) { |
106 |
+@@ -192,12 +191,29 @@ void KAcceleratorManagerPrivate::traverseChildren(QWidget *widget, Item *item) |
107 |
+ continue; |
108 |
+ } |
109 |
+ |
110 |
+- manageWidget(w, item); |
111 |
++ manageWidget(w, item, used); |
112 |
+ } |
113 |
+ } |
114 |
+ |
115 |
+-void KAcceleratorManagerPrivate::manageWidget(QWidget *w, Item *item) |
116 |
++void KAcceleratorManagerPrivate::manageWidget(QWidget *w, Item *item, QString &used) |
117 |
+ { |
118 |
++ // If the widget has any action whose shortcuts contain keystrokes in the |
119 |
++ // form of Alt+X we need to mark X as used, otherwise we may assign it as accelerator |
120 |
++ // and there will be a conflict when trying to use it |
121 |
++ const QList<QAction *> widgetActions = w->actions(); |
122 |
++ for (QAction *action : widgetActions) { |
123 |
++ const QList<QKeySequence> actionShortcuts = action->shortcuts(); |
124 |
++ for (const QKeySequence &sequence : actionShortcuts) { |
125 |
++ const QString sequenceAsText = sequence.toString(QKeySequence::PortableText); |
126 |
++ const QStringList splitSequence = sequenceAsText.split(QStringLiteral(", ")); |
127 |
++ for (const QString &shortcut : splitSequence) { |
128 |
++ if (shortcut.length() == 5 && shortcut.startsWith(QStringLiteral("Alt+"))) { |
129 |
++ used.append(shortcut.right(1)); |
130 |
++ } |
131 |
++ } |
132 |
++ } |
133 |
++ } |
134 |
++ |
135 |
+ // first treat the special cases |
136 |
+ |
137 |
+ QTabBar *tabBar = qobject_cast<QTabBar *>(w); |
138 |
+@@ -247,7 +263,7 @@ void KAcceleratorManagerPrivate::manageWidget(QWidget *w, Item *item) |
139 |
+ } |
140 |
+ |
141 |
+ if (w->inherits("KUrlRequester")) { |
142 |
+- traverseChildren(w, item); |
143 |
++ traverseChildren(w, item, used); |
144 |
+ return; |
145 |
+ } |
146 |
+ |
147 |
+@@ -316,7 +332,7 @@ void KAcceleratorManagerPrivate::manageWidget(QWidget *w, Item *item) |
148 |
+ item->addChild(i); |
149 |
+ } |
150 |
+ } |
151 |
+- traverseChildren(w, item); |
152 |
++ traverseChildren(w, item, used); |
153 |
+ } |
154 |
+ |
155 |
+ void KAcceleratorManagerPrivate::manageTabBar(QTabBar *bar, Item *item) |
156 |
+diff --git a/src/kacceleratormanager_p.h b/src/kacceleratormanager_p.h |
157 |
+index a92d04ab..04926476 100644 |
158 |
+--- a/src/kacceleratormanager_p.h |
159 |
++++ b/src/kacceleratormanager_p.h |
160 |
+@@ -227,9 +227,9 @@ public: |
161 |
+ typedef QList<Item *> ItemList; |
162 |
+ |
163 |
+ private: |
164 |
+- static void traverseChildren(QWidget *widget, Item *item); |
165 |
++ static void traverseChildren(QWidget *widget, Item *item, QString &used); |
166 |
+ |
167 |
+- static void manageWidget(QWidget *widget, Item *item); |
168 |
++ static void manageWidget(QWidget *widget, Item *item, QString &used); |
169 |
+ static void manageMenuBar(QMenuBar *mbar, Item *item); |
170 |
+ static void manageTabBar(QTabBar *bar, Item *item); |
171 |
+ static void manageDockWidget(QDockWidget *dock, Item *item); |
172 |
+-- |
173 |
+GitLab |
174 |
+ |
175 |
|
176 |
diff --git a/kde-frameworks/kwidgetsaddons/kwidgetsaddons-5.88.0-r1.ebuild b/kde-frameworks/kwidgetsaddons/kwidgetsaddons-5.88.0-r1.ebuild |
177 |
new file mode 100644 |
178 |
index 000000000000..cb0733f838d6 |
179 |
--- /dev/null |
180 |
+++ b/kde-frameworks/kwidgetsaddons/kwidgetsaddons-5.88.0-r1.ebuild |
181 |
@@ -0,0 +1,38 @@ |
182 |
+# Copyright 1999-2021 Gentoo Authors |
183 |
+# Distributed under the terms of the GNU General Public License v2 |
184 |
+ |
185 |
+EAPI=8 |
186 |
+ |
187 |
+ECM_DESIGNERPLUGIN="true" |
188 |
+QTMIN=5.15.2 |
189 |
+VIRTUALX_REQUIRED="test" |
190 |
+inherit ecm kde.org |
191 |
+ |
192 |
+DESCRIPTION="An assortment of high-level widgets for common tasks" |
193 |
+LICENSE="LGPL-2.1+" |
194 |
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86" |
195 |
+IUSE="nls" |
196 |
+ |
197 |
+DEPEND=" |
198 |
+ >=dev-qt/qtgui-${QTMIN}:5 |
199 |
+ >=dev-qt/qtwidgets-${QTMIN}:5 |
200 |
+" |
201 |
+RDEPEND="${DEPEND}" |
202 |
+BDEPEND=" |
203 |
+ nls? ( >=dev-qt/linguist-tools-${QTMIN}:5 ) |
204 |
+" |
205 |
+ |
206 |
+PATCHES=( "${FILESDIR}/${P}-kacceleratormanager-alt-x-shortcuts.patch" ) # KDE-bug 444990 |
207 |
+ |
208 |
+src_configure() { |
209 |
+ local mycmakeargs=( |
210 |
+ -DCMAKE_DISABLE_FIND_PACKAGE_PythonModuleGeneration=ON # bug 746866 |
211 |
+ ) |
212 |
+ ecm_src_configure |
213 |
+} |
214 |
+ |
215 |
+src_test() { |
216 |
+ # bug 650216, 653186, 697866, 808216 |
217 |
+ local myctestargs=( -E "(kdatecomboboxtest|ksqueezedtextlabelautotest|ktwofingertaptest|ktwofingerswipetest)" ) |
218 |
+ ecm_src_test |
219 |
+} |