From 9f084b2c4f53b922f7ea408b4219a4a259edc8de Mon Sep 17 00:00:00 2001 From: "aaronleventhal%moonset.net" Date: Wed, 31 Jan 2007 15:13:39 +0000 Subject: [PATCH] Bug 365690. Don't fire focus events for autocomplete menus while editing a text field (XUL or HTML). r=ginn.chen git-svn-id: svn://10.0.0.236/trunk@219255 18797224-902f-48f8-a5cc-f745e15eee43 --- .../src/atk/nsDocAccessibleWrap.cpp | 2 ++ .../src/atk/nsRootAccessibleWrap.cpp | 22 +++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp b/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp index eb3101a1a1e..3bf36987cd1 100644 --- a/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp +++ b/mozilla/accessible/src/atk/nsDocAccessibleWrap.cpp @@ -490,6 +490,7 @@ NS_IMETHODIMP nsDocAccessibleWrap::FireToolkitEvent(PRUint32 aEvent, } break; case nsIAccessibleEvent::EVENT_SHOW: + case nsIAccessibleEvent::EVENT_MENUPOPUPSTART: MAI_LOG_DEBUG(("\n\nReceived: EVENT_SHOW\n")); atk_object_notify_state_change(accWrap->GetAtkObject(), ATK_STATE_VISIBLE, PR_TRUE); @@ -499,6 +500,7 @@ NS_IMETHODIMP nsDocAccessibleWrap::FireToolkitEvent(PRUint32 aEvent, break; case nsIAccessibleEvent::EVENT_HIDE: + case nsIAccessibleEvent::EVENT_MENUPOPUPEND: MAI_LOG_DEBUG(("\n\nReceived: EVENT_HIDE\n")); atk_object_notify_state_change(accWrap->GetAtkObject(), ATK_STATE_VISIBLE, PR_FALSE); diff --git a/mozilla/accessible/src/atk/nsRootAccessibleWrap.cpp b/mozilla/accessible/src/atk/nsRootAccessibleWrap.cpp index ef04b105fe5..43afb3027fe 100644 --- a/mozilla/accessible/src/atk/nsRootAccessibleWrap.cpp +++ b/mozilla/accessible/src/atk/nsRootAccessibleWrap.cpp @@ -240,10 +240,24 @@ nsresult nsRootAccessibleWrap::HandleEventWithTarget(nsIDOMEvent *aEvent, FireCurrentFocusEvent(); } else if (eventType.LowerCaseEqualsLiteral("popupshown")) { - FireAccessibleFocusEvent(accessible, aTargetNode, aEvent); - } - else if (eventType.EqualsLiteral("DOMMenuInactive")) { - //FireAccessibleFocusEvent(accessible, aTargetNode); // Not yet used in ATK +#ifdef MOZ_XUL + nsCOMPtr content(do_QueryInterface(aTargetNode)); + if (content->NodeInfo()->Equals(nsAccessibilityAtoms::tooltip, kNameSpaceID_XUL) || + content->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::type, + NS_LITERAL_STRING("autocomplete"), eIgnoreCase)) { + // 1) Don't fire focus events for tooltips, that wouldn't make any sense. + // 2) Don't fire focus events for autocomplete popups, because they come up + // automatically while the user is typing, and setting focus there would + // interrupt the user. + // ------------------------------------------------------------------------ + // If the AT wants to know about these popups it can track the ATK state change + // event we fire for ATK_STATE_INVISIBLE on the popup. + // This is fired as a result of the nsIAccessibleEvent::EVENT_MENUPOPUPSTART + // we fire in the nsRootAccessible event handling for all popups. + return NS_OK; + } +#endif + FireAccessibleFocusEvent(accessible, aTargetNode, aEvent); } return NS_OK; }