For issue 3048, make toggle buttons (and other custom buttons) have the
"aria-pressed" WAI-ARIA state when they get toggled.
patch by: ajr
review by: rdayal (desk review)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4254 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/Accessibility.java b/user/src/com/google/gwt/user/client/ui/Accessibility.java
index e6cf056..b523f17 100644
--- a/user/src/com/google/gwt/user/client/ui/Accessibility.java
+++ b/user/src/com/google/gwt/user/client/ui/Accessibility.java
@@ -59,6 +59,7 @@
public static final String STATE_EXPANDED = "aria-expanded";
public static final String STATE_LEVEL = "aria-level";
public static final String STATE_HASPOPUP = "aria-haspopup";
+ public static final String STATE_PRESSED = "aria-pressed";
private static final String ATTR_NAME_ROLE = "role";
diff --git a/user/src/com/google/gwt/user/client/ui/CustomButton.java b/user/src/com/google/gwt/user/client/ui/CustomButton.java
index 35b4817..89efb9b 100644
--- a/user/src/com/google/gwt/user/client/ui/CustomButton.java
+++ b/user/src/com/google/gwt/user/client/ui/CustomButton.java
@@ -681,6 +681,9 @@
super.setEnabled(enabled);
if (!enabled) {
cleanupCaptureState();
+ Accessibility.removeState(getElement(), Accessibility.STATE_PRESSED);
+ } else {
+ setAriaPressed(getCurrentFace());
}
}
}
@@ -837,6 +840,10 @@
curFace = newFace;
setCurrentFaceElement(newFace.getFace());
addStyleDependentName(curFace.getName());
+
+ if (isEnabled()) {
+ setAriaPressed(newFace);
+ }
}
}
@@ -906,6 +913,12 @@
}
}
+ private void setAriaPressed(Face newFace) {
+ boolean pressed = (newFace.getFaceID() & DOWN_ATTRIBUTE) == 1;
+ Accessibility.setState(getElement(), Accessibility.STATE_PRESSED,
+ pressed ? "true" : "false");
+ }
+
/**
* Sets the current face based on the faceID.
*