diff --git a/accessible/src/base/nsAccessibilityAtomList.h b/accessible/src/base/nsAccessibilityAtomList.h index 6c05541cd7a8..ab835813474d 100755 --- a/accessible/src/base/nsAccessibilityAtomList.h +++ b/accessible/src/base/nsAccessibilityAtomList.h @@ -83,6 +83,7 @@ ACCESSIBILITY_ATOM(ul, "ul") // Alphabetical list of attributes ACCESSIBILITY_ATOM(accesskey, "accesskey") ACCESSIBILITY_ATOM(control, "control") +ACCESSIBILITY_ATOM(disabled, "disabled") ACCESSIBILITY_ATOM(_for, "for") ACCESSIBILITY_ATOM(id, "id") ACCESSIBILITY_ATOM(name, "name") diff --git a/accessible/src/base/nsAccessibilityService.cpp b/accessible/src/base/nsAccessibilityService.cpp index 9dd77e0b8461..d7a44427b3ed 100644 --- a/accessible/src/base/nsAccessibilityService.cpp +++ b/accessible/src/base/nsAccessibilityService.cpp @@ -448,7 +448,8 @@ nsAccessibilityService::CreateHTMLAccessibleByMarkup(nsISupports *aFrame, *aAccessible = new nsHTMLLinkAccessible(node, weakShell, frame); } #endif - else if (content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::tabindex) + else if (content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::tabindex) || + content->HasAttr(kNameSpaceID_XHTML2_Unofficial, nsAccessibilityAtoms::role) #ifndef MOZ_ACCESSIBILITY_ATK || tag == nsAccessibilityAtoms::blockquote || @@ -462,13 +463,7 @@ nsAccessibilityService::CreateHTMLAccessibleByMarkup(nsISupports *aFrame, tag == nsAccessibilityAtoms::q #endif ) { - *aAccessible = new nsGenericAccessible(node, weakShell); - } - else { - nsAutoString role; - if (content->GetAttr(kNameSpaceID_XHTML2_Unofficial, nsAccessibilityAtoms::role, role) == NS_CONTENT_ATTR_HAS_VALUE) { - *aAccessible = new nsGenericAccessible(node, weakShell); - } + *aAccessible = new nsAccessibleWrap(node, weakShell); } NS_IF_ADDREF(*aAccessible); return NS_OK; @@ -593,7 +588,7 @@ nsAccessibilityService::CreateHTMLGenericAccessible(nsISupports *aFrame, nsIAcce if (NS_FAILED(rv)) return rv; - *_retval = new nsGenericAccessible(node, weakShell); + *_retval = new nsAccessibleWrap(node, weakShell); if (! *_retval) return NS_ERROR_OUT_OF_MEMORY; diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index f825bd45cf8d..1116f4ed5f06 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -588,25 +588,26 @@ PRBool nsAccessible::IsPartiallyVisible(PRBool *aIsOffscreen) /* readonly attribute wstring state; */ NS_IMETHODIMP nsAccessible::GetState(PRUint32 *aState) { - nsresult rv = NS_OK; *aState = 0; - nsCOMPtr currElement(do_QueryInterface(mDOMNode)); - if (currElement) { - // Set STATE_UNAVAILABLE state based on disabled attribute - // The disabled attribute is mostly used in XUL elements and HTML forms, but - // if someone sets it on another attribute, - // it seems reasonable to consider it unavailable - PRBool isDisabled = PR_FALSE; - currElement->HasAttribute(NS_LITERAL_STRING("disabled"), &isDisabled); - if (isDisabled) - *aState |= STATE_UNAVAILABLE; - else { - *aState |= STATE_FOCUSABLE; - nsCOMPtr focusedNode; - if (gLastFocusedNode == mDOMNode) { - *aState |= STATE_FOCUSED; - } + nsCOMPtr content(do_QueryInterface(mDOMNode)); + if (!content) { + return NS_ERROR_FAILURE; // Node shut down + } + + // Set STATE_UNAVAILABLE state based on disabled attribute + // The disabled attribute is mostly used in XUL elements and HTML forms, but + // if someone sets it on another attribute, + // it seems reasonable to consider it unavailable + if (content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::disabled)) { + *aState |= STATE_UNAVAILABLE; + } + else if (!mRoleMapEntry || content->IsFocusable()) { + // Default state is focusable unless role manually set + // Subclasses of nsAccessible will clear focusable state if necessary + *aState |= STATE_FOCUSABLE; + if (gLastFocusedNode == mDOMNode) { + *aState |= STATE_FOCUSED; } } @@ -618,7 +619,7 @@ NS_IMETHODIMP nsAccessible::GetState(PRUint32 *aState) *aState |= STATE_OFFSCREEN; } - return rv; + return NS_OK; } /* readonly attribute boolean focusedChild; */ @@ -1427,9 +1428,10 @@ NS_IMETHODIMP nsAccessible::GetKeyBinding(nsAString& _retval) } /* unsigned long getRole (); */ -NS_IMETHODIMP nsAccessible::GetRole(PRUint32 *_retval) +NS_IMETHODIMP nsAccessible::GetRole(PRUint32 *aRole) { - return NS_ERROR_NOT_IMPLEMENTED; + *aRole = ROLE_NOTHING; + return NS_OK; } /* PRUint8 getAccNumActions (); */ diff --git a/accessible/src/base/nsBaseWidgetAccessible.cpp b/accessible/src/base/nsBaseWidgetAccessible.cpp index d72292721d44..75ed025e1bf2 100644 --- a/accessible/src/base/nsBaseWidgetAccessible.cpp +++ b/accessible/src/base/nsBaseWidgetAccessible.cpp @@ -325,74 +325,3 @@ NS_IMETHODIMP nsLinkableAccessible::Shutdown() return nsAccessibleWrap::Shutdown(); } - -//---------------- -// nsGenericAccessible -//---------------- - -nsGenericAccessible::nsGenericAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell) : - nsAccessibleWrap(aNode, aShell) -{ -} - -NS_IMPL_ISUPPORTS_INHERITED0(nsGenericAccessible, nsAccessible) - -NS_IMETHODIMP nsGenericAccessible::TakeFocus() -{ - nsCOMPtr content(do_QueryInterface(mDOMNode)); - if (!content || !mWeakShell) { - return NS_ERROR_FAILURE; // Node already shut down - } - - content->SetFocus(nsCOMPtr(GetPresContext())); - - return NS_OK; -} - -NS_IMETHODIMP nsGenericAccessible::GetRole(PRUint32 *aRole) -{ - *aRole = ROLE_NOTHING; - return NS_OK; -} - -NS_IMETHODIMP nsGenericAccessible::GetState(PRUint32 *aState) -{ - // XXX todo: use DHTML state attribs to fill in accessible states - - nsAccessible::GetState(aState); - - return NS_OK; -} - - -NS_IMETHODIMP nsGenericAccessible::GetValue(nsAString& aValue) -{ - // XXX todo: use value attrib or property to fill in accessible value - - return NS_ERROR_NOT_IMPLEMENTED; -} - - -/* PRUint8 getAccNumActions (); */ -NS_IMETHODIMP nsGenericAccessible::GetNumActions(PRUint8 *aNumActions) -{ - // XXX todo: use XML events to fill in accessible actions - - *aNumActions = 0; - - return NS_OK; -} - -/* wstring getAccActionName (in PRUint8 index); */ -NS_IMETHODIMP nsGenericAccessible::GetActionName(PRUint8 index, nsAString& _retval) -{ - // XXX todo: use XML events to fill in accessible actions - - return NS_ERROR_NOT_IMPLEMENTED; -} - -/* void accDoAction (in PRUint8 index); */ -NS_IMETHODIMP nsGenericAccessible::DoAction(PRUint8 index) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} diff --git a/accessible/src/base/nsBaseWidgetAccessible.h b/accessible/src/base/nsBaseWidgetAccessible.h index 17fcc566930d..dc54660c78a0 100644 --- a/accessible/src/base/nsBaseWidgetAccessible.h +++ b/accessible/src/base/nsBaseWidgetAccessible.h @@ -100,23 +100,4 @@ protected: PRPackedBool mIsLinkVisited; }; -/** - * A type of accessible for DOM nodes containing a non-negative tabindex - * (thus they're focusable), or a role attrib which defines how to expose them. - */ -class nsGenericAccessible : public nsAccessibleWrap -{ -public: - nsGenericAccessible(nsIDOMNode* aNode, nsIWeakReference* aShell); - NS_DECL_ISUPPORTS_INHERITED - NS_IMETHOD TakeFocus(); - NS_IMETHOD GetRole(PRUint32 *aRole); - NS_IMETHOD GetState(PRUint32 *aState); - NS_IMETHOD GetValue(nsAString& aValue); - NS_IMETHOD GetNumActions(PRUint8 *_retval); - NS_IMETHOD GetActionName(PRUint8 index, nsAString& _retval); - NS_IMETHOD DoAction(PRUint8 index); -}; - #endif -