nvda icon indicating copy to clipboard operation
nvda copied to clipboard

Omit GUI elements with zero width from output

Open schulle4u opened this issue 7 years ago • 11 comments

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:

  1. As an example: Download and install RadioBoss
  2. Load any m3u playlist into the program or from the playlist menu select some music files.
  3. Open the view menu and select "screen reader mode", though this doesn't seem to have an effect for NVDA.
  4. From the view menu select "playlist columns".
  5. 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

schulle4u avatar Mar 10 '18 09:03 schulle4u

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.

dkager avatar Mar 10 '18 13:03 dkager

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

schulle4u avatar Mar 10 '18 13:03 schulle4u

Closing as duplicate of #13897

seanbudd avatar Nov 24 '23 03:11 seanbudd

This is a completely different use case than #13897:

  1. It is not related to HTML or CSS
  2. 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

Adriani90 avatar Nov 24 '23 07:11 Adriani90

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.

Adriani90 avatar Nov 24 '23 07:11 Adriani90

@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 avatar Dec 13 '23 13:12 CyrilleB79

@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 avatar Dec 13 '23 15:12 Adriani90

@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?

CyrilleB79 avatar Dec 13 '23 16:12 CyrilleB79

Still an issue in NVDA alpha-53763,79a07dc1 (2026.1.0.53763)

Adriani90 avatar Dec 05 '25 15:12 Adriani90

It is an open question whether we should respect these columns being 0-width given recent changes in web behaviour (#19146).

SaschaCowley avatar Dec 09 '25 00:12 SaschaCowley

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.

Adriani90 avatar Dec 09 '25 21:12 Adriani90