From bb1b37f305774def68798ad1047c696b47a59463 Mon Sep 17 00:00:00 2001 From: "aaronleventhal%moonset.net" Date: Tue, 12 Apr 2005 15:28:01 +0000 Subject: [PATCH] Bug 288986. Disabled attribute confusion causing some XUL elements to be exposed in accessibility APIs as disabled when they aren't. sr=neil, a=asa --- accessible/src/base/nsAccessible.cpp | 13 ++++++++++++- toolkit/content/widgets/tabbrowser.xml | 2 +- toolkit/content/widgets/wizard.xml | 4 ++-- .../resources/content/bindings/tabbrowser.xml | 2 +- xpfe/global/resources/content/bindings/wizard.xml | 4 ++-- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index e121b780492..66e633eac07 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -632,7 +632,18 @@ NS_IMETHODIMP nsAccessible::GetState(PRUint32 *aState) // 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)) { + PRBool isDisabled; + if (content->IsContentOfType(nsIContent::eHTML)) { + // In HTML, just the presence of the disabled attribute means it is disabled, + // therefore disabled="false" indicates disabled! + isDisabled = content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::disabled); + } + else { + nsAutoString disabled; + content->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::disabled, disabled); + isDisabled = disabled.EqualsLiteral("true"); + } + if (isDisabled) { *aState |= STATE_UNAVAILABLE; } else if (content->IsContentOfType(nsIContent::eELEMENT)) { diff --git a/toolkit/content/widgets/tabbrowser.xml b/toolkit/content/widgets/tabbrowser.xml index 64d231bf1e5..a66957e21b1 100644 --- a/toolkit/content/widgets/tabbrowser.xml +++ b/toolkit/content/widgets/tabbrowser.xml @@ -530,7 +530,7 @@ var disabled = this.mPanelContainer.childNodes.length == 1; var menuItems = aPopupMenu.getElementsByAttribute("tbattr", "tabbrowser-multiple"); for (var i = 0; i < menuItems.length; i++) - menuItems[i].setAttribute("disabled", disabled); + menuItems[i].disabled = disabled; ]]> diff --git a/toolkit/content/widgets/wizard.xml b/toolkit/content/widgets/wizard.xml index d71fb36f610..87e30a34bf8 100644 --- a/toolkit/content/widgets/wizard.xml +++ b/toolkit/content/widgets/wizard.xml @@ -28,9 +28,9 @@ onset="return document.title = val;"/> + onset="this._canAdvance=val; this._nextButton.disabled = !val;"/> + onset="this._canRewind=val; this._backButton.disabled = !val;"/> diff --git a/xpfe/global/resources/content/bindings/tabbrowser.xml b/xpfe/global/resources/content/bindings/tabbrowser.xml index 6c1da1b8011..e7cd04185d1 100644 --- a/xpfe/global/resources/content/bindings/tabbrowser.xml +++ b/xpfe/global/resources/content/bindings/tabbrowser.xml @@ -497,7 +497,7 @@ var disabled = this.mPanelContainer.childNodes.length == 1; var menuItems = aPopupMenu.getElementsByAttribute("tbattr", "tabbrowser-multiple"); for (var i = 0; i < menuItems.length; i++) - menuItems[i].setAttribute("disabled", disabled); + menuItems[i].disabled = disabled; ]]> diff --git a/xpfe/global/resources/content/bindings/wizard.xml b/xpfe/global/resources/content/bindings/wizard.xml index 4bcefa1f7d2..217e75df961 100644 --- a/xpfe/global/resources/content/bindings/wizard.xml +++ b/xpfe/global/resources/content/bindings/wizard.xml @@ -30,9 +30,9 @@ onset="return document.title = val;"/> + onset="this._canAdvance=val; this._nextButton.disabled = !val;"/> + onset="this._canRewind=val; this._backButton.disabled = !val;"/>