Skip to content
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

Accessibility Shortcuts Portal Proposal (org.freedesktop.portal.AT.Shortcuts) #1046

Open
TTWNO opened this issue Jun 29, 2023 · 63 comments
Open
Labels
needs discussion Needs discussion on how to implement or fix the corresponding task new portals This requires creating a new portal interface

Comments

@TTWNO
Copy link

TTWNO commented Jun 29, 2023

The Problem

Accessibility is broken in a big way on Wayland. This is because intercepting and re-transmitting global keybindings is no longer permitted, and fair enough! What a security nightmare!
In order to bring security to "normal" applications, the Global Shortcuts portal was proposed, adopted, and even implemented by KDE (so I hear).

Assistive technology, however, is traditionally considered a component with "exceptions" to the rules: "yeah sure, just snoop the keyboard", "it's inherently insecure so who cares". This is because in the most obvious case (a screen reader), it actually has access to what is on your screen anyway (any text, of any document, webpage, terminal output, etc.) and therefore often seems insecure be definition.

In an effort to integrate accessibility into Linux in a way that does not inherently require insecurity, just permission, we've turned to portals.

The Solution

The most viable path for permissions-based accessibility in Linux is to model it after other systems which have already done the hard work of finding the (mostly) right abstractions.
In this case, I'm going to recommend we emulate the behaviour of Android, since it's: a) already Linux-based, b) has an accessibility permissions system, and c) sandboxes most applications from the operating system—which seems to be the direction of Linux as well; the only difference for Linux is that we'll have both native applications and sandboxed applications to deal with.

After reaching out for advice over in the GNOME accessibility Matrix room, and some chats over on a wayland-protocols issue, there seems to be quite the consensus on implementing the global shortcuts portal for assistive technologies to be able to do their job.
However, the existing global shortcuts portal does not have quite all the features/permission granularity requirements to use an assistive technology at this point.

The Requirements

There are a few requirements for an accessibility portal:

  1. The user must be asked once whether the application should be allowed as an assistive technology. The "never", "just this time", and "always" options seem appropriate here (remember what Android displays when asking for your location).
  2. After giving permission, the assistive technology should be able to have a similar API to the global shortcuts API, but with some more stringent requirements:
    • It must be allowed to bind and unbind actions at will.
    • It must be able to bind to any input event, even ones which would not be "normally" expected. (i.e., Insert + a, Capslock + x, or h all on its own).
    • Since a screen reader often adds and removes the same set of events often, and quickly, it may be worth allowing the assistive technology to define a map to a list of shortcuts ({sa(sa{sv}}), then allow the set of bound shortcuts to be added to or removed in bulk by using the string key of that map. These changes often happen multiple times per second, and are somewhat time sensitive, since if a user presses a key combination like Capslock + a (toggle browse mode), immediately followed by h (a key used in browse mode), a screen reader user would expect that h is already bound, even if it was not before the Capslock + a.
  3. It must have a way for an implementer to not have to show the prompt to a user at all and simply accept it outright as a default assistive technology. If a screen reader can not start properly, bind the keys required, have access to the contents on the screen, etc. then, someone who needs a screen reader will not be able to select an option without sighted assistance (this is very, very bad).
  4. All events bound via this portal must have priority above the global shortcuts portal. A currently running application should never have the ability to have a shortcut defined that an assistive technology wants. This is also something which can cause the need for slighted assistance (again, very bad).

I'm looking for comments, implementation concerns, links to related issues, requirements and edge cases I have not yet covered, and to gauge general interest in this proposal.
Once I've chatted with a few of you here on the issue page, or by email ([email protected]) if you don't have a GH account, I'll begin a portal draft, go through RFC, and see if we can get this hammered into a standard.
I will help with the implementation of the portal.

(I am being payed to work on this process, including implementation; responses will be fast during UTC-6 working hours.)

@TTWNO
Copy link
Author

TTWNO commented Jun 29, 2023

As an aside, I expect many more accessibility features will want a portal implementation at some point. For example, if an application already has the permission to be an assistive technology, it may want to zoom in, or move a user's mouse around (not read the position, I'm aware of the mouse position idea). Both things that are traditionally at least able to be triggered by the screen reader, even if the screen reader itself does not provide the functionality.

@tyrylu
Copy link

tyrylu commented Jun 29, 2023

And, when talking about a screen reader portal, we might allow the screen reader to request a mouse event for a window at a particular window coordinates of that window, you unfortunately need that operation for some broken websites.

@TTWNO
Copy link
Author

TTWNO commented Jun 29, 2023

And, when talking about a screen reader portal, we might allow the screen reader to request a mouse event for a window at a particular window coordinates of that window, you unfortunately need that operation for some broken websites.

Mouse events at particular coordinates are best handled by AT-SPI, not portals.

@jadahl
Copy link
Collaborator

jadahl commented Jun 29, 2023

The user must be asked once whether the application should be allowed as an assistive technology. The "never", "just this time", and "always" options seem appropriate here (remember what Android displays when asking for your location).

A counter proposal for this, that makes it harder for applications to "sneakily" make themself accessibility technology by applying bad design: instead of "requesting accessibility", have the accessibility utility via the desktop file advertise that they implement a certain aspect of accessibility. With that, require Settings (or the equivalent in e.g. KDE) to make these discoverable and possible to explicitly enable.

A accessibility application would instead of nagging the user with "please let me eaves drop on you" instead issue some request via the portal to open the accessibility setting, instructing the user to actively select $APP as the "screen reader" for example.

This is not new, it is how some permissions are dealt with in Android.

@jadahl
Copy link
Collaborator

jadahl commented Jun 29, 2023

it may want to zoom in

Zooming in can only practically be implemented by the compositor itself. In GNOME there is possible via the a11y menu, but could perhaps be something that can be triggered via a potential accessibility portal API.

@TTWNO
Copy link
Author

TTWNO commented Jun 29, 2023

A accessibility application would instead of nagging the user with "please let me eaves drop on you" instead issue some request via the portal to open the accessibility setting, instructing the user to actively select $APP as the "screen reader" for example.

This shouldn't need to make a screen reader your default to have it usable. I don't mind a combination of these features where:

  1. The default screen reader does not need to ask permission explicitly (i.e., the implementer can say "you are my default screen reader, go ahead").
  2. Any other assistive technology that would like to launch would be able to ask explicitly.

@TTWNO
Copy link
Author

TTWNO commented Jun 29, 2023

Zooming in can only practically be implemented by the compositor itself. In GNOME there is possible via the a11y menu, but could perhaps be something that can be triggered via a potential accessibility portal API.

Fair. And I brought it up, but let's leave this for another portal.

@jadahl
Copy link
Collaborator

jadahl commented Jun 29, 2023

This shouldn't need to make a screen reader your default to have it usable. I don't mind a combination of these features where:

Correct me if I'm wrong, but I assume one would only have one screen reader active at any point in time, as otherwise I imagine it'd be quite a noisy experience. So if you have a default bundled screen reader, it'd already be selected, thus wouldn't need to do anything to work. The only time you need to change that setting is if you have another screen reader you want to change to.

If you have non-screen-reader like assistive technology that needs to have the same level of "eaves-dropping-ness", then that would need to go into that Settings panel, but installing such a thing would mean it would be discoverable, and possible to enable.

There is a general problem with "nag" like permissions, which is that the user sooner or later "gives up" or doesn't care if there is a yes/no permission. In other words, they don't really help. Portals are, when possible, designed to avoid this issue. For access to files, a file selector is always presented, for sharing the screen, one have to select the screen to share, and so on.

For something as problematic as getting an introspected view of everything going on on the computer we should try hard to avoid ending up with a Yes/No like dialog, and taking inspiration from Android, making it explicit configuration one is asked to do seems like a good way to mitigate things.

@TTWNO
Copy link
Author

TTWNO commented Jun 29, 2023

There is a general problem with "nag" like permissions, which is that the user sooner or later "gives up" or doesn't care if there is a yes/no permission. In other words, they don't really help. Portals are, when possible, designed to avoid this issue. For access to files, a file selector is always presented, for sharing the screen, one have to select the screen to share, and so on.

Agreed..... but this makes my situation (where I switch back and forth between two screen readers for testing) an absolute nightmare. I agree from a normal users' perspective this makes sense, though.

EDIT: As long as it is possible for a distribution to ship with a default screen reader, then automatically run that without user interaction, that's fine by me. I'm sure as a dev, I can find a script that'll just swap this setting for me.

@jadahl
Copy link
Collaborator

jadahl commented Jun 29, 2023

Agreed..... but this makes my situation (where I switch back and forth between two screen readers for testing) an absolute nightmare. I agree from a normal users' perspective this makes sense, though.

A rather peculiar use case :) but I imagine this could be scriptable in one way or the other, in most DE:s, e.g. a gsetting in gnome.

@jadahl
Copy link
Collaborator

jadahl commented Jun 29, 2023

EDIT: As long as it is possible for a distribution to ship with a default screen reader, then automatically run that without user interaction, that's fine by me. I'm sure as a dev, I can find a script that'll just swap this setting for me.

This is critical yes, but doable with the solution I'm suggesting, I believe.

@TTWNO TTWNO changed the title Accessibility Shortcuts Portal Proposal Accessibility Shortcuts Portal Proposal (org.freedesktop.portal.Accessibility) Jun 29, 2023
@smcv
Copy link
Collaborator

smcv commented Jun 29, 2023

makes it harder for applications to "sneakily" make themself accessibility technology by applying bad design

I think this is really important. Android's accessibility portal-equivalent literally does get used by malware (for example), precisely because the interface is so powerful.

@Mikenux
Copy link

Mikenux commented Jun 29, 2023

The first question is: Are being aware of input events and emitting input events (shortcuts) valid actions to say for sure that an application has accessibility features? If not (which is the case here), then an app certainly can't request accessibility access (whether through a dialog or by opening the accessibility settings). This would be a lie.

(if relevant) The second question is: Is it okay to let an app potentially control the system or other apps, even if asked? Example: accessibility can send auto-generated shortcuts within apps. I don't think so.

@jadahl
Copy link
Collaborator

jadahl commented Jun 30, 2023

This is an attempt to summarize a rough proposal that was discussed on the GNOME a11y Matrix room yesterday:

Assistive Technology

Assistive Technology (AT) are rather special when it comes to the type and breadth of access they need to users system. They need to be able to read out loud what widget is focused in what window is focused, and what letter is entered in what text field. From a privacy and sandbox perspective, the needs of AT are very problematic, as they for all practical purposes need to perform total surveillance of everything user "sees" and does. It would be disastrous if a rogue application would get the same level of access that an AT gets, but at the same time, people may want to install additional or replace existing AT to help them with using the computer.

So, in one way or the other, if we want AT to be distributable in a safe and relatively sandbox friendly way (e.g. Flatpak), we need a portal that can handle access to the resources the system has to make available for the AT to work. At the same time, we need to be very careful in exactly how a user can use install and use AT, without accidentally enabling malware to get the same level of access to resources regular applications shouldn't have access to. At the same time, it needs to be easy enough and discoverable how to e.g. switch to another screen reader or adding additional AT.

Access types

