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())
}
// --- 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);
}
_ => {}
},