changeset 6505:d3f5ba2e8117

RT-36230: [Accessibility] New accessibility implementation Reviewed-by: Kevin Rushforth, David Hill
author Felipe Heidrich <felipe.heidrich@oracle.com>
date Tue, 18 Mar 2014 12:50:23 -0700
parents 5159a070e730
children 99caa949ca39
files apps/toys/Hello/src/main/java/a11y/HelloPasswordField.java apps/toys/Hello/src/main/java/a11y/HelloSimpleCheckBox.java apps/toys/Hello/src/main/java/a11y/HelloSimpleListView.java apps/toys/Hello/src/main/java/a11y/HelloSimpleTableView.java apps/toys/Hello/src/main/java/a11y/HelloSimpleTreeTableView.java apps/toys/Hello/src/main/java/a11y/HelloSimpleTreeView.java apps/toys/Hello/src/main/java/a11y/HelloTabPane.java apps/toys/Hello/src/main/java/a11y/HelloText.java apps/toys/Hello/src/main/java/a11y/HelloToolBar.java build.gradle buildSrc/android.gradle buildSrc/armv6hf.gradle buildSrc/armv6sf.gradle buildSrc/armv7hft.gradle buildSrc/armv7sft.gradle buildSrc/ios.gradle buildSrc/linux.gradle buildSrc/mac.gradle buildSrc/win.gradle buildSrc/x86egl.gradle modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleButton.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleCheckBox.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleControl.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleList.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleListItem.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleMenuButton.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleRadioButton.java modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleSlider.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/CustomColorDialog.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ListViewSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/PaginationSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollBarSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/SliderSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TabPaneSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableColumnHeader.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableHeaderRow.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableRowSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkinBase.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ToolBarSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableRowSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableViewSkin.java modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeViewSkin.java modules/controls/src/main/java/javafx/scene/control/Accordion.java modules/controls/src/main/java/javafx/scene/control/Button.java modules/controls/src/main/java/javafx/scene/control/ButtonBase.java modules/controls/src/main/java/javafx/scene/control/Cell.java modules/controls/src/main/java/javafx/scene/control/CheckBox.java modules/controls/src/main/java/javafx/scene/control/ComboBoxBase.java modules/controls/src/main/java/javafx/scene/control/Control.java modules/controls/src/main/java/javafx/scene/control/Hyperlink.java modules/controls/src/main/java/javafx/scene/control/Label.java modules/controls/src/main/java/javafx/scene/control/Labeled.java modules/controls/src/main/java/javafx/scene/control/ListCell.java modules/controls/src/main/java/javafx/scene/control/ListView.java modules/controls/src/main/java/javafx/scene/control/Pagination.java modules/controls/src/main/java/javafx/scene/control/PasswordField.java modules/controls/src/main/java/javafx/scene/control/ProgressBar.java modules/controls/src/main/java/javafx/scene/control/ProgressIndicator.java modules/controls/src/main/java/javafx/scene/control/RadioButton.java modules/controls/src/main/java/javafx/scene/control/ScrollBar.java modules/controls/src/main/java/javafx/scene/control/ScrollPane.java modules/controls/src/main/java/javafx/scene/control/SkinBase.java modules/controls/src/main/java/javafx/scene/control/Slider.java modules/controls/src/main/java/javafx/scene/control/TabPane.java modules/controls/src/main/java/javafx/scene/control/TableCell.java modules/controls/src/main/java/javafx/scene/control/TableRow.java modules/controls/src/main/java/javafx/scene/control/TableView.java modules/controls/src/main/java/javafx/scene/control/TextArea.java modules/controls/src/main/java/javafx/scene/control/TextField.java modules/controls/src/main/java/javafx/scene/control/TextInputControl.java modules/controls/src/main/java/javafx/scene/control/TitledPane.java modules/controls/src/main/java/javafx/scene/control/ToggleButton.java modules/controls/src/main/java/javafx/scene/control/ToolBar.java modules/controls/src/main/java/javafx/scene/control/TreeCell.java modules/controls/src/main/java/javafx/scene/control/TreeTableCell.java modules/controls/src/main/java/javafx/scene/control/TreeTableRow.java modules/controls/src/main/java/javafx/scene/control/TreeTableView.java modules/controls/src/main/java/javafx/scene/control/TreeView.java modules/controls/src/test/java/javafx/scene/control/TableViewTest.java modules/graphics/src/main/java/com/sun/glass/events/WindowEvent.java modules/graphics/src/main/java/com/sun/glass/ui/Application.java modules/graphics/src/main/java/com/sun/glass/ui/PlatformAccessible.java modules/graphics/src/main/java/com/sun/glass/ui/PlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/View.java modules/graphics/src/main/java/com/sun/glass/ui/Window.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleBasePatternProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleBaseProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleLogger.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleRoot.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleAttributes.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleBasePatternProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleBaseProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleEventIds.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleRoles.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleRoot.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleSelectionItemProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleSelectionProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleToggleProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleBasePatternProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleBaseProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleGridItemProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleGridProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleRangeValueProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleRoot.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleSelectionItemProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleSelectionProvider.java modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleToggleProvider.java modules/graphics/src/main/java/com/sun/glass/ui/gtk/GtkPlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/ios/IosPlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/lens/LensPlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/mac/MacAccessible.java modules/graphics/src/main/java/com/sun/glass/ui/mac/MacApplication.java modules/graphics/src/main/java/com/sun/glass/ui/mac/MacPlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/mac/MacVariant.java modules/graphics/src/main/java/com/sun/glass/ui/mac/MacView.java modules/graphics/src/main/java/com/sun/glass/ui/monocle/MonoclePlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/swt/swtPlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/win/WinAccessible.java modules/graphics/src/main/java/com/sun/glass/ui/win/WinApplication.java modules/graphics/src/main/java/com/sun/glass/ui/win/WinPlatformFactory.java modules/graphics/src/main/java/com/sun/glass/ui/win/WinTextRangeProvider.java modules/graphics/src/main/java/com/sun/glass/ui/win/WinVariant.java modules/graphics/src/main/java/com/sun/javafx/accessible/AccessibleNode.java modules/graphics/src/main/java/com/sun/javafx/accessible/AccessibleStage.java modules/graphics/src/main/java/com/sun/javafx/accessible/AccessibleText.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/Accessible.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/AccessibleProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/AccessibleStageProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/ExpandCollapseProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/GridItemProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/GridProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/InvokeProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/RangeValueProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/SelectionItemProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/SelectionProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/ToggleProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/providers/ValueProvider.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/ControlTypeIds.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/EventIds.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/ExpandCollapseState.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/NavigateDirection.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/OrientationType.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/PatternIds.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/PropertyIds.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/ProviderOptions.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/Rect.java modules/graphics/src/main/java/com/sun/javafx/accessible/utils/ToggleState.java modules/graphics/src/main/java/com/sun/javafx/scene/NodeHelper.java modules/graphics/src/main/java/com/sun/javafx/stage/StagePeerListener.java modules/graphics/src/main/java/com/sun/javafx/stage/WindowPeerListener.java modules/graphics/src/main/java/com/sun/javafx/tk/TKSceneListener.java modules/graphics/src/main/java/com/sun/javafx/tk/TKStage.java modules/graphics/src/main/java/com/sun/javafx/tk/TKStageListener.java modules/graphics/src/main/java/com/sun/javafx/tk/quantum/EmbeddedStage.java modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassViewEventHandler.java modules/graphics/src/main/java/com/sun/javafx/tk/quantum/GlassWindowEventHandler.java modules/graphics/src/main/java/com/sun/javafx/tk/quantum/WindowStage.java modules/graphics/src/main/java/javafx/scene/Node.java modules/graphics/src/main/java/javafx/scene/Parent.java modules/graphics/src/main/java/javafx/scene/Scene.java modules/graphics/src/main/java/javafx/scene/accessibility/Accessible.java modules/graphics/src/main/java/javafx/scene/accessibility/Action.java modules/graphics/src/main/java/javafx/scene/accessibility/Attribute.java modules/graphics/src/main/java/javafx/scene/accessibility/Role.java modules/graphics/src/main/java/javafx/scene/accessibility/package.html modules/graphics/src/main/java/javafx/scene/image/ImageView.java modules/graphics/src/main/java/javafx/scene/text/Text.java modules/graphics/src/main/native-glass/mac/GlassAccessible.h modules/graphics/src/main/native-glass/mac/GlassAccessible.m modules/graphics/src/main/native-glass/mac/GlassAccessibleBaseProvider.h modules/graphics/src/main/native-glass/mac/GlassAccessibleBaseProvider.m modules/graphics/src/main/native-glass/mac/GlassAccessibleRoot.h modules/graphics/src/main/native-glass/mac/GlassAccessibleRoot.m modules/graphics/src/main/native-glass/mac/GlassAccessibleSelectionItemProvider.h modules/graphics/src/main/native-glass/mac/GlassAccessibleSelectionItemProvider.m modules/graphics/src/main/native-glass/mac/GlassAccessibleSelectionProvider.h modules/graphics/src/main/native-glass/mac/GlassAccessibleSelectionProvider.m modules/graphics/src/main/native-glass/mac/GlassAccessibleToggleProvider.h modules/graphics/src/main/native-glass/mac/GlassAccessibleToggleProvider.m modules/graphics/src/main/native-glass/mac/GlassStatics.h modules/graphics/src/main/native-glass/mac/GlassStatics.m modules/graphics/src/main/native-glass/mac/GlassView.m modules/graphics/src/main/native-glass/mac/GlassView3D.m modules/graphics/src/main/native-glass/mac/GlassViewDelegate.h modules/graphics/src/main/native-glass/mac/GlassViewDelegate.m modules/graphics/src/main/native-glass/mac/GlassWindow+Java.h modules/graphics/src/main/native-glass/mac/GlassWindow+Java.m modules/graphics/src/main/native-glass/mac/GlassWindow.h modules/graphics/src/main/native-glass/mac/GlassWindow.m modules/graphics/src/main/native-glass/win/AccessibleBasePatternProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleBasePatternProvider.h modules/graphics/src/main/native-glass/win/AccessibleBaseProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleBaseProvider.h modules/graphics/src/main/native-glass/win/AccessibleGridItemProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleGridItemProvider.h modules/graphics/src/main/native-glass/win/AccessibleGridProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleGridProvider.h modules/graphics/src/main/native-glass/win/AccessibleRangeValueProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleRangeValueProvider.h modules/graphics/src/main/native-glass/win/AccessibleRoot.cpp modules/graphics/src/main/native-glass/win/AccessibleRoot.h modules/graphics/src/main/native-glass/win/AccessibleSelectionItemProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleSelectionItemProvider.h modules/graphics/src/main/native-glass/win/AccessibleSelectionProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleSelectionProvider.h modules/graphics/src/main/native-glass/win/AccessibleToggleProvider.cpp modules/graphics/src/main/native-glass/win/AccessibleToggleProvider.h modules/graphics/src/main/native-glass/win/FullScreenWindow.cpp modules/graphics/src/main/native-glass/win/GlassAccessible.cpp modules/graphics/src/main/native-glass/win/GlassAccessible.h modules/graphics/src/main/native-glass/win/GlassApplication.h modules/graphics/src/main/native-glass/win/GlassTextRangeProvider.cpp modules/graphics/src/main/native-glass/win/GlassTextRangeProvider.h modules/graphics/src/main/native-glass/win/GlassView.cpp modules/graphics/src/main/native-glass/win/GlassWindow.cpp modules/graphics/src/main/native-glass/win/GlassWindow.h modules/graphics/src/main/native-glass/win/Utils.h modules/graphics/src/main/native-glass/win/ViewContainer.cpp modules/graphics/src/main/native-glass/win/ViewContainer.h modules/graphics/src/test/java/com/sun/javafx/pgstub/StubStage.java
diffstat 223 files changed, 9346 insertions(+), 13191 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloPasswordField.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.PasswordField;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class HelloPasswordField extends Application {
+
+
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+
+    @Override public void start(Stage stage) {
+
+        Label label = new Label("secret name:");
+        PasswordField pf = new PasswordField();
+        label.setLabelFor(pf);
+        pf.setText("senha");
+        Button button = new Button("push");
+        Scene scene = new Scene(new VBox(label, pf, button), 300, 300);
+        stage.setScene(scene);
+        stage.show();
+    }
+
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloSimpleCheckBox.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.beans.binding.Bindings;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.stage.Stage;
+
+public class HelloSimpleCheckBox extends Application {
+        
+    @Override public void start(Stage stage) {
+        CheckBox cbox = new CheckBox("Choose this item");
+        cbox.setIndeterminate(true);
+        cbox.setAllowIndeterminate(true);
+
+        Label label = new Label();
+        label.textProperty().bind(
+                Bindings.when(cbox.indeterminateProperty()).
+                        then("The check box is indeterminate").
+                        otherwise(
+                                Bindings.when(cbox.selectedProperty()).
+                                        then("The check box is selected").
+                                        otherwise("The check box is not selected"))
+        );
+
+        VBox vbox = new VBox(7);
+        vbox.setAlignment(Pos.CENTER);
+        vbox.getChildren().addAll(label, cbox, new Button("OK"));
+        
+        Scene scene = new Scene(vbox, 400, 400);
+        scene.setFill(Color.SKYBLUE);
+        stage.setTitle("Hello CheckBox");
+        stage.setScene(scene);
+        stage.show();
+    }
+
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloSimpleListView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+
+import javafx.application.Application;
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.ListView;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class HelloSimpleListView extends Application {
+
+    public void start(Stage stage) {
+        stage.setTitle(getClass().getSimpleName());
+        ListView<String> listView = new ListView<>();
+        ObservableList<String> list = FXCollections.observableArrayList();
+        for (int i=0; i<128; i++) {
+            list.add("JavaFX item " + i);
+        }
+        listView.setItems(list);
+        listView.getSelectionModel().selectedIndexProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable ov) {
+                System.out.println("SelectedIndex: " + listView.getSelectionModel().getSelectedIndex());
+            }
+        });
+
+        Button button = new Button("okay");
+        VBox group = new VBox(listView, button);
+        stage.setScene(new Scene(group, 800, 600));
+        stage.show();
+    }
+    
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloSimpleTableView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.beans.binding.When;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.scene.Scene;
+import javafx.scene.control.SelectionMode;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.ToggleButton;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+import javafx.scene.input.KeyCode;
+
+public class HelloSimpleTableView extends Application {
+    
+    public class Item {
+        public String item;
+        public Item (String item) {
+            this.item = item;
+        }
+        public String getItem() {
+            return item;
+        }
+        public String getEmail() {
+            return item+"@oracle.com";
+        }
+    }
+
+    public void start(Stage stage) {
+        stage.setTitle(getClass().getSimpleName());
+        TableView<Item> tableView = new TableView<>();
+        ObservableList<Item> list = FXCollections.observableArrayList();
+        for (int i=0; i<128; i++) {
+            list.add(new Item("Item " + i));
+        }
+        tableView.setItems(list);
+        TableColumn<Item, String> column1 = new TableColumn<>("Name");
+        column1.setPrefWidth(100);
+        column1.setCellValueFactory(new PropertyValueFactory<Item, String>("item"));
+        TableColumn<Item, String> column2 = new TableColumn<>("Email");
+        column2.setPrefWidth(250);
+        column2.setCellValueFactory(new PropertyValueFactory<Item, String>("email"));
+        tableView.getColumns().addAll(column1, column2);
+        tableView.getSelectionModel().selectedIndexProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable ov) {
+                System.out.println("SelectedIndex: " + tableView.getSelectionModel().getSelectedIndex());
+            }
+        });
+        
+        ToggleButton button1 = new ToggleButton("cell selection");
+        tableView.getSelectionModel().cellSelectionEnabledProperty().bind(button1.selectedProperty());
+        ToggleButton button2 = new ToggleButton("multi selection");
+        tableView.getSelectionModel().selectionModeProperty().bind(new When(button2.selectedProperty()).then(SelectionMode.MULTIPLE).otherwise(SelectionMode.SINGLE));
+        ToggleButton button3 = new ToggleButton("parented");
+        VBox group = new VBox(new HBox(button1, button2, button3), tableView);
+        button3.setOnAction(e -> {
+            if (group.getChildren().contains(tableView)) {
+                group.getChildren().remove(tableView);
+            } else {
+                group.getChildren().add(tableView);
+            }
+        });
+        
+        Scene scene = new Scene(group, 800, 600);
+        scene.setOnKeyPressed(l -> {
+            if (l.getCode() == KeyCode.DIGIT1) {
+                button1.setSelected(!button1.isSelected());
+            }
+            if (l.getCode() == KeyCode.DIGIT2) {
+                button2.setSelected(!button2.isSelected());
+            }
+        });
+        stage.setScene(scene);
+        stage.show();
+    }
+    
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloSimpleTreeTableView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.beans.binding.When;
+import javafx.scene.Scene;
+import javafx.scene.control.*;
+import javafx.scene.control.cell.TreeItemPropertyValueFactory;
+import javafx.scene.input.KeyCode;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class HelloSimpleTreeTableView extends Application {
+    
+    public class Item {
+        public String item;
+        public Item (String item) {
+            this.item = item;
+        }
+        public String getItem() {
+            return item;
+        }
+        public String getEmail() {
+            return item+"@oracle.com";
+        }
+    }
+
+    public void start(Stage stage) {
+        TreeTableView<Item> tableView = new TreeTableView<>();
+        TreeItem<Item> root = new TreeItem<>(new Item("Root"));
+        root.setExpanded(true);
+        for (int i=0; i<128; i++) {
+            root.getChildren().add(new TreeItem(new Item("Item " + i)));
+        }
+        tableView.setRoot(root);
+        TreeTableColumn<Item, String> column1 = new TreeTableColumn<>("Name");
+        column1.setPrefWidth(100);
+        column1.setCellValueFactory(new TreeItemPropertyValueFactory<>("item"));
+        TreeTableColumn<Item, String> column2 = new TreeTableColumn<>("Email");
+        column2.setPrefWidth(250);
+        column2.setCellValueFactory(new TreeItemPropertyValueFactory<>("email"));
+        tableView.getColumns().addAll(column1, column2);
+        tableView.getSelectionModel().selectedIndexProperty().addListener(new InvalidationListener() {
+            public void invalidated(Observable ov) {
+                System.out.println("SelectedIndex: " + tableView.getSelectionModel().getSelectedIndex());
+            }
+        });
+        
+        ToggleButton button1 = new ToggleButton("cell selection");
+        tableView.getSelectionModel().cellSelectionEnabledProperty().bind(button1.selectedProperty());
+        ToggleButton button2 = new ToggleButton("multi selection");
+        tableView.getSelectionModel().selectionModeProperty().bind(new When(button2.selectedProperty()).then(SelectionMode.MULTIPLE).otherwise(SelectionMode.SINGLE));
+        ToggleButton button3 = new ToggleButton("parented");
+        VBox group = new VBox(new HBox(button1, button2, button3), tableView);
+        button3.setOnAction(e -> {
+            if (group.getChildren().contains(tableView)) {
+                group.getChildren().remove(tableView);
+            } else {
+                group.getChildren().add(tableView);
+            }
+        });
+        
+        Scene scene = new Scene(group, 800, 600);
+        scene.setOnKeyPressed(l -> {
+            if (l.getCode() == KeyCode.DIGIT1) {
+                button1.setSelected(!button1.isSelected());
+            }
+            if (l.getCode() == KeyCode.DIGIT2) {
+                button2.setSelected(!button2.isSelected());
+            }
+        });
+        stage.setScene(scene);
+        stage.show();
+    }
+    
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloSimpleTreeView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+
+import javafx.application.Application;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeView;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class HelloSimpleTreeView extends Application {
+
+    public void start(Stage stage) {
+        
+        TreeItem<String> root = new TreeItem<>("Root node");
+        for (int i = 0; i < 200; i++) {
+            TreeItem<String> item = new TreeItem<>("Child node " + i);
+            root.getChildren().add(item);
+            if ((i % 3) == 0) {
+                for (int j = 0; j < 5; j++) {
+                    TreeItem<String> sitem = new TreeItem<>("sub item " + i + " " + j);
+                    item.getChildren().add(sitem);
+                }
+                if ((i % 2) == 0) item.setExpanded(true);
+            }
+        }
+        root.setExpanded(true);
+        TreeView<String> treeView = new TreeView<>(root);
+        Label label = new Label("JFX TreeView");
+        label.setLabelFor(treeView);
+        Button button = new Button("okay");
+        VBox group = new VBox(label, treeView, button);
+        stage.setScene(new Scene(group, 800, 600));
+        stage.show();
+    }
+    
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloTabPane.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Side;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Tab;
+import javafx.scene.control.TabPane;
+import javafx.scene.control.ToggleButton;
+import javafx.scene.control.ToggleGroup;
+import javafx.scene.control.Tooltip;
+import javafx.scene.layout.Region;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.stage.Stage;
+
+public class HelloTabPane extends Application {
+
+    private TabPane tabPane;
+    private Tab tab1;
+    private Tab tab2;
+    private Tab tab3;
+
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+
+    @Override public void start(Stage stage) {
+        tabPane = new TabPane();
+        tab1 = new Tab();
+        tab2 = new Tab();
+        tab3 = new Tab();
+        stage.setTitle("Hello TabPane");
+        final Scene scene = new Scene(new Group(), 400, 400);
+        scene.setFill(Color.GHOSTWHITE);
+
+
+        tabPane.prefWidthProperty().bind(scene.widthProperty());
+        tabPane.prefHeightProperty().bind(scene.heightProperty());
+
+        tabPane.setRotateGraphic(false);
+        tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.SELECTED_TAB);
+        tabPane.setSide(Side.TOP);
+
+        {
+            tab1.setText("Tab 1");
+            tab1.setTooltip(new Tooltip("Tab 1 Tooltip"));
+
+            final VBox vbox = new VBox();
+            vbox.setSpacing(10);
+            vbox.setTranslateX(10);
+            vbox.setTranslateY(10);
+            {
+                final Button b = new Button("Toggle Tab Mode");
+                b.setOnAction(new EventHandler<ActionEvent>() {
+                    @Override public void handle(ActionEvent e) {
+                        toggleTabMode(tabPane);
+                    }
+                });
+                vbox.getChildren().add(b);
+            }
+            {
+                final Button b = new Button("Toggle Tab Position");
+                b.setOnAction(new EventHandler<ActionEvent>() {
+                    @Override public void handle(ActionEvent e) {
+                        toggleTabPosition(tabPane);
+                    }
+                });
+                vbox.getChildren().add(b);
+            }
+            {
+                final Button b = new Button("Switch to Empty Tab");
+                b.setOnAction(new EventHandler<ActionEvent>() {
+                    @Override public void handle(ActionEvent e) {
+                    }
+                });
+                vbox.getChildren().add(b);
+            }
+            {
+                final Button b = new Button("Switch to New Tab");
+                b.setOnAction(new EventHandler<ActionEvent>() {
+                    @Override public void handle(ActionEvent e) {
+                        Tab t = new Tab();
+                        t.setText("Testing");
+                        t.setContent(new Button("Howdy"));
+                        tabPane.getTabs().add(t);
+                        tabPane.getSelectionModel().select(t);
+                    }
+                });
+                vbox.getChildren().add(b);
+            }
+            {
+                final Button b = new Button("Add Tab");
+                b.setOnAction(new EventHandler<ActionEvent>() {
+                    @Override public void handle(ActionEvent e) {
+                        Tab t = new Tab();
+                        t.setText("New Tab");
+                        t.setContent(new Region());
+                        tabPane.getTabs().add(t);
+                    }
+                });
+                vbox.getChildren().add(b);
+            }
+            {
+                final Button b = new Button("Toggle Popup on Empty Tab");
+                b.setOnAction(new EventHandler<ActionEvent>() {
+                    @Override public void handle(ActionEvent e) {}
+                });
+                vbox.getChildren().add(b);
+            }
+            {
+                ToggleButton tb = new ToggleButton("Show scroll arrows");
+                vbox.getChildren().add(tb);
+            }
+            {
+                ToggleButton tb = new ToggleButton("Show Tab Menu Button");
+                vbox.getChildren().add(tb);
+            }
+            tab1.setContent(vbox);
+            tabPane.getTabs().add(tab1);
+        }
+        {
+            tab2.setText("Longer Tab");
+            final VBox vbox = new VBox();
+            vbox.setSpacing(10);
+            vbox.setTranslateX(10);
+            vbox.setTranslateY(10);
+
+            final ToggleGroup closingPolicy = new ToggleGroup();
+            for (TabPane.TabClosingPolicy policy: TabPane.TabClosingPolicy.values()) {
+                final ToggleButton button = new ToggleButton(policy.name());
+                button.setToggleGroup(closingPolicy);
+                button.selectedProperty().addListener(new InvalidationListener() {
+                    public void invalidated(Observable ov) {
+                        tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.valueOf(button.getText()));
+                    }
+                });
+                vbox.getChildren().add(button);
+            }
+
+            final ToggleButton rotateGraphics = new ToggleButton("Rotate Graphics");
+            rotateGraphics.selectedProperty().addListener(new InvalidationListener() {
+                    public void invalidated(Observable ov) {
+                    tabPane.setRotateGraphic(rotateGraphics.isSelected());
+                }
+            });
+            vbox.getChildren().add(rotateGraphics);
+
+            tab2.setContent(vbox);
+            tabPane.getTabs().add(tab2);
+        }
+        {
+            tab3.setText("Tab 3");
+            final VBox vbox = new VBox();
+            vbox.setSpacing(10);
+            vbox.setTranslateX(10);
+            vbox.setTranslateY(10);
+            {
+                final ToggleButton tb = new ToggleButton("Show Labels");
+                tb.setSelected(true);
+                tb.selectedProperty().addListener(new InvalidationListener() {
+                    public void invalidated(Observable ov) {
+                        if (tb.isSelected()) {
+                            tab1.setText("Tab 1");
+                            tab2.setText("Tab 2");
+                            tab3.setText("Tab 3");
+                        } else {
+                            tab1.setText("");
+                            tab2.setText("");
+                            tab3.setText("");
+                        }
+                    }
+                });
+                vbox.getChildren().add(tb);
+            }
+            {
+                final ToggleButton tb = new ToggleButton("Big Graphic 1");
+                vbox.getChildren().add(tb);
+            }
+            {
+                final ToggleButton tb = new ToggleButton("Big Graphic 2");
+                vbox.getChildren().add(tb);
+            }
+            {
+                final ToggleButton tb = new ToggleButton("Big Graphic 3");
+                vbox.getChildren().add(tb);
+            }
+            tab3.setContent(vbox);
+            tabPane.getTabs().add(tab3);
+        }
+        {
+            Tab tab = new Tab();
+            tab.setText("Tab 4");
+            tab.setClosable(false);
+            tab.setContent(new Region());
+            tabPane.getTabs().add(tab);
+        }
+
+        ((Group)scene.getRoot()).getChildren().add(tabPane);
+        stage.setScene(scene);
+        stage.show();
+    }
+
+
+    private void toggleTabPosition(TabPane tabPane) {
+        Side pos = tabPane.getSide();
+        if (pos == Side.TOP) {
+            tabPane.setSide(Side.RIGHT);
+        } else if (pos == Side.RIGHT) {
+            tabPane.setSide(Side.BOTTOM);
+        } else if (pos == Side.BOTTOM) {
+            tabPane.setSide(Side.LEFT);
+        } else {
+            tabPane.setSide(Side.TOP);
+        }
+    }
+
+    private void toggleTabMode(TabPane tabPane) {
+        if (!tabPane.getStyleClass().contains(TabPane.STYLE_CLASS_FLOATING)) {
+            tabPane.getStyleClass().add(TabPane.STYLE_CLASS_FLOATING);
+        } else {
+            tabPane.getStyleClass().remove(TabPane.STYLE_CLASS_FLOATING);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloText.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.scene.Scene;
+import javafx.scene.control.TextField;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import javafx.scene.text.Font;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+
+public class HelloText extends Application {
+
+
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+
+    @Override public void start(Stage stage) {
+
+        final Text text = new Text("01234");
+        text.impl_selectionFillProperty().set(Color.BLUE);
+        text.setFont(Font.font(50));
+
+
+        TextField tf = new TextField("Hello Accessiblity");
+
+
+        Scene scene = new Scene(new VBox(text, tf, new Text("Text 2"), new TextField("text field 2")), 300, 300);
+//        scene.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
+//            @Override
+//            public void handle(KeyEvent event) {
+//                int start = text.getImpl_selectionStart();
+//                int end = text.getImpl_selectionEnd();
+//                if (start == -1) start = 0;
+//                if (end == -1) end = text.getText().length();
+//                switch (event.getCode()) {
+//                case LEFT: start--; break;
+//                case RIGHT: start++; break;
+//                case UP: end--; break;
+//                case DOWN: end++; break;
+//                default:
+//                }
+//                text.setImpl_selectionStart(start);
+//                text.setImpl_selectionEnd(end);
+////                System.out.println(start + " " + end);
+//            }
+//        });
+        stage.setScene(scene);
+        stage.show();
+    }
+
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/a11y/HelloToolBar.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package a11y;
+
+import javafx.application.Application;
+import javafx.geometry.Orientation;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.ToolBar;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+public class HelloToolBar extends Application {
+    public static void main(String[] args) {
+        Application.launch(args);
+    }
+
+    @Override public void start(Stage stage) {
+        stage.setTitle("ToolBar");
+        final VBox box = new VBox(10);
+        final Scene scene = new Scene(box, 500, 500);
+
+        final ToolBar tb = new ToolBar();
+        tb.setOrientation(Orientation.HORIZONTAL);
+        for (int i=0; i< 12; i++) {
+            tb.getItems().add(new Button("button " + i));
+        }
+
+        final ToolBar tb2 = new ToolBar();
+        tb2.setOrientation(Orientation.VERTICAL);
+        for (int i=0; i< 12; i++) {
+            tb2.getItems().add(new Button("button " + i));
+        }
+
+        box.getChildren().add(tb);
+
+        HBox hbox = new HBox();
+        hbox.getChildren().add(tb2);
+        box.getChildren().add(hbox);
+
+        stage.setScene(scene);
+        stage.show();
+    }
+}
--- a/build.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/build.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -808,6 +808,7 @@
             }
             if (properties.javahClasspath == null) {
                 classpath = project.files(project.sourceSets.main.output.classesDir)
+                classpath += project.sourceSets.main.compileClasspath
             } else {
                 classpath = project.files(properties.javahClasspath)
             }
@@ -1111,7 +1112,7 @@
     // entire SDK, a different javadoc command is used (see the javadoc task on the top level)
     javadoc {
         enabled = IS_BUILD_JAVADOC
-        exclude("com/**/*", "javafx/scene/ParentDesignInfo*", "Compile*", "javafx/builder/**/*");
+        exclude("com/**/*", "javafx/scene/ParentDesignInfo*", "Compile*", "javafx/builder/**/*", "javafx/scene/accessibility/**/*");
         executable = JAVADOC;
         options.windowTitle("JavaFX Project ${project.name} ${RELEASE_NAME}")
         options.links(JDK_DOCS);
@@ -2388,7 +2389,7 @@
     classpath += files(projectsToDocument.collect { project ->
         project.sourceSets.main.output
     });
-    exclude("com/**/*", "javafx/scene/ParentDesignInfo*", "Compile*", "javafx/builder/**/*");
+    exclude("com/**/*", "javafx/scene/ParentDesignInfo*", "Compile*", "javafx/builder/**/*", "javafx/scene/accessibility/**/*");
     options.windowTitle("${javadocTitle}")
     options.header("${javadocHeader}")
     options.bottom("${javadocBottom}")
--- a/buildSrc/android.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/android.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -338,14 +338,12 @@
 ANDROID.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     "com/sun/prism/null3d",
     "com/sun/scenario/effect/impl/hw/d3d",
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
     "com/sun/glass/ui/gtk",
     "com/sun/glass/ui/ios",
--- a/buildSrc/armv6hf.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/armv6hf.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -85,7 +85,6 @@
 ARMV6HF.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d",
@@ -93,7 +92,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
     
     "com/sun/glass/ui/android",
@@ -349,8 +347,7 @@
     "com/sun/glass/ui/monocle/linux/*",
     "com/sun/glass/ui/monocle/util/*",
     "com/sun/glass/ui/monocle/x11/*",
-    "com/sun/glass/ui/gtk/*",
-    "com/sun/glass/ui/accessible/gtk/*"]
+    "com/sun/glass/ui/gtk/*"]
 ARMV6HF.glass.lib = "glass"
 
 ARMV6HF.glass.lensport = [:]
--- a/buildSrc/armv6sf.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/armv6sf.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -75,7 +75,6 @@
 ARMV6SF.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d",
@@ -83,7 +82,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
         
     "com/sun/glass/ui/android",
@@ -353,8 +351,7 @@
     "com/sun/glass/ui/monocle/linux/*",
     "com/sun/glass/ui/monocle/util/*",
     "com/sun/glass/ui/monocle/x11/*",
-    "com/sun/glass/ui/gtk/*",
-    "com/sun/glass/ui/accessible/gtk/*"]
+    "com/sun/glass/ui/gtk/*"]
 ARMV6SF.glass.lib = "glass"
 
 ARMV6SF.glass.lensport = [:]
