fixed edge case when setting draggable=false on dragend

This commit is contained in:
Eric Rowell 2013-01-07 19:51:20 -08:00
parent d0148a50ac
commit 3a6a55d1cc
2 changed files with 11 additions and 4 deletions

View File

@ -67,7 +67,9 @@
// if we don't delay the prev parent redraw, dd will // if we don't delay the prev parent redraw, dd will
// flicker on mobile devices // flicker on mobile devices
setTimeout(function() { setTimeout(function() {
if(dd.prevParent) {
dd.prevParent.getLayer().draw(); dd.prevParent.getLayer().draw();
}
}, 0); }, 0);
} }
@ -115,7 +117,7 @@
node.draw(); node.draw();
} }
else { else {
if(nodeType === 'Group' || nodeType === 'Shape') { if((nodeType === 'Group' || nodeType === 'Shape') && dd.prevParent) {
node.moveTo(dd.prevParent); node.moveTo(dd.prevParent);
dd.topLayer.remove(); dd.topLayer.remove();
dd.prevParent = null; dd.prevParent = null;
@ -125,7 +127,9 @@
node.getLayer().draw(); node.getLayer().draw();
} }
// handle dragend // only fire dragend event if the drag and drop
// operation actually started. This can be detected by
// checking dd.moving
if(dd.moving) { if(dd.moving) {
dd.moving = false; dd.moving = false;
node._handleEvent('dragend', evt); node._handleEvent('dragend', evt);

View File

@ -77,6 +77,8 @@ Test.Modules.DD = {
circle.on('dragend', function() { circle.on('dragend', function() {
dragEnd = true; dragEnd = true;
// test set draggable false after drag end
this.setDraggable(false);
}); });
warn(layer.toDataURL() === dataUrls['drag circle before'], 'start data url is incorrect'); warn(layer.toDataURL() === dataUrls['drag circle before'], 'start data url is incorrect');
/* /*
@ -109,6 +111,7 @@ Test.Modules.DD = {
test(dragStart, 'dragstart event was not triggered'); test(dragStart, 'dragstart event was not triggered');
test(dragMove, 'dragmove event was not triggered'); test(dragMove, 'dragmove event was not triggered');
test(dragEnd, 'dragend event was not triggered'); test(dragEnd, 'dragend event was not triggered');
test(!circle.getDraggable(), 'circle should no longer be draggable');
warn(layer.toDataURL() === dataUrls['drag circle after'], 'end data url is incorrect'); warn(layer.toDataURL() === dataUrls['drag circle after'], 'end data url is incorrect');
}, },