The Linux Foundation

 
Accessibility/IAccessible2/Agenda/20080415

From The Linux Foundation

Revision as of 23:20, 15 April 2008 by Ptbrunet (Talk | contribs)

(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)

Agenda for 2008/04/15

  1. Introductions if needed
  2. Prior minutes
    • Corrections? Approval?
  3. LF: Open A11y news - Janina
  4. Inspect tool - Mike Squillace
    • The latest AccProbe download is available from Eclipse.
  5. Firefox - Marco Zehe
  6. IA2 version 2 text attributes specification
    • The status of the pending proposed changes are:
      • Addition of attributes:
        • language - It was accepted during the March 04 meeting that the language attribute will be included in the text attributes and with values formatted according to IETF RFC 3066, e.g. en-US, de-DE.
        • We have heard from ATVs that the text direction attribute is valuable so it will be included in the text attributes. The direction attribute could either be defined by the CSS2 direction attribute with has two values, ltr and rtl, or by section 7.27.7 of the XSL spec which uses an attribute named writing-mode and has values of rl, lr, and tb (top to bottom, i.e. text flows from top to bottom, then left to right). It turns out that writing-mode was in an earlier version of the CSS3 Text spec but was found to be a mistake, has been taken out, and will be eventually put back in some form in a CSS3 Text Layout spec. For this meeting consider the following:
          • Should we wait for CSS3 to finalize, i.e. is tb (top to bottom) important to ATs? It doesn't seem useful, i.e this indicates that text is rendered from top to bottom and then from left to right (or maybe also right to left). It seems that this is only useful for display renderers and doesn't make sense for someone providing a text string like an IA2 implementer.
        • margin-top - Discussions leading up to this meeting have indicated that margin attributes should not be included in the text attributes because they define either margins for a paragraph or for a page. So margin-top should be added to the existing margin-bottom/left/right attributes, but these attributes should be used on paragraph and document objects, not in the set of text attributes.
      • Addition of comments:
        • When margin-left/right/top/bottom are documented as object attributes should we suggest that mm be used for paper based documents and px for web based documents?
        • For font-size should be suggest that pt be used for paper based documents and px for web based documents?
  7. IA2 object attributes
    • For now I am going to refer to the Firefox spec and the Symphony spec which will be published a bit later.
    • What is your preference?
      • Each app defines their object attributes
      • An IA2 spec is created to standardize the set of object attributes
  8. IA2 IDL documentation
    • A backlog of issues continues to be addressed. There is approximately two weeks of work remaining.
  9. Interop with UIA
    • At CSUN Rob Sinclair, Microsoft's Director of Accessibility, asked if IA2 could be extended to add support for ChildIDs. This issue can be resolved by adding two methods from UIA Express which were added to UIA Express to solve the same issue. The two methods are GetObjectForChild and GetIAccessiblePair. This issue has been documented as issue 114 in bugzilla and all relevant history is being logged there. The following issues remain.
      1. Does the UIA Community Promise place any restrictions on use of those two methods? The UIA Community Promise has language indicating that if any UIA methods are implemented then all UIA required methods must be implemented.
      2. How would Open A11y collaborate with AIA (Accessibility Interoperability Alliance)?
        • UIA and UIA Express are now being developed within the AIA.
        • IA2 and ATK/AT-SPI are being developed within the Linux Foundation Open Accessibility workgroup.
        • The current 1.0 version of IA2 is moving forward to completion and approval. Later versions containing revisions such as the addition of the two methods supporting childIDs may be the result of coordination between the AIA and the Linux Foundation Open A11y workgroup.
        • The Open A11y group, as well as IBM and Sun, have been concerned about the degree to which the AIA is open and the number of platforms to which the AIA work applies. As of yet, IBM and Sun have not joined the AIA. AIA representatives have attended the Open A11y meetings to start discussing how the two organizations would collaborate. IBM has been working with the AIA Steering Committee to help define a more open environment, e.g. a larger Steering Committee voted on by AIA members and alignment with Open A11y standards efforts.
  10. Proposal for access to misspellings, grammar errors, and "smart tags"
    • Oliver-Rainer Wittmann from Sun sent email describing an interface proposal for access to misspelling, grammar errors and "smart tags". This information will be posted later in the week, either on the list or in the minutes.
  11. Tables where cells are not children of tables.

    The Firefox 3 group has encountered cases where cells can't be children of the table.

    • From Marco Zehe:
      We are facing a major problem with the way table accessibles, table cells, table rows etc. sometimes interact with one another in HTML content. More specifically: There may be situations where a table cell is not a direct child of the table, because a table row may have something interesting for Mozilla to expose (ARIA, OnClick handlers etc.).

      In such cases, there is going to be a mismatch between methods like GetIndexInParent on the one hand, and GetColumnAtIndex or GetRowAtIndex on the other. When the former is being executed on a table cell, and this cell is not a direct child of the table, the child index cannot be used to query the table for the ColumnAtIndex or RowAtIndex. Orca currently uses this technique when the "Where Am I?" command is being executed on a table cell, to give the user row and column numbers, column header information etc., and it fails with several kinds of commonly encountered HTML content.

      To work around this problem in Firefox 3, and since nobody replied to our call for opinions on the mozilla.dev.accessibility newsgroup, we've decided to implement a cell-number attribute on each cell that can then be used to query the row and column index from the table accessible.

      However since we actually don't like our supporters parsing attributes unless absolutely necessary, we'd like to propose a different approach for a future implementation of AT-SPI and IA2: Give cell accessibles another attribute called cell-number (or something similar) that can then be used instead of GetIndexInParent. The resulting value can then be used to query the table for the column and row numbers of that cell number.

    • From Pete:
      Andres Gonzalez from Adobe brought up a similar issue last summer.

      See item 3 here: http://www.linux-foundation.org/en/Accessibility/IAccessible2/Agenda/20070626

      and item 3 here: http://www.linux-foundation.org/en/Accessibility/IAccessible2/Minutes/20070626

      and this is the documentation I've added to my working copy of IATable:

      When an event is fired from a cell, there needs to be a way to determine the row and column indexes. How this is done depends on how the table is structured.
      • If all the cells are children of the table, IAccessible2::indexInParent will return the child index which then can be used when calling IAccessibleTable::rowIndex and IAccessibleTable::columnIndex
      • If the table's direct children are row objects when in turn have cells as children then the table object can create a mapping from IAccessible2::uniqueID to row and column indexes, i.e. IAccessible2::uniqueID can first be called and then the uniqueID can be used when calling IAccessibleTable::rowIndex and IAccessibleTable::columnIndex. When possible applications should use the first implementation as that is what AT (Assistive Technology) will normally expect. Otherwise the AT will need to be aware that the application requires the secondary means to access row and column indexes.
      At least for now the AT would have to know the behavior of implementation, i.e. whether its tables use uniqueID or ChildID to map from IDs to rows/cols. It would be helpful if there was an object attribute on tables to indicate the mapping scheme, e.g. maps-rows-and-cols-using-uniqueIDs:true/false.

      ATK would need to be extended to add uniqueID. It's also useful for other purposes. Here's the description of uniqueID from my working copy of the IA2 spec:

      The uniqueID is an identifier for this object, is unique within the current window, and remains the same for the lifetime of the accessible object.

      The uniqueID is not related to the MSAA objectID which is used by the server to disambiguate between IAccessibles per HWND or the MSAA childID which is used to disambiguate between children being managed by an IAccessible.

      This value is provided so the AT can have access to a unique runtime persistent identifier even when not handling an event for the object.

      An example of when this value is useful is if the AT wants to build a cache. The AT could cache the uniqueIDs in addition to other data being cached. When an event is fired the AT could map the uniqueID to its internal model. Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the internal structure has been invalidated and can refetch just that part.This value can also be used by and AT to determine when the current control has changed. If the role is the same for two controls that are adjacent in the tab order, this can be used to detect the new control.

      Another use of this value by an AT is to identify when a grouping object has changed, e.g. when moving from a radio button in one group to a radio button in a different group.

      One means of implementing this would be to create a factory with a 32 bit number generator and a reuse pool. The number generator would emit numbers starting at 1. Each time an object's life cycle ended, its number would be saved into a reuse pool. The number generator would be used whenever the reuse pool was empty.

    • From Aaron:
      Using an object attribute "cell-number" seems simpler. No changes to ATK required, and the AT can just check to see if the attribute is there and use that instead of the indexInParent.
  12. Access to document revisions - from the ODF AccSC
    • No additional progress has been made regarding the revision interface since the last meeting.

