From 77d4e9cb84a3def032cafbbe82bfd8e7fc1318e2 Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Fri, 15 Apr 2022 15:57:48 +0300 Subject: [PATCH] add optional PiP hotkey --- plugins/picture-in-picture/back.js | 4 ++++ plugins/picture-in-picture/menu.js | 32 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/plugins/picture-in-picture/back.js b/plugins/picture-in-picture/back.js index f462a2b7..fa679d79 100644 --- a/plugins/picture-in-picture/back.js +++ b/plugins/picture-in-picture/back.js @@ -1,6 +1,7 @@ const path = require("path"); const { app, ipcMain } = require("electron"); +const electronLocalshortcut = require("electron-localshortcut"); const { setOptions, isEnabled } = require("../../config/plugins"); const { injectCSS } = require("../utils"); @@ -100,6 +101,9 @@ module.exports = (_win, _options) => { ipcMain.on("picture-in-picture", async () => { await togglePiP(); }); + if (options.hotkey) { + electronLocalshortcut.register(win, options.hotkey, togglePiP); + } }; module.exports.setOptions = setLocalOptions; diff --git a/plugins/picture-in-picture/menu.js b/plugins/picture-in-picture/menu.js index c2eb35cd..98de5033 100644 --- a/plugins/picture-in-picture/menu.js +++ b/plugins/picture-in-picture/menu.js @@ -1,3 +1,6 @@ +const prompt = require("custom-electron-prompt"); + +const promptOptions = require("../../providers/prompt-options"); const { setOptions } = require("./back.js"); module.exports = (win, options) => [ @@ -25,5 +28,34 @@ module.exports = (win, options) => [ click: (item) => { setOptions({ saveSize: item.checked }); }, + }, + { + label: "Hotkey", + type: "checkbox", + checked: options.hotkey, + click: async (item) => { + const output = await prompt({ + title: "Picture in Picture Hotkey", + label: "Choose a hotkey for toggling Picture in Picture", + type: "keybind", + keybindOptions: [{ + value: "hotkey", + label: "Hotkey", + default: options.hotkey + }], + ...promptOptions() + }, win) + + if (output) { + const { value, accelerator } = output[0]; + console.log({ [value]: accelerator }); // DELETE + setOptions({ [value]: accelerator }); + + item.checked = !!accelerator; + } else { + // Reset checkbox if prompt was canceled + item.checked = !item.checked; + } + }, } ];