Bug 4770 - Accessibility Problems (1GHQMR9)
Summary: Accessibility Problems (1GHQMR9)
Status: RESOLVED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 2.0   Edit
Hardware: All All
: P4 normal (vote)
Target Milestone: ---   Edit
Assignee: Carolyn MacLeod CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2001-10-11 14:22 EDT by Carolyn MacLeod CLA
Modified: 2004-07-07 14:53 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Carolyn MacLeod CLA 2001-10-11 14:22:42 EDT
This PR is a collecting place for SWT accessibility concerns/info.

	The US has a law stating that starting June 21, 2001, all software 
purchased for government use must be accessible.
		http://www.section508.gov/

	IBM has created an accessibility checklist (that we have to conform to) 
at either:
		http://www-3.ibm.com/able/accesssoftware.html
		http://w3.austin.ibm.com/~snsinfo/softwarecheck.html

	Overview:
	Because we are mostly native, SWT fared pretty well in passing most 
(but not all) of the items on the checklist.
	More testing is required to check all areas thoroughly, and to make 
sure that the areas that we fix are compliant.
	We got lucky with StyledText, because it uses TextOut/ExtTextOut to 
send text directly to the control, but more
	testing is definitely required, and we still may need to do work. GDA 
will send us the test tool, JAWS, when he gets it.

	Details of where we fail:
	1) The number one accessibility concern is that every single action 
must have a keyboard equivalent.
	People who have trouble seeing, or manual dexterity problems, cannot 
use the mouse. You must be
	able to take away the mouse and still use the application effectively. 
This also means that every widget
	(or custom widget) must be traversable using tab traversal (tab, ctrl-
tab, arrow keys, ...). This is required.
	A specific custom widget that we have to add traversal capability to is 
CTabFolder (probably ctrl-TAB).
	The ability for the application to specify a logical tab order is also 
very important, but not required.

	2) Widget names. Each widget needs to have a logical name so that 
screen reader software doesn't
	sound bad when it says the widget's name. We need to add API to allow 
setting of widget names.

	3) "Object information" must be available to accessibility tools. What 
this means is that our custom controls
	may need to implement IAccessible on Windows (see below). We will need 
to evaluate each custom control,
	but one that definitely needs work is that CTabFolder tabs need to 
expose their names.
	My own personal opinion is that if we have to implement IAccessible for 
any one custom control in order to
	meet the requirements, then we may as well implement it for all of the 
custom controls. Question: In order
	to implement the COM IAccessible interface, do we need to include the 
whole OLE portion? i.e. If we have to
	implement it for even one custom control, do we then need to say that 
OLE is required for accessibility?

	4) We need to verify that we do not interfere with accessibility 
shortcuts (see below for details),
	i.e. check that StyledText does not use Shift keys, because 5 
consecutive Shifts enters "StickyText" mode.
		CM (8/2/2001 1:28:29 PM) Note: StickyText mode works fine, even 
when a StyledText has focus.

	5) We need to check if magnifier tools track focus properly in 
StyledText and all custom controls.

	6) StyledText and ViewForm don't do high contrast mode well (see 
below). The user has to restart Eclipse
	to get the color changes, and even then, some of the colors in 
StyledText are not contrasted enough (for example,
	the black on black text is hard to read ). Likewise, wizard banners 
have white text on white banner background.
	Also, dialog fonts don't change, and they should, but this may be a 
Windows problem because apparently dialog
	fonts don't change for other Windows applications either. We should 
investigate and maybe work around or document.
	Not sure how much of this high contrast color/font stuff is UI work and 
how much is SWT work.

	7) Double-click time cannot be hard-coded. It must use the system 
setting, or be user-settable in the application.
	Currently, double-click is not hard-coded on Win & X, but it looks like 
GTK and Photon need work.
		Windows:	return OS.GetDoubleClickTime ();
		X:					return 
OS.XtGetMultiClickTime (xDisplay);
		Photon:		return 250; //NOT DONE
		GTK:				return DOUBLE_CLICK_TIME; // 
where private final int DOUBLE_CLICK_TIME = 250;

	Details of what we may have to (or want to) do to ensure compliance:
	1) On Windows, Microsoft has provided the MS Active Accessibility 
(MSAA) SDK.
		http://www.microsoft.com/enable/msaa/default.htm
	This is included in 98, 2K, and ME, and it can be added to 95 and NT 
(via service packs).
	Basically, it is a COM-based API in OLEACC.DLL that you access through 
the IAccessible interface.
	Each control answers some basic information, such as Name, Role, State, 
Value, Selection,
	Focus, Description, Parent, Child, ChildCount, Help, HelpTopic, 
DefaultAction, KeyboardShortcut,
	(plus some other very interesting possibilities for automated SWT 
testing, such as Select,
	DoDefaultAction, Navigate, HitTest, and Location).

	2) On the Linux side, Gnome says that it will "soon" be providing 