Initially, two types of access types have high priority, and are critical to AT, that are focused upon first.

Priority keyboard shortcuts

Previously, in X11, this has been implemented by grabbing key events from the X server, but doing so is problematic, and seen as something very undesirable in Wayland compositors, as having to round trip for key events to one or more ATs is very problematic.

Instead, a solution to this is to provide something similar to org.freedesktop.portal.GlobalShortcuts, with the difference being that the AT freely can register keyboard shortcuts that unconditionally and immediately is respected by the display server.

As with the global shortcuts portal, the display server would translate a stream of key events into triggered shortcuts, that the AT would then be signalled about.

For this the shortcuts xdg-spec might need to be expanded to handle the use cases needed by ATs.

This would avoid any display server AT round trips, but still allow shortcuts for ATs to have priority over other shortcuts on the system.

Access to the accessibility bus

The accessibility bus is a dedicated D-Bus bus where applications describe what the user is currently interacting with. Access to this is the most problematic, as it allows the application to fully introspect what is going on on the computer, including reading any text, reading everything the user types, etc.

I'll leave the details of how to practically open such a bus, but in one way or the other, e.g. by opening file descriptors, it could be done with API on an accessibility portal.

Handling access granting requirements

As mentioned, we must try hard avoid rouge application that want to trick users into letting them spy on them, but we also need to make it possible to let distributions pre-install a screen reader that should have access without needing to query the user, as without said screen reader, the user wouldn't be able to interact with the computer at all. What this means in practice are these things:

  • We cannot grant access by default to any installed, as that would mean any application can freely spy on the user as much as they want.
  • We should avoid designing a portal that depends on portal dialogs asking the user to grant access. The reason for this is that users that get nagged with dialogs practically asking them to "make things work" will eventually give up and just accept what the application is asking.
  • We must make it possible for distributions to pre-install an AT application, that has been granted enough access to e.g. act as a screen reader.
  • It'd be good if e.g. an AT settings app could still "guide" and help the user how to grant access.

Access handling proposal

Make giving access to an AT an explicit operation similar to other system configuration, and not something directly requested by the AT application itself.

The way this would work is making it possible to discover, switch and add AT via the accessibility panel of the settings application used in the desktop environment.

Discovery

Discovery would be handled by AT applications adding a field to their .desktop file declaring that they provide AT. The settings app would for example show a list of discovered ATs, and add a way to exchange one AT with another (e.g. change screen reader), or add additional ATs (e.g. braille integration software). Behind the scene, the settings app would configure e.g. the permission store with access rules. Ideally settings apps should handle "confirming" a change, to make sure one doesn't switch to a screen reader that doesn't actually work.

The desktop file and the new field would have no use other than helping with discovery.

The primary way after having installed a new AT would be to go to the accessibility panel of the settings app, and switch to or enable the newly installed AT.

Assisted discovery

There might be desirable to allow a window used for e.g. configuring an AT to assist the user with making it easy to find the Accessibility panel in the Settings app. This could work by for example having a OpenAccessibilitySettings() method on the portal, or a generic portal for opening some particular Settings panel.

Note that, in theory it would be possible for portal backends to implement "give me permission"-dialogs with such method call, but the advice would be not to, given the reasons listed earlier.

Granularity

Having granular access control might be desirable, and doing so is not necessarily more complicated. A DE might want to simplify things and e.g. give access to both unrestricted keyboard shortcuts and the accessibility bus with a single option, while others might want to give more granular control up front. Manipulating the permission store via third party applications (e.g. Flatseal) would be possible if the permission store is used in a portable manner.

Sane defaults

Distributions should be able to pre-install a screen reader, and make it possible to use without any user interaction. With this model, this would be achievable by making sure distributions can pre-populate e.g. the permission store with any installed screen reader application, while ensuring it is launched in a way that makes the portal correctly identify the app ID it has. With the permission store setup for each new user, it should not matter if the screen reader is pre-installed as a flatpak, via a traditional package, or part of an immutable OS image, as long as it is launched correctly.

Development & testing experience

A concern raised with a method like this was the development experience for developing e.g. a screen reader, or testing different ones often; having to interact with Settings in a very manual way can be quite annoying if one has to do it very often.

This can be mitigated by making sure changing permissions possible via scripts. If permission handling is done using the permission store, this should be relatively simple. Improved xdg-desktop-portal documentation about how to run executable from the command line allowing portals to correctly identify the app ID correctly would also make things easy as well, and developers would not need to do much more than just running the executable.

Edit: added part about distribution default.

@TTWNO
Copy link
Author

TTWNO commented Jun 30, 2023

Thanks you, @jadahl ! This is a great encapsulation of what we discussed. I'm going to create a simple set of calls for the portal here, and see if there are further comments:

Methods

// if this fails, it is expected that the client will call AccessibilitySettings
CreateSession (IN  a{sv}     options,
               OUT o         handle);
// set all possible shortcuts this assistive technology will use;
// all shortcuts are disabled by default
SetShortcuts (IN  o         session_handle,
               IN  {sa(sa{sv})} shortcuts,
               IN  s         parent_window,
               IN  a{sv}     options,
               OUT o         request_handle);
// change active shortcuts used by the implementation
// since shortcuts are defined as a dictionary with a string key and list of shortcuts as a value, we can enable and disable them en mass via the keys
// this is seen as a convenience method, since ATs often change hundreds of keybindings within the span of a keystroke.
ChangeActiveShortcuts (IN o        session_handle,
               IN as          enabled_shortcut_lists,
               IN as          disabled_shortcut_lists,
               OUT o        request_handle);
// return a list of *all* shortcuts defined via this portal
ListShortcuts (IN  o         session_handle,
               IN  a{sv}     options,
               OUT o         request_handle);
// open an implementation defined accessibility settings panel, where additional assistive technologies can be granted permission to use this portal
// the lack of a session handle means this method may be called without the success of CreateSession, and a client will normally run this if RequestSession fails
AccessibilitySettings (IN a{sv}       options,
               OUT o         handle);
// request the name of the global accessibility bus
AccessibilityBus (IN o          session_handle,
               IN a{sv}        options,
               OUT o          request_handle);

Signals

Activated        (o         session_handle,
                  s         shortcut_id,
                  t         timestamp,
                  a{sv}     options);
Deactivated      (o         session_handle,
                  s         shortcut_id,
                  t         timestamp,
                  a{sv}     options);
ShortcutsChanged(o         session_handle,
                  {sa(sa{sv})} shortcuts);
ActivatedShortcutsChanged(o         session_handle,
                  as     activated_shortcut_groups,
                  as     deactivated_shortcut_groups);

And finally, the standard properties: version readable u.

Should this be a PR at this poiint? Continue the discussion there?

@Mikenux
Copy link

Mikenux commented Jul 1, 2023

Questions:

  • If the shortcuts can be changed without user approval, are they shortcuts such as "pressing" a button?
  • Are shortcuts managed by the system (i.e. the application cannot generate such an event by itself)?
  • Are there any other apps that could use this feature other than just for accessibility reasons?

As for accessing the accessibility bus, if that means accessing private information, then the user should be aware of that.

@TTWNO
Copy link
Author

TTWNO commented Jul 1, 2023

As for accessing the accessibility bus, if that means accessing private information, then the user should be aware of that.

Yes. The user would be aware of that by virtue of adding the application to the list of accessibility applications (which will be opened by the AccessibilitySettings method). And yes, the accessibility bus is what would allow an AT to read the contents of things of the screen.

Are there any other apps that could use this feature other than just for accessibility reasons?

An application that sets up realtime macro shortcuts could use this. They could set F8 to "bind new macro", then trap all keys, get a combination, followed by a set of keys to reproduce later. Then, set up an action with this protocol that would replay the sequence of keys via some other method. Niche, but not unheard of on other operating systems (Windows).

If the shortcuts can be changed without user approval, are they shortcuts such as "pressing" a button?

I may be misunderstanding the question, so feel free to correct me. Shortcuts are redefined based on context. So for example, the simple fact that a user is inside a document (web or libreoffice) would set different shortcuts than being in a simple GUI application. Being in a text box changes the shortcuts, your focus on certain types of items changes the shortcuts. It is extremely dependent on the current context, and would not generally change because a user "pressed a button".

Are shortcuts managed by the system (i.e. the application cannot generate such an event by itself)?

The AT should not generate an input event, or something which would become a shortcut, no.

@Mikenux
Copy link

Mikenux commented Jul 1, 2023

If the shortcuts can be changed without user approval, are they shortcuts such as "pressing" a button?

I may be misunderstanding the question, so feel free to correct me. Shortcuts are redefined based on context. So for example, the simple fact that a user is inside a document (web or libreoffice) would set different shortcuts than being in a simple GUI application. Being in a text box changes the shortcuts, your focus on certain types of items changes the shortcuts. It is extremely dependent on the current context, and would not generally change because a user "pressed a button".

Indeed, I was not clear.

Here's an example scenario: The "accessibility" app has access to all content, so knows when you type text, what actions you trigger, and may possibly misread things on purpose. Since it can reassign shortcuts at will, can we imagine that the app can assign the action "delete" or "press the button" (like a delete button) to a shortcut that you use frequently (but which is not the shortcut you defined)?

@TTWNO
Copy link
Author

TTWNO commented Jul 1, 2023

I suppose that would technically be possible, @Mikenux

@jadahl
Copy link
Collaborator

jadahl commented Jul 3, 2023

Methods

// set all possible shortcuts this assistive technology will use;
// all shortcuts are disabled by default
SetShortcuts (IN  o         session_handle,
               IN  {sa(sa{sv})} shortcuts,
               IN  s         parent_window,
               IN  a{sv}     options,
               OUT o         request_handle);

I think this is likely the only method needed regarding shortcuts, if the intention is for a11y shortcuts to always take precedence without any user interaction. It also means parent_window isn't needed, since there would never be any dialogs.

Might be useful to let the backend communicate what shortcuts it managed to set though, it cannot really be 100% unconditional. It'll depend on implementation abilities and a limited set of combinations (e.g. escape hatch) the compositor might want to have.

Changing between "modes" would just set new shortcuts.

@jadahl
Copy link
Collaborator

jadahl commented Jul 3, 2023

As for accessing the accessibility bus, if that means accessing private information, then the user should be aware of that.

Yes, it'd be a tricky design task to some how educate the user while they are configuring things.

Since it can reassign shortcuts at will, can we imagine that the app can assign the action "delete" or "press the button" (like a delete button) to a shortcut that you use frequently (but which is not the shortcut you defined)?

I imagine A-Z, delete, backspace and enter could perhaps be "shortcuts" that the portal backend can disallow even for an AT, but fundamentally, the possibility that an app disguising itself as an AT can use an a11y portal to do really terrible things is a real problem and hard to solve.

@TTWNO
Copy link
Author

TTWNO commented Jul 3, 2023

I imagine A-Z, delete, backspace and enter could perhaps be "shortcuts" that the portal backend can disallow even for an AT

This will not be possible. I can't say for sure on Backdpace and enter, but individual characters and Shift+a singular character are very common shortcuts used by a screen reader.

EDIT: I've just confirmed the backspace and enter are also used in some modes of operation.

@TTWNO
Copy link
Author

