Coder Social home page Coder Social logo

nvaccess / nvda Goto Github PK

View Code? Open in Web Editor NEW
2.0K 144.0 624.0 458.43 MB

NVDA, the free and open source Screen Reader for Microsoft Windows

License: Other

C 0.34% Python 87.42% NSIS 0.10% C++ 11.21% Batchfile 0.09% HTML 0.01% RobotFramework 0.24% C# 0.14% CSS 0.10% PowerShell 0.25% Rust 0.10%
accessibility screen-reader blind

nvda's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nvda's Issues

Problems with empty link elements

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:

  • The user cannot access the link by cursoring in the virtual buffer, but pressing k before the link will jump to the supposed start location of the link and say "blank".
  • If the last rendered element in a document is an empty link, links list will cause a crash in Firefox and a lockup in NVDA.
    • This is because the start offset is actually one past the end of the buffer. When the iterator tries to check for a further link, it passes this invalid offset to the buffer and causes a crash.
    • The iterator could perform bounds checking to ensure this doesn't happen, but I'm wondering whether this should be done in storage to prevent similar crashes.

Proposed Solutions

  • The gecko_ia2 backend could expose empty links as a single space character, similar to the way other empty elements such as graphics and checkboxes are exposed. I think this is the preferred solution.
  • The NVDA code to jump to links and the node iterator could ignore 0 length nodes. This would also require the bounds checking described above, either in NVDA or storage.

Test Cases

nvda can not save and work with native languages entries in user dictionaries

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)

Excessive propertyChange events from MSAA slows down NVDA

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.

'not selected' should only be spoken for lists that do actually have a 'selectable' state

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.

Make default speech settings friendlier for new users

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.

Finnish language contains italian strings

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.

Allow the use of a virtual caret on any focused NVDAObject (e.g. MSN History)

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

Link destination anchors should not be treated as links

Reported by jteh on 2008-03-18 22:39
In HTML, there are two uses for the tag:

  1. The HREF attribute refers to a destination so that when the link is activated, the browser will jump to that destination.
  2. The NAME attribute creates a link destination which can be referenced elsewhere.
    When there is no HREF attribute, the element is not a link (i.e. it does not jump to another destination).

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:

  • The link object will not have the linked state set.
  • The accessible value will be empty.
    Either of these methods can be used. If no HREF is detected, the backend should ignore the link object (but still render everything below).

Installer should not contain languages that does not supported by Synthesizer

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.

focusAncestors: IndexError exception in IAccessibleHandler.winEventCallback

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.

Reviewable text of NVDA objects is not dynamically updated due to TextInfo caching

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.

IAccessibles are needlessly being created for some cases of IAccessible NVDA object next/previous/firstChild/children properties

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.

IAccessible NVDA objects do not cope well when event window is not the same as IAccessible's window

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.

Dialogs that appear when a control is activated in MSHTML virtual buffer cause freeze

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:

  1. Find another method to click these controls; or
  2. Spawn another thread to click the control.
    I'm not sure whether option 1 is possible. We could perhaps do this with the mouse if there is no alternative method on the DOM nodes. Option 2 is not difficult, but it is a bit evil and should be a last resort.

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>

Freeze in Add or Remove Programs in Windows XP

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.

Steps to reproduce

  1. Go to the Add or Remove Programs applet in Control Panel.
  2. Cursor to an arbitrary item in the list. Note that this does not happen for all applications. The issue can be reproduced with 7-Zip.
  3. Tab to the Remove button and activate it.

Results

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.

Other notes

  • This does not happen with JAWS or System Access, but it does happen with Narrator.
    • I think this did happen with JAWS a while back, but am uncertain.
    • Commonality: I think JAWS and System Access both work in-process.
  • The problem appears to be that when the application to change/remove the program is launched, the Add or Remoe Programs applet blocks.
  • Subsequently, any out-of-process accessibility requests (and probably all window messages) block. This is the cause of the freeze.

