New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Report unavailable (disabled) objects during object navigation #15785
Conversation
@CyrilleB79 does this mean that the unavailable state will no longer be missed for the unavailable items in menus anymore? if yes, it is grate! if you don't understand what i mean, |
It's not very clear to me what you do and expect. Indeed, when using Numpad1/3/4/6/7/9, it is not expected to hear the shortcut key since the shortcut key just belongs to the text "Mute remote": the "M" letter is just underlined visually so that sighted people can see the shortcut. IMO, to clarify your expectations, it would be useful to open a new issue with the template so that you can describe how you reproduce the issue step by step, what you expect and what you get. If this PR fixes it, I will link it and it will be closed when this PR is merged. |
@CyrilleB79 the thing i said is a simple thing: if you step on a unavailable item, moving object navigation doesn't announce that this option is unavailable, it just announces that option's name and that's all: it is clear now? |
@CyrilleB79 or can you give me a build that is .exe file that contanes this pr on it, i will install and confurm it my self if you stil didn't properly understand what i mean. thanks |
@amirmahdifard,, the build of this pR is here. Also I doubt this fixes your issue, so I suggest you open a specific issue. |
Is this information available also when tabbing through dialogs? I mean when moving system focus? If not, this might be worth looking into, in addition to object navigation. |
I'm not certain, but it's worth noting that entire windows can be unavailable. For example, if there's a modal dialog open, the app window behind that dialog is unavailable. This is a little different to the case of a control being unavailable. In the case of an unavailable window, the window is usually obscured by foreground content in such a way that it's not really visible to sighted users either, even though they can see bits of it in the background. To put it another way, the fact that they can see it is more presentational than semantic. If we care about this, we could make an exception for top level windows and clients.
The Run dialog is an easy example. Any Win32 dialog should trigger this really.
I don't think so. This method is used to get caption text from a dialog. Caption text probably shouldn't be greyed out anyway, but if it is, I don't think it's useful to read that as part of the dialog description. The user can still object navigate if they want to explore it.
Tricky. On one hand, relying on simple review is not ideal for an add-on; it has always had the propensity to be less performant and consistent. On the other hand, the real object hierarchy is pretty complex and we've never given specific guidance that add-ons shouldn't do this. My gut feeling is that this should not be considered an API breaking change, but I can also follow the reverse perspective.
We don't control system focus. The system or app does. I don't think we should mess with that, and doing so would make things less efficient for the user. Normally, the user doesn't want to interact with unavailable things. This change just gives them a way to perceive them if they want to explore further with the review cursor. |
I have the feeling that this change should be hidden behind a feature flag for broader testing first. |
@CyrilleB79 i don't need to test this only with nvda remote, i just used it as an example: i can test it with windows nt services list context menus where stat or stop options are unavailable due to that service is already running or it is stopped. |
@CyrilleB79 no, it doesn't fixes the issue: i focused on an unavailable option and i read it using the numpad 6 key to look at bottom of that option word by word, and i only heard that option's name: i didn't hear unavailable at the end of it. |
and also, i noticed a huge problem with this build: it was my first time trying nvda 2024.1 snapshot: windows nt service is inaccessible! my windows is Windows 10 22H2 (AMD64) build 19045.3693 |
This is normal as pull requests builds are not signed. They are therefore not allowed to perform administrative tasks. |
As asked before (#15785 (comment), #15785 (comment)), please discuss this further in a dedicated new issue. The current PR is not aimed to solve the issue you are describing. Thanks. |
@Adriani90, what is or is not focusable and reachable with tab/shift+tab is defined by the system or the application, not by NVDA as explained by @jcsteh; it's a matter of system/application design, not NVDA's design. Maybe in some very specific cases of poorly designed application it may be interesting to override the native tab order. In any case, it's not the subject of this PR and should be discussed further in a dedicated ticket or PR. If you open such a ticket, please provide a specific example with context. |
Thanks @jcsteh and @LeonarddeR for your valuable feedback.
I have tested with what I can see with my low vision in notepad, when the modal "Do you want to save changes" dialog is open. The main Notepad window is not obscured but fully greyed out. Moreover, one part of the Notepad main window is hidden by the modal foreground dialog. Unless there is a strong reason to do so, I am rather reluctant to make a special case for top level windows. Object navigation already allows to navigate to hidden windows, e.g. all the top level windows behind a maximized foreground application window. The fact that the window is greyed out is not a strong argument in my opinion.
Thanks for the example. The Notepad's "Do you want to save changes" dialog is another one.
OK. With your example, I understand better now. I agree with you to continue to to filter a greyed item in the process to determine the dialog's caption. If one day we encounter a problematic dialog with greyed out caption textn which seems very unlikely, we may reconsider this on the basis of a concrete situation.
Two points:
I am not opposed to this (if NVAccess asks it), provided that the changes are tested in NVDA alpha stage. If 2024.1beta is too near, we may extend the test period to NVDA 2024.2 alpha stage. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @CyrilleB79
I don't think the API breaking warning is necessary, to answer (5). |
|
@michaelDCurran I hope I correctly match your answers with my questions. Answer to question 4:
All OK. I had not done any changes on this anyway since I have already been convinced by @jcsteh's explanation. Answer to question 3:
Thanks for this clarification. Anyway, I had not done any change. Answer to question 2:
OK
I do not see the advantage to do so:
@michaelDCurran, in which situation would you be forced to navigate the whole subtree of a disabled window?
With my low vision, I seem to see that children of a disabled list are still visible. Confirmation with good eyes needed however since the contrast is very low due to greying. So @michaelDCurran, do you still expect something from me on this PR? |
I have not yet looked at the code myself. But based on your answers, I
don't think anything needs to be changed.
Message ID: ***@***.***>
|
@CyrilleB79 wrote:
1. continue to skip over unavailable objects with a role of window, so that we do not needlessly navigate into entirely unavailable trees.
I do not see the advantage to do so:
* If you are using a keyboard land on a disabled window with object navigation, you can just press NVDA+pavnum6 to skip this window and explore the next
window. You do not need to navigate the subtree of the disabled window.
It is easy to miss the "unavailable" indication. Object nav is tricky enough for
new users (and sometimes even experienced users who haven't used it much),
without adding the possibility of accidentally moving into an unavailable window
tree.
Let me ask the question a different way though.
Since this PR adds the new behavior of possibly navigating unavailable window
trees, which didn't previously exist, the question is what value does this have?
If the answer is none, and it is easy to prevent with a simple if check on
object type and status, then why shouldn't NVDA prevent such useless navigation
from accidentally happening?
|
First, it is not written very clearly in this discussion, but we actually speak of skipping only disabled top-level windows, not all disabled windows. First reason to not skip disabled top-level windows is to simplify how object navigation works. It is more consistant to have all objects navigable (enabled and disabled) rather than having all object navigable except in the special case of disabled top-level windows. Moreover sighted people are able to see disabled windows (moving a partially masking foreground modal window if needed). I do not see a good and strong reason why blind people should not have access to this information. An example where this could be useful is the following. I take quick notes in various Notepad windows without even bothering to give a file name to it. When I close Windows, I am asked if I want to save the changes. Whenn the "Do you want to save" window is focused, I can use the object navigation to have a quick check on the disabled window behind to see for which instance of Notepad the question is asked. But more generally, I would say that we should not restrict people's creativity, and thus I do not think that I have to exhibit another specific use case for that if you find the previous one not enough realistic or useful. At last, regarding the risk to be lost in the object hierarchy, I consider that leaving the foreground window is from far the highest risk to be lost (tracked by#7759). Once you have left the foreground window, either you navigate in enabled or disabled windows does not matter so much. |
@CyrilleB79 wrote:
An example where this could be useful is the following. I take quick notes in various Notepad windows without even bothering to give a file name to it. When
I close Windows, I am asked if I want to save the changes. Whenn the "Do you want to save" window is focused, I can use the object navigation to have a
quick check on the disabled window behind to see for which instance of Notepad the question is asked.
I would be interested in @michaelDCurran's take on this, as it was he who
originally suggested the disablement I talked about, but I am somewhat persuaded
by your example and points.
Although I usually know what's in a tab before I try to close it, and it is easy
to hit escape and review the window conventionally. So I'm not sure your example
leads to a "must have" use case, but as an example of what may be more useful
under other circumstances, I can at least recognize what you are going for.
|
@CyrilleB79 hi, |
@CyrilleB79 before this pr, unavailable options were navigated during object navigation only when simple review mode was disabled. |
@CyrilleB79 i want to know what's difrent between simple review mode disabled or enabled? thanks |
From the dedicated paragraph in the User Guide:
In the future, for questions regarding the current behaviour of NVDA, please think to look at the User Guide or ask on general NVDA mailing list. Thanks. |
@CyrilleB79 ok, really thanks. |
Link to issue number:
Closes #15477
Summary of the issue:
In a GUI, disabled (greyed) items are visible to sighted users. So unless there is a good reason, blind people should be able to see them too. Greyed items convey meaning in a GUI and not being able to see them causes people to miss information conveyed by the GUI.
For example in the new audio panel, if you run NVDA from source (or probably portable), the audio ducking item is greyed out (disabled). Being allowed to find the disabled item informs the user that NVDA has an audio ducking options but that this options can not be enabled.
Unfortunately, disabled controls are ignored during object navigation.
This is also inconsistant with document review mode where disabled objects are not ignored.
Description of user facing changes
During object navigation (complete, simple or flattened), disabled object will not be ignored anymore.
Description of development approach
UNAVAILABLE
topresType_unavailable
.isUsableWindow
does not returnFalse
for windows that are not enabledAdditional notes and questions for the reviewer
UNAVAILABLE
topresType_unavailable
anymore, the namepresType_unavailable
may be considered confusing. I may change it if you want but this will be an API-breaking change (maybe it's not worth it); moreover, I have no idea of suitable name.source/NVDAObjects/IAccessible/mscandui.py
has been modified to discardcontrolTypes.State.UNAVAILABLE
. I do not know the reason why this was done and I wonder if it is still applicable after the modifications of this PR. @michaelDCurran (again), any hint?source/NVDAObjects/behaviors.py:
"We don't want to handle invisible or unavailable objects" (seeDialog.getDialogText
). I have not found dialogs where this method is called to test, but I imagine that I should also remove unavailable object filtering from there?Testing strategy:
Known issues with pull request:
None
Code Review Checklist: