Skip to content

Enforced UIA implementation of Object Explorer window#9313

Closed
francipvb wants to merge 9 commits into
nvaccess:masterfrom
francipvb:i9311
Closed

Enforced UIA implementation of Object Explorer window#9313
francipvb wants to merge 9 commits into
nvaccess:masterfrom
francipvb:i9311

Conversation

@francipvb

Copy link
Copy Markdown
Contributor

Link to issue number:

Issue #9311

Summary of the issue:

The objects tree of the object explorer was not working correct in Visual Studio 15.3 and up.

Description of how this pull request fixes the issue:

I made some research and figured out that the three panes of the object explorer are being instantiated as IAccessible objects.

Basically, this enforces instantiation of all objects as UIA instances if it detects a version up from 15.3.

By doing this, NVDA is enforced to pick UIA versions of these objects, which work better.

Testing performed:

Unfortunately, I can't test with more systems than my one because I didn't set up VMs for other configurations.

Known issues with pull request:

The only problem is with level detection if the expanded is the last item on the tree, but this is an issue that occurs also with narrator.

I will keep doing research on this to see if it can be solved somehow.

Change log entry:

Section: Bug fixes

@LeonarddeR LeonarddeR left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

  1. Please revert the changes to the changes file. This will be done around merge time.
  2. This implementation is a bit aggressive.Is there a particular window class in use for these inaccessible items? You could get the windowClass of a handle with winUser.getClassName(hwnd)

@francipvb francipvb changed the title Enforced UIA implementation of all UI elements in Visual Studio 15.3 and up Enforced UIA implementation of Object Explorer window Feb 22, 2019
@francipvb

Copy link
Copy Markdown
Contributor Author

Hello @LeonarddeR

I made the changes you requested.

Cheers,

@LeonarddeR

LeonarddeR commented Feb 25, 2019

Copy link
Copy Markdown
Collaborator

I've had another look and also tried it in practise now. Honestly, I'm not convinced that this is the right solution:

  1. When expanding/collapsing tree items, the new state isn't automatically reported.
  2. This pr also enforces UIA for RICHEDIT50W, which is not necessary.

I'd rather see an implementation based on MSAA. Looking at the developer info when UIA is enforced, the MSAA proxy is used and there is no framework identifier, so pretty sure that this is native MSAA and therefore should be treated a such.

@francipvb

Copy link
Copy Markdown
Contributor Author

Hello @LeonarddeR
I received a response from Microsoft saying that they filed a bug with the information you provided in this comment.
I Will remove the text view class from the check, but the tree view needs this temporary fix until they fix this annoying problem.
Without this, it is impossible to use the object explorer to review a library object tree.
About the Richedit, I've added this because it has links to navigate between objects, but unfortunately they aren't reported neither with the UIA implementation.
Cheers,

@LeonarddeR

Copy link
Copy Markdown
Collaborator

... the tree view needs this temporary fix until they fix this annoying problem.

Are you sure that this can't be fixed when using MSAA?

@francipvb

Copy link
Copy Markdown
Contributor Author

Hello @LeonarddeR,

Are you sure that this can't be fixed when using MSAA?

At least I don't know how to, my knoledge is not enough, I think.

Regards,

@francipvb

Copy link
Copy Markdown
Contributor Author

Hello again @LeonarddeR

I was doing some tests against visual studio's object explorer, particularli testing the IA2 implementation of the object explorer trees

Here are the results:

  • event_gainFocus are called only for top-level items.
  • event_selection is called only for top-level items, too.
  • These events are called for the next top-level item even with an expanded item in place of the child.
  • However, the correct item is selected when you focus the tree from the menu bar, a curious behavior.

I don't know so much about IA2, but I cannot see a way to solve it without replacing the IA2 implementation by the UIA ones.

Note that this applies to Visual Studio 2019 too, same errors.

Cheers,

* Removed the classname for richedit document.
* Added support for visual studio 2019.
@francipvb

Copy link
Copy Markdown
Contributor Author

Hello @LeonarddeR

I found a way to solve this without enforcing UIA implementation.

The only thing is the treeview level, I don't know how to instruct NVDA to report it, but the rest works as expected.

Cheers,

@francipvb

Copy link
Copy Markdown
Contributor Author

Closing this because it is not valid anymore.

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.

2 participants