Bug 499004 - Perpetual qt.accessibility.atspi warnings in log after activating screen reader with system monitor widget active
Summary: Perpetual qt.accessibility.atspi warnings in log after activating screen read...
Status: RESOLVED UPSTREAM
Alias: None
Product: plasmashell
Classification: Plasma
Component: System Monitor widgets (other bugs)
Version First Reported In: master
Platform: Other Linux
: NOR normal
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords: accessibility
Depends on:
Blocks:
 
Reported: 2025-01-22 12:43 UTC by cwo
Modified: 2025-02-07 12:06 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description cwo 2025-01-22 12:43:05 UTC
SUMMARY

If the user activates the screen reader (e.g. with Meta+Alt+S) while one or more system monitor widgets are present on the panel or desktop, there will be a perpetual warning printed every time a legend value for one or more widgets updates:

qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd668f0f0 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514(0x60fdd666c1a0)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd58b4bd0 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514_QML_516(0x60fdd90f55e0)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd91e9ff0 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514_QML_516(0x60fdd91afc40)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd3fbb8f0 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514_QML_516(0x60fdd1b94c70)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd58b4bd0 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514_QML_516(0x60fdd90f55e0)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd6681a90 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514(0x60fdd65ef670)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd6662ca0 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514(0x60fdd65efa30)"invisible")
qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox:  QAccessibleInterface(0x60fdd66ced20 name="" role=Client childc=2 obj=LegendDelegate_QMLTYPE_514(0x60fdd66b8e30)rect=QRect(912,3 98x15))

With several regularly updating widgets, this can amount to several warnings per second, and they will continue indefinitely even after the screen reader is turned off. Only restarting plasmashell stops the warnings.

The value property has particular semantics for some kinds of controls in QtQuick's Accessible (see https://doc.qt.io/qt-6/qml-qtquick-accessible.html#role-prop). It seems the chart legend triggers this somehow. The same chart in the system monitor does not seem to do this however, so it seems something specific to the widget and/or plasmashell seems to be the cause. 

I've reproduced this on master (with Tuxedo OS, kinfo below) and stock Fedora 41 with 6.2.5.

STEPS TO REPRODUCE
1. Make sure orca is installed. Start plasmashell from a terminal (or journalctl -f) to see the plasmashell warnings
2. Open system monitor, right-click "Network Speed" chart, add as desktop widget
3. Press Meta+Alt+S to enable the screen reader

OBSERVED RESULT

Multiple warnings of the above type per second are printed

EXPECTED RESULT

No warnings

SOFTWARE/OS VERSIONS
Operating System: TUXEDO OS 
KDE Plasma Version: 6.3.80
KDE Frameworks Version: 6.11.0
Qt Version: 6.8.1
Kernel Version: 6.11.0-108013-tuxedo (64-bit)
Graphics Platform: Wayland
Comment 1 Nate Graham 2025-01-22 21:56:04 UTC
Eeeeee, can confirm.
Comment 2 Marco Martin 2025-01-23 14:48:05 UTC
hmm, LegendDelegate doesn't seem to export anything wrt Accessible
Comment 3 cwo 2025-02-07 00:04:25 UTC
Alright, I did a little digging because the non-stop stream of errors makes a11y testing extremely annoying.

This is a minimal test case that triggers the issue:

```
import QtQuick
import QtQuick.Controls

Button {
    text: value
    property int value: 0
    onClicked: value++
}
```

Click the button, and you get the same "qt.accessibility.atspi: ValueChanged event and no ValueInterface or ComboBox" error.

qquickaccssibleattached seems to turn every valueChanged signal (i.e. every property named value that any Item has) into a QAccesssible::ValueChanged event, forwards that through some intermediaries to atspiadaptor, which then complains that the item is not a ValueInterface of ComboBox because the at-spi spec value thingy only makes sense for those.

I think this happens at around line 350 in qquickaccessibleattached.cpp/ line 193 of qquickaccessibleattached_p.h, but the metaobject stuff goes a little over my head and I can't quite follow it (though I can't see anything else where this could possibly happen).

I tried renaming the value property in LegendDelegate  and that solves the error, but I don't think we can do that for API stability reasons.

I'm not sure how to proceed from here. This likely requires changes in Qt (maybe either not forwarding all valueChanged events, or dropping them silently in atspiadaptor if there's no ValueInterface/Combobox).
Comment 4 Arjen Hiemstra 2025-02-07 10:47:07 UTC
Sounds like a plain old Qt bug then. While we could deprecate value and add a new property, I'd rather not since value is used as a name quite a bit in QuickCharts.

> qquickaccssibleattached seems to turn every valueChanged signal (i.e. every property named value that any Item has) into a QAccesssible::ValueChanged event

That just sounds wrong and like very naive code to me.
Comment 5 cwo 2025-02-07 11:14:46 UTC
Sounded wrong to me too tbh. But there may be reasons for it, I don't grasp all the internals.

I'll prepare a qtbug then. It'll be my first, fingers crossed...