Corrige la restauration du widget masqué sans icône de barre des tâches

Le bouton Réduire appelait minimize() alors que la fenêtre utilise
skipTaskbar:true : sans entrée dans la barre des tâches, la fenêtre
minimisée devenait irrécupérable. Le bouton masque désormais vers le
system tray.

La logique de bascule du tray gère maintenant correctement l'état
minimisé (is_minimized) et restaure la fenêtre via unminimize/show/
set_focus, faisant de l'icône de la barre d'état un point de
restauration fiable dans tous les cas.
This commit is contained in:
Claude committed 2026-05-31 01:27:33 +00:00
1 parent d9c1720523
commit 27d3fb7d50
2 files changed
+32 -15

No files matched your search

+28 -14
View File
@@ -67,6 +67,32 @@ fn get_autostart() -> Result<bool, String> {
Ok(val.is_ok()) 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 --- // --- CONTEXTE ET INITIALISATION ---
fn main() { fn main() {
@@ -84,26 +110,14 @@ fn main() {
.on_system_tray_event(|app, event| match event { .on_system_tray_event(|app, event| match event {
SystemTrayEvent::LeftClick { .. } => { SystemTrayEvent::LeftClick { .. } => {
// Un simple clic gauche sur l'icône de la barre des tâches bascule la visibilité // Un simple clic gauche sur l'icône de la barre des tâches bascule la visibilité
let window = app.get_window("main").unwrap(); toggle_window_visibility(app);
if window.is_visible().unwrap() {
window.hide().unwrap();
} else {
window.show().unwrap();
window.set_focus().unwrap();
}
} }
SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() {
"quit" => { "quit" => {
std::process::exit(0); std::process::exit(0);
} }
"toggle" => { "toggle" => {
let window = app.get_window("main").unwrap(); toggle_window_visibility(app);
if window.is_visible().unwrap() {
window.hide().unwrap();
} else {
window.show().unwrap();
window.set_focus().unwrap();
}
} }
_ => {} _ => {}
}, },
+4 -1
View File
@@ -88,7 +88,10 @@ document.addEventListener("DOMContentLoaded", async () => {
// Événements Tauri pour le contrôle de la fenêtre de bureau // Événements Tauri pour le contrôle de la fenêtre de bureau
if (appWindow) { 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' 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 // Récupération de l'état réel du démarrage automatique depuis le registre Windows