TTWNO commented Jul 3, 2023

the possibility that an app disguising itself as an AT can use an a11y portal to do really terrible things is a real problem and hard to solve.

Right now. Any binary can just read and interact with the accessibility layer with no permissions at all. So this will still be massive progress.

@Mikenux
Copy link

Mikenux commented Jul 3, 2023

It would be better to warn the user when shortcuts are assigned to delete/destructive actions. However, even if it would be possible to detect such actions, these shortcuts must be stable across contexts, and the system screen reader must read them instead of the app's screen reader (or at least give a hint). The same may be true for the "push the button" action, although it could be limited to destructive actions.

The main thing is to avoid any destructive actions. Any other bad but non-destructive behavior (e.g. misreading) is something the user should notice. Therefore, a way to easily disable the problematic app is needed.

@TTWNO
Copy link
Author

TTWNO commented Jul 3, 2023

It would be better to warn the user when shortcuts are assigned to delete/destructive actions.

What exactly do you mean by destructive actions?

@TTWNO
Copy link
Author

TTWNO commented Jul 3, 2023

I think this is likely the only method needed regarding shortcuts, if the intention is for a11y shortcuts to always take precedence without any user interaction. It also means parent_window isn't needed, since there would never be any dialogs.

Ah I see. Thanks for the clarification.

Might be useful to let the backend communicate what shortcuts it managed to set though, it cannot really be 100% unconditional. It'll depend on implementation abilities and a limited set of combinations (e.g. escape hatch) the compositor might want to have.

Yes, this is probably a good idea. This would be sent by the ShortcutsChanged signal,.

Changing between "modes" would just set new shortcuts.

The only reason I suggested otherwise is that changing the events would be a fairly large request, potentially in the 1-2KB+ range, since every possible shortcut, with namespaced actions attached could be quite a large list, and it needs to be updated nearly instantaneously for a good experience—I was worried about the round-trip time for such a large piece of data.

Perhaps I'm thinking a bit too low-level for a portal? I'd need input from others on what latencies would be considered acceptable for this. I'm trying to avoid a situation where a user presses two shortcuts close together, and the first one changes what shortcuts are available. Ideally this would never happen, since under the current "the AT grabs all input events" system, this is not possible, which at least has the advantage of always being correct, even if it is an order-of-magnitude less secure.

@TTWNO
Copy link
Author

TTWNO commented Jul 3, 2023

the system screen reader must read them instead of the app's screen reader (or at least give a hint).

What is your meaning here? I'm not sure I understand what you mean in terms of the distinction between a system screen reader and "an app's screen reader".
Generally, a screen reader handles accessibility across all applications on a system, and it is extremely rare for individual apps to have their own "screen readers"—these are generally called "self-voicing" applications, since they do not require a screen reader to function, but it would still not be called a screen reader.

The vast, vast majority of applications rely an external screen readers to provide accessibility, and those that do not generally just require that a user disable their current screen reader to use it.

@Mikenux
Copy link

Mikenux commented Jul 3, 2023

I used the "destructive" action just to be general, referring to the term used in GNOME. Another destructive action other than "Delete" is "Discard", for example. If it's already communicated, that's fine.

Thank you for the precision on the difference between a screen reader and a "self-voicing" application.

@TTWNO
Copy link
Author

TTWNO commented Jul 3, 2023

If it's already communicated, that's fine.

Yes, so in this case focusing a button labeled "delete", or "remove", would speak the label of the button. So the user would be aware of what they are doing.
Is that what you're trying to say?

@tyrylu
Copy link

tyrylu commented Aug 17, 2023

This feature is actually okay, e. g. it uses focus and selection events, but the mouse review functionality will need events send somehow as well.

@TTWNO
Copy link
Author

TTWNO commented Aug 22, 2023

Not sure how I missed some of the comments here.

As for mouse emulation:

Is a portal the correct place for this feature, and is specifically an accessibility portal the best place for it? As of right now, the accessibility portal will simply allow keybindings to be bound arbitrarily, and with priority above any other system keybindss.

This portal, at this time, does not offer any functionality for key emulation, and I'm not sure that it should. Likewise with mouse I/O; are we sure that emulation should be a part of this portal? Could this be on the backburner for version 2 or 3 of a portal?

Adding bindings for keyboard, mice, etc. and emulation of those events makes for a much more complex portal that will be harder to get merged anywhere. Are we sure we want to go down that road?

EDIT:

The advantage is that obviously this would open the door to "autohotkey-style" programs across Wayland and X11 boundaries without reading events directly from evdev, which I do personally believe would be a boon to the Linux community. But I'm extremely nervous around feature creep, and of the accessibility portal, the primary concern of getting keybinds working for screen readers in Wayland being sidelined by a much bigger, more complex issue.

And is that an accessibility portal, or a completely different beast? That's basically an "active event manager" moreso than any accessibility feature; although, of course it could still be used by assistive technologies.

@jadahl
Copy link
Collaborator

jadahl commented Aug 22, 2023

Note that there already is a "mouse emulation" portal - org.freedesktop.portal.RemoteDesktop. With that said, every feature that AT's in particular uses should ideally be seen from a "end goal" perspective to see if it can be done in a better way (e.g. binding shortcuts instead of key event roundtrips). Not sure how to plan things the best way, but comments in issues are very easy to loose track of.

Either way, I think it makes sense to start with an a11y portal that starts somewhere, e.g. shortcuts. Whether it should be org.freedesktop.portal.Accessibility or e.g. org.freedesktop.portal.AT.Shortcuts I don't know, feature creep is a valid concern.

@TTWNO
Copy link
Author

TTWNO commented Aug 22, 2023

org.freedesktop.portal.AT.Shortcuts

I think this makes more sense.

@TTWNO TTWNO changed the title Accessibility Shortcuts Portal Proposal (org.freedesktop.portal.Accessibility) Accessibility Shortcuts Portal Proposal (org.freedesktop.portal.AT.Shortcuts) Aug 22, 2023
@orowith2os
Copy link

fwiw I think it makes sense to work on this in bits and pieces at a time, like @jadahl said, but keep it under one name - org.freedesktop.portal.Accessibility. Having things like shortcuts implemented as methods probably makes sense.

Another path would be to make another dbus name owner, specifically for org.freedesktop.portal.Accessibility, but have the interface names be different for each feature of the portal - shortcuts, mouse emulation, screen contents, and so on. More or less emulating what the portals are right now.

@jf2048
Copy link

jf2048 commented Sep 6, 2023

Agreed..... but this makes my situation (where I switch back and forth between two screen readers for testing) an absolute nightmare. I agree from a normal users' perspective this makes sense, though.

EDIT: As long as it is possible for a distribution to ship with a default screen reader, then automatically run that without user interaction, that's fine by me. I'm sure as a dev, I can find a script that'll just swap this setting for me.

IMO anything with intercepting keybinds this way needs a hard limit that only one AT can use it at a time. Probably the behavior there is to just auto "disconnect" the first AT and then use the newest one. If there is anything more complicated than that, it will very quickly run back into the status quo of X11 grabs fighting over priority which we all know is not desirable, and would be even worse to try to present to a typical AT user...

@jadahl
Copy link
Collaborator

jadahl commented Sep 7, 2023

IMO anything with intercepting keybinds this way needs a hard limit that only one AT can use it at a time.

If we'll use the method in #1046 (comment) than I think this can be handled by the DE actively selecting the active AT / screen reader, properly handling transitioning from one reader to another, while allowing to revert back to the first if the new one fails to work (a bit like gnome-shell / gnome-control-center handles applying monitor configs).

@Mikenux
Copy link

Mikenux commented Sep 7, 2023

Finally, what type of information does a screen reader want to access?

  • App/Window names?
  • UI Structure (e.g. a button, titlebar, main pane)?
  • Text of a document?
  • Other?

And still: Can the screen reader use its own text-to-speech engine and braille system or do we assume it will use the system's?

@orowith2os
Copy link

@Mikenux all of the above. Screen readers need access to a lot in order to be useful.

@jf2048
Copy link

jf2048 commented Sep 7, 2023

Pretty much all of that information is already provided by AT-SPI (and is already able to negotiate between multiple ATs for the info) so is not relevant to this issue. The issue here is only about how a third party AT handles keybindings.

@ids1024
Copy link

ids1024 commented Sep 7, 2023

Yeah, most of these things are already handled though AT-SPI. Shortcuts are the main thing that needs a seperate protocol to handle effectively on Wayland.

Some other things may be needed, but I'm somewhat unsure on that (see my earlier comment). I think we'll need clarification from AT-SPI/Orca/etc. maintainers before considering adding anything else.

But if it's established that a portal like this is the best solution for handling shortcuts, that can be done before adding anything else. This is, as I understand, the largest accessibility issue (at least as far as screen-readers go) on Wayland at the moment.

@Mikenux
Copy link

Mikenux commented Sep 7, 2023

The issue here is only about how a third party AT handles keybindings.

This issue is also about privacy, like in #283 (depending on the use case and to a lesser extent), #304, #565, #653, and #1064. This problem being the one which poses the biggest problem with regard to privacy.

@GeorgesStavracas GeorgesStavracas moved this to Needs Triage in Triage Oct 2, 2023
@GeorgesStavracas GeorgesStavracas added the needs discussion Needs discussion on how to implement or fix the corresponding task label Oct 9, 2023
@GeorgesStavracas GeorgesStavracas moved this from Needs Triage to Triaged in Triage Oct 9, 2023
@GeorgesStavracas
Copy link
Member

@TTWNO is working on it

@TTWNO
Copy link
Author

TTWNO commented Mar 11, 2024

I am no longer working on this. If somebody else would like to take over, they are welcome to. Always willing to help, and answer questions.

@sonnyp
Copy link

sonnyp commented Mar 11, 2024

Thanks @TTWNO for paving the way

GNOME Foundation is planning on picking this up after we implement global shortcuts.
There is a practical and technical dependency for us.

In the meantime, it would be very helpful for someone else to go ahead and get a prototype of this in another compositor / portal backend.

@dcz-self
Copy link

dcz-self commented Apr 7, 2024

This comment from a sibling discussion clarifies that:

an Orca modifier key and XKB modifier key are two very different things and one doesn't work like the other.

and

Orca's key isn't a modifier, it just messages that you want the next key(s) to be handled by orca. It doesn't affect the subsequent keys at all, aiui.

Now, how representative is Orca among screen readers? Should the accessibility portal have xkb-like modifiers (hold-and-press) as well as Orca-like latching modifiers (press and press)? Or is one enough?

Normal shortcuts can be triggered with multiple modifiers, is that still a thing for Orca's latching modifiers? Does it even make sense?

On the technical side:

If latches are desired, what should be their syntax? Normal modifiers have the following syntax according to XDG shortcuts: "Shift+Alt+J". Is latching a property of a key that can be composed? That would result in syntax like "Ins-Shift-J".
Or is latching a property of the entire shortcut? A syntax like "Latch:Ins+Alt+J"?

@joanmarie
Copy link

@dcz-self: The Orca key is meant to function like a real modifier key. For instance in an app with a Help menu, I would expect Alt+H to open that menu. Similarly in Orca, Orca+H puts you in Orca's "learn mode." In both cases, one holds down the modifier (Alt or Orca) and then presses the H.

