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

@ -65,9 +65,11 @@
this.moveTo(dd.topLayer);
dd.topLayer.draw();
// if we don't delay the prev parent redraw, dd will
// flicker on mobile devices
// flicker on mobile devices
setTimeout(function() {
dd.prevParent.getLayer().draw();
if(dd.prevParent) {
dd.prevParent.getLayer().draw();
}
}, 0);
}
@ -115,7 +117,7 @@
node.draw();
}
else {
if(nodeType === 'Group' || nodeType === 'Shape') {
if((nodeType === 'Group' || nodeType === 'Shape') && dd.prevParent) {
node.moveTo(dd.prevParent);
dd.topLayer.remove();
dd.prevParent = null;
@ -125,7 +127,9 @@
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) {
dd.moving = false;
node._handleEvent('dragend', evt);

View File

@ -77,6 +77,8 @@ Test.Modules.DD = {
circle.on('dragend', function() {
dragEnd = true;
// test set draggable false after drag end
this.setDraggable(false);
});
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(dragMove, 'dragmove 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');
},