try { notifyListeners(DND.DragOver, event); } catch (Throwable e) { event.dataType = null; event.detail  = DND.DROP_NONE; }
selectedDataType = null; selectedOperation = DND.DROP_NONE; notifyListeners(DND.DragOver, event);
		public void run() {			if (DropTarget.this.control.isDisposed() || dragOverStart == 0) return;			long time = System.currentTimeMillis();			int delay = DRAGOVER_HYSTERESIS;			if (time < dragOverStart) {				delay = (int)(dragOverStart - time);			} else {					int allowedOperations = dragOverEvent.operations;				TransferData[] allowedTypes = dragOverEvent.dataTypes;				//pass a copy of data types in to listeners in case application modifies it				TransferData[] dataTypes = new TransferData[allowedTypes.length];				System.arraycopy(allowedTypes, 0, dataTypes, 0, dataTypes.length);					DNDEvent event = new DNDEvent();				event.widget = dragOverEvent.widget;				event.x = dragOverEvent.x;				event.y = dragOverEvent.y;				event.time = (int)time;				event.feedback = DND.FEEDBACK_SELECT;				event.dataTypes = dataTypes;				event.dataType = selectedDataType;				event.operations = dragOverEvent.operations;				event.detail  = selectedOperation;								try {					notifyListeners(DND.DragOver, event);				} catch (Throwable e) {					event.dataType = null;					event.detail  = DND.DROP_NONE;				}								effect.show(event.feedback, event.x, event.y);								selectedDataType = null;				if (event.dataType != null) {					for (int i = 0; i < allowedTypes.length; i++) {						if (allowedTypes[i].type == event.dataType.type) {							selectedDataType = event.dataType;							break;						}					}				}				selectedOperation = DND.DROP_NONE;				if (selectedDataType != null && (event.detail & allowedOperations) != 0) {					selectedOperation = event.detail;				}			}			DropTarget.this.control.getDisplay().timerExec(delay, dragOverHeartbeat);		}