Aaron Preece

For decades, many desktop screen readers have had the ability to navigate in multiple different modalities. Primarily, whenever you use a screen reader, you’re going to be navigating using the system focus. So whenever you move, the system focus changes. For example, when you use things like Tab and Shift+Tab to move between elements, the arrow keys, and so on, you’re using the system focus. If you’re on your desktop and move around with the arrow keys to read the different icons, you’re moving your system focus.

In addition to this, most screen readers have a method for exploring the screen without moving the system focus. One of the most well-known of these is the JAWS cursor, which has been present in the screen reader for many years, as well as Narrator’s Scan Mode. These two in particular are quite intuitive and natural to use. One that is equally powerful but significantly more complicated is Nonvisual Desktop Access (NVDA’s) Object Navigation. Available in NVDA nearly since the beginning, this has been the tool for navigating accessibility issues on Windows prior to the advent of options like Windows OCR or AI. Object Navigation is powerful, but that power comes with complexity, and in some ways completely turns common navigation structures on their head. For this article, we’ll be exploring how Object Navigation works, how it can be used, and what quirks and tricks can help you get the best use out of the feature.

This article presupposes basic knowledge of how a screen reader functions on Windows, and generally how the Windows operating system and programs are structured.

Understanding Object Navigation

To NVDA, everything currently open on your computer is seen as an object containing smaller objects. This even goes for large elements like program windows or your desktop. With Object Navigation, you can navigate freely among all available objects seamlessly, even if they are in a window not currently displayed on your screen. As mentioned, in this navigation method everything is an object. So a program window is one large object that then contains other objects such as the menu bar, program content, toolbars, etc. Each of those objects then contains even smaller objects. For example, a toolbar can be entered and contains buttons as individual objects under the main toolbar object.

This also goes for things like lists, where the list is a singular object that can be entered to see the individual list items, each of which are their own smaller objects. Essentially, think of your desktop as one gigantic inverted tree with continually smaller branching pathways into smaller and smaller objects as you enter various windows.

For this article, we will focus on commands for using Object Navigation in desktop mode (though laptop mode is also available, it requires more keys to be pressed). See Object Navigation in the NVDA Quick Start Guide or section 5.4 of the NVDA User Guide for a table of commands that include both laptop and desktop keys.

When using Object Navigation, you’ll primarily be using the NVDA modifier key in combination with various numpad keys:

  • NVDA+numpad 8 goes to the containing object (essentially up one level in the tree).
  • NVDA+numpad 2 goes into the object (down to a smaller level).
  • NVDA+numpad 4 goes backwards on the same level of the tree (previous object).
  • NVDA+numpad 6 goes forward to the next object at the current level.

The way I think of them is: 8 goes up, 2 goes down, 4 goes left, and 6 goes right.

To check what object is currently focused, press NVDA+numpad 5. To activate the object you’re currently on, press NVDA+numpad Enter.

By default, the navigator object is always placed on whatever you have focused with your system focus. Worded in settings as “follow system focus,” it’s possible to turn this off — but in testing, doing so essentially makes Object Navigation unusable, so I don’t recommend it. However, there is an option in the settings called Simple Review Mode, which removes structural elements from Object Navigation, making it more efficient to use. I highly recommend turning this feature on for more understandable and quicker navigation. To do so, go to the NVDA menu > Preferences > Settings > Review Cursor > Simple Review Mode check box.

When navigating with Object Navigation, every time you enter a new object by pressing NVDA+numpad 2, you’ll be placed on the far left of all the objects inside the object you just entered. For example, if I find a list on a website with Object Navigation and navigate down into it with NVDA+numpad 2, I’ll be placed on the first item in the list. If I navigate back up to the previous level by pressing NVDA+numpad 8, I’ll be back on the list object.

Another command I personally find quite helpful is to route the mouse cursor to the navigator object and click it. Sometimes you’ll find that elements aren’t registering NVDA activations even through Object Navigation. To do this, find the navigator object you want, then press NVDA+numpad Divide. Now you can press numpad Divide alone to simulate a left mouse click. I’ve found this very helpful when running into accessibility issues.

Further discussion would be beyond the scope of this article, but in some cases routing the mouse cursor doesn’t quite place it on the object. In these cases, I personally found the Golden Cursor add-on quite helpful, since it allows you to move the mouse with keyboard commands and receive feedback. If you run into this problem, it’s worth a look in the NVDA Add-on Store. To get there, go into the NVDA menu > Tools > Add-on Store.

Example: Navigating NVDA Settings

Now that we’ve discussed how Object Navigation functions, I’ll give an example of how it works in practice and what I see as I press different keys. For this example, I’ll be using the NVDA Settings dialog.

