Bug 187189 [ViewMgmt] TreeViewer disposes of widget when the third item in the tree is deleted
Build ID: 3.3.0M7 Steps To Reproduce: 1.Run attached sample code 2.Use button to delete tree items from bottom until exception is thrown. 3. More information: M6 does not exhibit this behavior. Exception in thread "main" org.eclipse.swt.SWTException: Widget is disposed at org.eclipse.swt.SWT.error(SWT.java:3547) at org.eclipse.swt.SWT.error(SWT.java:3465) at org.eclipse.swt.SWT.error(SWT.java:3436) at org.eclipse.swt.widgets.Widget.error(Widget.java:432) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:325) at org.eclipse.swt.widgets.TreeItem.getBounds(TreeItem.java:401) at org.eclipse.jface.viewers.TreeViewerRow.getBounds(TreeViewerRow.java:48) at org.eclipse.jface.viewers.ViewerCell.getBounds(ViewerCell.java:83) at org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter.focusCellChanged(FocusCellOwnerDrawHighlighter.java:147) at org.eclipse.jface.viewers.SWTFocusCellManager.setFocusCell(SWTFocusCellManager.java:151) at org.eclipse.jface.viewers.SWTFocusCellManager.handleSelection(SWTFocusCellManager.java:101) at org.eclipse.jface.viewers.SWTFocusCellManager.access$2(SWTFocusCellManager.java:92) at org.eclipse.jface.viewers.SWTFocusCellManager$1.handleEvent(SWTFocusCellManager.java:126)
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/SWTFocusCellManager.java
}
	private void handleSelection(Event event) {
		if (focusCell != null && focusCell.getItem() != event.item
				&& event.item != null) {
			ViewerRow row = viewer.getViewerRowFromItem(event.item);
			Assert
					.isNotNull(row,
							"Internal Structure invalid. Row item has no row ViewerRow assigned"); 
			ViewerCell tmp = row.getCell(focusCell.getColumnIndex());
			if (!focusCell.equals(tmp)) {
				setFocusCell(tmp);
			}
		}
	}
	private void handleFocusIn(Event event) {
		if (focusCell == null) {
			setFocusCell(getInitialFocusCell());
		}
	}
	abstract ViewerCell getInitialFocusCell();
	private void hookListener(ColumnViewer viewer) {
		Listener listener = new Listener() {
			public void handleEvent(Event event) {
				switch (event.type) {
				case SWT.MouseDown:
					handleMouseDown(event);
					break;
				case SWT.KeyDown:
					handleKeyDown(event);
					break;