on xenial help sign in
allow up/down keys to manipulate focus in the fenced focus chain
commit43912ea0a7e25612bb12c6b9bddd0d6cd763a09b authorLukáš Tinkl <lukas.tinkl@canonical.com> dateThu 5 Jan 2017, 12:37 (10 years ago) parent712a613
3 files changed+31
plugins/Utils/tabfocusfence.cpp+22 plugins/Utils/tabfocusfence.h+3 qml/Components/ShellDialog.qml+6
plugins/Utils/tabfocusfence.cpp+22
@@ -25,6 +25,28 @@ TabFocusFenceItem::TabFocusFenceItem(QQuickItem *parent) : QQuickItem(parent)
2525 setFlag(ItemIsFocusScope);
2626}
2727
28+void TabFocusFenceItem::focusNext()
29+{
30+ QQuickItem * current = scopedFocusItem();
31+ if (current) {
32+ QQuickItem * next = scopedFocusItem()->nextItemInFocusChain(true);
33+ if (next) {
34+ next->setFocus(true, Qt::TabFocusReason);
35+ }
36+ }
37+}
38+
39+void TabFocusFenceItem::focusPrev()
40+{
41+ QQuickItem * current = scopedFocusItem();
42+ if (current) {
43+ QQuickItem * prev = scopedFocusItem()->nextItemInFocusChain(false);
44+ if (prev) {
45+ prev->setFocus(true, Qt::BacktabFocusReason);
46+ }
47+ }
48+}
49+
2850void TabFocusFenceItem::keyPressEvent(QKeyEvent *event)
2951{
3052 // Needed so we eat Tab keys when there's only one item inside the fence
plugins/Utils/tabfocusfence.h+3
@@ -28,6 +28,9 @@ Q_OBJECT
2828public:
2929 TabFocusFenceItem(QQuickItem *parent = nullptr);
3030
31+ Q_INVOKABLE void focusNext();
32+ Q_INVOKABLE void focusPrev();
33+
3134 void keyPressEvent(QKeyEvent *event) override;
3235 void keyReleaseEvent(QKeyEvent *event) override;
3336};
qml/Components/ShellDialog.qml+6
@@ -61,5 +61,11 @@ Dialog {
6161 width: parent.width
6262 spacing: units.gu(2)
6363 }
64+ Keys.onDownPressed: {
65+ focusNext();
66+ }
67+ Keys.onUpPressed: {
68+ focusPrev();
69+ }
6470 }
6571}