I have the Settings window open with my focus on the “General” option in the list of settings categories. To check my navigator object position, I first press NVDA+numpad 5, which reports “General list item, focused, selected, 1 of 25.”

To make sure I’m at the top object in this settings dialog, I press NVDA+numpad 8 a couple of times. First I hear “Categories list.” Pressing again, I hear “NVDA Settings, General, normal configuration dialog.” If I press it once more, I’m at the entire containing window: “NVDA Settings, General, normal configuration window.” From here, I could navigate to another window entirely, even though the Settings dialog is still in focus.

Now I want to find the start of the Settings dialog. I press down from the window object and I’m placed on the Minimize button, the first contained object. I then press numpad 6 until I get to the NVDA Settings dialog item I saw earlier. Once here, I press NVDA+numpad 2 to go back into the dialog proper and I’m placed on the Categories object. This simply says “Categories” and not “Categories list,” so if I press NVDA+numpad 2 once more, it tells me “no objects inside,” since this is just the label and not the actual list.

I go right once more with NVDA+numpad 6 and hear “Categories list.” Now I know I can press NVDA+numpad 2 to go to the first item in the list, and I hear “General, 1 of 25.” If I want to activate the “Speech” item using Object Navigation instead of the arrow keys, I can press NVDA+numpad 6 to move focus to “Speech,” which reads “Speech, not selected, 2 of 25.” I can then press NVDA+numpad Enter to activate it. Now “Speech” is selected without me using the arrow keys at all.

Limitations and Quirks

In this example, things worked as intended, but because objects are constantly changing on Windows, Object Navigation can sometimes be finicky. As a quick example: whenever I went to the entire window object in the previous example, I navigated to an open browser window I had behind it (since it was to the right in the object tree). But once I did so, I could no longer navigate back to the Settings view. It would only show the open browser windows at that level of the tree. It’s unclear why this happens, but I assume it has something to do with how the NVDA Settings window is presented. Luckily, I could refocus the Settings window to place the Object Navigation cursor where I wanted it.

The layer of Object Navigation where windows, the taskbar, and other elements reside can be odd. For example, I frequently see many “unknown” or “unlabeled” objects that aren’t actually there. This isn’t necessarily a problem, but it’s something to be aware of.

Often you’ll find that navigation stops recognizing objects or won’t let you move in a direction it normally should. For example, sometimes you may be able to move forward but not backward. In this case, since the navigator object should usually be following the system focus, you can simply make some movement on your computer to refocus things.

It’s important to note that Object Navigation requires that the objects in question have been coded so that NVDA can see them. As mentioned, one possible use is on a website when something hasn’t been coded properly to recognize NVDA’s traditional activation methods. You can sometimes enter the object itself, find the distinct internal object you actually need to click, and then activate it with NVDA+Enter. If that still doesn’t work, you may have to route the mouse cursor to it and click that way instead.

Even though things can be finicky, the ease of re-focusing Object Navigation by moving the system focus means it’s still worth learning. Getting out of binds is usually straightforward.

Everyday Uses

I use Object Navigation on a near-daily basis without even realizing it, and I’ve found many uses for it. We’ve talked about several in this article already. If you need to read the text of a dialog or revisit it when NVDA normally can’t access it using the keyboard, Object Navigation is perfect for directly focusing content that might otherwise be unavailable.

For example, in a browser, sometimes you’ll get pop-up alerts at the top of the screen (such as requests to enable your microphone for video conferencing). If you need to revisit the content of these alerts, Object Navigation can help you find them and even click the buttons within.

In addition, one of NVDA’s most powerful features is its ability to perform Optical Character Recognition (OCR) on the navigator object using Windows OCR. Simply press NVDA+R, and NVDA will scan the navigator object and place you in a document-style view where you can use the arrow keys and document navigation commands to read whatever it found.

One of my most frequent uses of Object Navigation is to make sure the navigator object is set to the entire window or entire screen before doing OCR, so I capture everything and not just a single element.

Outside of the web, in many programs, a lot of content isn’t keyboard-navigable since it’s essentially display-only. You can often use Object Navigation to read this content directly. One of my most common use cases is reading text-based information that isn’t keyboard-accessible in the Windows Settings app, making it invaluable if I want to change or review settings I’ve not touched before.

While writing this article, I ran into a situation where I couldn’t access a dialog as I normally should with NVDA. Without even thinking twice, I started navigating through the dialog with Object Navigation and clicked the button I needed — completely bypassing the issue.

If you’ve never used Object Navigation before, I highly recommend giving it a try. It can be an invaluable tool in your accessibility toolkit and synergizes well with even more advanced accessibility features like OCR.

Author
Aaron Preece
Article Topic
Accessibility Tips and Tricks