diff --git a/mozilla/accessible/src/base/nsRootAccessible.cpp b/mozilla/accessible/src/base/nsRootAccessible.cpp index 20063415924..0ee3e4d6c59 100644 --- a/mozilla/accessible/src/base/nsRootAccessible.cpp +++ b/mozilla/accessible/src/base/nsRootAccessible.cpp @@ -50,6 +50,7 @@ #include "nsIDOMHTMLSelectElement.h" #include "nsIDOMNSEvent.h" #include "nsIDOMWindow.h" +#include "nsIDOMXULMultSelectCntrlEl.h" #include "nsIDOMXULSelectCntrlEl.h" #include "nsIDOMXULSelectCntrlItemEl.h" #include "nsIDocument.h" @@ -65,7 +66,6 @@ #include "nsRootAccessible.h" #ifdef MOZ_XUL #include "nsXULTreeAccessible.h" -#include "nsITreeSelection.h" #include "nsIXULDocument.h" #endif #include "nsAccessibilityService.h" @@ -296,6 +296,9 @@ void nsRootAccessible::GetEventShell(nsIDOMNode *aNode, nsIPresShell **aEventShe NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) { + // Turn DOM events in accessibility events + + // Get info about event and target // optionTargetNode is set to current option for HTML selects nsCOMPtr targetNode, optionTargetNode; GetTargetNode(aEvent, getter_AddRefs(targetNode)); @@ -304,11 +307,16 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) nsAutoString eventType; aEvent->GetType(eventType); + nsAutoString localName; + targetNode->GetLocalName(localName); #ifdef DEBUG_aleventhal // Very useful for debugging, please leave this here. if (eventType.EqualsIgnoreCase("DOMMenuItemActive")) { printf("debugging events"); } + if (localName.EqualsIgnoreCase("tree")) { + printf("debugging events"); + } #endif // Check to see if it's a select element. If so, need the currently focused option @@ -345,27 +353,22 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) #ifdef MOZ_XUL // If it's a tree element, need the currently selected item - PRInt32 treeIndex = -1; - nsCOMPtr treeBox; nsCOMPtr treeItemAccessible; - nsXULTreeAccessible::GetTreeBoxObject(targetNode, getter_AddRefs(treeBox)); - if (treeBox) { - nsCOMPtr view; - treeBox->GetView(getter_AddRefs(view)); - if (view) { - nsCOMPtr selection; - view->GetSelection(getter_AddRefs(selection)); - if (selection) { - selection->GetCurrentIndex(&treeIndex); - if (treeIndex >= 0) { - // XXX todo Kyle - fix bug 201922 so that tree is responsible for keeping track - // of it's own accessibles. Then we'll ask the tree so we can reuse - // the accessibles already created. - nsCOMPtr weakEventShell(do_GetWeakReference(eventShell)); - treeItemAccessible = new nsXULTreeitemAccessible(accessible, targetNode, - weakEventShell, treeIndex); - if (!treeItemAccessible) - return NS_ERROR_OUT_OF_MEMORY; + if (localName.EqualsLiteral("tree")) { + nsCOMPtr multiSelect = + do_QueryInterface(targetNode); + if (multiSelect) { + PRInt32 treeIndex = -1; + multiSelect->GetCurrentIndex(&treeIndex); + if (treeIndex >= 0) { + // XXX todo Kyle - fix bug 201922 so that tree is responsible for keeping track + // of it's own accessibles. Then we'll ask the tree so we can reuse + // the accessibles already created. + nsCOMPtr weakEventShell(do_GetWeakReference(eventShell)); + treeItemAccessible = new nsXULTreeitemAccessible(accessible, targetNode, + weakEventShell, treeIndex); + if (!treeItemAccessible) { + return NS_ERROR_OUT_OF_MEMORY; } } } @@ -493,7 +496,7 @@ NS_IMETHODIMP nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) FireAccessibleFocusEvent(accessible, targetNode); } else if (eventType.EqualsIgnoreCase("select")) { - if (treeBox && treeIndex >= 0) { // it's a XUL + if (treeItemAccessible) { // it's a XUL // use EVENT_FOCUS instead of EVENT_ATK_SELECTION_CHANGE privAcc = do_QueryInterface(treeItemAccessible); privAcc->FireToolkitEvent(nsIAccessibleEvent::EVENT_FOCUS, diff --git a/mozilla/toolkit/content/widgets/autocomplete.xml b/mozilla/toolkit/content/widgets/autocomplete.xml index 55ace52c0cd..32e06b3433a 100644 --- a/mozilla/toolkit/content/widgets/autocomplete.xml +++ b/mozilla/toolkit/content/widgets/autocomplete.xml @@ -236,8 +236,17 @@ + onget="return this.mInputElt.value;"> + + @@ -465,6 +474,11 @@ this.tree.view.selection.select(val); if (this.tree.treeBoxObject.height > 0) this.tree.treeBoxObject.ensureRowIsVisible(val < 0 ? 0 : val); + // Fire select event on xul:tree so that accessibility API + // support layer can fire appropriate accessibility events. + var event = document.createEvent('Events'); + event.initEvent("select", true, true); + this.tree.dispatchEvent(event); return val; ]]> diff --git a/mozilla/xpfe/components/autocomplete/resources/content/autocomplete.xml b/mozilla/xpfe/components/autocomplete/resources/content/autocomplete.xml index 532d325b180..66773782217 100644 --- a/mozilla/xpfe/components/autocomplete/resources/content/autocomplete.xml +++ b/mozilla/xpfe/components/autocomplete/resources/content/autocomplete.xml @@ -66,11 +66,17 @@ + onget="return this.mInputElt.value;"> + + @@ -1175,6 +1181,12 @@ if (aRow != null) this.mBoxObject.ensureRowIsVisible(aRow); + + // Fire select event on xul:tree so that accessibility API + // support layer can fire appropriate accessibility events. + var event = document.createEvent('Events'); + event.initEvent("select", true, true); + this.mTree.element.dispatchEvent(event); }, get selectedIndex() @@ -1357,19 +1369,9 @@ - - - + 0 @@ -1510,6 +1512,8 @@ +