Potential solutions

  • Somehow lose all references to IAccessible objects in this applet once the button is pressed.
    • Avoiding access to any objects in the applet should hopefully prevent the freeze.
    • Unfortunately, i have no idea how to do this, particularly if we want to cover all cases: user pressing space, enter, activating with the navigator, mouse, etc. How do we know when the button has been pressed?

SAPI 4: Raise an exception during initialisation if no voices are detected

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.

Move the mouse out of the way when navigating the system tray

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.

GDIHooking library for NVDA

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

NVDA menu sometimes does not correctly obtain focus

Reported by jteh on 2008-03-17 22:25
It seems that the NVDA menu sometimes does not correctly obtain focus.

Reproduceable: sometimes

Steps to Reproduce

  1. Press NVDA+N.
  2. Press down arrow.

Actual Results

NVDA says "NVDA menu", but pressing down arrow acts as if the menu never obtained focus.

Expected Results

Pressing down arrow should focus on the first item of the NVDA menu (Preferences).

Additional Information

  • This seems to occasionally occur on some systems and not others. I have never been able to reproduce this on my system.
  • If this is going to occur, it seems to occur the first time the NVDA menu is brought up after NVDA is started. Subsequently, this continues to occur until NVDA is restarted.
  • A sighted person noted that when this occurs, a window appears, but the menu does not.
  • This may have something to do with needing to move the mouse cursor somewhere else before bringing up the menu. The !PopupMenu method used apparently pops up the menu at the current location of the mouse cursor, which may be problematic.

Installer doesn't come to the foreground

Reported by jteh on 2008-03-17 23:58
The installer doesn't come to the foreground after being started.

Reproduceable: always

Steps to Reproduce

  1. Navigate to an NVDA installer using Windows Explorer.
  2. If NVDA is running, terminate it.
  3. Start the installer by pressing enter.
  4. Wait for NVDA to speak.

Actual Results

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.

Expected Results

The installer should be the foreground window.

Additional Information

  • Mick seems to think that this may have started to occur after upgrading NSIS. Perhaps NSIS should be downgraded (or upgraded if there is a later version).

Provide a way for speech output to be written to a file

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:

  • As part of the "display" synth driver; or
  • As an option independent of synth drivers.
    I am uncertain as to the best approach to take. This needs to be discussed.

Allow display synth to be used in conjunction with speech

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.

Implementation Details

  • The display synth could no longer be a synthDriver, as there can only be one synthDriver active at a time.
  • It would probably have to be incorporated in functions of the speech module where speech is sent to the synth.
    • There are probably several cases where the synth functions are called directly. These calls should be abstracted to avoid code repetition.

Verbosity levels

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.

  • There are already verbosity settings to control various announcements; e.g. punctuation, object presentation settings, document formatting settings and virtual buffer settings.
  • I do not think these settings should be forceably changed when a particular verbosity level is selected.
    • Otherwise, there is no way for the user to change the verbosity level without affecting other settings.
  • Despite this objection, some users want default configuration for a given level of verbosity.
    • Perhaps this should be separate somehow? i.e. There would be an option to configure default settings for a given verbosity level which the user could choose if desired.
      Blocking #3018

Unable to bind punctuation keys

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.

scriptUI: Choice dialog with custom buttons

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:

  • The constructor should take:
    • title
    • message
    • choices: A list of choices
    • defaultChoice :index of default choice
    • buttons:
      • A list of buttons to display
      • Need some way of identifying which button was pressed
      • Callbacks might be nice, but might be tricky to implement, as the GUI !ExternalExecuteEvent can only take one callback. Also, might actually make coding harder
      • Perhaps just return the index of the button that was pressed?
      • Cancel button will be added in addition to these buttons
      • How do we handle the case of just wanting a standard !ButtonSizer with OK and Cancel buttons?
        • Maybe an empty buttons list?
    • defaultButton: Index of default button
      • The default button will get an ID of ID_OK
  • Callback will probably return (buttonIndex, selectedItemIndex, selectedItemText)

Interface window doesn't come to foreground on Insert+Q

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

