--- old/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java 2017-04-27 14:50:42.442337700 +0300 +++ new/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java 2017-04-27 14:50:41.585728900 +0300 @@ -71,8 +71,20 @@ } public void propertyChange(final PropertyChangeEvent evt) { - if (evt.getNewValue() == null) return; - focusChanged(); + Object newValue = evt.getNewValue(); + if (newValue == null) return; + // Don't post focus on things that don't matter, i.e. alert, colorchooser, + // desktoppane, dialog, directorypane, filechooser, filler, fontchoose, + // frame, glasspane, layeredpane, optionpane, panel, rootpane, separator, + // tooltip, viewport, window. + // List taken from initializeRoles() in JavaComponentUtilities.m. + if (newValue instanceof Accessible) { + AccessibleContext nvAC = ((Accessible) newValue).getAccessibleContext(); + AccessibleRole nvRole = nvAC.getAccessibleRole(); + if (!ignoredRoles.contains(roleKey(nvRole))) { + focusChanged(); + } + } } private native void focusChanged(); @@ -702,9 +714,15 @@ if (context == null) continue; if (whichChildren == JAVA_AX_VISIBLE_CHILDREN) { - if (!context.getAccessibleComponent().isVisible()) continue; + AccessibleComponent acomp = context.getAccessibleComponent(); + if (acomp == null || !acomp.isVisible()) { + continue; + } } else if (whichChildren == JAVA_AX_SELECTED_CHILDREN) { - if (!ac.getAccessibleSelection().isAccessibleChildSelected(i)) continue; + AccessibleSelection sel = ac.getAccessibleSelection(); + if (sel == null || !sel.isAccessibleChildSelected(i)) { + continue; + } } if (!allowIgnored) {