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: NEW
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: 2024-01-17 08:17 UTC (History)
3 users (show)

See Also:
Crash report or crash signature:


Attachments

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