diff --git a/widget/src-tauri/src/main.rs b/widget/src-tauri/src/main.rs index cb42068..fb9ee59 100644 --- a/widget/src-tauri/src/main.rs +++ b/widget/src-tauri/src/main.rs @@ -67,6 +67,32 @@ fn get_autostart() -> Result { Ok(val.is_ok()) } +// --- GESTION DE LA VISIBILITÉ DE LA FENÊTRE --- + +fn toggle_window_visibility(app: &AppHandle) { + // Bascule l'affichage du widget depuis l'icône de la barre d'état. + // Comme la fenêtre est configurée avec skipTaskbar:true, l'icône du tray est le + // seul point de restauration : il doit donc fonctionner dans tous les états. + let window = match app.get_window("main") { + Some(w) => w, + None => return, + }; + + // Une fenêtre réduite est toujours rapportée comme "visible" par Tauri. On la + // considère donc comme masquée afin de la restaurer correctement (et non la re-masquer). + let is_minimized = window.is_minimized().unwrap_or(false); + let is_visible = window.is_visible().unwrap_or(false); + + if is_visible && !is_minimized { + let _ = window.hide(); + } else { + // Restauration robuste : dé-minimiser, ré-afficher, puis ramener au premier plan. + let _ = window.unminimize(); + let _ = window.show(); + let _ = window.set_focus(); + } +} + // --- CONTEXTE ET INITIALISATION --- fn main() { @@ -84,26 +110,14 @@ fn main() { .on_system_tray_event(|app, event| match event { SystemTrayEvent::LeftClick { .. } => { // Un simple clic gauche sur l'icône de la barre des tâches bascule la visibilité - let window = app.get_window("main").unwrap(); - if window.is_visible().unwrap() { - window.hide().unwrap(); - } else { - window.show().unwrap(); - window.set_focus().unwrap(); - } + toggle_window_visibility(app); } SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { "quit" => { std::process::exit(0); } "toggle" => { - let window = app.get_window("main").unwrap(); - if window.is_visible().unwrap() { - window.hide().unwrap(); - } else { - window.show().unwrap(); - window.set_focus().unwrap(); - } + toggle_window_visibility(app); } _ => {} }, diff --git a/widget/src/app.js b/widget/src/app.js index 53896f1..610755a 100644 --- a/widget/src/app.js +++ b/widget/src/app.js @@ -88,7 +88,10 @@ document.addEventListener("DOMContentLoaded", async () => { // Événements Tauri pour le contrôle de la fenêtre de bureau if (appWindow) { - btnMinimize.addEventListener("click", () => appWindow.minimize()); + // La fenêtre utilise skipTaskbar:true : elle n'apparaît jamais dans la barre des tâches. + // Un minimize() classique la rendrait donc irrécupérable. On masque plutôt vers le + // system tray, d'où elle peut toujours être restaurée via l'icône de la barre d'état. + btnMinimize.addEventListener("click", () => appWindow.hide()); btnClose.addEventListener("click", () => appWindow.hide()); // Masquer vers le tray au clic sur 'Fermer' // Récupération de l'état réel du démarrage automatique depuis le registre Windows