mirror of
https://github.com/cinnyapp/cinny-desktop.git
synced 2024-12-28 02:16:11 +00:00
Undo system tray and single instance (#312)
* Revert5872ab9
* Undo095b8fc
This commit is contained in:
parent
8921baf41a
commit
e8f5c4ce24
|
@ -17,8 +17,7 @@ tauri-build = { version = "1.5.3", features = [] }
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json = "1.0.109"
|
serde_json = "1.0.109"
|
||||||
serde = { version = "1.0.193", features = ["derive"] }
|
serde = { version = "1.0.193", features = ["derive"] }
|
||||||
tauri = { version = "1.6.8", features = ["api-all", "devtools", "system-tray", "updater"] }
|
tauri = { version = "1.6.8", features = ["api-all", "devtools", "updater"] }
|
||||||
tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" }
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
# by default Tauri runs in production mode
|
# by default Tauri runs in production mode
|
||||||
|
|
|
@ -3,10 +3,8 @@
|
||||||
windows_subsystem = "windows"
|
windows_subsystem = "windows"
|
||||||
)]
|
)]
|
||||||
|
|
||||||
use tauri::Manager;
|
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
mod menu;
|
mod menu;
|
||||||
mod tray;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let builder = tauri::Builder::default();
|
let builder = tauri::Builder::default();
|
||||||
|
@ -14,38 +12,7 @@ fn main() {
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
let builder = builder.menu(menu::menu());
|
let builder = builder.menu(menu::menu());
|
||||||
|
|
||||||
let builder = builder
|
|
||||||
.system_tray(tray::system_tray())
|
|
||||||
.on_system_tray_event(tray::system_tray_handler);
|
|
||||||
|
|
||||||
builder
|
builder
|
||||||
.plugin(tauri_plugin_single_instance::init(|app, _, _| {
|
.run(tauri::generate_context!())
|
||||||
let tray_handle = match app.tray_handle_by_id(crate::tray::TRAY_LABEL) {
|
|
||||||
Some(h) => h,
|
|
||||||
None => return,
|
|
||||||
};
|
|
||||||
let window = app.get_window("main").unwrap();
|
|
||||||
|
|
||||||
if !window.is_visible().unwrap() || window.is_minimized().unwrap() {
|
|
||||||
window.unminimize().unwrap();
|
|
||||||
window.show().unwrap();
|
|
||||||
window.set_focus().unwrap();
|
|
||||||
tray_handle
|
|
||||||
.get_item("toggle")
|
|
||||||
.set_title("Hide Cinny")
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
.build(tauri::generate_context!())
|
|
||||||
.expect("error while building tauri application")
|
.expect("error while building tauri application")
|
||||||
.run(run_event_handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run_event_handler<R: tauri::Runtime>(app: &tauri::AppHandle<R>, event: tauri::RunEvent) {
|
|
||||||
match event {
|
|
||||||
tauri::RunEvent::WindowEvent { label, event, .. } => {
|
|
||||||
tray::window_event_handler(app, &label, &event);
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
use tauri::{
|
|
||||||
CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu,
|
|
||||||
SystemTrayMenuItem, WindowEvent, SystemTrayHandle, Window,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const TRAY_LABEL: &'static str = "main-tray";
|
|
||||||
|
|
||||||
pub fn window_event_handler<R: tauri::Runtime>(
|
|
||||||
app: &tauri::AppHandle<R>,
|
|
||||||
label: &str,
|
|
||||||
event: &WindowEvent,
|
|
||||||
) {
|
|
||||||
match event {
|
|
||||||
// Prevent Cinny from closing, instead hide it and let it be
|
|
||||||
// reopened through the tray.
|
|
||||||
WindowEvent::CloseRequested { api, .. } => {
|
|
||||||
api.prevent_close();
|
|
||||||
app.get_window(&label).unwrap().hide().unwrap();
|
|
||||||
app.tray_handle_by_id(TRAY_LABEL)
|
|
||||||
.unwrap()
|
|
||||||
.get_item("toggle")
|
|
||||||
.set_title("Show Cinny")
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Build the system tray object
|
|
||||||
pub fn system_tray() -> SystemTray {
|
|
||||||
let toggle = CustomMenuItem::new("toggle".to_owned(), "Hide Cinny");
|
|
||||||
let quit = CustomMenuItem::new("quit".to_owned(), "Quit");
|
|
||||||
let menu = SystemTrayMenu::new()
|
|
||||||
.add_item(toggle)
|
|
||||||
.add_native_item(SystemTrayMenuItem::Separator)
|
|
||||||
.add_item(quit);
|
|
||||||
|
|
||||||
tauri::SystemTray::new()
|
|
||||||
.with_menu(menu)
|
|
||||||
.with_id(TRAY_LABEL.to_owned())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn toggle_window_state<R: tauri::Runtime>(window: Window<R>, tray_handle: SystemTrayHandle<R>) {
|
|
||||||
// Hide the window if it's visible, show it if not
|
|
||||||
// `is_visible` returns true for minimized state for whatever reason
|
|
||||||
if window.is_visible().unwrap() {
|
|
||||||
window.hide().unwrap();
|
|
||||||
tray_handle
|
|
||||||
.get_item("toggle")
|
|
||||||
.set_title("Show Cinny")
|
|
||||||
.unwrap();
|
|
||||||
} else {
|
|
||||||
window.unminimize().unwrap();
|
|
||||||
window.show().unwrap();
|
|
||||||
window.set_focus().unwrap();
|
|
||||||
tray_handle
|
|
||||||
.get_item("toggle")
|
|
||||||
.set_title("Hide Cinny")
|
|
||||||
.unwrap();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn system_tray_handler<R: tauri::Runtime>(app: &tauri::AppHandle<R>, event: SystemTrayEvent) {
|
|
||||||
let tray_handle = match app.tray_handle_by_id(TRAY_LABEL) {
|
|
||||||
Some(h) => h,
|
|
||||||
None => return,
|
|
||||||
};
|
|
||||||
let window = app.get_window("main").unwrap();
|
|
||||||
|
|
||||||
match event {
|
|
||||||
SystemTrayEvent::LeftClick { .. } => {
|
|
||||||
toggle_window_state(window, tray_handle);
|
|
||||||
}
|
|
||||||
SystemTrayEvent::MenuItemClick { id, .. } => {
|
|
||||||
match id.as_str() {
|
|
||||||
"quit" => {
|
|
||||||
app.exit(0);
|
|
||||||
}
|
|
||||||
"toggle" => {
|
|
||||||
toggle_window_state(window, tray_handle)
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -72,11 +72,6 @@
|
||||||
],
|
],
|
||||||
"security": {
|
"security": {
|
||||||
"csp": "script-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'"
|
"csp": "script-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'"
|
||||||
},
|
|
||||||
"systemTray": {
|
|
||||||
"iconPath": "icons/32x32.png",
|
|
||||||
"iconAsTemplate": true,
|
|
||||||
"menuOnLeftClick": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue