Naveen Kocherla
Naveen Kocherla

Reputation: 419

Drop event happening more than one time in SWT

I am implementing Drag and Drop functionality in SWT.

Here is my code snippet

For Drag

private class MyDragSourceAdapter extends DragSourceAdapter {

/** The m tree viewer. */
private final TreeViewer treeViewer;

/**
 * Instantiates a new my drag source adapter.
 * 
 * @param treeViewer the tree viewer
 */
public MyDragSourceAdapter(TreeViewer treeViewer) {
  this.treeViewer = treeViewer;
}

/**
 * {@inheritDoc}
 */
@Override
public void dragFinished(DragSourceEvent event) {
  // clean buffer
  // k = null;
}

/**
 * {@inheritDoc}
 */
@Override
public void dragSetData(DragSourceEvent event) {
    event.data = "test";
}

/**
 * {@inheritDoc}
 */
@Override
public void dragStart(DragSourceEvent event) {

  if (some condition) {
   // do something
    return;
  }
  event.doit = false;
}
}

For drop

private class MyDropTargetAdapter extends DropTargetAdapter {

@Override
public void dragEnter(DropTargetEvent event) {
  event.detail = DND.DROP_LINK;
}

/**
 * {@inheritDoc}
 */
@Override
public void dragOver(DropTargetEvent event) {
  // Do some functionality
}

/**
 * {@inheritDoc}
 */
@Override
public void drop(DropTargetEvent event) {
  event.detail = DND.DROP_NONE;
}
}

Some times "dragOver()" method called more than one time? So dragging is happening as many times as dragOver() method called.

I want drop operation to stop after first time.

Please help

Upvotes: 0

Views: 179

Answers (1)

Stefan S.
Stefan S.

Reputation: 4103

dragOver() happens when the mouse is still hovering over the control, before the actual drop happens. You probably mean to override drop(). But if you want the drop from stop happening altogether, set the field detail on the DropTargetEvent to DND.DROP_NONE.

Upvotes: 1

Related Questions