Bug 135386 - ACCESSIBILITY: Dialog AutoText and other dialogs give no Information for Screen Reader Orca under VCL: qt5/qt6/kf5;
Summary: ACCESSIBILITY: Dialog AutoText and other dialogs give no Information for Scre...
Status: RESOLVED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Writer (show other bugs)
Version:
(earliest affected)
6.4.4.2 release
Hardware: x86-64 (AMD64) Linux (All)
: medium normal
Assignee: Not Assigned
URL:
Whiteboard:
Keywords: accessibility
Depends on:
Blocks: a11y, Accessibility Qt6
  Show dependency treegraph
 
Reported: 2020-08-02 13:57 UTC by Robert Großkopf
Modified: 2025-07-28 07:46 UTC (History)
3 users (show)

See Also:
Crash report or crash signature:


Attachments
Screencast with current LO git master and qtbase git dev (17.22 MB, video/x-matroska)
2025-07-28 07:41 UTC, Michael Weghorn
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Robert Großkopf 2020-08-02 13:57:50 UTC
You need a screen reader for hearing this buggy behavior.
Switch the screen reader on.
Open a new Writer document.
Start Tools → AutoText.
Now switch through the whole dialog by typing Tab or by moving an d marking something with the mouse.
No information about any field and button is there for the screen reader. It only says "Tab", "Tab", "Tab" ...

The dialog is completely unusable for people, who can't work without screen reader.

Tested here with OpenSUSE 15.1 64bit rpm Linux, Orca screen reader and LO 6.4.4.2.
Comment 1 Robert Großkopf 2020-08-02 17:06:19 UTC
This seems to be a special problem of 
Version: 6.4.4.2
Build-ID: 3d775be2011f3886db32dfd395a6a6d1ca2630ff
CPU-Threads: 6; BS: Linux 4.12; UI-Render: Standard; VCL: kf5; 
Gebietsschema: de-DE (de_DE.UTF-8); UI-Sprache: de-DE
Calc: threaded

If I change 
VCL: kf5; to VCL: gtk3; 

