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
initCellEditorListener();
	}
	private void initCellEditorListener() {
		cellEditorListener = new ICellEditorListener() {
			public void editorValueChanged(boolean oldValidState,
					boolean newValidState) {
				
			}
			public void cancelEditor() {
				ColumnViewerEditor.this.cancelEditing();
			}
			public void applyEditorValue() {
				ColumnViewerEditor.this.applyEditorValue();
			}
		};
	}
	void activateCellEditor(ColumnViewerEditorActivationEvent activationEvent) {
		ViewerColumn part = viewer.getViewerColumn(cell.getColumnIndex());
		Object element = cell.getElement();
		if (part != null && part.getEditingSupport() != null
				&& part.getEditingSupport().canEdit(element)) {
			cellEditor = part.getEditingSupport().getCellEditor(element);
			if (cellEditor != null) {
				int timeout = cellEditor.getDoubleClickTimeout();
				final int activationTime;
				if( timeout != 0 ) {
					activationTime = activationEvent.time + timeout;
				} else {
					activationTime = 0;
				}