mirror of
https://github.com/scratchfoundation/scratch-blocks.git
synced 2025-07-05 16:40:25 -04:00
Merge pull request #1674 from fsih/keyWhenVisible
Only take keypresses when visible
This commit is contained in:
commit
968088e7bc
2 changed files with 27 additions and 4 deletions
|
@ -175,14 +175,19 @@ Blockly.svgResize = function(workspace) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle a key-down on SVG drawing surface.
|
* Handle a key-down on SVG drawing surface. Does nothing if the main workspace is not visible.
|
||||||
* @param {!Event} e Key down event.
|
* @param {!Event} e Key down event.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
|
// TODO (https://github.com/google/blockly/issues/1998) handle cases where there are multiple workspaces
|
||||||
|
// and non-main workspaces are able to accept input.
|
||||||
Blockly.onKeyDown_ = function(e) {
|
Blockly.onKeyDown_ = function(e) {
|
||||||
if (Blockly.mainWorkspace.options.readOnly || Blockly.utils.isTargetInput(e)) {
|
if (Blockly.mainWorkspace.options.readOnly || Blockly.utils.isTargetInput(e)
|
||||||
|
|| (Blockly.mainWorkspace.rendered && !Blockly.mainWorkspace.isVisible())) {
|
||||||
// No key actions on readonly workspaces.
|
// No key actions on readonly workspaces.
|
||||||
// When focused on an HTML text input widget, don't trap any keys.
|
// When focused on an HTML text input widget, don't trap any keys.
|
||||||
|
// Ignore keypresses on rendered workspaces that have been explicitly
|
||||||
|
// hidden.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var deleteBlock = false;
|
var deleteBlock = false;
|
||||||
|
|
|
@ -127,12 +127,20 @@ Blockly.WorkspaceSvg.prototype.resizeHandlerWrapper_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The render status of an SVG workspace.
|
* The render status of an SVG workspace.
|
||||||
* Returns `true` for visible workspaces and `false` for non-visible,
|
* Returns `false` for headless workspaces and true for instances of
|
||||||
* or headless, workspaces.
|
* `Blockly.WorkspaceSvg`.
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
Blockly.WorkspaceSvg.prototype.rendered = true;
|
Blockly.WorkspaceSvg.prototype.rendered = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the workspace is visible. False if the workspace has been hidden
|
||||||
|
* by calling `setVisible(false)`.
|
||||||
|
* @type {boolean}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
Blockly.WorkspaceSvg.prototype.isVisible_ = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is this workspace the surface for a flyout?
|
* Is this workspace the surface for a flyout?
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
|
@ -316,6 +324,15 @@ Blockly.WorkspaceSvg.prototype.getInverseScreenCTM = function() {
|
||||||
return this.inverseScreenCTM_;
|
return this.inverseScreenCTM_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for isVisible
|
||||||
|
* @return {boolean} Whether the workspace is visible. False if the workspace has been hidden
|
||||||
|
* by calling `setVisible(false)`.
|
||||||
|
*/
|
||||||
|
Blockly.WorkspaceSvg.prototype.isVisible = function() {
|
||||||
|
return this.isVisible_;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the inverse screen CTM as dirty.
|
* Mark the inverse screen CTM as dirty.
|
||||||
*/
|
*/
|
||||||
|
@ -865,6 +882,7 @@ Blockly.WorkspaceSvg.prototype.setVisible = function(isVisible) {
|
||||||
Blockly.hideChaff(true);
|
Blockly.hideChaff(true);
|
||||||
Blockly.DropDownDiv.hideWithoutAnimation();
|
Blockly.DropDownDiv.hideWithoutAnimation();
|
||||||
}
|
}
|
||||||
|
this.isVisible_ = isVisible;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue