Skip to content

Add support for SysListView32 controls with a native UIA implementation#15295

Merged
seanbudd merged 12 commits into
nvaccess:masterfrom
LeonarddeR:syslistview
Aug 21, 2023
Merged

Add support for SysListView32 controls with a native UIA implementation#15295
seanbudd merged 12 commits into
nvaccess:masterfrom
LeonarddeR:syslistview

Conversation

@LeonarddeR

@LeonarddeR LeonarddeR commented Aug 14, 2023

Copy link
Copy Markdown
Collaborator

Link to issue number:

Fixes #15283

Summary of the issue:

.NET 7 Win Forms has a native implementation for SysListView32 controls. This conflicts with us listing SysListView32 as a bad UIA Class name.

Description of user facing changes

Win forms project in #15283 now works as expected for the most part.

Description of development approach

Implemented SysListView32 in a new UIA module. Note that UIA seems to expose the following tree by default:

  • A list object
  • Children for the list items having the ListItem control type, but neither GridItem nor TableItem patterns
  • Sub items containing both GridItem and TableItem patterns.

I did the following:

  1. Introduced fetching of children text and column headers, mostly based on the Outlook app module
  2. Implement position info based on row number of the first child and total row count of parent

Testing strategy:

  1. Tested in the win forms project in dotnet 7, winforms, _get_columnCount is not implemented #15283
  2. By forcing Good Uia Window, tested in the TweeseCake client as well as in CleanMgr. Note that these still take the IAccessible implementation by default as expected,desired.

Known issues with pull request:

Row navigation doesn't work in the Win Forms project, but this seems to be an issue in Win Forms not properly implementing SetFocus/InvokePattern.

Change log entries:

Bug fixes

Code Review Checklist:

  • Pull Request description:
    • description is up to date
    • change log entries
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • API is compatible with existing add-ons.
  • Documentation:
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • Security precautions taken.

@LeonarddeR LeonarddeR requested a review from a team as a code owner August 14, 2023 19:52
@LeonarddeR LeonarddeR requested a review from seanbudd August 14, 2023 19:52
@LeonarddeR

Copy link
Copy Markdown
Collaborator Author

cc @beqabeqa473

@beqabeqa473

Copy link
Copy Markdown
Contributor

hi @LeonarddeR

I've tested the solution.
Thanks, it is working fine.
Just one thing. To streamline UX, it would be good to report position inside a listview as it is reported in IA2 listview.
Jaws and narrator can report position in UIA ListViews.

@LeonarddeR

Copy link
Copy Markdown
Collaborator Author

Thanks, I added that now.

@beqabeqa473

Copy link
Copy Markdown
Contributor

Thanks, tested it now.

And the final thing, I don't know if it is a problem, just a bit verbossing, i cannot see that in standard .net framework winforms app, when navigating through list, nvda announces something like
Alice; age 25; Gender Female row 1 1 of 2
Is it normal?
I think it would be better to not announce row information on list items itself, just for columns as this gives difference with IA2 listsItems.

Thanks.

@AppVeyorBot

Copy link
Copy Markdown

See test results for failed build of commit 66674aa166

@LeonarddeR

Copy link
Copy Markdown
Collaborator Author

That should also be fixed now. I was mistaken in assuming that the rowNumber property was required for fake table navigation, on list views, but that doesn't seem to be the case.

@beqabeqa473

Copy link
Copy Markdown
Contributor

Thanks. It is now ok for me.

@AppVeyorBot

Copy link
Copy Markdown

See test results for failed build of commit f166fe843a

@seanbudd seanbudd left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good, just some minor changes

Comment thread source/NVDAObjects/UIA/sysListView32.py Outdated
Comment thread source/NVDAObjects/UIA/sysListView32.py Outdated
Comment thread source/NVDAObjects/UIA/sysListView32.py Outdated
Comment thread source/NVDAObjects/UIA/sysListView32.py Outdated
Comment thread source/NVDAObjects/UIA/sysListView32.py Outdated
@seanbudd seanbudd marked this pull request as draft August 18, 2023 04:51
@LeonarddeR LeonarddeR marked this pull request as ready for review August 18, 2023 06:24

@seanbudd seanbudd left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @LeonarddeR

@seanbudd seanbudd merged commit 13c019c into nvaccess:master Aug 21, 2023
@nvaccessAuto nvaccessAuto added this to the 2023.3 milestone Aug 21, 2023
seanbudd pushed a commit that referenced this pull request Aug 31, 2023
Fixes #15333

Summary of the issue:
In #15295, we removed SysListView32 as a bad UIA class name as there are now decent UIA implementations that should be prefered over their MSAA counterparts. However, it turns out that Windows Management Console, despite advertising a native UIA implementation, offers something quite incomplete.

Description of user facing changes
Working list navigation in mmc, such as in windows Services list

Description of development approach
Classify SysListView32 as Bad UIA class in the mmc app module. Note. I have also tested several other applications in Windows, including regedit, and there no UIA implementation of SysListView32 is advertised. Therefore I think this might be a onetimer.
Ensures that whenever UIA is used wit an incomplete implementation, no errors occur by performing the necessary checks.
@btman16

btman16 commented Sep 14, 2023

Copy link
Copy Markdown

Hi,

This seems to be resulting in extremely sluggish navigation in Task Manager on my laptop.

It now takes over a second to hear the name of the focused item in the list on the Details tab which is an extremely negative hit to productivity, and this is on nVDA 2023.3beta1 where this fix has been implemented. 2023.2 worked fine with the details tab.

This seems to be a pattern with NVDA, whenever something moves away from IAccessible to UIA we then have performance hits.

Thank you very much for your time and I look forward to any input you may have.

Sincerely,

Brandon Tyson

@LeonarddeR

LeonarddeR commented Sep 15, 2023 via email

Copy link
Copy Markdown
Collaborator Author

seanbudd added a commit that referenced this pull request Sep 28, 2023
Fixes #15541
Reverts #15295
Reopens #15283

See also #15503, #15333

Summary of the issue:
There are several known cases where UIA is not correctly supported for SysListView32.
Reliability History is the most recently raised, with task manager and management console being raised earlier.
As this is close to a beta, it is safer to just declare SysListView32 as bad for UIA for all applications.

Description of user facing changes
Reopens issues with SysListView32 and windows forms applications
Fixes issue with reading Reliability History, and potentially also resource monitor.

Description of development approach
declare SysListView32 as bad for UIA for all applications.
@LeonarddeR LeonarddeR deleted the syslistview branch August 23, 2025 06:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

dotnet 7, winforms, _get_columnCount is not implemented

6 participants