Project

General

Profile

Actions

Bug #3785

closed

Accessibility Issues In The Interface With Screen Readers

Added by Samuel Proulx about 6 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Interface
Target version:
Start date:
01/19/2018
Due date:
% Done:

0%

Estimated time:
Operative System:
All
Regression:
No

Description

I'm working on a C# plugin, and customized version of AdiIRC, to work with screen readers. Thanks to the powerful API, the plugin can handle reading of messages perfectly. Also, the AdiIRC interface is almost perfectly accessible, with the following issues:

1. Lists don't seem to work. The screen reader can't read any of the items in the nick list, the server list, or the list of categories under options. However, everything else on these screens reads perfectly.

2. None of the edit fields in the quick connect dialogue have been labeled for screen readers. This seems to be the only spot in AdiIRC where that isn't the case. I can work around that in my custom configuration by putting default text like "TypeYourNicknameHere" and "TypeYourUsernameHere" in the edit boxes, but it would be wonderful if this could be resolved.

3. There is some menu bar weirdness. The screen reader finds an item to the left of the file menu, that is not labeled with any text. And when it drops down, it doesn't close properly with the escape key. There also seem to be some other items on the menu bar that don't have any dropdown menu at all. I'm blind myself, so I'm afraid I can't give you many details here; sorry! But if these items could be fixed, or if we could have an option to hide everything but the standard "file, view, server, tools, commands, window, help", either way would be helpful.

Sorry for filing an issue this long! The AdiIRC interface is perfectly usable for blind folks even now. But if these things were fixed, the interface would achieve full accessibility.


Files

history.mrc (3.93 KB) history.mrc the History script Arthur Pirika, 11/11/2018 01:41 PM
history.mrc (3.93 KB) history.mrc Arthur Pirika, 11/11/2018 01:44 PM
Actions #1

Updated by Per Amundsen about 6 years ago

  • Status changed from New to Assigned

I am very glad to hear AdiIRC is useable with your plugin and I'll be happy to add any API you need.

1. The nick list and the "treebar" which I use in all these places are custom controls made by me from scratch, same as the messages area which is probably why they don't work, do you have any knowledge on how to make this work in C#?

2. This sounds very strange since quick connect uses regular textbox like everywhere else, is any other textbox labeled correctly, such as Options -> Messages -> Timestamp -> Format?

3. There are some hidden items in the Toolbar, wonder if that is what you are noticing, or maybe a ToolStripSeparator, I'll look into it.

also what kind of screen reader do you use? I would like to test myself and see what I can improve.

Actions #2

Updated by Per Amundsen about 6 years ago

Sorry I misread, you said Menubar not Toolbar, the item to the left in the Menubar is the Menubar icon, I'll make sure it's labeled and see if I can make it work better with the escape key.

The other items you see are probably the custom minimize/mazimize/close icons I use, I'll make sure to label them as well.

Actions #3

Updated by Samuel Proulx about 6 years ago

1. The nick list and the "treebar" which I use in all these places are custom controls made by me from scratch, same as the messages area which is probably why they don't work, do you have any knowledge on how to make this work in C#?

Unfortunately not. I just started learning C# in november! However, it's possible to get access to the messages via the api, and via scripts. So the messages area isn't a big deal. The nick list and the treebar are the important parts.

2. This sounds very strange since quick connect uses regular textbox like everywhere else, is any other textbox labeled correctly, such as Options -> Messages -> Timestamp -> Format?

Every other textbox in AdiIRC is labeled, accept for all of the ones in quickconnect. So it must be something about that window.

also what kind of screen reader do you use? I would like to test myself and see what I can improve.

The screen reader I use is NVDA. It's free and open source; you can download it from: https://www.nvaccess.org/

Also, my custom version of AdiIRC, that I'm calling alpha 0.1.2 can be downloaded at: https://www.sendspace.com/pro/dl/o3su8u

It's really early days though! My next goal is to figure out how to rewrite the history.mrc file included there in C#. :-) So as you can see I'm unfortunately not yet a C# expert.

Actions #4

Updated by Per Amundsen about 6 years ago

I tested your plugin and NVDA, it seems to work great, I do wonder if adding a API for unreal line marker would help, so it only needs to read messages added since last time the window was active.

I found some information on how to add accessibility to custom controls, I will be exploring this very soon.

I also tested quick connect, it did read the label and the textbox correctly, could the issue be because the textbox is below the label in quick connect compared to right of the label everywhere else?

If you need help rewriting history.mrc, please let me know!

Oh, and adding the text labels to the Menubar icons seems to help, there is an option to disable the Menubar icon in Options -Z Windows -> Show icon in Menubar, would an option to hide the minimize/restore/close icons be beneficial as well?

Actions #5

Updated by Samuel Proulx about 6 years ago

Per Amundsen wrote:

I do wonder if adding a API for unreal line marker would help, so it only needs to read messages added since last time the window was active.

Right now it just reads messages as they come in, by hooking into the various delegates provided. Most blind people like this, as they can leave the window and do other tasks on the computer, while hearing IRC in the background.

I found some information on how to add accessibility to custom controls, I will be exploring this very soon.

