From 277307ec4d29fd1d17ecc8d81edad6eedb95e845 Mon Sep 17 00:00:00 2001 From: zhaofangxun Date: Wed, 26 Aug 2026 11:17:51 +0800 Subject: [PATCH] fix(a11y): add AT-SPI accessible ids/roles for dde-shell panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add setObjectName() to C++ widgets and Accessible.id/Accessible.role to QML elements across dock, notification, tray, frame, shell and example panels. Also add the expected_names.yaml regression baseline under tests/at/spi/. Log: 补全 dde-shell 各面板 AT-SPI 无障碍标识与角色 Influence: 提升无障碍工具与自动化测试对 Dock/通知中心控件的识别率 --- example/applet-example-data/package/main.qml | 13 +- example/applet-example/package/main.qml | 4 +- example/bridge-example/package/appletitem.qml | 5 +- example/drag-example/package/main.qml | 3 +- example/layershell-example/main.qml | 14 +- example/lockscreen-example/package/main.qml | 5 +- example/osd-example/package/main.qml | 4 +- frame/qml/PanelMenuWindow.qml | 4 +- frame/qml/PanelToolTipWindow.qml | 4 +- panels/dock/AppletItemButton.qml | 2 + panels/dock/OverflowContainer.qml | 1 + .../appruntimeitem/package/appruntimeitem.qml | 6 +- .../multitaskview/package/multitaskview.qml | 2 + panels/dock/package/main.qml | 10 + .../dock/showdesktop/package/showdesktop.qml | 2 + panels/dock/taskmanager/package/AppItem.qml | 14 + .../taskmanager/package/AppItemBackground.qml | 2 + .../dock/taskmanager/package/TaskManager.qml | 4 + panels/dock/taskmanager/x11preview.cpp | 2 + panels/dock/tray/SurfacePopup.qml | 12 + panels/dock/tray/SurfaceSubPopup.qml | 6 + panels/dock/tray/TrayItemSurfacePopup.qml | 14 + .../ActionLegacyTrayPluginDelegate.qml | 4 + .../tray/package/ActionShowStashDelegate.qml | 2 + .../package/ActionToggleCollapseDelegate.qml | 2 + panels/dock/tray/package/DummyDelegate.qml | 3 +- panels/dock/tray/package/StashContainer.qml | 2 + .../package/StashedItemDelegateChooser.qml | 26 +- .../tray/package/TrayItemDelegateChooser.qml | 27 +- panels/dock/tray/package/tray.qml | 6 + panels/dock/tray/quickpanel/DragItem.qml | 2 + .../dock/tray/quickpanel/PanelPluginPage.qml | 2 + panels/dock/tray/quickpanel/PanelTrayItem.qml | 6 + panels/dock/tray/quickpanel/PluginItem.qml | 4 + panels/dock/tray/quickpanel/QuickPanel.qml | 12 +- .../dock/tray/quickpanel/QuickPanelPage.qml | 6 +- panels/dock/tray/quickpanel/SubPluginPage.qml | 2 + panels/notification/bubble/package/Bubble.qml | 2 + panels/notification/bubble/package/main.qml | 3 + panels/notification/center/GroupNotify.qml | 10 + panels/notification/center/NormalNotify.qml | 6 + panels/notification/center/NotifyCenter.qml | 8 +- panels/notification/center/NotifyHeader.qml | 11 + .../center/NotifyHeaderTitleText.qml | 2 + panels/notification/center/NotifySetting.qml | 6 +- .../notification/center/NotifySettingMenu.qml | 3 +- panels/notification/center/NotifyStaging.qml | 3 + panels/notification/center/NotifyView.qml | 11 +- .../center/NotifyViewDelegate.qml | 8 + panels/notification/center/OverlapNotify.qml | 10 + panels/notification/center/package/main.qml | 4 + .../osd/displaymode/package/main.qml | 4 +- .../osd/kblayout/package/main.qml | 4 +- .../osd/windoweffect/package/main.qml | 2 + panels/notification/plugin/NotifyAction.qml | 5 + .../notification/plugin/NotifyActionMenu.qml | 2 + .../notification/plugin/NotifyItemContent.qml | 11 +- shell/SceneWindow.qml | 3 +- tests/at/spi/expected_names.yaml | 1231 +++++++++++++++++ 59 files changed, 1561 insertions(+), 27 deletions(-) create mode 100644 tests/at/spi/expected_names.yaml diff --git a/example/applet-example-data/package/main.qml b/example/applet-example-data/package/main.qml index 149887c7e..d3266cb70 100644 --- a/example/applet-example-data/package/main.qml +++ b/example/applet-example-data/package/main.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: LGPL-3.0-or-later @@ -43,6 +43,8 @@ AppletItem { } PanelPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "Popup" id: popup x: 100 y: -200 @@ -50,12 +52,15 @@ AppletItem { height: 200 Button { + Accessible.id: "PopupContent" text: "popup content" anchors.centerIn: parent } } PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "TooltipContent" id: toolTip x: 100 y: -100 @@ -66,20 +71,26 @@ AppletItem { } LP.Menu { + Accessible.id: "PlatformMenu" id: platformMenu LP.MenuItem { + Accessible.id: "Item1" text: "item 1" } LP.MenuItem { + Accessible.id: "NonItem" text: "non Item " + String(Applet.id).slice(0, 5) } LP.MenuItem { + Accessible.id: "Panel" text: "Panel " + String(Panel.id).slice(0, 5) } LP.MenuItem { + Accessible.id: "DSApplet" text: "DS.applet " + String(DS.applet("org.deepin.ds.example").id).slice(0, 5) } LP.MenuItem { + Accessible.id: "Popup" text: "Popup" onTriggered: { popup.open() diff --git a/example/applet-example/package/main.qml b/example/applet-example/package/main.qml index 529ef716e..5f01842bd 100644 --- a/example/applet-example/package/main.qml +++ b/example/applet-example/package/main.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: LGPL-3.0-or-later @@ -16,6 +16,8 @@ AppletItem { anchors.fill: parent color: "green" TextEx { + Accessible.role: Accessible.StaticText + Accessible.id: "HelloWorldn" anchors.centerIn: parent text: "Hello world \n" + String(Applet.id).slice(1, 16) } diff --git a/example/bridge-example/package/appletitem.qml b/example/bridge-example/package/appletitem.qml index 26f524a0a..7f0643c7e 100644 --- a/example/bridge-example/package/appletitem.qml +++ b/example/bridge-example/package/appletitem.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 @@ -32,6 +32,8 @@ AppletItem { } PanelPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "LauncherDebuggerPanel" id: launcherDebuggerPanel width: 1000 @@ -58,6 +60,7 @@ AppletItem { anchors.bottom: parent.bottom TreeView { + Accessible.id: "TreeView" id: treeView model: DListToTableProxyModel { sourceModel: testmodel // Applet.applicationsModel diff --git a/example/drag-example/package/main.qml b/example/drag-example/package/main.qml index 841fc6b4a..7b23abe43 100644 --- a/example/drag-example/package/main.qml +++ b/example/drag-example/package/main.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: LGPL-3.0-or-later @@ -14,6 +14,7 @@ AppletItem { implicitWidth: gridview.width implicitHeight: gridview.height GridView { + Accessible.id: "Gridview" id: gridview width: 320 height: 100 diff --git a/example/layershell-example/main.qml b/example/layershell-example/main.qml index 401b686c4..f74701c70 100644 --- a/example/layershell-example/main.qml +++ b/example/layershell-example/main.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 @@ -28,6 +28,7 @@ Window { Column { id: comboBox ComboBox { + Accessible.id: "LayerCombox" id: layerCombox width: 100 textRole: "text" @@ -45,6 +46,7 @@ Window { } ComboBox { + Accessible.id: "KeyboardInteractivityCombox" id: keyboardInteractivityCombox width: 200 textRole: "text" @@ -61,6 +63,7 @@ Window { } ComboBox { + Accessible.id: "ScreenComboBox" id: screenComboBox width: 200 textRole: "name" @@ -80,6 +83,7 @@ Window { Column { spacing: 20 Button { + Accessible.id: "Top" id: buttonTop text: "Top" width: 40 @@ -97,6 +101,7 @@ Window { Row { spacing: 20 Button { + Accessible.id: "Left" id: buttonLeft text: "Left" width: 40 @@ -110,6 +115,7 @@ Window { } } Button { + Accessible.id: "Right" id: buttonRight text: "Right" width: 40 @@ -124,6 +130,7 @@ Window { } } Button { + Accessible.id: "Buttom" id: buttonBottom text: "Buttom" width: 40 @@ -150,6 +157,7 @@ Window { text: "LeftMargin: " } SpinBox { + Accessible.id: "Left" id: left stepSize: 10 editable: true @@ -159,6 +167,7 @@ Window { text: "TopMargin: " } SpinBox { + Accessible.id: "Top" id: top stepSize: 10 editable: true @@ -168,6 +177,7 @@ Window { text: "RightMargin: " } SpinBox { + Accessible.id: "Right" id: right stepSize: 10 editable: true @@ -177,6 +187,7 @@ Window { text: "BottomMargin: " } SpinBox { + Accessible.id: "Bottom" id: bottom stepSize: 10 editable: true @@ -187,6 +198,7 @@ Window { } SpinBox { + Accessible.id: "Excludezone" id: excludezone editable: true from: -1 diff --git a/example/lockscreen-example/package/main.qml b/example/lockscreen-example/package/main.qml index 7c4b76511..487acf51c 100644 --- a/example/lockscreen-example/package/main.qml +++ b/example/lockscreen-example/package/main.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: LGPL-3.0-or-later @@ -23,6 +23,7 @@ AppletItem { Column { Button { + Accessible.id: "Lock" text: "Lock" onClicked: { let lockscreen = lockscreenApplet() @@ -32,6 +33,7 @@ AppletItem { } } Button { + Accessible.id: "Shutdown" text: "Shutdown" onClicked: { let lockscreen = lockscreenApplet() @@ -41,6 +43,7 @@ AppletItem { } } Button { + Accessible.id: "Switchuser" text: "SwitchUser" onClicked: { let lockscreen = lockscreenApplet() diff --git a/example/osd-example/package/main.qml b/example/osd-example/package/main.qml index d1e795e77..d4095f1f6 100644 --- a/example/osd-example/package/main.qml +++ b/example/osd-example/package/main.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: LGPL-3.0-or-later @@ -13,6 +13,7 @@ AppletItem { implicitHeight: 200 GridView { + Accessible.id: "Gridview" anchors.fill: parent cellHeight: 40 property var audioTypes: ["AudioUp", "AudioDown", "AudioMute", "AudioUpAsh", "AudioDownAsh", "AudioMuteAsh"] @@ -25,6 +26,7 @@ AppletItem { model: types delegate: Button { + Accessible.id: "OsdButton" text: model.modelData onClicked: Applet.sendOsd(modelData) } diff --git a/frame/qml/PanelMenuWindow.qml b/frame/qml/PanelMenuWindow.qml index fecdb0723..d414fb48d 100644 --- a/frame/qml/PanelMenuWindow.qml +++ b/frame/qml/PanelMenuWindow.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: LGPL-3.0-or-later @@ -6,6 +6,8 @@ import QtQuick 2.15 import QtQuick.Window 2.15 PanelPopupWindow { + Accessible.role: Accessible.Window + Accessible.id: "PanelPopupWindow" id: root flags: Qt.Popup | Qt.WindowStaysOnTopHint diff --git a/frame/qml/PanelToolTipWindow.qml b/frame/qml/PanelToolTipWindow.qml index 32a55c849..31236464a 100644 --- a/frame/qml/PanelToolTipWindow.qml +++ b/frame/qml/PanelToolTipWindow.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: LGPL-3.0-or-later @@ -8,6 +8,8 @@ import org.deepin.ds 1.0 import org.deepin.dtk 1.0 as D PanelPopupWindow { + Accessible.role: Accessible.Window + Accessible.id: "PanelPopupWindow" id: root flags: Qt.ToolTip | Qt.WindowStaysOnTopHint diff --git a/panels/dock/AppletItemButton.qml b/panels/dock/AppletItemButton.qml index 0b94c3777..47be032d3 100644 --- a/panels/dock/AppletItemButton.qml +++ b/panels/dock/AppletItemButton.qml @@ -35,6 +35,8 @@ IconButton { } background: AppletItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "AppletItemBackground" radius: control.radius isActive: control.isActive } diff --git a/panels/dock/OverflowContainer.qml b/panels/dock/OverflowContainer.qml index aa3066df6..eb3604fcd 100644 --- a/panels/dock/OverflowContainer.qml +++ b/panels/dock/OverflowContainer.qml @@ -20,6 +20,7 @@ Item { property alias removeDisplaced: listView.removeDisplaced property alias moveDisplaced: listView.moveDisplaced ListView { + Accessible.id: "ListView" id: listView anchors.fill: parent orientation: useColumnLayout ? ListView.Vertical : ListView.Horizontal diff --git a/panels/dock/appruntimeitem/package/appruntimeitem.qml b/panels/dock/appruntimeitem/package/appruntimeitem.qml index 0f5e47a87..68fdcab4e 100644 --- a/panels/dock/appruntimeitem/package/appruntimeitem.qml +++ b/panels/dock/appruntimeitem/package/appruntimeitem.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 import QtQuick 2.15 @@ -20,12 +20,16 @@ AppletItem { property bool isMenuVisible: false PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "Appruntime" id: toolTip text: qsTr("appruntime") toolTipX: DockPanelPositioner.x toolTipY: DockPanelPositioner.y } AppletItemButton { + Accessible.role: Accessible.Button + Accessible.id: "Button" id: button anchors.centerIn: parent icon.name: "qrc:/ddeshell/package/icons/appruntime.svg" diff --git a/panels/dock/multitaskview/package/multitaskview.qml b/panels/dock/multitaskview/package/multitaskview.qml index dd9bae070..6b369943d 100644 --- a/panels/dock/multitaskview/package/multitaskview.qml +++ b/panels/dock/multitaskview/package/multitaskview.qml @@ -17,6 +17,8 @@ AppletDockItem { Accessible.name: toolTip.text PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "MultitaskingView" id: toolTip text: qsTr("Multitasking View") toolTipX: DockPanelPositioner.x diff --git a/panels/dock/package/main.qml b/panels/dock/package/main.qml index a9a01f077..b78d8fe8a 100644 --- a/panels/dock/package/main.qml +++ b/panels/dock/package/main.qml @@ -281,6 +281,7 @@ Window { checked: Applet[prop] === value } component MutuallyExclusiveMenu: LP.Menu { + Accessible.id: "Menu" id: menu LP.MenuItemGroup { id: group @@ -299,6 +300,7 @@ Window { id: dockMenuLoader active: false sourceComponent: LP.Menu { + Accessible.id: "DockMenu" id: dockMenu MutuallyExclusiveMenu { visible: Panel.debugMode @@ -369,6 +371,7 @@ Window { } } LP.MenuItem { + Accessible.id: "LockTheDock" text: qsTr("Lock the Dock") checked: Panel.locked onTriggered: { @@ -376,6 +379,7 @@ Window { } } LP.MenuItem { + Accessible.id: "DockSettings" text: qsTr("Dock Settings") onTriggered: { Panel.openDockSettings() @@ -541,6 +545,8 @@ Window { Accessible.role: Accessible.Grouping Accessible.name: qsTr("Dock Left Area") OverflowContainer { + Accessible.role: Accessible.Pane + Accessible.id: "LeftLoader" id: leftLoader anchors.fill: parent useColumnLayout: dock.useColumnLayout @@ -584,6 +590,8 @@ Window { } OverflowContainer { + Accessible.role: Accessible.Pane + Accessible.id: "CenterLoader" id: centerLoader anchors.fill: parent useColumnLayout: dock.useColumnLayout @@ -611,6 +619,8 @@ Window { anchors.right: parent.right anchors.bottom: parent.bottom OverflowContainer { + Accessible.role: Accessible.Pane + Accessible.id: "RightLoader" id: rightLoader anchors.fill: parent useColumnLayout: dock.useColumnLayout diff --git a/panels/dock/showdesktop/package/showdesktop.qml b/panels/dock/showdesktop/package/showdesktop.qml index 7a44d4237..a956a789c 100644 --- a/panels/dock/showdesktop/package/showdesktop.qml +++ b/panels/dock/showdesktop/package/showdesktop.qml @@ -20,6 +20,8 @@ AppletItem { implicitHeight: useColumnLayout ? showDesktopWidth : Panel.rootObject.dockSize PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "ShowDesktop" id: toolTip text: qsTr("show desktop") toolTipX: DockPanelPositioner.x diff --git a/panels/dock/taskmanager/package/AppItem.qml b/panels/dock/taskmanager/package/AppItem.qml index f4233a7fb..644d6eaae 100644 --- a/panels/dock/taskmanager/package/AppItem.qml +++ b/panels/dock/taskmanager/package/AppItem.qml @@ -71,6 +71,8 @@ Item { } AppItemPalette { + Accessible.role: Accessible.Pane + Accessible.id: "ItemPalette" id: itemPalette displayMode: root.displayMode colorTheme: root.colorTheme @@ -84,6 +86,8 @@ Item { implicitWidth: root.titleActive ? (root.iconSize + hoverBackground.horizontalSpacing + titleLoader.width) : iconContainer.width visible: !root.Drag.active // When in dragging, hide app item background: AppItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "HoverBackground" id: hoverBackground readonly property int verticalSpacing: Math.round(root.iconSize / 8) + 1 @@ -233,6 +237,8 @@ Item { } WindowIndicator { + Accessible.role: Accessible.Indicator + Accessible.id: "WindowIndicator" id: windowIndicator dotWidth: root.useColumnLayout ? Math.max(iconSize / 16, 2) : Math.max(iconSize / 3, 2) dotHeight: root.useColumnLayout ? Math.max(iconSize / 3, 2) : Math.max(iconSize / 16, 2) @@ -290,6 +296,8 @@ Item { } AppItemTitle { + Accessible.role: Accessible.StaticText + Accessible.id: "TitleLoader" id: titleLoader anchors.left: iconContainer.right anchors.leftMargin: Math.round(root.iconSize / 8) @@ -389,11 +397,13 @@ Item { active: false property bool trashEmpty: true sourceComponent: LP.Menu { + Accessible.id: "ContextMenu" id: contextMenu Instantiator { id: menuItemInstantiator model: JSON.parse(menus) delegate: LP.MenuItem { + Accessible.id: "ContextMenuItem" text: modelData.name enabled: (root.itemId === "dde-trash" && modelData.id === "clean-trash") ? !contextMenuLoader.trashEmpty @@ -544,12 +554,16 @@ Item { } PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "ToolTip" id: toolTip toolTipX: DockPanelPositioner.x toolTipY: DockPanelPositioner.y } PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "MoveToTrash" id: dragToolTip text: qsTr("Move to Trash") toolTipX: DockPanelPositioner.x diff --git a/panels/dock/taskmanager/package/AppItemBackground.qml b/panels/dock/taskmanager/package/AppItemBackground.qml index dbfe39503..3ecdbbeec 100644 --- a/panels/dock/taskmanager/package/AppItemBackground.qml +++ b/panels/dock/taskmanager/package/AppItemBackground.qml @@ -9,6 +9,8 @@ import org.deepin.ds.dock 1.0 import org.deepin.dtk AppletItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "Control" id: control property int windowCount: 0 property int displayMode: Dock.Efficient diff --git a/panels/dock/taskmanager/package/TaskManager.qml b/panels/dock/taskmanager/package/TaskManager.qml index 1177a52d9..1f7752942 100644 --- a/panels/dock/taskmanager/package/TaskManager.qml +++ b/panels/dock/taskmanager/package/TaskManager.qml @@ -100,6 +100,8 @@ ContainmentItem { } OverflowContainer { + Accessible.role: Accessible.Pane + Accessible.id: "AppContainer" id: appContainer anchors.fill: parent anchors.leftMargin: useColumnLayout ? 0 : taskmanager.startPadding @@ -205,6 +207,8 @@ ContainmentItem { } AppItem { + Accessible.role: Accessible.ListItem + Accessible.id: "AppItem" id: appItem anchors.fill: parent // This is mandatory for draggable item center in drop area diff --git a/panels/dock/taskmanager/x11preview.cpp b/panels/dock/taskmanager/x11preview.cpp index 6513ed377..f34001a24 100644 --- a/panels/dock/taskmanager/x11preview.cpp +++ b/panels/dock/taskmanager/x11preview.cpp @@ -219,6 +219,7 @@ class AppItemWindowDeletegate : public QAbstractItemDelegate AppItemWindowDeletegate(QListView *listview, X11WindowPreviewContainer *parent = nullptr) : QAbstractItemDelegate(parent) { m_listView = listview; + m_listView->setObjectName("ListView"); m_parent = parent; } @@ -634,6 +635,7 @@ void X11WindowPreviewContainer::initUI() m_previewIcon->setScaledContents(true); m_closeAllButton = new DIconButton(this); + m_closeAllButton->setObjectName("CloseAllButton"); m_closeAllButton->setIconSize(QSize(16, 16)); m_closeAllButton->setIcon(DDciIcon::fromTheme("close")); diff --git a/panels/dock/tray/SurfacePopup.qml b/panels/dock/tray/SurfacePopup.qml index c3a0027b2..867ea44e7 100644 --- a/panels/dock/tray/SurfacePopup.qml +++ b/panels/dock/tray/SurfacePopup.qml @@ -18,6 +18,8 @@ Item { signal popupCreated(var surfaceId) PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "ToolTip" id: toolTip onToolTipVisibleChanged: function (visible) { if (visible && menuWindow.visible) @@ -26,6 +28,8 @@ Item { property alias shellSurface: surfaceLayer.shellSurface ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "SurfaceLayer" id: surfaceLayer anchors.centerIn: parent autoClose: true @@ -36,6 +40,8 @@ Item { } PanelMenuWindow { + Accessible.role: Accessible.Window + Accessible.id: "MenuWindow" id: menuWindow onVisibleChanged: function (arg) { if (arg && toolTip.toolTipVisible) @@ -48,6 +54,8 @@ Item { } } PanelMenu { + Accessible.role: Accessible.PopupMenu + Accessible.id: "Menu" id: menu width: menuSurfaceLayer.width height: menuSurfaceLayer.height @@ -55,6 +63,8 @@ Item { property alias shellSurface: menuSurfaceLayer.shellSurface ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "MenuSurfaceLayer" id: menuSurfaceLayer anchors.centerIn: parent autoClose: true @@ -76,6 +86,8 @@ Item { id: subMenuLoader active: false sourceComponent: SurfaceSubPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "SurfaceSubPopup" objectName: "stashed's subPopup" transientParent: menuWindow surfaceAcceptor: function (surfaceId) { diff --git a/panels/dock/tray/SurfaceSubPopup.qml b/panels/dock/tray/SurfaceSubPopup.qml index 6f5b5bb7d..3e7beb5b5 100644 --- a/panels/dock/tray/SurfaceSubPopup.qml +++ b/panels/dock/tray/SurfaceSubPopup.qml @@ -20,6 +20,8 @@ Item { compositor: DockCompositor.compositor sizeFollowsWindow: false window: PanelMenuWindow { + Accessible.role: Accessible.Window + Accessible.id: "MenuWindow" id: menuWindow objectName: "subMenu" mainMenuWindow: Panel.menuWindow @@ -47,6 +49,8 @@ Item { } PanelMenu { + Accessible.role: Accessible.PopupMenu + Accessible.id: "Popup" id: popup width: popupSurfaceLayer.width height: popupSurfaceLayer.height @@ -54,6 +58,8 @@ Item { property alias shellSurface: popupSurfaceLayer.shellSurface ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "PopupSurfaceLayer" id: popupSurfaceLayer anchors.centerIn: parent autoClose: true diff --git a/panels/dock/tray/TrayItemSurfacePopup.qml b/panels/dock/tray/TrayItemSurfacePopup.qml index c3cfbcdc2..da02e5235 100644 --- a/panels/dock/tray/TrayItemSurfacePopup.qml +++ b/panels/dock/tray/TrayItemSurfacePopup.qml @@ -27,6 +27,8 @@ Item { } PanelPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "Popup" id: popup property alias shellSurface: popupContent.shellSurface width: popupContent.width @@ -37,6 +39,8 @@ Item { Item { anchors.fill: parent ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "PopupContent" id: popupContent anchors.centerIn: parent autoClose: true @@ -48,6 +52,8 @@ Item { } PanelMenu { + Accessible.role: Accessible.PopupMenu + Accessible.id: "PopupMenu" id: popupMenu property alias shellSurface: popupMenuContent.shellSurface width: popupMenuContent.width @@ -67,6 +73,8 @@ Item { Item { anchors.fill: parent ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "PopupMenuContent" id: popupMenuContent anchors.centerIn: parent autoClose: true @@ -89,6 +97,8 @@ Item { id: subMenuLoader active: false sourceComponent: SurfaceSubPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "SurfaceSubPopup" objectName: "tray's subPopup" transientParent: popupMenu.menuWindow surfaceAcceptor: function (surfaceId) { @@ -113,12 +123,16 @@ Item { } PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "ToolTip" id: toolTip property alias shellSurface: toolTipContent.shellSurface toolTipX: DockPanelPositioner.x toolTipY: DockPanelPositioner.y ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "ToolTipContent" id: toolTipContent anchors.centerIn: parent autoClose: true diff --git a/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml b/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml index 1b0ef555a..62e7e6542 100644 --- a/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml +++ b/panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml @@ -15,6 +15,8 @@ import org.deepin.ds.dock 1.0 import org.deepin.ds.dock.tray 1.0 as DDT AppletItemButton { + Accessible.role: Accessible.Button + Accessible.id: "AppletItemButton" id: root property alias inputEventsEnabled: surfaceItem.inputEventsEnabled @@ -83,6 +85,8 @@ AppletItemButton { } ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "SurfaceItem" id: surfaceItem anchors.fill: parent shellSurface: pluginItem.plugin diff --git a/panels/dock/tray/package/ActionShowStashDelegate.qml b/panels/dock/tray/package/ActionShowStashDelegate.qml index 6737544f1..f49d3f4f6 100644 --- a/panels/dock/tray/package/ActionShowStashDelegate.qml +++ b/panels/dock/tray/package/ActionShowStashDelegate.qml @@ -115,6 +115,8 @@ AppletItemButton { } PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "ApplicationTray" id: toolTip text: qsTr("Application tray") toolTipX: DockPanelPositioner.x diff --git a/panels/dock/tray/package/ActionToggleCollapseDelegate.qml b/panels/dock/tray/package/ActionToggleCollapseDelegate.qml index bf1547aa5..40fef456e 100644 --- a/panels/dock/tray/package/ActionToggleCollapseDelegate.qml +++ b/panels/dock/tray/package/ActionToggleCollapseDelegate.qml @@ -53,6 +53,8 @@ AppletItemButton { ] PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "CollapseTray" id: toolTip text: qsTr("Collapse tray") toolTipX: DockPanelPositioner.x diff --git a/panels/dock/tray/package/DummyDelegate.qml b/panels/dock/tray/package/DummyDelegate.qml index 3234faff1..b2fd7993c 100644 --- a/panels/dock/tray/package/DummyDelegate.qml +++ b/panels/dock/tray/package/DummyDelegate.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 @@ -8,6 +8,7 @@ import org.deepin.ds.dock 1.0 import org.deepin.ds.dock.tray 1.0 as DDT Button { + Accessible.id: "Button" icon.name: model.surfaceId icon.width: 16 icon.height: 16 diff --git a/panels/dock/tray/package/StashContainer.qml b/panels/dock/tray/package/StashContainer.qml index 171d2fba2..ed64b467f 100644 --- a/panels/dock/tray/package/StashContainer.qml +++ b/panels/dock/tray/package/StashContainer.qml @@ -71,6 +71,8 @@ Item { // tooltip and menu DDT.SurfacePopup { + Accessible.role: Accessible.Dialog + Accessible.id: "StashSurfacePopup" id: stashSurfacePopup objectName: "stash" surfaceAcceptor: isStashPopup diff --git a/panels/dock/tray/package/StashedItemDelegateChooser.qml b/panels/dock/tray/package/StashedItemDelegateChooser.qml index 06e3a3e86..bbed8aa2c 100644 --- a/panels/dock/tray/package/StashedItemDelegateChooser.qml +++ b/panels/dock/tray/package/StashedItemDelegateChooser.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 @@ -24,20 +24,31 @@ LQM.DelegateChooser { LQM.DelegateChoice { roleValue: "dummy" StashedItemPositioner { - contentItem: DummyDelegate {} + Accessible.role: Accessible.Pane + Accessible.id: "StashedItemPositioner" + contentItem: DummyDelegate { + Accessible.role: Accessible.Button + Accessible.id: "DummyDelegate" + } } } LQM.DelegateChoice { roleValue: "legacy-tray-plugin" StashedItemPositioner { + Accessible.role: Accessible.Pane + Accessible.id: "StashItemPositioner" id: stashItemPositioner contentItem: ActionLegacyTrayPluginDelegate { + Accessible.role: Accessible.Button + Accessible.id: "TrayDelegate" id: trayDelegate objectName: "stash" itemVisible: stashItemPositioner.itemVisible radius: 8 background: AppletItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "AppletItemBackground" radius: trayDelegate.radius isActive: trayDelegate.isActive backgroundColor: Palette { @@ -103,13 +114,22 @@ LQM.DelegateChooser { LQM.DelegateChoice { roleValue: "action-show-stash" StashedItemPositioner { - contentItem: ActionShowStashDelegate {} + Accessible.role: Accessible.Pane + Accessible.id: "StashedItemPositioner" + contentItem: ActionShowStashDelegate { + Accessible.role: Accessible.Button + Accessible.id: "ActionShowStashDelegate" + } } } LQM.DelegateChoice { roleValue: "action-toggle-collapse" StashedItemPositioner { + Accessible.role: Accessible.Pane + Accessible.id: "StashedItemPositioner" contentItem: ActionToggleCollapseDelegate { + Accessible.role: Accessible.Button + Accessible.id: "ActionToggleCollapseDelegate" isHorizontal: root.isHorizontal } } diff --git a/panels/dock/tray/package/TrayItemDelegateChooser.qml b/panels/dock/tray/package/TrayItemDelegateChooser.qml index ce0212295..3237e6dc3 100644 --- a/panels/dock/tray/package/TrayItemDelegateChooser.qml +++ b/panels/dock/tray/package/TrayItemDelegateChooser.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 @@ -22,8 +22,12 @@ LQM.DelegateChooser { LQM.DelegateChoice { roleValue: "dummy" TrayItemPositioner { + Accessible.role: Accessible.Pane + Accessible.id: "TrayItemPositioner" visualSize: dummyDelegate.visualSize contentItem: DummyDelegate { + Accessible.role: Accessible.Button + Accessible.id: "DummyDelegate" id: dummyDelegate } } @@ -31,9 +35,13 @@ LQM.DelegateChooser { LQM.DelegateChoice { roleValue: "legacy-tray-plugin" TrayItemPositioner { + Accessible.role: Accessible.Pane + Accessible.id: "TraySurfacePositioner" id: traySurfacePositioner visualSize: traySurfaceDelegate.visualSize contentItem: ActionLegacyTrayPluginDelegate { + Accessible.role: Accessible.Button + Accessible.id: "TraySurfaceDelegate" id: traySurfaceDelegate objectName: "tray" inputEventsEnabled: !disableInputEvents && (model.sectionType !== "collapsable" || !DDT.TraySortOrderModel.isCollapsing) @@ -43,6 +51,8 @@ LQM.DelegateChooser { // trayItem's popup DDT.TrayItemSurfacePopup { + Accessible.role: Accessible.Dialog + Accessible.id: "SurfacePopup" id: surfacePopup surfaceAcceptor: function (surfaceId) { if (root.surfaceAcceptor && !root.surfaceAcceptor(surfaceId)) @@ -57,13 +67,22 @@ LQM.DelegateChooser { LQM.DelegateChoice { roleValue: "action-show-stash" TrayItemPositioner { - contentItem: ActionShowStashDelegate {} + Accessible.role: Accessible.Pane + Accessible.id: "TrayItemPositioner" + contentItem: ActionShowStashDelegate { + Accessible.role: Accessible.Button + Accessible.id: "ActionShowStashDelegate" + } } } LQM.DelegateChoice { roleValue: "action-toggle-collapse" TrayItemPositioner { + Accessible.role: Accessible.Pane + Accessible.id: "TrayItemPositioner" contentItem: ActionToggleCollapseDelegate { + Accessible.role: Accessible.Button + Accessible.id: "ActionToggleCollapseDelegate" isHorizontal: root.isHorizontal inputEventsEnabled: !disableInputEvents } @@ -72,8 +91,12 @@ LQM.DelegateChooser { LQM.DelegateChoice { roleValue: "action-toggle-quick-settings" TrayItemPositioner { + Accessible.role: Accessible.Pane + Accessible.id: "TrayItemPositioner" visualSize: Qt.size(quickSettingsDelegate.width, quickSettingsDelegate.height) ActionToggleQuickSettingsDelegate { + Accessible.role: Accessible.Button + Accessible.id: "QuickSettingsDelegate" id: quickSettingsDelegate isHorizontal: root.isHorizontal } diff --git a/panels/dock/tray/package/tray.qml b/panels/dock/tray/package/tray.qml index 4f126fb24..ebc12ee28 100644 --- a/panels/dock/tray/package/tray.qml +++ b/panels/dock/tray/package/tray.qml @@ -37,6 +37,8 @@ AppletItem { } PanelPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "StashedPopup" id: stashedPopup width: stashedContainer.width height: stashedContainer.height @@ -57,6 +59,8 @@ AppletItem { id: stashedContainer padding: 10 contentItem: StashContainer { + Accessible.role: Accessible.Pane + Accessible.id: "StashContainer" id: stashContainer color: "transparent" model: DDT.SortFilterProxyModel { @@ -129,6 +133,8 @@ AppletItem { TrayContainer { + Accessible.role: Accessible.Pane + Accessible.id: "TrayContainter" id: trayContainter isHorizontal: !tray.useColumnLayout model: DDT.TraySortOrderModel diff --git a/panels/dock/tray/quickpanel/DragItem.qml b/panels/dock/tray/quickpanel/DragItem.qml index 8f225df64..6f13b5119 100644 --- a/panels/dock/tray/quickpanel/DragItem.qml +++ b/panels/dock/tray/quickpanel/DragItem.qml @@ -122,6 +122,8 @@ Item { anchors.centerIn: parent anchors.verticalCenterOffset: -root.fallbackIconSize.height / 3 * 2 sourceComponent: ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "ShellSurfaceItemProxy" shellSurface: root.fallbackDragImage width: root.fallbackIconSize.width height: root.fallbackIconSize.height diff --git a/panels/dock/tray/quickpanel/PanelPluginPage.qml b/panels/dock/tray/quickpanel/PanelPluginPage.qml index 9bcabf364..630b1f88e 100644 --- a/panels/dock/tray/quickpanel/PanelPluginPage.qml +++ b/panels/dock/tray/quickpanel/PanelPluginPage.qml @@ -75,6 +75,8 @@ Item { model: root.model delegate: PluginItem { + Accessible.role: Accessible.Pane + Accessible.id: "PluginItem" id: pluginItem width: { if (model.surfaceLayoutType === 4) diff --git a/panels/dock/tray/quickpanel/PanelTrayItem.qml b/panels/dock/tray/quickpanel/PanelTrayItem.qml index 7566ac20f..95a247920 100644 --- a/panels/dock/tray/quickpanel/PanelTrayItem.qml +++ b/panels/dock/tray/quickpanel/PanelTrayItem.qml @@ -32,6 +32,8 @@ Control { } PanelToolTip { + Accessible.role: Accessible.ToolTip + Accessible.id: "QuickActions" id: toolTip text: qsTr("Quick actions") toolTipX: DockPanelPositioner.x @@ -81,6 +83,8 @@ Control { } } background: AppletItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "AppletItemBackground" isActive: root.isOpened } @@ -91,6 +95,8 @@ Control { property alias hovered: surfaceLayer.hovered ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "SurfaceLayer" id: surfaceLayer property var itemGlobalPoint: { var a = surfaceLayer diff --git a/panels/dock/tray/quickpanel/PluginItem.qml b/panels/dock/tray/quickpanel/PluginItem.qml index bdb56879c..93d3a29b8 100644 --- a/panels/dock/tray/quickpanel/PluginItem.qml +++ b/panels/dock/tray/quickpanel/PluginItem.qml @@ -27,6 +27,8 @@ Control { } DragItem { + Accessible.role: Accessible.Pane + Accessible.id: "DragLayer" id: dragLayer anchors.fill: parent dragItem: root @@ -50,6 +52,8 @@ Control { } ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "SurfaceLayer" id: surfaceLayer anchors.centerIn: parent anchors.fill: parent diff --git a/panels/dock/tray/quickpanel/QuickPanel.qml b/panels/dock/tray/quickpanel/QuickPanel.qml index 5baccd47e..ea5c00e74 100644 --- a/panels/dock/tray/quickpanel/QuickPanel.qml +++ b/panels/dock/tray/quickpanel/QuickPanel.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 @@ -59,6 +59,8 @@ Item { } PanelTrayItem { + Accessible.role: Accessible.Button + Accessible.id: "PanelTrayItem" id: panelTrayItem shellSurface: quickpanelModel.trayItemSurface isOpened: popup.popupVisible @@ -74,6 +76,8 @@ Item { } PanelPopup { + Accessible.role: Accessible.Dialog + Accessible.id: "Popup" id: popup width: popupContent.width height: popupContent.height @@ -81,10 +85,14 @@ Item { popupY: DockPanelPositioner.y QuickPanelPage { + Accessible.role: Accessible.Pane + Accessible.id: "PopupContent" id: popupContent model: quickpanelModel DDT.SurfacePopup { + Accessible.role: Accessible.Dialog + Accessible.id: "SurfacePopup" objectName: "quickpanel" surfaceAcceptor: function (surfaceId) { let pluginId = pluginIdBySurfaceId(surfaceId) @@ -101,6 +109,8 @@ Item { // trayItem's popup DDT.TrayItemSurfacePopup { + Accessible.role: Accessible.Dialog + Accessible.id: "TrayItemSurfacePopup" id: trayItemSurfacePopup surfaceAcceptor: isTrayItemPopup surfaceFilter: function (surfaceId) { diff --git a/panels/dock/tray/quickpanel/QuickPanelPage.qml b/panels/dock/tray/quickpanel/QuickPanelPage.qml index a33220f00..950f4e784 100644 --- a/panels/dock/tray/quickpanel/QuickPanelPage.qml +++ b/panels/dock/tray/quickpanel/QuickPanelPage.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 @@ -39,6 +39,8 @@ Item { width: currentItem ? currentItem.width : 10 height: panelView.contentHeight initialItem: PanelPluginPage { + Accessible.role: Accessible.Pane + Accessible.id: "PanelPage" id: panelPage model: root.model StackView.onActivating: function () { @@ -53,6 +55,8 @@ Item { Component { id: subPluginPageLoader SubPluginPage { + Accessible.role: Accessible.Pane + Accessible.id: "SubPluginPage" width: panelPage.width onRequestBack: function () { panelView.pop() diff --git a/panels/dock/tray/quickpanel/SubPluginPage.qml b/panels/dock/tray/quickpanel/SubPluginPage.qml index f20ab6390..ca30e1836 100644 --- a/panels/dock/tray/quickpanel/SubPluginPage.qml +++ b/panels/dock/tray/quickpanel/SubPluginPage.qml @@ -89,6 +89,8 @@ Item { // content ShellSurfaceItemProxy { + Accessible.role: Accessible.Pane + Accessible.id: "SurfaceLayer" id: surfaceLayer autoClose: true Layout.fillWidth: true diff --git a/panels/notification/bubble/package/Bubble.qml b/panels/notification/bubble/package/Bubble.qml index 2019262f3..8846cf8be 100644 --- a/panels/notification/bubble/package/Bubble.qml +++ b/panels/notification/bubble/package/Bubble.qml @@ -10,6 +10,8 @@ import org.deepin.ds.notification 1.0 import org.deepin.dtk 1.0 as D NotifyItemContent { + Accessible.role: Accessible.Pane + Accessible.id: "Bubble" id: control property var bubble diff --git a/panels/notification/bubble/package/main.qml b/panels/notification/bubble/package/main.qml index 69c3b0614..aae1a723e 100644 --- a/panels/notification/bubble/package/main.qml +++ b/panels/notification/bubble/package/main.qml @@ -90,6 +90,7 @@ Window { } ListView { + Accessible.id: "BubbleView" id: bubbleView // Close button overhang: half of 20px button height minus 2px visual offset // (see NotifyItemContent.qml closePlaceHolder topMargin: -height / 2 + 2) @@ -181,6 +182,8 @@ Window { } delegate: BubbleDelegate { + Accessible.role: Accessible.ListItem + Accessible.id: "BubbleDelegate" maxCount: model.bubbleCount onHeightChanged: { diff --git a/panels/notification/center/GroupNotify.qml b/panels/notification/center/GroupNotify.qml index 7a17299f4..d9edbe7ef 100644 --- a/panels/notification/center/GroupNotify.qml +++ b/panels/notification/center/GroupNotify.qml @@ -10,6 +10,8 @@ import org.deepin.ds.notification import org.deepin.ds.notificationcenter NotifyItem { + Accessible.role: Accessible.ListItem + Accessible.id: "NotifyItem" id: root implicitWidth: impl.implicitWidth implicitHeight: impl.implicitHeight @@ -57,6 +59,8 @@ NotifyItem { contentItem: RowLayout { NotifyHeaderTitleText { + Accessible.role: Accessible.StaticText + Accessible.id: "NotifyHeaderTitleText" text: root.appName Layout.alignment: Qt.AlignLeft Layout.leftMargin: 18 @@ -69,6 +73,8 @@ NotifyItem { } AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "Fold" id: foldBtn Layout.alignment: Qt.AlignRight activeFocusOnTab: false @@ -89,6 +95,8 @@ NotifyItem { } } AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "More" id: groupMoreBtn Layout.alignment: Qt.AlignRight activeFocusOnTab: false @@ -110,6 +118,8 @@ NotifyItem { } } AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "ClearAll" id: groupClearBtn Layout.alignment: Qt.AlignRight activeFocusOnTab: false diff --git a/panels/notification/center/NormalNotify.qml b/panels/notification/center/NormalNotify.qml index 35da81e7e..d8d1143ff 100644 --- a/panels/notification/center/NormalNotify.qml +++ b/panels/notification/center/NormalNotify.qml @@ -10,6 +10,8 @@ import org.deepin.ds.notification import org.deepin.ds.notificationcenter NotifyItem { + Accessible.role: Accessible.ListItem + Accessible.id: "NotifyItem" id: root implicitWidth: impl.implicitWidth implicitHeight: impl.implicitHeight @@ -52,6 +54,8 @@ NotifyItem { } contentItem: NotifyItemContent { + Accessible.role: Accessible.Pane + Accessible.id: "NotifyContent" id: notifyContent width: parent.width appName: root.appName @@ -68,6 +72,8 @@ NotifyItem { contentRowCount: root.contentRowCount indexInGroup: root.indexInGroup background: NotifyItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "NotifyItemBackground" backgroundColor: Palette { normal { common: ("transparent") diff --git a/panels/notification/center/NotifyCenter.qml b/panels/notification/center/NotifyCenter.qml index 4306eec5d..59aaf0be8 100644 --- a/panels/notification/center/NotifyCenter.qml +++ b/panels/notification/center/NotifyCenter.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 @@ -46,6 +46,8 @@ FocusScope { objectName: "notificationCenter" anchors.fill: parent NotifyHeader { + Accessible.role: Accessible.Pane + Accessible.id: "Header" id: header anchors { top: parent.top @@ -72,6 +74,8 @@ FocusScope { } NotifyView { + Accessible.role: Accessible.List + Accessible.id: "View" id: view anchors { left: parent.left @@ -95,6 +99,8 @@ FocusScope { } DropShadowText { + Accessible.role: Accessible.StaticText + Accessible.id: "NoRecentNotifications" text: qsTr("No recent notifications") visible: root.stagingViewCount === 0 && view.viewCount === 0 anchors { diff --git a/panels/notification/center/NotifyHeader.qml b/panels/notification/center/NotifyHeader.qml index fdb279085..6ef545674 100644 --- a/panels/notification/center/NotifyHeader.qml +++ b/panels/notification/center/NotifyHeader.qml @@ -72,6 +72,8 @@ FocusScope { } NotifyHeaderTitleText { + Accessible.role: Accessible.StaticText + Accessible.id: "NotificationCenter" id: titleText text: qsTr("Notification Center") elide: Text.ElideNone @@ -80,6 +82,8 @@ FocusScope { } AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "Fold" id: collapseBtn objectName: "collapse" visible: !notifyModel.collapse @@ -103,6 +107,8 @@ FocusScope { } AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "More" id: moreBtn objectName: "more" Layout.alignment: Qt.AlignRight @@ -130,8 +136,11 @@ FocusScope { } NotifySettingMenu { + Accessible.role: Accessible.Pane + Accessible.id: "HeaderSettingMenu" id: headerSettingMenu MenuItem { + Accessible.id: "NotificationSetting" text: qsTr("Notification Setting") onClicked: { console.log("Notification setting") @@ -142,6 +151,8 @@ FocusScope { } AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "ClearAll" id: clearAllBtn objectName: "closeAllNotify" activeFocusOnTab: false diff --git a/panels/notification/center/NotifyHeaderTitleText.qml b/panels/notification/center/NotifyHeaderTitleText.qml index c7d9d1909..fad949a58 100644 --- a/panels/notification/center/NotifyHeaderTitleText.qml +++ b/panels/notification/center/NotifyHeaderTitleText.qml @@ -9,6 +9,8 @@ import org.deepin.ds.notification import org.deepin.ds.notificationcenter DropShadowText { + Accessible.role: Accessible.StaticText + Accessible.id: "DropShadowText" property font tFont: DTK.fontManager.t4 color: DTK.themeType === ApplicationHelper.DarkType ? Qt.rgba(255, 255, 255, 0.7) : diff --git a/panels/notification/center/NotifySetting.qml b/panels/notification/center/NotifySetting.qml index f4b352218..73ccfeb73 100644 --- a/panels/notification/center/NotifySetting.qml +++ b/panels/notification/center/NotifySetting.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 @@ -8,6 +8,8 @@ import org.deepin.dtk 1.0 import org.deepin.ds.notificationcenter NotifySettingMenu { + Accessible.role: Accessible.Pane + Accessible.id: "NotifySettingMenu" id: root required property NotifyModel notifyModel @@ -15,6 +17,7 @@ NotifySettingMenu { property string appName MenuItem { + Accessible.id: "Unpin" text: pinned ? qsTr("Unpin") : qsTr("Pin") onClicked: { let state = !root.pinned @@ -23,6 +26,7 @@ NotifySettingMenu { } } MenuItem { + Accessible.id: "NotificationSetting" text: qsTr("Notification Setting") onClicked: { console.log("Notify setting") diff --git a/panels/notification/center/NotifySettingMenu.qml b/panels/notification/center/NotifySettingMenu.qml index e7775a95d..b1bd3a53b 100644 --- a/panels/notification/center/NotifySettingMenu.qml +++ b/panels/notification/center/NotifySettingMenu.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 @@ -8,6 +8,7 @@ import org.deepin.dtk 1.0 import org.deepin.ds.notificationcenter Menu { + Accessible.id: "Menu" id: root closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape diff --git a/panels/notification/center/NotifyStaging.qml b/panels/notification/center/NotifyStaging.qml index 8dc6d0d71..1d480c601 100644 --- a/panels/notification/center/NotifyStaging.qml +++ b/panels/notification/center/NotifyStaging.qml @@ -80,6 +80,7 @@ FocusScope { } ListView { + Accessible.id: "View" id: view spacing: 10 snapMode: ListView.SnapToItem @@ -89,6 +90,8 @@ FocusScope { model: notifyModel delegate: OverlapNotify { + Accessible.role: Accessible.Pane + Accessible.id: "OverlapNotify" id: overlapNotify objectName: "overlap-" + model.appName focus: true diff --git a/panels/notification/center/NotifyView.qml b/panels/notification/center/NotifyView.qml index 9c97772a3..445b38c35 100644 --- a/panels/notification/center/NotifyView.qml +++ b/panels/notification/center/NotifyView.qml @@ -26,6 +26,8 @@ Control { signal gotoHeaderLast() // Signal to cycle Shift+Tab back to header last button NotifySetting { + Accessible.role: Accessible.PopupMenu + Accessible.id: "NotifySetting" id: notifySetting notifyModel: root.notifyModel } @@ -66,7 +68,9 @@ Control { keyNavigationEnabled: false activeFocusOnTab: false boundsBehavior: Flickable.StopAtBounds - ScrollBar.vertical: ScrollBar { } + ScrollBar.vertical: ScrollBar { + Accessible.id: "Scrollbar" + } topMargin: 20 bottomMargin: 10 leftMargin: NotifyStyle.leftMargin @@ -248,5 +252,8 @@ Control { } } - background: BoundingRectangle {} + background: BoundingRectangle { + Accessible.role: Accessible.Pane + Accessible.id: "BoundingRectangle" + } } diff --git a/panels/notification/center/NotifyViewDelegate.qml b/panels/notification/center/NotifyViewDelegate.qml index ec8453016..12e038bd4 100644 --- a/panels/notification/center/NotifyViewDelegate.qml +++ b/panels/notification/center/NotifyViewDelegate.qml @@ -56,6 +56,8 @@ DelegateChooser { DelegateChoice { roleValue: "group" GroupNotify { + Accessible.role: Accessible.ListItem + Accessible.id: "GroupNotify" id: groupNotify objectName: "group-" + model.appName width: NotifyStyle.contentItem.width @@ -91,6 +93,8 @@ DelegateChooser { DelegateChoice { roleValue: "normal" NormalNotify { + Accessible.role: Accessible.ListItem + Accessible.id: "NormalNotify" id: normalNotify objectName: "normal-" + model.appName width: NotifyStyle.contentItem.width @@ -163,6 +167,8 @@ DelegateChooser { DelegateChoice { roleValue: "overlap" OverlapNotify { + Accessible.role: Accessible.Pane + Accessible.id: "OverlapNotify_2" id: overlapNotify objectName: "overlap-" + model.appName width: NotifyStyle.contentItem.width @@ -184,6 +190,8 @@ DelegateChooser { contentRowCount: model.contentRowCount enableDismissed: false notifyContent.clearButton: AnimationSettingButton { + Accessible.role: Accessible.Button + Accessible.id: "CleanAll" id: clearBtn icon.name: "clean-alone" text: qsTr("Clean All") diff --git a/panels/notification/center/OverlapNotify.qml b/panels/notification/center/OverlapNotify.qml index ba674931b..f7a8568a7 100644 --- a/panels/notification/center/OverlapNotify.qml +++ b/panels/notification/center/OverlapNotify.qml @@ -10,6 +10,8 @@ import org.deepin.ds.notification import org.deepin.ds.notificationcenter NotifyItem { + Accessible.role: Accessible.ListItem + Accessible.id: "NotifyItem" id: root implicitWidth: impl.implicitWidth implicitHeight: impl.implicitHeight @@ -100,6 +102,8 @@ NotifyItem { width: parent.width implicitHeight: notifyContent.height + indicator.height NotifyItemContent { + Accessible.role: Accessible.Pane + Accessible.id: "NotifyContent" id: notifyContent width: parent.width appName: root.appName @@ -129,6 +133,8 @@ NotifyItem { onGotoPrevItem: root.gotoPrevItem() background: NotifyItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "NotifyItemBackground" backgroundColor: Palette { normal { common: ("transparent") @@ -142,6 +148,8 @@ NotifyItem { } OverlapIndicator { + Accessible.role: Accessible.Indicator + Accessible.id: "Indicator" id: indicator enableAnimation: root.ListView.view.panelShown clipItems: true @@ -155,6 +163,8 @@ NotifyItem { z: -1 count: root.count background: NotifyItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "NotifyItemBackground" opacity: realIndex === 0 ? 0.6 : 0.4 backgroundColor: Palette { normal { diff --git a/panels/notification/center/package/main.qml b/panels/notification/center/package/main.qml index 9464c2db6..1750cd456 100644 --- a/panels/notification/center/package/main.qml +++ b/panels/notification/center/package/main.qml @@ -214,6 +214,8 @@ Window { } NotifyStaging { + Accessible.role: Accessible.Pane + Accessible.id: "NotifyStaging" id: notifyStaging anchors { top: parent.top @@ -240,6 +242,8 @@ Window { } NotifyCenter { + Accessible.role: Accessible.Pane + Accessible.id: "NotifyCenter" id: notifyCenter anchors { top: notifyStaging.bottom diff --git a/panels/notification/osd/displaymode/package/main.qml b/panels/notification/osd/displaymode/package/main.qml index cf6ade1f9..df1d933f9 100644 --- a/panels/notification/osd/displaymode/package/main.qml +++ b/panels/notification/osd/displaymode/package/main.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: LGPL-3.0-or-later @@ -41,6 +41,7 @@ AppletItem { } ListView { + Accessible.id: "View" id: view width: 350 height: contentHeight @@ -53,6 +54,7 @@ AppletItem { spacing: 10 delegate: D.ItemDelegate { + Accessible.id: "ItemView" id: itemView height: 60 width: view.width diff --git a/panels/notification/osd/kblayout/package/main.qml b/panels/notification/osd/kblayout/package/main.qml index 74fe2b7de..faf210549 100644 --- a/panels/notification/osd/kblayout/package/main.qml +++ b/panels/notification/osd/kblayout/package/main.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: LGPL-3.0-or-later @@ -33,6 +33,7 @@ AppletItem { } ListView { + Accessible.id: "View" id: view anchors { margins: 10 @@ -54,6 +55,7 @@ AppletItem { implicitWidth: maxItemWidth() delegate: D.ItemDelegate { + Accessible.id: "ItemView" id: itemView width: view.width height: 48 diff --git a/panels/notification/osd/windoweffect/package/main.qml b/panels/notification/osd/windoweffect/package/main.qml index f5788e309..ff2786fbc 100644 --- a/panels/notification/osd/windoweffect/package/main.qml +++ b/panels/notification/osd/windoweffect/package/main.qml @@ -72,6 +72,7 @@ AppletItem { } ListView { + Accessible.id: "Listview" id: listview width: 410 height: contentHeight @@ -83,6 +84,7 @@ AppletItem { spacing: 10 delegate: D.ItemDelegate { + Accessible.id: "ItemView" id: itemView padding: 0 diff --git a/panels/notification/plugin/NotifyAction.qml b/panels/notification/plugin/NotifyAction.qml index 2900c7a9f..312715b00 100644 --- a/panels/notification/plugin/NotifyAction.qml +++ b/panels/notification/plugin/NotifyAction.qml @@ -167,6 +167,8 @@ Control { event.accepted = true } actionMenu: NotifyActionMenu { + Accessible.role: Accessible.PopupMenu + Accessible.id: "NotifyActionMenu" onActionInvoked: function(actionId) { console.log("Action invoked from menu with ID:", actionId) root.actionInvoked(actionId) @@ -180,6 +182,7 @@ Control { } component NotifyActionButton: Button { + Accessible.id: "ActionButton" id: actionButton required property var actionData property var actionMenu: null @@ -216,6 +219,8 @@ Control { } background: NotifyItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "NotifyItemBackground" implicitHeight: 30 implicitWidth: 50 radius: 6 diff --git a/panels/notification/plugin/NotifyActionMenu.qml b/panels/notification/plugin/NotifyActionMenu.qml index 87b07faa3..372424694 100644 --- a/panels/notification/plugin/NotifyActionMenu.qml +++ b/panels/notification/plugin/NotifyActionMenu.qml @@ -8,6 +8,7 @@ import Qt.labs.platform 1.1 as LP import org.deepin.ds.notification LP.Menu { + Accessible.id: "Menu" id: root property var actions: [] @@ -17,6 +18,7 @@ LP.Menu { Instantiator { model: root.actions delegate: LP.MenuItem { + Accessible.id: "NotifyActionMenuItem" text: modelData.text onTriggered: { console.log("Action triggered: " + modelData.text + " (ID: " + modelData.id + ")") diff --git a/panels/notification/plugin/NotifyItemContent.qml b/panels/notification/plugin/NotifyItemContent.qml index 670d51140..0469de96c 100644 --- a/panels/notification/plugin/NotifyItemContent.qml +++ b/panels/notification/plugin/NotifyItemContent.qml @@ -10,6 +10,8 @@ import org.deepin.dtk.style 1.0 as DStyle import org.deepin.ds.notification NotifyItem { + Accessible.role: Accessible.ListItem + Accessible.id: "NotifyItem" id: root implicitWidth: impl.implicitWidth implicitHeight: impl.implicitHeight @@ -115,6 +117,8 @@ NotifyItem { // Show when mouse hovers or notification item has focus active: !(root.strongInteractive && root.actions.length > 0) && (root.closeVisible || closePlaceHolder.hovered) sourceComponent: SettingActionButton { + Accessible.role: Accessible.Button + Accessible.id: "CloseBtn" id: closeBtn objectName: "closeNotify-" + root.appName icon.name: "clean-alone" @@ -332,6 +336,8 @@ NotifyItem { Layout.alignment: Qt.AlignRight | Qt.AlignBottom Layout.topMargin: 8 sourceComponent: NotifyAction { + Accessible.role: Accessible.Button + Accessible.id: "NotifyAction" actions: root.actions onActionInvoked: function (actionId) { root.actionInvoked(actionId) @@ -353,6 +359,9 @@ NotifyItem { } } - background: NotifyItemBackground { } + background: NotifyItemBackground { + Accessible.role: Accessible.DrawingArea + Accessible.id: "NotifyItemBackground" + } } } diff --git a/shell/SceneWindow.qml b/shell/SceneWindow.qml index 56692812b..d8d148547 100644 --- a/shell/SceneWindow.qml +++ b/shell/SceneWindow.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 @@ -21,6 +21,7 @@ ApplicationWindow { implicitHeight: listView.contentHeight + topPadding + bottomPadding contentItem: ListView { + Accessible.id: "ListView" id: listView spacing: 10 contentWidth: { diff --git a/tests/at/spi/expected_names.yaml b/tests/at/spi/expected_names.yaml new file mode 100644 index 000000000..841596b90 --- /dev/null +++ b/tests/at/spi/expected_names.yaml @@ -0,0 +1,1231 @@ +# SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +# +# SPDX-License-Identifier: GPL-3.0-or-later + +version: '1.0' +widgets: +- variable: m_closeAllButton + type: DIconButton * + object_name: CloseAllButton + source_file: panels/dock/taskmanager/x11preview.cpp + class_name: '' + line: 106 +- variable: m_listView + type: QListView * + object_name: ListView + source_file: panels/dock/taskmanager/x11preview.cpp + class_name: '' + line: 215 +qml_elements: +- element_type: PanelPopup + id: popup + accessible_id: Popup + accessible_role: Accessible.Dialog + source_file: example/applet-example-data/package/main.qml + parent_type: '' + line: 45 +- element_type: Button + id: '' + accessible_id: PopupContent + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: PanelPopup + line: 54 +- element_type: PanelToolTip + id: toolTip + accessible_id: TooltipContent + accessible_role: Accessible.ToolTip + source_file: example/applet-example-data/package/main.qml + parent_type: '' + line: 61 +- element_type: Menu + id: platformMenu + accessible_id: PlatformMenu + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: '' + line: 73 +- element_type: MenuItem + id: '' + accessible_id: Item1 + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: Menu + line: 76 +- element_type: MenuItem + id: '' + accessible_id: NonItem + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: Menu + line: 80 +- element_type: MenuItem + id: '' + accessible_id: Panel + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: Menu + line: 84 +- element_type: MenuItem + id: '' + accessible_id: DSApplet + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: Menu + line: 88 +- element_type: MenuItem + id: '' + accessible_id: Popup + accessible_role: '' + source_file: example/applet-example-data/package/main.qml + parent_type: Menu + line: 92 +- element_type: TextEx + id: '' + accessible_id: HelloWorldn + accessible_role: Accessible.StaticText + source_file: example/applet-example/package/main.qml + parent_type: '' + line: 18 +- element_type: PanelPopup + id: launcherDebuggerPanel + accessible_id: LauncherDebuggerPanel + accessible_role: Accessible.Dialog + source_file: example/bridge-example/package/appletitem.qml + parent_type: '' + line: 34 +- element_type: TreeView + id: treeView + accessible_id: TreeView + accessible_role: '' + source_file: example/bridge-example/package/appletitem.qml + parent_type: PanelPopup + line: 62 +- element_type: GridView + id: gridview + accessible_id: Gridview + accessible_role: '' + source_file: example/drag-example/package/main.qml + parent_type: '' + line: 16 +- element_type: ComboBox + id: layerCombox + accessible_id: LayerCombox + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 30 +- element_type: ComboBox + id: keyboardInteractivityCombox + accessible_id: KeyboardInteractivityCombox + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 48 +- element_type: ComboBox + id: screenComboBox + accessible_id: ScreenComboBox + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 65 +- element_type: Button + id: buttonTop + accessible_id: Top + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 85 +- element_type: Button + id: buttonLeft + accessible_id: Left + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 103 +- element_type: Button + id: buttonRight + accessible_id: Right + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 117 +- element_type: Button + id: buttonBottom + accessible_id: Buttom + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 132 +- element_type: SpinBox + id: left + accessible_id: Left + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 159 +- element_type: SpinBox + id: top + accessible_id: Top + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 169 +- element_type: SpinBox + id: right + accessible_id: Right + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 179 +- element_type: SpinBox + id: bottom + accessible_id: Bottom + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 189 +- element_type: SpinBox + id: excludezone + accessible_id: Excludezone + accessible_role: '' + source_file: example/layershell-example/main.qml + parent_type: Window + line: 200 +- element_type: Button + id: '' + accessible_id: Lock + accessible_role: '' + source_file: example/lockscreen-example/package/main.qml + parent_type: '' + line: 25 +- element_type: Button + id: '' + accessible_id: Shutdown + accessible_role: '' + source_file: example/lockscreen-example/package/main.qml + parent_type: '' + line: 35 +- element_type: Button + id: '' + accessible_id: Switchuser + accessible_role: '' + source_file: example/lockscreen-example/package/main.qml + parent_type: '' + line: 45 +- element_type: GridView + id: '' + accessible_id: Gridview + accessible_role: '' + source_file: example/osd-example/package/main.qml + parent_type: '' + line: 15 +- element_type: Button + id: '' + accessible_id: OsdButton + accessible_role: '' + source_file: example/osd-example/package/main.qml + parent_type: GridView + line: 28 +- element_type: PanelPopupWindow + id: root + accessible_id: PanelPopupWindow + accessible_role: Accessible.Window + source_file: frame/qml/PanelMenuWindow.qml + parent_type: '' + line: 8 +- element_type: PanelPopupWindow + id: root + accessible_id: PanelPopupWindow + accessible_role: Accessible.Window + source_file: frame/qml/PanelToolTipWindow.qml + parent_type: '' + line: 10 +- element_type: AppletItemBackground + id: '' + accessible_id: AppletItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/dock/AppletItemButton.qml + parent_type: '' + line: 37 +- element_type: ListView + id: listView + accessible_id: ListView + accessible_role: Accessible.List + source_file: panels/dock/OverflowContainer.qml + parent_type: '' + line: 22 +- element_type: PanelToolTip + id: toolTip + accessible_id: Appruntime + accessible_role: Accessible.ToolTip + source_file: panels/dock/appruntimeitem/package/appruntimeitem.qml + parent_type: '' + line: 22 +- element_type: AppletItemButton + id: button + accessible_id: Button + accessible_role: Accessible.Button + source_file: panels/dock/appruntimeitem/package/appruntimeitem.qml + parent_type: '' + line: 30 +- element_type: PanelToolTip + id: toolTip + accessible_id: MultitaskingView + accessible_role: Accessible.ToolTip + source_file: panels/dock/multitaskview/package/multitaskview.qml + parent_type: AppletDockItem + line: 19 +- element_type: Menu + id: menu + accessible_id: Menu + accessible_role: '' + source_file: panels/dock/package/main.qml + parent_type: '' + line: 283 +- element_type: Menu + id: dockMenu + accessible_id: DockMenu + accessible_role: '' + source_file: panels/dock/package/main.qml + parent_type: Loader + line: 302 +- element_type: MenuItem + id: '' + accessible_id: LockTheDock + accessible_role: '' + source_file: panels/dock/package/main.qml + parent_type: Menu + line: 373 +- element_type: MenuItem + id: '' + accessible_id: DockSettings + accessible_role: '' + source_file: panels/dock/package/main.qml + parent_type: Menu + line: 381 +- element_type: OverflowContainer + id: leftLoader + accessible_id: LeftLoader + accessible_role: Accessible.Pane + source_file: panels/dock/package/main.qml + parent_type: '' + line: 547 +- element_type: OverflowContainer + id: centerLoader + accessible_id: CenterLoader + accessible_role: Accessible.Pane + source_file: panels/dock/package/main.qml + parent_type: '' + line: 592 +- element_type: OverflowContainer + id: rightLoader + accessible_id: RightLoader + accessible_role: Accessible.Pane + source_file: panels/dock/package/main.qml + parent_type: '' + line: 621 +- element_type: PanelToolTip + id: toolTip + accessible_id: ShowDesktop + accessible_role: Accessible.ToolTip + source_file: panels/dock/showdesktop/package/showdesktop.qml + parent_type: '' + line: 22 +- element_type: AppItemPalette + id: itemPalette + accessible_id: ItemPalette + accessible_role: Accessible.Pane + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: '' + line: 73 +- element_type: AppItemBackground + id: hoverBackground + accessible_id: HoverBackground + accessible_role: Accessible.DrawingArea + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: '' + line: 88 +- element_type: WindowIndicator + id: windowIndicator + accessible_id: WindowIndicator + accessible_role: Accessible.Indicator + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: '' + line: 239 +- element_type: AppItemTitle + id: titleLoader + accessible_id: TitleLoader + accessible_role: Accessible.StaticText + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: '' + line: 298 +- element_type: Menu + id: contextMenu + accessible_id: ContextMenu + accessible_role: '' + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: Loader + line: 399 +- element_type: MenuItem + id: '' + accessible_id: ContextMenuItem + accessible_role: '' + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: Instantiator + line: 405 +- element_type: PanelToolTip + id: toolTip + accessible_id: ToolTip + accessible_role: Accessible.ToolTip + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: Repeater + line: 556 +- element_type: PanelToolTip + id: dragToolTip + accessible_id: MoveToTrash + accessible_role: Accessible.ToolTip + source_file: panels/dock/taskmanager/package/AppItem.qml + parent_type: Repeater + line: 564 +- element_type: AppletItemBackground + id: control + accessible_id: Control + accessible_role: Accessible.DrawingArea + source_file: panels/dock/taskmanager/package/AppItemBackground.qml + parent_type: '' + line: 11 +- element_type: OverflowContainer + id: appContainer + accessible_id: AppContainer + accessible_role: Accessible.Pane + source_file: panels/dock/taskmanager/package/TaskManager.qml + parent_type: '' + line: 102 +- element_type: AppItem + id: appItem + accessible_id: AppItem + accessible_role: Accessible.ListItem + source_file: panels/dock/taskmanager/package/TaskManager.qml + parent_type: OverflowContainer + line: 209 +- element_type: PanelToolTip + id: toolTip + accessible_id: ToolTip + accessible_role: Accessible.ToolTip + source_file: panels/dock/tray/SurfacePopup.qml + parent_type: '' + line: 20 +- element_type: ShellSurfaceItemProxy + id: surfaceLayer + accessible_id: SurfaceLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/SurfacePopup.qml + parent_type: PanelToolTip + line: 30 +- element_type: PanelMenuWindow + id: menuWindow + accessible_id: MenuWindow + accessible_role: Accessible.Window + source_file: panels/dock/tray/SurfacePopup.qml + parent_type: '' + line: 42 +- element_type: PanelMenu + id: menu + accessible_id: Menu + accessible_role: Accessible.PopupMenu + source_file: panels/dock/tray/SurfacePopup.qml + parent_type: '' + line: 56 +- element_type: ShellSurfaceItemProxy + id: menuSurfaceLayer + accessible_id: MenuSurfaceLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/SurfacePopup.qml + parent_type: PanelMenu + line: 65 +- element_type: SurfaceSubPopup + id: '' + accessible_id: SurfaceSubPopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/SurfacePopup.qml + parent_type: Loader + line: 88 +- element_type: PanelMenuWindow + id: menuWindow + accessible_id: MenuWindow + accessible_role: Accessible.Window + source_file: panels/dock/tray/SurfaceSubPopup.qml + parent_type: '' + line: 22 +- element_type: PanelMenu + id: popup + accessible_id: Popup + accessible_role: Accessible.PopupMenu + source_file: panels/dock/tray/SurfaceSubPopup.qml + parent_type: PanelMenuWindow + line: 51 +- element_type: ShellSurfaceItemProxy + id: popupSurfaceLayer + accessible_id: PopupSurfaceLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/SurfaceSubPopup.qml + parent_type: PanelMenu + line: 60 +- element_type: PanelPopup + id: popup + accessible_id: Popup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: '' + line: 29 +- element_type: ShellSurfaceItemProxy + id: popupContent + accessible_id: PopupContent + accessible_role: Accessible.Pane + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: PanelPopup + line: 41 +- element_type: PanelMenu + id: popupMenu + accessible_id: PopupMenu + accessible_role: Accessible.PopupMenu + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: '' + line: 54 +- element_type: ShellSurfaceItemProxy + id: popupMenuContent + accessible_id: PopupMenuContent + accessible_role: Accessible.Pane + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: PanelMenu + line: 75 +- element_type: SurfaceSubPopup + id: '' + accessible_id: SurfaceSubPopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: Loader + line: 99 +- element_type: PanelToolTip + id: toolTip + accessible_id: ToolTip + accessible_role: Accessible.ToolTip + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: '' + line: 125 +- element_type: ShellSurfaceItemProxy + id: toolTipContent + accessible_id: ToolTipContent + accessible_role: Accessible.Pane + source_file: panels/dock/tray/TrayItemSurfacePopup.qml + parent_type: PanelToolTip + line: 133 +- element_type: AppletItemButton + id: root + accessible_id: AppletItemButton + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml + parent_type: '' + line: 17 +- element_type: ShellSurfaceItemProxy + id: surfaceItem + accessible_id: SurfaceItem + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/ActionLegacyTrayPluginDelegate.qml + parent_type: '' + line: 87 +- element_type: PanelToolTip + id: toolTip + accessible_id: ApplicationTray + accessible_role: Accessible.ToolTip + source_file: panels/dock/tray/package/ActionShowStashDelegate.qml + parent_type: '' + line: 117 +- element_type: PanelToolTip + id: toolTip + accessible_id: CollapseTray + accessible_role: Accessible.ToolTip + source_file: panels/dock/tray/package/ActionToggleCollapseDelegate.qml + parent_type: AppletItemButton + line: 55 +- element_type: Button + id: '' + accessible_id: Button + accessible_role: '' + source_file: panels/dock/tray/package/DummyDelegate.qml + parent_type: '' + line: 10 +- element_type: SurfacePopup + id: stashSurfacePopup + accessible_id: StashSurfacePopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/package/StashContainer.qml + parent_type: '' + line: 73 +- element_type: StashedItemPositioner + id: '' + accessible_id: StashedItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: '' + line: 26 +- element_type: DummyDelegate + id: '' + accessible_id: DummyDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: StashedItemPositioner + line: 29 +- element_type: StashedItemPositioner + id: stashItemPositioner + accessible_id: StashItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: '' + line: 37 +- element_type: ActionLegacyTrayPluginDelegate + id: trayDelegate + accessible_id: TrayDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: StashedItemPositioner + line: 41 +- element_type: AppletItemBackground + id: '' + accessible_id: AppletItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: ActionLegacyTrayPluginDelegate + line: 49 +- element_type: StashedItemPositioner + id: '' + accessible_id: StashedItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: '' + line: 116 +- element_type: ActionShowStashDelegate + id: '' + accessible_id: ActionShowStashDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: StashedItemPositioner + line: 119 +- element_type: StashedItemPositioner + id: '' + accessible_id: StashedItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: '' + line: 127 +- element_type: ActionToggleCollapseDelegate + id: '' + accessible_id: ActionToggleCollapseDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/StashedItemDelegateChooser.qml + parent_type: StashedItemPositioner + line: 130 +- element_type: TrayItemPositioner + id: '' + accessible_id: TrayItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: '' + line: 24 +- element_type: DummyDelegate + id: dummyDelegate + accessible_id: DummyDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: TrayItemPositioner + line: 28 +- element_type: TrayItemPositioner + id: traySurfacePositioner + accessible_id: TraySurfacePositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: '' + line: 37 +- element_type: ActionLegacyTrayPluginDelegate + id: traySurfaceDelegate + accessible_id: TraySurfaceDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: TrayItemPositioner + line: 42 +- element_type: TrayItemSurfacePopup + id: surfacePopup + accessible_id: SurfacePopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: ActionLegacyTrayPluginDelegate + line: 53 +- element_type: TrayItemPositioner + id: '' + accessible_id: TrayItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: '' + line: 69 +- element_type: ActionShowStashDelegate + id: '' + accessible_id: ActionShowStashDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: TrayItemPositioner + line: 72 +- element_type: TrayItemPositioner + id: '' + accessible_id: TrayItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: '' + line: 80 +- element_type: ActionToggleCollapseDelegate + id: '' + accessible_id: ActionToggleCollapseDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: TrayItemPositioner + line: 83 +- element_type: TrayItemPositioner + id: '' + accessible_id: TrayItemPositioner + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: '' + line: 93 +- element_type: ActionToggleQuickSettingsDelegate + id: quickSettingsDelegate + accessible_id: QuickSettingsDelegate + accessible_role: Accessible.Button + source_file: panels/dock/tray/package/TrayItemDelegateChooser.qml + parent_type: TrayItemPositioner + line: 97 +- element_type: PanelPopup + id: stashedPopup + accessible_id: StashedPopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/package/tray.qml + parent_type: '' + line: 39 +- element_type: StashContainer + id: stashContainer + accessible_id: StashContainer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/tray.qml + parent_type: PanelPopup + line: 61 +- element_type: TrayContainer + id: trayContainter + accessible_id: TrayContainter + accessible_role: Accessible.Pane + source_file: panels/dock/tray/package/tray.qml + parent_type: '' + line: 135 +- element_type: ShellSurfaceItemProxy + id: '' + accessible_id: ShellSurfaceItemProxy + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/DragItem.qml + parent_type: Loader + line: 124 +- element_type: PluginItem + id: pluginItem + accessible_id: PluginItem + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/PanelPluginPage.qml + parent_type: '' + line: 77 +- element_type: PanelToolTip + id: toolTip + accessible_id: QuickActions + accessible_role: Accessible.ToolTip + source_file: panels/dock/tray/quickpanel/PanelTrayItem.qml + parent_type: '' + line: 34 +- element_type: AppletItemBackground + id: '' + accessible_id: AppletItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/dock/tray/quickpanel/PanelTrayItem.qml + parent_type: '' + line: 85 +- element_type: ShellSurfaceItemProxy + id: surfaceLayer + accessible_id: SurfaceLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/PanelTrayItem.qml + parent_type: '' + line: 97 +- element_type: DragItem + id: dragLayer + accessible_id: DragLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/PluginItem.qml + parent_type: '' + line: 29 +- element_type: ShellSurfaceItemProxy + id: surfaceLayer + accessible_id: SurfaceLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/PluginItem.qml + parent_type: '' + line: 54 +- element_type: PanelTrayItem + id: panelTrayItem + accessible_id: PanelTrayItem + accessible_role: Accessible.Button + source_file: panels/dock/tray/quickpanel/QuickPanel.qml + parent_type: '' + line: 61 +- element_type: PanelPopup + id: popup + accessible_id: Popup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/quickpanel/QuickPanel.qml + parent_type: '' + line: 78 +- element_type: QuickPanelPage + id: popupContent + accessible_id: PopupContent + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/QuickPanel.qml + parent_type: PanelPopup + line: 87 +- element_type: SurfacePopup + id: '' + accessible_id: SurfacePopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/quickpanel/QuickPanel.qml + parent_type: QuickPanelPage + line: 93 +- element_type: TrayItemSurfacePopup + id: trayItemSurfacePopup + accessible_id: TrayItemSurfacePopup + accessible_role: Accessible.Dialog + source_file: panels/dock/tray/quickpanel/QuickPanel.qml + parent_type: '' + line: 111 +- element_type: PanelPluginPage + id: panelPage + accessible_id: PanelPage + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/QuickPanelPage.qml + parent_type: '' + line: 41 +- element_type: SubPluginPage + id: '' + accessible_id: SubPluginPage + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/QuickPanelPage.qml + parent_type: Component + line: 57 +- element_type: ShellSurfaceItemProxy + id: surfaceLayer + accessible_id: SurfaceLayer + accessible_role: Accessible.Pane + source_file: panels/dock/tray/quickpanel/SubPluginPage.qml + parent_type: '' + line: 91 +- element_type: NotifyItemContent + id: control + accessible_id: Bubble + accessible_role: Accessible.Pane + source_file: panels/notification/bubble/package/Bubble.qml + parent_type: '' + line: 12 +- element_type: ListView + id: bubbleView + accessible_id: BubbleView + accessible_role: '' + source_file: panels/notification/bubble/package/main.qml + parent_type: Window + line: 92 +- element_type: BubbleDelegate + id: '' + accessible_id: BubbleDelegate + accessible_role: Accessible.ListItem + source_file: panels/notification/bubble/package/main.qml + parent_type: ListView + line: 184 +- element_type: NotifyItem + id: root + accessible_id: NotifyItem + accessible_role: Accessible.ListItem + source_file: panels/notification/center/GroupNotify.qml + parent_type: '' + line: 12 +- element_type: NotifyHeaderTitleText + id: '' + accessible_id: NotifyHeaderTitleText + accessible_role: Accessible.StaticText + source_file: panels/notification/center/GroupNotify.qml + parent_type: NotifyItem + line: 61 +- element_type: AnimationSettingButton + id: foldBtn + accessible_id: Fold + accessible_role: Accessible.Button + source_file: panels/notification/center/GroupNotify.qml + parent_type: NotifyItem + line: 75 +- element_type: AnimationSettingButton + id: groupMoreBtn + accessible_id: More + accessible_role: Accessible.Button + source_file: panels/notification/center/GroupNotify.qml + parent_type: NotifyItem + line: 97 +- element_type: AnimationSettingButton + id: groupClearBtn + accessible_id: ClearAll + accessible_role: Accessible.Button + source_file: panels/notification/center/GroupNotify.qml + parent_type: NotifyItem + line: 120 +- element_type: NotifyItem + id: root + accessible_id: NotifyItem + accessible_role: Accessible.ListItem + source_file: panels/notification/center/NormalNotify.qml + parent_type: '' + line: 12 +- element_type: NotifyItemContent + id: notifyContent + accessible_id: NotifyContent + accessible_role: Accessible.Pane + source_file: panels/notification/center/NormalNotify.qml + parent_type: NotifyItem + line: 56 +- element_type: NotifyItemBackground + id: '' + accessible_id: NotifyItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/notification/center/NormalNotify.qml + parent_type: NotifyItemContent + line: 74 +- element_type: NotifyHeader + id: header + accessible_id: Header + accessible_role: Accessible.Pane + source_file: panels/notification/center/NotifyCenter.qml + parent_type: '' + line: 48 +- element_type: NotifyView + id: view + accessible_id: View + accessible_role: Accessible.List + source_file: panels/notification/center/NotifyCenter.qml + parent_type: '' + line: 76 +- element_type: DropShadowText + id: '' + accessible_id: NoRecentNotifications + accessible_role: Accessible.StaticText + source_file: panels/notification/center/NotifyCenter.qml + parent_type: '' + line: 101 +- element_type: NotifyHeaderTitleText + id: titleText + accessible_id: NotificationCenter + accessible_role: Accessible.StaticText + source_file: panels/notification/center/NotifyHeader.qml + parent_type: '' + line: 74 +- element_type: AnimationSettingButton + id: collapseBtn + accessible_id: Fold + accessible_role: Accessible.Button + source_file: panels/notification/center/NotifyHeader.qml + parent_type: '' + line: 84 +- element_type: AnimationSettingButton + id: moreBtn + accessible_id: More + accessible_role: Accessible.Button + source_file: panels/notification/center/NotifyHeader.qml + parent_type: '' + line: 109 +- element_type: NotifySettingMenu + id: headerSettingMenu + accessible_id: HeaderSettingMenu + accessible_role: Accessible.Pane + source_file: panels/notification/center/NotifyHeader.qml + parent_type: AnimationSettingButton + line: 138 +- element_type: MenuItem + id: '' + accessible_id: NotificationSetting + accessible_role: '' + source_file: panels/notification/center/NotifyHeader.qml + parent_type: NotifySettingMenu + line: 142 +- element_type: AnimationSettingButton + id: clearAllBtn + accessible_id: ClearAll + accessible_role: Accessible.Button + source_file: panels/notification/center/NotifyHeader.qml + parent_type: '' + line: 153 +- element_type: DropShadowText + id: '' + accessible_id: DropShadowText + accessible_role: Accessible.StaticText + source_file: panels/notification/center/NotifyHeaderTitleText.qml + parent_type: '' + line: 11 +- element_type: NotifySettingMenu + id: root + accessible_id: NotifySettingMenu + accessible_role: Accessible.Pane + source_file: panels/notification/center/NotifySetting.qml + parent_type: '' + line: 10 +- element_type: MenuItem + id: '' + accessible_id: Unpin + accessible_role: '' + source_file: panels/notification/center/NotifySetting.qml + parent_type: NotifySettingMenu + line: 19 +- element_type: MenuItem + id: '' + accessible_id: NotificationSetting + accessible_role: '' + source_file: panels/notification/center/NotifySetting.qml + parent_type: NotifySettingMenu + line: 28 +- element_type: Menu + id: root + accessible_id: Menu + accessible_role: '' + source_file: panels/notification/center/NotifySettingMenu.qml + parent_type: '' + line: 10 +- element_type: ListView + id: view + accessible_id: View + accessible_role: '' + source_file: panels/notification/center/NotifyStaging.qml + parent_type: '' + line: 82 +- element_type: OverlapNotify + id: overlapNotify + accessible_id: OverlapNotify + accessible_role: Accessible.Pane + source_file: panels/notification/center/NotifyStaging.qml + parent_type: ListView + line: 92 +- element_type: NotifySetting + id: notifySetting + accessible_id: NotifySetting + accessible_role: Accessible.PopupMenu + source_file: panels/notification/center/NotifyView.qml + parent_type: '' + line: 28 +- element_type: ScrollBar + id: '' + accessible_id: Scrollbar + accessible_role: '' + source_file: panels/notification/center/NotifyView.qml + parent_type: ListView + line: 71 +- element_type: BoundingRectangle + id: '' + accessible_id: BoundingRectangle + accessible_role: Accessible.Pane + source_file: panels/notification/center/NotifyView.qml + parent_type: Transition + line: 255 +- element_type: GroupNotify + id: groupNotify + accessible_id: GroupNotify + accessible_role: Accessible.ListItem + source_file: panels/notification/center/NotifyViewDelegate.qml + parent_type: '' + line: 58 +- element_type: NormalNotify + id: normalNotify + accessible_id: NormalNotify + accessible_role: Accessible.ListItem + source_file: panels/notification/center/NotifyViewDelegate.qml + parent_type: '' + line: 95 +- element_type: OverlapNotify + id: overlapNotify + accessible_id: OverlapNotify_2 + accessible_role: Accessible.Pane + source_file: panels/notification/center/NotifyViewDelegate.qml + parent_type: '' + line: 169 +- element_type: AnimationSettingButton + id: clearBtn + accessible_id: CleanAll + accessible_role: Accessible.Button + source_file: panels/notification/center/NotifyViewDelegate.qml + parent_type: OverlapNotify + line: 192 +- element_type: NotifyItem + id: root + accessible_id: NotifyItem + accessible_role: Accessible.ListItem + source_file: panels/notification/center/OverlapNotify.qml + parent_type: '' + line: 12 +- element_type: NotifyItemContent + id: notifyContent + accessible_id: NotifyContent + accessible_role: Accessible.Pane + source_file: panels/notification/center/OverlapNotify.qml + parent_type: NotifyItem + line: 104 +- element_type: NotifyItemBackground + id: '' + accessible_id: NotifyItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/notification/center/OverlapNotify.qml + parent_type: NotifyItemContent + line: 135 +- element_type: OverlapIndicator + id: indicator + accessible_id: Indicator + accessible_role: Accessible.Indicator + source_file: panels/notification/center/OverlapNotify.qml + parent_type: NotifyItem + line: 150 +- element_type: NotifyItemBackground + id: '' + accessible_id: NotifyItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/notification/center/OverlapNotify.qml + parent_type: OverlapIndicator + line: 165 +- element_type: NotifyStaging + id: notifyStaging + accessible_id: NotifyStaging + accessible_role: Accessible.Pane + source_file: panels/notification/center/package/main.qml + parent_type: Window + line: 216 +- element_type: NotifyCenter + id: notifyCenter + accessible_id: NotifyCenter + accessible_role: Accessible.Pane + source_file: panels/notification/center/package/main.qml + parent_type: Window + line: 244 +- element_type: ListView + id: view + accessible_id: View + accessible_role: '' + source_file: panels/notification/osd/displaymode/package/main.qml + parent_type: '' + line: 43 +- element_type: ItemDelegate + id: itemView + accessible_id: ItemView + accessible_role: '' + source_file: panels/notification/osd/displaymode/package/main.qml + parent_type: ListView + line: 56 +- element_type: ListView + id: view + accessible_id: View + accessible_role: '' + source_file: panels/notification/osd/kblayout/package/main.qml + parent_type: '' + line: 35 +- element_type: ItemDelegate + id: itemView + accessible_id: ItemView + accessible_role: '' + source_file: panels/notification/osd/kblayout/package/main.qml + parent_type: ListView + line: 57 +- element_type: ListView + id: listview + accessible_id: Listview + accessible_role: '' + source_file: panels/notification/osd/windoweffect/package/main.qml + parent_type: '' + line: 74 +- element_type: ItemDelegate + id: itemView + accessible_id: ItemView + accessible_role: '' + source_file: panels/notification/osd/windoweffect/package/main.qml + parent_type: ListView + line: 86 +- element_type: NotifyActionMenu + id: '' + accessible_id: NotifyActionMenu + accessible_role: Accessible.PopupMenu + source_file: panels/notification/plugin/NotifyAction.qml + parent_type: Loader + line: 169 +- element_type: Button + id: actionButton + accessible_id: ActionButton + accessible_role: '' + source_file: panels/notification/plugin/NotifyAction.qml + parent_type: '' + line: 184 +- element_type: NotifyItemBackground + id: '' + accessible_id: NotifyItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/notification/plugin/NotifyAction.qml + parent_type: Button + line: 221 +- element_type: Menu + id: root + accessible_id: Menu + accessible_role: '' + source_file: panels/notification/plugin/NotifyActionMenu.qml + parent_type: '' + line: 10 +- element_type: MenuItem + id: '' + accessible_id: NotifyActionMenuItem + accessible_role: '' + source_file: panels/notification/plugin/NotifyActionMenu.qml + parent_type: Instantiator + line: 20 +- element_type: NotifyItem + id: root + accessible_id: NotifyItem + accessible_role: Accessible.ListItem + source_file: panels/notification/plugin/NotifyItemContent.qml + parent_type: '' + line: 12 +- element_type: SettingActionButton + id: closeBtn + accessible_id: CloseBtn + accessible_role: Accessible.Button + source_file: panels/notification/plugin/NotifyItemContent.qml + parent_type: Loader + line: 119 +- element_type: NotifyAction + id: '' + accessible_id: NotifyAction + accessible_role: Accessible.Button + source_file: panels/notification/plugin/NotifyItemContent.qml + parent_type: Loader + line: 338 +- element_type: NotifyItemBackground + id: '' + accessible_id: NotifyItemBackground + accessible_role: Accessible.DrawingArea + source_file: panels/notification/plugin/NotifyItemContent.qml + parent_type: NotifyItem + line: 362 +- element_type: ListView + id: listView + accessible_id: ListView + accessible_role: '' + source_file: shell/SceneWindow.qml + parent_type: ApplicationWindow + line: 23 +transient_elements: []