--- a/buildSrc/armv7hft.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/armv7hft.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -85,7 +85,6 @@
 ARMV7HFT.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d",
@@ -93,7 +92,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
     
     "com/sun/glass/ui/android",
@@ -344,8 +342,7 @@
     "com/sun/glass/ui/monocle/linux/*",
     "com/sun/glass/ui/monocle/util/*",
     "com/sun/glass/ui/monocle/x11/*",
-    "com/sun/glass/ui/gtk/*",
-    "com/sun/glass/ui/accessible/gtk/*"]
+    "com/sun/glass/ui/gtk/*"]
 ARMV7HFT.glass.lib = "glass"
 
 ARMV7HFT.glass.lensport = [:]
--- a/buildSrc/armv7sft.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/armv7sft.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -75,7 +75,6 @@
 ARMV7SFT.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d",
@@ -83,7 +82,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
         
     "com/sun/glass/ui/android",
@@ -353,8 +351,7 @@
     "com/sun/glass/ui/monocle/linux/*",
     "com/sun/glass/ui/monocle/util/*",
     "com/sun/glass/ui/monocle/x11/*",
-    "com/sun/glass/ui/gtk/*",
-    "com/sun/glass/ui/accessible/gtk/*"]
+    "com/sun/glass/ui/gtk/*"]
 ARMV7SFT.glass.lib = "glass"
 
 ARMV7SFT.glass.lensport = [:]
--- a/buildSrc/ios.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/ios.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -64,7 +64,6 @@
 IOS.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     "com/sun/prism/null3d",
@@ -72,7 +71,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
     "com/sun/glass/ui/android",
     "com/sun/glass/ui/gtk",
--- a/buildSrc/linux.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/linux.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -43,7 +43,6 @@
 LINUX.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d", // TODO This is used in dev builds but not the final sdk
@@ -51,7 +50,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
         
     "com/sun/glass/ui/ios",
@@ -161,8 +159,7 @@
 LINUX.glass.javahInclude = [
     "com/sun/glass/events/**",
     "com/sun/glass/ui/*",
-    "com/sun/glass/ui/gtk/*",
-    "com/sun/glass/ui/accessible/gtk/*"]
+    "com/sun/glass/ui/gtk/*"]
 LINUX.glass.nativeSource = file("modules/graphics/src/main/native-glass/gtk")
 LINUX.glass.compiler = compiler
 LINUX.glass.ccFlags = [ccFlags].flatten()
--- a/buildSrc/mac.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/mac.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -41,7 +41,6 @@
 MAC.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d", // TODO This is used in dev builds but not the final sdk
@@ -101,8 +100,7 @@
 MAC.glass.javahInclude = [
     "com/sun/glass/events/**",
     "com/sun/glass/ui/*",
-    "com/sun/glass/ui/mac/*",
-    "com/sun/glass/ui/accessible/mac/*"]
+    "com/sun/glass/ui/mac/*"]
 MAC.glass.nativeSource = file("modules/graphics/src/main/native-glass/mac")
 MAC.glass.compiler = compiler
 MAC.glass.ccFlags = [ccFlags].flatten()
--- a/buildSrc/win.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/win.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -40,7 +40,6 @@
 WIN.jfxrtJarExcludes = [
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
     //"com/sun/prism/null3d", // TODO This is used in dev builds but not the final sdk
 
@@ -156,8 +155,7 @@
 WIN.glass.javahInclude = [
     "com/sun/glass/events/**",
     "com/sun/glass/ui/*",
-    "com/sun/glass/ui/win/*",
-    "com/sun/glass/ui/accessible/win/*"]
+    "com/sun/glass/ui/win/*"]
 WIN.glass.nativeSource = file("modules/graphics/src/main/native-glass/win")
 WIN.glass.compiler = compiler
 WIN.glass.rcCompiler = rcCompiler;
--- a/buildSrc/x86egl.gradle	Tue Mar 18 11:51:33 2014 -0400
+++ b/buildSrc/x86egl.gradle	Tue Mar 18 12:50:23 2014 -0700
@@ -77,7 +77,6 @@
 X86EGL.jfxrtJarExcludes = [
     "**/*.hlsl",
     "com/sun/glass/ui/win",
-    "com/sun/glass/ui/accessible/win",
     "com/sun/prism/d3d",
     "com/sun/prism/es2/gl/win",
     //"com/sun/prism/null3d",
@@ -85,7 +84,6 @@
     
     "com/sun/glass/events/mac",
     "com/sun/glass/ui/mac",
-    "com/sun/glass/ui/accessible/mac",
     "com/sun/prism/es2/gl/mac",
     
     "com/sun/glass/ui/android",
@@ -285,8 +283,7 @@
     "com/sun/glass/ui/monocle/linux/*",
     "com/sun/glass/ui/monocle/util/*",
     "com/sun/glass/ui/monocle/x11/*",
-    "com/sun/glass/ui/gtk/*",
-    "com/sun/glass/ui/accessible/gtk/*"]
+    "com/sun/glass/ui/gtk/*"]
 X86EGL.glass.lib = "glass"
 
 X86EGL.glass.monocle = [:]
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleButton.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import javafx.scene.control.ButtonBase;
-
-public class AccessibleButton extends AccessibleControl  {
-    
-    ButtonBase button ;
-    public AccessibleButton(ButtonBase button) {
-        super(button);
-        this.button = button ;       
-    }
-    
-    //
-    // Summary:
-    //     Retrieves the value of a property supported by the UI Automation provider.
-    //
-    // Parameters:
-    //   propertyId:
-    //     The property identifier.
-    //
-    // Returns:
-    //     The property value, or a null if the property is not supported by this provider,
-    //     or System.Windows.Automation.AutomationElementIdentifiers.NotSupported if
-    //     it is not supported at all.
-    @Override public Object getPropertyValue(int propertyId) {
-        Object retVal = null ;
-        switch(propertyId){
-            case PropertyIds.NAME:
-            case PropertyIds.DESCRIBED_BY:
-                retVal = (Object)this.button.getText() ;
-                break;
-            case PropertyIds.CONTROL_TYPE:
-                retVal = ControlTypeIds.BUTTON;
-                break;
-            case PropertyIds.IS_KEYBOARD_FOCUSABLE:
-                retVal = true;
-                break;
-            case PropertyIds.HAS_KEYBOARD_FOCUS:
-                retVal = button.isFocused();
-                break;
-            case PropertyIds.IS_CONTROL_ELEMENT:
-                retVal = true;
-                break;
-            case PropertyIds.IS_ENABLED:
-                retVal = !button.isDisabled();
-                break;
-            case PropertyIds.CLASS_NAME:
-                retVal = this.getClass().toString();
-                break;
-        }
-        return retVal;
-    }
-
-    // Summary:
-    //     Retrieves an object that provides support for a control pattern on a UI Automation
-    //     element.
-    //
-    // Parameters:
-    //   patternId:
-    //     Identifier of the pattern.
-    //
-    // Returns:
-    //     Object that implements the pattern interface, or null if the pattern is not
-    //     supported.
-    @Override public Object getPatternProvider(int patternId) {
-        return null ;
-    }
-
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleCheckBox.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.scene.control.CheckBox;
-import com.sun.javafx.Logging;
-import com.sun.javafx.accessible.providers.ToggleProvider;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.EventIds;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import com.sun.javafx.accessible.utils.ToggleState;
-import sun.util.logging.PlatformLogger;
-import sun.util.logging.PlatformLogger.Level;
-
-public class AccessibleCheckBox extends AccessibleControl implements ToggleProvider {
-    CheckBox checkBox ;
-    public AccessibleCheckBox(CheckBox checkBox)
-    {
-        super(checkBox);
-        this.checkBox = checkBox ;
-
-        // initialize to receive state change event
-        checkBox.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                ToggleState toggleOldState, toggleCurrState=ToggleState.OFF; // Disabled
-                toggleOldState=ToggleState.ON;
-                CheckBox checkBox = (CheckBox)t.getSource();
-                if( checkBox.isIndeterminate() )
-                {
-                    toggleCurrState = ToggleState.INDETERMINATE;
-                    toggleOldState = ToggleState.OFF ;
-                }
-                if( checkBox.isSelected() )
-                {
-                    toggleCurrState = ToggleState.ON;
-                    toggleOldState = ToggleState.OFF ;
-                }
-                firePropertyChange(EventIds.AUTOMATION_PROPERTY_CHANGED,
-                        toggleOldState.hashCode(), toggleCurrState.hashCode());
-            }
-        });
-    }
-
-   public ToggleState getToggleState()
-   {
-       PlatformLogger logger = Logging.getAccessibilityLogger();
-        ToggleState toggleState=ToggleState.OFF; // Disabled
-        if( checkBox.isIndeterminate() )
-            toggleState = ToggleState.INDETERMINATE;
-        if( checkBox.isSelected() )
-            toggleState = ToggleState.ON;
-        if (logger.isLoggable(Level.FINER)) {
-            logger.finer(this.toString()+ "getToggleState" + toggleState.toString());
-        }
-        return toggleState ;
-
-   }
-    //
-    // Summary:
-    //     Retrieves the value of a property supported by the UI Automation provider.
-    //
-    // Parameters:
-    //   propertyId:
-    //     The property identifier.
-    //
-    // Returns:
-    //     The property value, or a null if the property is not supported by this provider,
-    //     or System.Windows.Automation.AutomationElementIdentifiers.NotSupported if
-    //     it is not supported at all.
-    @Override
-    public Object getPropertyValue(int propertyId)
-    {
-        Object retVal = null ;
-        switch(propertyId){
-            case PropertyIds.NAME:
-            case PropertyIds.DESCRIBED_BY:
-                retVal = (Object)checkBox.getText() ;
-                break;
-            case PropertyIds.CONTROL_TYPE:
-                retVal = ControlTypeIds.CHECK_BOX;
-                break;
-            case PropertyIds.IS_KEYBOARD_FOCUSABLE:
-                retVal = true;
-                break;
-            case PropertyIds.HAS_KEYBOARD_FOCUS:
-                retVal = checkBox.isFocused();
-                break;
-            case PropertyIds.IS_CONTROL_ELEMENT:
-                retVal = true;
-                break;
-            case PropertyIds.IS_ENABLED:
-                retVal = !checkBox.isDisabled();
-                break;
-            case PropertyIds.CLASS_NAME:
-                retVal = this.getClass().toString();
-                break;
-            case PropertyIds.TOGGLE_TOGGLE_STATE:
-                retVal = ToggleState.ON;
-                break;
-        }
-        return retVal;
-    }
-
-    // Summary:
-    //     Retrieves an object that provides support for a control pattern on a UI Automation
-    //     element.
-    //
-    // Parameters:
-    //   patternId:
-    //     Identifier of the pattern.
-    //
-    // Returns:
-    //     Object that implements the pattern interface, or null if the pattern is not
-    //     supported.
-    @Override
-    public Object getPatternProvider(int patternId)
-    {
-        return (Object)super.getAccessibleElement() ;
-    }
-
-    @Override
-    public void toggle()
-    {
-        checkBox.arm();
-    }
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleControl.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.scene.control.Control;
-import sun.util.logging.PlatformLogger;
-import sun.util.logging.PlatformLogger.Level;
-
-import com.sun.javafx.Logging;
-import com.sun.javafx.accessible.AccessibleNode;
-import com.sun.javafx.accessible.utils.EventIds;
-
-public class AccessibleControl extends AccessibleNode {
-    Control control ;
-    public AccessibleControl(Control control)
-    {
-	super(control);
-        this.control = control ;
-
-        control.focusedProperty().addListener(new ChangeListener<Boolean>() {
-
-            @Override
-            public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
-                PlatformLogger logger = Logging.getAccessibilityLogger();
-                if(!t && t1)
-                {
-                    if (logger.isLoggable(Level.FINER)) {
-                        logger.finer(this.toString() + " Focus Change: true");
-                    }
-                    fireEvent(EventIds.AUTOMATION_FOCUS_CHANGED);
-                }
-                else
-                    if (logger.isLoggable(Level.FINER)) {
-                        logger.finer(this.toString() + " Focus Change: false");
-                    }
-            }
-        } );
-    }
-
-    public void fireEvent(int id)
-    {
-        super.fireEvent(id);
-    }
-
-    public void firePropertyChange(int propertyId, int oldProperty, int newProperty) {
-        super.firePropertyChange(propertyId, oldProperty, newProperty);
-    }
-    public void firePropertyChange(int propertyId, boolean oldProperty, boolean newProperty) {
-        super.firePropertyChange(propertyId, oldProperty, newProperty);
-    }
-
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleList.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import com.sun.javafx.accessible.providers.GridProvider;
-import com.sun.javafx.accessible.providers.SelectionProvider;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.OrientationType;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import javafx.scene.control.ListView;
-
-public class AccessibleList extends AccessibleControl
-                            implements SelectionProvider, GridProvider {
-
-    ListView listView;
-    
-    /**
-     * Constructor
-     * 
-     * @param listView the associated FX control
-     */
-    public AccessibleList(ListView listView) {
-        super(listView);
-        this.listView = listView ; 
-       
-    }
-
-    /**
-     * Gets a property value
-     * 
-     * @param propertyId
-     * 
-     * @return the requested property value 
-     */
-    @Override public Object getPropertyValue(int propertyId) {
-        Object retVal = null ;
-        switch(propertyId){
-            case PropertyIds.NAME:
-            case PropertyIds.DESCRIBED_BY:
-                // return null for now
-                break;
-            case PropertyIds.CONTROL_TYPE:
-                retVal = ControlTypeIds.LIST;
-                break;
-            case PropertyIds.IS_KEYBOARD_FOCUSABLE:
-                retVal = listView.isFocusTraversable();
-                break;
-            case PropertyIds.HAS_KEYBOARD_FOCUS:
-                retVal = listView.isFocused();
-                break;
-            case PropertyIds.IS_CONTROL_ELEMENT:
-                retVal = true;
-                break;
-            case PropertyIds.IS_ENABLED:
-                retVal = !listView.isDisabled();
-                break;
-            case PropertyIds.CLASS_NAME:
-                retVal = this.getClass().toString();
-                break;
-            case PropertyIds.ORIENTATION:
-                switch(listView.getOrientation()) {
-                    case HORIZONTAL: 
-                        retVal = OrientationType.OrientationType_Horizontal;
-                        break;
-                    case VERTICAL:
-                        retVal = OrientationType.OrientationType_Vertical;
-                        break;
-                    default:
-                        retVal = OrientationType.OrientationType_None;
-                        break;
-                }
-                break;
-            case PropertyIds.IS_OFFSCREEN:
-                //TODO check if really offscreen - can be moved up to superclass 
-                retVal = true;
-                break;
-        }   
-        return retVal;
-    }
-
-    /**
-     * Determine if the list supports multiple selection
-     * 
-     * @return whether or not the list supports multiple selection 
-     */
-    @Override
-    public boolean canSelectMultiple() {
-        return false;
-    }
-
-    /**
-     * Get the Glass objects that are currently selected
-     * 
-     * @return return the Glass objects that are currently selected
-     */
-    @Override
-    public Object[] getSelection() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isSelectionRequired() {
-        return true;
-    }
-
-
-    /**
-     * Get the number of columns in this list
-     * 
-     * @return the number of columns in this list 
-     */
-    @Override
-    public int getColumnCount() {
-        return 1;
-    }
-
-    /**
-     * Get the number of rows in this list
-     * 
-     * @return the number of rows in this list
-     */
-    @Override
-    public int getRowCount() {
-        return listView.getItems().size();
-    }
-
-    /**
-     * Gets the accessible Glass object of the specified item in the list.
-     * 
-     * @param row
-     * @param col
-     * 
-     * @return the accessible Glass object of the specified item in the list
-     */
-    @Override   
-    public Object getItem(int row, int col) {
-        throw new UnsupportedOperationException();
-    }
-
-    
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleListItem.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import com.sun.javafx.accessible.providers.GridItemProvider;
-import com.sun.javafx.accessible.providers.SelectionItemProvider;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import javafx.scene.Node;
-import javafx.scene.control.Cell;
-import javafx.scene.control.ListView;
-
-public final class AccessibleListItem extends AccessibleControl implements 
-        SelectionItemProvider, GridItemProvider {
-
-    Cell listCell;
-    static ListView listView = null;
-
-    /**
-     * Constructor
-     * 
-     * @param listCell The associated list item cell
-     */
-    public AccessibleListItem(Cell listCell) {
-        super(listCell);
-        this.listCell = listCell ; 
-        Node node = listCell;
-        if (listView == null) {
-            while (node.getParent() != null) {
-                Node parent = node.getParent();
-                if (parent instanceof ListView) {
-                    listView = (ListView)parent;
-                    break;
-                }
-                node = node.getParent();
-            }
-        }
-    }
-    
-    /**
-     * Get the property value for the specified property ID.
-     * 
-     * @param propertyId    specifies which property to fetch
-     * 
-     * @return the requested property
-     */
-    @Override public Object getPropertyValue(int propertyId) {
-        Object retVal = null ;
-        switch(propertyId){
-            case PropertyIds.NAME:
-            case PropertyIds.DESCRIBED_BY:
-                retVal = listCell.getText();
-                break;
-            case PropertyIds.CONTROL_TYPE:
-                retVal = ControlTypeIds.LIST_ITEM;
-                break;
-            case PropertyIds.IS_KEYBOARD_FOCUSABLE:
-                retVal = listCell.isFocusTraversable();
-                break;
-            case PropertyIds.HAS_KEYBOARD_FOCUS:
-                retVal = listCell.isFocused();
-                break;
-            case PropertyIds.IS_CONTROL_ELEMENT:
-                retVal = true;
-                break;
-            case PropertyIds.IS_ENABLED:
-                retVal = !listCell.isDisabled();
-                break;
-            case PropertyIds.CLASS_NAME:
-                retVal = this.getClass().toString();
-                break;
-        }   
-        return retVal;
-    }
-    
-    /**
-     * Add this object to the selection.
-     */
-    @Override
-    public void addToSelection() {
-        listView.getSelectionModel().select(listCell);
-    }
-
-    /**
-     * Remove this object from the selection.
-     */
-    @Override
-    public void removeFromSelection() {
-        // TODO assuming single selection for now
-        listView.getSelectionModel().clearSelection();
-    }
-
-    /**
-     * Select this object.
-     */
-    @Override
-    public void select() {
-        listView.getSelectionModel().select(listCell);
-    }
-
-    /**
-     * Determine if this object is selected.
-     * 
-     * @return whether or not this object is selected
-     */
-    @Override
-    public boolean isSelected() {
-        return listCell == listView.getSelectionModel().getSelectedItem();
-    }
-
-    /**
-     * Get the Glass accessible for the container.
-     * 
-     * @return the Glass accessible of the container.
-     */
-    @Override
-    public Object getSelectionContainer() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * For GridItemProvider Row property
-     *
-     * @return the row index of this object.
-     */
-    @Override
-    public int getRow() {
-        return listView.getItems().indexOf(listCell);
-    }
-
-    /**
-     * For GridItemProvider Column property
-     *
-     * @return the column index of this object.
-     */
-    @Override
-    public int getColumn() {
-        return 1;
-    }
-
-    /**
-     * For GridItemProvider RowSpan property
-     *
-     * @return the the number of rows spanned by this object.
-     */
-    @Override
-    public int getRowSpan() {
-        return listView.getItems().size();
-       
-    }
-
-    /**
-     * For GridItemProvider ColumnSpan property
-     *
-     * @return the the number of columns spanned by this object.
-     */
-    @Override
-    public int getColumnSpan() {
-        return 1;
-    }
-
-    /**
-     * For GridItemProvider ContainingGrid property
-     *
-     * @return the Glass provider that implements the GridProvider pattern and represents
-     *         the container of this object. 
-     */
-    @Override
-    public Object getContainingGrid() {
-        throw new UnsupportedOperationException();
-    }
-    
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleMenuButton.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import com.sun.javafx.accessible.providers.ToggleProvider;
-import com.sun.javafx.accessible.providers.ExpandCollapseProvider;
-import com.sun.javafx.accessible.providers.InvokeProvider;
-import com.sun.javafx.accessible.utils.ExpandCollapseState;
-import com.sun.javafx.accessible.utils.ToggleState;
-import javafx.scene.control.MenuButton;
-
-
-public class AccessibleMenuButton extends AccessibleButton implements ToggleProvider, InvokeProvider, 
-        ExpandCollapseProvider {
-    
-    MenuButton menuButton;
-    public AccessibleMenuButton(MenuButton b) {
-        super(b);
-        this.menuButton = b;
-    }
-    
-    @Override public void toggle() {
-        if ( menuButton.isShowing()) 
-            menuButton.hide();
-        else menuButton.show();
-    }
-
-    @Override public ToggleState getToggleState() {
-        if(menuButton.isShowing())
-            return ToggleState.ON;
-        else return ToggleState.OFF;
-    }
-
-    @Override public void invoke() {
-        menuButton.show();
-        // need to fire action event as well or may be only action event which 
-        // will automatically call menuButton.show. 
-    }
-
-    @Override public ExpandCollapseState getExpandCollapseState() {
-        if (menuButton.isShowing()) {
-            return ExpandCollapseState.ExpandCollapseState_Expanded;
-        } else {
-            return ExpandCollapseState.ExpandCollapseState_Collapsed;
-        }
-    }
-
-    @Override public void expand() {
-        menuButton.show();
-    }
-
-    @Override public void collapse() {
-        menuButton.hide();
-    }
-    
-    @Override public Object getPatternProvider(int patternId) {
-        return (Object)super.getAccessibleElement() ;
-    }
-}
-
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleRadioButton.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import com.sun.javafx.accessible.utils.EventIds;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.providers.SelectionItemProvider;
-import javafx.scene.control.RadioButton;
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-
-public class AccessibleRadioButton extends AccessibleControl implements SelectionItemProvider {
-    RadioButton radioButton ;
-    public AccessibleRadioButton(RadioButton radioButton)
-    {
-        super(radioButton);
-        this.radioButton = radioButton;
-        // initialize to receive state change event
-        radioButton.setOnAction(new EventHandler<ActionEvent>() {
-            @Override
-            public void handle(ActionEvent t) {
-                RadioButton radioButton = (RadioButton)t.getSource();
-                boolean bOldVal, bCurrVal;
-                bCurrVal = true;
-                if( radioButton.isDisabled() ) 
-                    bCurrVal = false;
-                bOldVal = !bCurrVal;               
-                firePropertyChange(EventIds.AUTOMATION_PROPERTY_CHANGED, bOldVal, bCurrVal);
-            }
-        });
-    }
-
-    //
-    // Summary:
-    //     Retrieves the value of a property supported by the UI Automation provider.
-    //
-    // Parameters:
-    //   propertyId:
-    //     The property identifier.
-    //
-    // Returns:
-    //     The property value, or a null if the property is not supported by this provider,
-    //     or System.Windows.Automation.AutomationElementIdentifiers.NotSupported if
-    //     it is not supported at all.
-    @Override
-    public Object getPropertyValue(int propertyId)
-    {
-        Object retVal = null ;
-        switch(propertyId){
-            case PropertyIds.NAME:
-            case PropertyIds.DESCRIBED_BY:
-                retVal = (Object)radioButton.getText() ;
-                break;
-            case PropertyIds.CONTROL_TYPE:
-                retVal = ControlTypeIds.RADIO_BUTTON;
-                break;
-            case PropertyIds.IS_KEYBOARD_FOCUSABLE:
-                retVal = radioButton.isFocusTraversable();
-                break;
-            case PropertyIds.HAS_KEYBOARD_FOCUS:
-                retVal = radioButton.isFocused();
-                break;
-            case PropertyIds.IS_CONTROL_ELEMENT:
-                retVal = true;
-                break;
-            case PropertyIds.IS_ENABLED:
-                retVal = !radioButton.isDisabled();
-                break;
-            case PropertyIds.CLASS_NAME:
-                retVal = this.getClass().toString();
-                break;
-        }
-        return retVal;
-    }
-
-    // Summary:
-    //     Retrieves an object that provides support for a control pattern on a UI Automation
-    //     element.
-    //
-    // Parameters:
-    //   patternId:
-    //     Identifier of the pattern.
-    //
-    // Returns:
-    //     Object that implements the pattern interface, or null if the pattern is not
-    //     supported.
-    @Override
-    public Object getPatternProvider(int patternId)
-    {
-        return (Object)super.getAccessibleElement() ;
-    }
-
-
-    @Override
-    public void addToSelection()
-    {
-    }
-    
-    @Override
-    public void removeFromSelection()
-    {
-        
-    }
-
-    @Override
-    public void select()
-    {
-        
-    }
-    
-    @Override
-    public boolean isSelected()
-    {
-        return radioButton.isSelected();
-    }
-    
-    @Override
-    public AccessibleProvider getSelectionContainer()
-    {
-        return null;
-    }
-    
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/accessible/AccessibleSlider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.javafx.scene.control.accessible;
-
-import com.sun.javafx.accessible.utils.EventIds;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import com.sun.javafx.accessible.providers.RangeValueProvider;
-import javafx.scene.control.Slider;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-
-public class AccessibleSlider extends AccessibleControl implements RangeValueProvider {
-    
-    Slider slider;
-     public AccessibleSlider(Slider slider) {
-        super(slider);
-        this.slider = slider ; 
-        slider.valueProperty().addListener(new ChangeListener<Number>() {
-             @Override public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) {
-                 firePropertyChange(EventIds.AUTOMATION_PROPERTY_CHANGED, t.intValue(), t1.intValue());
-             }
-         });
-    }
-    
-    @Override public double getValue() {
-        return slider.getValue();
-    }
-
-    @Override public boolean isReadOnly() {
-        return false;
-    }
-
-    @Override public double getLargeValue() {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override public double getMinimum() {
-        return slider.getMin();
-    }
-
-    @Override public double getMaximum() {
-        return slider.getMax();
-    }
-
-    @Override public double getSmallChange() {
-        // Need to store value, to find the difference with the current value
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override public Object getPropertyValue(int propertyId) {
-        Object retVal = null ;
-        switch(propertyId){
-            case PropertyIds.NAME:
-            case PropertyIds.DESCRIBED_BY:
-                retVal = new Double(slider.getValue()).toString();
-                break;
-            case PropertyIds.CONTROL_TYPE:
-                retVal = ControlTypeIds.SLIDER;
-                break;
-            case PropertyIds.IS_KEYBOARD_FOCUSABLE:
-                retVal = slider.isFocusTraversable();
-                break;
-            case PropertyIds.HAS_KEYBOARD_FOCUS:
-                retVal = slider.isFocused();
-                break;
-            case PropertyIds.IS_CONTROL_ELEMENT:
-                retVal = true;
-                break;
-            case PropertyIds.IS_ENABLED:
-                retVal = !slider.isDisabled();
-                break;
-            case PropertyIds.CLASS_NAME:
-                retVal = this.getClass().toString();
-                break;
-        }
-        return retVal;
-    }
-    
-     @Override
-    public Object getPatternProvider(int patternId) {
-        return (Object)super.getAccessibleElement() ;
-    }
-
-}
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ComboBoxListViewSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -41,6 +41,7 @@
 import javafx.event.EventTarget;
 import javafx.scene.Node;
 import javafx.scene.Parent;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.control.ComboBox;
 import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
@@ -579,6 +580,13 @@
             @Override protected double computePrefHeight(double width) {
                 return getListViewPrefHeight();
             }
+
+            @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                switch (attribute) {
+                    case PARENT: return comboBox;
+                    default: return super.accGetAttribute(attribute, parameters);
+                }
+            }
         };
 
         _listView.setId("list-view");
@@ -592,6 +600,7 @@
                  int index = listView.getSelectionModel().getSelectedIndex();
                  comboBox.getSelectionModel().select(index);
                  updateDisplayNode();
+                 comboBox.accSendNotification(Attribute.TITLE);
              }
          });
          
