From 88f8d4304fcc035527a1949f811fa993ac799668 Mon Sep 17 00:00:00 2001 From: Hualet Wang Date: Sat, 18 Jul 2026 15:46:34 +0800 Subject: [PATCH] feat(dock): add accessibility annotations to dock QML Expose the taskbar to screen readers (e.g. Orca over AT-SPI) via Qt Quick Accessible attached properties: - app items: button role, app name, active/attention description - task manager and dock left/center/right areas: grouping role + name - container list views: list role - show desktop / multitask view / tray action buttons: role + name - embedded tray surfaces: plugin display name when available --- panels/dock/OverflowContainer.qml | 1 + panels/dock/multitaskview/package/multitaskview.qml | 3 +++ panels/dock/package/main.qml | 6 ++++++ panels/dock/showdesktop/package/showdesktop.qml | 5 ++++- panels/dock/taskmanager/package/AppItem.qml | 4 ++++ panels/dock/taskmanager/package/TaskManager.qml | 3 +++ panels/dock/tray/ShellSurfaceItemProxy.qml | 2 ++ panels/dock/tray/package/ActionShowStashDelegate.qml | 3 +++ panels/dock/tray/package/ActionToggleCollapseDelegate.qml | 5 ++++- .../dock/tray/package/ActionToggleQuickSettingsDelegate.qml | 5 ++++- 10 files changed, 34 insertions(+), 3 deletions(-) diff --git a/panels/dock/OverflowContainer.qml b/panels/dock/OverflowContainer.qml index 0c04b2889..aa3066df6 100644 --- a/panels/dock/OverflowContainer.qml +++ b/panels/dock/OverflowContainer.qml @@ -26,6 +26,7 @@ Item { layoutDirection: Qt.LeftToRight verticalLayoutDirection: ListView.TopToBottom interactive: false + Accessible.role: Accessible.List } function calculateImplicitWidth(prev, current) { diff --git a/panels/dock/multitaskview/package/multitaskview.qml b/panels/dock/multitaskview/package/multitaskview.qml index 71bf95165..dd9bae070 100644 --- a/panels/dock/multitaskview/package/multitaskview.qml +++ b/panels/dock/multitaskview/package/multitaskview.qml @@ -13,6 +13,9 @@ AppletDockItem { id: toggleworkspace dockOrder: 15 + Accessible.role: Accessible.Button + Accessible.name: toolTip.text + PanelToolTip { id: toolTip text: qsTr("Multitasking View") diff --git a/panels/dock/package/main.qml b/panels/dock/package/main.qml index 91b4ea2f6..808a962d6 100644 --- a/panels/dock/package/main.qml +++ b/panels/dock/package/main.qml @@ -520,6 +520,8 @@ Window { visible: dockLeftPartModel.count > 0 implicitWidth: leftLoader.implicitWidth implicitHeight: leftLoader.implicitHeight + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Dock Left Area") OverflowContainer { id: leftLoader anchors.fill: parent @@ -536,6 +538,8 @@ Window { id: dockCenterPart implicitWidth: centerLoader.implicitWidth implicitHeight: centerLoader.implicitHeight + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Dock Center Area") Layout.maximumWidth: useColumnLayout ? -1 : dockRawCenterSpace Layout.maximumHeight: useColumnLayout ? dockRawCenterSpace : -1 onXChanged: dockCenterPartPosChanged() @@ -584,6 +588,8 @@ Window { id: dockRightPart implicitWidth: rightLoader.implicitWidth implicitHeight: rightLoader.implicitHeight + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Dock Right Area") anchors.right: parent.right anchors.bottom: parent.bottom OverflowContainer { diff --git a/panels/dock/showdesktop/package/showdesktop.qml b/panels/dock/showdesktop/package/showdesktop.qml index cd3b18932..7a44d4237 100644 --- a/panels/dock/showdesktop/package/showdesktop.qml +++ b/panels/dock/showdesktop/package/showdesktop.qml @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2023-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -30,6 +30,9 @@ AppletItem { anchors.fill: parent radius: 0 + Accessible.role: Accessible.Button + Accessible.name: toolTip.text + Rectangle { property D.Palette lineColor: DockPalette.showDesktopLineColor // Use device pixel ratio to ensure the line is always 1 physical pixel regardless of system scaling diff --git a/panels/dock/taskmanager/package/AppItem.qml b/panels/dock/taskmanager/package/AppItem.qml index cfdbf179e..f4233a7fb 100644 --- a/panels/dock/taskmanager/package/AppItem.qml +++ b/panels/dock/taskmanager/package/AppItem.qml @@ -36,6 +36,10 @@ Item { Drag.hotSpot.y: icon.height / 2 Drag.dragType: Drag.Automatic Drag.mimeData: { "text/x-dde-dock-dnd-appid": itemId, "text/x-dde-dock-dnd-source": "taskbar", "text/x-dde-dock-dnd-winid": windows.length > 0 ? windows[0] : ""} + + Accessible.role: Accessible.Button + Accessible.name: root.name + Accessible.description: root.attention ? qsTr("Demands attention") : (root.active ? qsTr("Active") : "") property bool useColumnLayout: Panel.rootObject.useColumnLayout property real iconSize: Panel.rootObject.dockItemMaxSize * 9 / 14 diff --git a/panels/dock/taskmanager/package/TaskManager.qml b/panels/dock/taskmanager/package/TaskManager.qml index 130bbc1be..bb8194b63 100644 --- a/panels/dock/taskmanager/package/TaskManager.qml +++ b/panels/dock/taskmanager/package/TaskManager.qml @@ -15,6 +15,9 @@ ContainmentItem { property bool useColumnLayout: Panel.rootObject.useColumnLayout property int dockOrder: 16 + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Task Manager") + function calcRemainingSpace(baseSize) { const otherCount = Panel.rootObject.dockCenterPartCount - 1; const otherOccupied = otherCount > 0 ? otherCount * baseSize * multitaskViewIconRatio : 0; diff --git a/panels/dock/tray/ShellSurfaceItemProxy.qml b/panels/dock/tray/ShellSurfaceItemProxy.qml index fe0af9f15..4cd8201e0 100644 --- a/panels/dock/tray/ShellSurfaceItemProxy.qml +++ b/panels/dock/tray/ShellSurfaceItemProxy.qml @@ -22,6 +22,8 @@ Item { implicitWidth: shellSurface ? shellSurface.width : 16 implicitHeight: shellSurface ? shellSurface.height : 16 + Accessible.name: shellSurface ? (shellSurface.displayName || "") : "" + function takeFocus() { impl.takeFocus() } diff --git a/panels/dock/tray/package/ActionShowStashDelegate.qml b/panels/dock/tray/package/ActionShowStashDelegate.qml index d70a90c0f..fb7639943 100644 --- a/panels/dock/tray/package/ActionShowStashDelegate.qml +++ b/panels/dock/tray/package/ActionShowStashDelegate.qml @@ -25,6 +25,9 @@ AppletItemButton { padding: itemPadding + Accessible.role: Accessible.Button + Accessible.name: toolTip.text + D.ColorSelector.hovered: (isDropHover && DDT.TraySortOrderModel.actionsAlwaysVisible) || hovered || stashedPopup.popupVisible property var itemGlobalPoint: { diff --git a/panels/dock/tray/package/ActionToggleCollapseDelegate.qml b/panels/dock/tray/package/ActionToggleCollapseDelegate.qml index 7e3a1a783..bf1547aa5 100644 --- a/panels/dock/tray/package/ActionToggleCollapseDelegate.qml +++ b/panels/dock/tray/package/ActionToggleCollapseDelegate.qml @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2024-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -17,6 +17,9 @@ AppletItemButton { hoverEnabled: inputEventsEnabled autoClosePopup: true + Accessible.role: Accessible.Button + Accessible.name: toolTip.text + z: 5 icon.name: isHorizontal ? "expand-left" : "expand-up" diff --git a/panels/dock/tray/package/ActionToggleQuickSettingsDelegate.qml b/panels/dock/tray/package/ActionToggleQuickSettingsDelegate.qml index f68f993fd..56f0b180f 100644 --- a/panels/dock/tray/package/ActionToggleQuickSettingsDelegate.qml +++ b/panels/dock/tray/package/ActionToggleQuickSettingsDelegate.qml @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2024-2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -13,4 +13,7 @@ QuickPanel { useColumnLayout: !isHorizontal trayItemPluginId: Applet.rootObject.quickpanelTrayItemPluginId trayItemMargins: itemPadding + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Quick actions") }