From c16ea62b58d8fb89520762ebfa8ab7bd00a901d2 Mon Sep 17 00:00:00 2001 From: alschmiedt Date: Mon, 23 Sep 2019 08:59:50 -0700 Subject: [PATCH] A bunch of small bug fixes (#3067) --- core/field_colour.js | 27 +++++++++++++++------------ core/field_dropdown.js | 1 + core/keyboard_nav/ast_node.js | 2 +- core/keyboard_nav/cursor.js | 2 +- core/keyboard_nav/navigation.js | 18 ++++++++++-------- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/core/field_colour.js b/core/field_colour.js index 3d13fea07..7dc9f4a23 100644 --- a/core/field_colour.js +++ b/core/field_colour.js @@ -368,18 +368,20 @@ Blockly.FieldColour.prototype.onKeyDown_ = function(e) { * @package */ Blockly.FieldColour.prototype.onBlocklyAction = function(action) { - if (action === Blockly.navigation.ACTION_PREVIOUS) { - this.moveHighlightBy_(0, -1); - return true; - } else if (action === Blockly.navigation.ACTION_NEXT) { - this.moveHighlightBy_(0, 1); - return true; - } else if (action === Blockly.navigation.ACTION_OUT) { - this.moveHighlightBy_(-1, 0); - return true; - } else if (action === Blockly.navigation.ACTION_IN) { - this.moveHighlightBy_(1, 0); - return true; + if (this.picker_) { + if (action === Blockly.navigation.ACTION_PREVIOUS) { + this.moveHighlightBy_(0, -1); + return true; + } else if (action === Blockly.navigation.ACTION_NEXT) { + this.moveHighlightBy_(0, 1); + return true; + } else if (action === Blockly.navigation.ACTION_OUT) { + this.moveHighlightBy_(-1, 0); + return true; + } else if (action === Blockly.navigation.ACTION_IN) { + this.moveHighlightBy_(1, 0); + return true; + } } return Blockly.FieldColour.superClass_.onBlocklyAction.call(this, action); }; @@ -583,6 +585,7 @@ Blockly.FieldColour.prototype.dropdownDispose_ = function() { Blockly.unbindEvent_(this.onMouseEnterWrapper_); Blockly.unbindEvent_(this.onMouseLeaveWrapper_); Blockly.unbindEvent_(this.onKeyDownWrapper_); + this.picker_ = null; }; Blockly.fieldRegistry.register('field_colour', Blockly.FieldColour); diff --git a/core/field_dropdown.js b/core/field_dropdown.js index edcb70f4f..22589b977 100644 --- a/core/field_dropdown.js +++ b/core/field_dropdown.js @@ -280,6 +280,7 @@ Blockly.FieldDropdown.prototype.widgetCreate_ = function() { */ Blockly.FieldDropdown.prototype.widgetDispose_ = function() { this.menu_.dispose(); + this.menu_ = null; }; /** diff --git a/core/keyboard_nav/ast_node.js b/core/keyboard_nav/ast_node.js index 54778818f..339bd0247 100644 --- a/core/keyboard_nav/ast_node.js +++ b/core/keyboard_nav/ast_node.js @@ -398,7 +398,7 @@ Blockly.ASTNode.prototype.navigateBetweenStacks_ = function(forward) { if (!(curLocation instanceof Blockly.Block)) { curLocation = curLocation.getSourceBlock(); } - if (!curLocation) { + if (!curLocation || !curLocation.workspace) { return null; } var curRoot = curLocation.getRootBlock(); diff --git a/core/keyboard_nav/cursor.js b/core/keyboard_nav/cursor.js index f37b8563b..21eca7b78 100644 --- a/core/keyboard_nav/cursor.js +++ b/core/keyboard_nav/cursor.js @@ -185,7 +185,7 @@ Blockly.Cursor.prototype.out = function() { var newNode = curNode.out(); if (newNode && newNode.getType() === Blockly.ASTNode.types.BLOCK) { - newNode = newNode.prev(); + newNode = newNode.prev() || newNode; } if (newNode) { diff --git a/core/keyboard_nav/navigation.js b/core/keyboard_nav/navigation.js index 16bffdc2c..2ad77a5d5 100644 --- a/core/keyboard_nav/navigation.js +++ b/core/keyboard_nav/navigation.js @@ -713,13 +713,7 @@ Blockly.navigation.onBlocklyAction = function(action) { if (Blockly.keyboardAccessibilityMode) { if (!readOnly) { - var curNode = Blockly.getMainWorkspace().getCursor().getCurNode(); - if (curNode && curNode.getType() === Blockly.ASTNode.types.FIELD) { - actionHandled = curNode.getLocation().onBlocklyAction(action); - } - if (!actionHandled) { - actionHandled = Blockly.navigation.handleActions_(action); - } + actionHandled = Blockly.navigation.handleActions_(action); // If in readonly mode only handle valid actions. } else if (Blockly.navigation.READONLY_ACTION_LIST.indexOf(action) > -1) { actionHandled = Blockly.navigation.handleActions_(action); @@ -750,7 +744,15 @@ Blockly.navigation.handleActions_ = function(action) { } return true; } else if (Blockly.navigation.currentState_ === Blockly.navigation.STATE_WS) { - return Blockly.navigation.workspaceOnAction_(action); + var curNode = Blockly.getMainWorkspace().getCursor().getCurNode(); + var actionHandled = false; + if (curNode && curNode.getType() === Blockly.ASTNode.types.FIELD) { + actionHandled = curNode.getLocation().onBlocklyAction(action); + } + if (!actionHandled) { + actionHandled = Blockly.navigation.workspaceOnAction_(action); + } + return actionHandled; } else if (Blockly.navigation.currentState_ === Blockly.navigation.STATE_FLYOUT) { return Blockly.navigation.flyoutOnAction_(action); } else if (Blockly.navigation.currentState_ === Blockly.navigation.STATE_TOOLBOX) {