The Orca modifier can be used with other, official modifiers. For instance, Orca+Ctrl+Space puts you in Orca's preference's dialog for the active application (e.g. Orca preferences for Gedit).

Most screen readers work in this same fashion, including NVDA and JAWS on Windows and VoiceOver on macOS. They all have a screen reader key (NVDA and JAWS also use CapsLock and KP Insert last time I checked).

I'm afraid I do not understand what you mean by "latches". Please clarify. Thanks!

@dcz-self
Copy link

dcz-self commented Apr 9, 2024

Thanks. Meanwhile someone else explained to me that latching is what Caps Lock does (even though the name indicates "locking" ;)).

@whot
Copy link
Contributor

whot commented Apr 10, 2024

Thanks. Meanwhile someone else explained to me that latching is what Caps Lock does (even though the name indicates "locking" ;)).

at least in XKB it can be either, latching or locking. Locking generally means "until the next key press of the same key" and latching means "until a key press of any other key".

The sequence Caps, A, A, A, will thus produce "AAA" when locking and "Aaa" when latching.

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Oct 21, 2024
46.2 - 25 June 2024

Updates:

* Web: Eliminate chattiness from page-load events from embedded ads.

* Web: Fix bug causing Orca to not present certain ARIA dialog titles.

* Map xfce4-notifyd to notification-daemon script so that notifications
  are presented.

* Table Navigator: Ensure we set the caret in Writer tables.

* LibreOffice: Fix presentation of editable combobox value changes.

* General: Fix bug that could cause Orca to not present the new caret
  location.

New and updated translations (THANKS EVERYONE!!!):

  ca              Catalan                   Jordi Mas i Hernandez
  eu              Basque                    Asier Sarasua Garmendia
  he              Hebrew                    Yaron Shahrabani
  id              Indonesian                Andika Triwidada
  kab             Kabyle                    Athmane MOKRAOUI
  kab             Kabyle                    Rachida SACI
  ne              Nepali                    Pawan Chitrakar
  pt_BR           Brazilian Portuguese      Leônidas Araújo
  pt              Portuguese                Hugo Carvalho
  ru              Russian                   Artur S0

=========

46.1 - 1 April 2024

Bug fixes:

* Fix issue causing flat review clicking to fail in some Gtk apps.

* Fix regression in SayAll upon page load.

* Fix presentation of new radio button groups.

* Avoid triggering crash in Pidgin.

* Fix issue in which Orca appeared to hang when where am I was used
  immediately after page load of a large document.

New and updated translations (THANKS EVERYONE!!!):

  da              Danish                    Ask Hjorth Larsen
  de              German                    Jürgen Benvenuti
  es              Spanish                   Daniel Mustieles
  eu              Basque                    Asier Sarasua Garmendia
  fr              French                    Alexandre Franke
  kab             Kabyle                    Athmane MOKRAOUI
  ka              Georgian                  Ekaterine Papava
  lt              Lithuanian                Aurimas Černius
  lv              Latvian                   Rūdolfs Mazurs
  pl              Polish                    Piotr Drąg
  pt_BR           Brazilian Portuguese      Juliano de Souza Camargo
  sv              Swedish                   Anders Jonsson
  zh_CN           Chinese (China)           Boyuan Yang

=========

46.0 - 13 March 2024

Meson:

* Allow building without git executable.

Spiel:

* Fix language and dialect fallback.

* Catch all of Spiel's initialization errors.

* Respect both speech system override, and user preference.

* Avoid shutting Spiel down if still in use.

Key handling:

* Eliminate unnecessary keygrab refreshes in the web script.

* Fix new-keyhandling regression in bypass mode.

Thunderbird:

* Adjust to Thunderbird's new way of doing things when a message
  is deleted.

General:

* Fix false positive identifying redundant name-change events.

* Fix regressions introduced by the accessible-text code rewrite.

New and updated translations (THANKS EVERYONE!!!):

  ca              Catalan                   Jordi Mas
  en_GB           British English           Andi Chandler
  gl              Galician                  Fran Dieguez
  he              Hebrew                    Yaron Shahrabani
  hu              Hungarian                 Attila Hammer
  kk              Kazakh                    Baurzhan Muftakhidinov
  tr              Turkish                   Sabri Ünal

=========

46.beta - 21 February 2024

Of Interest to Distros:

* Orca now uses meson instead of autotools.

* Orca no longer depends on the python3-pyatspi package; it accesses
  AT-SPI2 directly through gobject introspection.

* Orca now has an optional dependency on the Spiel library. Please
  see "Experimental Features" in README.md for details.

New and Updated Features:

* Spiel support has been added to Orca. Spiel is a new speech synthesis
  API that works with eSpeak and Piper, with other synthesizers planned.

Web:

* Handled several issues causing Orca to jump unexpectedly to the top
  of the page.

* Interrupt speech before presenting new line/location with caret nav.
  This should improve behavior when arrowing rapidly within content.

* Fix bug causing "\ufffc" to be shown in braille instead of the link.

* Eliminate (nearly all of) our text sanity-checks and hacks that had
  been in place for Firefox/Gecko bugs. Mozilla fixed those bugs as
  part of their Cache The World work. This should improve performance.

General:

* Fix bug causing focus to be incorrectly changed when selection is
  automatically updated in a related tree. This can happen with email
  applications (e.g. incoming messages).

* Fix bug causing us to skip certain named elements in StackExchange
  and StackOverflow.

* Fix several terminal-related flat review issues.

* Fix notifications in KDE not being fully presented by Notification
  Presenter.

* Don't say "Window" when a MATE switcher window first appears.

* Echo sentence after whitespace typed rather than punctuation so the
  presentation does not get cut off.

* Fix bug causing Orca to speak an object from the wrong window in
  Mouse Review.

* Listen for and present document:page-changed events.

* Remove logic from the Event Manager that was obsoleted by the ability
  to obsolete queued events. Make remaining logic more performant.

* Convert Orca from using pyatspi to using AT-SPI2 directly. Much code
  clean-up was also done in the process.

* Miscellaneous code changes related to becoming more ready for Wayland.

New and updated translations (THANKS EVERYONE!!!):

  cs              Czech                     Daniel Rusek
  eu              Basque                    Asier Sarasua Garmendia
  fa              Persian                   Danial Behzadi
  he              Hebrew                    Yaron Shahrabani
  hu              Hungarian                 Attila Hammer
  ka              Georgian                  Ekaterine Papava
  pt_BR           Brazilian Portuguese      Juliano de Souza Camargo
  ru              Russian                   Artur S0
  sl              Slovenian                 Matej Urbančič
  sv              Swedish                   Anders Jonsson
  tr              Turkish                   Sabri Ünal
  uk              Ukrainian                 Yuri Chornoivan

=========

46.alpha - 18 January 2024

New and Updated Features:

* The much-requested "sleep mode" has arrived! You can cause Orca to
  act as if it were not running on an as-needed, per-app basis with
  Ctrl+Alt+Shift+Q. This makes it much easier to use VMs in which
  another screen reader is being used as well as self-voicing apps.
  Orca should remember what apps are currently in sleep mode so it is
  only necessary to enable it once per app in a given session. Note
  that Orca does not currently store the setting permanently. This is
  intentional, and is the same behavior as NVDA, but an option may be
  created in the future to permanently store the setting.

* Orca now has commands to present information about the system without
  having to navigate to the bar or widget that displays them:
    * Present CPU and memory usage (unbound, requires psutil)
    * Present battery status (unbound, requires psutil)

