Bug 216706 [Viewers] Disable 'check for expiration of doubleClickTime' in TreeViewer and TableViewer
I use the TextCellEditor within the TreeViewer and TableViewer. When clicking on a cell to edit it the full text is selected (on win and gtk at least). At this point if I immediately click again (to position the cursor at a specific point within the text) the edit is cancelled. If I wait a bit before clicking again then the cursor is repositioned as expected. You could reproduce it by using the Tasks view. I guess the following code in TreeViewerImpl and TableViewerImpl is responsible for this behaviour: -------------------- snip -------------------------- private void activateCellEditor() { ... mouseListener = new MouseAdapter() { public void mouseDown(MouseEvent e) { // time wrap? // check for expiration of doubleClickTime if (e.time <= doubleClickExpirationTime) { control.removeMouseListener(mouseListener); cancelEditing(); handleDoubleClickEvent(); } else if (mouseListener != null) { control.removeMouseListener(mouseListener); } } }; control.addMouseListener(mouseListener); ... } -------------------- snap -------------------------- So clicking the second time within the doubleClickExpirationTime cancels editing. Is it possible to add a flag to disable this behaviour, or to remove it completely?
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewerEditor.java
} else if ((feature & TABBING_HORIZONTAL) == TABBING_HORIZONTAL) {
				cell2edit = searchNextCell(row, row.getCell(columnIndex), row
						.getCell(columnIndex), viewer);
			}
		}
		if (cell2edit != null) {
			viewer.getControl().setRedraw(false);
			ColumnViewerEditorActivationEvent acEvent = new ColumnViewerEditorActivationEvent(
					cell2edit, event);
			viewer.triggerEditorActivationEvent(acEvent);
			viewer.getControl().setRedraw(true);
		}
	}
	private ViewerCell searchCellAboveBelow(ViewerRow row, ColumnViewer viewer,
			int columnIndex, boolean above) {
		ViewerCell rv = null;
		ViewerRow newRow = null;
		if (above) {
			newRow = row.getNeighbor(ViewerRow.ABOVE, false);
		} else {
			newRow = row.getNeighbor(ViewerRow.BELOW, false);
		}
		if (newRow != null) {
			ViewerColumn column = viewer.getViewerColumn(columnIndex);
			if (column != null
					&& column.getEditingSupport() != null
					&& column.getEditingSupport().canEdit(
							newRow.getItem().getData())) {
				rv = newRow.getCell(columnIndex);
			} else {