MSWord support is broken

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?

NVDA UI pop-up dialog focus issues

Reported by jteh on 2008-02-12 08:55
There are several issues with regard to foreground focus and NVDA UI pop-up dialogs:

  • While the NVDA UI window is open, pop-up dialogs such as the Exit NVDA dialog intermittently do not come to the foreground so that it is necessary to press alt+tab to access them, as reported in #7.
  • If the NVDA UI window is open, after an NVDA pop-up dialog is dismissed, the focus returns to the NVDA UI window instead of to the window which had the focus before the dialog was popped up.

These are proving to be a little difficult to solve. Some thoughts:

  • All dialogs, including those generated by scriptUI, should have a parent of the NVDA UI window instead of None.
  • When bringing up a scriptUI dialog, if the main UI window is not currently shown, perhaps Show() should be called which should bring it into focus, similar to the code for the Exit NVDA dialog.
  • It seems that winUser.setForegroundWindow() does work quite nicely, despite my earlier findings. This may solve many problems, particularly the second issue described above.
  • All of this fiddly code should be abstracted in some way; i.e. the code to prepare for showing a dialog and the code to restore focus after displaying the dialog.
    Blocking #7

Move winmm code out of gui.settingsDialogs

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.

Names not announced for form fields if their value is not empty

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.

Reproduceable: always

Steps to Reproduce

  1. Go to http://trac.nvda-project.org/.
  2. Press f once to navigate to the search field. Observe that "Search:" is spoken before the "edit" role.
  3. Press enter and type some text.
  4. Press NVDA+space to disable virtual buffer pass-through.
  5. Press control+home to move to the top of the document.
  6. Press f once to navigate to the search field again.

Actual Results

The "Search:" name is not announced in step 6.

Expected Results

The "Search:" name should be announced.

NVDA config file should store voice and variant selections for speech as names not indicies

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.

Allow arrowing around the History window of MSN Messenger / Windows Live Messenger

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

no focus or wrong focus is announced when list item with focus is removed from a sysListview32 control

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.

Some ansi RichEdit window classes return unicode text when asking for a range

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.

Allow choice of case sensitivity and or not to use regular expressions in user dictionary entries

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).

Missing/outdated docstrings on default appModule scripts

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.

Missing docstrings

  • reportFormatting
  • reportCurrentLine
  • moveNavigatorObjectToMouse

Outdated docstrings

  • There is no information about the behaviour when keys are double pressed; including:
    • reportCurrentLine
    • reviewCurrentLine
    • reviewCurrentWord
    • dateTime

Improve status bar search

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.

Allow clickable elements to be activated

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.

vertualize dialogue boxes

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

Announce shortcut keys after the content for some roles

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".

Test Case

Announce number of character repititions instead of truncating to 5

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".

Questions

  • Should this be configurable?
    • Is the current behaviour preferable in some cases? If so, there could be an option to switch back to the old behaviour.
    • Should the number of occurrences of a repeated character before this behaviour is triggered be configurable? I think this is overkill; 3 occurrences (2 repititions) should be fine, as "- 3 times" is the same number of syllables as "---".
      Blocked by #332

Separate virtual buffer pass through mode for each buffer

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.

Provide a stand alone synth driver for eSpeak

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:

  • eSpeak uses !PortAudio to provide cross-platform audio output. I'm not sure how well this works under Windows and getting eSpeak to compile against !PortAudio in Windows could be tricky. I suspect this is asynchronous and probably requires POSIX threads (see below).
  • eSpeak could supply audio data to NVDA and NVDA could play the audio data in another thread.
    There is also the question of synchronous and asynchronous operation. eSpeak does support asynchronous operation (where the function doesn't block), but this is only supported on platforms with POSIX threads. If we wanted to use asynchronous mode, we would need to adapt eSpeak to use Windows threads.

Pass key through command

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.

Dead keys get inserted and break typing of accented characters

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.

Description of scripts in keyboard help are not translatable

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 _()

Support SysListView32 groups

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).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.