* Table navigation commands now work everywhere; not just in web
  browsers and LibreOffice. In addition to the existing commands,
  the following commands have been added:
    * Orca+Shift+T: toggle table navigation (it's enabled by default)
    * Orca+Alt+Shift+Left/Right/Up/Down: move to the final cell in
      the specified direction.

  In addition, Orca's dynamic header commands from LO should now work
  everywhere, including Google Docs and other web-based editors. These
  bindings have changed. The new bindings are:
    * Orca+Shift+R: Set the cells to be treated as column headers to
      this row.
    * Orca+Shift+R double-click: Unset the dynamic column headers row.
    * Orca+Shift+C: Set the cells to be treated as row headers to this
      column.
    * Orca+Shift+C double-click: Unset the dynamic row headers row.

* Orca's outdated tutorial message feature has been removed. In its
  place is support for customized help messages which application and
  toolkit developers can provide via ATK/AT-SPI2's new "help text"
  API. At the present time, we are unaware of any implementations
  and thus have not enabled these new tutorial messages by default.
  Developers seeking to test their implementation can enable Orca's
  presentation of tutorial messages in the Orca Preferences dialog.

* We now always use Atspi's device API for Orca commands. This was
  initially in place only for Gtk 4 apps, which do not report keystrokes
  to us for optional construction. Having addressed the majority of
  issues with this new API, we believe it is ready to be used for all
  applications and toolkits.

Web and Electron Apps Improvements:

* Include DLs in list navigation and DTs in list item navigation.
  Also improve presentation of nested lists.

* Improve presentation of VSCode's selection containers.

* Web: Improve performance of navigation to end of document

LibreOffice Bug Fix:

* Ensure the entire word count dialog is presented when the dialog
  is shown.

General Improvements and Fixes:

* Improve performance by identifying and quickly dismissing obsolete
  accessible events.

* Improve performance by using AT-SPI2's cache for everything.

* Fix bug causing utterances to be split up unexpectedly

* Announce the has popup state even in non-web contexts.

* Lots of code clean-up and more work to eliminate our dependency
  on pyatspi.

New and updated translations (THANKS EVERYONE!!!):

  ca              Catalan                   Jordi Mas i Hernandez
  cs              Czech                     Daniel Rusek
  de              German                    Jürgen Benvenuti
  de              German                    Philipp Kiemle
  en_GB           British English           Bruce Cowan
  eo              Esperanto                 Kristjan SCHMIDT
  es              Spanish                   Daniel Mustieles
  eu              Basque                    Asier Sarasua Garmendia
  fa              Persian                   Danial Behzadi
  fa              Persian                   Sina Aghighi
  fi              Finnish                   Jiri Grönroos
  fr              French                    Guillaume Bernard
  gl              Galician                  Fran Dieguez
  he              Hebrew                    Yaron Shahrabani
  hu              Hungarian                 Attila Hammer
  id              Indonesian                Andika Triwidada
  ka              Georgian                  Ekaterine Papava
  lt              Lithuanian                Aurimas Černius
  pl              Polish                    Piotr Drąg
  pt_BR           Brazilian Portuguese      Alex Jr
  pt              Portuguese                Hugo Carvalho
  ro              Romanian                  Daniel Șerbănescu
  ro              Romanian                  Florentina Mușat
  ru              Russian                   Artur S0
  ru              Russian                   Artur So
  ru              Russian                   Sergej A
  sl              Slovenian                 Matej Urbančič
  sv              Swedish                   Anders Jonsson
  tr              Turkish                   Sabri Ünal
  uk              Ukrainian                 Yuri Chornoivan
  zh_CN           Chinese (China)           Luming Zh

=========

45.2 - 6 January 2024

Web:

* Fix bug causing us to get stuck in menu bar during caret navigation.

General:

* Dump our cached information in response to children-changed events
  so that we do not present stale information.

New and updated translations (THANKS EVERYONE!!!):

  en_GB           British English           Bruce Cowan
  fa              Persian                   Sina Aghighi
  fr              French                    Guillaume Bernard
  he              Hebrew                    Yaron Shahrabani
  ka              Georgian                  Ekaterine Papava
  pt_BR           Brazilian Portuguese      Alex Jr
  ro              Romanian                  Daniel Șerbănescu
  tr              Turkish                   Sabri Ünal

=========

45.1 - 6 October 2023

Web:

* Fix regression in bookmark support.

* Fix bug causing Orca to present some custom widgets as an image.

General:

* Fix bug causing Orca to ignore objects that are valid because they
  had been defunct/invalid before.

* Fix bug causing rewind and fast-forward in SayAll to fail.

* Fix chattiness issue in mate-panel.

* Only examine descriptions by default in isSameObject for Gtk apps
  for performance reasons.

* Use AXObject.is_dead instead of the script utility for performance
  reasons.

* Revert "Don't let brlapi crash us". This change was a workaround
  put in place to give distros enough time to get the fixed brltty,
  but it had a slight performance impact if braille was enabled but
  not being used.

* Stop using deprecated Gtk API in the accessible actions menu.

New and updated translations (THANKS EVERYONE!!!):

  eo              Esperanto                 Kristjan SCHMIDT

=========

45.0 - 15 September 2023

New and updated translations (THANKS EVERYONE!!!):

  ca              Catalan                   Jordi Mas i Hernandez
  cs              Czech                     Daniel Rusek
  da              Danish                    Alan Mortensen
  id              Indonesian                Andika Triwidada
  ka              Georgian                  Ekaterine Papava
  sl              Slovenian                 Matej Urbančič
  sv              Swedish                   Anders Jonsson
  zh_CN           Chinese (China)           Boyuan Yang

=========

45.rc - 5 September 2023

Bug Fixes:

* Fix several performance issues

* Fix bug causing utterances to be split up unexpectedly

* Filter out redundant descriptions to reduce chattiness

* Fix tracebacks resulting from hand-editing user-settings.conf

* Fix speech getting cut off when focus changes away from checkable
  item

* Fix Orca failing to say "command not found" label in gnome-shell's
  run dialog

* Fix presentation of Qt tree cells with toggle action

* Improve logic when suspending events

New and updated translations (THANKS EVERYONE!!!):

  be              Belarusian                Vasil Pupkin
  da              Danish                    Alan Mortensen
  de              German                    Jürgen Benvenuti
  de              German                    Philipp Kiemle
  es              Spanish                   Daniel Mustieles
  fa              Persian                   Danial Behzadi
  fi              Finnish                   Jiri Grönroos
  gl              Galician                  Fran Dieguez
  id              Indonesian                Andika Triwidada
  kk              Kazakh                    Baurzhan Muftakhidinov
  lt              Lithuanian                Aurimas Černius
  pa              Punjabi                   Amn Alam
  pl              Polish                    Piotr Drąg
  ru              Russian                   Artur S0
  ru              Russian                   Sergej A
  sv              Swedish                   Anders Jonsson
  tr              Turkish                   Sabri Ünal

=========

45.beta - 14 August 2023

Bug Fixes:

* Use importlib instead of imp. This is needed for Orca to work in
  Python 3.12

* Fix regression in flat review braille panning

* Fix presentation of Calc selected cells

* Fix the "screen reader on" message getting cut off

* Treat LibreOffice as not supporting AtspiCollection (otherwise it can
  become non-responsive)

Feature Changes:

* Change the default button in the list-of dialogs from "jump to" to
  "activate"

New and updated translations (THANKS EVERYONE!!!):

  eu              Basque                    Asier Sarasua Garmendia
  gl              Galician                  Fran Dieguez
  hu              Hungarian                 Attila Hammer
  ka              Georgian                  Ekaterine Papava
  uk              Ukrainian                 Yuri Chornoivan

=========
45.alpha - 5 August 2023

NOTE: A beta release will follow in a few days, hopefully including all
of the translations that are in master but never made it to the gnome-45
branch.

New and Modified Features:

* Object Navigator: This allows the user to navigate through a hierarchy
  of UI objects. Bindings:
  - Ctrl+Orca+Up/Down for navigating between parent/child
  - Ctrl+Orca+Left/Right for navigating among siblings
  - Ctrl+Orca+Return for performing a click
  - Ctrl+Orca+S to toggle the simplification of the object hierarchy

* Flat Review can now by restricted to the current object of interest to
  eliminate "noise" from irrelevant objects.
  Binding: Currently unbound

* Flat Review now has a command that displays the entire contents being
  reviewed in an editable text view, making it easier to copy and paste
  the contents of terminals, dialogs, etc.
  Binding: Currently unbound

* Action Presenter: A popup menu for performing accessible actions on an
  object, such as click, expand/collapse, press. This should make it
  easier to interact with applications with poor keyboard navigability.
  Binding: Orca+Shift+A

* The Notification List feature was re-written. It now uses an actual
  Gtk list rather than an off-screen one. The review announcements now
  include a timestamp and the dialog allows you to clear the history.

* Preferences Dialog and Shortcuts List are now grouped based on feature,
  making it far easier to discover and bind/rebind commands of interest.

* The Structural Navigation command to navigate among form fields was
  remapped from Orca+Tab/Orca+Shift+Tab to F/Shift+F. A new command was
  also added to navigate among iframes, which is currently unbound.

* Added a command to present the default button. Binding: Orca+E.

* Modify Orca's left-click functionality to prefer actions which are
  associated with performing a left click (e.g. click, press, jump,
  open) and only attempt to synthesize a click as a last resort.

Bug Fixes and Other Improvements:

* Added the ability to temporarily suspend registration for accessibility
  events which can greatly improve performance at times event floods are
  likely, such as window creation/destruction and activation/deactivation.

* Started preferring AtspiCollection over child iteration to locate
  descendants in the accessibility tree. The performance improvement can
  be up to 10 times faster. We will continue making changes in this area
  between now and the stable release.

* Started relying on speech-dispatcher for character presentation rather
  than our own character names dictionary, which we were not always using.
  This should cause Orca to always speak the character name in the same
  way.

* Interrupt speech conditionally on focus changes. This is needed for
  Gtk 4 on Wayland because we currently do not get notifications for
  input events, which had been our most reliable hint to interrupt speech.
  The heuristics to identify when we should not interrupt speech are
  still being refined, but hopefully this will make the user experience
  a bit more tolerable until a solution is agreed upon and implemented.
  See https://github.com/flatpak/xdg-desktop-portal/issues/1046 for more
  information.

* A number of improvements to reduce some lagginess and chattiness in
  certain web apps.

* Added logic to filter out windows which claim to be active but really
  aren't, including descendants of mutter-x11-frames, the desktop frame
  of some window environments, and certain Electron apps.

New and updated translations (THANKS EVERYONE!!!):

  en_GB           British English           Bruce Cowan
  hu              Hungarian                 Attila Hammer
  it              Italian                   Gianvito Cavasoli
  ka              Georgian                  Ekaterine Papava

=========

44.1 - 25 May 2023

Web:

* Support aria-disabled on application, tab, group, and focusable
  separator/splitter

* Fix bug in identification of inline iframes

General:

* Improve performance by checking for duplicate object events

* Filter duplicate events when checking for double presses of the
  orca modifier

New and updated translations (THANKS EVERYONE!!!):

  it              Italian                   Gianvito Cavasoli


44.0 - 24 March 2023

New and updated translations (THANKS EVERYONE!!!):

  da              Danish                    Alan Mortensen
  fr              French                    Guillaume Bernard

=========

44.rc - 8 March 2023

General:

* Fix double-presentation of indentation information

* Interrupt speech immediately prior to speaking "screen reader off"

* Add command-line Orca modifier documentation

* Fix issue when using the new AT-SPI device API

Web:

* Fix jumping in sites caused by ARIA selection-changed events

* Fix incorrect browsing in Firefox when popup has focus

* Fix double-presentation of content in ARIA's tab role

* Fix structural navigation commands sometimes failing to work after
  script reactivation


New and updated translations (THANKS EVERYONE!!!):

  ab              Abkhazian                 Nart Tlisha
  de              German                    Jürgen Benvenuti
  hu              Hungarian                 Attila Hammer
  id              Indonesian                Kukuh Syafaat
  ka              Georgian                  Ekaterine Papava
  sv              Swedish                   Anders Jonsson
  uk              Ukrainian                 Yuri Chornoivan

=========

43.1 - 3 January 2023

General:

* Clean up and fix bugs in flat review find

* Treat KP_Delete as Delete for the purpose of identifying text deletions

* Fix several issues related to prefering the TableCell interface

* Fix presentation of name-changed events for Qt push buttons

Web:

* Fix repetition of text elements during SayAll in web content

* Fix structural navigation bug impacting columns spanning multiple cells

* Fix chattiness issue with browser page tabs

* Fix bug causing Orca to present a non-active page in Chrome

Mouse Review:

* Do not re-present the whole paragraph when leaving a link

New and updated translations (THANKS EVERYONE!!!):

  ab              Abkhazian                 Nart Tlisha
  ka              Georgian                  Ekaterine Papava
  nl              Dutch                     Nathan Follens

=========

43.0 - 23 September 2022

General:

* Prevent double-presentation of notifications

* Fix presentation of Nautilus items for Gtk 4

* Fix bug causing the wrong voice to be used

New and updated translations (THANKS EVERYONE!!!):

  bg              Bulgarian                 Alexander Shopov
  ca              Catalan                   Jordi Mas
  da              Danish                    Alan Mortensen
  fr              French                    Charles Monzat
  kk              Kazakh                    Baurzhan Muftakhidinov
  lv              Latvian                   Rūdolfs Mazurs
  ne              Nepali                    Pawan Chitrakar
  pt_BR           Brazilian Portuguese      Leônidas Araújo
  sl              Slovenian                 Matej Urbančič
  sv              Swedish                   Anders Jonsson
  tr              Turkish                   Sabri Ünal
  zh_CN           Chinese (China)           Boyuan Yang

=========

43.beta - 29 August 2022

Web:

* Fix issue causing Orca to remain silent with autofocused inputs

* Prevent structural navigation exiting current modal dialog

* Make cell ancestor presentation optional

General:

* Fix issue causing the description to not be presented

* Fix several popup menu-related issues

* Fix issue causing certain static text in dialogs to not be presented

New and updated translations (THANKS EVERYONE!!!):

  ab              Abkhazian                 Nart Tlisha
  ca              Catalan                   Jordi Mas
  cs              Czech                     Marek Černocký
  de              German                    Jürgen Benvenuti
  eu              Basque                    Asier Sarasua Garmendia
  fr              French                    Claude Paroz
  gl              Galician                  Fran Dieguez
  hu              Hungarian                 Attila Hammer
  lt              Lithuanian                Aurimas Černius
  pl              Polish                    Piotr Drąg
  sr              Serbian                   Марко Костић
  tr              Turkish                   Emin Tufan Çetin
  zh_CN           Chinese (China)           Luming Zh

=========

43.alpha - 1 July 2022

Web:

* Fix several issues relating to presentation of navigation among
  focusable descendants within ARIA grids and tables

* Improve support for description lists

* Improve presentation of articles in feeds

* Improve presentation of unknown setsize and row/column count

* Fix several "chattiness" issues related to ARIA widgets

* Fix SayAll presentation of time element inside link

* Fix presentation of the FluentUI react dialog (and any other
  dialog which has an ARIA document-role descendant

* Improve performance in large rich-text editors

* Include focusable elements with clickancestor action in the
  list of "clickables"

WebKitGtk:

* Fix issue causing WebKitGtk 2.36 content to not be handled by Orca's
  webkit support

* Fail gracefully when structural navigation commands are used in
  WebKitGtk 2.36.x (the collection interface won't be supported
  until 2.26.4)

General:

* Add more event-flood handling to improve performance in general,
  but especially for gnome-shell

* Fix bug related to which script responded to a mouse-button event

New and updated translations (THANKS EVERYONE!!!):

  bg              Bulgarian                 Alexander Shopov
  ca              Catalan                   Jordi Mas
  ca              Catalan                   Jordi Mas i Hernandez
  cs              Czech                     Marek Černocký
  da              Danish                    Alan Mortensen
  da              Danish                    Ask Hjorth Larsen
  de              German                    Mario Blättermann
  de              German                    Philipp Kiemle
  de              German                    Tim Sabsch
  es              Spanish                   Daniel Mustieles
  es              Spanish                   Francisco Javier Dorado
  eu              Basque                    Asier Sarasua Garmendia
  fa              Persian                   Danial Behzadi
  fi              Finnish                   Jiri Grönroos
  fr              French                    Charles Monzat
  fr              French                    Claude Paroz
  gl              Galician                  Fran Dieguez
  he              Hebrew                    Yaron Shahrabani
  hu              Hungarian                 Attila Hammer
  id              Indonesian                Kukuh Syafaat
  it              Italian                   Milo Casagrande
  kk              Kazakh                    Baurzhan Muftakhidinov
  lt              Lithuanian                Aurimas Černius
  lv              Latvian                   Rūdolfs Mazurs
  nb              Norwegian Bokmål          Kjartan Maraas
  ne              Nepali                    Pawan Chitrakar
  nl              Dutch                     Nathan Follens
  oc              Occitan                   Quentin PAGÈS
  pl              Polish                    Piotr Drąg
  pt_BR           Brazilian Portuguese      Leônidas Araújo
  pt_BR           Brazilian Portuguese      Matheus Barbosa
  pt_BR           Brazilian Portuguese      Tiago Casal
  pt              Portuguese                Hugo Carvalho
  ro              Romanian                  Daniel Șerbănescu
  ru              Russian                   Aleksandr Melman
  sl              Slovenian                 Matej Urbančič
  sr              Serbian                   Марко Костић
  sv              Swedish                   Anders Jonsson
  sv              Swedish                   Luna Jernberg
  tr              Turkish                   Emin Tufan Çetin
  uk              Ukrainian                 Yuri Chornoivan
  zh_CN           Chinese (China)           Boyuan Yang
  zh_CN           Chinese (China)           Luming Zh

=========

42.0 - 22 March 2022

New and updated translations (THANKS EVERYONE!!!):

  de              German                    Philipp Kiemle
  it              Italian                   Milo Casagrande
  kk              Kazakh                    Baurzhan Muftakhidinov
  nb              Norwegian Bokmål          Kjartan Maraas

=========

42.rc - 11 March 2022

Web:

* Improve behavior during event flood of table-related events from
  web apps

* Fix bug causing us to ignore a newly-loaded document due to it
  having a bogus index in parent

LibreOffice:

* Fix bug causing lines with embedded objects to not be spoken

New and updated translations (THANKS EVERYONE!!!):

  bg              Bulgarian                 Alexander Shopov
  ca              Catalan                   Jordi Mas
  cs              Czech                     Marek Černocký
  da              Danish                    Alan Mortensen
  es              Spanish                   Daniel Mustieles
  eu              Basque                    Asier Sarasua Garmendia
  fr              French                    Claude Paroz
  gl              Galician                  Fran Dieguez
  hu              Hungarian                 Attila Hammer
  id              Indonesian                Kukuh Syafaat
  lt              Lithuanian                Aurimas Černius
  pl              Polish                    Piotr Drąg
  pt_BR           Brazilian Portuguese      Matheus Barbosa
  pt              Portuguese                Hugo Carvalho
  ro              Romanian                  Daniel Șerbănescu
  ru              Russian                   Aleksandr Melman
  sl              Slovenian                 Matej Urbančič
  sr              Serbian                   Марко Костић
  sv              Swedish                   Luna Jernberg
  tr              Turkish                   Emin Tufan Çetin
  uk              Ukrainian                 Yuri Chornoivan
  zh_CN           Chinese (China)           Luming Zh

=========

42.beta - 15 February 2022

Web:

* Fix several bugs in which we update our location silently when we
  should instead announce it

* Improve behavior during event flood of text-related events from
  web apps

* Attempt to work around object destruction during structural nav

* Improve behavior of label ancestors of widgets

General:

* Fix bug causing accessing preferences to fail for esperanto

* Handle apps going defunct during cleanup; more debugging

* Handle exception when object is destroyed while getting text attributes

* Try to handle error from mate-notification-daemon during window:create

* Improve performance in gnome-shell

* Improve presentation of all text becoming unselected during caret
  navigation

New and updated translations (THANKS EVERYONE!!!):

  bg              Bulgarian                 Alexander Shopov
  ca              Catalan                   Jordi Mas i Hernandez
  cs              Czech                     Marek Černocký
  da              Danish                    Alan Mortensen
  da              Danish                    Ask Hjorth Larsen
  de              German                    Mario Blättermann
  de              German                    Tim Sabsch
  es              Spanish                   Daniel Mustieles
  es              Spanish                   Francisco Javier Dorado
  eu              Basque                    Asier Sarasua Garmendia
  fi              Finnish                   Jiri Grönroos
  fr              French                    Charles Monzat
  gl              Galician                  Fran Dieguez
  he              Hebrew                    Yaron Shahrabani
  hu              Hungarian                 Attila Hammer
  id              Indonesian                Kukuh Syafaat
  it              Italian                   Milo Casagrande
  kk              Kazakh                    Baurzhan Muftakhidinov
  lv              Latvian                   Rūdolfs Mazurs
  ne              Nepali                    Pawan Chitrakar
  nl              Dutch                     Nathan Follens
  oc              Occitan                   Quentin PAGÈS
  pl              Polish                    Piotr Drąg
  pt_BR           Brazilian Portuguese      Leônidas Araújo
  pt_BR           Brazilian Portuguese      Tiago Casal
  pt              Portuguese                Hugo Carvalho
  ru              Russian                   Aleksandr Melman
  sl              Slovenian                 Matej Urbančič
  sv              Swedish                   Anders Jonsson
  uk              Ukrainian                 Yuri Chornoivan
  zh_CN           Chinese (China)           Boyuan Yang

=========

41.1 - 1 December 2021

Web:

* Fix presentation of selected items in datalist

* Fix issue causing non-rendered headings being combined with
  other, rendered elements when presenting line contents

* Improve behavior when focused back/forward button is pressed

* Improve presentation of subscript and superscript elements
  (requires implementations exposing the associated AT-SPI2
  roles)

* Attempt to identify and present custom-element images

* Fix SayAll for rich-text editors

* Treat all list items inside listboxes as focus mode widgets
  regardless of authoring

* Clear cached objects when not dumping full cache for child change
  to prevent skipping over newly-added content

* Fix speech generator for browser alerts

* Fix issues causing certain spin buttons to not be presented correctly

General:

* Modify collections module import for Python3.10 compatibility

* Event Manager: Handle name/description change floods

* Adjust string for repeats when presenting text changes

* Clear flat review context when page tab lists emit selection-changed
  to eliminate stale context (e.g. in a wizard)

* Improve presentation of indeterminate progress bars (busy indicators)

New and updated translations (THANKS EVERYONE!!!):

  es              Spanish                   Daniel Mustieles
  he              Hebrew                    Yaron Shahrabani
  lv              Latvian                   Rūdolfs Mazurs
  ru              Russian                   Aleksandr Melman

=========

41.0 - 16 September 2021

General:

* Fix compatibility with Python 3.10

New and updated translations (THANKS EVERYONE!!!):

  da              Danish                    Alan Mortensen
  de              German                    Tim Sabsch
  es              Spanish (markup fix)      Andre Klapper

=========

41.rc - 4 September 2021

Web:

* Fix several issues related to empty but "focusable" ARIA
  tooltips

* Identify and work around (when possible) mismatched text and
  hypertext implementations that can lead to looping inside
  content

New and updated translations (THANKS EVERYONE!!!):

  cs              Czech                     Marek Černocký
  es              Spanish                   Francisco Javier Dorado
  hu              Hungarian                 Attila Hammer
  kk              Kazakh                    Baurzhan Muftakhidinov
  sv              Swedish                   Anders Jonsson
  uk              Ukrainian                 Yuri Chornoivan

=========

41.beta - 24 August 2021

General:

* Use new AT-SPI device API for keyboard monitoring when available

LibreOffice:

* Fix bug causing Orca to become silent due to setting locusOfFocus
  to a defunct object

* Work around missing focus event for Calc spreadsheet which causes
  Orca to ignore subsequent events

Speech:

* Do not set voice name when it is the default

=========

41.alpha - 12 July 2021

General:

 * Improve handling of accessible-event floods from apps

 * Fix bug in announcing selected items in icon views

Web:

 * Improve recovery from destruction of current object

 * Improve performance in response to caret-moved events

 * Fix crash resulting from subtree becoming hidden

 * Fix bug in toolbar browse-mode navigation

 * Fix bug causing a live region event to be ignored

 * Fix bug causing us to incorrectly switch to browse mode in VSCode

 * Ensure we present caret-moved events after Alt+Tabbing into web app

 * Don't repeat posinset and setsize for multi-line list items

 * Don't announce unselected state of grid cells/rows in browse mode

 * Don't announce row and column count when they are both 0

 * Fix braille presentation of grid cell in browse mode

 * Improve browse-mode navigation of trees and tree tables

 * Eliminate some chattiness entering elements with a caption

 * Prevent double-presentation of description for alerts

Email:

 * Fix regression presenting plain-text messages in Thunderbird

 * Work around missing events from Evolution Add Accounts

LibreOffice:

 * Work around missing state-changed:focused event that caused
   caret-moved events in documents to be ignored

Speech:

 * Ensure we enable/disable speech based on app-specific settings

 * punctuation: Spell left/right_double_angle at level "most"

 * Do not add mark within numbers (some synthesizers present numbers
   incorrectly otherwise)

 * Do not set language if it is empty (breaks output in older versions
   of speech-dispatcher)

Mouse Review:

 * Check if we have Wnck in activate() so we don't spew errors

 * Gracefully handle lack of pointer

New and updated translations (THANKS EVERYONE!!!):

  es              Spanish                   Daniel Mustieles
  es              Spanish                   Francisco Javier Dorado
  fi              Finnish                   Jiri Grönroos
  fr              French                    Charles Monzat
  he              Hebrew                    Yaron Shahrabani
  ne              Nepali                    Pawan Chitrakar
  nl              Dutch                     Nathan Follens
  oc              Occitan                   Quentin PAGÈS
  pt_BR           Brazilian Portuguese      Tiago Casal
  sv              Swedish                   Anders Jonsson

=========

40.0 - 19 March 2021

New and updated translations (THANKS EVERYONE!!!):

  cs              Czech                     Marek Černocký
  da              Danish                    Ask Hjorth Larsen
  it              Italian                   Milo Casagrande
  sv              Swedish                   Anders Jonsson
  zh_CN           Chinese (China)           Boyuan Yang

=========

40.rc - 11 March 2021

Web:

* Improve handling of, and recovery from, element destruction, e.g.
  to find the new location and contents more accurately and quickly

* Don't generate line contents when tabbing into editable with
  descendants (chattiness)

General:

* Prevent hang generating statusbar content

* Prevent hang resulting from accessible objects which claim to be
  their own parent

* Try to detect and avoid selection-changed event flood from apps
  like Caja which can make Orca not responsive

* Work around lack of children-changed accessibility events from
  fillers which report 0 children

New and updated translations (THANKS EVERYONE!!!):

  de              German                    Mario Blättermann
  eu              Basque                    Asier Sarasua Garmendia
  fi              Finnish                   Jiri Grönroos
  gl              Galician                  Fran Dieguez
  id              Indonesian                Kukuh Syafaat
  pl              Polish                    Piotr Drąg
  pt              Portuguese                Hugo Carvalho

=========

40.beta - 22 February 2021

Web:

 * Add initial support for aria-braillelabel and aria-brailleroledescription

 * Add option to control automatic focus mode during native navigation

 * Improve presentation of, and fix bugs related to, offscreen text
   which is exposed to us as one or two characters per line

 * Make more roles descendable in browse mode to improve content in
   which use ARIA widget roles are applied without any associated
   keyboard navigation

 * Fix bugs in which we get stuck or skip an element due to stale cache

 * Prevent getting stuck when up arrowing with multiple newline chars

 * Don't collapse newlines from a single text object into one line

 * Respect speakBlankLines setting

 * Ensure figcaptions and descendants are presented only once

 * Fix issue in which caret-moved events preceding focus events cause
   Orca to not present a newly-focused entry

 * Use posinset and setsize attributes for menus, even in browser gui

 * Eliminate double-presentation of caption children in SayAll

 * Work harder to turn inaccessible links into something presentable

 * Prevent focus mode from being entered if we're in SayAll

 * Fix presentation of table row when caret moves due to mouse click

 * Ensure we say something when using caret nav to interrupt SayAll

 * Skip useless empty elements when seeking first context in document

 * Fall back on gridcell name when generating name for nameless checkboxes

 * Miscellaneous chattiness fixes

Chromium:

 * Work around bogus/misleading selected state in browser menus

 * Fix chattiness issue arrowing up/down in Omnibox popup

 * Fix bogus presentation of posinset and setsize in popup menus

Braille:

 * Attempt to be smarter about the default contraction table, prefering
   the current locale and literary braille tables

 * Fix bug in presentation of tree items

General:

 * Fix Orca not launching due to braille-related timeout

 * Use AT-SPI2's cache for children (improves performance)

 * Improve presentation of native-app navigation by word

 * Fix issue preventing us from recognizing a Tab input event

 * Announce "non selected" when focus does not follow selected in a listbox

 * Only speak newline during word nav if spoken indentation is enabled

 * Handle exception initializing mouse review with null display

New and updated translations (THANKS EVERYONE!!!):

  ca              Catalan                        Jordi Mas
  ca              Catalan                        Jordi Mas i Hernandez
  cs              Czech                          Marek Černocký
  de              German                         Christian Kirbach
  de              German                         Tim Sabsch
  en_GB           British English                Stephan Woidowski
  es              Spanish                        Daniel Mustieles
  fi              Finnish                        Timo Jyrinki
  fr              French                         Charles Monzat
  fr              French                         Claude Paroz
  gl              Galician                       Fran Dieguez
  hr              Croatian                       Goran Vidović
  hu              Hungarian                      Attila Hammer
  it              Italian                        Milo Casagrande
  lt              Lithuanian                     Aurimas Černius
  nb              Norwegian Bokmål               Kjartan Maraas
  pl              Polish                         Piotr Drąg
  pt_BR           Brazilian Portuguese           Henrique Machado Campos
  pt_BR           Brazilian Portuguese           Rafael Fontenelle
  pt              Portuguese                     Juliano Camargo
  ro              Romanian                       Florentina Mușat
  sl              Slovenian                      Matej Urbančič
  sr              Serbian                        Марко Костић
  sr              Serbian                        Мирослав Николић
  sv              Swedish                        Anders Jonsson
  tr              Turkish                        Emin Tufan Çetin
  uk              Ukrainian                      Yuri Chornoivan
  zh_CN           Chinese (China)                Boyuan Yang

=========

3.38.2 - 22 December 2020

General:

 * Don't treat unknown coordinates as definitely off-screen. Should
   fix the problem seen with flat review resulting from a change in
   Gtk+ 3.24.24

=========

3.38.1 - 3 December 2020

Web:

 * Fix crash when generating speech for childless math element

General:

 * Fix bug causing the new radio button group to not be presented
   when the group was first entered

New and updated translations (THANKS EVERYONE!!!):

   pt            Portuguese              Juliano de Souza Camargo
   pt_BR         Brazilian Portuguese    Henrique Machado Campos

=========

3.38.0 - 11 September 2020

Web:

 * Don't present aria-placeholder value when it's identical to aria-label

 * Fall back on object attributes for absent text attributes

General:

 * Add some sanity checks to prevent crashing due to GStreamer failure

 * Announce read-only state for checkboxes

New and updated translations (THANKS EVERYONE!!!):

   cs            Czech                 Marek Černocký
   de            German                Tim Sabsch
   es            Spanish               Daniel Mustieles
   fr            French                Charles Monzat, Claude Paroz
   hu            Hungarian             Attila Hammer
   id            Indonesian            Kukuh Syafaat
   it            Italian               Milo Casagrande
   pl            Polish                Piotr Drąg
   sl            Slovenian             Matej Urbančič
   sr            Serbian               Марко Костић
   sv            Swedish               Anders Jonsson
   tr            Turkish               Emin Tufan Çetin
   zh_CN         Chinese (China)       Boyuan Yang

=========

3.37.90 - 10 August 2020

Web:

 * Announce when rows, columns get reordered due to aria-sort changing

 * Fix bug causing some web content to not be presented in flat review

 * Fall back on "placeholder" when "placeholder-text" is not used by
   browsers

 * Fix bug causing presentation of stale content when navigating by word

 * Skip over clickable images during line nav if the author has set alt
   to ""

 * Fix bug causing events from Google Docs to be ignored when a dialog
   appears but lacks focus

 * Fix false positive causing us to not present self-referential labels

 * Fix crash caused by author using aria-labelledby pointing to itself

 * Always speak the current line when caret moves due to mouse click
   so that presentation is consistent regardless of the element

General:

 * Fix bug causing learn mode to not work in (at least) gnome-shell
   controls

 * Emit mode-changed notifications to inform other tools (magnifiers,
   highlighting tools) what mode Orca is in when presenting content

 * Miscellaneous tweaks to GUI labels and documentation

 * Attempt to reconnect to speech-dispatcher when setting capitalization
   style fails due to SSIPCommunicationError

New and updated translations (THANKS EVERYONE!!!):

   ca            Catalan               Gil Forcada, Jordi Mas
   de            German                Tim Sabsch
   el            Greek                 Efstathios Iosifidis
   es            Spanish               Daniel Mustieles
   eu            Basque                Asier Sarasua Garmendia
   fr            French                Charles Monzat
   gb            British English       Zander Brown
   gl            Galician              Fran Diéguez
   kk            Kazakh                Baurzhan Muftakhidinov
   lt            Lithuanian            Aurimas Černius
   ro            Romanian              Daniel Șerbănescu, Florentina Mușat
   sl            Slovenian             Matej Urbančič
   sv            Swedish               Anders Jonsson
   uk            Ukrainian             Yuri Chornoivan

=========

3.37.2 - 1 June 2020

Web:

 * Present aria-sort value when focus moves to sorted row/col header

 * Ensure we present functionally-empty entries from web apps

 * Make ARIA gridcell cells caret-navigable if browse mode is sticky

 * Fix bug causing us to skip over objects in certain grids in browse
   mode

 * Handle links whose sole content is an image with alt=""

 * Force browse mode switch in web apps when child document claims focus

 * Don't repeat label, name, or role when in the same object in SayAll

 * Improve performance of presenting status bar items for web/Electron
   apps (e.g. VSCode)

 * Check for "keyshortcuts" attribute also for browser UI

 * Eliminate chattiness from Chromium omnibox

 * Ensure we present the correct row when navigating to table with
   missing rows

 * Improve structural navigation in HTML tables with conflicting ARIA
   semantics

 * Ensure we announce role and content of elements with ARIA's separator
   role

 * Ensure we verbalize punctuation for named items inside code elements

 * Improve heuristic to identify elements serving as fake placeholder
   for text

 * Use caret-moved event to recover from object destruction

 * Prevent Orca from wandering into hidden objects and improve recovery
   when the currently-focused object is removed/destroyed

 * Improve overall performance processing caret-moved, children-changed,
   and text-changed events

 * Expand embedded objects for live region text insertions

Mouse Review:

 * Fix several chattiness issues

 * Fix presentation of nested cells

Braille:

 * Ensure blockquote and section text is always displayed

 * Ensure focused region starts the display when panToCursor

 * Fix bug in word wrap causing us to not display the relevant info

 * Fix error using braille with JavaAtkWrapper

 * Ensure we update our position when an anchor is clicked on
   via braille display

 * Hand off Braille output on NoFocus so other screen readers can
   provide information

 * Correctly display long strings of non-space characters that exceed
   the width of the braille line

 * Fix several panning issues

 * Remove fallback on VT 7

Speech:

 * Use punct level 'most' when available in speech-dispatcher

 * Insert pause breaks when generating status bar items so they don't
   all run together when spoken

General:

 * Emit region-changed events to inform other tools (e.g. magnifiers,
   highlighting tools) the object and optional text range Orca is
   presenting

 * Present description change events for the current object

 * Fix crash related to non-standard tables

 * Work around Qt not exposing STATE_CHECKABLE and/or using
   ROLE_CHECK_MENU_ITEM on checkable menu items

 * Fix presentation of Qt widgets labelled by their parent
   container

 * Gracefully handle AT-SPI2 timeout when checking validity of app

 * Add support for the Orca key being "sticky"

 * Fall back on name for labels which lack displayed text

 * Present message when the status bar cannot be found

 * Respect user's punctuation settings in app switchers

New and updated translations (THANKS EVERYONE!!!):

   ckb           Kurdish Sorani        Jwtiyar Nariman
   de            German                Tim Sabsch
   es            Spanish               Daniel Mustieles
   hu            Hungarian             Attila Hammer
   ro            Romanian              Daniel Șerbănescu, Florentina Mușat
   sv            Swedish               Anders Jonsson
   tr            Turkish               Emin Tufan Çetin
   uk            Ukrainian             Yuri Chornoivan

=========

3.37.1 - 23 April 2020

VSCode:

As a consequence of feature implementation and bug fixes described below
under "Chromium" and "Web," Orca support for VSCode has been improved
significantly. Users are encouraged to test Orca with VSCode Insiders
build, where Microsoft has many accessibility fixes to work with Orca.

Chromium:

 * Improve label inference for form fields without author-provided names

 * Fix issue causing us to present the previous line in contenteditable

 * Fix chattiness issue resulting from failing to consider the prior
   object when generating labelOrName

 * Fix false positive on identifying list item marker

 * Prevent double-speaking of ARIA combobox value

 * Don't speak child position for popup menus (it's always 1 of 1)

 * Attempt to identify and work around possible missing window events

 * Improve responsiveness of text selection in large objects

Web:

 * Support navigation within focusable tooltips in web applications

 * Update Orca to handle new mappings for ARIA alert and alertdialog

 * Add support for new ARIA code role

 * Multiple performance improvements to event handling

 * Ensure we always present ARIA groups with author-provided names

 * Improve behavior navigating in tables in web-based rich-text editors

 * Ensure we adjust text for repeated characters even in browse mode

 * Fix bug causing us to present stale value information for ARIA
   range widgets

 * Don't announce returning to browse mode when page is loading

 * Don't present load completed or page summary information if we are
   in focus mode for a valid object

 * Don't present loading message from pages which have no URI (fixes
   some chattiness when launching Firefox)

 * Ensure more objects with info get presented in flat review

 * General improvements for presentation of ARIA comboboxes

 * Don't iterate through all children of very complex SVGs (improves
   performance)

 * Ignore caret-moved events from outside the active grid in focus mode
   (fixes chattiness and also incorrectly updating our location)

 * Don't infer labels for any web app descendant (names must come from
   authors in ARIA apps)

 * Ensure we handle selection-change events from web app descendants

 * Ensure we present the name of focused web documents

 * Update focus when web app descendant claims focus, unless browse mode
   is sticky

 * Only present comment role when first entering the comment (chattiness)

 * Fix bug causing us to not present text which is directly inside a
   scroll pane

 * Treat treeitems as a whole for the purpose of caret navigation

 * Prevent Orca from combining words into a single word in web content
   when navigating by word

 * Fix several issues related to rich-text editors in web apps

