Update keyboard/mouse modifiers to return an array rather than a set (#1015)
This commit is contained in:
parent
681065e554
commit
8edb478d0a
@ -147,7 +147,7 @@ class KeyboardMouseInputField extends EventDispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_getModifierKeys(e) {
|
_getModifierKeys(e) {
|
||||||
const modifiers = DocumentUtil.getActiveModifiers(e);
|
const modifiers = new Set(DocumentUtil.getActiveModifiers(e));
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/metaKey
|
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/metaKey
|
||||||
// https://askubuntu.com/questions/567731/why-is-shift-alt-being-mapped-to-meta
|
// https://askubuntu.com/questions/567731/why-is-shift-alt-being-mapped-to-meta
|
||||||
// It works with mouse events on some platforms, so try to determine if metaKey is pressed.
|
// It works with mouse events on some platforms, so try to determine if metaKey is pressed.
|
||||||
|
@ -250,6 +250,7 @@ class Frontend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _onActiveModifiersChanged({modifiers}) {
|
async _onActiveModifiersChanged({modifiers}) {
|
||||||
|
modifiers = new Set(modifiers);
|
||||||
if (areSetsEqual(modifiers, this._activeModifiers)) { return; }
|
if (areSetsEqual(modifiers, this._activeModifiers)) { return; }
|
||||||
this._activeModifiers = modifiers;
|
this._activeModifiers = modifiers;
|
||||||
if (this._popup !== null && await this._popup.isVisible()) {
|
if (this._popup !== null && await this._popup.isVisible()) {
|
||||||
|
@ -205,7 +205,7 @@ class Display extends EventDispatcher {
|
|||||||
|
|
||||||
const eventModifiers = DocumentUtil.getActiveModifiers(e);
|
const eventModifiers = DocumentUtil.getActiveModifiers(e);
|
||||||
for (const {modifiers, action} of handlers) {
|
for (const {modifiers, action} of handlers) {
|
||||||
if (getSetDifference(modifiers, eventModifiers).size !== 0) { continue; }
|
if (!this._areSame(modifiers, eventModifiers)) { continue; }
|
||||||
|
|
||||||
const actionHandler = this._actions.get(action);
|
const actionHandler = this._actions.get(action);
|
||||||
if (typeof actionHandler === 'undefined') { continue; }
|
if (typeof actionHandler === 'undefined') { continue; }
|
||||||
@ -1476,4 +1476,14 @@ class Display extends EventDispatcher {
|
|||||||
const {expression, reading} = termDetailsList[Math.max(0, bestIndex)];
|
const {expression, reading} = termDetailsList[Math.max(0, bestIndex)];
|
||||||
return {expression, reading};
|
return {expression, reading};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_areSame(set, array) {
|
||||||
|
if (set.size !== array.size) { return false; }
|
||||||
|
for (const value of array) {
|
||||||
|
if (!set.has(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,11 +170,11 @@ class DocumentUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static getActiveModifiers(event) {
|
static getActiveModifiers(event) {
|
||||||
const modifiers = new Set();
|
const modifiers = [];
|
||||||
if (event.altKey) { modifiers.add('alt'); }
|
if (event.altKey) { modifiers.push('alt'); }
|
||||||
if (event.ctrlKey) { modifiers.add('ctrl'); }
|
if (event.ctrlKey) { modifiers.push('ctrl'); }
|
||||||
if (event.metaKey) { modifiers.add('meta'); }
|
if (event.metaKey) { modifiers.push('meta'); }
|
||||||
if (event.shiftKey) { modifiers.add('shift'); }
|
if (event.shiftKey) { modifiers.push('shift'); }
|
||||||
return modifiers;
|
return modifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ class DocumentUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static getActiveButtons(event) {
|
static getActiveButtons(event) {
|
||||||
const buttons = new Set();
|
const buttons = [];
|
||||||
this._getActiveButtons(event, buttons);
|
this._getActiveButtons(event, buttons);
|
||||||
return buttons;
|
return buttons;
|
||||||
}
|
}
|
||||||
@ -301,19 +301,18 @@ class DocumentUtil {
|
|||||||
return !(browser === 'firefox' || browser === 'firefox-mobile') || os === 'mac';
|
return !(browser === 'firefox' || browser === 'firefox-mobile') || os === 'mac';
|
||||||
}
|
}
|
||||||
|
|
||||||
static _getActiveButtons(event, set) {
|
static _getActiveButtons(event, array) {
|
||||||
let {buttons} = event;
|
let {buttons} = event;
|
||||||
if (typeof buttons === 'number' && buttons > 0) {
|
if (typeof buttons === 'number' && buttons > 0) {
|
||||||
for (let i = 0; i < 6; ++i) {
|
for (let i = 0; i < 6; ++i) {
|
||||||
const buttonFlag = (1 << i);
|
const buttonFlag = (1 << i);
|
||||||
if ((buttons & buttonFlag) !== 0) {
|
if ((buttons & buttonFlag) !== 0) {
|
||||||
set.add(`mouse${i}`);
|
array.push(`mouse${i}`);
|
||||||
buttons &= ~buttonFlag;
|
buttons &= ~buttonFlag;
|
||||||
if (buttons === 0) { break; }
|
if (buttons === 0) { break; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return set;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
|
@ -817,11 +817,12 @@ class TextScanner extends EventDispatcher {
|
|||||||
|
|
||||||
_getMatchingInputGroup(modifiers, type) {
|
_getMatchingInputGroup(modifiers, type) {
|
||||||
let fallback = null;
|
let fallback = null;
|
||||||
|
const modifiersSet = new Set(modifiers);
|
||||||
for (let i = 0, ii = this._inputs.length; i < ii; ++i) {
|
for (let i = 0, ii = this._inputs.length; i < ii; ++i) {
|
||||||
const input = this._inputs[i];
|
const input = this._inputs[i];
|
||||||
const {include, exclude, types} = input;
|
const {include, exclude, types} = input;
|
||||||
if (!types.has(type)) { continue; }
|
if (!types.has(type)) { continue; }
|
||||||
if (this._setHasAll(modifiers, include) && (exclude.length === 0 || !this._setHasAll(modifiers, exclude))) {
|
if (this._setHasAll(modifiersSet, include) && (exclude.length === 0 || !this._setHasAll(modifiersSet, exclude))) {
|
||||||
if (include.length > 0) {
|
if (include.length > 0) {
|
||||||
return {index: i, empty: false, input};
|
return {index: i, empty: false, input};
|
||||||
} else if (fallback === null) {
|
} else if (fallback === null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user