@@ -696,4 +705,37 @@
             setFocused(b);
         }
     }
+
+    @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case CHILDREN: {
+                ObservableList<Node> children = comboBox.getChildrenUnmodifiable();
+                ObservableList<Node> list =  FXCollections.observableArrayList();
+                list.addAll(children);
+                if (!list.contains(listView)) list.add(listView);
+                return list;
+            }
+            case TITLE: {
+                String title = comboBox.isEditable() ? textField.getText() : buttonCell.getText();
+                if (title == null || title.isEmpty()) {
+                    title = comboBox.getPromptText();
+                }
+                return title;
+            }
+            case FOCUS_ITEM: if (!comboBox.isShowing()) return super.accGetAttribute(attribute, parameters);
+            //fall through
+            case ROW_COUNT:
+            case MULTIPLE_SELECTION:
+            case ROW_AT_INDEX:
+            case LEAF:
+            case SELECTED_ROWS: {
+                Object o = listView.accGetAttribute(attribute, parameters);
+                //if (o != null) return o;
+                return o;
+            }
+            //fall through
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
+
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/CustomColorDialog.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/CustomColorDialog.java	Tue Mar 18 12:50:23 2014 -0700
@@ -727,6 +727,7 @@
             } 
             sliders[row].setMax(maxValue);
             sliders[row].valueProperty().bindBidirectional(prop);
+            labels[row].setLabelFor(sliders[row]);
             fields[row].setMaxValue(maxValue);
             fields[row].valueProperty().bindBidirectional(prop);
             bindedProperties[row] = prop;
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ListViewSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ListViewSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,17 +25,22 @@
 
 package com.sun.javafx.scene.control.skin;
 
+import java.util.ArrayList;
+import java.util.List;
+import javafx.collections.FXCollections;
 import javafx.collections.ListChangeListener;
 import javafx.collections.ObservableList;
 import javafx.collections.WeakListChangeListener;
 import javafx.event.EventHandler;
 import javafx.geometry.Orientation;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.control.FocusModel;
 import javafx.scene.control.IndexedCell;
 import javafx.scene.control.Label;
 import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
+import javafx.scene.control.MultipleSelectionModel;
 import javafx.scene.control.SelectionModel;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.StackPane;
@@ -498,4 +503,35 @@
         flow.show(firstVisibleCell);
         return newSelectionIndex;
     }
+
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case FOCUS_ITEM: {
+                FocusModel<?> fm = getSkinnable().getFocusModel();
+                int focusedIndex = fm.getFocusedIndex();
+                return flow.getCell(focusedIndex);
+            }
+            case ROW_AT_INDEX: {
+                int rowIndex = (Integer)parameters[0];
+                return flow.getCell(rowIndex);
+            }
+            case SELECTED_ROWS: {
+                MultipleSelectionModel sm = getSkinnable().getSelectionModel();
+                ObservableList<Integer> indices = sm.getSelectedIndices();
+                List<Node> selection = new ArrayList<>(indices.size());
+                for (int i : indices) {
+                    ListCell<T> row = flow.getCell(i);
+
+                    // We should never, ever get row == null. If we do then
+                    // something is very wrong.
+                    assert row != null;
+
+                    if (row != null) selection.add(row);
+                }
+                return FXCollections.observableArrayList(selection);
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/PaginationSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/PaginationSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -56,6 +56,9 @@
 import javafx.geometry.Side;
 import javafx.geometry.VPos;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.*;
 import javafx.scene.input.TouchEvent;
 import javafx.scene.layout.HBox;
@@ -709,6 +712,16 @@
         layoutInArea(navigation, x, stackPaneHeight, w, navigationHeight, 0, HPos.CENTER, VPos.CENTER);
     }
 
+    @Override protected Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            // Role: Pagination (specified in Pagination class)
+            case FOCUS_ITEM: return navigation.indicatorButtons.getSelectedToggle();
+            case SELECTED_PAGE: return navigation.indicatorButtons.getSelectedToggle();
+            case PAGES: return navigation.indicatorButtons.getToggles();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
     class NavigationControl extends StackPane {
 
         private HBox controlBox;
@@ -727,7 +740,15 @@
             controlBox = new HBox();
             controlBox.getStyleClass().add("control-box");
 
-            leftArrowButton = new Button();
+            leftArrowButton = new Button() {
+                @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                    switch (attribute) {
+                        case ROLE: return Role.BUTTON;
+                        case TITLE: return "Select previous page";
+                        default: return super.accGetAttribute(attribute, parameters);
+                    }
+                }
+            };
             minButtonSize = leftArrowButton.getFont().getSize() * 2;
             leftArrowButton.fontProperty().addListener(new ChangeListener<Font>() {
                 @Override public void changed(ObservableValue<? extends Font> arg0, Font arg1, Font newFont) {
@@ -753,7 +774,15 @@
             leftArrowButton.setGraphic(leftArrow);
             leftArrow.getStyleClass().add("left-arrow");
 
-            rightArrowButton = new Button();
+            rightArrowButton = new Button() {
+                @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                    switch (attribute) {
+                        case ROLE: return Role.BUTTON;
+                        case TITLE: return "Select next page";
+                        default: return super.accGetAttribute(attribute, parameters);
+                    }
+                }
+            };
             rightArrowButton.setMinSize(minButtonSize, minButtonSize);
             rightArrowButton.setPrefSize(minButtonSize, minButtonSize);
             rightArrowButton.getStyleClass().add("right-arrow-button");
@@ -1240,6 +1269,22 @@
                 super.fire();
             }
         }
+
+        @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+            switch (attribute) {
+                case ROLE: return Role.PAGE;
+                case TITLE: return getText();
+                case SELECTED: return isSelected();
+                default: return super.accGetAttribute(attribute, parameters);
+            }
+        }
+
+        @Override public void accExecuteAction(Action action, Object... parameters) {
+            switch (action) {
+                case SELECT: setSelected(true); break;
+                default: super.accExecuteAction(action);
+            }
+        }
     }
 
     /***************************************************************************
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollBarSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollBarSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -28,7 +28,11 @@
 import javafx.event.EventHandler;
 import javafx.geometry.Orientation;
 import javafx.geometry.Point2D;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.ScrollBar;
+import javafx.scene.control.Slider;
 import javafx.scene.input.MouseButton;
 import javafx.scene.input.ScrollEvent;
 import javafx.scene.layout.Region;
@@ -91,13 +95,59 @@
         trackBackground = new StackPane();
         trackBackground.getStyleClass().setAll("track-background");
 
-        thumb = new StackPane();
+        thumb = new StackPane() {
+            @Override
+            public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                switch (attribute) {
+                    case ROLE: return Role.THUMB;
+                    case VALUE: return getSkinnable().getValue();
+                    case MAX_VALUE: {
+                        // This is required for mac-support, to convert from pixel to percent
+                        return getSkinnable().getMax();
+                    }
+                    default: return super.accGetAttribute(attribute, parameters);
+                }
+            }
+
+            @Override
+            public void accExecuteAction(Action action, Object... parameters) {
+                switch (action) {
+                    case MOVE: {
+                        // FIXME for now we just take the x/y values as value, rather than pixel value
+                        final ScrollBar scrollBar = getSkinnable();
+                        final Orientation o = scrollBar.getOrientation();
+                        double value = (double) (o == Orientation.VERTICAL ? parameters[1] : parameters[0]);
+                        scrollBar.setValue(scrollBar.getValue() + value);
+                        break;
+                    }
+                    default: super.accExecuteAction(action, parameters);
+                }
+            }
+        };
         thumb.getStyleClass().setAll("thumb");
 
 
         if (!IS_TOUCH_SUPPORTED) {
             
-            incButton = new EndButton("increment-button", "increment-arrow");
+            incButton = new EndButton("increment-button", "increment-arrow") {
+                @Override
+                public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                    switch (attribute) {
+                        case ROLE: return Role.INCREMENT_BUTTON;
+                        default: return super.accGetAttribute(attribute, parameters);
+                    }
+                }
+
+                @Override
+                public void accExecuteAction(Action action, Object... parameters) {
+                    switch (action) {
+                        case FIRE: 
+                            getSkinnable().increment();
+                            break;
+                        default: super.accExecuteAction(action, parameters);
+                    }
+                }
+            };
             incButton.setOnMousePressed(new EventHandler<javafx.scene.input.MouseEvent>() {
                @Override public void handle(javafx.scene.input.MouseEvent me) {
                    /*
@@ -121,7 +171,25 @@
                }
             });
 
-            decButton = new EndButton("decrement-button", "decrement-arrow");
+            decButton = new EndButton("decrement-button", "decrement-arrow") {
+                @Override
+                public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                    switch (attribute) {
+                        case ROLE: return Role.DECREMENT_BUTTON;
+                        default: return super.accGetAttribute(attribute, parameters);
+                    }
+                }
+
+                @Override
+                public void accExecuteAction(Action action, Object... parameters) {
+                    switch (action) {
+                        case FIRE:
+                            getSkinnable().decrement();
+                            break;
+                        default: super.accExecuteAction(action, parameters);
+                    }
+                }
+            };
             decButton.setOnMousePressed(new EventHandler<javafx.scene.input.MouseEvent>() {
                @Override public void handle(javafx.scene.input.MouseEvent me) {
                    /*
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -48,6 +48,7 @@
 import javafx.geometry.Orientation;
 import javafx.scene.Cursor;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.control.ScrollBar;
 import javafx.scene.control.ScrollPane;
 import javafx.scene.control.ScrollPane.ScrollBarPolicy;
@@ -1221,4 +1222,12 @@
         }
         return contentPosY;
     }
+
+    @Override protected Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case VERTICAL_SCROLLBAR: return vsb;
+            case HORIZONTAL_SCROLLBAR: return hsb;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/SliderSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/SliderSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -30,6 +30,9 @@
 import javafx.geometry.Orientation;
 import javafx.geometry.Point2D;
 import javafx.geometry.Side;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.chart.NumberAxis;
 import javafx.scene.control.Slider;
 import javafx.scene.input.MouseEvent;
@@ -82,7 +85,35 @@
     }
 
     private void initialize() {
-        thumb = new StackPane();
+        thumb = new StackPane() {
+            @Override
+            public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                switch (attribute) {
+                    case ROLE: return Role.THUMB;
+                    case VALUE: return getSkinnable().getValue();
+                    case MAX_VALUE: {
+                        // This is required for mac-support, to convert from pixel to percent
+                        return getSkinnable().getMax();
+                    }
+                    default: return super.accGetAttribute(attribute, parameters);
+                }
+            }
+
+            @Override
+            public void accExecuteAction(Action action, Object... parameters) {
+                switch (action) {
+                    case MOVE: {
+                        // FIXME for now we just take the x/y values as value, rather than pixel value
+                        final Slider slider = getSkinnable();
+                        final Orientation o = slider.getOrientation();
+                        double value = (double) (o == Orientation.VERTICAL ? parameters[1] : parameters[0]);
+                        slider.setValue(slider.getValue() + value);
+                        break;
+                    }
+                    default: super.accExecuteAction(action, parameters);
+                }
+            }
+        };
         thumb.getStyleClass().setAll("thumb");
         track = new StackPane();
         track.getStyleClass().setAll("track");
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TabPaneSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TabPaneSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -53,6 +53,8 @@
 import javafx.geometry.Side;
 import javafx.geometry.VPos;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.Label;
 import javafx.scene.control.MenuItem;
@@ -756,6 +758,7 @@
                         }
                     }
                 }
+
             };
             headersRegion.getStyleClass().setAll("headers-region");
             headersRegion.setClip(headerClip);
@@ -1069,6 +1072,13 @@
                 @Override protected double computePrefHeight(double w) {
                     return CLOSE_BTN_SIZE;
                 }
+                @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                    switch (attribute) {
+                        case ROLE: return Role.BUTTON;
+                        case TITLE: return "Close";
+                        default: return super.accGetAttribute(attribute, parameters);
+                    }
+                }
             };
             closeBtn.getStyleClass().setAll("tab-close-button");
             closeBtn.setOnMousePressed(new EventHandler<MouseEvent>() {
@@ -1403,6 +1413,14 @@
             clip.setHeight(value);
         }
     
+        @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+            switch (attribute) {
+                case ROLE: return Role.TAB_ITEM;
+                case TITLE: return getTab().getText();
+                case SELECTED: return selectedTab == getTab();
+                default: return super.accGetAttribute(attribute, parameters);
+            }
+        }
     } /* End TabHeaderSkin */
 
     private static final PseudoClass SELECTED_PSEUDOCLASS_STATE =
@@ -1807,4 +1825,14 @@
             tab.disableProperty().removeListener(weakDisableListener);
         }
     }
+
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case FOCUS_ITEM: return tabHeaderArea.getTabHeaderSkin(selectedTab);
+            case SELECTED_TAB: return tabHeaderArea.getTabHeaderSkin(selectedTab);
+            case TABS: return tabHeaderArea.headersRegion.getChildren();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableColumnHeader.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableColumnHeader.java	Tue Mar 18 12:50:23 2014 -0700
@@ -40,6 +40,8 @@
 import javafx.geometry.Pos;
 import javafx.geometry.VPos;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.Label;
 import javafx.scene.control.TableColumn;
@@ -996,4 +998,16 @@
     @Override public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
+
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            /* Having TableColumn role parented by TableColumn causes VoiceOver to be unhappy */
+            case ROLE: return column != null ? Role.TABLE_COLUMN : super.accGetAttribute(attribute, parameters);
+            case INDEX: return getIndex();
+            case TITLE: return column != null ? column.getText() : null;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableHeaderRow.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableHeaderRow.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,10 +25,7 @@
 
 package com.sun.javafx.scene.control.skin;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import javafx.beans.InvalidationListener;
 import javafx.beans.Observable;
@@ -416,6 +413,45 @@
         clip.setWidth(tableWidth);
     }
 
+    public TableColumnHeader getColumnHeaderFor(final TableColumnBase<?,?> col) {
+        if (col == null) return null;
+        List<TableColumnBase<?,?>> columnChain = new ArrayList<>();
+        columnChain.add(col);
+
+        TableColumnBase<?,?> parent = col.getParentColumn();
+        while (parent != null) {
+            columnChain.add(0, parent);
+            parent = parent.getParentColumn();
+        }
+
+        // we now have a list from top to bottom of a nested column hierarchy,
+        // and we can now navigate down to retrieve the header with ease
+        TableColumnHeader currentHeader = getRootHeader();
+        for (int depth = 0; depth < columnChain.size(); depth++) {
+            // this is the column we are looking for at this depth
+            TableColumnBase<?,?> column = columnChain.get(depth);
+
+            // and now we iterate through the nested table column header at this
+            // level to get the header
+            currentHeader = getColumnHeaderFor(column, currentHeader);
+        }
+        return currentHeader;
+    }
+
+    public TableColumnHeader getColumnHeaderFor(final TableColumnBase<?,?> col, TableColumnHeader currentHeader) {
+        if (currentHeader instanceof NestedTableColumnHeader) {
+            List<TableColumnHeader> headers = ((NestedTableColumnHeader)currentHeader).getColumnHeaders();
+
+            for (int i = 0; i < headers.size(); i++) {
+                TableColumnHeader header = headers.get(i);
+                if (header.getTableColumn() == col) {
+                    return header;
+                }
+            }
+        }
+
+        return null;
+    }
 
 
     /***************************************************************************
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableRowSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableRowSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -26,9 +26,15 @@
 package com.sun.javafx.scene.control.skin;
 
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 import javafx.beans.property.DoubleProperty;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.control.TableCell;
 import javafx.scene.control.TableColumn;
+import javafx.scene.control.TablePosition;
 import javafx.scene.control.TableRow;
 import javafx.scene.control.TableView;
 
@@ -36,10 +42,12 @@
 import com.sun.javafx.scene.control.behavior.TableRowBehavior;
 
 import javafx.beans.property.ObjectProperty;
+import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.scene.Node;
 import javafx.scene.control.Control;
 import javafx.scene.control.TableColumnBase;
+import javafx.scene.control.TableView.TableViewFocusModel;
 
 /**
  */
@@ -121,4 +129,46 @@
             tableViewSkin = (TableViewSkin)tableView.getSkin();
         }
     }
+
+    @Override
+    protected Object accGetAttribute(Attribute attribute,
+                                     Object... parameters) {
+        switch (attribute) {
+            case SELECTED_CELLS: {
+                // FIXME this could be optimised to iterate over cellsMap only
+                // (selectedCells could be big, cellsMap is much smaller)
+                List<Node> selection = new ArrayList<>();
+                int index = getSkinnable().getIndex();
+                for (TablePosition pos : tableView.getSelectionModel().getSelectedCells()) {
+                    if (pos.getRow() == index) {
+                        TableColumn column = pos.getTableColumn();
+                        if (column == null) {
+                            /* This is the row-based case */
+                            column = tableView.getVisibleLeafColumn(0);
+                        }
+                        TableCell cell = cellsMap.get(column);
+                        if (cell != null) selection.add(cell);
+                    }
+                    return FXCollections.observableArrayList(selection);
+                }
+            }
+            case CELL_AT_ROWCOLUMN: {
+                int colIndex = (Integer)parameters[1];
+                TableColumn column = tableView.getVisibleLeafColumn(colIndex);
+                return cellsMap.get(column);
+            }
+            case FOCUS_ITEM: {
+                TableViewFocusModel<T> fm = tableView.getFocusModel();
+                TablePosition focusedCell = fm.getFocusedCell();
+                TableColumn column = focusedCell.getTableColumn();
+                if (column == null) {
+                    /* This is the row-based case */
+                    column = tableView.getVisibleLeafColumn(0);
+                }
+                return cellsMap.get(column);
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,13 +25,18 @@
 
 package com.sun.javafx.scene.control.skin;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import javafx.beans.InvalidationListener;
+import javafx.beans.Observable;
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.ObjectProperty;
+import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.event.EventHandler;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.control.ResizeFeaturesBase;
 import javafx.scene.control.TableCell;
 import javafx.scene.control.TableColumn;
@@ -40,6 +45,7 @@
 import javafx.scene.control.TableSelectionModel;
 import javafx.scene.control.TableView;
 import javafx.scene.control.TableView.TableViewFocusModel;
+import javafx.scene.control.TableView.TableViewSelectionModel;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.Region;
 import javafx.util.Callback;
@@ -112,6 +118,7 @@
         });
 
         registerChangeListener(tableView.fixedCellSizeProperty(), "FIXED_CELL_SIZE");
+
     }
 
     @Override protected void handleControlPropertyChanged(String p) {
@@ -294,7 +301,26 @@
         }
     }
     
-    
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case SELECTED_CELLS: {
+                List<Node> selection = new ArrayList<>();
+                TableViewSelectionModel<T> sm = getSkinnable().getSelectionModel();
+                for (TablePosition pos : sm.getSelectedCells()) {
+                    TableRow<T> row = flow.getCell(pos.getRow());
+                    if (row != null) selection.add(row);
+                }
+                return FXCollections.observableArrayList(selection);
+            }
+            case FOCUS_ITEM: // TableViewSkinBase
+            case CELL_AT_ROWCOLUMN: // TableViewSkinBase
+            case COLUMN_AT_INDEX: // TableViewSkinBase
+            case HEADER: // TableViewSkinBase
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
     /***************************************************************************
      *                                                                         *
      * Layout                                                                  *
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkinBase.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkinBase.java	Tue Mar 18 12:50:23 2014 -0700
@@ -37,6 +37,7 @@
 import javafx.collections.ObservableList;
 import javafx.geometry.Insets;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.control.*;
 
 import javafx.scene.layout.Region;
@@ -45,6 +46,8 @@
 
 import javafx.collections.WeakListChangeListener;
 import com.sun.javafx.scene.control.skin.resources.ControlResources;
+
+import java.util.ArrayList;
 import java.util.List;
 import javafx.beans.WeakInvalidationListener;
 import javafx.beans.property.BooleanProperty;
@@ -954,4 +957,31 @@
         
         return false;
     }
+
+
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case FOCUS_ITEM: {
+                TableFocusModel<S,?> fm = getFocusModel();
+                int focusedIndex = fm.getFocusedIndex();
+                return flow.getCell(focusedIndex);
+            }
+            case CELL_AT_ROWCOLUMN: {
+                int rowIndex = (Integer)parameters[0];
+                return flow.getCell(rowIndex);
+            }
+            case COLUMN_AT_INDEX: {
+                int index = (Integer)parameters[0];
+                TableColumnBase column = getVisibleLeafColumn(index);
+                return getTableHeaderRow().getColumnHeaderFor(column);
+            }
+            case HEADER: {
+                /* Not sure how this is used by Accessibility, but without this VoiceOver will not
+                 * look for column headers */
+                return getTableHeaderRow();
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ToolBarSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ToolBarSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -47,6 +47,9 @@
 import javafx.geometry.VPos;
 import javafx.scene.Node;
 import javafx.scene.Parent;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.MenuItem;
 import javafx.scene.control.CustomMenuItem;
@@ -572,19 +575,13 @@
             downArrow = new StackPane();
             downArrow.getStyleClass().setAll("arrow");
             downArrow.setOnMousePressed(new EventHandler<MouseEvent>() {
-                @Override public void handle(MouseEvent me) {                    
-                    if (popup.isShowing()) {
-                        popup.hide();
-                    } else {
-                        popup.getItems().clear();
-                        popup.getItems().addAll(menuItems);
-                        popup.show(downArrow, Side.BOTTOM, 0, 0);
-                    }
+                @Override public void handle(MouseEvent me) {
+                    fire();
                 }
             });
 
             setOnKeyPressed(new EventHandler<KeyEvent>() {
-                @Override public void handle(KeyEvent ke) {                    
+                @Override public void handle(KeyEvent ke) {
                     if (KeyCode.SPACE.equals(ke.getCode())) {
                         if (!popup.isShowing()) {
                             popup.getItems().clear();
@@ -598,13 +595,7 @@
                         }
                         ke.consume();
                     } else if (KeyCode.ENTER.equals(ke.getCode())) {
-                        if (popup.isShowing()) {
-                            popup.hide();
-                        } else {
-                            popup.getItems().clear();
-                            popup.getItems().addAll(menuItems);
-                            popup.show(downArrow, Side.BOTTOM, 0, 0);
-                        }
+                        fire();
                         ke.consume();
                     }
                 }
@@ -647,6 +638,16 @@
             getChildren().add(downArrow);            
         }
 
+        private void fire() {
+            if (popup.isShowing()) {
+                popup.hide();
+            } else {
+                popup.getItems().clear();
+                popup.getItems().addAll(menuItems);
+                popup.show(downArrow, Side.BOTTOM, 0, 0);
+            }
+        }
+
         @Override protected double computePrefWidth(double height) {
             return snappedLeftInset() + snappedRightInset();
         }
@@ -671,6 +672,21 @@
             positionInArea(downArrow, x, y, w, h,
                     /*baseline ignored*/0, HPos.CENTER, VPos.CENTER);
         }
+
+        @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+            switch (attribute) {
+                case ROLE: return Role.BUTTON;
+                case TITLE: return "Overflow button";
+                default: return super.accGetAttribute(attribute, parameters);
+            }
+        }
+
+        @Override public void accExecuteAction(Action action, Object... parameters) {
+            switch (action) {
+                case FIRE: fire(); break;
+                default: super.accExecuteAction(action); break;
+            }
+        }
     }
 
     /***************************************************************************
@@ -757,4 +773,10 @@
         return getClassCssMetaData();
     }
 
+    @Override protected Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case OVERFLOW_BUTTON: return overflowMenu;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableRowSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableRowSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,15 +25,23 @@
 
 package com.sun.javafx.scene.control.skin;
 
+import javafx.collections.FXCollections;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.control.Control;
+import javafx.scene.control.TableColumnBase;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TreeTablePosition;
 import javafx.scene.control.TreeTableRow;
 import javafx.scene.control.TreeTableView;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
 import javafx.beans.property.DoubleProperty;
 import javafx.scene.Node;
-import javafx.scene.control.TreeItem;
 
 import javafx.css.StyleableDoubleProperty;
 import javafx.css.CssMetaData;
@@ -45,10 +53,6 @@
 import javafx.collections.ObservableList;
 import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
-import javafx.scene.control.Control;
-import javafx.scene.control.TableColumnBase;
-import javafx.scene.control.TreeTableCell;
-import javafx.scene.control.TreeTableColumn;
 import javafx.util.Callback;
 
 public class TreeTableRowSkin<T> extends TableRowSkinBase<TreeItem<T>, TreeTableRow<T>, TreeTableRowBehavior<T>, TreeTableCell<T,?>> {
@@ -397,4 +401,48 @@
     @Override public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
         return getClassCssMetaData();
     }
+
+
+
+    @Override
+    protected Object accGetAttribute(Attribute attribute,
+                                     Object... parameters) {
+        final TreeTableView<T> treeTableView = getSkinnable().getTreeTableView();
+        switch (attribute) {
+            case SELECTED_CELLS: {
+                // FIXME this could be optimised to iterate over cellsMap only
+                // (selectedCells could be big, cellsMap is much smaller)
+                List<Node> selection = new ArrayList<>();
+                int index = getSkinnable().getIndex();
+                for (TreeTablePosition pos : treeTableView.getSelectionModel().getSelectedCells()) {
+                    if (pos.getRow() == index) {
+                        TreeTableColumn column = pos.getTableColumn();
+                        if (column == null) {
+                            /* This is the row-based case */
+                            column = treeTableView.getVisibleLeafColumn(0);
+                        }
+                        TreeTableCell cell = cellsMap.get(column);
+                        if (cell != null) selection.add(cell);
+                    }
+                    return FXCollections.observableArrayList(selection);
+                }
+            }
+            case CELL_AT_ROWCOLUMN: {
+                int colIndex = (Integer)parameters[1];
+                TreeTableColumn column = treeTableView.getVisibleLeafColumn(colIndex);
+                return cellsMap.get(column);
+            }
+            case FOCUS_ITEM: {
+                TreeTableView.TreeTableViewFocusModel<T> fm = treeTableView.getFocusModel();
+                TreeTablePosition focusedCell = fm.getFocusedCell();
+                TreeTableColumn column = focusedCell.getTableColumn();
+                if (column == null) {
+                    /* This is the row-based case */
+                    column = treeTableView.getVisibleLeafColumn(0);
+                }
+                return cellsMap.get(column);
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableViewSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeTableViewSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -29,12 +29,14 @@
 import com.sun.javafx.scene.control.ReadOnlyUnbackedObservableList;
 
 import javafx.event.WeakEventHandler;
-import javafx.scene.control.TreeTableRow;
-import javafx.scene.control.TreeTableView;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
+import javafx.scene.control.*;
 
 import com.sun.javafx.scene.control.behavior.TreeTableViewBehavior;
 
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
 import java.util.List;
 
 import javafx.beans.property.BooleanProperty;
@@ -45,13 +47,7 @@
 import javafx.event.EventHandler;
 import javafx.event.EventType;
 import javafx.scene.Node;
-import javafx.scene.control.ResizeFeaturesBase;
-import javafx.scene.control.TableSelectionModel;
-import javafx.scene.control.TreeItem;
-import javafx.scene.control.TreeTablePosition;
 import javafx.scene.control.TreeItem.TreeModificationEvent;
-import javafx.scene.control.TreeTableCell;
-import javafx.scene.control.TreeTableColumn;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.Region;
 import javafx.scene.layout.StackPane;
@@ -382,7 +378,14 @@
 
         // If there is no disclosure node, then add one of my own
         if (cell.getDisclosureNode() == null) {
-            final StackPane disclosureNode = new StackPane();
+            final StackPane disclosureNode = new StackPane() {
+                @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+                    switch (attribute) {
+                        case ROLE: return Role.DISCLOSURE_NODE;
+                        default: return super.accGetAttribute(attribute, parameters);
+                    }
+                }
+            };
             disclosureNode.getStyleClass().setAll("tree-disclosure-node");
             disclosureNode.setMouseTransparent(true);
 
@@ -403,6 +406,56 @@
             flow.requestCellLayout();
         }
     }
