diff -up ./build.xml.bug291128 ./build.xml
--- ./build.xml.bug291128 2009-12-22 15:32:52.000000000 -0500
+++ ./build.xml 2009-12-22 15:34:07.000000000 -0500
@@ -247,6 +247,7 @@
+
diff -u /dev/null patches/swtbug291128.patch
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/swtbug291128.patch 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,33 @@
+### Eclipse Workspace Patch 1.0
+#P org.eclipse.swt
+Index: Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java
+===================================================================
+RCS file: /cvsroot/eclipse/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java,v
+retrieving revision 1.46
+diff -u -r1.46 AccessibleObject.java
+--- Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java 29 May 2009 21:30:30 -0000 1.46
++++ Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/AccessibleObject.java 22 Dec 2009 17:05:15 -0000
+@@ -1176,7 +1176,12 @@
+ }
+
+ static AccessibleObject getAccessibleObject (int /*long*/ atkObject) {
+- return (AccessibleObject)AccessibleObjects.get (new LONG (atkObject));
++ AccessibleObject object = (AccessibleObject)AccessibleObjects.get (new LONG (atkObject));
++ if (object == null) return null;
++ if (object.accessible == null) return null;
++ Control control = object.accessible.control;
++ if (control == null || control.isDisposed()) return null;
++ return object;
+ }
+
+ AccessibleObject getChildByHandle (int /*long*/ handle) {
+@@ -1252,7 +1257,7 @@
+ GObjectClass objectClassStruct = new GObjectClass ();
+ ATK.memmove (objectClassStruct, gObjectClass);
+ ATK.call (objectClassStruct.finalize, atkObject);
+- AccessibleObject object = getAccessibleObject (atkObject);
++ AccessibleObject object = (AccessibleObject)AccessibleObjects.get (new LONG (atkObject));
+ if (object != null) {
+ AccessibleObjects.remove (new LONG (atkObject));
+ object.release ();
+