Thunderbird:

 * Fix bug causing us to incorrectly update the focused location when
   navigating in Settings

Mouse Review:

 * Do not announce redundant information when enabling mouse review

 * Fix window list the second time mouse review gets enabled

 * Fix window detection with more than one workspace

 * Ensure we compare the top level document with the active one

 * Fix mouse review on some web elements after scrolling

Chat apps:

 * Fix false positive with autocompleted text event (causing us to
   present membership count changes, e.g. in Pidgin)

General:

 * Reduce chattiness from page tab selection events following focus

 * Reduce chattiness from text insertions resulting from page tab switch

 * Don't re-present the description if the locusOfFocus hasn't changed

 * Don't present position in list for comboboxes which lack children

 * Fix bug causing us to not present changes in already-focused terminal
   when Orca is launched

 * Only present the status bar if it is showing and visible (increases
   likelihood of Orca finding the right status bar when command to
   speak the status bar is given)

 * Prevent double-speaking of static text in alerts and other containers

 * Speak "alert" role before its name rather than after

New and updated translations (THANKS EVERYONE!!!):

   nl            Dutch                 Justin van Steijn
   sl            Slovenian             Matej Urbančič
   zh_CN         Chinese (China)       Dz Chen

=========

3.36.1 - 11 March 2020

