mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-18 16:30:32 +08:00
fix: always occupies hotkey globally when app launch silently (#5866)
* fix: always occupies hotkey when app launch silently * docs: update Changelog.md * chore: update
This commit is contained in:
parent
9713343323
commit
a1286ad057
@ -29,6 +29,7 @@
|
|||||||
- 修复 Windows 下自定义标题栏按钮在最小化 / 关闭后 hover 状态残留
|
- 修复 Windows 下自定义标题栏按钮在最小化 / 关闭后 hover 状态残留
|
||||||
- 修复直接覆盖 `config.yaml` 使用时无法展开代理组
|
- 修复直接覆盖 `config.yaml` 使用时无法展开代理组
|
||||||
- 修复 macOS 下应用启动时系统托盘图标颜色闪烁
|
- 修复 macOS 下应用启动时系统托盘图标颜色闪烁
|
||||||
|
- 修复应用静默启动模式下非全局热键一直抢占其他应用按键问题
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><strong> ✨ 新增功能 </strong></summary>
|
<summary><strong> ✨ 新增功能 </strong></summary>
|
||||||
|
|||||||
@ -287,8 +287,12 @@ singleton!(Hotkey, INSTANCE);
|
|||||||
|
|
||||||
impl Hotkey {
|
impl Hotkey {
|
||||||
pub async fn init(&self, skip: bool) -> Result<()> {
|
pub async fn init(&self, skip: bool) -> Result<()> {
|
||||||
|
if skip {
|
||||||
|
logging!(debug, Type::Hotkey, "skip register all hotkeys");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
let verge = Config::verge().await;
|
let verge = Config::verge().await;
|
||||||
let enable_global_hotkey = !skip && verge.data_arc().enable_global_hotkey.unwrap_or(true);
|
let enable_global_hotkey = verge.latest_arc().enable_global_hotkey.unwrap_or(true);
|
||||||
|
|
||||||
logging!(
|
logging!(
|
||||||
debug,
|
debug,
|
||||||
@ -298,7 +302,7 @@ impl Hotkey {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Extract hotkeys data before async operations
|
// Extract hotkeys data before async operations
|
||||||
let hotkeys = verge.data_arc().hotkeys.clone();
|
let hotkeys = verge.latest_arc().hotkeys.clone();
|
||||||
|
|
||||||
if let Some(hotkeys) = hotkeys {
|
if let Some(hotkeys) = hotkeys {
|
||||||
logging!(debug, Type::Hotkey, "Has {} hotkeys need to register", hotkeys.len());
|
logging!(debug, Type::Hotkey, "Has {} hotkeys need to register", hotkeys.len());
|
||||||
|
|||||||
@ -336,7 +336,9 @@ pub fn run() {
|
|||||||
.register_system_hotkey(SystemHotkey::CmdW)
|
.register_system_hotkey(SystemHotkey::CmdW)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
let _ = hotkey::Hotkey::global().init(true).await;
|
if !is_enable_global_hotkey {
|
||||||
|
let _ = hotkey::Hotkey::global().init(false).await;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -131,7 +131,9 @@ pub(super) async fn init_timer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(super) async fn init_hotkey() {
|
pub(super) async fn init_hotkey() {
|
||||||
logging_error!(Type::Setup, Hotkey::global().init(false).await);
|
// if hotkey is not use by global, skip init it
|
||||||
|
let skip_register_hotkeys = !Config::verge().await.latest_arc().enable_global_hotkey.unwrap_or(true);
|
||||||
|
logging_error!(Type::Setup, Hotkey::global().init(skip_register_hotkeys).await);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) async fn init_auto_lightweight_boot() {
|
pub(super) async fn init_auto_lightweight_boot() {
|
||||||
|
|||||||
@ -101,3 +101,9 @@ window.addEventListener("beforeunload", () => {
|
|||||||
// Clean up all WebSocket instances to prevent memory leaks
|
// Clean up all WebSocket instances to prevent memory leaks
|
||||||
MihomoWebSocket.cleanupAll();
|
MihomoWebSocket.cleanupAll();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Page loaded event
|
||||||
|
window.addEventListener("DOMContentLoaded", () => {
|
||||||
|
// Clean up all WebSocket instances to prevent memory leaks
|
||||||
|
MihomoWebSocket.cleanupAll();
|
||||||
|
});
|
||||||
|
|||||||
@ -1,53 +1,9 @@
|
|||||||
import { KeyboardEvent } from "react";
|
import { KeyboardEvent } from "react";
|
||||||
|
|
||||||
import { debugLog } from "@/utils/debug";
|
import getSystem from "./get-system";
|
||||||
|
|
||||||
const KEY_MAP: Record<string, string> = {
|
const OS = getSystem();
|
||||||
// Option + 特殊字符映射
|
|
||||||
"–": "Minus", // Option + -
|
|
||||||
"≠": "Equal", // Option + =
|
|
||||||
"\u201C": "BracketLeft", // Option + [
|
|
||||||
"\u2019": "BracketRight", // Option + ]
|
|
||||||
"«": "Backslash", // Option + \
|
|
||||||
"…": "Semicolon", // Option + ;
|
|
||||||
æ: "Quote", // Option + '
|
|
||||||
"≤": "Comma", // Option + ,
|
|
||||||
"≥": "Period", // Option + .
|
|
||||||
"÷": "Slash", // Option + /
|
|
||||||
|
|
||||||
// Option组合键映射
|
|
||||||
Å: "A",
|
|
||||||
"∫": "B",
|
|
||||||
Ç: "C",
|
|
||||||
"∂": "D",
|
|
||||||
"´": "E",
|
|
||||||
ƒ: "F",
|
|
||||||
"©": "G",
|
|
||||||
"˙": "H",
|
|
||||||
ˆ: "I",
|
|
||||||
"∆": "J",
|
|
||||||
"˚": "K",
|
|
||||||
"¬": "L",
|
|
||||||
µ: "M",
|
|
||||||
"˜": "N",
|
|
||||||
Ø: "O",
|
|
||||||
π: "P",
|
|
||||||
Œ: "Q",
|
|
||||||
"®": "R",
|
|
||||||
ß: "S",
|
|
||||||
"†": "T",
|
|
||||||
"¨": "U",
|
|
||||||
"√": "V",
|
|
||||||
"∑": "W",
|
|
||||||
"≈": "X",
|
|
||||||
"¥": "Y",
|
|
||||||
Ω: "Z",
|
|
||||||
};
|
|
||||||
|
|
||||||
const mapKeyCombination = (key: string): string => {
|
|
||||||
const mappedKey = KEY_MAP[key] || key;
|
|
||||||
return `${mappedKey}`;
|
|
||||||
};
|
|
||||||
export const parseHotkey = (keyEvent: KeyboardEvent) => {
|
export const parseHotkey = (keyEvent: KeyboardEvent) => {
|
||||||
const nativeEvent = keyEvent.nativeEvent;
|
const nativeEvent = keyEvent.nativeEvent;
|
||||||
const key = nativeEvent.code;
|
const key = nativeEvent.code;
|
||||||
@ -64,16 +20,21 @@ export const parseHotkey = (keyEvent: KeyboardEvent) => {
|
|||||||
} else if (temp.endsWith("RIGHT")) {
|
} else if (temp.endsWith("RIGHT")) {
|
||||||
temp = temp.slice(0, -5);
|
temp = temp.slice(0, -5);
|
||||||
}
|
}
|
||||||
debugLog(temp, mapKeyCombination(temp));
|
|
||||||
|
|
||||||
switch (temp) {
|
switch (temp) {
|
||||||
case "CONTROL":
|
case "CONTROL":
|
||||||
return "CTRL";
|
return "CTRL";
|
||||||
|
case "ALT":
|
||||||
|
if (OS === "macos") {
|
||||||
|
return "OPTION";
|
||||||
|
} else {
|
||||||
|
return "ALT";
|
||||||
|
}
|
||||||
case "META":
|
case "META":
|
||||||
return "CMD";
|
return "CMD";
|
||||||
case " ":
|
case " ":
|
||||||
return "SPACE";
|
return "SPACE";
|
||||||
default:
|
default:
|
||||||
return KEY_MAP[temp] || temp;
|
return temp;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user