Omit GUI elements with zero width from output
This issue is specific to the RadioBoss application and the developer already is aware of it, but the problem could also be valid for other applications.
Steps to reproduce:
- As an example: Download and install RadioBoss
- Load any m3u playlist into the program or from the playlist menu select some music files.
- Open the view menu and select "screen reader mode", though this doesn't seem to have an effect for NVDA.
- From the view menu select "playlist columns".
- Uncheck some of the columns and press OK.
Expected behavior:
NVDA should only read the remaining columns in the playlist, omitting all columns previously unchecked.
Actual behavior:
When navigating through the playlist, The columns are not presented in the expected order, instead the speech and braille output is totally cluttered and doesn't match the columns displayed on the screen. Columns that are hidden are still "visible" for speech and braille output, but not in the position they previously were.
Some information from the program developer:
When you hide/show columns, they are internally being resized and moved. Hidden columns are resized to zero width, making them effectively invisible. The shown columns are automatically resized to non-zero width.
NVDA should have an option to ignore GUI elements which are actually not visible on the screen, e.g. only display elements with dimensions greater than 0 or 1.
System configuration:
- an installed copy of NVDA 2018.1
- Windows 10 Home 64 bit, Version 1709 (Build 16299.248)
- RadioBoss 5.7.0.7
For the sake of completeness, could you provide the developer info (NVDA+F1) for one of these table rows and also confirm that with object navigation you can enter into the table row and see the individual cells? Do the cells actually have width 0 according to the developer info?
If this "interesting" solution to hiding columns is specific to RadioBoss I would say it can be addressed in an appmodule.
The playlist is presented in a simple list view, I'm not able to navigate individual cells in object nav mode.
Here are the developer infos for the whole list object:
Developer info for navigator object:
name: None
role: ROLE_LIST
states: STATE_FOCUSABLE, STATE_FOCUSED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.IAccessible.List object at 0x0744AC90>
Python class mro: (<class 'NVDAObjects.IAccessible.List'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: (10, 152, 1904, 705)
value: None
appModule: <'appModuleHandler' (appName u'radioboss', process ID 932) at address 79d98b0>
appModule.productName: u'RadioBOSS'
appModule.productVersion: u'5.7'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 1901472
windowClassName: u'TDKListView'
windowControlID: 1901472
windowStyle: 1442911297
windowThreadID: 5500
windowText: u''
displayText: u'Nr. Start Titel Intro Outro L\xe4nge Dateiname BPM Bewertung Counter Vorh\xf6ren Entfernen Abspielen Stopp ein... H\xf6rer Zuletzt g... Benutzer... Kommentar (user fiel... (user fiel... (user fiel... (user fiel... (user fiel...1 [RMN] - Sh... 00:12 [RMN]-Sho.' (truncated)
IAccessibleObject: <POINTER(IAccessible) ptr=0xa019ce0 at 77d6170>
IAccessibleChildID: 0
IAccessible event parameters: windowHandle=1901472, objectID=-4, childID=0
IAccessible accName: None
IAccessible accRole: ROLE_SYSTEM_LIST
IAccessible accState: STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (1048580)
IAccessible accDescription: None
IAccessible accValue: None
And for an individual list row, the deepest level I'm able to navigate:
Developer info for navigator object:
name: u'1'
role: ROLE_LISTITEM
states: STATE_FOCUSABLE, STATE_SELECTABLE, STATE_FOCUSED, STATE_SELECTED
isFocusable: True
hasFocus: True
Python object: <NVDAObjects.IAccessible.IAccessible object at 0x073C90B0>
Python class mro: (<class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: u'Titel: [RMN] - Showopener 2015 Indie point; L\xe4nge: 00:12; Dateiname: [RMN]-Showopener 2015 Indie point.mp3; Counter: 148; Zuletzt gespielt: 09.03.2018 16:58:50; Vorh\xf6ren: [~icon]87; Entfernen: [~icon]86; Abspielen: [~icon]90; Stopp einf\xfcgen: [~icon]91'
location: (10, 176, 1610, 20)
value: None
appModule: <'appModuleHandler' (appName u'radioboss', process ID 7992) at address 73c9fb0>
appModule.productName: u'RadioBOSS'
appModule.productVersion: u'5.7'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 1050136
windowClassName: u'TDKListView'
windowControlID: 1050136
windowStyle: 1442911297
windowThreadID: 5124
windowText: u''
displayText: u'1 [RMN] - Sh... 00:12 [RMN]-Sho... 148 09.03.201...'
IAccessibleObject: <POINTER(IAccessible) ptr=0xbd83090 at 72e5f30>
IAccessibleChildID: 1
IAccessible event parameters: windowHandle=1050136, objectID=-4, childID=1
IAccessible accName: u'1'
IAccessible accRole: ROLE_SYSTEM_LISTITEM
IAccessible accState: STATE_SYSTEM_SELECTABLE, STATE_SYSTEM_SELECTED, STATE_SYSTEM_MULTISELECTABLE, STATE_SYSTEM_FOCUSED, STATE_SYSTEM_FOCUSABLE, STATE_SYSTEM_VALID (19922950)
IAccessible accDescription: u'Titel: [RMN] - Showopener 2015 Indie point; L\xe4nge: 00:12; Dateiname: [RMN]-Showopener 2015 Indie point.mp3; Counter: 148; Zuletzt gespielt: 09.03.2018 16:58:50; Vorh\xf6ren: [~icon]87; Entfernen: [~icon]86; Abspielen: [~icon]90; Stopp einf\xfcgen: [~icon]9' (truncated)
IAccessible accValue: None
HTH Steffen
Closing as duplicate of #13897
This is a completely different use case than #13897:
- It is not related to HTML or CSS
- It requests to exclude the zero width elements which are presented by the software in whatever way through the accessibility API
So solving this issue means there should be an additional heuristic by NVDA looking via displayModel or whatever to exclude such elements from being reported.
Reopening. cc: @leonardder
Still they are related in the way that both issues have to do with visibility of elements on the screen, but technically the approach to solve them is different.
@schulle4u, are you able to reproduce the issue with latest NVDA?
I remember there has been improvement to ignore zero-width columns in the last months/years. Cc @nvdaes, I think you had reported or fixed this issue in the past.
@CyrilleB79 it is still reproducible with this type of software, the improvements during last years were hnadling rather the visibility of elements in HTML or CSS representations but not using displayModel or other use cases where HTML or CSS is not involved.
@Adriani90, I was not thinking to improvements in HTML/CSS, but rather in list views. Anyway, thanks for the update and the confirmation that you are still able to reproduce the issue. Have you tried on 2023.3?
Still an issue in NVDA alpha-53763,79a07dc1 (2026.1.0.53763)
It is an open question whether we should respect these columns being 0-width given recent changes in web behaviour (#19146).
I would think in web authoring world accessibility is more of a topic and there are so many ways of implementation strategies, that such bad authoring can occur. Meaning it is not a bad intention, but it is still not according to WCAG. In contrast, developers of desktop apps do not have the same incentives to develop accessible interfaces compared to web authors, and there are no WCAG standard equivalents for desktop applications. My conclusion is that developers of desktop applications are really intending to hide something from the screen when the user explicitely opt for it. So in case of radiobox, the user explicitely chooses columns to be disabled in the view submenu. So there is no justification why these should still be exposed to the screen reader. In case of websites, users do not have the option to hide or show elements.