Skip to content

Commit f440daf

Browse files
author
李泓宇
committed
Merge branch 'human/sparrow-20260416-110036' into 'weibo_master'
feat: add screen recording permission for screenshot See merge request weibo_rd/common/wecode/wecut!20
2 parents ad0bde9 + 9707422 commit f440daf

30 files changed

Lines changed: 1606 additions & 345 deletions

Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ tauri-plugin-eco-window = { path = "./src-tauri/src/plugins/window" }
1818
tauri-plugin-eco-paste = { path = "./src-tauri/src/plugins/paste" }
1919
tauri-plugin-eco-autostart = { path = "./src-tauri/src/plugins/autostart" }
2020
tauri-plugin-eco-active-app = { path = "./src-tauri/src/plugins/active_app" }
21+
22+
[profile.dev]
23+
# rustc 1.94 + LLVM 21 on macOS may hit unstable link artifacts with incremental builds
24+
# (undefined `_anon...llvm...` symbols). Keep dev deterministic for Tauri runs.
25+
incremental = false
26+
2127
# 在 debug 模式下对图像处理库开启优化,避免截图编码极慢(3456x2234 图片需要几秒)
2228
[profile.dev.package.image]
2329
opt-level = 3

src-tauri/assets/tray-mac.ico

17.7 KB
Binary file not shown.

src-tauri/assets/tray.ico

23.6 KB
Binary file not shown.

src-tauri/src/core/setup/macos.rs

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ pub fn platform(
3333

3434
let _ = app_handle.set_dock_visibility(false);
3535

36-
let panel = main_window.to_panel::<NsPanel>().unwrap();
36+
let panel = match main_window.to_panel::<NsPanel>() {
37+
Ok(panel) => panel,
38+
Err(error) => {
39+
log::error!("[nspanel] failed to convert main window to panel: {}", error);
40+
return;
41+
}
42+
};
3743

3844
panel.set_level(PanelLevel::Dock.value());
3945

@@ -51,38 +57,56 @@ pub fn platform(
5157

5258
let window = main_window.clone();
5359
handler.window_did_become_key(move |_| {
54-
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
55-
56-
let _ = window.emit_to(target, WINDOW_FOCUS_EVENT, true);
60+
let _ = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
61+
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
62+
let _ = window.emit_to(target, WINDOW_FOCUS_EVENT, true);
63+
}))
64+
.map_err(|_| {
65+
log::error!("[nspanel] panic in window_did_become_key callback");
66+
});
5767
});
5868

5969
let window = main_window.clone();
6070
handler.window_did_resign_key(move |_| {
61-
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
62-
63-
let _ = window.emit_to(target, WINDOW_BLUR_EVENT, true);
71+
let _ = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
72+
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
73+
let _ = window.emit_to(target, WINDOW_BLUR_EVENT, true);
74+
}))
75+
.map_err(|_| {
76+
log::error!("[nspanel] panic in window_did_resign_key callback");
77+
});
6478
});
6579

6680
let window = main_window.clone();
6781
handler.window_did_resize(move |_| {
68-
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
69-
70-
if let Ok(position) = window.outer_position() {
71-
let _ = window.emit_to(target.clone(), WINDOW_MOVED_EVENT, position);
72-
}
73-
74-
if let Ok(size) = window.inner_size() {
75-
let _ = window.emit_to(target, WINDOW_RESIZED_EVENT, size);
76-
}
82+
let _ = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
83+
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
84+
85+
if let Ok(position) = window.outer_position() {
86+
let _ = window.emit_to(target.clone(), WINDOW_MOVED_EVENT, position);
87+
}
88+
89+
if let Ok(size) = window.inner_size() {
90+
let _ = window.emit_to(target, WINDOW_RESIZED_EVENT, size);
91+
}
92+
}))
93+
.map_err(|_| {
94+
log::error!("[nspanel] panic in window_did_resize callback");
95+
});
7796
});
7897

7998
let window = main_window.clone();
8099
handler.window_did_move(move |_| {
81-
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
82-
83-
if let Ok(position) = window.outer_position() {
84-
let _ = window.emit_to(target.clone(), WINDOW_MOVED_EVENT, position);
85-
}
100+
let _ = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
101+
let target = EventTarget::labeled(MAIN_WINDOW_LABEL);
102+
103+
if let Ok(position) = window.outer_position() {
104+
let _ = window.emit_to(target.clone(), WINDOW_MOVED_EVENT, position);
105+
}
106+
}))
107+
.map_err(|_| {
108+
log::error!("[nspanel] panic in window_did_move callback");
109+
});
86110
});
87111

88112
panel.set_event_handler(Some(handler.as_ref()));

src-tauri/src/lib.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ async fn send_to_work_queue(
9090
.await
9191
.map_err(|e| format!("请求失败: {}", e))?;
9292

93-
log::info!("[send_to_work_queue] Response status: {}", response.status());
93+
log::info!(
94+
"[send_to_work_queue] Response status: {}",
95+
response.status()
96+
);
9497

9598
if response.status().is_success() {
9699
Ok(())
@@ -190,11 +193,13 @@ pub fn run() {
190193
plugins::text_expansion::commands::set_text_expansions,
191194
plugins::text_expansion::commands::set_text_expansion_enabled,
192195
screenshot::get_monitors,
196+
screenshot::get_monitor_id_from_point,
193197
screenshot::capture_screen,
194198
screenshot::show_screenshot_window,
195199
screenshot::hide_screenshot_window,
196200
screenshot::pin_screenshot_window,
197201
screenshot::get_screenshot_data,
202+
screenshot::get_screenshot_crop,
198203
screenshot::create_pin_window,
199204
screenshot::get_pin_data,
200205
screenshot::close_pin_window,

0 commit comments

Comments
 (0)