diff --git a/packages/blockly/core/flyout_base.ts b/packages/blockly/core/flyout_base.ts index 1d16f05f1f1..093daa61009 100644 --- a/packages/blockly/core/flyout_base.ts +++ b/packages/blockly/core/flyout_base.ts @@ -38,7 +38,6 @@ import * as dom from './utils/dom.js'; import * as idGenerator from './utils/idgenerator.js'; import {Svg} from './utils/svg.js'; import * as toolbox from './utils/toolbox.js'; -import * as Variables from './variables.js'; import {WorkspaceSvg} from './workspace_svg.js'; /** @@ -813,44 +812,16 @@ export abstract class Flyout * @internal */ createBlock(originalBlock: BlockSvg): BlockSvg { - let newBlock = null; - eventUtils.disable(); - const variablesBeforeCreation = this.targetWorkspace - .getVariableMap() - .getAllVariables(); - this.targetWorkspace.setResizesEnabled(false); try { - newBlock = this.placeNewBlock(originalBlock); + return this.placeNewBlock(originalBlock); } finally { - eventUtils.enable(); - } - - // Close the flyout. - this.targetWorkspace.hideChaff(); - - const newVariables = Variables.getAddedVariables( - this.targetWorkspace, - variablesBeforeCreation, - ); + this.targetWorkspace.hideChaff(); - if (eventUtils.isEnabled()) { - eventUtils.setGroup(true); - // Fire a VarCreate event for each (if any) new variable created. - for (let i = 0; i < newVariables.length; i++) { - const thisVariable = newVariables[i]; - eventUtils.fire( - new (eventUtils.get(EventType.VAR_CREATE))(thisVariable), - ); + // Close the flyout. + if (this.autoClose) { + this.hide(); } - - // Block events come after var events, in case they refer to newly created - // variables. - eventUtils.fire(new (eventUtils.get(EventType.BLOCK_CREATE))(newBlock)); - } - if (this.autoClose) { - this.hide(); } - return newBlock; } /** @@ -890,7 +861,9 @@ export abstract class Flyout const json = this.serializeBlock(oldBlock); // Normally this resizes leading to weird jumps. Save it for terminateDrag. targetWorkspace.setResizesEnabled(false); - const block = blocks.append(json, targetWorkspace) as BlockSvg; + const block = blocks.appendInternal(json, targetWorkspace, { + recordUndo: true, + }) as BlockSvg; this.positionNewBlock(oldBlock, block); diff --git a/packages/blockly/core/gesture.ts b/packages/blockly/core/gesture.ts index f3498bfad75..3b469addb9e 100644 --- a/packages/blockly/core/gesture.ts +++ b/packages/blockly/core/gesture.ts @@ -273,24 +273,19 @@ export class Gesture { throw new Error(`Cannot update dragging from the flyout because the ' + 'flyout's target workspace is undefined`); } - if ( - !this.flyout.isScrollable() || - this.flyout.isDragTowardWorkspace(this.currentDragDeltaXY) - ) { - this.startWorkspace_ = this.flyout.targetWorkspace; - this.startWorkspace_.updateScreenCalculationsIfScrolled(); - // Start the event group now, so that the same event group is used for - // block creation and block dragging. - if (!eventUtils.getGroup()) { - eventUtils.setGroup(true); - } - // The start block is no longer relevant, because this is a drag. - this.startBlock = null; - this.targetBlock = this.flyout.createBlock(this.targetBlock); - getFocusManager().focusNode(this.targetBlock); - return true; + + this.startWorkspace_ = this.flyout.targetWorkspace; + this.startWorkspace_.updateScreenCalculationsIfScrolled(); + // Start the event group now, so that the same event group is used for + // block creation and block dragging. + if (!eventUtils.getGroup()) { + eventUtils.setGroup(true); } - return false; + // The start block is no longer relevant, because this is a drag. + this.startBlock = null; + this.targetBlock = this.flyout.createBlock(this.targetBlock); + getFocusManager().focusNode(this.targetBlock); + return true; } /**