UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

64 lines 4.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.globalKeyHandler = exports.GlobalKeyHandler = void 0; class GlobalKeyHandler { constructor() { this.keyListeners = []; this.started = false; } /** * Adds a global key listeners that listens to all events * @param callback The key press callback * @returns A function that can be invoked to remove the listener */ addGlobalListener(callback) { this.keyListeners.push(callback); this.start(); // If this is the first listener, add it to iohook if (this.keyListeners.length == 1) { this.invokeListeners = event => this.keyListeners.forEach(listener => listener(event)); this.ioHook().on("keydown", this.invokeListeners); this.ioHook().on("keyup", this.invokeListeners); } // Return a function to remove the listener return () => { const index = this.keyListeners.indexOf(callback); if (index != -1) this.keyListeners.splice(index, 1); // Remove the iohook listener if no listeners remain if (this.keyListeners.length == 0) { this.ioHook().off("keydown", this.invokeListeners); this.ioHook().off("keyup", this.invokeListeners); } }; } /** * Adds a global shortcut * @param shortcut The keycodes of the shortcut to listener for (I don't know the actual code mappings, but they are consistent with addGlobalListener) * @param callback The callback to trigger when the event is fired * @returns A function that can be invoked to remove the shortcut */ addGlobalShortcut(shortcut, callback) { const id = this.ioHook().registerShortcut(shortcut, callback); this.start(); return () => this.ioHook().unregisterShortcut(id); } /** * Starts IOHook if it wasn't started already */ start() { if (!this.started) { this.ioHook().start(); this.started = true; } } ioHook() { return require("iohook"); } } exports.GlobalKeyHandler = GlobalKeyHandler; /** * The manager to handle global key events (events that occur even when LM isn't focused) */ exports.globalKeyHandler = new GlobalKeyHandler(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsS2V5SGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlIYW5kbGVyL2dsb2JhbEtleUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsTUFBYSxnQkFBZ0I7SUFBN0I7UUFDYyxpQkFBWSxHQUF5QyxFQUFFLENBQUM7UUFFeEQsWUFBTyxHQUFZLEtBQUssQ0FBQztJQXlEdkMsQ0FBQztJQXZERzs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsUUFBMEM7UUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRWIsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsMkNBQTJDO1FBQzNDLE9BQU8sR0FBRyxFQUFFO1lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVwRCxvREFBb0Q7WUFDcEQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3BEO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsUUFBa0IsRUFBRSxRQUFvQjtRQUM3RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUs7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFUyxNQUFNO1FBQ1osT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNKO0FBNURELDRDQTREQztBQUVEOztHQUVHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUMifQ==