From 81bd998a2e26f2c4b59acd48a94329ad12e5b33c Mon Sep 17 00:00:00 2001 From: pandadev <70103896+0PandaDEV@users.noreply.github.com> Date: Fri, 5 Jul 2024 01:33:38 +0200 Subject: [PATCH] added tray --- src-tauri/src/lib.rs | 55 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 7e9c7c1..6484499 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -4,10 +4,16 @@ use rdev::{listen, EventType, Key}; use sqlx::{sqlite::SqlitePoolOptions, SqlitePool}; use std::fs; use std::sync::mpsc; -use tauri::Manager; -use tauri_plugin_autostart::MacosLauncher; -use tauri_plugin_window_state::{AppHandleExt, StateFlags, WindowExt}; use tokio::runtime::Runtime; +use tauri_plugin_autostart::MacosLauncher; +use tauri_plugin_clipboard_manager::ClipboardExt; +use tauri_plugin_window_state::{AppHandleExt, StateFlags, WindowExt}; +use tauri::{ + menu::{MenuBuilder, MenuItemBuilder}, + tray::{MouseButton, TrayIconBuilder, TrayIconEvent}, + Manager +}; +use tauri::image::Image; #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { @@ -23,6 +29,49 @@ pub fn run() { .setup(|app| { let app_handle = app.handle().clone(); + let window = app.get_window("main").unwrap(); + let window_clone_for_tray = window.clone(); + let window_clone_for_click = window.clone(); + + let _tray = TrayIconBuilder::new() + .menu( + &MenuBuilder::new(app) + .items(&[&MenuItemBuilder::with_id("show", "Show/Hide").build(app)?]) + .items(&[&MenuItemBuilder::with_id("quit", "Quit").build(app)?]) + .build()?, + ) + .on_menu_event(move |_app, event| match event.id().as_ref() { + "quit" => { + std::process::exit(0); + } + "show" => { + let is_visible = window_clone_for_tray.is_visible().unwrap(); + if is_visible { + window_clone_for_tray.hide().unwrap(); + } else { + window_clone_for_tray.show().unwrap(); + window_clone_for_tray.set_focus().unwrap(); + } + } + _ => (), + }) + .on_tray_icon_event(move |_tray, event| { + if let TrayIconEvent::Click { button, .. } = event { + if button == MouseButton::Left { + let is_visible = window_clone_for_click.is_visible().unwrap(); + if is_visible { + window_clone_for_click.hide().unwrap(); + } else { + window_clone_for_click.show().unwrap(); + } + } + } + }) + .icon(Image::from_path("icons/Square71x71Logo.png").unwrap()) + .build(app)?; + + ////////////////////////////////////// + let rt = Runtime::new().expect("Failed to create Tokio runtime"); let app_data_dir = app.path().app_data_dir().unwrap();