зеркало из https://github.com/mozilla/pjs.git
Bug 301621. Expose elements with onclick from addEventListener(). r=smaug
This commit is contained in:
Родитель
1950b72971
Коммит
92ec203f23
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче