View | Details | Raw Unified | Return to bug 275509 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jface/viewers/SWTFocusCellManager.java (-14 / +50 lines)
Lines 15-20 Link Here
15
15
16
import org.eclipse.core.runtime.Assert;
16
import org.eclipse.core.runtime.Assert;
17
import org.eclipse.swt.SWT;
17
import org.eclipse.swt.SWT;
18
import org.eclipse.swt.accessibility.ACC;
19
import org.eclipse.swt.accessibility.AccessibleAdapter;
20
import org.eclipse.swt.accessibility.AccessibleEvent;
18
import org.eclipse.swt.events.DisposeEvent;
21
import org.eclipse.swt.events.DisposeEvent;
19
import org.eclipse.swt.events.DisposeListener;
22
import org.eclipse.swt.events.DisposeListener;
20
import org.eclipse.swt.graphics.Point;
23
import org.eclipse.swt.graphics.Point;
Lines 25-33 Link Here
25
 * This class is responsible to provide cell management base features for the
28
 * This class is responsible to provide cell management base features for the
26
 * SWT-Controls {@link org.eclipse.swt.widgets.Table} and
29
 * SWT-Controls {@link org.eclipse.swt.widgets.Table} and
27
 * {@link org.eclipse.swt.widgets.Tree}.
30
 * {@link org.eclipse.swt.widgets.Tree}.
28
 *
31
 * 
29
 * @since 3.3
32
 * @since 3.3
30
 *
33
 * 
31
 */
34
 */
32
abstract class SWTFocusCellManager {
35
abstract class SWTFocusCellManager {
33
36
Lines 102-109 Link Here
102
	}
105
	}
103
106
104
	private void handleSelection(Event event) {
107
	private void handleSelection(Event event) {
105
		if ((event.detail & SWT.CHECK) == 0 && focusCell != null && focusCell.getItem() != event.item
108
		if ((event.detail & SWT.CHECK) == 0 && focusCell != null
106
				&& event.item != null && ! event.item.isDisposed() ) {
109
				&& focusCell.getItem() != event.item && event.item != null
110
				&& !event.item.isDisposed()) {
107
			ViewerRow row = viewer.getViewerRowFromItem(event.item);
111
			ViewerRow row = viewer.getViewerRowFromItem(event.item);
108
			Assert
112
			Assert
109
					.isNotNull(row,
113
					.isNotNull(row,
Lines 118-124 Link Here
118
	/**
122
	/**
119
	 * Handles the {@link SWT#FocusIn} event.
123
	 * Handles the {@link SWT#FocusIn} event.
120
	 * 
124
	 * 
121
	 * @param event the event
125
	 * @param event
126
	 *            the event
122
	 */
127
	 */
123
	private void handleFocusIn(Event event) {
128
	private void handleFocusIn(Event event) {
124
		if (focusCell == null) {
129
		if (focusCell == null) {
Lines 128-134 Link Here
128
133
129
	abstract ViewerCell getInitialFocusCell();
134
	abstract ViewerCell getInitialFocusCell();
130
135
131
	private void hookListener(ColumnViewer viewer) {
136
	private void hookListener(final ColumnViewer viewer) {
132
		Listener listener = new Listener() {
137
		Listener listener = new Listener() {
133
138
134
			public void handleEvent(Event event) {
139
			public void handleEvent(Event event) {
Lines 155-172 Link Here
155
		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
160
		viewer.addSelectionChangedListener(new ISelectionChangedListener() {
156
161
157
			public void selectionChanged(SelectionChangedEvent event) {
162
			public void selectionChanged(SelectionChangedEvent event) {
158
				if( event.selection.isEmpty() ) {
163
				if (event.selection.isEmpty()) {
159
					setFocusCell(null);
164
					setFocusCell(null);
160
				}
165
				}
161
			}
166
			}
162
167
163
		});
168
		});
164
		viewer.getControl().addListener(SWT.FocusIn, listener);
169
		viewer.getControl().addListener(SWT.FocusIn, listener);
170
		viewer.getControl().getAccessible().addAccessibleListener(
171
				new AccessibleAdapter() {
172
					public void getName(AccessibleEvent event) {
173
						ViewerCell cell = getFocusCell();
174
						if (cell == null)
175
							return;
176
						
177
						ViewerRow row = cell.getViewerRow();
178
						if (row == null)
179
							return;
180
						
181
						Object element = row.getItem().getData();
182
						ViewerColumn viewPart = viewer.getViewerColumn(cell
183
								.getColumnIndex());
184
						
185
						if (viewPart == null)
186
							return;
187
						
188
						ColumnLabelProvider labelProvider = (ColumnLabelProvider) viewPart
189
								.getLabelProvider();
190
						
191
						if (labelProvider == null)
192
							return;
193
						
194
						event.result = labelProvider.getText(element);
195
					}
196
				});
197
165
	}
198
	}
166
199
167
	/**
200
	/**
168
	 * @return the cell with the focus
201
	 * @return the cell with the focus
169
	 *
202
	 * 
170
	 */
203
	 */
171
	public ViewerCell getFocusCell() {
204
	public ViewerCell getFocusCell() {
172
		return focusCell;
205
		return focusCell;
Lines 175-195 Link Here
175
	void setFocusCell(ViewerCell focusCell) {
208
	void setFocusCell(ViewerCell focusCell) {
176
		ViewerCell oldCell = this.focusCell;
209
		ViewerCell oldCell = this.focusCell;
177
210
178
		if( this.focusCell != null && ! this.focusCell.getItem().isDisposed() ) {
211
		if (this.focusCell != null && !this.focusCell.getItem().isDisposed()) {
179
			this.focusCell.getItem().removeDisposeListener(itemDeletionListener);
212
			this.focusCell.getItem()
213
					.removeDisposeListener(itemDeletionListener);
180
		}
214
		}
181
215
182
		this.focusCell = focusCell;
216
		this.focusCell = focusCell;
183
217
184
		if( this.focusCell != null && ! this.focusCell.getItem().isDisposed() ) {
218
		if (this.focusCell != null && !this.focusCell.getItem().isDisposed()) {
185
			this.focusCell.getItem().addDisposeListener(itemDeletionListener);
219
			this.focusCell.getItem().addDisposeListener(itemDeletionListener);
186
		}
220
		}
187
221
188
		if( focusCell != null ) {
222
		if (focusCell != null) {
189
			focusCell.scrollIntoView();	
223
			focusCell.scrollIntoView();
190
		}
224
		}
225
226
		this.cellHighlighter.focusCellChanged(focusCell, oldCell);
191
		
227
		
192
		this.cellHighlighter.focusCellChanged(focusCell,oldCell);
228
		getViewer().getControl().getAccessible().setFocus(ACC.CHILDID_SELF);
193
	}
229
	}
194
230
195
	ColumnViewer getViewer() {
231
	ColumnViewer getViewer() {

Return to bug 275509