enum IA2RevisionType {
  IA2_REVTYPE_INSERTION, 
  IA2_REVTYPE_DELETION
};

typedef struct {
    enum IA2RevisionType type;  
    BSTR time;  ///< ISO 8601 format:  YYYY-MM-DDThh:mm:ss (eg 1997-07-16T19:20:21)
    BSTR author;
    BSTR comments;
} IA2RevisionAttributes;

IARevisionText:
 
// Note: an object that implements IARevisionText must also implement IAText
 
// returns the number of segments available for the
// block of text represented by the IARevisionText object.
// this number is 1 based
get_segmentCount( long* count );
 
// returns a specific segment based on the index passed in
// the index is 0 based.
// no two indexes should return the same segment.
// any index >= 0, and less than the segment count should return a valid segment
// any index outside those bounds should set HRESULT to S_FALSE and return NULL
get_segment( long index,  IARevisionSegment** seg );
 
// returns a segment whose boundaries encompass the offset provided
// if there are no segments that correspond to the given offset, an error is produced
// offsets correspond identically to those used by IAText and IAHyperlink
get_segmentAtOffset( long offset, IARevisionSegment** seg );

IARevisionSegment:
 
// returns the bounding offsets of the segment within the IARevisionText/IAText object.
// the end offset is one past the last character in the revision text
get_bounds( long* start, long* end );

