From 8dcfb2bff0aafc060010747baf5fbb10a82e3a21 Mon Sep 17 00:00:00 2001 From: krasko <154632626+krasko78@users.noreply.github.com> Date: Sun, 23 Feb 2025 22:03:51 +0100 Subject: [PATCH] 13679: Focus and accessibility improvements of Spin edit controls --- src/framework/accessibility/iaccessible.h | 1 + .../internal/accessibleiteminterface.cpp | 5 +++++ src/framework/ui/view/qmlaccessible.h | 5 ++++- .../Muse/UiComponents/IncrementalPropertyControl.qml | 11 +++++++++-- .../qml/Muse/UiComponents/TextInputField.qml | 6 ++++++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/framework/accessibility/iaccessible.h b/src/framework/accessibility/iaccessible.h index 237edf5f942a0..da8daa9f98be3 100644 --- a/src/framework/accessibility/iaccessible.h +++ b/src/framework/accessibility/iaccessible.h @@ -55,6 +55,7 @@ class IAccessible List, ListItem, MenuItem, + SpinBox, Range, Group, diff --git a/src/framework/accessibility/internal/accessibleiteminterface.cpp b/src/framework/accessibility/internal/accessibleiteminterface.cpp index 9e9343538cbda..951bd9ced11c3 100644 --- a/src/framework/accessibility/internal/accessibleiteminterface.cpp +++ b/src/framework/accessibility/internal/accessibleiteminterface.cpp @@ -192,6 +192,10 @@ QAccessible::State AccessibleItemInterface::state() const state.focusable = true; state.focused = item->accessibleState(IAccessible::State::Focused); } break; + case IAccessible::Role::SpinBox: { + state.focusable = true; + state.focused = item->accessibleState(IAccessible::State::Focused); + } break; case IAccessible::Role::Range: { state.focusable = true; state.focused = item->accessibleState(IAccessible::State::Focused); @@ -225,6 +229,7 @@ QAccessible::Role AccessibleItemInterface::role() const case IAccessible::Role::List: return QAccessible::List; case IAccessible::Role::ListItem: return QAccessible::ListItem; case IAccessible::Role::MenuItem: return QAccessible::MenuItem; + case IAccessible::Role::SpinBox: return QAccessible::SpinBox; case IAccessible::Role::Range: return QAccessible::Slider; case IAccessible::Role::Group: case IAccessible::Role::Information: diff --git a/src/framework/ui/view/qmlaccessible.h b/src/framework/ui/view/qmlaccessible.h index a0eb3a09e4fbb..5a2a2d40135b4 100644 --- a/src/framework/ui/view/qmlaccessible.h +++ b/src/framework/ui/view/qmlaccessible.h @@ -59,8 +59,11 @@ class MUAccessible List, ListItem, MenuItem, + SpinBox, Range, - Information + Group, + Information, + ElementOnScore }; Q_ENUM(Role) }; diff --git a/src/framework/uicomponents/qml/Muse/UiComponents/IncrementalPropertyControl.qml b/src/framework/uicomponents/qml/Muse/UiComponents/IncrementalPropertyControl.qml index e2cb350d74d2b..a7c5a9bd21d8c 100644 --- a/src/framework/uicomponents/qml/Muse/UiComponents/IncrementalPropertyControl.qml +++ b/src/framework/uicomponents/qml/Muse/UiComponents/IncrementalPropertyControl.qml @@ -148,14 +148,21 @@ Item { anchors.top: parent.top anchors.bottom: parent.bottom + navigation.accessible.role: MUAccessible.SpinBox navigation.onNavigationEvent: function(event) { + if (!textInputField.activeFocus) { + return + } + switch (event.type) { case NavigationEvent.Up: root.increment() + selectAll() event.accepted = true break case NavigationEvent.Down: root.decrement() + selectAll() event.accepted = true break } @@ -191,8 +198,8 @@ Item { canIncrease: root.canIncrease canDecrease: root.canDecrease - onIncreaseButtonClicked: { root.increment() } - onDecreaseButtonClicked: { root.decrement() } + onIncreaseButtonClicked: { root.increment(); textInputField.selectAll() } + onDecreaseButtonClicked: { root.decrement(); textInputField.selectAll() } } mouseArea.onWheel: function(wheel) { diff --git a/src/framework/uicomponents/qml/Muse/UiComponents/TextInputField.qml b/src/framework/uicomponents/qml/Muse/UiComponents/TextInputField.qml index c4c2d8720c415..8ce1408ebca21 100644 --- a/src/framework/uicomponents/qml/Muse/UiComponents/TextInputField.qml +++ b/src/framework/uicomponents/qml/Muse/UiComponents/TextInputField.qml @@ -117,6 +117,8 @@ FocusScope { root.ensureActiveFocus() } } + + onTriggered: root.ensureActiveFocus() } Rectangle { @@ -191,6 +193,10 @@ FocusScope { return } + if (event.key === Qt.Key_Up || event.key === Qt.Key_Down) { + return; + } + if (textInputModel.isShortcutAllowedOverride(event.key, event.modifiers)) { event.accepted = true } else {