Skip to content

Commit caade44

Browse files
committed
feat(tray): use macOS tray template icon
Cherry-picked from main (f047960)
1 parent c5f8ca1 commit caade44

File tree

4 files changed

+92
-10
lines changed

4 files changed

+92
-10
lines changed

src-tauri/Cargo.lock

Lines changed: 56 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ serde_json = "1.0"
2626
serde = { version = "1.0", features = ["derive"] }
2727
log = "0.4"
2828
chrono = { version = "0.4", features = ["serde"] }
29-
tauri = { version = "2.8.2", features = ["tray-icon", "protocol-asset"] }
29+
tauri = { version = "2.8.2", features = ["tray-icon", "protocol-asset", "image-png"] }
3030
tauri-plugin-log = "2"
3131
tauri-plugin-opener = "2"
3232
tauri-plugin-process = "2"
2.69 KB
Loading

src-tauri/src/lib.rs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ use tauri_plugin_deep_link::DeepLinkExt;
4747
use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogKind};
4848

4949
use std::sync::Arc;
50+
#[cfg(target_os = "macos")]
51+
use tauri::image::Image;
5052
use tauri::tray::{TrayIconBuilder, TrayIconEvent};
5153
#[cfg(target_os = "macos")]
5254
use tauri::RunEvent;
@@ -133,6 +135,19 @@ async fn update_tray_menu(
133135
}
134136
}
135137

138+
#[cfg(target_os = "macos")]
139+
fn macos_tray_icon() -> Option<Image<'static>> {
140+
const ICON_BYTES: &[u8] = include_bytes!("../icons/tray/macos/statusbar_template_3x.png");
141+
142+
match Image::from_bytes(ICON_BYTES) {
143+
Ok(icon) => Some(icon),
144+
Err(err) => {
145+
log::warn!("Failed to load macOS tray icon: {err}");
146+
None
147+
}
148+
}
149+
}
150+
136151
#[cfg_attr(mobile, tauri::mobile_entry_point)]
137152
pub fn run() {
138153
let mut builder = tauri::Builder::default();
@@ -500,11 +515,26 @@ pub fn run() {
500515
})
501516
.show_menu_on_left_click(true);
502517

503-
// 统一使用应用默认图标;待托盘模板图标就绪后再启用
504-
if let Some(icon) = app.default_window_icon() {
505-
tray_builder = tray_builder.icon(icon.clone());
506-
} else {
507-
log::warn!("Failed to get default window icon for tray");
518+
// 使用平台对应的托盘图标(macOS 使用模板图标适配深浅色)
519+
#[cfg(target_os = "macos")]
520+
{
521+
if let Some(icon) = macos_tray_icon() {
522+
tray_builder = tray_builder.icon(icon).icon_as_template(true);
523+
} else if let Some(icon) = app.default_window_icon() {
524+
log::warn!("Falling back to default window icon for tray");
525+
tray_builder = tray_builder.icon(icon.clone());
526+
} else {
527+
log::warn!("Failed to load macOS tray icon for tray");
528+
}
529+
}
530+
531+
#[cfg(not(target_os = "macos"))]
532+
{
533+
if let Some(icon) = app.default_window_icon() {
534+
tray_builder = tray_builder.icon(icon.clone());
535+
} else {
536+
log::warn!("Failed to get default window icon for tray");
537+
}
508538
}
509539

510540
let _tray = tray_builder.build(app)?;

0 commit comments

Comments
 (0)