nvaccess / nvda Goto Github PK
View Code? Open in Web Editor NEWNVDA, the free and open source Screen Reader for Microsoft Windows
License: Other
NVDA, the free and open source Screen Reader for Microsoft Windows
License: Other
Reported by jteh on 2008-03-20 02:11
When tabbing or navigating to form fields in a virtual buffer, NVDA reads the name of the field (usually obtained from an associated label) prior to the role. However, if a field's value is not empty, the name is not read.
The "Search:" name is not announced in step 6.
The "Search:" name should be announced.
Reported by mdcurran on 2007-04-02 09:39
Because descriptions of scripts in NVDA are doc strings, it makes it very hard to allow them to be translatable for various languages. Rather than the doc string being set inside the function, it should be manually set after the function is defined, so that the string can be enclosed in _()
Reported by tuojal on 2008-02-16 18:52
I'm not sure when this was happened, but at least this was in r1700. The locale\finnish\lc_messages\nvda.po contains the same content as italian translation.
Reported by jteh on 2007-08-17 05:41
In Windows XP, system tray accessibility is a bit weird. If the mouse is sitting on a system tray icon, the focus will keep bouncing back to the icon under the mouse after a brief pause, even when the focus is moved with the keyboard. This isn't just NVDA speaking the object under the mouse; the focus does actually get stolen. (Actually, I think this is true for most toolbars, but the problem is worse here because Windows routes the mouse cursor to the focus when activating system tray icons.)
The mouse cursor should be moved out of the way (perhaps to the top left corner of the toolbar?) when the system tray "Notification area" toolbar has focus. Note that some context menus for system tray icons do correctly return focus to the system tray after exiting them (e.g. the Safely remove hardware context menu), so the mouse needs to be moved out of the way when returning to the toolbar from one of these menus as well.
Reported by jteh on 2008-03-20 01:47
Currently, when reading nodes with shortcut keys while cursoring around in a gecko_ia2 virtual buffer, the shortcut keys are announced before the content of the node itself. For example, a link with a shortcut key might be announced as "link alt+shift+1 home". The keyboard shortcut should be announced after the content; in this example, "link home alt+shift+1".
Reported by jteh on 2008-03-18 21:03
There are some missing and outdated docstrings on default appModule scripts. These should be added/updated.
Reported by jteh on 2008-02-12 11:23
NVDA freezes when a user selects Change or Remove for some programs in the Add or Remove Programs control panel applet in Windows XP.
NVDA freezes. Apparently, in earlier versions (not sure how long ago), NVDA did freeze, but alt+tabbing seemed to bring it back to life. This is no longer the case.
Reported by tvalusek on 2007-06-04 07:18
When the interface window is present on screen, but in background, and Insert+Q is pressed, it often doesn't come to foreground, so that the exit dialog is not visible and it is necessary to Alt+Tab to NVDA window. Possible solution: Make the exit dialog system modal and always on top.
Blocked by #28
Reported by wiennat on 2008-02-07 13:08
Currently, the installer is localized to support various languages, including the one that doesn't supported by the synthesizer, eSpeak. When the blinds open the installer, although the NVDA will be opened to assist the installation, they cannot continue as the user interface is localized and the synthesizer has no idea about it. Therefore, the installer should not be localized for any locale that eSpeak doesn't support.
Reported by jteh on 2008-02-13 21:56
I've seen the following a few times:
ERROR - IAccessibleHandler.winEventCallback:
winEventCallback
Traceback (most recent call last):
File "E:\nvda\source\IAccessibleHandler.py", line 619, in winEventCallback
parent=api.getFocusAncestors()[-1]
IndexError: list index out of range
Unfortunately, it's difficult to determine a sequence of events for this error. I'll add more details if I find them.
Reported by jteh on 2007-04-20 01:34
Sometimes, one needs to pass a key through to an application which is an NVDA command or which NVDA intercepts in some way. In these cases, it would be useful to have a command which would bypass NVDA's keyboard handler for the next key press. This would be similar to the JAWSKey+3 command in JAWS.
A decision needs to be made as to how NVDA determines that a key press is complete. The method used by JAWS is to wait for all keys pressed after the bypass command to be released. This actually means that, for example, holding control and continually tapping the right arrow will bypass all presses until control is released. This could be implemented by maintaining a set of keys which have received key down events, removing each key in the key up event and disabling bypass mode once the set is empty. Another alternative is to implement some sort of key bypass lock, but this would require a special key combination to release the lock. unfortunately, it is impossible to know whether any given combination will be used by some other application, so this is not really a good idea.
Reported by tvalusek on 2007-06-04 07:27
This is not bug report for NVDA, but for this TRAC system. I entered two tickets (three with this one), and nothing shows under "My Tickets"
Reported by jteh on 2008-03-07 02:04
It is possible for any HTML element to have an onClick attribute which specifies code to run when the mouse is clicked. NVDA should allow these elements to be activated when enter is pressed.
Reported by jteh on 2008-03-17 23:58
The installer doesn't come to the foreground after being started.
The installer starts and NVDA speaks, but the installer file list item in Windows Explorer has the focus; i.e. Windows Explorer is the foreground window.
The installer should be the foreground window.
Reported by mdcurran on 2008-01-28 11:51
Currently to read the history window in MSN Messenger and Windows Live Messenger, the user must use the NVDA review commands on the number pad. The reason for this is that the Histroy Window does not have a caret that is accessible to NVDA.
A way this can be fixed is to allow the movement of a virtual caret provided by NVDA. However this is a separate ticket.
Blocked by #24
Reported by mdcurran on 2008-02-07 23:10
SysListView32 controls in Windows Vista, Windows Mail and other new apps allow you to group items in particular ways. These groups end up becoming focusable themselves, and if you press left or right arrow on one of these groups you can expand or collapse the group. However, as far as MSAA is concirned, when you focus a group, focus just moves to the list itself, not the group with in the list. This is because each list item is mapped in order to an MSAA childID, but groups as they are not accounted for in the indexing, don't end up getting childIDs and just become 0. Again like ticket #14, we need a way of finding out what is currently focused (in this case, what group is focused, not necessarily what item).
Reported by mdcurran on 2007-12-13 09:55
Currently the voice and variant values in nvda.ini are stored as ints. This is a problem when new voices or variants are added to the speech synth, as the indexing can break. NVDA should store the name of the voice or variant in nvda.ini, so that voice and variant selection will be more accurate. Other than changing config code, it may be an idea to change all synth drivers so that voices are set/read by name, not index. ESpeak can probably handle this quite well, though sapi4 and sapi5 may have some issues. This should only be implemented when its clear that eSpeak, sapi4 and sapi5 can all work with voice names with no problems. Implementing this change will also make nvda.ini more readable to users as they will see the voice name, not just a number.
Reported by mdcurran on 2007-11-21 03:21
MSAA accNavigate returns either an IAccessible pointer, or a childID. NVDA's IAccessibleHandler wraps these functions but makes them return (IAccessiblePointer,childID) each time,r ather than just one or the other. The issue with this is that when an IAccessible NVDA object calls accNavigate to go next/previous/firstChild, it receives back both IAccessiblePointer and childID, and then uses complex and sometimes time consuming logic to work out whether or not this is a good move, as in are we in a window, are we jumping to another one etc. Its also posible that a long the line another IAccessiblePointer is being created for the final NVDA object when it may not have to be. If accNavigate just returned either the childID or IAccessiblePointer, but not both, NVDA objects could suppress the complex logic if only the child ID changed, as the old IAccessiblePointer clearly can be used. This also goes for MSAA AccessibleChildren, in that NVDA wraps this function so it returns a list of IAccessiblePointer,childID pares, really it should return just a list of either IAccessiblePointers, or childIDs, but not pares of both. This change should also apply to the IAccessible accFocus property.
Reported by jteh on 2008-03-05 21:20
Currently, punctuation keys that are not shifted numbers cannot be bound to scripts. For example, the !
key can be bound because it is shift+1, as can the rest of the shifted numbers. However, -
, =
, ;
, [
](,)
, etc. cannot be bound. I suspect this is because the vk codes for punctuation characters are not the same as their unicode equivalents and we have no special mapping for these. However, this requires further investigation.
Reported by jteh on 2007-11-08 00:30
Despite lowering the default speech rate a while ago, many new users still find the current default speech rate too fast. This should be further decreased.
Also, although many power users and programmers prefer punctuation set to all, most users do not. We should disable all punctuation by default.
Reported by mdcurran on 2007-11-20 23:47
When a list item that has the focus is removed from a sysListview32 control, we receive a focus event, however the index is sometimes one off what it should be due to the event being fired before the indexes changed, however we process it after they have changed. the Outlook Express appModule has particular code to handle this problem for its message list, however even this seems to be buggy as when deleting the second last message nothing is announced. To fix we need to find a way of querying the sysListview32 control for the item index with focus, and use that as the childID in IAccessible focus events, rather than the childID given to us.
Reported by jteh on 2008-02-26 03:30
Currently, there is only one global virtual buffer pass through mode. This is fine if one is working with only one document. However, when working with multiple documents, it is often desirable to have different active modes for each document. For example, one might wish to fill in a form in one document while simply reading another, with the appropriate mode preserved for each document. Currently, one must constantly manually enable and disable pass through mode when switching documents.
Speaking the current mode whenever one switches to a document is undesirable. Ideally, the mode should only be spoken when switching documents causes it to change. Thus, a cache of the last mode needs to be kept and the mode will only be spoken if the cached value is different to the mode for the current buffer. In terms of implementation, there will probably be a function such as virtualBufferHandler.reportVirtualBufferPassThroughMode
which is called on each gainFocus event. This will be responsible for maintaining and checking the cached mode and speaking it as appropriate.
Reported by jteh on 2008-02-12 08:55
There are several issues with regard to foreground focus and NVDA UI pop-up dialogs:
These are proving to be a little difficult to solve. Some thoughts:
Reported by aleksey_s on 2008-03-07 19:44
its problem happens if you use nvda ability to work with user dictionaries and want to add entry with language-specific characters. when you press ok button, WXPython error window appears with message:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
Reported by mdcurran on 2007-12-05 05:40
IAccessible objects are instanciated in the operating system via events that include a window handle, object ID and child ID. However when the IAccessible is instanciated, the window it thinks it has, is sometimes different to the window used in the event. Usually IAccessible NVDA objects remember the window handle used in the event, both to save time and to make sure that future events for that object are caught by that object properly. However this means that if an IAccessible NVDA object was instanciated from another using one of the navigation properties, it may not have the same window handle it would have if it were instanciated by an event, meaning that equality checks will break. This problem can be seen very clearly in Mozilla Firefox2 and other Mozilla Gecko <=1.8 applications. Due to equality breaking, focus ancestors are repeated sometimes up to three times, which causes a major amount of redundant and annoying speech.
To fix, IAccessible NVDA objects should no longer cache the window handle from the event, but instead get it from either GetIdentityString (in the IAccIdentity COM interface), or from the windowHandle property in the IAccessible2 COM interface, or failing those, from the WindowFromAccessibleObject OLE function. As this now may mean that some events will not match their objects (e.g. a name change event on the focus object, where the event and object window handles differ), after the object is instanciated from the event, the object must be compared with the focus object to see if they are equal. If they are, then the event should be passed to the focus object and the newly instanciated object should be deleted.
Reported by mdcurran on 2007-11-29 05:04
Some windows that have a class such as RichEdit20 (registered as ansi, not unicode) give back unicode text when sending them an EM_GETTEXTRANGE message.
It doesn't seem to matter whether you use sendMessageW or sendMessageA, they both still end up returning unicode text.
The problem with this is that NVDA assumes that if a RichEdit window class is not unicode, then the text returned will be ansi. But, not all window classes seem to follow this rule.
This problem is evident in the Jarte text editor, where its RichEdit20 (ansi) control gives back unicode text, therefore when reading by word or line (anything else other than character) only the first character is announced as the second character usually will be 0x0, as the text is really unicode, not ansi.
To fix this, we could just assume all richEdit controls give back unicode text, though I'm sure this is not the case for some.
Certainly RichEdit20A gives back ansi, so we could just make an exception for RichEdit20 itself. Though I also have a feeling that its not actually the fault of the window class, but the fault of the application that wrongly implements the handlers for the control.
More research needs to be done on this problem, I have seen mention of it around on the net before.
Perhaps we could make a Jarte appModule which forces that particular control to be treeted as unicode, though this would get rather silly if other apps started also showing this problem.
Reported by jteh on 2008-03-18 21:22
Many users have requested different verbosity levels in NVDA. There are many aspects to consider for this functionality.
Reported by aleksey_s on 2008-03-16 21:31
i am implementing a library, with which nvda can to have access to the text, which is written by GDI functions directly. this is the delphi sources, as well as precompiled binaries. GDIHook.dll is an in-process dll which making hooks to api, GDIHookHandler.dll is manager for it. GDIHookTest.exe is an test application which works with GDIHookHandler exported functions.
note, that all stuff can have bugs and might crash your system!
Blocking #151, #200, #582, #605
Reported by mdcurran on 2008-01-24 15:36
The History widget in MSN / Windows Live Messenger can get focus, but does not have an accessible caret. NVDA used to allow the arrows to move the review cursor in that object, however when the review scripts were moved to the default appModule this became impossible. The new virtualBuffer base class has a very good virtual caret, including the ability to select text -- something the review scripts do not offer. We should make these virtual caret scripts usable by not just virtualBuffers, but also NVDAObjects. It would still be up to the specific NVDAObject to bind to these scripts, but they would be a choice for all NVDAObjects. Firstly the scripts and helper functions should probably be renamed so that they clearly are talking about a virtualCaret, and then they should be moved in to some kind of virtualCaret class, which should be inherited from by NVDAObjects and virtualBuffers.
Blocking #25
Reported by mdcurran on 2008-03-09 07:34
Currently user dictionaries force users to create and edit entries as regular expressions. Many users just want to add a simple string replacement, and probably also make it case-sensitive.
The Dictionary Entry dialog (used for adding and editing) should contain two checkboxes (case sensitive, and regular expression). And the userDicthandler code must be changed to support these new features. This change would make NVDA user dictionaries much easier to use, and much like other screen readers' dictionary support. Eventually it may be an idea to rename user dictionaries to speech dictionaries, as I assume this system probably wouldn't be used for braille. Plus, a few users have asked just exactly what user dictionaries are (the name is a little confusing to some).
Reported by aleksey_s on 2008-03-02 21:01
when navigating in richedit controls if your keyboard layout is set to english, nvda will read "question" or some another strange thing, but not the correct characters and words. this is very important, for example, in miranda-im.
Reported by jteh on 2008-02-12 09:37
There will probably be several uses for a dialog containing a list and several buttons. A links list is one example.
The current scriptUI code includes !SingleChoiceDialog and !LinksListDialog. It would make sense to abstract this code so that it can be used more generally and then sub-class to provide these dialogs.
For this new class:
Reported by mdcurran on 2007-11-21 03:08
When reviewing text in the current navigator object, when the object is a generic NVDA object or dos console window object, the text stays the same as it was when the object was first created. I.e. reviewing a list item in Windows task manager, as the memory or cpu usage changes, the reviewable text does not reflect this change. The reason for this is because the generic offset TextInfo class caches text to speed up navigation. What should happen is that the NVDA object itself should cache a text representation of the name/value/description text, and update it when it receives a name/value/description change event. Then the TextInfo object should always use the NVDA object's text representation cache, not its own.
Reported by jteh on 2007-11-08 00:50
It might sometimes be useful for all speech output to be written to a file. This could be done in one of two ways:
Reported by tvalusek on 2007-06-04 07:21
The search for a status bar, as used by the reportStatusLine script, currently fails in many cases, including Mozilla products. This search should be improved so that it works in as many cases as possible.
Reported by jteh on 2007-11-08 00:35
Currently, if a user has SAPI 4 installed but no SAPI 4 voices, the user can switch to SAPI 4 but will simply receive silence. It is then rather difficult to change back to a useable synth unless one knows the exact keystrokes.
Detecting SAPI 4 voices and hiding SAPI 4 if none are found would be nice, but is probably not viable due to the need to initialise SAPI 4 before this can be done. A more efficient option would be to raise an exception during initialisation if no SAPI 4 voices are found. This way, even though SAPI 4 will be included in the list of available synthesisers, a user cannot change to SAPI 4 if there are no voices.
Reported by jteh on 2007-04-12 23:53
In several non-English keyboard layouts, accented characters are entered by first pressing a special accent key (a dead key), followed by pressing the character to be accented. The dead key normally produces no output. Output only occurs once the second character has been pressed and should only be a single character. pyHook breaks this behaviour. With pyHook hooking the keyboard, dead keys produce output immediately when typed and do not have any effect on the second character, thus breaking typing of these accented characters completely.
This seems to be an issue with the !ToAsciiEx function which is used by pyHook. It seems that !ToAsciiEx flushes the keyboard buffer when a dead key is typed. More info can be found at http://www.experts-exchange.com/Programming/Languages/CPP/Q_21484783.html?qid=21484783
pyHook needs to be fixed. We should be using !ToUnicodeEx anyway, as many international characters can't be represented in ASCII, and should investigate whether it also exhibits this problem.
Reported by mohammed on 2008-01-19 10:26
vertualizing dialogue boxes so that text in them can be coppied to the clipboard. can be useful when troubleshooting OS problems.
Blocking #58
Reported by jteh on 2008-03-17 22:25
It seems that the NVDA menu sometimes does not correctly obtain focus.
NVDA says "NVDA menu", but pressing down arrow acts as if the menu never obtained focus.
Pressing down arrow should focus on the first item of the NVDA menu (Preferences).
Reported by ragb on 2008-01-17 12:25
when trying to arrow up and down or performing a say-all on MSWordnvda gives an error. IN winword.py, class WordDocument, getNativeObjectModele causes an OSError when calling AccessibleObjectFromWindow because it returns E_FAIL. maby is it caused by changes in comtypes versions?
Reported by jteh on 2008-03-03 01:42
Currently, there is code in gui.settingsDialogs.!SynthesizerDialog to get the list of audio device names for display to the user. This code uses ctypes to retrieve this information using the winmm library. This code should be moved into a function in nvwave, which can then be called from gui.settingsDialogs.!SynthesizerDialog. It may then also be called from elsewhere if required.
Reported by mdcurran on 2008-01-24 15:23
Most MSAA lists in Windows change the selection when the focus changes, unless of course you hold down control. NVA for ease of use says 'not selected' for list items that are not selected, but does not say selected for list items that are. However, list items inside combo boxes in Mozilla Gecko's MSAA implementation do not class a list item as being selected when it has focus -- reason given that because you can't select multiple items then selection shouldn't be thought about at all. In theory I disagree as on the screen there is a highlight bar -- selection, even if there is only one. But, menu items in Windows do not have a selected state yet they have a highlight bar.
To at least stop 'not selected' speaking in Gecko combo boxes, we will have to check to see if IAccessible objects have their state_selectable state set. If so, then we can announce not selected, but if they don't, then selection probably doesn't mean anything.
However, currently the code to figure out if 'not selected' should be spoken is in speech.py, using the speakNegativeStatesOnFocus dictionary. It is chosen purely by the role, not by role and states.
We need to come up with some way to be able to select negative states to say, based on both a role, and states.
But, I don't think we could use a dictionary for this, it would probably have to be some manual rules in code that would look at both the role and check for particular states.
Reported by jteh on 2008-03-18 23:15
It is possible to have a link with no content, like so:
<a href="#"></a>
This is pretty silly, but it is nevertheless possible and you can actually tab to such a link.
Unfortunately, the gecko_ia2 backend does not render these empty link objects into the text at all; i.e. they have a length of 0 characters. This causes two problems:
Reported by jteh on 2008-03-18 22:39
In HTML, there are two uses for the tag:
Unfortunately, Firefox exposes A elements without an HREF attribute as links to accessibility APIs. Imho, this is a bug in Firefox; see MozillaBug:423603. However, this has been done for a long time and IE apparently does it as well, so fixing the issue in Firefox may cause breakage. Thus, the change needs to be made in the NVDA gecko_ia2 backend.
Two methods can be used to determine whether there is no HREF attribute:
Reported by mdcurran on 2007-04-02 09:28
When using both sapi4 drivers (sapi5 does not have this problem) some interuptive messages, such as "loading document..." in virtualBuffers, does not stpeak. It most likely has something to do with the first speak being lost after a cancel, if the speak is in the same cycle/event.
Reported by jteh on 2007-04-25 08:18
Currently, eSpeak works extremely well with NVDA as a SAPI 5 synthesiser. However, SAPI 5 synthesisers must be registered on the system before they can be used. This means that the user must install eSpeak separately and administrative privileges are required for this installation.
A stand alone eSpeak driver should be provided with NVDA. Not only does this avoid the hastle of installation, but it allows users running NVDA off a portable external drive to use eSpeak on any Windows 2000+ computer without any installation or administrative privileges.
A method needs to be found to interface with eSpeak from NVDA. eSpeak needs to be compiled as a stand alone dll. There are two options:
Reported by mdcurran on 2008-01-18 10:04
Applications such as ones written using the Eclipse toolkit tend to fire an excessive amount of property changing MSAA events. events such as valueChange, nameChange, stateChange, descriptionChange etc are redundant if fired more than once in very quick succession on the same object as 1. neither speech or braille would be able to output them fast enough, and 2. the final event fired will still let NVDA know that the property changed on that object.
Currently NVDA processes all events, in fact, it queues them so that it will not miss one at all, even if it takes a while to process a previous one.
A suggestion would be that IAccessibleHandler limit these change events, to perhaps one per 200 ms from a given window,objectID,childID object identifier.
This would mean that when an event is received, it must cache the eventID,window,objectID,childID 4-tuple in a dictionary, along with the time the event was last fired.
IAccessibleHandler.pumpAll would search the dictionary on each NVDA core cycle, and find any events who were recorded 200 ms or more ago. It fires these events with eventHandler and deletes the event from the dictionary.
Note this idea must only be applied to property change events, no other ones. It may also be an idea in future to allow the time threshold to be set for particular windowClasses and event IDs, but its probably not that important for now.
Reported by jteh on 2008-03-18 20:40
Currently, the display synth is implemented as a synthDriver, so it cannot be used in conjunction with a real speech synthesiser. While the original intent was that this be used for sighted developers who would use it instead of a real synth, it may be useful for sighted teachers, trainers, etc. who want to follow what a screen reader user is hearing on screen. Therefore, it should be made possible for the display synth to be used in conjunction with a real synth.
Reported by jteh on 2008-03-18 20:13
Currently, when speaking repeated characters, NVDA simply truncates any repititions after the first five characters. For example, if 10 dashes are encountered, this will be announced as 5 dashes only. This gives no indication of how many repititions actually occurred. It would be more useful to announce the number of times a character occurred if there are more than a certain number of repititions; 2 repititions is probably ideal. For example, two dashes would be announced as "--", but three dashes would be announced as "- 3 times".
Reported by jteh on 2007-05-10 02:31
In Internet Explorer (and I assume anything that uses the MSHTML DOM), when enter is pressed on an element that presents a dialog box, NVDA freezes until the dialog is dismissed. This does not occur in Gecko. This is caused by the click() method on DOM nodes blocking until the dialog is dismissed. There are two possible solutions:
I know we weren't going to implement any virtual buffer fixes, but this is a really troublesome issue. If the fix is not trivial, we should delay this until after 0.5, but I think it would be good to fix this in 0.5 if we can.
You can reproduce this with a link like this:
<a href="foo" onClick="alert('test');">foo</a>
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.