Accessibility/Accessible Table Implementation
Jump to navigation
Jump to search
Proposals
- The current proposal to harmonize how Firefox exposes trees, whether they come from XUL or ARIA, and for both ATK and IA2 is here: https://bugzilla.mozilla.org/show_bug.cgi?id=367905
ATK/AT-SPI implementations
gtkTable
- getAccessibleAt(0, 0) returns the top-left data cell. Row and column headers cannot be fetched using using this method.
- getIndexAt(0,0) returns the child index under the table accessible of the top-left data cell. Again, row and column headers cannot be fetched using this method.
- getRowHeader(n), getColumnHeader(n) return the accessible representing the one and only one header on the nth row and nth column. Only one header is allowed per row and column in gtk as far as I know.
- getRowDescription(n), getColumnDescription(n) return the accessible text or name on the one and only one header on the nth row and nth column. This is equivalent to getRowHeader(n).name or getRowHeader(n).queryInterface(<whatever the text idd is>).getText(0,-1). I can't tell which one gail is doing for us without looking at the gail code.
- I have never seen a row or column span in gtkTables, so it's hard to test getRowExtentAt and getColumnExtentAt. Everything returns 1 as expected.
- Once the table receives focus, the arrow keys move the selection within the table. Pressing up when selection is in the top row has no effect: selection never reaches the headers. Pressing Shift-Tab does move focus to the header on the currently active column though. Once one of the headers has focus, the left/right arrow keys move focus among the headers. Interestingly, pressing down arrow from any of the headers gives focus back to the table and selects the top cell in the column under the header losing focus.
- The table container fires focus: events. Moving the active selection box within the table causes object:active-descendant-changed events. Moving the focus among the headers causes focus: events.
OpenOffice.org Calc (2.0.4)
- getAccessibleAt(0, 0) returns the top-left data cell. Row and column headers cannot be fetched using using this method.
- getIndexAt(0,0) returns the child index under the table accessible of the top-left data cell. Again, row and column headers cannot be fetched using this method.
- The accessible name on any data cell is it's header (e.g., 'Cell A1'). The accessible text is its shown content.
- getRowHeader(n), getColumnHeader(n) return None in all cases.
- getRowDescription(n), getColumnDescription(n) return empty strings in all cases.
- getRowExtentAt and getColumnExtentAt return 1 in all cases, even for cells that span rows and columns.
- Once the table receives focus, the arrow keys move the selection within the table. You can never give the headers focus.
- The table container fires focus: events. Moving the active selection box within the table causes object:active-descendant-changed events.
Firefox bookmark tree table (XUL)
- getAccessibleAt(0, 0) returns the top-left data cell. Row and column headers cannot be fetched using using this method.
- getIndexAt(0,0) returns the child index under the table accessible of the top-left data cell. Again, row and column headers cannot be fetched using this method.
- getRowHeader(n), getColumnHeader(n) return the accessible representing the header on the nth row and nth column. I have not found a XUL table with more than one header.
- getRowDescription(n), getColumnDescription(n) getRowDescription(n), getColumnDescription(n) return the accessible text or name on the one and only one header on the nth row and nth column. This is equivalent to getRowHeader(n).name or getRowHeader(n).queryInterface(<whatever the text idd is>).getText(0,-1). I can't tell which one gail is doing for us without looking at the gail code.
- Cells the visually span columns (e.g., a separator in the bookmarks tree table), exist as separate cells in the table. getRowExtentAt(r,c) and getColumnExtentAt(r,c) return 1 for all rows and columns falling into the spanning cell.
- The table container fires no events. Moving the active selection box up and down within the table causes focus events on the cells in the first column. Focus cannot traverse other columns.
Firefox static HTML
- getAccessibleAt(0, 0) returns the top-left cell, even if it is marked as a header in the HTML source.
- getIndexAt(0,0) returns the child index under the table accessible of the top-left cell. Again, row and column headers are fetched using this method.
- getColumnHeader(n) returns the accessible representing the one and only one header on the nth column. getRowHeader(n) returns nothing, at least when row headers are marked with . Test multiple headers
- getRowDescription(n), getColumnDescription(n) always return an empty string.
- getRowExtentAt(r,c) and getColumnExtentAt(r,c) return the appropriate extents for all row and column offsets falling in the same cell.
- For cells with extents:
- getAccessibleAt(r,c) returns the same accessible object (a1 == b1) for all row and column offsets falling in the same cell.
- getIndexAt(r, c) returns the same index for all row and column offsets falling in the same cell.
- getRowAtIndex(i), getColumnAtIndex(i) return the upper left most offset applicable to the spanning cell.
- Events do not apply to a static HTML table.