Web:

 * Flush live region messages when interrupting presentation

 * Support checkable list items and present unchecked state when item
   has checkable state and menu item role

 * Handle extraneous elements inside containers which support selection

 * Improve handling of live region messages with embedded object chars
   and filter out some duplicate messages

=========

3.36.0 - 11 March 2020

New and updated translations (THANKS EVERYONE!!!):

   nl            Dutch                 Nathan Follens
   ro            Romanian              Daniel Șerbănescu
   uk            Ukrainian             Daniel Korostil

=========

3.35.92 - 4 March 2020

Chromium:

 * Fix presentation of child position for files in Google Drive

 * Handle list item markers which lack "::marker" tag

Web:

 * Fix presentation of list items in GMail composition window

 * Eliminate chattiness from redundant SVG images which lack accessible
   information.

 * Present SVG documents using the image role

 * Several improvements to presentation of contenteditable content

 * Several improvements to presentation of aria-details information

 * Present aria-invalid info for non-widget elements

 * Present aria-roledescription value before mark/highlight start
   message

 * Ensure ARIA links are not treated like anchors

LibreOffice:

 * Calc: Eliminate chattiness from spreadsheet reclaiming focus after
   editing cell

General:

 * Ensure we use the right voice when presenting autocomplete role

 * Improve handling for window switchers which fail to emit needed
   accessibility events

