Bug 422744 - process a11y events caused by DOM events by target document, r=fer, a=blocking2.0Final+

This commit is contained in:
Alexander Surkov 2010-12-13 14:06:34 -08:00
parent 13e7636df7
commit b3c3197851
3 changed files with 18 additions and 12 deletions

View File

@ -355,6 +355,9 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible,
if (gLastFocusedNode == focusNode && !aForceEvent)
return;
nsDocAccessible* focusDocument = focusAccessible->GetDocAccessible();
NS_ASSERTION(focusDocument, "No document while accessible is in document?!");
gLastFocusedAccessiblesState = nsAccUtils::State(focusAccessible);
// Fire menu start/end events for ARIA menus.
@ -373,7 +376,7 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible,
menuBarAccessible, aIsFromUserInput,
AccEvent::eAllowDupes);
if (menuStartEvent)
FireDelayedAccessibleEvent(menuStartEvent);
focusDocument->FireDelayedAccessibleEvent(menuStartEvent);
}
}
}
@ -384,7 +387,7 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible,
new AccEvent(nsIAccessibleEvent::EVENT_MENU_END, mCurrentARIAMenubar,
aIsFromUserInput, AccEvent::eAllowDupes);
if (menuEndEvent) {
FireDelayedAccessibleEvent(menuEndEvent);
focusDocument->FireDelayedAccessibleEvent(menuEndEvent);
}
mCurrentARIAMenubar = nsnull;
}
@ -395,9 +398,10 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible,
// Coalesce focus events from the same document, because DOM focus event might
// be fired for the document node and then for the focused DOM element.
FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_FOCUS,
focusNode, AccEvent::eCoalesceFromSameDocument,
aIsFromUserInput);
focusDocument->FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_FOCUS,
focusNode,
AccEvent::eCoalesceFromSameDocument,
aIsFromUserInput);
}
void
@ -459,6 +463,9 @@ nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
if (!accessible)
return NS_OK;
nsDocAccessible* targetDocument = accessible->GetDocAccessible();
NS_ASSERTION(targetDocument, "No document while accessible is in document?!");
nsINode* targetNode = accessible->GetNode();
nsIContent* targetContent = targetNode->IsElement() ?
targetNode->AsElement() : nsnull;
@ -692,8 +699,9 @@ nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent)
FireCurrentFocusEvent();
}
else if (eventType.EqualsLiteral("ValueChange")) {
FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_VALUE_CHANGE,
targetNode, AccEvent::eRemoveDupes);
targetDocument->
FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_VALUE_CHANGE,
targetNode, AccEvent::eRemoveDupes);
}
#ifdef DEBUG_DRAGDROPSTART
else if (eventType.EqualsLiteral("mouseover")) {

View File

@ -67,12 +67,11 @@
{
document.getElementById(this.ID).style.display = 'block';
document.getElementById(this.ID).focus();
todo(false, "Enable show event handling when bug 422744 is fixed.");
}
this.eventSeq = [
new invokerChecker(EVENT_FOCUS, this.DOMNode),
// new invokerChecker(EVENT_SHOW, this.DOMNode)
new invokerChecker(EVENT_SHOW, this.DOMNode),
new invokerChecker(EVENT_FOCUS, this.DOMNode)
];
this.getID = function showNFocusAlertDialog_getID()

View File

@ -43,7 +43,6 @@
this.invoke = function setCaretOffsetInvoker_invoke()
{
this.target.caretOffset = aOffset;
todo(false, "Enable focus event handling when bug 422744 is fixed.");
}
this.getID = function setCaretOffsetInvoker_getID()
@ -52,7 +51,7 @@
}
this.eventSeq = [
// new invokerChecker(EVENT_FOCUS, this.target),
new invokerChecker(EVENT_FOCUS, this.target),
new caretMovedChecker(this.target, aOffset)
];
}