From The Linux Foundation
Revision as of 16:52, 16 September 2008 by Ptbrunet (Talk | contribs)

(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

Agenda for 2008/09/16

  1. Introductions if needed
  2. Approval of minutes - Corrections? Approval?
  3. LF: Open A11y news - Janina
  4. AccProbe inspect tool - Mike Squillace
  5. Firefox - Marco Zehe
    • Firefox 3 is implementing text attributes. This is being tracked with bug 340809.
    • References:
    • Static text:
      • Should lists of attribute values include the trailing comma? For example:
        See mail history from Pete/Jamie.
      • Is there a use case for attribute values indicating caret behavior?
        1. all: can move caret through text, i.e. the common case
        2. first: can only move caret to the first character, e.g. a date field in Symphony
        3. none: can't move the caret into the text at all, e.g. list item bullets/numbers
        • Joanie Diggs, an Orca developer, said there's no problem if IAText::setCaretOffset returns false when the caret can't be set.
        • IAText::setCaretOffset only specifies S_OK; it doesn't specify S_FALSE.
        • Marco, What does FF do when setCartOffset can't set the caret?
        • IAText::caretOffset returns S_FALSE if the caret is not currently active on this object, i.e. the caret is located on some other object. The returned offset value will be -1.
  6. Access to spelling and grammar errors
    • MSAA WinEvents cannot provide related information, i.e. the related strings which are in error. IA2 could provide this information via one of the following. Is either needed?
      1. Add methods to fetch the spelling/grammar error strings.
      2. If the asynchronous nature of this in the out of process situation of NVDA is a problem we may have to add an event registration/callback mechanism to IA2. The event mechanism would have the means to provide event specific information with the event.
  7. IA2 1.0.2 review
    • There are some errors in IAText::textAt/After/BeforeOffset. See the following two posts:
    • Review by Will Walker. From this review, we have the following issues:
      1. Does IA2 need role sets? ATK has it because the GTK can have a checkbox as a direct child of a table.
        • Andres Gonzalez said: I believe there is the need for a cell container, or structural element, for the case where a cell consists of several other objects like some static text, a check box and a link, all in the same cell of a table.
        • Larry Weiss said: The “problem” is the traditional use of role is to tell the user (and the AT) how to interact with the control. Now that GUIs are allowing applications to create a control that acts like both a checkbox and a table cell, the Accessibility API has to provide a means to convey that information. The challenge is how to enforce the correlation between what is presented to the user and the actual keyboard interactions available. In other words, how does the infrastructure handle a “slider table cell” (what does right arrow do)? It could either disallow this combination, or create a means for the user to interact with either the slider or the table cell.
        • The choices are:
          1. Require an intermediate cell.
          2. Add a new state, "is cell".
          3. Require the AT to look at the parent of the checkbox. The parent will have role table.
          4. Add role sets to the next version of IA2.
      2. The toolkit name and version should be moved from IAApplication to IAccessible2. Apps can be made up of objects from different toolkits, e.g. chrome vs presentation area.
        • This can't be added to version 1.0.2 because there are existing implementations using the IDL. We can open a defect and fix it in version 2, but do we need to solve this problem in 1.0.2? It could be solved in the short term via object attributes. Is anyone currently using these properties?
      3. Will requests roles as strings rather then integers.
        • ATs access roles via IAccessible2::role. Apps pass both MSAA roles and IA2 roles through that method. Using strings would be too disruptive.
      4. The format of IAAction::keyBinding should be described.
        • It's a user consumable and localized string. This should be mentioned in the commentary
      5. There is a single L, double L mismatch in the labelledBy relation:
        const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy"
        • This could be fixed by adding the double L version:
          const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy"
      6. There is no tooltipFor relation.
        • Should this be added? Although it's in ATK it's not used.
        • From Larry Weiss: What is the use case that is not covered by “describedBy”?
      7. If an object such as a table has IA2_MANAGES_DESCENDANTS and , how does an AT determine which child is active in a table? AT-SPI fires active-descendant-changed which includes the child index of the newly active child object.
        • This capability is incomplete in IA2. Although IA2 has the IA2_MANAGES_DESCENDANTS state and the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, there is no means to fetch an object's currently active child. This is data passed with the event in AT-SPI but WinEvents does not have the means to pass this kind of event specific data. This is been worked around for other events by adding properties that can be fetched on the event thread but the addition of a current active descendant property was overlooked during the IA2 design. In the current IA2 implementations the AT vendors requested that rather than the managing object firing the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event they preferred that the active child object fire MSAA's EVENT_OBJECT_FOCUS instead. This is a better situation for NVDA which is out of process and has no means to synchronously access an active descendant property.

          In the case of Symphony which maps UAAPI (an ATK/AT-SPI like environment) to IA2, the active descendant changed event is mapped to a focus event.

          At this point, it's probably best to document that IA2_MANAGES_DESCENDANTS state and the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event are deprecated and the later should be replaced with a focus event fired on the active child object.

          Also note that the commentary for the IA2_MANAGES_DESCENDANTS state is wrong. It talks about how it's provided as a signal to an AT so it knows it doesn't have to add listeners to the children. This is a carry over from the OpenOffice documentation used as a basis for the IA2 IDL. Windows has a single event queue rather than requiring registration of events on a per object basis. It also mentions that the parent object provides state notifications regarding the state of its children. As mentioned above In IA2 implementations the notifications come from the children. This commentary needs to be fixed in the IDL.

      8. IAccessibleValue::minimumValue - the commentary says: ...If this object has no upper bound. It should be "lower bound".
        • This should be fixed.
      9. IAValue should include methods to fetch the user consumable current, minimum, and maximum values, e.g. a slider may visually indicate three values (small, medium, large) but the programmatic values could be (1, 2, 3). The AT should be able to fetch the values as seen by the user. ATK also doesn't have this feature.
        • This seems like a good feature. Should IAValue be improved with this capability?
    • Remaining work items:
      • Review by Peter Korn.
      • Submit to the Linux Foundation Board of Directors for approval.
      • Move 3/26/2007 1.0.1 IDL to BZR.
      • When 1.0.2 is approved move the IDL to BZR.
  8. Proxy DLL
    • Jamies's RC file is different than the one attached to bug 110. He will send a diff to Pete for review. After resolving that Jamie will build a DLL and attach it to bug 110.
    • When the 1.0.2 files are added to BZR, Pete to include the files needed to build the proxy DLL.
    • Nobody has yet created the DLL using Visual C Express Edition so once someone has done that we need to update the process in the wiki.
    • That wiki page probably needs other changes.

No progress on the following

  1. Access to smart tags
    • Symphony uses IAHypertext/IAHyperlink for smart tags. This seems reasonable because smart tags are very similar to links. They represent actionable text. IAHyperlink can represent more than one action which is common for smart tags.
      • One requirement is for links and smart tags to be differentiated. This can be done with an object attribute on the accessible that represents the link object. Are there any issues with that approach?
  2. IA2 issues from Calvin Gaisford, opened on the behalf of AIA.
  3. IA2 object attributes specification.
    • The Symphony and FF3 object attributes will be reviewed. The common attributes will become part of the IA2 object attributes spec and the spec will reference the FF3 and Symphony specific specifications. (The Symphony object attributes are not documented on any Symphony web site, but they'll soon be documented on the IA2 site.)
    • Pete to add a "display" attribute with CSS2 values.
  4. Items raised by NVDA last year need to be put on the agenda for an upcoming Open A11y meeting
    • These are generic issues that need to be solved for both IA2 and ATK/AT-SPI dealing with objects contained in documents and tables
    • See items 4 and 5 in the October 2nd 2007 minutes for the history.
    • This was discussed during the January 22 Open a11y meeting.
    • These should be reopened and discussed with Willie and Li Yuan at a call convenient to the US, China, and Australia.
  5. Eclipse
  6. Wikipedia
  7. Developer Guide - Best practices document. We should start an outline for a best practices document. For starters it should define the following:
    • What events should be fired for each role and in what order.
    • What object hierarchy should be used. There are two today, a flat hierarchy as used in Symphony and a deeper hierarchy as used in Firefox. These two should be documented and in order to cut down on the proliferation of designs, future applications should attempt to use one or the other.
  8. Oleacc.idl
    • No new status on when it will be back in the SDK.
  9. FAQ
  10. Access to document revisions - from the ODF AccSC
    • This was reviewed by the AIA Interop group. The following issues were raised.
      • What is the solution for non-text attributes, e.g. tables, images, charts, cells, spreadsheets?
      • How are comment only revisions handled?
      • Probably need more kinds of format changes besides insertion, deletion, and format change.
      • Use cases are needed.
      • getSegmentAtOffset (singular) needs to be getSegmentsAtOffset (plural) because unlink links there could be overlapping insertions and deletions.
    • Once these issues are resolved Li Yuan, the committer for ATK/AT-SPI will develop a patch.

enum IA2RevisionType {
  IA2_REVTYPE_FORMAT_CHANGE  // The revision is due to any change in formatting attributes. 

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;
} IA2RevisionInformation;

// 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 );

// 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 );