From ccfcf14612a68a002525cce9b3f808f15ed337d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AB=8B=E7=9F=B3=20=E6=AF=85?= Date: Fri, 26 Dec 2025 14:40:56 +0900 Subject: [PATCH] Add NumLock toggle button for Mac keyboard numpad support --- .../src/components/keyboard/index.tsx | 13 ++++---- .../src/components/menu/keyboard/index.tsx | 2 ++ .../src/components/menu/keyboard/numlock.tsx | 32 +++++++++++++++++++ 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 desktop/src/renderer/src/components/menu/keyboard/numlock.tsx diff --git a/desktop/src/renderer/src/components/keyboard/index.tsx b/desktop/src/renderer/src/components/keyboard/index.tsx index 239ddb2..ed8508a 100644 --- a/desktop/src/renderer/src/components/keyboard/index.tsx +++ b/desktop/src/renderer/src/components/keyboard/index.tsx @@ -29,12 +29,13 @@ export const Keyboard = (): ReactElement => { pressedModifiersRef.current.add(event.code) } else { const keyCode = KeyboardCodes.get(event.code) - if ( - keyCode !== undefined && - !pressedKeysRef.current.has(keyCode) && - pressedKeysRef.current.size < MAX_SIMULTANEOUS_KEYS - ) { - pressedKeysRef.current.add(keyCode) + if (keyCode !== undefined) { + if ( + !pressedKeysRef.current.has(keyCode) && + pressedKeysRef.current.size < MAX_SIMULTANEOUS_KEYS + ) { + pressedKeysRef.current.add(keyCode) + } } } diff --git a/desktop/src/renderer/src/components/menu/keyboard/index.tsx b/desktop/src/renderer/src/components/menu/keyboard/index.tsx index 3ca192f..5911ac8 100644 --- a/desktop/src/renderer/src/components/menu/keyboard/index.tsx +++ b/desktop/src/renderer/src/components/menu/keyboard/index.tsx @@ -5,6 +5,7 @@ import { KeyboardIcon } from 'lucide-react'; import { Paste } from './paste'; import { VirtualKeyboard } from './virtual-keyboard'; import { KeyboardShortcutsMenu } from './shortcuts-menu'; +import { NumLock } from './numlock'; export const Keyboard = (): ReactElement => { const [isPopoverOpen, setIsPopoverOpen] = useState(false); @@ -12,6 +13,7 @@ export const Keyboard = (): ReactElement => { const content = ( <> + diff --git a/desktop/src/renderer/src/components/menu/keyboard/numlock.tsx b/desktop/src/renderer/src/components/menu/keyboard/numlock.tsx new file mode 100644 index 0000000..36701a1 --- /dev/null +++ b/desktop/src/renderer/src/components/menu/keyboard/numlock.tsx @@ -0,0 +1,32 @@ +import { ReactElement } from 'react' +import { useTranslation } from 'react-i18next' +import { IpcEvents } from '@common/ipc-events' + +export const NumLock = (): ReactElement => { + const { t } = useTranslation() + + async function sendNumLock() { + // NumLock key code is 83 + const modifiers = 0x00 + const keys = [0x00, 0x00, 83, 0x00, 0x00, 0x00] + + // Send key down + await window.electron.ipcRenderer.invoke(IpcEvents.SEND_KEYBOARD, modifiers, keys) + + // Wait a bit + await new Promise(resolve => setTimeout(resolve, 50)) + + // Send key up (all zeros) + const releaseKeys = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + await window.electron.ipcRenderer.invoke(IpcEvents.SEND_KEYBOARD, modifiers, releaseKeys) + } + + return ( +
+ NumLock +
+ ) +}