src/macosx/classes/sun/lwawt/macosx/CAccessible.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -24,24 +24,22 @@
*/
package sun.lwawt.macosx;
import java.awt.Component;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.lang.reflect.Field;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.swing.JProgressBar;
import javax.swing.JSlider;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.JTextComponent;
+import sun.lwawt.macosx.CFRetainedResource;
class CAccessible extends CFRetainedResource implements Accessible {
static Field getNativeAXResourceField() {
try {
final Field field = AccessibleContext.class.getDeclaredField("nativeAXResource");
@@ -97,17 +95,14 @@
@Override
public AccessibleContext getAccessibleContext() {
return accessible.getAccessibleContext();
}
- // currently only supports text components
public void addNotificationListeners(Component c) {
- if (c instanceof JTextComponent) {
- JTextComponent tc = (JTextComponent) c;
AXTextChangeNotifier listener = new AXTextChangeNotifier();
- tc.getDocument().addDocumentListener(listener);
- tc.addCaretListener(listener);
+ if (c instanceof Accessible) {
+ AccessibilityEventMonitor.addPropertyChangeListener(listener, (Accessible)c);
}
if (c instanceof JProgressBar) {
JProgressBar pb = (JProgressBar) c;
pb.addChangeListener(new AXProgressChangeNotifier());
} else if (c instanceof JSlider) {
@@ -115,33 +110,27 @@
slider.addChangeListener(new AXProgressChangeNotifier());
}
}
- private class AXTextChangeNotifier implements DocumentListener, CaretListener {
- @Override
- public void changedUpdate(DocumentEvent e) {
- if (ptr != 0) valueChanged(ptr);
- }
+ private class AXTextChangeNotifier implements PropertyChangeListener {
@Override
- public void insertUpdate(DocumentEvent e) {
- if (ptr != 0) valueChanged(ptr);
+ public void propertyChange(PropertyChangeEvent e) {
+ String name = e.getPropertyName();
+ if ( ptr != 0 ) {
+ if (name.compareTo(AccessibleContext.ACCESSIBLE_CARET_PROPERTY) == 0) {
+ selectionChanged(ptr);
+ } else if (name.compareTo(AccessibleContext.ACCESSIBLE_TEXT_PROPERTY) == 0 ) {
+ valueChanged(ptr);
}
-
- @Override
- public void removeUpdate(DocumentEvent e) {
- if (ptr != 0) valueChanged(ptr);
}
-
- @Override
- public void caretUpdate(CaretEvent e) {
- if (ptr != 0) selectionChanged(ptr);
}
}
private class AXProgressChangeNotifier implements ChangeListener {
+ @Override
public void stateChanged(ChangeEvent e) {
if (ptr != 0) valueChanged(ptr);
}
}