Bug 301621. Expose elements with onclick from addEventListener(). r=smaug

This commit is contained in:
aaronleventhal%moonset.net 2007-05-08 21:44:04 +00:00
Родитель 1950b72971
Коммит 92ec203f23
6 изменённых файлов: 23 добавлений и 5 удалений

Просмотреть файл

@ -39,6 +39,7 @@
// NOTE: alphabetically ordered // NOTE: alphabetically ordered
#include "nsAccessibilityAtoms.h" #include "nsAccessibilityAtoms.h"
#include "nsAccessibilityService.h" #include "nsAccessibilityService.h"
#include "nsAccessibilityUtils.h"
#include "nsCURILoader.h" #include "nsCURILoader.h"
#include "nsDocAccessible.h" #include "nsDocAccessible.h"
#include "nsHTMLAreaAccessible.h" #include "nsHTMLAreaAccessible.h"
@ -532,7 +533,8 @@ nsAccessibilityService::CreateHyperTextAccessible(nsISupports *aFrame, nsIAccess
nsCOMPtr<nsIContent> content(do_QueryInterface(node)); nsCOMPtr<nsIContent> content(do_QueryInterface(node));
NS_ENSURE_TRUE(content, NS_ERROR_FAILURE); NS_ENSURE_TRUE(content, NS_ERROR_FAILURE);
if (content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::onclick)) {
if (nsAccessibilityUtils::HasListener(content, NS_LITERAL_STRING("click"))) {
// nsLinkableAccessible inherits from nsHyperTextAccessible, but // nsLinkableAccessible inherits from nsHyperTextAccessible, but
// it also includes code for dealing with the onclick // it also includes code for dealing with the onclick
*aAccessible = new nsLinkableAccessible(node, weakShell); *aAccessible = new nsLinkableAccessible(node, weakShell);
@ -1249,7 +1251,7 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessible(nsIDOMNode *aNode,
// correspond to the doc accessible and will be created in any case // correspond to the doc accessible and will be created in any case
if (!newAcc && content->Tag() != nsAccessibilityAtoms::body && content->GetParent() && if (!newAcc && content->Tag() != nsAccessibilityAtoms::body && content->GetParent() &&
(content->IsFocusable() || (content->IsFocusable() ||
content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::onclick) || nsAccessibilityUtils::HasListener(content, NS_LITERAL_STRING("click")) ||
content->HasAttr(kNameSpaceID_WAIProperties, nsAccessibilityAtoms::describedby) || content->HasAttr(kNameSpaceID_WAIProperties, nsAccessibilityAtoms::describedby) ||
content->HasAttr(kNameSpaceID_WAIProperties, nsAccessibilityAtoms::labelledby) || content->HasAttr(kNameSpaceID_WAIProperties, nsAccessibilityAtoms::labelledby) ||
content->HasAttr(kNameSpaceID_WAIProperties, nsAccessibilityAtoms::required) || content->HasAttr(kNameSpaceID_WAIProperties, nsAccessibilityAtoms::required) ||

Просмотреть файл

@ -82,6 +82,7 @@ private:
* interface. * interface.
*/ */
nsresult GetAccessibleByType(nsIDOMNode *aNode, nsIAccessible **aAccessible); nsresult GetAccessibleByType(nsIDOMNode *aNode, nsIAccessible **aAccessible);
PRBool HasListener(nsIContent *aContent, nsAString& aEventType);
}; };
#endif /* __nsIAccessibilityService_h__ */ #endif /* __nsIAccessibilityService_h__ */

Просмотреть файл

@ -39,6 +39,7 @@
#include "nsAccessibilityUtils.h" #include "nsAccessibilityUtils.h"
#include "nsIDOMXULSelectCntrlEl.h" #include "nsIDOMXULSelectCntrlEl.h"
#include "nsIDOMXULSelectCntrlItemEl.h" #include "nsIDOMXULSelectCntrlItemEl.h"
#include "nsIEventListenerManager.h"
void void
nsAccessibilityUtils::GetAccAttr(nsIPersistentProperties *aAttributes, nsAccessibilityUtils::GetAccAttr(nsIPersistentProperties *aAttributes,
@ -155,3 +156,13 @@ nsAccessibilityUtils::SetAccAttrsForXULSelectControlItem(nsIDOMNode *aNode,
SetAccGroupAttrs(aAttributes, 0, indexOf + 1, itemsCount); SetAccGroupAttrs(aAttributes, 0, indexOf + 1, itemsCount);
} }
PRBool nsAccessibilityUtils::HasListener(nsIContent *aContent, const nsAString& aEventType)
{
NS_ENSURE_ARG_POINTER(aContent);
nsCOMPtr<nsIEventListenerManager> listenerManager;
aContent->GetListenerManager(PR_FALSE, getter_AddRefs(listenerManager));
return listenerManager && listenerManager->HasListenersFor(aEventType);
}

Просмотреть файл

@ -43,6 +43,7 @@
#include "nsIDOMNode.h" #include "nsIDOMNode.h"
#include "nsIPersistentProperties2.h" #include "nsIPersistentProperties2.h"
#include "nsIContent.h"
class nsAccessibilityUtils class nsAccessibilityUtils
{ {
@ -99,6 +100,8 @@ public:
*/ */
static void SetAccAttrsForXULSelectControlItem(nsIDOMNode *aNode, static void SetAccAttrsForXULSelectControlItem(nsIDOMNode *aNode,
nsIPersistentProperties *aAttributes); nsIPersistentProperties *aAttributes);
static PRBool HasListener(nsIContent *aContent, const nsAString& aEventType);
}; };
#endif #endif

Просмотреть файл

@ -41,6 +41,7 @@
#include "nsIAccessibilityService.h" #include "nsIAccessibilityService.h"
#include "nsIAccessibleDocument.h" #include "nsIAccessibleDocument.h"
#include "nsAccessibleWrap.h" #include "nsAccessibleWrap.h"
#include "nsAccessibilityUtils.h"
#include "nsGUIEvent.h" #include "nsGUIEvent.h"
#include "nsHyperTextAccessibleWrap.h" #include "nsHyperTextAccessibleWrap.h"
#include "nsILink.h" #include "nsILink.h"
@ -256,8 +257,7 @@ void nsLinkableAccessible::CacheActionContent()
} }
} }
} }
if (walkUpContent->HasAttr(kNameSpaceID_None, if (nsAccessibilityUtils::HasListener(walkUpContent, NS_LITERAL_STRING("click"))) {
nsAccessibilityAtoms::onclick)) {
mActionContent = walkUpContent; mActionContent = walkUpContent;
mIsOnclick = PR_TRUE; mIsOnclick = PR_TRUE;
break; break;

Просмотреть файл

@ -39,6 +39,7 @@
// NOTE: alphabetically ordered // NOTE: alphabetically ordered
#include "nsAccessibilityAtoms.h" #include "nsAccessibilityAtoms.h"
#include "nsAccessibilityUtils.h"
#include "nsBaseWidgetAccessible.h" #include "nsBaseWidgetAccessible.h"
#include "nsIDOMXULDescriptionElement.h" #include "nsIDOMXULDescriptionElement.h"
#include "nsINameSpaceManager.h" #include "nsINameSpaceManager.h"
@ -169,7 +170,7 @@ void nsXULLinkAccessible::CacheActionContent()
mIsLink = PR_TRUE; mIsLink = PR_TRUE;
mActionContent = mTempContent; mActionContent = mTempContent;
} }
else if (mTempContent->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::onclick)) { else if (nsAccessibilityUtils::HasListener(mTempContent, NS_LITERAL_STRING("click"))) {
mIsOnclick = PR_TRUE; mIsOnclick = PR_TRUE;
mActionContent = mTempContent; mActionContent = mTempContent;
} }