import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xhr.client.ReadyStateChangeHandler;
import com.google.gwt.xhr.client.XMLHttpRequest;
import com.vaadin.terminal.gwt.client.RenderInformation.Size;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
+import com.vaadin.terminal.gwt.client.VConsole;
import com.vaadin.terminal.gwt.client.ui.dd.DDUtil;
import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
import com.vaadin.terminal.gwt.client.ui.dd.VAbstractDropHandler;
private final static int WRAPPER = 2;
private int dragStarMode;
private int filecounter = 0;
- private boolean dragLeavPostponed;
private Map<String, String> fileIdToReveiver;
@Override
}
}
};
+ private Timer dragleavetimer;
private void startNextUpload() {
DeferredCommand.addCommand(new Command() {
}
public boolean html5DragEnter(VHtml5DragEvent event) {
+ VConsole.log("dragenter");
if (dropHandler == null) {
return true;
}
try {
+ Element elem = event.getEventTarget().cast();
+ if (elem == getElement()) {
+ VConsole.error("top element");
+ }
- if (dragLeavPostponed) {
+ if (dragleavetimer != null) {
// returned quickly back to wrapper
- dragLeavPostponed = false;
- return false;
+ dragleavetimer.cancel();
+ dragleavetimer = null;
+ }
+ if (VDragAndDropManager.get().getCurrentDropHandler() != getDropHandler()) {
+ VTransferable transferable = new VTransferable();
+ transferable.setDragSource(this);
+
+ vaadinDragEvent = VDragAndDropManager.get().startDrag(
+ transferable, event, false);
+ VDragAndDropManager.get().setCurrentDropHandler(
+ getDropHandler());
}
- VTransferable transferable = new VTransferable();
- transferable.setDragSource(this);
-
- vaadinDragEvent = VDragAndDropManager.get().startDrag(transferable,
- event, false);
- VDragAndDropManager.get().setCurrentDropHandler(getDropHandler());
event.preventDefault();
event.stopPropagation();
return false;
}
try {
+ VConsole.error("drageleave");
+ Element elem = event.getEventTarget().cast();
+ if (elem == getElement()) {
+ VConsole.error("top element");
+ }
- dragLeavPostponed = true;
- DeferredCommand.addCommand(new Command() {
- public void execute() {
+ dragleavetimer = new Timer() {
+ @Override
+ public void run() {
// Yes, dragleave happens before drop. Makes no sense to me.
// IMO shouldn't fire leave at all if drop happens (I guess
// this
// is what IE does).
// In Vaadin we fire it only if drop did not happen.
- if (dragLeavPostponed
- && vaadinDragEvent != null
+ if (vaadinDragEvent != null
&& VDragAndDropManager.get()
.getCurrentDropHandler() == getDropHandler()) {
VDragAndDropManager.get().interruptDrag();
}
- dragLeavPostponed = false;
}
- });
+ };
+ dragleavetimer.schedule(350);
event.preventDefault();
event.stopPropagation();
return false;
return true;
}
+ VConsole.log("dragover");
+ if (dragleavetimer != null) {
+ // returned quickly back to wrapper
+ VConsole.error("Dragleave cancelled");
+ dragleavetimer.cancel();
+ dragleavetimer = null;
+ }
+
vaadinDragEvent.setCurrentGwtEvent(event);
getDropHandler().dragOver(vaadinDragEvent);
// needed to be set for Safari, otherwise drop will not happen
@Override
public void dragLeave(VDragEvent drag) {
deEmphasis(true);
- dragLeavPostponed = false;
+ dragleavetimer = null;
}
@Override