Thank you so much for looking into it!

I also tested quick connect, it did read the label and the textbox correctly, could the issue be because the textbox is below the label in quick connect compared to right of the label everywhere else?

That could be it, yes. However, there are properties like AccessibleName that you can set. If you set the labels that way, NVDA won't have to guess. And that way if you reformat the window at some later date NVDA will still get it right.

If you need help rewriting history.mrc, please let me know!

Well, I feel like I should at least try it myself first. I think everything I need comes from ITextView.Lines. Then I just need to write code to go through the collection and send the requested line to the screen reader. :-)

would an option to hide the minimize/restore/close icons be beneficial as well?

Yes, it would! I turned on the other hide icons option, and it worked perfectly.

Actions #6

Updated by Per Amundsen about 6 years ago

I have been able to make the custom Treebar control visible to Narrator and NVDA, NVDA seems to have some problems with the tree structure, but both seem to work great on flat lists like Options, if you would like to try it out, you can download this build and just run it as is https://adiirc.com/build/AdiIRC64.exe, please let me know how it works for you.

Actions #7

Updated by Samuel Proulx about 6 years ago

Excellent! I can verify that the options list, and the server list, both work with NVDA. The "restore" icon on the menu bar also has a label now.

The most important part of the interface we're missing now is the nicklist.

Actions #8

Updated by Arthur Pirika about 6 years ago

Hello. Just adding my own 2-cents here, I'm getting the same results as Samuel above. I'm also looking at his sources for the plugin, and noticed a couple of possible API bugs.

1. When a user changes nick, the speech only reports the new nick, instead of saying old nick is now new nick. here's the code.
private void OnNick(NickArgs argument) {
Tolk.Output(argument.User.Nick + " now known as " + argument.NewNick);
}

2. Upon joining a channel, in the OnChannelJoin event, the channel topic appears to be blank. For example, Tolk.Output(argument.User.Nick + " joins. The topic is: " + argument.Channel.Topic);
This results in the speech only saying, the channel topic is...

Actions #9

Updated by Per Amundsen about 6 years ago

Samuel Proulx wrote:

Excellent! I can verify that the options list, and the server list, both work with NVDA. The "restore" icon on the menu bar also has a label now.

The most important part of the interface we're missing now is the nicklist.

Awesome, and yes I will do the same to the Nicklist and the monitor panels soon as well as adding an option for hiding Menubar icons and the quick connect issue.

Actions #10

Updated by Per Amundsen about 6 years ago

Arthur Pirika wrote:

Hello. Just adding my own 2-cents here, I'm getting the same results as Samuel above. I'm also looking at his sources for the plugin, and noticed a couple of possible API bugs.

1. When a user changes nick, the speech only reports the new nick, instead of saying old nick is now new nick. here's the code.
private void OnNick(NickArgs argument) {
Tolk.Output(argument.User.Nick + " now known as " + argument.NewNick);
}

2. Upon joining a channel, in the OnChannelJoin event, the channel topic appears to be blank. For example, Tolk.Output(argument.User.Nick + " joins. The topic is: " + argument.Channel.Topic);
This results in the speech only saying, the channel topic is...

Thanks, I will look into these API's and see what's going on.

Actions #11

Updated by Per Amundsen about 6 years ago

I did some testing, the OnChannelJoin event seems to work as expected, keep in mind if this event is your own channel join, the server has not yet sent the channel topic to AdiIRC.

The initial channel topic comes from the RAW 332 event, maybe you want something like:

this.Host.OnRawServerEventReceived += delegate(RawServerEventReceivedArgs argument)
{
    if (argument.Numeric == "332")
    {
        string[] param = argument.Message.Split(' ');
        string topic = string.Join(" ", param, 2, param.Length - 2);

        Tolk.Output(topic);
    }
};

There is also an OnChannelTopic event for when a user changes the topic.

The OnNick event is bugged, the nick is already changed internally at the time the event is triggered, so both nicks are the new nick, I am looking into that.

Actions #12

Updated by Per Amundsen about 6 years ago

I made a new build that should take care of most issues https://adiirc.com/build/AdiIRC64.exe.

Fixed the OnNick API to trigger before the nick change.
AccessibleNames added to Quick Connect.
Option to hide Menubar window icons.
NVDA now works with the Nicklist.

Still working on the Monitor Panels datagrid.

Actions #13

Updated by Samuel Proulx about 6 years ago

I can verify the nicklist and quick connect dialogues now work! And hiding the menubar icons works perfectly! Thanks so much for all your hard work on this issue. :-)

Actions #14

Updated by Per Amundsen about 6 years ago

Made a new build https://adiirc.com/build/AdiIRC64.exe, NVDA is able to speak Monitor Panel columns and cells and their headers now.

I have not been able to make it work properly with Narrator, it seems to ignore the hierarchy between columns, rows and cell, but I will continue looking into it a learn more.

Will make a new public beta with all the changes soon.

Actions #15

Updated by Samuel Proulx about 6 years ago

Hi!