+
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            // --- TableView-specific attributes
+            case SELECTED_CELLS: {
+                List<Node> selection = new ArrayList<>();
+                TreeTableView.TreeTableViewSelectionModel<S> sm = getSkinnable().getSelectionModel();
+                for (TreeTablePosition pos : sm.getSelectedCells()) {
+                    TreeTableRow<S> row = flow.getCell(pos.getRow());
+                    if (row != null) selection.add(row);
+                }
+                return FXCollections.observableArrayList(selection);
+            }
+
+            // TreeView-specific attributes
+            case TREE_ITEM_AT_INDEX: {
+                final int rowIndex = (Integer)parameters[0];
+                return rowIndex < 0 ? null : flow.getCell(rowIndex);
+            }
+//            case CHILDREN: {
+//                return FXCollections.observableArrayList(flow.getCell(0));
+//            }
+//            case ROW_AT_INDEX: {
+//                int rowIndex = (Integer)parameters[0];
+//                return flow.getCell(rowIndex);
+//            }
+//            case SELECTED_ROWS: {
+//                MultipleSelectionModel sm = getSkinnable().getSelectionModel();
+//                ObservableList<Integer> indices = sm.getSelectedIndices();
+//                List<Node> selection = new ArrayList<>(indices.size());
+//                for (int i : indices) {
+//                    TreeTableCell<S> row = flow.getCell(i);
+//
+//                    // We should never, ever get row == null. If we do then
+//                    // something is very wrong.
+//                    assert row != null;
+//
+//                    if (row != null) selection.add(row);
+//                }
+//                return FXCollections.observableArrayList(selection);
+//            }
+
+            case FOCUS_ITEM: // TableViewSkinBase
+            case CELL_AT_ROWCOLUMN: // TableViewSkinBase
+            case COLUMN_AT_INDEX: // TableViewSkinBase
+            case HEADER: // TableViewSkinBase
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
     
     
     /***************************************************************************
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeViewSkin.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TreeViewSkin.java	Tue Mar 18 12:50:23 2014 -0700
@@ -28,10 +28,14 @@
 import javafx.beans.InvalidationListener;
 import javafx.beans.Observable;
 import javafx.beans.WeakInvalidationListener;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
 import javafx.event.EventHandler;
 import javafx.event.EventType;
 import javafx.event.WeakEventHandler;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.*;
 import javafx.scene.control.TreeItem.TreeModificationEvent;
 import javafx.scene.input.MouseEvent;
@@ -41,6 +45,8 @@
 import java.lang.ref.WeakReference;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.List;
 
 import com.sun.javafx.scene.control.behavior.TreeViewBehavior;
 
@@ -240,6 +246,21 @@
         // If there is no disclosure node, then add one of my own
         if (cell.getDisclosureNode() == null) {
             final StackPane disclosureNode = new StackPane();
+
+            /* This code is intentionally commented.
+             * Currently as it stands it does provided any functionality and interferes
+             * with TreeView. The VO cursor move over the DISCLOSURE_NODE instead of the 
+             * tree item itself. This is possibly caused by the order of item's children 
+             * (the Labeled and the disclosure node).
+             */
+//            final StackPane disclosureNode = new StackPane() {
+//                @Override protected Object accGetAttribute(Attribute attribute, Object... parameters) {
+//                    switch (attribute) {
+//                        case ROLE: return Role.DISCLOSURE_NODE;
+//                        default: return super.accGetAttribute(attribute, parameters);
+//                    }
+//                }
+//            };
             disclosureNode.getStyleClass().setAll("tree-disclosure-node");
 
             final StackPane disclosureNodeArrow = new StackPane();
@@ -486,4 +507,35 @@
         flow.show(firstVisibleCell);
         return newSelectionIndex;
     }
+
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case FOCUS_ITEM: {
+                FocusModel<?> fm = getSkinnable().getFocusModel();
+                int focusedIndex = fm.getFocusedIndex();
+                return flow.getCell(focusedIndex);
+            }
+            case ROW_AT_INDEX: {
+                final int rowIndex = (Integer)parameters[0];
+                return rowIndex < 0 ? null : flow.getCell(rowIndex);
+            }
+            case SELECTED_ROWS: {
+                MultipleSelectionModel<TreeItem<T>> sm = getSkinnable().getSelectionModel();
+                ObservableList<Integer> indices = sm.getSelectedIndices();
+                List<Node> selection = new ArrayList<>(indices.size());
+                for (int i : indices) {
+                    TreeCell<T> row = flow.getCell(i);
+
+                    // We should never, ever get row == null. If we do then
+                    // something is very wrong.
+                    assert row != null;
+
+                    if (row != null) selection.add(row);
+                }
+                return FXCollections.observableArrayList(selection);
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Accordion.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Accordion.java	Tue Mar 18 12:50:23 2014 -0700
@@ -33,6 +33,8 @@
 import com.sun.javafx.scene.control.skin.AccordionSkin;
 import javafx.beans.property.ObjectPropertyBase;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * <p>An accordion is a group of {@link TitledPane TitlePanes}.  Only one TitledPane can be opened at
@@ -206,4 +208,12 @@
         return Boolean.FALSE;
     }
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.ACCORDION;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Button.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Button.java	Tue Mar 18 12:50:23 2014 -0700
@@ -29,9 +29,9 @@
 import javafx.beans.property.BooleanPropertyBase;
 import javafx.event.ActionEvent;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
-import com.sun.javafx.scene.control.accessible.AccessibleButton;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 import javafx.css.PseudoClass;
 import com.sun.javafx.scene.control.skin.ButtonSkin;
 
@@ -209,16 +209,13 @@
             = PseudoClass.getPseudoClass("default");
     private static final PseudoClass PSEUDO_CLASS_CANCEL
             = PseudoClass.getPseudoClass("cancel");
-    
-    private AccessibleButton accButton ;
-    /**
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
-     */
-    @Deprecated @Override public AccessibleProvider impl_getAccessible() {
-        if( accButton == null)
-            accButton = new AccessibleButton(this);
-        return (AccessibleProvider)accButton ;
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.BUTTON;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
     }
-    
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ButtonBase.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ButtonBase.java	Tue Mar 18 12:50:23 2014 -0700
@@ -31,6 +31,7 @@
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Action;
 import javafx.beans.property.ReadOnlyBooleanProperty;
 import javafx.beans.property.ReadOnlyBooleanWrapper;
 
@@ -183,4 +184,14 @@
 
     private static final PseudoClass ARMED_PSEUDOCLASS_STATE = PseudoClass.getPseudoClass("armed");
 
+    /** @treatAsPrivate */
+    @Override 
+    public void accExecuteAction(Action action, Object... parameters) {
+        switch (action) {
+            case FIRE: 
+                fire();
+                break;
+            default: super.accExecuteAction(action);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Cell.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Cell.java	Tue Mar 18 12:50:23 2014 -0700
@@ -36,8 +36,6 @@
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.HBox;
 import javafx.scene.shape.Rectangle;
-import com.sun.javafx.scene.control.accessible.AccessibleListItem;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 import javafx.css.PseudoClass;
 import javafx.beans.property.ReadOnlyBooleanProperty;
 import javafx.beans.property.ReadOnlyBooleanWrapper;
@@ -656,17 +654,6 @@
         if (selected && isEmpty()) return;
         setSelected(selected);
     }
-
-    private AccessibleListItem accListItem ;
-    /**
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
-     */
-    @Deprecated @Override public AccessibleProvider impl_getAccessible() {
-        if( accListItem == null)
-            accListItem = new AccessibleListItem(this);
-        return (AccessibleProvider)accListItem ;
-    }
     
     
     /***************************************************************************
--- a/modules/controls/src/main/java/javafx/scene/control/CheckBox.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/CheckBox.java	Tue Mar 18 12:50:23 2014 -0700
@@ -31,9 +31,9 @@
 
 import javafx.event.ActionEvent;
 import javafx.geometry.Pos;
-import com.sun.javafx.scene.control.accessible.AccessibleCheckBox;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 import javafx.css.PseudoClass;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import com.sun.javafx.scene.control.skin.CheckBoxSkin;
 
 /**
@@ -131,6 +131,7 @@
                     final boolean active = get();
                     pseudoClassStateChanged(PSEUDO_CLASS_DETERMINATE,  !active);
                     pseudoClassStateChanged(PSEUDO_CLASS_INDETERMINATE, active);
+                    accSendNotification(Attribute.TOGGLE_STATE);
                 }
 
                 @Override
@@ -162,7 +163,9 @@
         if (selected == null) {
             selected = new BooleanPropertyBase() {
                 @Override protected void invalidated() {
-                    pseudoClassStateChanged(PSEUDO_CLASS_SELECTED, get());
+                    final Boolean v = get();
+                    pseudoClassStateChanged(PSEUDO_CLASS_SELECTED, v);
+                    accSendNotification(Attribute.TOGGLE_STATE);
                 }
 
                 @Override
@@ -256,15 +259,13 @@
     private static final PseudoClass PSEUDO_CLASS_SELECTED = 
             PseudoClass.getPseudoClass("selected");
 
-    private AccessibleCheckBox accCheckBox ;
-    /**
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
-     */
-    @Deprecated @Override public AccessibleProvider impl_getAccessible() {
-        if( accCheckBox == null)
-            accCheckBox = new AccessibleCheckBox(this);
-        return (AccessibleProvider)accCheckBox ;
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.CHECKBOX;
+            case TOGGLE_STATE: return isIndeterminate() ? 2 : (isSelected() ? 1 : 0);
+            default: return super.accGetAttribute(attribute, parameters);
+        }
     }
-
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ComboBoxBase.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ComboBoxBase.java	Tue Mar 18 12:50:23 2014 -0700
@@ -32,6 +32,9 @@
 import javafx.event.Event;
 import javafx.event.EventHandler;
 import javafx.event.EventType;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * Abstract base class for ComboBox-like controls. A ComboBox typically has
@@ -208,6 +211,7 @@
             showing = new ReadOnlyBooleanWrapper(false) {
                 @Override protected void invalidated() {
                     pseudoClassStateChanged(PSEUDO_CLASS_SHOWING, get());
+                    accSendNotification(Attribute.EXPANDED);
                 }
 
                 @Override
@@ -459,4 +463,25 @@
     private static final PseudoClass PSEUDO_CLASS_ARMED =
             PseudoClass.getPseudoClass("armed");
     
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.COMBOBOX;
+            case EXPANDED: return isShowing();
+            /* list attributes handled by the skin */
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override 
+    public void accExecuteAction(Action action, Object... parameters) {
+        switch (action) {
+            case EXPAND: show(); break;
+            case COLLAPSE: hide(); break;
+            default: super.accExecuteAction(action); break;
+        }
+    }
 }
+
--- a/modules/controls/src/main/java/javafx/scene/control/Control.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Control.java	Tue Mar 18 12:50:23 2014 -0700
@@ -39,6 +39,7 @@
 import javafx.collections.ObservableList;
 import javafx.event.EventHandler;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.input.ContextMenuEvent;
 import javafx.scene.layout.Region;
 import com.sun.javafx.application.PlatformImpl;
@@ -901,4 +902,20 @@
     protected /*do not make final*/ Boolean impl_cssGetFocusTraversableInitialValue() {
         return Boolean.TRUE;
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case TOOLTIP:
+                Tooltip tooltip = getTooltip();
+                return tooltip == null ? "" : tooltip.getText();
+            default:
+        }
+        if (skinBase != null) {
+            Object result = skinBase.accGetAttribute(attribute, parameters);
+            if (result != null) return result;
+        }
+        return super.accGetAttribute(attribute, parameters);
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Hyperlink.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Hyperlink.java	Tue Mar 18 12:50:23 2014 -0700
@@ -33,6 +33,8 @@
 import javafx.css.PseudoClass;
 import com.sun.javafx.scene.control.skin.HyperlinkSkin;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 
 /**
@@ -173,5 +175,14 @@
     protected /*do not make final*/ Cursor impl_cssGetCursorInitialValue() {
         return Cursor.HAND;
     }
-    
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.HYPERLINK;
+            case VISITED: return isVisited();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Label.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Label.java	Tue Mar 18 12:50:23 2014 -0700
@@ -26,12 +26,15 @@
 package javafx.scene.control;
 
 import com.sun.javafx.scene.control.skin.LabelSkin;
+import com.sun.javafx.scene.NodeHelper;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.ObjectPropertyBase;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.css.StyleableProperty;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * Label is a non-editable text control. A Label is useful for displaying
@@ -116,10 +119,12 @@
                 Node oldValue = null;
                 @Override protected void invalidated() {
                     if (oldValue != null) {
+                        NodeHelper.getNodeAccessor().setLabeledBy(oldValue, null);
                         oldValue.impl_showMnemonicsProperty().removeListener(mnemonicStateListener);
                     }
                     final Node node = get();
                     if (node != null) {
+                        NodeHelper.getNodeAccessor().setLabeledBy(node, Label.this);
                         node.impl_showMnemonicsProperty().addListener(mnemonicStateListener);
                         impl_setShowMnemonics(node.impl_isShowMnemonics());
                     } else {
@@ -173,4 +178,14 @@
     protected /*do not make final*/ Boolean impl_cssGetFocusTraversableInitialValue() {
         return Boolean.FALSE;
     }    
+       
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TEXT;
+            case TITLE: return getText();
+            default: return super.accGetAttribute(attribute, parameters); 
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Labeled.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Labeled.java	Tue Mar 18 12:50:23 2014 -0700
@@ -53,6 +53,7 @@
 import javafx.geometry.Orientation;
 import javafx.geometry.Pos;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.Region;
@@ -1064,4 +1065,12 @@
         return getClassCssMetaData();
     }
 
+    /** @treatAsPrivate */
+    @Override 
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case TITLE: return getText();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
  }
--- a/modules/controls/src/main/java/javafx/scene/control/ListCell.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ListCell.java	Tue Mar 18 12:50:23 2014 -0700
@@ -36,11 +36,13 @@
 import javafx.beans.value.WeakChangeListener;
 import javafx.collections.ListChangeListener;
 import javafx.collections.ObservableList;
-
 import javafx.collections.WeakListChangeListener;
 import javafx.scene.Node;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 import java.lang.ref.WeakReference;
 import java.util.List;
@@ -544,5 +546,52 @@
      **************************************************************************/
 
     private static final String DEFAULT_STYLE_CLASS = "list-cell";
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.LIST_ITEM;
+            case TITLE: {
+                String text = getText();
+                /* If the data bounded to cell is a Node
+                 * the default behavior is to hide the text
+                 * and use data as the graphics. (see ListViewSkin#createDefaultCellImpl).
+                 * If the text is empty try to get graphics. 
+                 */
+                if (text == null || text.isEmpty()) {
+                    if (getGraphic() != null) {
+                        text = (String)getGraphic().accGetAttribute(Attribute.TITLE);
+                    }
+                }
+                return text;
+            }
+            case INDEX: return getIndex();
+            case SELECTED: return isSelected();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        final ListView<T> listView = getListView();
+        final MultipleSelectionModel<T> sm = listView == null ? null : listView.getSelectionModel();
+        switch (action) {
+            case SELECT: {
+                if (sm != null) sm.clearAndSelect(getIndex());
+                break;
+            }
+            case ADD_TO_SELECTION: {
+                if (sm != null) sm.select(getIndex());
+                break;
+            }
+            case REMOVE_FROM_SELECTION: {
+                if (sm != null) sm.clearSelection(getIndex());
+                break;
+            }
+            default: super.accExecuteAction(action);
+        }
+    }
 }
 
--- a/modules/controls/src/main/java/javafx/scene/control/ListView.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ListView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -50,6 +50,8 @@
 import javafx.event.EventHandler;
 import javafx.event.EventType;
 import javafx.geometry.Orientation;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.layout.Region;
 import javafx.util.Callback;
 
@@ -58,10 +60,8 @@
 import com.sun.javafx.css.converters.EnumConverter;
 import javafx.collections.WeakListChangeListener;
 import com.sun.javafx.css.converters.SizeConverter;
-import com.sun.javafx.scene.control.accessible.AccessibleList;
 import com.sun.javafx.scene.control.skin.ListViewSkin;
 import java.lang.ref.WeakReference;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 import javafx.css.PseudoClass;
 import javafx.beans.DefaultProperty;
 import javafx.css.Styleable;
@@ -939,17 +939,6 @@
         return onScrollTo;
     }
 
-    private AccessibleList accListView ;
-    /**
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
-     */
-    @Deprecated @Override public AccessibleProvider impl_getAccessible() {
-        if( accListView == null)
-            accListView = new AccessibleList(this);
-        return (AccessibleProvider)accListView ;
-    }
-
     /** {@inheritDoc} */
     @Override protected Skin<?> createDefaultSkin() {
         return new ListViewSkin<T>(this);
@@ -1370,6 +1359,8 @@
         @Override protected void focus(int row) {
             if (listView.getFocusModel() == null) return;
             listView.getFocusModel().focus(row);
+
+            listView.accSendNotification(Attribute.SELECTED_ROWS);
         }
 
         /** {@inheritDoc} */
@@ -1502,4 +1493,20 @@
             }
         } 
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.LIST_VIEW;
+            case ROW_COUNT: return getItems().size();
+            case MULTIPLE_SELECTION: {
+                MultipleSelectionModel sm = getSelectionModel();
+                return sm != null && sm.getSelectionMode() == SelectionMode.MULTIPLE;
+            }
+            case ROW_AT_INDEX: //Skin
+            case SELECTED_ROWS: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Pagination.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Pagination.java	Tue Mar 18 12:50:23 2014 -0700
@@ -38,6 +38,8 @@
 import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.util.Callback;
 import com.sun.javafx.css.converters.SizeConverter;
 import com.sun.javafx.scene.control.skin.PaginationSkin;
@@ -249,6 +251,8 @@
                 } else if (getCurrentPageIndex() > getPageCount() - 1) {
                     setCurrentPageIndex(getPageCount() - 1);
                 }
+
+                accSendNotification(Attribute.SELECTED_PAGE);
             }
         }
     };
@@ -361,4 +365,14 @@
         return getClassCssMetaData();
     }
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.PAGINATION;
+            case PAGES: // Skin
+            case SELECTED_PAGE: // Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/PasswordField.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/PasswordField.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,6 +25,9 @@
 
 package javafx.scene.control;
 
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
+
 /**
  * Text field that masks entered characters.
  * @since JavaFX 2.0
@@ -57,4 +60,14 @@
     @Override public void copy() {
         // No-op
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.PASSWORD_FIELD;
+            case TITLE: return null;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ProgressBar.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ProgressBar.java	Tue Mar 18 12:50:23 2014 -0700
@@ -27,6 +27,8 @@
 
 import com.sun.javafx.scene.control.skin.ProgressBarSkin;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Attribute;
+import javafx.geometry.Orientation;
 
 /**
  * A specialization of the ProgressIndicator which is represented as a
@@ -118,5 +120,13 @@
     protected /*do not make final*/ Boolean impl_cssGetFocusTraversableInitialValue() {
         return Boolean.FALSE;
     }
-    
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ORIENTATION: return Orientation.HORIZONTAL;
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }    
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ProgressIndicator.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ProgressIndicator.java	Tue Mar 18 12:50:23 2014 -0700
@@ -32,6 +32,8 @@
 import javafx.beans.property.ReadOnlyBooleanProperty;
 import javafx.beans.property.ReadOnlyBooleanWrapper;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 
 /**
@@ -232,6 +234,18 @@
     protected /*do not make final*/ Boolean impl_cssGetFocusTraversableInitialValue() {
         return Boolean.FALSE;
     }
-    
+
+    /** @treatAsPrivate */
+    @Override 
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.PROGRESS_INDICATOR;
+            case VALUE: return getProgress();
+            case MAX_VALUE: return 1.0;
+            case MIN_VALUE: return 0.0;
+            case INDETERMINATE: return isIndeterminate();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 
 }
--- a/modules/controls/src/main/java/javafx/scene/control/RadioButton.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/RadioButton.java	Tue Mar 18 12:50:23 2014 -0700
@@ -26,10 +26,10 @@
 package javafx.scene.control;
 
 import javafx.geometry.Pos;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.scene.control.accessible.AccessibleRadioButton;
 import com.sun.javafx.scene.control.skin.RadioButtonSkin;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * <p>RadioButtons create a series of items where only one item can be
@@ -123,17 +123,6 @@
      **************************************************************************/
 
     private static final String DEFAULT_STYLE_CLASS = "radio-button";
-    
-    private AccessibleRadioButton accRadioButton ;
-    /**
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
-     */
-    @Deprecated @Override public AccessibleProvider impl_getAccessible() {
-        if( accRadioButton == null)
-            accRadioButton = new AccessibleRadioButton(this);
-        return (AccessibleProvider)accRadioButton ;
-    }
 
     /**
       * Labeled return CENTER_LEFT for alignment, but ToggleButton returns
@@ -146,4 +135,13 @@
         return Pos.CENTER_LEFT;
     }
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.RADIO_BUTTON;
+            case SELECTED: return isSelected();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ScrollBar.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ScrollBar.java	Tue Mar 18 12:50:23 2014 -0700
@@ -32,6 +32,9 @@
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.SimpleDoubleProperty;
 import javafx.geometry.Orientation;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 import com.sun.javafx.Utils;
 import javafx.css.CssMetaData;
@@ -470,5 +473,30 @@
     protected /*do not make final*/ Boolean impl_cssGetFocusTraversableInitialValue() {
         return Boolean.FALSE;
     }
-    
+
+    /** @treatAsPrivate */
+    @Override public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.SCROLL_BAR;
+            case VALUE: return getValue();
+            case MAX_VALUE: return getMax();
+            case MIN_VALUE: return getMin();
+            case ORIENTATION: return getOrientation();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override public void accExecuteAction(Action action, Object... parameters) {
+        switch (action) {
+            case INCREMENT: increment(); break;
+            case DECREMENT: decrement(); break;
+            case SET_VALUE: {
+                Double value = (Double) parameters[0];
+                if (value != null) setValue(value);
+                break;
+            }
+            default: super.accExecuteAction(action, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ScrollPane.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ScrollPane.java	Tue Mar 18 12:50:23 2014 -0700
@@ -42,6 +42,8 @@
 import javafx.geometry.BoundingBox;
 import javafx.geometry.Bounds;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import com.sun.javafx.css.converters.BooleanConverter;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.scene.control.skin.ScrollPaneSkin;
@@ -758,4 +760,16 @@
          */
         AS_NEEDED
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.SCROLL_PANE;
+            case CONTENTS: return getContent();
+            case VERTICAL_SCROLLBAR: //Skin
+            case HORIZONTAL_SCROLLBAR: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/SkinBase.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/SkinBase.java	Tue Mar 18 12:50:23 2014 -0700
@@ -36,6 +36,7 @@
 import javafx.geometry.Insets;
 import javafx.geometry.VPos;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.Region;
 
@@ -753,12 +754,16 @@
             ctl.pseudoClassStateChanged(pseudoClass, active);
         }
     }
-    
-    
+
+    /** @treatAsPrivate */
+    protected Object accGetAttribute(Attribute attribute, Object... parameters) {
+        return null;
+    }
+
     /***************************************************************************
      *                                                                         *
      * Testing-only API                                                        *
      *                                                                         *
-     **************************************************************************/      
-    
+     **************************************************************************/
+
 }
--- a/modules/controls/src/main/java/javafx/scene/control/Slider.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/Slider.java	Tue Mar 18 12:50:23 2014 -0700
@@ -36,8 +36,10 @@
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.SimpleObjectProperty;
-
 import javafx.geometry.Orientation;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.util.StringConverter;
 
 import com.sun.javafx.Utils;
@@ -51,8 +53,6 @@
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
 
-import com.sun.javafx.scene.control.accessible.AccessibleSlider;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 import com.sun.javafx.scene.control.skin.SliderSkin;
 import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
@@ -144,6 +144,7 @@
                         setMin(get());
                     }
                     adjustValues();
+                    accSendNotification(Attribute.MAX_VALUE);
                 }
 
                 @Override
@@ -180,6 +181,7 @@
                         setMax(get());
                     }
                     adjustValues();
+                    accSendNotification(Attribute.MIN_VALUE);
                 }
 
                 @Override
