From 9a3bd45b22437fa87499f245b677ab675d2a2ce4 Mon Sep 17 00:00:00 2001 From: RoboErikG Date: Thu, 12 Jul 2018 15:34:32 -0700 Subject: [PATCH] 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. --- core/block_svg.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/core/block_svg.js b/core/block_svg.js index b95504cba..2638466c7 100644 --- a/core/block_svg.js +++ b/core/block_svg.js @@ -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();