Sorry it's taken me so long to get back to you on this. Now that we can access the various monitor panel windows with a screen reader, it revealed some pretty serious bugs in my plugin code. In short, we were assuming that every active window would have an ITextView object. When one didn't, the plugin crashed hard and prevented the offending window from ever getting focus. We're [fixing it](https://github.com/fastfinge/adispeak/pull/15). So now I can actually test your fixes without my own code interfering. :-)

Thanks for all your hard work! I just wanted to leave a quick update so you'd know I didn't just ignore your fix and vanish into the ether.

Actions #16

Updated by Arthur Pirika about 6 years ago

Just checking in, is the URL catcher one of the windows that is supposed to be accessible now? when entering the window with NVDA, all that is said is "Data view grid table" and no items are shown.

Actions #17

Updated by Per Amundsen about 6 years ago

Yes, if the Url Catcher has rows, it will say "Cell [column name] [link]" when hovering a row cell, and "[column name] [column name]" when hovering the column header, not sure why it says it twice.

Actions #18

Updated by Arthur Pirika about 6 years ago

Ah, I see the issue. keyboard access isn't quite working yet, then. NVDA see's the table, but when navigating with the keyboard, nothing's spoken. not sure if something happens visually

Actions #19

Updated by Per Amundsen about 6 years ago

Oh I see, it does change visually, but NVDA does not seem to pick up the selection changes, probably related to it not being able to determine the column, row, cell hierarchy.

I followed the exact system the .NET Datagridview uses so not sure why it doesn't work with my control, but I will keep working on it.

Also, I noticed you guys are using OnEditboxKeyUp to create new shortcuts, it's not currently able to override all built-in shortcuts, I can make it trigger sooner so you would be able to do:

OnEditboxKeyDown += delegate(EditboxKeyDownArgs argument)
{
    if (argument.KeyEventArgs.KeyCode == Keys.F2)
    {
        argument.KeyEventArgs.SuppressKeyPress = true;
        argument.KeyEventArgs.Handled = true;
    }
};

Let me know if that would be useful.

Actions #20

Updated by Samuel Proulx about 6 years ago

I can make it trigger sooner

Yes, this would be extremely useful!

I will keep working on it.

Thanks for all your hard work on this!

Updated by Arthur Pirika over 5 years ago

Hi there, it's been quite a while since any activities been done on this plugin, but I'm feeling like getting back into it, and noticed some pretty severe bugs with history review and speaking of tab completions, so I'll fix those. While I'm here, I've updated to the latest 3.3 beta and it seems the URL catcher still doesn't read with NVDA. Perhaps we could look into this again? Also, I'm trying out an alternative history.mrc script that has a few extra features, one of which is supposed to allow copying of multiple lines of a window to the clipboard, by making use of a virtual clipboard. In mIRC, it checks the buffer as it goes along to ensure that the same line isn't copied multiple times into it, however, this logic doesn't seem to work in adiirc.

I've attached the script, and I can't figure out why this isn't working, perhaps a bug in $read? look at the if ($keychar == a) section in particular.

Thanks!
arfy.

Actions #22

Updated by Per Amundsen over 5 years ago

  • Target version changed from 3.1 to 3.3

I have been trying on and off to make the datagrid work with NVDA, but I haven't been able to so far, it works somewhat with the windows narrator so I am on the right track and I will continue to try.

I was able to make it work like a list but I figured it would be annoying to read out every column.

Will look into this script and fix any issues ) find.

Actions #23

Updated by Arthur Pirika over 5 years ago

Actually, making it work as a list might just be the answer, most screen readers will only read the first column anyway, and even if it were to read all of them, we're navigating fast enough that it probably wouldn't become much of an issue.

Actions #24

Updated by Per Amundsen over 5 years ago

I have been able to make it work like a list in windows narrator, I have been unable to install NVDA after reinstalling windows, not sure why it doesn't work.

Here is a build with the fix, if possible let me know if it works with NVDA, https://adiirc.com/build/1545554897/AdiIRC.exe

I wasn't able to find any obvious bugs in the history script, but there has been an enormous amount of scripting fixes lately, maybe your history script is fixed, if not, I'll take another look at it.

Actions #25

Updated by Arthur Pirika about 5 years ago

good and bad news. The bad news, the script still doesn't seem to work right, allowing the same line to be copied multiple times to the clipboard.dat file.
Good news, the URL catcher works now with NVDA, too.
Sorry it took me a while to get back to you!

Actions #26

Updated by Per Amundsen about 5 years ago

I see, do you know where I can find the original script? Also have you tested this work in mirc?

Actions #27

Updated by Per Amundsen about 5 years ago

maroon helped me track down some issues with $read, I think it's fixed in this build https://adiirc.com/build/1547769412/AdiIRC.exe.

Actions #28

Updated by Arthur Pirika almost 5 years ago

Hi again. Once again, I took a bit of a break, but I'm back, with good news. $read now seems to be working as it should! The hstory script now only allows a line to be copied once into it's virtual clipboard.

Thanks,
arfy

Actions #29

Updated by Per Amundsen over 3 years ago

  • Status changed from Assigned to Closed
Actions

Also available in: Atom PDF