import { appWindow } from "@tauri-apps/api/window"; import { register, unregisterAll, isRegistered } from "@tauri-apps/api/globalShortcut"; import { useEffect } from "react"; import { store } from "@store"; import { useHotkeys } from "@logics_configs"; // 修飾キーのパースを行う関数 const parseHotkey = (hotkeyString) => { const keyMap = { Ctrl: "Control", Alt: "Alt", Shift: "Shift", Meta: "Super", }; // 入力文字列を分解して対応するキーを再結合 return hotkeyString .map((key) => keyMap[key] || key) // 修飾キーをマップし、その他はそのまま .join("+"); }; export const GlobalHotKeyController = () => { const { currentHotkeys } = useHotkeys(); useEffect(() => { const registerShortcuts = async () => { const shortcut_raw = currentHotkeys.data.toggle_active_vrct; console.log(shortcut_raw); if (!shortcut_raw) { console.warn("No hotkey defined."); return; } const shortcut = parseHotkey(shortcut_raw); try { // 既存のショートカットをすべて解除 await unregisterAll(); // 新しいショートカットを登録 const isAlreadyRegistered = await isRegistered(shortcut); if (!isAlreadyRegistered) { await register(shortcut, async () => { console.log(`Shortcut "${shortcut}" triggered, setting focus.`); const minimized = await appWindow.isMinimized(); if (minimized === true) { appWindow.unminimize(); await appWindow.setFocus(); store.text_area_ref.current?.focus(); } else { appWindow.minimize(); } }); console.log(`Registered global shortcut: ${shortcut}`); } } catch (error) { console.error("Failed to register global shortcut:", error); } }; registerShortcuts(); // クリーンアップ関数でショートカットを解除 return () => { unregisterAll().catch((error) => { console.error("Failed to unregister shortcuts:", error); }); }; }, [currentHotkeys.data.toggle_active_vrct]); // 監視対象を明確に指定 return null; };