The screen reader works without any problem here.
With VCL: gtk2; the screen reader says nothing in LO ...
Comment 2 Michael Weghorn 2020-08-17 15:49:34 UTC
Confirmed, see also bug 122053 for some more information.
Comment 3 QA Administrators 2022-08-18 03:41:10 UTC Comment hidden (obsolete)
Comment 4 Robert Großkopf 2022-08-18 05:38:40 UTC
Same buggy behavior with LO 7.4.0.2 and VCL: kf5 on OpenSUSE 15.3 64bit rpm Linux.
Comment 5 Michael Weghorn 2022-08-18 05:39:47 UTC
qt5/qt6/kf5 are still not usable with a screen reader as of now, but some work on a11y of the Qt-based VCL plugins has been done (and is going on), s. e.g. the commits below.
(I also have a WIP branch where Orca *sometimes" speaks with the qt6 VCL plugin.)

Making this work properly also requires changes to the Qt library and Orca.
Since the corresponding Qt changes will only be in Qt 6, not Qt 5, I'm moving this from the kf5 to the qt6 meta bug.

Related Orca commits:

75c433b3d Don't use text offset of 1 for empty text
d348621b9 Consider alerts as dialogs in 'frameAndDialog'

Related qtbase commits:

5145d3899d a11y atspi: Support AT-SPI table cell interface
f350956548 a11y atspi: Forward change of focused state
e97b9ddcb0 a11y atspi: Drop unused forward-declaration QSpiAccessibleInterface
ee35afc117 a11y atspi: Drop 'if (0)' branch
7594e8ca4d a11y atspi: Send D-Bus reply for "GetCaption" in expected format
a32a3aa388 a11y atspi: Add support for ATSPI_COORD_TYPE_PARENT
fa0e24b641 a11y atspi: translate coords for GetOffsetAtPoint the right way
49c966bc85 a11y atspi: Take dialog into account as top-level window
d40dacf5f4 a11y atspi: Fix incorrect use of x instead of y position

Some LO Commits:

04af1b4e1ce5 qt a11y: Drop duplicate nullptr check
f2371a7d9b30 qt a11y: Clear QtXAccessible's ref to XAccessible once passed on
a65719ec6752 qt a11y: Clear XAccessible reference when disposing
48baddac8f17 qt a11y: Drop QtAccessibleEventListener's XAccessible reference
a3f3453c00f7 qt a11y: Implement QtAccessibleWidget::indexOfChild
f29e3dbe0155 qt a11y: Replace dynamic_cast with static_cast
2de74491a5a7 qt a11y: Use correct coord system in QtAccessibleWidget::childAt
38289a8abed7 qt a11y: Implement QtAccessibleWidget::text{After,Before}Offset
69ecff82d0e5 qt a11y: Check range for offset passed to text methods
892bd0dfc1b1 qt a11y: Return actual range of text with same attributes
3cf7b358799d qt a11y: Implement QtAccessibleWidget::offsetAtPoint
12f96c3d0f61 qt a11y: implement QtAccessibleWidget::{row,column}HeaderCells
c03a262c477b qt a11y: Implement QtAccessibleWidget::selectedCell{s,Count}
7f5cab0cf4aa qt a11y: Map BUTTON_{DROPDOWN,MENU} to Qt equivalents
ba31e1bfdbcb qt a11y: Map AccessibleRole::FILE_CHOOSER
dcefd68f6df3 qt a11y: Drop extra empty lines in switch/case
0b15b7f589b1 qt a11y: Drop obsolete and misleading comment
99640693d28c qt a11y: Implement QtAccessibleWidget::window
2690b0079c16 qt a11y: Consider QObject hierarchy to find parent
35be93f83ac8 qt a11y: Implement QtAccessibleWidget::characterRect
e4066a41406b qt a11y: Implement QtAccessibleWidget::table
3a9d36d49d1f qt a11y: Only return actually supported a11y interfaces
1a8132515bab tdf#149816 qt a11y: Report position in screen coordinates
85c564285036 qt a11y: Handle special value of -1 for text offset
8c3e8af0e608 qt a11y: Forward STATE_CHANGED event as such
9ee8b709594d qt a11y: Handle TABLE_MODEL_CHANGED event
6ec960fe0be9 qt a11y: Handle HYPERTEXT_CHANGED event
ab925e1d8d92 qt a11y: Handle VALUE_CHANGED event
fe9206b47446 qt a11y: Better handle TEXT_CHANGED event
dc6eb44e625c qt a11y: Map CARET_CHANGED event to Qt equivalent
91798635258c qt5 a11y: Implement Qt5AccessibleWidget::is{Column,Row}Selected
6735a37747a3 qt5 a11y: Implement QAccessibleTableCellInterface
0ae1c36f319b qt5 a11y: Drop Qt5AccessibleWidget::{text,value}Interface
f62cbfed5509 qt5 a11y: Implement Qt5AccessibleWidget::minimumStepSize
0f15f1ec7c7b qt5 a11y: Always query the XAccessibleContext for a11y interfaces
b216a87d7a09 qt5 a11y: Improve Qt5AccessibleWidget::attributes
bdf14fd8ea18 qt5 a11y: Implement Qt5AccessibleWidget::cursorPosition
96869931e35f qt5 a11y: Implement Qt5AccessibleWidget::textAtOffset
add4f7732840 qt5 a11y: Handle AccessibleStateType::MULTI_LINE
7be0f62de07a qt5 a11y: Handle AccessibleStateType::MOVEABLE
6c8824490840 qt5 a11y: Skip attributes without value
a440bea2f96f qt5 a11y: Adapt loop for string construction here a bit
ddbc11155560 qt5 a11y: Set proper a11y states
Comment 6 Michael Weghorn 2024-01-17 08:17:54 UTC
(In reply to Michael Weghorn from comment #5)
> qt5/qt6/kf5 are still not usable with a screen reader as of now, but some
> work on a11y of the Qt-based VCL plugins has been done (and is going on), s.
> e.g. the commits below.
> (I also have a WIP branch where Orca *sometimes" speaks with the qt6 VCL
> plugin.)
> 
> Making this work properly also requires changes to the Qt library and Orca.
> Since the corresponding Qt changes will only be in Qt 6, not Qt 5, I'm
> moving this from the kf5 to the qt6 meta bug.

While it's still not ready for production use, Orca already announces quite a lot when using the qt6 VCL plugin along with the current dev version of qtbase.
(Orca e.g. ususally starts talking after double-clicking into a writer document, then moving around the toolbar,...)

Some more related changes:

LO (Qt-specific, but more do play a role):

a182f283dabf qt a11y: Map AccessibleStateType::INDETERMINATE to Qt equivalent
66fa5aeec5db qt a11y: Set passwordEdit state for PASSWORD_TEXT
d2daaedf2e3b qt a11y: Take current type into account when setting new value
15a6e23c4fc1 tdf#157696 qt a11y: Move handling for text attr offsets to helper
be8b031d8b3c qt a11y: Forward CHILD event for removed child
b73a8731c6f7 qt a11y: Return app as parent for top-level objects
bc662b15bf56 qt a11y: Check child index in QtAccessibleWidget::child
4849c98eb44b qt a11y: Forward changes to active state
84183c84d864 qt a11y: Implement QAccessibleSelectionInterface added in Qt 6.5
734d10ed3612 qt a11y: Send QAccessible::ObjectCreated event for correct object
02266202e5e5 qt a11y: Handle all QAccessible::Relation flags
46a03cb52886 qt a11y: Add mapping for relations added in Qt 6.6
e55713dffbe8 qt a11y: Invert relation type to match Qt's semantic
155e8b1683f1 tdf#117173: qt a11y: Forward changes to SHOWING state
5226e3889155 tdf#150683 qt a11y: Add bound checks for table methods
1dbf4a111486 tdf#150683 qt a11y: Avoid using 32-bit child index here
dce8fda483f3 qt a11y: Set the (un)selected child in selection add/remove event
8ce3d4f8b000 qt a11y: Forward text selection change event as such
9d2c9a592ad6 qt a11y: Work around Qt ignoring ActiveDescendantChanged events
61c0c1286dbd qt a11y: Remember associated QObject also for non-QtXAcccessible case
812fe185fba4 qt a11y: Remember and reuse existing QObject for XAccessible
b99c74804b25 qt a11y: Drop unnecessary QObject inheritance
2523b5451507 qt a11y: Don't set invalid Qt relations
31e40de94c2e qt a11y: Report underline text attribute
1188364a2832 qt a11y: Report (background) color text attribute
99841da68662 qt a11y: Report font style text attribute (e.g. italic)

qtbase:

7120859fdb a11y: QComboBox: Reset all model connections when setting model
d91d53c951 a11y atspi: Add null checks in table iface methods
a149b3fd53 a11y: Only send focus event when item has focus
3d58715e6f a11y: Implement QAccessibleSelectionInterface for QAccessibleTabBar
b0bcf47569 a11y atspi: Ignore malformed text attr instead of crashing
f67499baab a11y uia: Report UIA_StrikethroughStyleAttributeId
d2bf45c6ed a11y: Report strikethrough via text attribute
bb6ed27b50 a11y uia: Map 3 more roles to UIA control type IDs
56476947cf a11y atspi: Bridge IA2 strikeout text attrs to AT-SPI
f035766b16 a11y atspi: Unescape commas in color text attribute
5db48d584e Don't reuse iterator var to avoid -D_GLIBCXX_DEBUG crash
1b0e76f514 a11y atspi: Don't restrict top-level window to 2 a11y roles
0699ef1301 a11y atspi: Update text-attribute links
5093e517b9 a11y: Keep current combobox entry in sync
2496882ea7 a11y: No longer mark QAccessibleSelectionInterface as preliminary
9900a12df6 a11y uia: Don't return "S_OK" and null text range
beb1a48ef7 a11y atspi: Map ButtonMenu role to AT-SPI equivalent
4f9c66131d a11y uia: Bridge QAccessibleSelectionInterface
3bace699bf a11y uia: Support ISelectionProvider2
b8fb120384 a11y uia: Bridge newly added relations to UIA
6ec35ff8c5 a11y: Report app as parent for top-level item views
98e4e992fe a11y macOS: Report selection/Bridge QAccessibleSelectionInterface
86ea40b478 a11y atspi: Implement TableCell methods Get{Column,Row}HeaderCells
c7b925757f a11y atspi: Report correct char code point when it's > 65535
f5358e5932 a11y: Add new relations DescriptionFor, Described, Flows{From,To}
092bbc9ad3 a11y: Implement QAccessibleSelectionInterface for item views
ece2feee03 a11y atspi: Bridge newly introduced QAccessibleSelectionInterface
9d16d5e224 a11y: Add new QAccessibleSelectionInterface
f408944598 a11y atspi: Clean up logging a bit
53086094d8 a11y: Fix QAccessibleTableInterface::selectedRows doc
ad69ea47f5 a11y: Fix typo in QAccessible::ObjectHide doc
ce16eb2679 a11y atspi: Forward table model change to AT-SPI
dad2797aee a11y atspi: Move comment to better place
5462485a59 a11y atspi: Add null check in GetRowHeader handling
8b947bae72 a11y: Don't reassign unique ID to other object right away
0c0eadc484 a11y: Prevent one case of losing a11y interface when setting event child
063344c8b9 a11y atspi: Send SelectionChanged AT-SPI event on selection change
2910a6b308 a11y atspi: Forward SelectionWithin change to AT-SPI
e81e7c3d99 a11y atspi: Drop FIXME that doesn't need action
e5dca1ebe3 a11y atspi: Drop methods that are only declared
9ab11c726e a11y atspi: Support text interface's GetStringAtOffset
45121669f5 a11y atspi: Handle AT-SPI Text's ScrollSubstringTo
0131dbd2f9 a11y atspi: Drop commented out "say hello to d-bus" code
e6599bfa61 a11y atspi: Send correct D-Bus reply for GetAttributeValue
c2289ca582 a11y atspi: Add missing closing tag in introspection XML
Comment 7 Michael Weghorn 2025-07-28 07:40:04 UTC
Some more related LO commits:

9aaa528379a8 qt a11y: Forward ROLE_CHANGED event (Qt >= 6.11)
1db70ac081d7 qt a11y: Report locale for Qt >= 6.10
32c7035824e5 tdf#130857 qt weld a11y: Add custom a11y to registry
14a221bf5687 qt: No longer manually destroy QWindow
65a5a4772af9 tdf#163335 sw a11y: Handle cursor selection consistently
3eaa35e8bacc tdf#163335 qt a11y: Work around broken sw selection handling
c67c9b04af15 qt a11y: Map BLOCK_QUOTE role to new Qt equivalent
5599ec55f0a2 tdf#130857 qt a11y weld: Handle "accepts-tab" text view property
95e2bdf97d98 tdf#130857 qt a11y weld: Convert accelerator for labels
9df896fe542f tdf#130857 qt a11y weld: Set "buddy" (mnemonic widget)
8e21f46f9524 tdf#130857 qt a11y weld: Apply ATK/a11y properties
dd58b893f073 tdf#160837 qt a11y: Don't report window role for non-top-level
b021286327ab tdf#130857 qt a11y weld: Set GtkBuilder ID as widget's accessible ID
2284e26a0731 qt a11y: Destroy QWindow when popup gets hidden
fcaa903461ec qt a11y: Defer QWindow creation until frame gets shown
84929c43df52 tdf#155447 qt a11y: Map TEXT_FRAME role to QAccessible::Pane
c64b823b74cb tdf#155447 qt a11y: Report accessible ID
5b9dec4caa72 tdf#155447 qt a11y: Don't report "Unknown" for unsupported props
f281b70282bc tdf#160462 qt a11y: Open menu bar on F10
3776874c20b4 tdf#160971 qt a11y: Don't select combobox text on entry selection
575ab78504c5 qt a11y: Don't leak QAccessibleEvent
ad4f75bdb49c qt a11y: Use "r" prefix for reference
1b6963cda0a2 tdf#158030 qt a11y: Implement new QAccessibleAttributesInterface
6e20e58270c8 tdf#159333 qt a11y: Process shortcuts only once

Some more related qtbase commits:

b126ada3056 QDockWidget a11y: Notify of role change when (un)docking
1fe2adea79e a11y: Introduce RoleChanged event, bridge to AT-SPI, UIA
a99a99ea7a0 a11y uia: Move OSK logic to roleToControlTypeId
62f101c7dee QDockWidget a11y: Only report as toplevel window if floating
12cd5ef9e8a QToolButton a11y: Take menu from default action into account
509ccccbc9e QToolButton a11y: Use existing method to get QToolButton
fb93950e7eb a11y: Move qt_accStripAmp helper to private QtGui header
9756f62a63f QLineEdit a11y: Report displayText on a11y layer
99ad6a51a59 a11y atspi: Warn on unimplemented Application iface method
77f02471ed2 a11y atspi: Create local variable on stack
5e7891f73fb a11y atspi: Set correct child index in children-changed:add event
6cca30bb11c a11y atspi: Support Application iface "AtspiVersion" property
854d7021b80 a11y uia: Report locale via UIA_CulturePropertyId
bb2121551c3 a11y: Report QWidget locale
da3422ca150 a11y: Introduce QAccessible::Attribute::Locale, bridge to AT-SPI
3224b2fb140 wasm a11y: Fix typo in comments
1df6a48a894 a11y macOS: Support titleUIElement property
befce757faa a11y atspi: Report app parent
8bb9a1f2473 a11y uia: Support UIA_LabeledByPropertyId
363f069b0bb a11y atspi: Don't redefine libatspi constants
fdf87fdce1c a11y atspi: Send AT-SPI signals with correct signature
0b5874bc96f a11y: Add new BlockQuote role
d13de6afbef a11y: Report QMessageBox accessible ID
3cfabf92b09 a11y: Remember QTreeView's a11y child interfaces
13b40750938 a11y: Use desktop file name as app's accessible ID
b079e38927f a11y atspi: Update link to IAccessible2 text attribute spec
ab927b0e787 a11y: Drop src/3rdparty/iaccessible2
94929a63c8e a11y tests: Make combobox focus tests more reliable
de91f5da67a a11y tests: Make key event tests more reliable
1ebec1e8961 a11y tests: Wait until window is exposed, skip focus test on Wayland
7fbe80c8a69 a11y: Notify of implicit window title change
ef72e969629 a11y: Report actual platform window name on Windows
5178606a98b a11y: Report the actual (platform) window name as a11y name (xcb)
a19d66385fc a11y atspi: Map QAccessible::Border to AT-SPI2 panel role
fb5e1433055 a11y: Don't notify about name/desc/id change if there was none
b8b7c584027 a11y: Add property for QWidget's accessible ID
bd0a6e83079 a11y uia: Bridge QAccessibleAttributesInterface to UIA
2d3f49d7978 a11y atspi: Bridge QAccessibleAttributesInterface to AT-SPI
25ab8ada101 a11y: Notify of name change when setting window title used as a11y name
353dd10a1c4 a11y atspi: Bridge help text to AT-SPI
7dd7ed141dc a11y macOS: Forward new QAccessibleAnnouncementEvent on macOS
0377ad2f831 a11y uia: Forward new QAccessibleAnnouncementEvent to UIA
24986ccb7b2 a11y atspi: Forward new QAccessibleAnnouncementEvent to AT-SPI
c9e62c24440 a11y atspi: Include atspi.h instead of atspi-constants.h
010952a55ee a11y: Add new QAccessibleAnnouncementEvent
fb5ffe86268 a11y: Add new QAccessibleAttributesInterface
b2ec2e1137c a11y atspi: Map checkable and hasPopup states to AT-SPI
Comment 8 Michael Weghorn 2025-07-28 07:41:22 UTC
Created attachment 202028 [details]
Screencast with current LO git master and qtbase git dev
Comment 9 Michael Weghorn 2025-07-28 07:46:02 UTC
attachment 202028 [details] shows the behavior of the AutoText dialog with Orca I see with the current development versions of both, LibreOffice and Qt on Debian testing when using the qt6 VCL plugin.

Announcement of this dialog (and others) and its UI element by Orca works now, so I'm closing this bug as fixed.

There are certainly still more specific accessibility aspects needing further improvement with the Qt-based VCL plugins and LibreOffice in general (e.g. sometimes it takes a while until Orca starts speaking after starting LO with qt6), but I'd consider at least the "doesn't work at all" problem that this bug report is about as fixed.

As mentioned earlier, accessibility will only work properly for qt6/kf6, not qt5/kf5 because it required/requires changes in the Qt toolkit itself that are only contained in Qt 6, not Qt 5.