@@ -216,6 +218,7 @@
             value = new DoublePropertyBase(0) {
                 @Override protected void invalidated() {
                     adjustValues();
+                    accSendNotification(Attribute.VALUE);
                 }
 
                 @Override
@@ -802,15 +805,32 @@
     private static final PseudoClass HORIZONTAL_PSEUDOCLASS_STATE =
             PseudoClass.getPseudoClass("horizontal");
 
-    private AccessibleSlider accSlider ;
-    /**
-     * @treatAsPrivate implementation detail
-     * @deprecated This is an internal API that is not intended for use and will be removed in the next version
-     */
-    @Deprecated @Override public AccessibleProvider impl_getAccessible() {
-        if( accSlider == null)
-            accSlider = new AccessibleSlider(this);
-        return (AccessibleProvider)accSlider ;
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.SLIDER;
+            case VALUE: return getValue();
+            case MAX_VALUE: return getMax();
+            case MIN_VALUE: return getMin();
+            case ORIENTATION: return getOrientation();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        switch (action) {
+            case INCREMENT: increment(); break;
+            case DECREMENT: decrement(); break;
+            case SET_VALUE: {
+                Double value = (Double) parameters[0];
+                if (value != null) setValue(value);
+                break;
+            }
+            default: super.accExecuteAction(action, parameters);
+        }
     }
 
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TabPane.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TabPane.java	Tue Mar 18 12:50:23 2014 -0700
@@ -28,6 +28,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.ObjectProperty;
@@ -38,12 +39,15 @@
 import javafx.collections.ListChangeListener;
 import javafx.collections.ObservableList;
 import javafx.geometry.Side;
-
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.css.StyleableDoubleProperty;
 import javafx.css.CssMetaData;
 import javafx.css.PseudoClass;
+
 import com.sun.javafx.css.converters.SizeConverter;
 import com.sun.javafx.scene.control.skin.TabPaneSkin;
+
 import javafx.beans.DefaultProperty;
 import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
@@ -673,6 +677,9 @@
             if (getSelectedIndex() >= 0 && getSelectedIndex() < tabPane.getTabs().size()) {
                 tabPane.getTabs().get(getSelectedIndex()).setSelected(true);
             }
+
+            /* Does this get all the change events */
+            tabPane.accSendNotification(Attribute.SELECTED_TAB);
         }
 
         @Override public void select(Tab tab) {
@@ -737,4 +744,15 @@
          */
         UNAVAILABLE
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TAB_PANE;
+            case TABS: //Skin 
+            case SELECTED_TAB: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TableCell.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TableCell.java	Tue Mar 18 12:50:23 2014 -0700
@@ -32,6 +32,9 @@
 import javafx.beans.value.ObservableValue;
 import javafx.collections.ListChangeListener;
 import javafx.event.Event;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.TableView.TableViewFocusModel;
 
 import com.sun.javafx.scene.control.skin.TableCellSkin;
@@ -708,4 +711,39 @@
     private static final PseudoClass PSEUDO_CLASS_LAST_VISIBLE = 
             PseudoClass.getPseudoClass("last-visible");
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TABLE_CELL;
+            case TITLE: return getText();
+            case ROW_INDEX: return getIndex();
+            case COLUMN_INDEX: return columnIndex;
+            case SELECTED: return isInCellSelectionMode() ? isSelected() : getTableRow().isSelected();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        final TableView<S> tableView = getTableView();
+        final TableSelectionModel<S> sm = tableView == null ? null : tableView.getSelectionModel();
+
+        switch (action) {
+            case SELECT: {
+                if (sm != null) sm.clearAndSelect(getIndex(), getTableColumn());
+                break;
+            }
+            case ADD_TO_SELECTION: {
+                if (sm != null) sm.select(getIndex(), getTableColumn());
+                break;
+            }
+            case REMOVE_FROM_SELECTION: {
+                if (sm != null) sm.clearSelection(getIndex(), getTableColumn());
+                break;
+            }
+            default: super.accExecuteAction(action);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TableRow.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TableRow.java	Tue Mar 18 12:50:23 2014 -0700
@@ -29,6 +29,9 @@
 import javafx.beans.Observable;
 import javafx.beans.WeakInvalidationListener;
 import javafx.collections.ListChangeListener;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.TableView.TableViewFocusModel;
 
 import javafx.collections.WeakListChangeListener;
@@ -365,4 +368,40 @@
      **************************************************************************/
 
     private static final String DEFAULT_STYLE_CLASS = "table-row-cell";
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TABLE_ROW;
+            case INDEX: return getIndex();
+            case FOCUS_ITEM: //Skin
+            case SELECTED_CELLS: //Skin
+            case CELL_AT_ROWCOLUMN: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        final TableView<T> tableView = getTableView();
+        final MultipleSelectionModel<T> sm = tableView == null ? null : tableView.getSelectionModel();
+
+        switch (action) {
+            case SELECT: {
+                if (sm != null) sm.clearAndSelect(getIndex());
+                break;
+            }
+            case ADD_TO_SELECTION: {
+                if (sm != null) sm.select(getIndex());
+                break;
+            }
+            case REMOVE_FROM_SELECTION: {
+                if (sm != null) sm.clearSelection(getIndex());
+                break;
+            }
+            default: super.accExecuteAction(action);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TableView.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TableView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -61,6 +61,8 @@
 import javafx.event.EventHandler;
 import javafx.event.EventType;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.layout.Region;
 import javafx.util.Callback;
 
@@ -2615,6 +2617,9 @@
         private void updateSelectedIndex(int row) {
             setSelectedIndex(row);
             setSelectedItem(getModelItem(row));
+
+            /* Does this get all the change events ? */
+            getTableView().accSendNotification(Attribute.SELECTED_CELLS);
         }
         
         /** {@inheritDoc} */
@@ -2985,4 +2990,37 @@
         }
     }
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TABLE_VIEW;
+            case COLUMN_COUNT: return getVisibleLeafColumns().size();
+            case ROW_COUNT: return getItems().size();
+            case SELECTED_CELLS: {
+                // TableViewSkin returns TableRows back to TableView.
+                // TableRowSkin returns TableCells back to TableRow.
+                ObservableList<TableRow<S>> rows = (ObservableList<TableRow<S>>)super.accGetAttribute(attribute, parameters);
+                List<Node> selection = new ArrayList<>();
+                for (TableRow<S> row : rows) {
+                    ObservableList<Node> cells = (ObservableList<Node>)row.accGetAttribute(attribute, parameters);
+                    if (cells != null) selection.addAll(cells);
+                }
+                return FXCollections.observableArrayList(selection);
+            }
+            case FOCUS_ITEM:
+            case CELL_AT_ROWCOLUMN: {
+                TableRow<S> row = (TableRow<S>)super.accGetAttribute(attribute, parameters);
+                return row != null ? row.accGetAttribute(attribute, parameters) : null;
+            }
+            case MULTIPLE_SELECTION: {
+                MultipleSelectionModel sm = getSelectionModel();
+                return sm != null && sm.getSelectionMode() == SelectionMode.MULTIPLE;
+            }
+            case COLUMN_AT_INDEX: //Skin
+            case COLUMN_INDEX: //Skin
+            case HEADER: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TextArea.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TextArea.java	Tue Mar 18 12:50:23 2014 -0700
@@ -49,6 +49,9 @@
 import com.sun.javafx.css.converters.SizeConverter;
 import com.sun.javafx.scene.control.skin.TextAreaSkin;
 import javafx.css.Styleable;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * Text input component that allows a user to enter multiple lines of
@@ -687,4 +690,16 @@
     public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
         return getClassCssMetaData();
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute,
+                                     Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TEXT_AREA;
+            case SELECTION_START: return getSelection().getStart();
+            case SELECTION_END: return getSelection().getEnd();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TextField.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TextField.java	Tue Mar 18 12:50:23 2014 -0700
@@ -40,6 +40,9 @@
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.geometry.Pos;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import com.sun.javafx.binding.ExpressionHelper;
 import com.sun.javafx.css.converters.EnumConverter;
 import com.sun.javafx.css.converters.SizeConverter;
@@ -329,4 +332,16 @@
     public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData() {
         return getClassCssMetaData();
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute,
+                                     Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TEXT_FIELD;
+            case SELECTION_START: return getSelection().getStart();
+            case SELECTION_END: return getSelection().getEnd();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TextInputControl.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TextInputControl.java	Tue Mar 18 12:50:23 2014 -0700
@@ -51,6 +51,9 @@
 import javafx.css.Styleable;
 import javafx.css.StyleableObjectProperty;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.input.Clipboard;
 import javafx.scene.input.ClipboardContent;
 import javafx.scene.text.Font;
@@ -1058,6 +1061,7 @@
 
         private void invalidate() {
             markInvalid();
+            accSendNotification(Attribute.TITLE);
         }
 
         @Override public void bind(ObservableValue<? extends String> observable) {
@@ -1202,4 +1206,30 @@
         return getClassCssMetaData();
     }
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case TITLE: {
+                String text = getText();
+                if (text == null || text.isEmpty()) {
+                    text = getPromptText();
+                }
+                return text;
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override 
+    public void accExecuteAction(Action action, Object... parameters) {
+        switch (action) {
+            case SET_TITLE: {
+                String value = (String) parameters[0];
+                if (value != null) setText(value);
+            }
+            default: super.accExecuteAction(action, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TitledPane.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TitledPane.java	Tue Mar 18 12:50:23 2014 -0700
@@ -44,6 +44,9 @@
 import javafx.beans.DefaultProperty;
 import javafx.css.Styleable;
 import javafx.css.StyleableProperty;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * <p>A TitledPane is a panel with a title that can be opened and closed.</p>
@@ -341,4 +344,25 @@
         final Node c = getContent();
         return c == null ? super.getContentBias() : c.getContentBias();
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TITLED_PANE;
+            case TITLE: return getText();
+            case EXPANDED: return isExpanded();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        switch (action) {
+            case EXPAND: setExpanded(true); break;
+            case COLLAPSE: setExpanded(false); break;
+            default: super.accExecuteAction(action);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ToggleButton.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ToggleButton.java	Tue Mar 18 12:50:23 2014 -0700
@@ -32,6 +32,8 @@
 import javafx.event.ActionEvent;
 import javafx.geometry.Pos;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.css.PseudoClass;
 import com.sun.javafx.scene.control.skin.ToggleButtonSkin;
 import javafx.css.StyleableProperty;
@@ -156,6 +158,7 @@
                         }
                     }
                     pseudoClassStateChanged(PSEUDO_CLASS_SELECTED, get());
+                    accSendNotification(Attribute.TOGGLE_STATE);
                 }
 
                 @Override
@@ -257,5 +260,14 @@
     protected Pos impl_cssGetAlignmentInitialValue() {
         return Pos.CENTER;
     }
-        
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TOGGLE_BUTTON;
+            case TOGGLE_STATE: return isSelected() ? 1 : 0;
+            default: return super.accGetAttribute(attribute, parameters); 
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/ToolBar.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/ToolBar.java	Tue Mar 18 12:50:23 2014 -0700
@@ -35,7 +35,8 @@
 import javafx.collections.ObservableList;
 import javafx.geometry.Orientation;
 import javafx.scene.Node;
-
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.css.StyleableObjectProperty;
 import javafx.css.CssMetaData;
 import javafx.css.PseudoClass;
@@ -262,4 +263,13 @@
         return Boolean.FALSE;
     }
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TOOLBAR;
+            case OVERFLOW_BUTTON: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TreeCell.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeCell.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,6 +25,9 @@
 
 package javafx.scene.control;
 
+import com.sun.javafx.scene.control.skin.VirtualContainerBase;
+import com.sun.javafx.scene.control.skin.VirtualFlow;
+import javafx.collections.FXCollections;
 import javafx.css.PseudoClass;
 import javafx.beans.InvalidationListener;
 import javafx.beans.Observable;
@@ -36,12 +39,19 @@
 import com.sun.javafx.scene.control.skin.TreeCellSkin;
 import javafx.collections.WeakListChangeListener;
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.ReadOnlyObjectProperty;
 import javafx.beans.property.ReadOnlyObjectWrapper;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.beans.value.WeakChangeListener;
+import javafx.scene.Parent;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 
 /**
  * The {@link Cell} type used with the {@link TreeView} control. In addition to 
@@ -157,11 +167,16 @@
     };
     
     /* proxy pseudo-class state change from treeItem's expandedProperty */
+    private boolean oldIsExpanded;
     private final InvalidationListener treeItemExpandedInvalidationListener = new InvalidationListener() {
         @Override public void invalidated(Observable o) {
             boolean isExpanded = ((BooleanProperty)o).get();
             pseudoClassStateChanged(EXPANDED_PSEUDOCLASS_STATE,   isExpanded);
             pseudoClassStateChanged(COLLAPSED_PSEUDOCLASS_STATE, !isExpanded);
+            if (isExpanded != oldIsExpanded) {
+                accSendNotification(Attribute.EXPANDED);
+            }
+            oldIsExpanded = isExpanded;
         }
     };
 
@@ -204,6 +219,7 @@
                 oldValue = get(); 
                 
                 if (oldValue != null) {
+                    oldIsExpanded = oldValue.isExpanded();
                     oldValue.expandedProperty().addListener(weakTreeItemExpandedInvalidationListener);
                     // fake an invalidation to ensure updated pseudo-class state
                     weakTreeItemExpandedInvalidationListener.invalidated(oldValue.expandedProperty());            
@@ -624,4 +640,112 @@
     private static final PseudoClass EXPANDED_PSEUDOCLASS_STATE = PseudoClass.getPseudoClass("expanded");
     private static final PseudoClass COLLAPSED_PSEUDOCLASS_STATE = PseudoClass.getPseudoClass("collapsed");
 
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        TreeItem<T> treeItem = getTreeItem();
+        TreeView<T> treeView = getTreeView();
+
+        switch (attribute) {
+            case ROLE: return Role.TREE_ITEM;
+            case TREE_ITEM_PARENT: {
+                if (treeItem == null) {
+                    return null;
+                }
+                TreeItem parent = treeItem.getParent();
+                return parent == null ? treeView : getTreeCell(getVirtualFlow(), parent);
+            }
+            case TREE_ITEM_COUNT: {
+                // response is relative to this tree cell
+                return treeItem == null  ? 0 : treeItem.getChildren().size();
+            }
+            case TREE_ITEM_AT_INDEX: {
+                // index is relative to this tree cell
+                final int offset = (Integer)parameters[0];
+                final int p = offset + getIndex();
+                return treeItem == null                  ? null :
+                       p > treeItem.getChildren().size() ? null :
+                       getVirtualFlow().getCell(p);
+            }
+            case PREVIOUS_SIBLING: {
+                return treeItem == null ? null : getTreeCell(getVirtualFlow(), treeItem.previousSibling());
+            }
+            case NEXT_SIBLING: {
+                return treeItem == null ? null : getTreeCell(getVirtualFlow(), treeItem.nextSibling());
+            }
+            case TITLE: {
+                Object value = treeItem == null ? null : treeItem.getValue();
+                return value == null ? "" : value.toString();
+            }
+            case LEAF: return treeItem == null ? true : treeItem.isLeaf();
+            case EXPANDED: return treeItem == null ? false : treeItem.isExpanded();
+            case INDEX: return getIndex();
+            case SELECTED: return isSelected();
+            case DISCLOSURE_LEVEL: {
+                // FIXME replace with treeView.getTreeItemLevel(treeItem) when we sync up with 8u20
+                return treeView == null ? 0 : TreeView.getNodeLevel(treeItem);
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        final TreeView<T> treeView = getTreeView();
+        final TreeItem<T> treeItem = getTreeItem();
+        final MultipleSelectionModel<TreeItem<T>> sm = treeView == null ? null : treeView.getSelectionModel();
+
+        switch (action) {
+            case EXPAND: {
+                if (treeItem != null) treeItem.setExpanded(true);
+                break;
+            }
+            case COLLAPSE: {
+                if (treeItem != null) treeItem.setExpanded(false);
+                break;
+            }
+            case SELECT: {
+                if (sm != null) sm.clearAndSelect(getIndex());
+                break;
+            }
+            case ADD_TO_SELECTION: {
+                if (sm != null) sm.select(getIndex());
+                break;
+            }
+            case REMOVE_FROM_SELECTION: {
+                if (sm != null) sm.clearSelection(getIndex());
+                break;
+            }
+            default: super.accExecuteAction(action);
+        }
+    }
+
+    private VirtualFlow getVirtualFlow() {
+        // FIXME Ugly hack! Clean this up once everything is understood
+        Parent p = getParent();
+        while (p != null && ! (p instanceof VirtualFlow)) {
+            p = p.getParent();
+        }
+
+        if (p == null) {
+            return null;
+        }
+
+        return (VirtualFlow) p;
+    }
+
+    private TreeCell<T> getTreeCell(VirtualFlow<TreeCell<T>> flow, TreeItem treeItem) {
+        // FIXME Ugly hack! Clean this up once everything is understood
+        if (treeItem == null) return null;
+
+        final int treeItemIndex = getTreeView().getRow(treeItem);
+        TreeCell<T> cell = null;
+
+        if (flow != null) {
+            cell = flow.getVisibleCell(treeItemIndex);
+        }
+
+        return cell;
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TreeTableCell.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeTableCell.java	Tue Mar 18 12:50:23 2014 -0700
@@ -39,6 +39,9 @@
 import javafx.beans.property.ReadOnlyObjectProperty;
 import javafx.beans.property.ReadOnlyObjectWrapper;
 
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.TreeTableColumn.CellEditEvent;
 
 
@@ -714,4 +717,40 @@
     @Override protected Skin<?> createDefaultSkin() {
         return new TreeTableCellSkin<S,T>(this);
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TREE_TABLE_CELL;
+            case TITLE: return getText();
+            case ROW_INDEX: return getIndex();
+            case COLUMN_INDEX: return columnIndex;
+            case SELECTED: return isInCellSelectionMode() ? isSelected() : getTreeTableRow().isSelected();
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        final TreeTableView<S> treeTableView = getTreeTableView();
+        final TreeTableView.TreeTableViewSelectionModel<S> sm = treeTableView == null ? null : treeTableView.getSelectionModel();
+
+        switch (action) {
+            case SELECT: {
+                if (sm != null) sm.clearAndSelect(getIndex(), getTableColumn());
+                break;
+            }
+            case ADD_TO_SELECTION: {
+                if (sm != null) sm.select(getIndex(), getTableColumn());
+                break;
+            }
+            case REMOVE_FROM_SELECTION: {
+                if (sm != null) sm.clearSelection(getIndex(), getTableColumn());
+                break;
+            }
+            default: super.accExecuteAction(action);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TreeTableRow.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeTableRow.java	Tue Mar 18 12:50:23 2014 -0700
@@ -25,9 +25,15 @@
 
 package javafx.scene.control;
 
+import com.sun.javafx.scene.control.skin.VirtualContainerBase;
+import com.sun.javafx.scene.control.skin.VirtualFlow;
+import javafx.collections.FXCollections;
 import javafx.css.PseudoClass;
 import com.sun.javafx.scene.control.skin.TreeTableRowSkin;
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
 import javafx.beans.InvalidationListener;
 import javafx.beans.Observable;
 import javafx.beans.WeakInvalidationListener;
@@ -39,6 +45,10 @@
 import javafx.collections.ListChangeListener;
 import javafx.collections.WeakListChangeListener;
 import javafx.scene.Node;
+import javafx.scene.Parent;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.TreeTableView.TreeTableViewFocusModel;
 import javafx.scene.control.TreeTableView.TreeTableViewSelectionModel;
 
@@ -516,4 +526,126 @@
     @Override protected Skin<?> createDefaultSkin() {
         return new TreeTableRowSkin<T>(this);
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        TreeItem<T> treeItem = getTreeItem();
+        TreeTableView<T> treeTableView = getTreeTableView();
+
+        switch (attribute) {
+            case ROLE: return Role.TREE_TABLE_ITEM;
+            case TREE_ITEM_PARENT: {
+                if (treeItem == null) return null;
+                TreeItem parent = treeItem.getParent();
+                return parent == null ? treeTableView : getTreeTableRow(getVirtualFlow(), parent);
+            }
+            case TREE_ITEM_COUNT: {
+                // response is relative to this tree cell
+                return treeItem == null        ? 0 :
+                       treeItem.isLeaf()       ? 0 :
+                       ! treeItem.isExpanded() ? 0 :
+                       treeItem.getChildren().size();
+            }
+            case TREE_ITEM_AT_INDEX: {
+                // index is relative to this tree cell
+                final int offset = (Integer)parameters[0];
+                final int p = offset + getIndex();
+                return treeItem == null                  ? null :
+                       p > treeItem.getChildren().size() ? null :
+                       getVirtualFlow().getCell(p);
+            }
+            case PREVIOUS_SIBLING: {
+                return treeItem == null ? null : getTreeTableRow(getVirtualFlow(), treeItem.previousSibling());
+            }
+            case NEXT_SIBLING: {
+                return treeItem == null ? null : getTreeTableRow(getVirtualFlow(), treeItem.nextSibling());
+            }
+            case TITLE: {
+                Object value = treeItem == null ? null : treeItem.getValue();
+                return value == null ? "" : value.toString();
+            }
+            case LEAF: return treeItem == null ? true : treeItem.isLeaf();
+            case EXPANDED: return treeItem == null ? false : treeItem.isExpanded();
+            case INDEX: return getIndex();
+            case SELECTED: return isSelected();
+            case DISCLOSURE_LEVEL: {
+                // FIXME replace with treeTableView.getTreeItemLevel(treeItem) when we sync up with 8u20
+                return treeTableView == null ? 0 : TreeTableView.getNodeLevel(treeItem);
+            }
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public void accExecuteAction(Action action, Object... parameters) {
+        final TreeTableView<T> treeTableView = getTreeTableView();
+        final TreeTableView.TreeTableViewSelectionModel<T> sm = treeTableView == null ? null : treeTableView.getSelectionModel();
+
+        switch (action) {
+            case SELECT: {
+                if (sm != null) sm.clearAndSelect(getIndex());
+                break;
+            }
+            case ADD_TO_SELECTION: {
+                if (sm != null) sm.select(getIndex());
+                break;
+            }
+            case REMOVE_FROM_SELECTION: {
+                if (sm != null) sm.clearSelection(getIndex());
+                break;
+            }
+            default: super.accExecuteAction(action);
+        }
+    }
+
+    // returns the TreeTableRow instances used to represent the children of the
+    // given TreeItem
+    private List<Node> getTreeItemChildren(TreeItem<T> treeItem) {
+        List<Node> children = new ArrayList<>();
+        final VirtualFlow<TreeTableRow<T>> flow = getVirtualFlow();
+        for (TreeItem childItem : treeItem.getChildren()) {
+            TreeTableRow<T> row = getTreeTableRow(flow, childItem);
+
+            // We should never, ever get row == null. If we do then
+            // something is very wrong.
+            assert row != null;
+
+            // VirtualFlow should never return duplicates for different
+            // indices, but I did see this happening. I don't want to
+            // slow down normal use cases, but during development this
+            // should be tested for.
+            assert ! children.contains(row);
+
+            if (row != null) children.add(row);
+        }
+        return children;
+    }
+
+    private VirtualFlow getVirtualFlow() {
+        // FIXME Ugly hack! Clean this up once everything is understood
+        Parent p = getParent();
+        while (p != null && ! (p instanceof VirtualFlow)) {
+            p = p.getParent();
+        }
+
+        if (p == null) {
+            return null;
+        }
+
+        return (VirtualFlow) p;
+    }
+
+    private TreeTableRow<T> getTreeTableRow(VirtualFlow<TreeTableRow<T>> flow, TreeItem treeItem) {
+        // FIXME Ugly hack! Clean this up once everything is understood
+        final int treeItemIndex = getTreeTableView().getRow(treeItem);
+        TreeTableRow<T> cell = null;
+
+        if (flow != null) {
+            cell = flow.getVisibleCell(treeItemIndex);
+        }
+
+        return cell;
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TreeTableView.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeTableView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -76,6 +76,8 @@
 import javafx.event.EventHandler;
 import javafx.event.EventType;
 import javafx.scene.Node;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.layout.GridPane;
 import javafx.scene.layout.Region;
 import javafx.util.Callback;
@@ -3272,4 +3274,49 @@
             return treeTableView.getVisibleLeafColumn(newColumnIndex);
         }
     }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TREE_TABLE_VIEW;
+
+            case TREE_ITEM_COUNT:
+            case ROW_COUNT: return getExpandedItemCount();
+
+            // --- TableView-specific attributes
+            case COLUMN_COUNT: return getVisibleLeafColumns().size();
+            /*
+             * TreeTableViewSkin returns TreeTableRows back to TreeTableView.
+             * TreeTableRowSkin returns TreeTableCells back to TreeTableRow.
+             */
+            case SELECTED_CELLS: {
+                ObservableList<TreeTableRow<S>> rows = (ObservableList<TreeTableRow<S>>)super.accGetAttribute(attribute, parameters);
+                List<Node> selection = new ArrayList<>();
+                for (TreeTableRow<S> row : rows) {
+                    ObservableList<Node> cells = (ObservableList<Node>)row.accGetAttribute(attribute, parameters);
+                    if (cells != null) selection.addAll(cells);
+                }
+                return FXCollections.observableArrayList(selection);
+            }
+            case FOCUS_ITEM:
+            case CELL_AT_ROWCOLUMN: {
+                TreeTableRow<S> row = (TreeTableRow<S>)super.accGetAttribute(attribute, parameters);
+                return row != null ? row.accGetAttribute(attribute, parameters) : null;
+            }
+            case MULTIPLE_SELECTION: {
+                MultipleSelectionModel sm = getSelectionModel();
+                return sm != null && sm.getSelectionMode() == SelectionMode.MULTIPLE;
+            }
+            case COLUMN_INDEX: //Skin
+            case HEADER: //Skin
+
+            // --- TreeView-specific attributes
+            case ROW_AT_INDEX: //Skin
+            case SELECTED_ROWS: //Skin
+            case TREE_ITEM_AT_INDEX: //Skin
+
+            default: return super.accGetAttribute(attribute, parameters);
+        }
+    }
 }
--- a/modules/controls/src/main/java/javafx/scene/control/TreeView.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeView.java	Tue Mar 18 12:50:23 2014 -0700
@@ -35,6 +35,7 @@
 import javafx.beans.property.SimpleObjectProperty;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
 import javafx.css.CssMetaData;
 import javafx.css.Styleable;
 import javafx.css.StyleableDoubleProperty;
@@ -42,6 +43,8 @@
 import javafx.event.Event;
 import javafx.event.EventHandler;
 import javafx.event.EventType;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
 import javafx.scene.control.TreeItem.TreeModificationEvent;
 import javafx.scene.layout.Region;
 import javafx.util.Callback;
@@ -1386,6 +1389,9 @@
             if (treeView.getFocusModel() != null) {
                 treeView.getFocusModel().focus(itemIndex);
             }
+
+            // FIXME this is not the correct location for fire selection events (and does not take into account multiple selection)
+            treeView.accSendNotification(Attribute.SELECTED_ROWS);
         }
 
         /** {@inheritDoc} */
@@ -1525,7 +1531,21 @@
             
             super.focus(index);
         }
-        
-        
+    }
+
+    /** @treatAsPrivate */
+    @Override
+    public Object accGetAttribute(Attribute attribute, Object... parameters) {
+        switch (attribute) {
+            case ROLE: return Role.TREE_VIEW;
+            case MULTIPLE_SELECTION: {
+                MultipleSelectionModel sm = getSelectionModel();
+                return sm != null && sm.getSelectionMode() == SelectionMode.MULTIPLE;
+            }
+            case ROW_COUNT: return getExpandedItemCount();
+            case ROW_AT_INDEX: //Skin
+            case SELECTED_ROWS: //Skin
+            default: return super.accGetAttribute(attribute, parameters);
+        }
     }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TableViewTest.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/controls/src/test/java/javafx/scene/control/TableViewTest.java	Tue Mar 18 12:50:23 2014 -0700
@@ -2691,6 +2691,37 @@
         assertEquals("C", fxList.get(1));
     }
 
+    @Test public void test_getColumnHeaderForColumn() {
+        TableView<Person> table = new TableView<>();
+        table.setItems(FXCollections.observableArrayList(
+                new Person("John", "Smith", "jacob.smith@example.com")
+        ));
+
+        TableColumn<Person,String> first = new TableColumn<Person,String>("first");
+        first.setCellValueFactory(new PropertyValueFactory("firstName"));
+        TableColumn<Person,String> last = new TableColumn<Person,String>("last");
+        first.setCellValueFactory(new PropertyValueFactory("lastName"));
+
+        TableColumn name = new TableColumn("Name");
+        name.getColumns().addAll(first, last);
+
+        table.getColumns().setAll(name);
+
+        new StageLoader(table);
+
+        TableHeaderRow headerRow = VirtualFlowTestUtils.getTableHeaderRow(table);
+
+        TableColumnHeader nameHeader = headerRow.getColumnHeaderFor(name);
+        TableColumnHeader firstHeader = headerRow.getColumnHeaderFor(first);
+        TableColumnHeader lastHeader = headerRow.getColumnHeaderFor(last);
+        assertNotNull(nameHeader);
+        assertEquals(name, nameHeader.getTableColumn());
+        assertNotNull(firstHeader);
+        assertEquals(first, firstHeader.getTableColumn());
+        assertNotNull(lastHeader);
+        assertEquals(last, lastHeader.getTableColumn());
+    }
+
     @Test public void test_rt36220() {
         ObservableList<AtomicLong> tableItems = FXCollections.observableArrayList();
         tableItems.add(new AtomicLong(0L));
--- a/modules/graphics/src/main/java/com/sun/glass/events/WindowEvent.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/events/WindowEvent.java	Tue Mar 18 12:50:23 2014 -0700
@@ -45,8 +45,6 @@
     final static public int FOCUS_DISABLED        = 545;
     final static public int FOCUS_UNGRAB          = 546;
     
-    final static public int INIT_ACCESSIBILITY    = 551;
-
     public static String getEventName(final int eventType) {
         switch(eventType) {
             case WindowEvent.RESIZE:
@@ -75,8 +73,6 @@
                 return "FOCUS_DISABLED";   
             case WindowEvent.FOCUS_UNGRAB:
                 return "FOCUS_UNGRAB";   
-            case WindowEvent.INIT_ACCESSIBILITY:
-                return "INIT_ACCESSIBILITY";
             default:
                 return "UNKNOWN";
         }
--- a/modules/graphics/src/main/java/com/sun/glass/ui/Application.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/Application.java	Tue Mar 18 12:50:23 2014 -0700
@@ -39,6 +39,8 @@
 import java.util.Map;
 import java.util.LinkedList;
 
+import javafx.scene.accessibility.Accessible;
+
 public abstract class Application {
 
     private final static String DEFAULT_NAME = "java";
@@ -655,6 +657,8 @@
         return new EventLoop();
     }
 
+    public PlatformAccessible createAccessible(Accessible accessible) { return null; }
+
     protected abstract FileChooserResult staticCommonDialogs_showFileChooser(Window owner, String folder, String filename, String title, int type,
                                                      boolean multipleMode, ExtensionFilter[] extensionFilters, int defaultFilterIndex);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/PlatformAccessible.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.glass.ui;
+
+import static javafx.scene.accessibility.Attribute.ROLE;
+import javafx.scene.accessibility.Accessible;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
+
+public abstract class PlatformAccessible {
+
+    private Accessible accessible;
+    private View view;
+
+    protected PlatformAccessible(Accessible accessible) {
+        this.accessible = accessible;
+    }
+
+    public void setView(View view) {
+        this.view = view;
+    }
+
+    public View getView() {
+        return view;
+    }
+
+    public void dispose() {
+        if (accessible != null) accessible = null;
+        view = null;
+    }
+
+    protected boolean isDisposed() {
+        return accessible == null;
+    }
+
+    public String toString() {
+         return getClass().getSimpleName() + " (" + accessible + ")";
+    }
+
+    protected boolean isIgnored() {
+        Role role = (Role)getAttribute(ROLE);
+        if (role == null) return true;
+        return role == Role.NODE || role == Role.PARENT;
+    }
+
+    protected Object getAttribute(Attribute attribute, Object... parameters) {
+        Object result = accessible.getAttribute(attribute, parameters);
+        if (result != null) {
+            Class<?> clazz = attribute.getReturnType();
+            if (clazz != null) {
+                try {
+                    clazz.cast(result);
+                } catch (Exception e) {
+                    String msg = "The expected return type for the " + attribute +
+                                 " attribute is " + clazz.getSimpleName() +
+                                 " but found " + result.getClass().getSimpleName();
+//                    throw new IllegalArgumentException(msg);
+                    System.err.println(msg);
+                    return null; //Fail no exception
+                }
+            }
+        }
+        return result;
+    }
+
+    protected void executeAction(Action action, Object... parameters) {
+        accessible.executeAction(action, parameters);
+    }
+
+    public abstract void sendNotification(Attribute notification);
+
+    protected abstract long getNativeAccessible(); 
+}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/PlatformFactory.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/PlatformFactory.java	Tue Mar 18 12:50:23 2014 -0700
@@ -26,13 +26,10 @@
 
 import java.util.Locale;
 
-import com.sun.glass.ui.accessible.AccessibleBaseProvider;
-import com.sun.glass.ui.accessible.AccessibleRoot;
 import com.sun.glass.ui.delegate.ClipboardDelegate;
 import com.sun.glass.ui.delegate.MenuBarDelegate;
 import com.sun.glass.ui.delegate.MenuDelegate;
 import com.sun.glass.ui.delegate.MenuItemDelegate;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 
 public abstract class PlatformFactory {
     private static PlatformFactory instance;
@@ -53,8 +50,6 @@
     }
 
     public abstract Application createApplication();
-    public abstract AccessibleRoot createAccessibleRoot(Object node, Window window);
-    public abstract AccessibleBaseProvider createAccessibleProvider(Object node);
     public abstract MenuBarDelegate createMenuBarDelegate(MenuBar menubar);
     public abstract MenuDelegate createMenuDelegate(Menu menu);
     public abstract MenuItemDelegate createMenuItemDelegate(MenuItem menuItem);
--- a/modules/graphics/src/main/java/com/sun/glass/ui/View.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/View.java	Tue Mar 18 12:50:23 2014 -0700
@@ -28,13 +28,38 @@
 import com.sun.glass.events.ViewEvent;
 
 import java.lang.ref.WeakReference;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Map;
+import javafx.scene.accessibility.Accessible;
 
 public abstract class View {
 
     public final static int GESTURE_NO_VALUE = Integer.MAX_VALUE;
     public final static double GESTURE_NO_DOUBLE_VALUE = Double.NaN;
 
+    final static boolean accessible = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+        public Boolean run() {
+            boolean force = Boolean.getBoolean("javafx.accessible.force");
+            if (force) return true;
+
+            /* Only enable accessibility for Mac 10.9 and Windows 8 or greater.
+             * All other platforms must use the force flag. 
+             */
+            try {
+                String platform = Platform.determinePlatform();
+                String version = System.getProperty("os.version").replaceFirst("(\\d+\\.\\d+).*", "$1");
+                float v = Float.parseFloat(version);
+                boolean allowedPlatform = (platform.equals(Platform.MAC) && v >= 10.9f) ||
+                                          (platform.equals(Platform.WINDOWS) && v >= 6.2f);
+    
+                return allowedPlatform ? Boolean.getBoolean("javafx.accessible") : false;
+            } catch (Exception e) {
+                return false;
+            }
+        }
+    });
+
     public static class EventHandler {
         public void handleViewEvent(View view, long time, int type) {
         }
@@ -336,6 +361,10 @@
                                             int dir, int x, int y, int xAbs,
                                             int yAbs) {
         }
+
+        public Accessible getSceneAccessible() {
+            return null;
+        }
     }
 
     public static long getMultiClickTime() {
@@ -1058,4 +1087,25 @@
                                 isDirect, isInertia, touchCount, dir, originx,
                                 originy, originxAbs, originyAbs);
     }
+
+    /**
+     * Returns the accessible object for the view.
+     * This method is called by JNI code when the
+     * platform requested the accessible peer for the view.
+     * On Windows it happens on WM_GETOBJECT.
+     * On Mac it happens on NSView#accessibilityAttributeNames.
+     */
+    long getAccessible() {
+        Application.checkEventThread();
+        checkNotClosed();
+        if (accessible) {
+            Accessible acc = eventHandler.getSceneAccessible();
+            if (acc != null) {
+                PlatformAccessible pAcc = acc.impl_getDelegate();
+                pAcc.setView(this);
+                return pAcc.getNativeAccessible();
+            }
+        }
+        return 0L;
+    }
 }
