Fix #1960 by collecting block info before icons are destroyed (#1970)

The icons in rendered Blockly currently own the comment text. When
a block was deleted the icons were being disposed of before the block
info was recorded in the event, which meant the comment was lost. This
adds some additional logic to block_svg to make sure the event is
captured before the icons are removed.
This commit is contained in:
RoboErikG
2018-07-12 15:34:32 -07:00
committed by GitHub
parent ac2fa96d7f
commit 9a3bd45b22

View File

@@ -837,16 +837,27 @@ Blockly.BlockSvg.prototype.dispose = function(healStack, animate) {
this.warningTextDb_ = null;
}
// If the block is rendered we need to record the event before disposing of
// the icons to prevent losing information.
// TODO (#1969): Remove event generation/firing once comments are fixed.
var deleteEvent;
if (Blockly.Events.isEnabled()) {
deleteEvent = new Blockly.Events.BlockDelete(this);
}
Blockly.Events.disable();
try {
var icons = this.getIcons();
for (var i = 0; i < icons.length; i++) {
icons[i].dispose();
}
// TODO (#1969): Move out of disable block once comments are fixed.
Blockly.BlockSvg.superClass_.dispose.call(this, healStack);
} finally {
Blockly.Events.enable();
}
Blockly.BlockSvg.superClass_.dispose.call(this, healStack);
if (Blockly.Events.isEnabled() && deleteEvent) {
Blockly.Events.fire(deleteEvent);
}
this.svgGroup_.parentNode.removeChild(this.svgGroup_);
blockWorkspace.resizeContents();