Skip to content

Commit

Permalink
Properly end HTML5 drag operations when no drop is performed (#8242)
Browse files Browse the repository at this point in the history
* Properly end HTML5 drag operations when no drop is performed

No auto test because of SeleniumHQ/selenium#1365

Fixes #4060
  • Loading branch information
Artur- authored and Denis committed Jan 19, 2017
1 parent cb0e182 commit 5e842da
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,7 @@ public boolean html5DragOver(VHtml5DragEvent event) {

public boolean html5DragDrop(VHtml5DragEvent event) {
if (dropHandler == null || !currentlyValid) {
VDragAndDropManager.get().interruptDrag();
return true;
}
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.vaadin.tests.components.draganddropwrapper;

import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.event.dd.acceptcriteria.ClientSideCriterion;
import com.vaadin.event.dd.acceptcriteria.Not;
import com.vaadin.server.ThemeResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
import com.vaadin.ui.Image;

public class Html5DropDenied extends AbstractTestUIWithLog {

@Override
protected void setup(VaadinRequest request) {
Image sample = new Image();
sample.setSource(new ThemeResource("../runo/icons/64/document.png"));

Button neverButton = new Button("Never accepts drop");
neverButton.setId("never");
neverButton.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
log("click on " + event.getButton().getCaption());
}
});

DragAndDropWrapper neverAccept = new DragAndDropWrapper(neverButton);
neverAccept.setSizeFull();
neverAccept.setDragStartMode(DragStartMode.NONE);
neverAccept.setDropHandler(new DropHandler() {

@Override
public AcceptCriterion getAcceptCriterion() {
return new Not((ClientSideCriterion) AcceptAll.get());
}

@Override
public void drop(DragAndDropEvent event) {
log("This should never happen");
}
});
Button alwaysButton = new Button("always accepts drop");
alwaysButton.setId("always");
alwaysButton.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
log("click on " + event.getButton().getCaption());
}
});

DragAndDropWrapper alwaysAccept = new DragAndDropWrapper(alwaysButton);
alwaysAccept.setSizeFull();
alwaysAccept.setDragStartMode(DragStartMode.NONE);
alwaysAccept.setDropHandler(new DropHandler() {

@Override
public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}

@Override
public void drop(DragAndDropEvent event) {
log("Drop on always accept");
}
});

addComponent(sample);
addComponent(neverAccept);
addComponent(alwaysAccept);

}

}

0 comments on commit 5e842da

Please sign in to comment.