In screen reader mode is not possible to select a JDK for a project: IDEA-236480

GitOrigin-RevId: 9d7634ad4398ea1ee24716ae597cd57059716e08
This commit is contained in:
Artem Semenov
2020-06-16 17:26:58 +03:00
committed by intellij-monorepo-bot
parent 8d14f35815
commit 7d5c56282d
3 changed files with 47 additions and 2 deletions
@@ -98,7 +98,9 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable {
clearCaches();
}
});
myJdkPanel.add(new JLabel(JavaUiBundle.message("module.libraries.target.jdk.project.radio")), new GridBagConstraints(0, 0, 3, 1, 0, 0, NORTHWEST, NONE, JBUI.insetsBottom(4), 0, 0));
JLabel myCbProjectJdkLabel = new JLabel(JavaUiBundle.message("module.libraries.target.jdk.project.radio"));
myCbProjectJdkLabel.setLabelFor(myCbProjectJdk);
myJdkPanel.add(myCbProjectJdkLabel, new GridBagConstraints(0, 0, 3, 1, 0, 0, NORTHWEST, NONE, JBUI.insetsBottom(4), 0, 0));
myJdkPanel.add(myCbProjectJdk, new GridBagConstraints(0, 1, 1, 1, 0, 1.0, NORTHWEST, NONE, JBUI.insetsLeft(4), 0, 0));
final JButton editButton = new JButton(ApplicationBundle.message("button.edit"));
myCbProjectJdk.setEditButton(editButton, myProject, () -> myJdksModel.getProjectSdk());
@@ -18,9 +18,11 @@ import com.intellij.util.Function;
import com.intellij.util.IconUtil;
import com.intellij.util.Producer;
import com.intellij.util.ui.EmptyIcon;
import com.intellij.util.ui.accessibility.AccessibleContextDelegate;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.accessibility.AccessibleContext;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
@@ -62,6 +64,13 @@ public final class SdkListPresenter extends ColoredListCellRenderer<SdkListItem>
SimpleColoredComponent component = (SimpleColoredComponent)super.getListCellRendererComponent(list, value, index, selected, hasFocus);
JPanel panel = new JPanel(new BorderLayout()) {
private final AccessibleContext myContext = component.getAccessibleContext();
@Override
public AccessibleContext getAccessibleContext() {
return myContext;
}
@Override
public void setBorder(Border border) {
// we do not want to outer UI to add a border to that JPanel
@@ -119,6 +128,7 @@ public final class SdkListPresenter extends ColoredListCellRenderer<SdkListItem>
boolean hasFocus) {
setIcon(EMPTY_ICON); // to fix vertical size
getAccessibleContext().setAccessibleName(null);
if (value instanceof InvalidSdkItem) {
InvalidSdkItem item = (InvalidSdkItem)value;
final String str = ProjectBundle.message("jdk.combo.box.invalid.item", item.getSdkName());
@@ -203,8 +213,9 @@ public final class SdkListPresenter extends ColoredListCellRenderer<SdkListItem>
SdkAppearanceService.getInstance()
.forNullSdk(selected)
.customize(this);
getAccessibleContext().setAccessibleName(ProjectBundle.message("jdk.combo.box.no.sdk.item.accessibility"));
}
else if(value instanceof SdkReferenceItem) {
else if (value instanceof SdkReferenceItem) {
SdkReferenceItem item = (SdkReferenceItem)value;
SdkAppearanceService.getInstance()
@@ -237,4 +248,35 @@ public final class SdkListPresenter extends ColoredListCellRenderer<SdkListItem>
home = StringUtil.shortenTextWithEllipsis(home, maxLength, suffixLength);
return home;
}
@Override
public AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleSdkListPresenter(super.getAccessibleContext());
}
return accessibleContext;
}
static private class AccessibleSdkListPresenter extends AccessibleContextDelegate {
private String myAccessibleString = null;
AccessibleSdkListPresenter(AccessibleContext context) {
super(context);
}
@Override
protected Container getDelegateParent() {
return null;
}
@Override
public String getAccessibleName() {
return myAccessibleString == null ? super.getDelegate().getAccessibleName() : myAccessibleString;
}
@Override
public void setAccessibleName(String s) {
myAccessibleString = s;
}
}
}
@@ -107,6 +107,7 @@ jdk.combo.box.autodetected=Detected SDKs
jdk.combo.box.search.of.sdks=Detecting SDKs...
jdk.combo.box.project.item=<No Project SDK>
jdk.combo.box.invalid.item={0} [Invalid]
jdk.combo.box.no.sdk.item.accessibility=No SDK
progress.title.jdk.combo.box.resolving.jdk.home=Scanning JDK Home
progress.text.jdk.combo.box.resolving.jdk.home=Refreshing {0}...
module.libraries.javadoc.url.button=Specify Documentation &URL...