diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-01-17 17:05:06 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-17 17:05:06 -0500 | 
| commit | 04d53e5642ddf4fe9a15f22df0c3892e53074739 (patch) | |
| tree | 573f1b6028c24534bdb5c1502789cf236c7aeed5 | |
| parent | 14b4aee07dc3f69ad75518cf04cafe416e06f0c7 (diff) | |
Optimize hotkey registration (#1264)
| -rw-r--r-- | ext/mixed/js/display.js | 4 | ||||
| -rw-r--r-- | ext/mixed/js/hotkey-handler.js | 17 | 
2 files changed, 18 insertions, 3 deletions
| diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index c3e118c6..c017a2f1 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -1880,9 +1880,7 @@ class Display extends EventDispatcher {      }      _updateHotkeys(options) { -        const scope = this._pageType; -        this._hotkeyHandler.clearHotkeys(scope); -        this._hotkeyHandler.registerHotkeys(scope, options.inputs.hotkeys); +        this._hotkeyHandler.setHotkeys(this._pageType, options.inputs.hotkeys);      }      async _closeTab() { diff --git a/ext/mixed/js/hotkey-handler.js b/ext/mixed/js/hotkey-handler.js index 81ec950e..2de2a8d2 100644 --- a/ext/mixed/js/hotkey-handler.js +++ b/ext/mixed/js/hotkey-handler.js @@ -106,6 +106,23 @@ class HotkeyHandler extends EventDispatcher {      }      /** +     * Assigns a set of hotkeys for a given scope. This is an optimized shorthand for calling +     * `clearHotkeys`, then calling `registerHotkeys`. +     * @see registerHotkeys for argument information. +     */ +    setHotkeys(scope, hotkeys) { +        let registrations = this._hotkeyRegistrations.get(scope); +        if (typeof registrations === 'undefined') { +            registrations = []; +            this._hotkeyRegistrations.set(scope, registrations); +        } else { +            registrations.length = 0; +        } +        registrations.push(...hotkeys); +        this._updateHotkeyRegistrations(); +    } + +    /**       * Adds a single event listener to a specific event.       * @param eventName The string representing the event's name.       * @param callback The event listener callback to add. |