--- a/modules/graphics/src/main/java/com/sun/glass/ui/Window.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/Window.java	Tue Mar 18 12:50:23 2014 -0700
@@ -26,7 +26,6 @@
 
 import com.sun.glass.events.MouseEvent;
 import com.sun.glass.events.WindowEvent;
-import com.sun.glass.ui.accessible.AccessibleRoot;
 
 import java.util.Collections;
 import java.util.LinkedList;
@@ -1232,10 +1231,6 @@
         this.delegatePtr = ptr;
     }
 
-    protected void notifyInitAccessibility() {
-        handleWindowEvent(System.nanoTime(), WindowEvent.INIT_ACCESSIBILITY);
-    }
-    
     // *****************************************************
     // window event handlers
     // *****************************************************
@@ -1245,17 +1240,6 @@
         }
     }
 
-    /*
-     * Notify the native code that the accessibilty tree has been built and is
-     * ready for use.
-     * 
-     * @param accRoot   the Java side accessible root object.
-     */
-    public void setAccessibilityInitIsComplete(AccessibleRoot accRoot) {
-        Application.checkEventThread();
-        accRoot.setAccessibilityInitIsComplete();
-    }
-
     // *****************************************************
     // programmatical move/resize
     // *****************************************************
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleBasePatternProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible;
-
-public abstract class AccessibleBasePatternProvider {
-    protected Object node;  // the JavaFX node
-    
-    /**
-     * Constructor for AccessibleBasePatternProvider
-     * 
-     * @param node          The FX accessible node.
-     */
-    public AccessibleBasePatternProvider(Object node) {
-        this.node = node;
-    }
-
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     */
-    abstract public void destroyAccessible();
-    
-    public int getPatternId() {
-        return 0;  // Only needed for Win implementation
-    }
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleBaseProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,176 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible;
-
-import com.sun.glass.ui.PlatformFactory;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.utils.Rect;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * The Accessible for a Glass accessible object.
- * <p>
- * Accessibles are created via a call to the static createProvider method.  Once
- * the platform (Windows, Linux, OS X) is determined a platform specific Accessible
- * is returned.
- * <p>
- * This class is subclassed by platform specific specializations, e.g.
- * WinAccessibleBaseProvider, MacAccessibleBaseProvider.  During construction each
- * subclass downcalls to native code to create a native accessible.
- */
-
-public abstract class AccessibleBaseProvider {
-    
-    protected List<AccessibleBasePatternProvider> patternProviders;
-    
-    protected Object node;  // the JavaFX node
-
-    /**
-     * Static method to create a Glass accessible
-     * 
-     * Determines which platform and then calls the platform specific factory to
-     * construct and return a platform specific accessible.
-     * 
-     * @param node  the related FX node object.
-     *
-     * @return a newly created platform specific AccessibleBaseProvider.
-     */
-    public static AccessibleBaseProvider createProvider(Object node) {
-        AccessibleLogger.getLogger().fine("node: " + node);            
-        return PlatformFactory.getPlatformFactory().createAccessibleProvider(node);
-    }
-    
-    /**
-     * Constructor
-     * 
-     * @param node  the related FX node object.
-     */
-    public AccessibleBaseProvider(Object node) {
-        this.node = node;
-        patternProviders = new ArrayList<AccessibleBasePatternProvider>();
-    }
-    
-    /**
-     * Get the FX accessible node.
-     * 
-     * @return the FX accessible node.
-     */
-    public Object getNode() {
-        return node;
-    }
-    
-    /**
-     * Add a pattern provider to the base provider.
-     * 
-     * @param pattern the pattern provider to add
-     */
-    public void addPatternProviders(AccessibleBasePatternProvider pattern) {
-        patternProviders.add(pattern);
-    } 
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     */
-    abstract public void destroyAccessible();
-    
-    /**
-     * Fire an event
-     * 
-     * @param eventID   identifies the event.
-     */
-    abstract public void fireEvent(int eventID);
-
-    /** Fire a property change event
-     * 
-     * @param propertyId    identifies the property
-     * @param oldProperty   the old value of the property
-     * @param newProperty   the new value of the property
-     */
-    abstract public void firePropertyChange(int propertyId, int oldProperty, int newProperty);
-
-    /** Fire a property change event
-     * 
-     * @param propertyId    identifies the property
-     * @param oldProperty   the old value of the property
-     * @param newProperty   the new value of the property
-     */
-    abstract public void firePropertyChange( int propertyId,
-                                             boolean oldProperty, boolean newProperty );
-    
-    // Upcalls
-    
-    /**
-     * Gets the value of a property.
-     * 
-     * @param propertyId    identifies the requested property.
-     * 
-     * @return the value of the property.
-     */
-    protected Object getPropertyValue(int propertyId) {
-        AccessibleLogger.getLogger().fine("propertyID: " + propertyId);
-        Object value;
-        if (node instanceof AccessibleProvider) {
-            value = ((AccessibleProvider)node).getPropertyValue(propertyId);
-        } else {
-            // TODO: Should we do something else like throw an acception?
-            value = null;
-        }
-        AccessibleLogger.getLogger().fine("returning: " + value);
-        return value;
-    }
-
-    /**
-     * Get the bounding rectangle of this element.
-     *
-     * @return the bounding rectangle (x, y, w, h), in screen coordinates, 
-     * with respect to upper left corner.
-     */
-    private Rect boundingRectangle() {
-        Rect rect;
-        if (node instanceof AccessibleProvider) {
-            rect = ((AccessibleProvider)node).boundingRectangle();
-            AccessibleLogger.getLogger().fine("returning: " +
-                "MinX=" + rect.getMinX() + "MinY=" + rect.getMinY() + 
-                "MaxX=" + rect.getMaxX() + "MaxY=" + rect.getMaxY());
-        } else {
-            // TODO: Should we do something else like throw an acception?
-            rect = null;
-        }
-        return rect;
-    }    
-
-    /**
-     * Set focus to this object.
-     */
-    private void setFocus() {
-        if (node instanceof AccessibleProvider) {
-            ((AccessibleProvider)node).setFocus();
-        }
-    }
-
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleLogger.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Locale;
-
-import sun.util.logging.PlatformLogger;
-import sun.util.logging.PlatformLogger.Level;
-
-public class AccessibleLogger {
-
-    private static final PlatformLogger logger = initLogger();
-
-    private static PlatformLogger initLogger() {
-        PlatformLogger logger = PlatformLogger.getLogger("accessible");
-        String levelString = AccessController.doPrivileged(
-        new PrivilegedAction<String>() {
-            public String run() {
-                return System.getProperty("log.accessible", "SEVERE").toUpperCase(Locale.ROOT);
-            }
-        });
-        try {
-            logger.setLevel(Level.valueOf(levelString));
-        } catch (Exception e) {
-            logger.setLevel(Level.SEVERE);
-        }
-        return logger;
-    }
-
-    public static PlatformLogger getLogger() {
-        return logger;
-    }
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/AccessibleRoot.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,213 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible;
-
-import com.sun.glass.ui.PlatformFactory;
-import com.sun.glass.ui.Window;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.utils.NavigateDirection;
-import com.sun.javafx.accessible.utils.Rect;
-
-/**
- * The Accessible for a top level Glass object.
- * <p>
- * Accessibles are created via a call to the static createAccessible method.  Once
- * the platform (Windows, Linux, OS X) is determined a platform specific Accessible
- * is returned.
- * <p>
- * This class is subclassed by platform specific specializations, e.g. WinAccessibleRoot,
- * GtkAccessibleRoot, and MacAccessibleRoot.  During construction each subclass
- * downcalls to native code to create a native accessible.
- */
-
-public abstract class AccessibleRoot {
-    
-    protected Object node;  // This is the FX node that will be accessed.
-
-    /**
-     * Static method to create a Glass root accessible
-     * 
-     * Determines which platform and then calls the platform specific factory to
-     * construct and return a platform specific accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param window    the top level Window object.
-     * 
-     * @return a newly created platform specific Glass root accessible.
-     */
-    public static AccessibleRoot createAccessible(Object node, Window window) {
-        return PlatformFactory.getPlatformFactory().createAccessibleRoot(node, window);
-    }
-    
-    /**
-     * Construct the Java and native sides of the Glass accessible.
-     * 
-     * @param node  the related FX node object.
-     */
-    public AccessibleRoot(Object node) {
-        this.node = node;
-    }   
-    
-   /**
-    * Signal that initialization is complete.
-    */
-    public abstract void setAccessibilityInitIsComplete();
-
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     */
-    abstract public void destroyAccessible();
-
-    /**
-     * Fire an event
-     * 
-     * @param eventID   identifies the event.
-     */
-    abstract public void fireEvent(int eventID);
-    
-    // Upcalls
-    
-    /**
-     * Get a base provider for the control.
-     * 
-     * @return null for now.
-     *
-     * TODO: This may not be needed; using UiaHostProviderFromHwnd in the native
-     * code might be enough.  We'll have to experiment.
-     */
-    private AccessibleProvider hostRawElementProvider() {
-        return null;
-    }
-
-    /**
-     * Gets an object providing support for a control pattern.
-     * 
-     * @param patternId identifies the requested pattern.
-     * 
-     * @return the object implementing the pattern or null.
-     */
-    private Object getPatternProvider(int patternId) {
-        return null;  //TODO: Determine if this is needed
-    }
-    
-    /**
-     * Gets the value of a property.
-     * 
-     * @param propertyId    identifies the requested property.
-     * 
-     * @return the value of the property.
-     */
-    protected Object getPropertyValue(int propertyId) {
-        AccessibleLogger.getLogger().fine("propertyID : " + propertyId);
-        Object value;
-        if (node instanceof AccessibleProvider) {
-            value = ((AccessibleProvider)node).getPropertyValue(propertyId);
-        } else {
-            // TODO: Should we do something else like throw an acception?
-            value = null;
-        }
-        AccessibleLogger.getLogger().fine("returning: " + value);
-        return value;
-    }
-      
-    /**
-     * Get the bounding rectangle of this element.
-     *
-     * @return the bounding rectangle (x, y, w, h), in screen coordinates, 
-     * with respect to upper left corner.
-     */
-    private Rect boundingRectangle() {
-        Rect rect;
-        if (node instanceof AccessibleProvider) {
-            rect = ((AccessibleProvider)node).boundingRectangle();
-        } else {
-            // TODO: Should we do something else like throw an acception?
-            rect = null;
-        }
-        AccessibleLogger.getLogger().fine("returning: " + rect);
-        return rect;
-    }
-    
-    /**
-     * Get the root node of the fragment.
-     * 
-     * @return the root node.
-     */
-    private Object fragmentRoot() {
-        if (node instanceof AccessibleProvider) {
-            return ((AccessibleProvider)node).fragmentRoot();
-        } else {
-            return null; 
-        }
-    }
-
-    /**
-     * Get an array of fragment roots that are embedded in the UI Automation
-     * element tree rooted at the current element.
-     * 
-     * @return an array of root fragments, or null.
-     */
-    private AccessibleProvider[] getEmbeddedFragmentRoots() {
-        return null;  // TODO: add code if needed.
-    }
-
-    /**
-     * Get the runtime identifier of an element.
-     * 
-     * @return the unique run-time identifier of the element.
-     */
-    private int[] getRuntimeId() {
-        return null;  // TODO: add code if needed.
-    }
-    
-    /**
-     * Get the UI Automation element in a specified direction within the tree.
-     * 
-     * @param direction the direction in which to navigate.
-     * 
-     * @return the element in the specified direction, or null if there is no element
-     *         in that direction
-     */
-    private Object navigate(NavigateDirection direction) {
-        if (node instanceof AccessibleProvider) {
-            return ((AccessibleProvider)node).navigate(direction);
-        } else {
-            return null; // TODO: Can this ever happen?  Throw exception instead?
-        }
-    }
-    
-    private void setFocus() {}  // TODO: add code
-   
-    private long elementProviderFromPoint(double x, double y) {
-        return 0;  // TODO: add code
-    }
-    
-    private AccessibleProvider getFocus() {
-        return null;  // TODO: add code
-    }
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleAttributes.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,205 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-/**
- * 
- * Note: This enum must be kept in sync with the native NSDictionary
- */
-public class MacAccessibleAttributes {
-    
-    public enum MacAttribute {
-        CHILDREN,
-        CONTENTS,
-        DESCRIPTION, 
-        ENABLED,
-        FOCUSED,
-        HELP,
-        MAX_VALUE,
-        MIN_VALUE,
-        PARENT,
-        POSITION,
-        ROLE,
-        ROLE_DESCRIPTION,
-        SELECTED_CHILDREN,
-        SHOWN_MENU,
-        SIZE,
-        SUBROLE,
-        TITLE,
-        TOP_LEVEL_UI_ELEMENT,
-        VALUE,
-        VALUE_DESCRIPTION,
-        VISIBLE_CHILDREN,
-        WINDOW,
-        // Text-specific attributes
-        INSERTION_POINT_LINE_NUMBER,
-        NUMBER_OF_CHARACTERS,
-        SELECTED_TEXT,
-        SELECTED_TEXT_RANGE,
-        SELECTED_TEXT_RANGES,
-        SHARED_CHARACTER_RANGE,
-        SHARED_TEXT_UI_ELEMENTS,
-        VISIBLE_CHARACTER_RANGE,
-        // Text-specific parameterized attributes
-        DSTRING_FOR_RANGE_PARAMETERIZED,
-        BOUNDS_FOR_RANGE_PARAMETERIZED,
-        LINE_FOR_INDEX_PARAMETERIZED,
-        RTF_FOR_RANGE_PARAMETERIZED,
-        RANGE_FOR_INDEX_PARAMETERIZED,
-        RANGE_FOR_LINE_PARAMETERIZED,
-        RANGE_FOR_POSITION_PARAMETERIZED,
-        STRING_FOR_RANGE_PARAMETERIZED,
-        STYLE_RANGE_FOR_INDEX_PARAMETERIZED,
-        // Attributes used with attributed strings
-        ATTACHMENT_TEXT,
-        BACKGROUND_COLOR_TEXT,
-        FONT_FAMILY_KEY,
-        FONT_NAME_KEY,
-        FONT_SIZE_KEY,
-        FONT_TEXT,
-        FOREGROUND_COLOR_TEXT,
-        LINK_TEXT,
-        MISSPELLED_TEXT,
-        SHADOW_TEXT,
-        STRIKETHROUGH_COLOR_TEXT,
-        STRIKETHROUGH_TEXT,
-        SUPERSCRIPT_TEXT,
-        UNDERLINE_COLOR_TEXT,
-        UNDERLINE_TEXT,
-        VISIBLE_NAME_KEY,
-        // Window-specific attributes
-        CANCEL_BUTTON,
-        CLOSE_BUTTON,
-        DEFAULT_BUTTON,
-        GROW_AREA,
-        MAIN,
-        MINIMIZE_BUTTON,
-        MINIMIZED,
-        MODAL,
-        PROXY,
-        TOOLBAR_BUTTON,
-        ZOOM_BUTTON,
-        // Application-specific attributes
-        CLEAR_BUTTON,
-        COLUMN_TITLES,
-        FOCUSED_UI_ELEMENT,
-        FOCUSED_WINDOW,
-        FRONTMOST,
-        HIDDEN,
-        MAIN_WINDOW,
-        MENU_BAR,
-        ORIENTATION,
-        SEARCH_BUTTON,
-        SEARCH_MENU,
-        WINDOWS,
-        // Grid view attributes
-        COLUMN_COUNT,
-        ORDERED_BY_ROW,
-        ROW_COUNT,
-        // Table view and outline view attributes
-        COLUMN_HEADER_UI_ELEMENTS,
-        COLUMNS,
-        ROW_HEADER_UI_ELEMENTS,
-        ROWS,
-        SELECTED_COLUMNS,
-        SELECTED_ROWS,
-        SORT_DIRECTION,
-        VISIBLE_COLUMNS,
-        VISIBLE_ROWS,
-        // Outline view attributes
-        DDISCLOSED_BY_ROW,
-        DISCLOSED_ROWS,
-        DISCLOSING,
-        DISCLOSURE_LEVEL,
-        // Cell-based table attributes
-        SELECTED_CELLS,
-        VISIBLE_CELLS,
-        // Cell-based table parameterized attributes
-        CELL_FOR_COLUMN_AND_ROW_PARAMETERIZED,
-        // Cell attributes
-        ROW_INDEX_RANGE,
-        COLUMN_INDEX_RANGE,
-        // Layout area attributes
-        HORIZONTAL_UNITS,
-        VERTICAL_UNITS,
-        HORIZONTAL_UNIT_DESCRIPTION,
-        VERTICAL_UNIT_DESCRIPTION,
-        // Layout area parameterized attributes
-        LAYOUT_POINT_FOR_SCREEN_POINT_PARAMETERIZED,
-        LAYOUT_SIZE_FOR_SCREEN_SIZE_PARAMETERIZED,
-        SCREEN_POINT_FOR_LAYOUT_POINT_PARAMETERIZED,
-        SCREEN_SIZE_FOR_LAYOUT_SIZE_PARAMETERIZED,
-        // Slider attributes
-        ALLOWED_VALUES,
-        LABEL_UI_ELEMENTS,
-        LABEL_VALUE,
-        // Screen matte attributes
-        MATTE_CONTENT_UI_ELEMENT,
-        MATTE_HOLE,
-        // Ruler view attributes
-        MARKER_GROUP_UI_ELEMENT,
-        MARKER_TYPE,
-        MARKER_TYPE_DESCRIPTION,
-        MARKER_UI_ELEMENTS,
-        MARKER_VALUES,
-        UNIT_DESCRIPTION,
-        UNITS,
-        // Ruler marker type values
-        CENTER_TAB_STOP_MARKER_TYPE_VALUE,
-        DECIMAL_TAB_STOP_MARKER_TYPE_VALUE,
-        FIRST_LINE_INDENT_MARKER_TYPE_VALUE,
-        HEAD_INDENT_MARKER_TYPE_VALUE,
-        LEFT_TAB_STOP_MARKER_TYPE_VALUE,
-        RIGHT_TAB_STOP_MARKER_TYPE_VALUE,
-        TAIL_INDENT_MARKER_TYPE_VALUE,
-        UNKNOWN_MARKER_TYPE_VALUE,
-        // Linkage elements
-        LINKED_UI_ELEMENTS,
-        SERVES_AS_TITLE_FOR_UI_ELEMENTS,
-        TITLE_UI_ELEMENT,
-        // Miscellaneous attributes
-        DECREMENT_BUTTON,
-        DOCUMENT,
-        EDITED,
-        EXPANDED,
-        FILENAME,
-        HEADER,
-        HORIZONTAL_SCROLL_BAR,
-        INCREMENT_BUTTON,
-        INDEX,
-        NEXT_CONTENTS,
-        OVERFLOW_BUTTON,
-        PREVIOUS_CONTENTS,
-        SELECTED,
-        SPLITTERS,
-        TABS,
-        URL,
-        VERTICAL_SCROLL_BAR,
-        WARNING_VALUE,
-        CRITICAL_VALUE,
-        PLACEHOLDER_VALUE
-    }
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleBasePatternProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-import com.sun.glass.ui.accessible.AccessibleBasePatternProvider;
-
-abstract public class MacAccessibleBasePatternProvider extends AccessibleBasePatternProvider {
-    
-    public MacAccessibleBasePatternProvider(Object node){
-        super(node);
-    }
-    
-    abstract long getNativeAccessible();
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleBaseProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,360 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-import com.sun.glass.ui.accessible.AccessibleBaseProvider;
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.glass.ui.accessible.mac.MacAccessibleAttributes.MacAttribute;
-import com.sun.glass.ui.accessible.mac.MacAccessibleEventIds.MacEventId;
-import com.sun.glass.ui.accessible.mac.MacAccessibleRoles.MacRole;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.EventIds;
-import com.sun.javafx.accessible.utils.NavigateDirection;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Mac platform implementation class for Accessible.
- */
-public final class MacAccessibleBaseProvider extends AccessibleBaseProvider {
-    
-    // map from fx role ID constant to mac role ID enum value
-    private static final HashMap<Integer, MacRole>MacRoleMap =
-        new HashMap<Integer, MacRole>();
-    // map from fx event ID constant to mac event ID enum value
-    private static final HashMap<Integer, MacEventId>MacEventIdMap =
-        new HashMap<Integer, MacEventId>();
-    // map from fx property ID constant to mac attribute ID enum value
-    private static final HashMap<Integer, MacAttribute>MacAttributeMap =
-        new HashMap<Integer, MacAttribute>();
-    // map from MacAttribute enum value to fx property ID constant
-    private static final EnumMap<MacAttribute, Integer>FxaAttributeMap =
-        new EnumMap<MacAttribute, Integer>(MacAttribute.class);
-    
-    static {
-        _initIDs();  // Initialize JNI method IDs.
-        
-        // TODO: Add more roles later - in alpha order
-        MacRoleMap.put(ControlTypeIds.BUTTON, MacRole.BUTTON);
-        MacRoleMap.put(ControlTypeIds.CHECK_BOX, MacRole.CHECK_BOX);
-        MacRoleMap.put(ControlTypeIds.RADIO_BUTTON, MacRole.RADIO_BUTTON);
-        MacRoleMap.put(ControlTypeIds.TEXT, MacRole.TEXT_FIELD);
-        MacRoleMap.put(ControlTypeIds.LIST, MacRole.LIST);
-        // TODO: Fix the following later.  Currrently an FX cell is given control ID
-        // of List Item with no children.  However it should be List Item with 
-        // image/text/edit children.  For Mac the FX cell node should be role cell
-        // and the children a relevant role.  For now list item is mapped to static text.
-        MacRoleMap.put(ControlTypeIds.LIST_ITEM, MacRole.CELL);
-        
-        // TODO: Add more later - in alpha order
-        MacEventIdMap.put(EventIds.AUTOMATION_FOCUS_CHANGED, MacEventId.FOCUSED_UI_ELEMENT_CHANGED);
-        MacEventIdMap.put(EventIds.AUTOMATION_PROPERTY_CHANGED, MacEventId.VALUE_CHANGED);
-        
-        // TODO: Add more attributes later - in alpha order
-        FxaAttributeMap.put(MacAttribute.ENABLED, PropertyIds.IS_ENABLED);
-        MacAttributeMap.put(PropertyIds.IS_ENABLED, MacAttribute.ENABLED);
-        FxaAttributeMap.put(MacAttribute.FOCUSED, PropertyIds.HAS_KEYBOARD_FOCUS);
-        MacAttributeMap.put(PropertyIds.HAS_KEYBOARD_FOCUS, MacAttribute.FOCUSED);
-        FxaAttributeMap.put(MacAttribute.ROLE, PropertyIds.CONTROL_TYPE);
-        MacAttributeMap.put(PropertyIds.CONTROL_TYPE, MacAttribute.ROLE);
-        FxaAttributeMap.put(MacAttribute.SELECTED, PropertyIds.SELECTION_ITEM_IS_SELECTED);
-        MacAttributeMap.put(PropertyIds.SELECTION_ITEM_IS_SELECTED, MacAttribute.SELECTED);
-        FxaAttributeMap.put(MacAttribute.TITLE, PropertyIds.NAME);
-        MacAttributeMap.put(PropertyIds.NAME, MacAttribute.TITLE);
-    }
-    
-    native private static void _initIDs();
-    native private long _createAccessible();
-    native private void _destroyAccessible(long nativeAccessible);
-    native private void _fireEvent(long nativeAccessible, int eventID);
-    
-    private long nativeAccessible;  // the native accessible
-    
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * 
-     * @return the native accessible.
-     */
-    public MacAccessibleBaseProvider(Object node) {
-        super(node);
-        nativeAccessible = _createAccessible();
-    }
-    
-    /**
-     * Get the reference to the native accessible.
-     * 
-     * @return a reference to the native accessible.
-     */
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    ////////////////////////////////////
-    //
-    // Start of downcalls to native code
-    //
-    ////////////////////////////////////
-    
-    /**
-     * Destroy the native accessible
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-    
-    /**
-     * Downcall to fire an event.
-     * 
-     * @param eventID   the FXA event ID.
-     */
-    @Override
-    public void fireEvent(int eventID) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("eventID: " + eventID);
-        _fireEvent(nativeAccessible, MacEventIdMap.get(eventID).ordinal());
-    }
-    
-    /** 
-     * Fire a property change event
-     *
-     * @param propertyID        identifies the property
-     * @param oldProperty       the old value of the property
-     * @param newProperty       the new value of the property
-     */
-    @Override
-    public void firePropertyChange(int propertyID, int oldProperty, int newProperty ) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("propertyID: " + propertyID);
-        AccessibleLogger.getLogger().fine("old: " + oldProperty);
-        AccessibleLogger.getLogger().fine("new: " + newProperty);
-        _fireEvent(nativeAccessible, MacEventId.VALUE_CHANGED.ordinal());                    
-    }
-    
-    /** 
-     * Fire a property change event
-     *
-     * @param propertyId    identifies the property
-     * @param oldProperty   the old value of the property
-     * @param newProperty   the new value of the property
-     */
-    @Override
-    public void firePropertyChange(int propertyID, boolean oldProperty, boolean newProperty) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("propertyID: " + propertyID);
-        AccessibleLogger.getLogger().fine("old: " + oldProperty);
-        AccessibleLogger.getLogger().fine("new: " + newProperty);
-        _fireEvent(nativeAccessible, MacEventId.VALUE_CHANGED.ordinal());                    
-    }
-    
-    
-    //////////////////////////////////
-    //
-    // End of downcalls to native code
-    //
-    //////////////////////////////////
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native NSAccessibility implementation.  This code
-    //   translates the upcalls to a UIA-like implementation used in the JavaFX
-    //   accessibility implementation.
-    
-    /**
-     * Get the children
-     * 
-     * @offset       the offset to start fetching
-     * @maxCount    the max number of children to fetch, -1 means fetch all
-     * 
-     * @return array of addresses of native accessibles or NULL if no children
-     */
-    private long[] getChildren(int offset, int maxCount) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("offset: " + offset);
-        AccessibleLogger.getLogger().fine("maxCount: " + maxCount);
-        List<Long> children = new ArrayList<Long>(100);
-        if (maxCount == 0 || maxCount < -1 || offset < 0) {
-            return null;
-        }
-        boolean getAll = (maxCount == -1);
-        // get the first child
-        Object firstGlassChild =
-            ((AccessibleProvider)node).navigate(NavigateDirection.FirstChild);
-        if (firstGlassChild == null) {
-            AccessibleLogger.getLogger().fine("No children.");
-        } else {
-            Object glassChild;
-            AccessibleProvider childFXNode;
-            int index = 0;
-            int count = 0;
-            // if caller wants the first one, save it
-            if (offset == 0) {
-                Long nativeChild =
-                    new Long(((MacAccessibleBaseProvider)firstGlassChild).getNativeAccessible());
-                children.add(nativeChild);
-                ++count;
-            }
-            ++index;
-            // Fill the array with sequential children, starting at offset.
-            // The first fetch might be all that's needed.
-            if (getAll || count < maxCount) {  
-                // get next sibling until done
-                glassChild = firstGlassChild;                
-                do {
-                    childFXNode = (AccessibleProvider)((MacAccessibleBaseProvider)glassChild).getNode();
-                    glassChild = childFXNode.navigate(NavigateDirection.NextSibling);
-                    if (index >= offset && glassChild != null) {
-                        Long nativeChild =
-                            new Long(((MacAccessibleBaseProvider)glassChild).getNativeAccessible());
-                        children.add(nativeChild);
-                        ++count;
-                    }
-                    ++index;
-                } while ((getAll || count < maxCount) && glassChild != null);
-            }
-        }
-        if (children.isEmpty()) {
-            return null;
-        } else {
-            long[] longs = new long[children.size()];
-            int i = 0;
-            AccessibleLogger.getLogger().fine("returning");
-            for (Long e : children)  {
-                AccessibleLogger.getLogger().fine("child [" + i + "]: " + Long.toHexString(e));
-                longs[i++] = e.longValue();
-            }
-            return longs;
-        }
-    }
-    
-    /**
-     * Get the parent
-     * 
-     * @return address of native accessible of parent or NULL if no parent or -1
-     *         if the parent is a root.
-     */
-    private long getParent() {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        Object parent;
-        long nativeParent = 0;
-        // get the parent
-        parent = ((AccessibleProvider)node).navigate(NavigateDirection.Parent);
-        if (parent == null) {
-            AccessibleLogger.getLogger().fine("No parent.");
-        } else if (parent instanceof MacAccessibleRoot) {
-            nativeParent = -1;
-        } else {
-            nativeParent = ((MacAccessibleBaseProvider)parent).getNativeAccessible();
-        }
-        AccessibleLogger.getLogger().fine("returning parent: " + nativeParent);
-        return nativeParent;
-    }
-    
-    /**
-     * Get the root
-     * 
-     * Checks the parent and returns it if it is a MacAccessibleRoot.
-     * 
-     * @return address of native accessible of the root or NULL if no parent
-     *         or the parent is not a MacAccessibleRoot
-     */
-    private long getRoot() {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        Object root;
-        long nativeRoot = 0;
-        // get the parent
-        root = ((AccessibleProvider)node).navigate(NavigateDirection.Parent);
-        if (root == null) {
-            AccessibleLogger.getLogger().fine("No parent.");
-        } else if (!(root instanceof MacAccessibleRoot)) {
-            AccessibleLogger.getLogger().fine("parent is not a MacAccessibleRoot");
-            AccessibleLogger.getLogger().fine("it's a: " + root.toString());
-        } else {
-            nativeRoot = ((MacAccessibleRoot)root).getNativeAccessible();
-        }
-        AccessibleLogger.getLogger().fine("returning root: " + Long.toHexString(nativeRoot));
-        return nativeRoot;
-    }
-    
-    /**
-     * Get a property value
-     * 
-     * @param attributeId   the Mac attribute ID
-     * 
-     * @return the property value or null if not handled
-     */
-    @Override
-    protected Object getPropertyValue(int attributeId) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("attributeId: " + attributeId);
-        Object value;
-        if (attributeId == MacAttribute.ROLE.ordinal()) {
-            Integer fxRole =
-                (Integer)super.getPropertyValue(FxaAttributeMap.get(MacAttribute.ROLE));
-            if (fxRole == null) {
-                AccessibleLogger.getLogger().fine("role not in role map");
-                value = null;
-            } else {
-                AccessibleLogger.getLogger().fine("fxRole: " + fxRole);
-                value = (Integer)MacRoleMap.get(fxRole).ordinal();
-            }
-        } else if (attributeId == MacAttribute.TITLE.ordinal()) {
-            value = (String)super.getPropertyValue(FxaAttributeMap.get(MacAttribute.TITLE));
-        } else if (attributeId == MacAttribute.ENABLED.ordinal()) {
-            value = (Boolean)super.getPropertyValue(FxaAttributeMap.get(MacAttribute.ENABLED));
-        } else if (attributeId == MacAttribute.FOCUSED.ordinal()) {
-            value = (Boolean)super.getPropertyValue(FxaAttributeMap.get(MacAttribute.FOCUSED));
-        } else {
-            // catch if attribute not handled
-            // TODO: raise exception or just return null?
-            value = null;
-            AccessibleLogger.getLogger().fine("Attribute not handled, returning null");
-        }
-        AccessibleLogger.getLogger().fine("returning: " + value);
-        return value;
-    }
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleEventIds.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-/**
- *
- * Note: This enum must be kept in sync with the native NSArray
- */
-public class MacAccessibleEventIds {
-    
-    public enum MacEventId {
-        MAIN_WINDOW_CHANGED,
-        FOCUSED_WINDOW_CHANGED,
-        FOCUSED_UI_ELEMENT_CHANGED,
-        // Window-change notifications
-        WINDOW__CREATED,
-        WINDOW_DEMINIATURIZED,
-        WINDOW_MINIATURIZED,
-        WINDOW_MOVED,
-        WINDOW_RESIZED,
-        // Application notifications
-        APPLICATION_ACTIVATED,
-        APPLICATION_DEACTIVATED,
-        APPLICATION_HIDDEN,
-        APPLICATION_SHOWN,
-        // Drawer and sheet notifications
-        DRAWER_CREATED,
-        SHEET_CREATED,
-        // Element notifications
-        CREATED,
-        MOVED,
-        RESIZED,
-        TITLE_CHANGED,
-        UI_ELEMENT_DESTROYED,
-        VALUE_CHANGED,
-        // Miscellaneous notifications
-        HELP_TAG_CREATED,
-        ROW_COUNT_CHANGED,
-        SELECTED_CHILDREN_CHANGED,
-        SELECTED_COLUMNS_CHANGED,
-        SELECTED_ROWS_CHANGED,
-        SELECTED_TEXT_CHANGED,
-        ROW_EXPANDED,
-        ROW_COLLAPSED,
-        SELECTED_CELLS_CHANGED,
-        UNITS_CHANGED,
-        SELECTED_CHILDREN_MOVED
-    }
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleRoles.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-/**
- *
- * Note: This enum must be kept in sync with the native NSArray
- */
-public class MacAccessibleRoles {
-    
-    public enum MacRole {
-        APPLICATION,
-        BROWSER,
-        BUSY_INDICATOTR,
-        BUTTON,
-        CELL,
-        CHECK_BOX,
-        COLOR_WELL,
-        COLUMN,
-        COMBO_BOX,
-        DISCLOSURE_TRIANGLE,
-        DRAWER,
-        GRID,
-        GROUP,
-        GROW_AREA,
-        HANDLE,
-        HELP_TAG,
-        IMAGE,
-        INCREMENTOR,
-        LAYOUT_AREA,
-        LAYOUT_ITEM,
-        LINK,
-        LIST,
-        LEVEL_INDICATOR,
-        MATTE,
-        MENU_BAR,
-        MENU_BUTTON,
-        MENU_ITEM,
-        MENU,
-        OUTLINE,
-        POP_UP_BUTTON,
-        PROGRESS_INDICATOR,
-        RADIO_BUTTON,
-        RADIO_GROUP,
-        RELEVANCE_INDICATOR,
-        ROW,
-        RULER_MARKER,
-        RULER,
-        SCROLL_AREA,
-        SCROLL_BAR,
-        SHEET,
-        SLIDER,
-        //SortButton, // Deprecated
-        SPLIT_GROUP,
-        SPLITTER,
-        STATIC_TEXT,
-        SYSTEM_WIDE,
-        TAB_GROUP,
-        TABLE,
-        TEXT_AREA,
-        TEXT_FIELD,
-        TOOL_BAR,
-        UNKNOWN,
-        VALUE_INDICATOR,
-        WINDOW
-    }
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleRoot.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-import com.sun.glass.ui.Window;
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.glass.ui.accessible.AccessibleRoot;
-import com.sun.glass.ui.accessible.mac.MacAccessibleAttributes.MacAttribute;
-import com.sun.glass.ui.accessible.mac.MacAccessibleEventIds.MacEventId;
-import com.sun.glass.ui.accessible.mac.MacAccessibleRoles.MacRole;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.providers.AccessibleStageProvider;
-import com.sun.javafx.accessible.utils.ControlTypeIds;
-import com.sun.javafx.accessible.utils.EventIds;
-import com.sun.javafx.accessible.utils.NavigateDirection;
-import com.sun.javafx.accessible.utils.PropertyIds;
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Mac platform implementation class for AccessibleRoot.
- */
-public final class MacAccessibleRoot extends AccessibleRoot {
-    
-    final private static HashMap<Integer, MacRole>MacRoleMap =
-        new HashMap<Integer, MacRole>();
-    final private static HashMap<Integer, MacEventId>MacEventIdMap =
-        new HashMap<Integer, MacEventId>();
-    final private static EnumMap<MacAttribute, Integer>FxaAttributeMap =
-        new EnumMap<MacAttribute, Integer>(MacAttribute.class);
-    
-    static {
-        _initIDs();  // Initialize the method Ids
-        
-        // TODO: Add more roles later - in alpha order
-        MacRoleMap.put(ControlTypeIds.BUTTON, MacRole.BUTTON);
-        MacRoleMap.put(ControlTypeIds.CHECK_BOX, MacRole.CHECK_BOX);
-        MacRoleMap.put(ControlTypeIds.RADIO_BUTTON, MacRole.RADIO_BUTTON);
-        
-        // TODO: Add more later - in alpha order
-        MacEventIdMap.put(EventIds.AUTOMATION_FOCUS_CHANGED, MacEventId.FOCUSED_UI_ELEMENT_CHANGED);
-        
-        // TODO: Add more attributes later - in alpha order
-        FxaAttributeMap.put(MacAttribute.ROLE, PropertyIds.CONTROL_TYPE);
-    }
-    
-    native private static void _initIDs();
-    native private long _createAccessible();
-    native private void _setAccessibilityInitIsComplete(long nativeWindow, long nativeAccessible);
-    native private void _destroyAccessible(long nativeAccessible);
-    native private void _fireEvent(long nativeAccessible, int eventID);
-    
-    private long nativeWindow;  // the native window object
-    private long nativeAccessible;  // the native accessible
-    
-    /**
-     * Construct the platform dependent Java side of the native accessible.  This
-     * will be used when firing events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param window    the top level Glass Window object (not used in this implementation).
-     */
-    public MacAccessibleRoot(Object node, Window window) {
-        super(node);
-        nativeAccessible = _createAccessible();
-        nativeWindow = window.getNativeWindow();
-    }
-    
-    /**
-     * Get the reference to the native accessible.
-     * 
-     * @return a reference to the native accessible.
-     */
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    ////////////////////////////////////
-    //
-    // Start of downcalls to native code
-    //
-    ////////////////////////////////////
-    
-    /**
-     * Signal that initialization is complete.
-     */
-    @Override
-    public void setAccessibilityInitIsComplete() {
-        _setAccessibilityInitIsComplete(nativeWindow, nativeAccessible);
-    }
-    
-    /**
-     * Destroy the native accessible
-     */
-    @Override
-    public void destroyAccessible() {
-        if (nativeAccessible != 0) {
-            _destroyAccessible(nativeAccessible);
-        }
-    }
-    
-    /**
-     * Downcall to fire an event.
-     * 
-     * @param eventID   the FXA event ID.
-     */
-    @Override
-    public void fireEvent(int eventID) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("eventID: " + eventID);
-        _fireEvent(nativeAccessible, MacEventIdMap.get(eventID).ordinal());
-    }
-    
-    //////////////////////////////////
-    //
-    // End of downcalls to native code
-    //
-    //////////////////////////////////
-    
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native NSAccessibility implementation.  This code
-    //   translates the upcalls to s UIA-like implementation used in the JavaFX
-    //   accessibility implementation.
-    
-    /**
-     * Get the children
-     * 
-     * @offset      the offset to start fetching
-     * @maxCount    the max number of children to fetch, -1 means fetch all
-     * 
-     * @return array of addresses of native accessibles or null if no children
-     */
-    private long[] getChildren(int offset, int maxCount) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("offset: " + offset);
-        AccessibleLogger.getLogger().fine("maxCount: " + maxCount);
-        List<Long> children = new ArrayList<Long>(100);
-        if (maxCount == 0 || maxCount < -1 || offset < 0) {
-            return null;
-        }
-        boolean getAll = (maxCount == -1);
-        // get the first child
-        Object firstGlassChild =
-            ((AccessibleProvider)node).navigate(NavigateDirection.FirstChild);
-        if (firstGlassChild == null) {
-            AccessibleLogger.getLogger().fine("No children.");
-        } else {
-            Object glassChild;
-            AccessibleProvider childFXNode;
-            int index = 0;
-            int count = 0;
-            // if caller wants the first one, save it
-            if (offset == 0) {
-                Long nativeChild =
-                    new Long(((MacAccessibleBaseProvider)firstGlassChild).getNativeAccessible());
-                children.add(nativeChild);
-                ++count;
-            }
-            ++index;
-            // Fill the array with sequential children, starting at offset.
-            // The first fetch might be all that's needed.
-            if (getAll || count < maxCount) {  
-                // get next sibling until done
-                glassChild = firstGlassChild;                
-                do {
-                    childFXNode = (AccessibleProvider)((MacAccessibleBaseProvider)glassChild).getNode();
-                    glassChild = childFXNode.navigate(NavigateDirection.NextSibling);
-                    if (index >= offset && glassChild != null) {
-                        Long nativeChild =
-                            new Long(((MacAccessibleBaseProvider)glassChild).getNativeAccessible());
-                        children.add(nativeChild);
-                        ++count;
-                    }
-                    ++index;
-                } while ((getAll || count < maxCount) && glassChild != null);
-            }
-        }
-        AccessibleLogger.getLogger().fine("children.size: " + children.size());
-        if (children.isEmpty()) {
-            return null;
-        } else {
-            long[] longs = new long[children.size()];
-            int i = 0;
-            AccessibleLogger.getLogger().fine("returning");
-            for (Long e : children)  {
-                AccessibleLogger.getLogger().fine("child [" + i + "]: " + Long.toHexString(e));
-                longs[i++] = e.longValue();
-            }
-            return longs;
-        }
-    }
-    
-    /**
-     * Get a property value
-     * 
-     * @param attributeId   the Mac attribute ID
-     * @return the property value
-     */
-    @Override
-    protected Object getPropertyValue(int attributeId) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("attributeId: " + attributeId);
-        Object value;
-        if (attributeId == MacAttribute.ROLE.ordinal()) {
-            Integer role = (Integer)super.getPropertyValue(FxaAttributeMap.get(MacAttribute.ROLE));
-            value = MacRoleMap.get(role);
-            AccessibleLogger.getLogger().fine("returning Mac role: " + value);
-        }
-        if (attributeId == MacAttribute.TITLE.ordinal()) {
-            value = null;  // todo
-        } else {
-            // catch if attribute not handled
-            // TODO: raise exception or just return null?
-            value = null;
-            AccessibleLogger.getLogger().fine("Attribute not handled, returning null");
-        }
-        return value;
-    }
-    
-    /**
-     * Get the native provider at the specified point.
-     * 
-     * @param   x
-     * @param   y 
-     * 
-     * @return the native provider
-     */
-    private long elementProviderFromPoint(double x, double y) { 
-        AccessibleLogger.getLogger().fine("this: " + this);
-        if (node instanceof AccessibleStageProvider) {
-            AccessibleLogger.getLogger().fine("x: " + x + " y: " + y);
-            Object accElement = ((AccessibleStageProvider)node).elementProviderFromPoint(x, y);
-            if (accElement != null) {
-                long nativeObject =
-                    ((MacAccessibleBaseProvider)accElement).getNativeAccessible();
-                AccessibleLogger.getLogger().fine("native element: " + nativeObject);
-                return nativeObject;
-            } else {
-                AccessibleLogger.getLogger().fine("Not Found");
-                return 0;
-            }
-        } else {
-            return 0;            
-        }
-
-   }
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleSelectionItemProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.SelectionItemProvider;
-
-/**
- * Mac platform implementation class for Accessible.
- */
-public final class MacAccessibleSelectionItemProvider extends MacAccessibleBasePatternProvider { 
-    
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();
-    //native protected long _createAccessible(long nativeBaseProvider);
-    native protected long _createAccessible();
-    // TODO: The base/basic/simple provider needs to be passed on this call.  
-    // At this point the Mac native code does not have the code that adds the
-    // newly created pattern providing accessible to the list of pattern providers
-    // that will be maintained in the base/basic/simple accessible.
-    // See the Win code for how it's done there.
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
-    
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public MacAccessibleSelectionItemProvider(Object node, MacAccessibleBaseProvider provider) {
-        super(node);
-        //nativeAccessible = _createAccessible(provider.getNativeAccessible());
-        nativeAccessible = _createAccessible();
-        // TODO: See note on _createAccessible above.
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-    
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native NSAccessibility implementation.  This code
-    //   translates the upcalls to a UIA-like implementation used in the JavaFX
-    //   accessibility implementation.
-    
-    /**
-     * For SelectionItemProvider - get_IsSelected
-     *
-     * @return the state
-     */
-    private boolean getIsSelected() {
-        return ((SelectionItemProvider)node).isSelected();
-    }
-    
-    /**
-     * Gets the provider that implements the SelectionProvider pattern and acts as the
-     * container for the calling object. 
-     * 
-     * @return the native accessible for the selection container
-     */
-    private long getSelectionContainer() {
-        //AccessibleLogger.getLogger().fine("Thread ID: " + Thread.currentThread().getId());
-        long nativeContainer = 0;
-        if (node instanceof SelectionItemProvider) {
-            MacAccessibleBaseProvider container =
-                (MacAccessibleBaseProvider)((SelectionItemProvider)node).getSelectionContainer();
-            if (container != null) {
-                nativeContainer = container.getNativeAccessible();
-            }
-        }
-        AccessibleLogger.getLogger().fine("nativeContainer:  " + Long.toHexString(nativeContainer));
-        return nativeContainer;
-    }
-
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleSelectionProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.SelectionProvider;
-
-/**
- * Mac platform implementation class for Accessible.
- */
-public final class MacAccessibleSelectionProvider extends MacAccessibleBasePatternProvider {
-    
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();    
-    //native protected long _createAccessible(long nativeBaseProvider);
-    native protected long _createAccessible();
-    // TODO: The base/basic/simple provider needs to be passed on this call.  
-    // At this point the Mac native code does not have the code that adds the
-    // newly created pattern providing accessible to the list of pattern providers
-    // that will be maintained in the base/basic/simple accessible.
-    // See the Win code for how it's done there.
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
-    
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public MacAccessibleSelectionProvider(Object node, MacAccessibleBaseProvider provider) {
-        super(node);
-        //nativeAccessible = _createAccessible(provider.getNativeAccessible());
-        nativeAccessible = _createAccessible();
-        // TODO: See note on _createAccessible above.
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native NSAccessibility implementation.  This code
-    //   translates the upcalls to a UIA-like implementation used in the JavaFX
-    //   accessibility implementation.
-    
-    /**
-     * Get the selection.
-     * 
-     * @return an array of the native selected child accessibles.
-     */
-    private long[] getSelection() {
-        long[] selection = null;
-        // get the array of selected child nodes
-        if (node instanceof SelectionProvider) {
-            Object[] fxSelected = ((SelectionProvider)node).getSelection();
-            // interate through the selection getting the natives
-            int size = fxSelected.length;
-            selection = new long[size];
-            for (int i=0; i<size; ++i) {
-                if (fxSelected[i] instanceof MacAccessibleBaseProvider) {
-                    selection[i] = 
-                        ((MacAccessibleBaseProvider)fxSelected[i]).getNativeAccessible();
-                } else {
-                    // All Objects returned by getSelection above should be
-                    // MacAccessibleBaseProviders.  If not then it's an error so
-                    // return null.
-                    // TODO: Should we do something else like raise an exception?
-                    selection = null;
-                    break;
-                }
-            }
-        }
-        AccessibleLogger.getLogger().fine("returning: " + selection);
-        return selection;
-    }
-
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/mac/MacAccessibleToggleProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.mac;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.ToggleProvider;
-import com.sun.javafx.accessible.utils.ToggleState;
-
-/**
- * Mac platform implementation class for Accessible.
- */
-public final class MacAccessibleToggleProvider extends MacAccessibleBasePatternProvider {
-    
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();  
-    //native protected long _createAccessible(long nativeBaseProvider);
-    native protected long _createAccessible();
-    // TODO: The base/basic/simple provider needs to be passed on this call.  
-    // At this point the Mac native code does not have the code that adds the
-    // newly created pattern providing accessible to the list of pattern providers
-    // that will be maintained in the base/basic/simple accessible.
-    // See the Win code for how it's done there.
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
-    
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     *
-     * @param node      the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public MacAccessibleToggleProvider(Object node, MacAccessibleBaseProvider provider) {
-        super(node);
-        //nativeAccessible = _createAccessible(provider.getNativeAccessible());
-        nativeAccessible = _createAccessible();
-        // TODO: See note on _createAccessible above.
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native NSAccessibility implementation.  This code
-    //   translates the upcalls to a UIA-like implementation used in the JavaFX
-    //   accessibility implementation.
-    
-    /**
-     * For ToggleProvider - get_ToggleState
-     *
-     * @return the state: 0 == OFF, 1 == ON, 2 == INDETERMINATE
-     */
-    private long getToggleState() {
-        long value = 2;
-        ToggleState state = ((ToggleProvider)node).getToggleState();
-        switch (state) {
-            case OFF:
-                value = 0;
-                break;
-            case ON:
-                value = 1;
-                break;
-            case INDETERMINATE:
-                value = 2;
-                break;
-        }
-        return value;
-    }
-
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleBasePatternProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleBasePatternProvider;
-
-abstract public class WinAccessibleBasePatternProvider extends AccessibleBasePatternProvider {
-    
-    public WinAccessibleBasePatternProvider(Object node){
-        super(node);
-    }
-    
-    abstract long getNativeAccessible();
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleBaseProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleBasePatternProvider;
-import com.sun.glass.ui.accessible.AccessibleBaseProvider;
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.utils.NavigateDirection;
-import java.util.HashMap;
-import sun.util.logging.PlatformLogger;
-
-/**
- * Windows platform implementation class for Accessible.
- */
-public final class WinAccessibleBaseProvider extends AccessibleBaseProvider {
-
-    final private static HashMap<Integer, NavigateDirection> directionMap =
-        new HashMap<Integer, NavigateDirection>();
-    
-    static {
-        _initIDs();
-        
-        for (NavigateDirection type : NavigateDirection.values()) {
-            directionMap.put(type.ordinal(), type);
-        }
-    }
-    
-    native private static void _initIDs();
-    native private long _createAccessible();
-    native private void _destroyAccessible(long nativeAccessible);
-    native private void _fireEvent(long nativeAccessible, int eventID);
-    native private void _firePropertyChange( long nativeAccessible, int propertyID, 
-                                             int oldProperty, int newProperty );
-    native private void _firePropertyChange( long nativeAccessible, int propertyID, 
-                                             boolean oldProperty, boolean newProperty );
-    
-    private long nativeAccessible;  // the native accessible
-    
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     */
-    public WinAccessibleBaseProvider(Object node) {
-        super(node);
-        nativeAccessible = _createAccessible();
-    }
-    
-    /**
-     * Get the reference to the native accessible.
-     * 
-     * @return a reference to the native accessible.
-     */
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    ////////////////////////////////////
-    //
-    // Start of downcalls to native code
-    //
-    ////////////////////////////////////
-    
-    /**
-     * Downcall to destroy the native accessible.
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    /**
-     * Downcall to fire an event.
-     * 
-     * @param eventID   the event ID.
-     */
-    @Override
-    public void fireEvent(int eventID) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("eventID: " + eventID);
-        _fireEvent(nativeAccessible, eventID);
-    }
-    
-    /** 
-     * Fire a property change event
-     *
-     * @param propertyID    identifies the property
-     * @param oldProperty   the old value of the property
-     * @param newProperty   the new value of the property
-     */
-    @Override
-    public void firePropertyChange(int propertyID, int oldProperty, int newProperty) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("propertyID: " + propertyID);
-        AccessibleLogger.getLogger().fine("old: " + oldProperty);
-        AccessibleLogger.getLogger().fine("new: " + newProperty);
-        _firePropertyChange(nativeAccessible, propertyID, oldProperty, newProperty);
-    }
-    
-    /** 
-     * Fire a property change event
-     *
-     * @param propertyId    identifies the property
-     * @param oldProperty   the old value of the property
-     * @param newProperty   the new value of the property
-     */
-    @Override
-    public void firePropertyChange(int propertyID, boolean oldProperty, boolean newProperty) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("propertyID: " + propertyID);
-        AccessibleLogger.getLogger().fine("old: " + oldProperty);
-        AccessibleLogger.getLogger().fine("new: " + newProperty);
-        _firePropertyChange(nativeAccessible, propertyID, oldProperty, newProperty);
-    }
-    
-    //////////////////////////////////
-    //
-    // End of downcalls to native code
-    //
-    //////////////////////////////////
-    
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    /**
-     * For AccessibleProvider - get_FragmentRoot
-     *
-     * @return address of native accessible of root object
-     */
-    private long getFragmentRoot() {
-        WinAccessibleRoot root = (WinAccessibleRoot)(((AccessibleProvider)node).fragmentRoot());
-        if (root == null) {
-            return 0;
-        } else {
-            long nativeRoot = root.getNativeAccessible();
-            AccessibleLogger.getLogger().fine("nativeRoot:  " + Long.toHexString(nativeRoot));
-            return nativeRoot;
-        }
-    }
-    
-    /**
-     * For AccessibleProvider - Navigate
-     * 
-     * @param direction  parent, first/last child, prev/next sibling
-     *
-     * @return address of the requested native accessible or 0 if there is no target
-     *         in the requested direction.
-     */
-
-    private long navigate(int direction) {
-        //AccessibleLogger.getLogger().fine("Thread ID: " + Thread.currentThread().getId());
-        AccessibleLogger.getLogger().fine("direction: " + directionMap.get(direction));
-        Object target =
-            ((AccessibleProvider)node).navigate(directionMap.get(direction));
-        long nativeTarget = 0;
-        if (target == null) {
-            AccessibleLogger.getLogger().fine("No object in that direction.");
-        } else {
-            if (target instanceof WinAccessibleBaseProvider) {
-                nativeTarget = ((WinAccessibleBaseProvider)target).getNativeAccessible();
-            } else if (target instanceof WinAccessibleRoot) {
-                nativeTarget = ((WinAccessibleRoot)target).getNativeAccessible();
-            }
-            // TODO: Throw exception if instanceof something else?
-            if (nativeTarget != 0) {
-                AccessibleLogger.getLogger().fine("nativeTarget:  " + Long.toHexString(nativeTarget));
-            }
-        }
-        return nativeTarget;
-    }
-    
-    /**
-     *   For AccessibleProvider - getPatternProvider  Retrieves an object that provides support for a control pattern
-     *
-     *   @param patternId: Identifier of the pattern.
-     *    
-     *   @return Object that implements the pattern interface, or null if the pattern is not supported.
-     */
-    private long getPatternProvider(int patternId) {
-        long nativeProvider = 0;
-        PlatformLogger logger = AccessibleLogger.getLogger();
-        
-        logger.fine("id: " + patternId);
-        for (AccessibleBasePatternProvider pattern : patternProviders) {
-            logger.fine("pattern.id" + ((WinAccessibleBasePatternProvider)pattern).getPatternId());
-            if ( ((AccessibleBasePatternProvider)pattern).getPatternId() == patternId &&
-                 pattern instanceof WinAccessibleBasePatternProvider ) {
-                logger.fine("Found matching id: " + patternId);
-                logger.fine("returning: " +
-                    ((WinAccessibleBasePatternProvider)pattern).getNativeAccessible());
-                nativeProvider =
-                    ((WinAccessibleBasePatternProvider)pattern).getNativeAccessible();
-            }
-        }
-        return nativeProvider;
-    }
-
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleGridItemProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.GridItemProvider;
-import com.sun.javafx.accessible.utils.PatternIds;
-
-public final class WinAccessibleGridItemProvider extends WinAccessibleBasePatternProvider {
-
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-
-    native private static void _initIDs();
-    native private long _createAccessible(long nativeBaseProvider);
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
- 
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public WinAccessibleGridItemProvider(Object node, WinAccessibleBaseProvider provider) {
-        super(node);
-        nativeAccessible = _createAccessible(provider.getNativeAccessible());
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    /**
-     * For GridItemProvider Row property
-     *
-     * @return the row index of this object.
-     */
-    private int getRow() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleGridItemProvider.getRow");
-        return ((GridItemProvider)node).getRow();
-    }
-
-    /**
-     * For GridItemProvider RowSpan property
-     *
-     * @return the the number of rows spanned by this object.
-     */
-    private int getRowSpan() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleGridItemProvider.getRowSpan");
-        return ((GridItemProvider)node).getRowSpan();
-    }
-    
-    /**
-     * For GridItemProvider Column property
-     *
-     * @return the column index of this object.
-     */
-    private int getColumn() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleGridItemProvider.getColumn");
-        return ((GridItemProvider)node).getColumn();
-    }
-
-    /**
-     * For GridItemProvider ColumnSpan property
-     *
-     * @return the the number of columns spanned by this object.
-     */
-    private int getColumnSpan() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleGridItemProvider.getColumnSpan");
-        return ((GridItemProvider)node).getColumnSpan();
-    }
-
-    /**
-     * For GridItemProvider ContainingGrid property
-     *
-     * @return the provider that implements the GridProvider pattern and represents
-     *         the container of this object. 
-     */
-    private long getContainingGrid() {
-        long nativeContainer = 0;
-        Object glassContainer = ((GridItemProvider)node).getContainingGrid();
-        if (glassContainer != null) {
-            nativeContainer =
-                ((WinAccessibleBasePatternProvider)glassContainer).getNativeAccessible();
-            AccessibleLogger.getLogger().fine("nativeContainer: " +
-                Long.toHexString(nativeContainer));
-        }
-        return nativeContainer;
-    }
-    
-    /**
-     * Return the ID of the pattern supported by this class
-     */
-    public int getPatternId() {
-        return PatternIds.GRID_ITEM ;
-    }
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleGridProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.GridProvider;
-import com.sun.javafx.accessible.utils.PatternIds;
-
-public final class WinAccessibleGridProvider extends WinAccessibleBasePatternProvider {
-
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();
-    native protected long _createAccessible(long nativeBaseProvider);
-    native private void _destroyAccessible(long nativeAccessible);
-
-    private long nativeAccessible;  // The native accessible
-
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param baseProvider  the base provider which this pattern provider is chained to.
-     */
-    public WinAccessibleGridProvider(Object node, WinAccessibleBaseProvider baseProvider) {
-        super(node);
-        nativeAccessible = _createAccessible(baseProvider.getNativeAccessible());
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-
-    /**
-     * For WinAccessibleGridProvider - getColumnCount
-     *
-     * @return the ColumnCount
-     */
-    private int getColumnCount() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleGridProvider.getColumnCount");
-        return ((GridProvider)node).getColumnCount();
-    }
-
-    /**
-     * For WinAccessibleGridProvider - getRowCount
-     *
-     * @return the RowCount
-     */
-    private int getRowCount() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleGridProvider.getRowCount");
-        return ((GridProvider)node).getRowCount();
-    }
-    
-    /**
-     * For WinAccessibleGridProvider - getItem
-     *
-     * @return the native accessible at the specified indexes.
-     */
-    private long getItem(int row, int col) {
-        long item = 0;
-        if (node instanceof GridProvider) {
-            Object glassItem = ((GridProvider)node).getItem(row, col);
-            if (glassItem instanceof WinAccessibleBaseProvider) {
-                item = ((WinAccessibleBaseProvider)glassItem).getNativeAccessible();
-            }
-        }
-        return item;
-    }
-    
-    /**
-     * Return the ID of the pattern supported by this class
-     */
-    @Override
-    public int getPatternId() {
-        return PatternIds.GRID ;
-    }
-
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleRangeValueProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.javafx.accessible.providers.RangeValueProvider;
-import com.sun.javafx.accessible.utils.PatternIds;
-/**
- *
- * @author paru
- */
-public final class WinAccessibleRangeValueProvider extends WinAccessibleBasePatternProvider {
-
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();
-    native protected long _createAccessible(long nativeBaseProvider);
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
-    private double storeValue = -1;  // TODO: add description
-    private double smallChange = -1;  // TODO: add description
-    
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node          the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public WinAccessibleRangeValueProvider(Object node, WinAccessibleBaseProvider provider) {
-        super(node);
-        nativeAccessible = _createAccessible(provider.getNativeAccessible());
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    /**
-     * Get the value
-     * 
-     * @return the value 
-     */
-    private double getValue() {
-        if (storeValue == -1) {
-            storeValue = ((RangeValueProvider)node).getValue();
-        }
-        double currentValue = ((RangeValueProvider)node).getValue();
-        smallChange = Math.abs(storeValue - currentValue);
-        return ((RangeValueProvider)node).getValue();
-    }
-    
-    /**
-     * Set the value
-     */
-    private void setValue() {
-        // do nothing: not sure we want to setValue on the slider?
-    }
-    
-    /**
-     * Get the Minimum value
-     * 
-     * @return the minimum value 
-     */
-    private double getMinimum() {
-        return ((RangeValueProvider)node).getMinimum();
-    }
-    
-    /**
-     * Get the Maximum value
-     * 
-     * @return the maximum value 
-     */
-    private double getMaximum() {
-        return ((RangeValueProvider)node).getMaximum();
-    }
-    
-    /**
-     * Determine if the control's value is read only
-     * 
-     * @return whether or not the control's value is read only
-     */
-    private boolean getIsReadOnly() {
-        return ((RangeValueProvider)node).isReadOnly();
-    }
-    
-    /**
-     * TODO: Add Description
-     * 
-     * @return TODO: Add description
-     */
-    private double getSmallChange() {
-        return smallChange;
-    }
-    
-    // TODO: Add getLargeChange?
-
-    /**
-     * Return the ID of the pattern supported by this class
-     */
-    @Override
-    public int getPatternId() {
-        return PatternIds.RANGE_VALUE;
-    }
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleRoot.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.Window;
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.glass.ui.accessible.AccessibleRoot;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
-import com.sun.javafx.accessible.utils.NavigateDirection;
-import java.util.HashMap;
-
-/**
- * Windows platform implementation class for AccessibleRoot.
- */
-public final class WinAccessibleRoot extends AccessibleRoot {
-    
-    private static final HashMap<Integer, NavigateDirection> directionMap =
-        new HashMap<Integer, NavigateDirection>();
-
-    static {
-        // Initialize the JNI method IDs.
-        _initIDs();
-        
-        // Initialize directionMap
-        for (NavigateDirection type : NavigateDirection.values()) {
-            directionMap.put(type.ordinal(), type);
-        }
-    }
-    
-    native private static void _initIDs();
-    native private long _createAccessible();
-    native private void _setAccessibilityInitIsComplete(long hwnd, long nativeAccessible);
-    native private void _destroyAccessible(long nativeAccessible);
-    native private void _fireEvent(long nativeAccessible, int eventID);
-    
-    private long hwnd;  // the native window handle
-    private long nativeAccessible;  // the native accessible
-    
-    /**
-     * Construct the platform dependent Java side of the native accessible.  This
-     * will be used when firing events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param window    the associated top level Glass Window object.
-     */
-    public WinAccessibleRoot(Object node, Window window) {
-        super(node);
-        nativeAccessible = _createAccessible();
-        hwnd = window.getNativeWindow();
-    }
-    
-    /**
-     * Get the reference to the native accessible.
-     * 
-     * @return a reference to the native accessible.
-     */
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    ////////////////////////////////////
-    //
-    // Start of downcalls to native code
-    //
-    ////////////////////////////////////
-    
-    /*
-     * Signal that initialization is complete.
-     */
-    @Override
-    public void setAccessibilityInitIsComplete() {
-        _setAccessibilityInitIsComplete(hwnd, nativeAccessible);
-    }
-    
-    /**
-     * Destroy the native accessible
-     */
-    @Override
-    public void destroyAccessible() {
-        if (nativeAccessible != 0) {
-            _destroyAccessible(nativeAccessible);
-        }
-    }
-
-    /**
-     * Fire an event
-     * 
-     * @param eventID   identifies the event.
-     */
-    @Override
-    public void fireEvent(int eventID) {
-        AccessibleLogger.getLogger().fine("this: " + this);
-        AccessibleLogger.getLogger().fine("nativeAccessible: " + Long.toHexString(nativeAccessible));
-        AccessibleLogger.getLogger().fine("eventID: " + eventID);
-        _fireEvent(nativeAccessible, eventID);
-    }
-    
-    //////////////////////////////////
-    //
-    // End of downcalls to native code
-    //
-    //////////////////////////////////
-    
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    /**
-     * For AccessibleProvider - get_HostRawElementProvider
-     *
-     * @return address of native accessible of root object
-     */
-    private long getHostHwnd() {
-        //AccessibleLogger.getLogger().fine("  Thread ID: " + Thread.currentThread().getId());
-        AccessibleLogger.getLogger().fine("Returning hwnd: " + Long.toHexString(hwnd));
-        return hwnd;
-    }
-    
-    /**
-     * For AccessibleProvider - Navigate
-     * 
-     * @param direction  parent, first/last child, prev/next sibling
-     *
-     * @return address of the requested native accessible or 0 if there is no target
-     *         in the requested direction.
-     * 
-     * Note: Roots have no parents or siblings.
-     */
-    private long navigate(int direction) {
-        //AccessibleLogger.getLogger().fine("  Thread ID: " + Thread.currentThread().getId());
-        AccessibleLogger.getLogger().fine("direction: " + directionMap.get(direction));
-        Object target =
-            ((AccessibleProvider)node).navigate(directionMap.get(direction));
-        if (target == null) {
-            AccessibleLogger.getLogger().fine("No object in that direction.");
-            return 0;
-        } else {
-            long nativeTarget = ((WinAccessibleBaseProvider)target).getNativeAccessible();
-            AccessibleLogger.getLogger().fine("nativeTarget:  " + Long.toHexString(nativeTarget));
-            return nativeTarget;
-        }
-    }
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleSelectionItemProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.SelectionItemProvider;
-import com.sun.javafx.accessible.utils.PatternIds;
-
-/**
- * Windows platform implementation class for Accessible.
- */
-public final class WinAccessibleSelectionItemProvider extends WinAccessibleBasePatternProvider {
-
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();
-    native protected long _createAccessible(long nativeBaseProvider);
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
-
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public WinAccessibleSelectionItemProvider(Object node, WinAccessibleBaseProvider provider) {
-        super(node);
-        nativeAccessible = _createAccessible(provider.getNativeAccessible());
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    /**
-     * For SelectionItemProvider - get_IsSelected
-     *
-     * @return the state
-     */
-    private boolean getIsSelected() {
-        return ((SelectionItemProvider)node).isSelected();
-    }
-
-    /**
-     * Gets the provider that implements the SelectionProvider pattern and acts as the
-     * container for the calling object. 
-     * 
-     * @return the native accessible for the selection container
-     */
-    private long getSelectionContainer() {
-        //AccessibleLogger.getLogger().fine("Thread ID: " + Thread.currentThread().getId());
-        long nativeContainer = 0;
-        if (node instanceof SelectionItemProvider) {
-            WinAccessibleBaseProvider container =
-                (WinAccessibleBaseProvider)((SelectionItemProvider)node).getSelectionContainer();
-            if (container != null) {
-                nativeContainer = container.getNativeAccessible();
-            }
-        }
-        AccessibleLogger.getLogger().fine("nativeContainer:  " + Long.toHexString(nativeContainer));
-        return nativeContainer;
-    }
-
-    /**
-     * Return the ID of the pattern supported by this class
-     */
-    @Override
-    public int getPatternId() {
-        return PatternIds.SELECTION_ITEM ;
-    }
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleSelectionProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.SelectionProvider;
-import com.sun.javafx.accessible.utils.PatternIds;
-
-public final class WinAccessibleSelectionProvider extends WinAccessibleBasePatternProvider {
-
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-    
-    native private static void _initIDs();
-    native protected long _createAccessible(long nativeBaseProvider);
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible    
-
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node          the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public WinAccessibleSelectionProvider(Object node, WinAccessibleBaseProvider provider) {
-        super(node);
-        nativeAccessible = _createAccessible(provider.getNativeAccessible());
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    private boolean canSelectMultiple() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleSelectionProvider.canSelectMultiple");
-        boolean bRet = false;
-        if (node instanceof SelectionProvider) {
-            bRet = ((SelectionProvider)node).canSelectMultiple() ;
-        }
-        AccessibleLogger.getLogger().fine("In WinAccessibleSelectionProvider.canSelectMultiple" + bRet);
-        return bRet ;
-    }
-
-    private long[] getSelection() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleSelectionProvider.getSelection");        
-        long[] selection = null;
-        if (node instanceof SelectionProvider) {
-            Object[] selectedItems = ((SelectionProvider)node).getSelection();
-            int size = selectedItems.length;
-            selection = new long[size];
-            for (int idx=0; idx<size; idx++) {
-                if (selectedItems[idx] instanceof WinAccessibleBasePatternProvider) {
-                    selection[idx] =
-                        ((WinAccessibleBasePatternProvider)selectedItems[idx]).getNativeAccessible();
-                } else {
-                    selection = null;
-                    break;
-                }
-            }
-        }
-        AccessibleLogger.getLogger().fine("returning: " + selection);
-        return selection;
-    }
-
-    private boolean isSelectionRequired() {
-        AccessibleLogger.getLogger().fine("In WinAccessibleSelectionProvider.isSelectionRequired"); 
-        boolean bRet = false;
-        if (node instanceof SelectionProvider) {
-            bRet = ((SelectionProvider)node).isSelectionRequired();
-        }
-        AccessibleLogger.getLogger().fine("In WinAccessibleSelectionProvider.isSelectionRequired" + bRet);
-        return bRet ;
-        
-    }
-    
-    /**
-     * Return the ID of the pattern supported by this class
-     */
-    @Override
-    public int getPatternId() {
-        return PatternIds.SELECTION ;
-    }
-
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-    
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/accessible/win/WinAccessibleToggleProvider.java	Tue Mar 18 11:51:33 2014 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, 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
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.glass.ui.accessible.win;
-
-import com.sun.glass.ui.accessible.AccessibleLogger;
-import com.sun.javafx.accessible.providers.ToggleProvider;
-import com.sun.javafx.accessible.utils.PatternIds;
-import com.sun.javafx.accessible.utils.ToggleState;
-
-/**
- * Windows platform implementation class for Accessible.
- */
-public final class WinAccessibleToggleProvider extends WinAccessibleBasePatternProvider {
-
-    /**
-     * A class static block that initializes the JNI method IDs.
-     */
-    static {
-        _initIDs();
-    }
-
-    native private static void _initIDs();
-    native protected long _createAccessible(long nativeBaseProvider);
-    native private void _destroyAccessible(long nativeAccessible);
-    
-    private long nativeAccessible;  // The native accessible
-
-    /**
-     * Downcall to create the native accessible.  This will be used when firing
-     * events or when destroying the native accessible.
-     * 
-     * @param node      the related FX node object.
-     * @param provider  the base provider which this pattern provider is chained to.
-     */
-    public WinAccessibleToggleProvider(Object node, WinAccessibleBaseProvider provider) {
-        super(node);
-        nativeAccessible = _createAccessible(provider.getNativeAccessible());
-    }
-    
-    /**
-     * Get the native accessible
-     * 
-     * @return the native accessible
-     */
-    @Override
-    long getNativeAccessible() {
-        return nativeAccessible;
-    }
-    
-    // Downcalls
-    
-    /**
-     * Destroy the native accessible
-     * 
-     */
-    @Override
-    public void destroyAccessible() {
-        _destroyAccessible(nativeAccessible);
-    }
-    
-    ////////////////////////////////////
-    //
-    // Start of upcalls from native code
-    //
-    ////////////////////////////////////
-    
-    // Note:
-    //   These upcalls are from a native UIA implementation.  This code translates
-    //   the upcalls to the UIA-like implementation used in the JavaFX accessibility 
-    //   implementation.
-    
-    /**
-     * For ToggleProvider - get_ToggleState
-     *
-     * @return the state: 0 == OFF, 1 == ON, 2 == INDETERMINATE
-     */
-    private int getToggleState() {
-        int value = 2;
-        ToggleState state = ((ToggleProvider)node).getToggleState();
-        switch (state) {
-            case OFF:
-                value = 0;
-                break;
-            case ON:
-                value = 1;
-                break;
-            case INDETERMINATE:
-                value = 2;
-                break;
-        }
-        return value;
-    }
-
-    /**
-     * Return the ID of the pattern supported by this class
-     */
-    @Override
-    public int getPatternId() {
-        return PatternIds.TOGGLE;
-    }
-    
-    //////////////////////////////////
-    //
-    // End of upcalls from native code
-    //
-    //////////////////////////////////
-
-}
--- a/modules/graphics/src/main/java/com/sun/glass/ui/gtk/GtkPlatformFactory.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/gtk/GtkPlatformFactory.java	Tue Mar 18 12:50:23 2014 -0700
@@ -34,9 +34,6 @@
 import com.sun.glass.ui.delegate.MenuBarDelegate;
 import com.sun.glass.ui.delegate.MenuDelegate;
 import com.sun.glass.ui.delegate.MenuItemDelegate;
-import com.sun.glass.ui.accessible.AccessibleBaseProvider;
-import com.sun.glass.ui.accessible.AccessibleRoot;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 
 public final class GtkPlatformFactory extends PlatformFactory {
 
@@ -44,15 +41,6 @@
         return new GtkApplication();
     }
     
-    @Override
-    public AccessibleRoot createAccessibleRoot(Object node, Window window) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-    
-    @Override public AccessibleBaseProvider createAccessibleProvider(Object node) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-    
     @Override public MenuBarDelegate createMenuBarDelegate(MenuBar menubar) {
         return new GtkMenuBarDelegate();
     }
--- a/modules/graphics/src/main/java/com/sun/glass/ui/ios/IosPlatformFactory.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/ios/IosPlatformFactory.java	Tue Mar 18 12:50:23 2014 -0700
@@ -26,13 +26,10 @@
 package com.sun.glass.ui.ios;
 
 import com.sun.glass.ui.*;
-import com.sun.glass.ui.accessible.AccessibleBaseProvider;
-import com.sun.glass.ui.accessible.AccessibleRoot;
 import com.sun.glass.ui.delegate.ClipboardDelegate;
 import com.sun.glass.ui.delegate.MenuBarDelegate;
 import com.sun.glass.ui.delegate.MenuDelegate;
 import com.sun.glass.ui.delegate.MenuItemDelegate;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 
 @SuppressWarnings({"UnusedDeclaration"})
 public final class IosPlatformFactory extends PlatformFactory {
@@ -76,20 +73,4 @@
     public ClipboardDelegate createClipboardDelegate() {
         return new IosClipboardDelegate();
     }
-
-    /**
-     * @inheritDoc 
-     */
-    @Override
-    public AccessibleRoot createAccessibleRoot(Object node, Window window) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    /**
-     * @inheritDoc 
-     */
-    @Override
-    public AccessibleBaseProvider createAccessibleProvider(Object node) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
 }
--- a/modules/graphics/src/main/java/com/sun/glass/ui/lens/LensPlatformFactory.java	Tue Mar 18 11:51:33 2014 -0400
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/lens/LensPlatformFactory.java	Tue Mar 18 12:50:23 2014 -0700
@@ -31,13 +31,10 @@
 import com.sun.glass.ui.MenuItem;
 import com.sun.glass.ui.PlatformFactory;
 import com.sun.glass.ui.Window;
-import com.sun.glass.ui.accessible.AccessibleBaseProvider;
-import com.sun.glass.ui.accessible.AccessibleRoot;
 import com.sun.glass.ui.delegate.ClipboardDelegate;
 import com.sun.glass.ui.delegate.MenuBarDelegate;
 import com.sun.glass.ui.delegate.MenuDelegate;
 import com.sun.glass.ui.delegate.MenuItemDelegate;
-import com.sun.javafx.accessible.providers.AccessibleProvider;
 
 public final class LensPlatformFactory extends PlatformFactory {
 
@@ -61,13 +58,4 @@
         return new LensClipboardDelegate();
     }
 
-    @Override
-    public AccessibleRoot createAccessibleRoot(Object node, Window window) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
-    public AccessibleBaseProvider createAccessibleProvider(Object node) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/modules/graphics/src/main/java/com/sun/glass/ui/mac/MacAccessible.java	Tue Mar 18 12:50:23 2014 -0700
@@ -0,0 +1,1214 @@
+/*
+ * Copyright (c) 2013, 2014, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.glass.ui.mac;
+
+import java.util.function.Function;
+import java.util.stream.Stream;
+import javafx.collections.ObservableList;
+import javafx.geometry.BoundingBox;
+import javafx.geometry.Bounds;
+import javafx.geometry.Point2D;
+import javafx.geometry.Orientation;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.Node;
+import javafx.scene.accessibility.Accessible;
+import javafx.scene.accessibility.Action;
+import javafx.scene.accessibility.Attribute;
+import javafx.scene.accessibility.Role;
+import com.sun.glass.ui.PlatformAccessible;
+import com.sun.glass.ui.Screen;
+import com.sun.glass.ui.View;
+import static javafx.scene.accessibility.Attribute.*;
+
+/**
+ * Native Interface - Implements NSAccessibility Protocol
+ *
+ */
+final class MacAccessible extends PlatformAccessible {
+
+    private native static void _initIDs();
+    private native static boolean _initEnum(String enumName);
+    static {
+        _initIDs();
+        if (!_initEnum("MacAttributes")) {
+            System.err.println("Fail linking MacAttributes");
+        }
+        if (!_initEnum("MacActions")) {
+            System.err.println("Fail linking MacActions");
+        }
+        if (!_initEnum("MacRoles")) {
+            System.err.println("Fail linking MacRoles");
+        }
+        if (!_initEnum("MacSubroles")) {
+            System.err.println("Fail linking MacNotifications");
+        }
+        if (!_initEnum("MacNotifications")) {
+            System.err.println("Fail linking MacNotifications");
+        }
+        if (!_initEnum("MacOrientations")) {
+            System.err.println("Fail linking MacOrientations");
+        }
+    }
+
+    enum MacAttributes {
+        // Dynamic mapping to FX attribute, dynamic return type
+        NSAccessibilityValueAttribute(null, null),
+
+        // 1-to-1 mapping between FX attribute and Mac attribute, static return type
+        NSAccessibilityChildrenAttribute(CHILDREN, MacVariant::createNSArray),
+        NSAccessibilityDescriptionAttribute(DESCRIPTION, MacVariant::createNSString),
+        NSAccessibilityEnabledAttribute(ENABLED, MacVariant::createNSNumberForBoolean),
+        NSAccessibilityHelpAttribute(TOOLTIP, MacVariant::createNSString),
+
+        /* FOCUSED might not match the result of accessibilityFocusedUIElement() cause of FOCUS_ITEM */
+        NSAccessibilityFocusedAttribute(FOCUSED, MacVariant::createNSNumberForBoolean),
+        NSAccessibilityExpandedAttribute(EXPANDED, MacVariant::createNSNumberForBoolean),
+        NSAccessibilityMaxValueAttribute(MAX_VALUE, MacVariant::createNSNumberForDouble),
+        NSAccessibilityMinValueAttribute(MIN_VALUE, MacVariant::createNSNumberForDouble),
+        NSAccessibilityParentAttribute(PARENT, MacVariant::createNSObject),
+        NSAccessibilityPositionAttribute(BOUNDS, MacVariant::createNSValueForPoint),
+        NSAccessibilityRoleAttribute(ROLE, MacVariant::createNSObject),
+        NSAccessibilitySubroleAttribute(ROLE, MacVariant::createNSObject),
+        NSAccessibilityRoleDescriptionAttribute(ROLE, MacVariant::createNSString),
+        NSAccessibilitySizeAttribute(BOUNDS, MacVariant::createNSValueForSize),
+        NSAccessibilityTabsAttribute(null, MacVariant::createNSArray),
+        NSAccessibilityTitleAttribute(TITLE, MacVariant::createNSString),
+        NSAccessibilityTopLevelUIElementAttribute(SCENE, MacVariant::createNSObject),
+        NSAccessibilityWindowAttribute(SCENE, MacVariant::createNSObject),
+        NSAccessibilityTitleUIElementAttribute(LABELED_BY, MacVariant::createNSObject),
+        NSAccessibilityOrientationAttribute(ORIENTATION, MacVariant::createNSObject),
+        NSAccessibilityOverflowButtonAttribute(OVERFLOW_BUTTON, MacVariant::createNSObject),
+
+        // Custom attributes
+        NSAccessibilityVisitedAttribute(VISITED, MacVariant::createNSNumberForBoolean),
+
+        // NSAccessibilityStaticText
+        NSAccessibilityNumberOfCharactersAttribute(TITLE, MacVariant::createNSNumberForInt),
+        NSAccessibilitySelectedTextAttribute(SELECTION_START, MacVariant::createNSString),
+        NSAccessibilitySelectedTextRangeAttribute(SELECTION_START, MacVariant::createNSValueForRange),
+        NSAccessibilitySelectedTextRangesAttribute(null, null), //TODO Array of ranges
+        NSAccessibilityInsertionPointLineNumberAttribute(SELECTION_START, MacVariant::createNSNumberForInt),
+        NSAccessibilityVisibleCharacterRangeAttribute(TITLE, MacVariant::createNSValueForRange),
+
+        // NSAccessibilityScrollAreaRole
+        NSAccessibilityContentsAttribute(CONTENTS, MacVariant::createNSArray),
+        NSAccessibilityHorizontalScrollBarAttribute(HORIZONTAL_SCROLLBAR, MacVariant::createNSObject),
+        NSAccessibilityVerticalScrollBarAttribute(VERTICAL_SCROLLBAR, MacVariant::createNSObject),
+
+        // NSAccessibilityRowRole
+        NSAccessibilityIndexAttribute(INDEX, MacVariant::createNSNumberForInt),
+        NSAccessibilitySelectedAttribute(SELECTED, MacVariant::createNSNumberForBoolean),
+        NSAccessibilityVisibleChildrenAttribute(CHILDREN, MacVariant::createNSArray),
+
+        // NSAccessibilityOutlineRowRole
+        NSAccessibilityDisclosedByRowAttribute(TREE_ITEM_PARENT, MacVariant::createNSObject),
+        NSAccessibilityDisclosedRowsAttribute(null, null), // virtual only
+        NSAccessibilityDisclosingAttribute(EXPANDED, MacVariant::createNSNumberForBoolean),
+        NSAccessibilityDisclosureLevelAttribute(DISCLOSURE_LEVEL, MacVariant::createNSNumberForInt),
+
+        // NSAccessibilityTableRole
+        NSAccessibilityColumnsAttribute(null, null), //virtual only
+        NSAccessibilityRowsAttribute(null, null), //virtual only
+        NSAccessibilityHeaderAttribute(HEADER, MacVariant::createNSObject),
+        NSAccessibilitySelectedRowsAttribute(SELECTED_ROWS, MacVariant::createNSArray),
+        NSAccessibilityRowCountAttribute(ROW_COUNT, MacVariant::createNSNumberForInt),
+        NSAccessibilityColumnCountAttribute(COLUMN_COUNT, MacVariant::createNSNumberForInt),
+        NSAccessibilitySelectedCellsAttribute(SELECTED_CELLS, MacVariant::createNSArray),
+        NSAccessibilityRowIndexRangeAttribute(ROW_INDEX, MacVariant::createNSValueForRange),
+        NSAccessibilityColumnIndexRangeAttribute(COLUMN_INDEX, MacVariant::createNSValueForRange),
+
+        /* Parameterized Attributes */
+        NSAccessibilityLineForIndexParameterizedAttribute(SELECTION_START, MacVariant::createNSNumberForInt, MacVariant.NSNumber_Int),
+        NSAccessibilityStringForRangeParameterizedAttribute(TITLE, MacVariant::createNSString, MacVariant.NSValue_range),
+        NSAccessibilityRangeForLineParameterizedAttribute(TITLE, MacVariant::createNSValueForRange, MacVariant.NSNumber_Int),
+        NSAccessibilityAttributedStringForRangeParameterizedAttribute(TITLE, MacVariant::crea