New and updated translations (THANKS EVERYONE!!!):

   da            Danish                Alan Mortensen
   fr            French                Julien Humbert
   id            Indonesian            Kukuh Syafaat
   it            Italian               Milo Casagrande
   pt_BR         Brazilian Portuguese  Tiago Casal
   sl            Slovenian             Matej Urbančič

=========

3.35.91 - 20 February 2020

Chromium:

 * Remove some unwanted noise from frame name when there is no URL

 * Ensure we present alert-style dialog name and static text

 * Fix issue with live region presentation in embedded web apps

 * Improve accuracy getting the accessible object under the pointer

 * Work around issue causing us to get stuck when the focused object
   gets reparented by the author

 * Present alerts on application window activation

Web:

 * Improve handling and presentation of dynamic skip links

 * Fix bug causing certain code/preformatted text being treated as if
   it were on a single line

 * Improve handling of the focused object being replaced while focused

 * Fix bug causing us to re-announce context inappropriately

 * Treat block lists on the same line as other block elements (e.g.
   headings) as if they are on a separate line

 * Skip over empty paragraphs during caret navigation in web content

 * Fix bug causing certain blockquotes to not be announced

 * Fix chattiness and performance issue related to line navigation
   amongst table rows

 * Improve performance by caching object attributes

 * Improve performance by skipping pointless ancestor generation
   during line navigation

 * Improve presentation when caret moves to same-page link

 * Fall back on description so we present font-icon-based sharing
   links

 * Add support for suggestion, insertion, deletion, and mark roles
   and elements

 * Fix braille presentation of certain browser/app UI elements

 * Attempt to identify elements serving as placeholders for entries

 * Fix chattiness issue presenting column/row headers with author-
   provided names

 * Eliminate double-presentation of Table details during structural
   navigation

 * Improve navigation and presentation in grids in browse mode

 * Eliminate double-presentation of caret-moved events from mouse
   clicks

 * Only treat expandable elements as focus mode widgets if focusable

 * Prevent repetition of lines during SayAll for web content

 * Announce when an object has aria-details on it, and when entering
   or exiting a details container via caret navigation

Terminal:

 * Fix double-echoing of key when character echo is enabled

General:

 * Don't speak number of children when verbosity is set to brief

 * Fix bug causing the Orca modifier to get unbound when a keyboard
   is plugged in or removed

 * Fix pauses being spoken as period/dot when punctuation is set to all

 * Handle setting focused region when accessible objects get recreated
   on us during braille generation

 * Fix bug causing us to not present certain Qt tables as tables

 * Fix bug causing us to not always use the system voice

 * Improve filtering out of redundant names when there is a similar
   label

 * Prefer the name over the displayed text for interactive objects

 * Fix bug prevening rebinding of commands with Orca+Shift

 * Remove newline char from copied/appended flat review content

New and updated translations (THANKS EVERYONE!!!):

   ca            Catalan               Jordi Mas
   cs            Czech                 Marek Černocký
   es            Spanish               Daniel Mustieles
   eu            Basque                Asier Sarasua Garmendia
   fr            French                Claude Paroz
   gb            British English       Bruce Cowan
   gl            Galician              Fran Dieguez
   hu            Hungarian             Balázs Úr
   id            Indonesian            Sucipto
   lt            Lithuanian            Aurimas Černius
   ms            Malay                 Umarzuki Bin Mochlis Moktar
   pl            Polish                Piotr Drąg
   pt_BR         Brazilian Portuguese  Rafael Fontenelle
   sr            Serbian               Марко Костић
   sv            Swedish               Anders Jonsson
   tr            Turkish               Sabri Ünal

=========

3.35.3 - 3 Janauary 2020

Web:

 * Explicitly announce the popup type when aria-haspopup is used

 * Improve presentation of childless editable comboboxes

 * Ignore a bogus object from the Gecko accessibility tree which was
   interfering with presentation

 * Improve scrolling to text objects

 * Don't treat nameless, textless links/static text elements as clickables

 * Continued improvement of Orca's support for Chromium

 * Improve accuracy of synthesized clicks on web pages

 * Be sure we don't override sticky browse mode for top-level web apps

 * Fix bug causing Orca to not present button name during Say All

 * Improve presentation of selection of links which span multiple lines

 * Add support for detecting and adjusting scrolling for banner overlays
   (Note: This support requires adjustments in the user agents.)

General:

 * Fix key echo for accented letters for apps which don't give us the
   event string

 * Filter out mouse-abs event spam to make mouse review more performant

 * Improve reliability of mouse review

 * Improve identification and presentation of autocompleted text in
   entries

 * Work around missing object:state-changed:focused event from GtkTable
   which caused Orca to be silent when a table initially gained focus

 * Ensure Orca starts even when there are missing gstreamer components

 * Add support for word-based speech progress

 * Don't treat text insertions from non-focused widgets as echoable

 * Ensure we speak selected switcher item even when the user has set
   onlySpeakDisplayedText

 * Improve reliability of unfocusedAlertAndDialogCount()

 * Correct the position and size reported for selectable table rows

 * Don't present GtkComboBox selection changes if we're not on/in that
   widget

 * Present position in list for tables

 * Filter out duplicate clipboard contents changed notifications

 * Filter out bogus window focus claims from gnome-shell

 * Add handling for accessible app names which start with "org." or "com."

New and updated translations (THANKS EVERYONE!!!):

   ca            Catalan               Jordi Mas
   da            Danish                Ask Hjorth Larsen
   el            Greek                 Dimitris Maroulidis
   es            Spanish               Daniel Mustieles
   eu            Basque                Asier Sarasua Garmendia
   gl            Galician              Fran Dieguez
   nl            Dutch                 Nathan Follens
   pt_BR         Brazilian Portuguese  Rafael Fontenelle
   sv            Swedish               Anders Jonsson
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs discussion Needs discussion on how to implement or fix the corresponding task new portals This requires creating a new portal interface
Projects
Status: Triaged
Development

No branches or pull requests