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
cell);
					tmp.eventType = ColumnViewerEditorDeactivationEvent.EDITOR_SAVED;
					if (editorActivationListener != null
							&& !editorActivationListener.isEmpty()) {
						Object[] ls = editorActivationListener.getListeners();
						for (int i = 0; i < ls.length; i++) {
							((ColumnViewerEditorActivationListener) ls[i])
									.beforeEditorDeactivated(tmp);
						}
					}
					Item t = (Item) this.cell.getItem();
					
					if (t != null && !t.isDisposed()) {
						saveEditorValue(c);
					}
					if( !viewer.getControl().isDisposed() ) {
						setEditor(null, null, 0);
					}
					c.removeListener(cellEditorListener);
					Control control = c.getControl();
					if (control != null && !control.isDisposed() ) {
						if (mouseListener != null) {
							control.removeMouseListener(mouseListener);
							
							mouseListener = null;
						}
						if (focusListener != null) {
							control.removeFocusListener(focusListener);
						}
						if (tabeditingListener != null) {