// returns a struct containing date/time, author, and comments
get_attributes( IA2RevisionAttributes *attributes );
 
// returns a set of name value pairs describing additional application
// specific attributes in the format "name:value;name:value"
get_extraAttributes( BSTR* extraAttributes );

No progress on the following

  1. Eclipse
  2. Move latest frozen 3/16/2007 1.0 IDL to BZR
  3. Documentation of memory management issues for [out] parameters - the following need to be understood and documented.
    • Here is a rough first draft:
      • BSTRs need to be SysFreeString'd at end of life; ditto for when they are in structs or arrays.
      • COM interfaces need to be AddRef'd when used and Release'd at end of life.
      • Single longs, HWNDs, booleans, and structs are allocated by the caller and passed by reference. The marshaller does all the memory management. (I don't believe there are any structs with BSTRs or interface pointers.)
      • Arrays of longs - the server allocates the top level array and anything it points to; nothing needs to be free'd by the client. The marshalling code handles freeing anything on the client side.
      • TBD: How are VARIANTs handled? Like interfaces? These methods return VARIANTs: IAHyperlink::anchor/anchorTarget, IAValue::current/maximum/minimumValue
      • TBD: Are arrays of IUnknowns, e.g. IARelation::targets, correctly specified as **IUnknown?
      • This Don Box article can be used for understanding: http://www.microsoft.com/msj/1196/activex1196.aspx
  4. Wikipedia
  5. Developer Guide
  6. Oleacc.idl
    • No new status on when it will be back in the SDK.
  7. BZR patch submission process
  8. Enter defects into Bugzilla

Other Topics

  1. What else needs to be discussed?
  2. What IA2 information do you need?
  3. What IA2 issues need resolution soon? Target date?
  4. What would you like to see done?
    • FAQ
    • Others?

[Article] [Discussion] [View source] [History]