accessibility that is "loosely based on"
	the Java Accesibility API (which was in turn based on MSAA). Gnome 
accessibility details are at:
		http://developer.gnome.org/projects/gap/

	Testing tools and other "Assistive Technology" (AT) applications:
	1) The accessibility tools that come with Windows are:
		- Magnifier:  enlarges the portion of the screen that has 
focus. Magnification is adjustable.
			We can use this to test whether we are doing focus 
correctly in all cases.
		- Narrator:  a simple "screen reader" that reads the 
contents of widgets, using an electronic voice.
			We were playing with this when we got Win2K, and we saw 
that it could *NOT* read StyledText
			(or IE), but it could read Notepad. It obviously only 
supports widgets that support IAccessible.
		- The following are all settable under the ControlPanel 
Accessibility Options (or by using wierd keyboard shortcuts):
		- High Contrast: Changes screen colors to high contrast mode 
and enlarges fonts, for color-blind users, or sunny locations.
			To enable/disable, press LEFT ALT + LEFT SHIFT + PRINT 
SCREEN.
		- FilterKeys: controls key and autorepeat key timing, and audio 
feedback for keystrokes.
			To enable/disable, hold down the RIGHT SHIFT key for 8 
(or 12 or 16) seconds.
		- MouseKeys: user can use numeric keypad to control mouse 
cursor.
			To enable/disable, press LEFT ALT + LEFT SHIFT + NUM 
LOCK
		- StickyKeys: lets the user type key combinations such as 
CTRL+ALT+DEL in sequence rather than in parallel.
			To enable/disable, press the SHIFT key 5 times.
		- ToggleKeys: provides sound feedback when the user turns on or 
off CAPS LOCK, NUM LOCK, or SCROLL LOCK.
			To enable/disable, hold down the NUM LOCK key for 5 
seconds.
		- SerialKeys: lets a user plug a special type of keyboard into 
the serial port
		- SoundSentry: displays a visual signal when a sound is 
generated. (enables hard-of-hearing users to see beep, etc)

	2) In the MSAA there are several useful tools:
		- Inspector: shows the IAccessible field values for the control 
under the mouse
		- MSAA Verification Tool: shows the entire widget tree, and 
IAccessible fields, for any top level window(s)
		- AccessibleExplorer: similar to Inspector, except it shows 
hierarchical info for the current control
		- AccessibleEventWatcher: logs WinEvents

	3) JAWS is a popular "screen reader" (it is the defacto standard). It 
is similar to the Narrator, except smarter.
		It **IS** able to read the contents of a StyledText. This is 
where we got lucky. We may be able to claim that StyledText
		is accessible because JAWS can read it. Note however that our 
tests were extremely superficial, and we do need to
		test further. One caveat is that if we ever modify StyledText 
to write to an offscreen bitmap and then BLT that to the
		screen, we will definitely break this lucky accessibility, and 
we will have to do a full MSAA implementation for StyledText
		(although we may find that we want to do this for all custom 
controls anyway).

NOTES:
	CM (8/1/2001 12:07:51 PM)
		For a list of all shortcut keys in Win 98 or 2000, go to:
		
	http://www.microsoft.com/enable/products/keyboard/keyboardsearch.asp
		Some interesting ones:
		- ASTERISK (on the numeric keypad): Expand view of everything 
under the current selection when working in Windows Explorer-Tree view.
		- SHIFT+F10 or Application key (also the right mouse click): 
Display a shortcut menu that shows a list of commands relevant to the selected 
object.
		- Windows logo key+BREAK: Open the System Properties dialog box.
		- Windows logo key+E: Open the Windows Explorer.
Comment 1 Nick Edgar CLA 2001-10-16 09:20:22 EDT
Regarding tabbed folder accessibility, I was just playing around with IE's 
Internet Options dialog.  Here is some interesting behaviour:
- The tabs take focus in the tabbing sequence, then arrow keys can be used to 
cycle between them.  Using the arrow keys does not cycle from last to first, or 
first to last tab.
- CTRL+TAB and CTRL+PAGE_DOWN activate next tab, even if tabs don’t have 
focus.   These cycle back to first tab if pressed when last tab active.
- CTRL+SHIFT+TAB and CTRL+PAGE_UP activate previous tab, even if tabs don’t 
have focus.  These cycle back to last tab if pressed when first tab active.
- Clicking on non-active tab with mouse makes it active, but does not give it 
focus – it gives focus to the first widget on the page instead.  Likewise when 
cycling using keys.  However, if tabs have focus, they keep focus when cycling.
Comment 2 DJ Houghton CLA 2001-10-29 16:37:14 EST
PRODUCT VERSION:
	0.9

Comment 3 Veronika Irvine CLA 2004-07-07 14:53:49 EDT
Closing this bug report because the items are either implemented or captured 
elsewhere.