@launchmenu/core
Version:
An environment for visual keyboard controlled applets
64 lines • 4.71 kB
JavaScript
"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==