From 18e3f7f649397602093c882735fbc51198d79915 Mon Sep 17 00:00:00 2001 From: "aaronleventhal@moonset.net" Date: Thu, 5 Apr 2007 15:14:08 -0700 Subject: [PATCH] Reversing backout of fix for bug 372367 as it is not the cause of startup crashes when a screen reader is running. Original patch by surkov, r=ginn.chen --- accessible/public/nsIAccessible.idl | 8 +-- accessible/src/base/nsAccessibilityAtomList.h | 1 + accessible/src/base/nsAccessible.cpp | 6 -- .../src/base/nsBaseWidgetAccessible.cpp | 11 +-- .../src/html/nsHTMLFormControlAccessible.cpp | 67 ++++++++++--------- .../src/xul/nsXULFormControlAccessible.cpp | 8 +-- 6 files changed, 45 insertions(+), 56 deletions(-) diff --git a/accessible/public/nsIAccessible.idl b/accessible/public/nsIAccessible.idl index c34006ce510..ff5c98eda77 100644 --- a/accessible/public/nsIAccessible.idl +++ b/accessible/public/nsIAccessible.idl @@ -57,7 +57,7 @@ interface nsIDOMDOMStringList; * * @status UNDER_REVIEW */ -[scriptable, uuid(3494b81a-1d90-491a-be34-7893f8e27117)] +[scriptable, uuid(b3674866-49a9-4cf2-bfea-c00be2d4a695)] interface nsIAccessible : nsISupports { /** @@ -165,12 +165,6 @@ interface nsIAccessible : nsISupports */ void getFinalState(out unsigned long aState, out unsigned long aExtraState); - /** - * True if this element is live in an editor. - * False if the content is being displayed but not edited. - */ - readonly attribute boolean isEditable; - /** * Help text associated with node */ diff --git a/accessible/src/base/nsAccessibilityAtomList.h b/accessible/src/base/nsAccessibilityAtomList.h index 3ad7ef6ae77..774ca6d71db 100755 --- a/accessible/src/base/nsAccessibilityAtomList.h +++ b/accessible/src/base/nsAccessibilityAtomList.h @@ -145,6 +145,7 @@ ACCESSIBILITY_ATOM(acceltext, "acceltext") ACCESSIBILITY_ATOM(accesskey, "accesskey") ACCESSIBILITY_ATOM(alt, "alt") ACCESSIBILITY_ATOM(anonid, "anonid") // Used for ID's in XBL +ACCESSIBILITY_ATOM(autocomplete, "autocomplete") // Used as attribute value too ACCESSIBILITY_ATOM(control, "control") ACCESSIBILITY_ATOM(data, "data") ACCESSIBILITY_ATOM(disabled, "disabled") diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index e48f0389028..dfb676ac939 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -2720,12 +2720,6 @@ NS_IMETHODIMP nsAccessible::ExtendSelection() return NS_ERROR_NOT_IMPLEMENTED; } -NS_IMETHODIMP nsAccessible::GetIsEditable(PRBool *aIsEditable) -{ - *aIsEditable = PR_FALSE; - return NS_OK; -} - /* [noscript] void getNativeInterface(out voidPtr aOutAccessible); */ NS_IMETHODIMP nsAccessible::GetNativeInterface(void **aOutAccessible) { diff --git a/accessible/src/base/nsBaseWidgetAccessible.cpp b/accessible/src/base/nsBaseWidgetAccessible.cpp index c259ca94554..cabfb6001d7 100644 --- a/accessible/src/base/nsBaseWidgetAccessible.cpp +++ b/accessible/src/base/nsBaseWidgetAccessible.cpp @@ -149,21 +149,22 @@ nsLinkableAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState) // XXX What if we're in a contenteditable container? // We may need to go up the parent chain unless a better API is found - nsCOMPtr docAccessible = + nsCOMPtr docAccessible = do_QueryInterface(nsCOMPtr(GetDocAccessible())); if (docAccessible) { - PRBool isEditable; - docAccessible->GetIsEditable(&isEditable); - if (isEditable) { + PRUint32 docState = 0, docExtraState = 0; + rv = docAccessible->GetFinalState(&docState, &docExtraState); + if (NS_SUCCEEDED(rv) && + (docExtraState & nsIAccessibleStates::EXT_STATE_EDITABLE)) { // Links not focusable in editor *aState &= ~(nsIAccessibleStates::STATE_FOCUSED | nsIAccessibleStates::STATE_FOCUSABLE); } } + return NS_OK; } - NS_IMETHODIMP nsLinkableAccessible::GetValue(nsAString& _retval) { if (mIsLink) { diff --git a/accessible/src/html/nsHTMLFormControlAccessible.cpp b/accessible/src/html/nsHTMLFormControlAccessible.cpp index 3e640aff9ec..22363bc17c8 100644 --- a/accessible/src/html/nsHTMLFormControlAccessible.cpp +++ b/accessible/src/html/nsHTMLFormControlAccessible.cpp @@ -358,7 +358,8 @@ nsHyperTextAccessible(aNode, aShell) { } -NS_IMPL_ISUPPORTS_INHERITED2(nsHTMLTextFieldAccessible, nsAccessible, nsIAccessibleText, nsIAccessibleEditableText) +NS_IMPL_ISUPPORTS_INHERITED1(nsHTMLTextFieldAccessible, nsHyperTextAccessible, + nsIAccessibleText) NS_IMETHODIMP nsHTMLTextFieldAccessible::Init() { @@ -433,44 +434,46 @@ nsHTMLTextFieldAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState) *aState |= nsIAccessibleStates::STATE_READONLY; } - if (!aExtraState) + if (!aExtraState || !(*aExtraState & nsIAccessibleStates::EXT_STATE_EDITABLE)) return NS_OK; - nsCOMPtr htmlInput(do_QueryInterface(mDOMNode, &rv)); + nsCOMPtr htmlInput(do_QueryInterface(mDOMNode)); // Is it an or a