Tray-Menü listet alle Projekte mit Icon: Klick startet („starten") oder holt das laufende Terminal nach vorn („zeigen"); Session-Watcher baut das Menü bei Status-/Listenänderung neu

This commit is contained in:
marcus.hinz
2026-07-05 13:08:01 +02:00
parent 69fa8b338c
commit e21db6845c
3 changed files with 132 additions and 19 deletions
+16
View File
@@ -67,6 +67,22 @@ pub fn set_dock_icon(path: &str) {
}
}
/// Holt das Terminal-Fenster eines laufenden Projekts in den Vordergrund:
/// aktiviert den Terminal-Prozess über seine PID. Aktivierung ist seit
/// macOS 14 kooperativ — die Tray-App tritt sie vorher ab.
pub fn focus_terminal(pid: u32) {
use objc2::MainThreadMarker;
use objc2_app_kit::{NSApplication, NSApplicationActivationOptions, NSRunningApplication};
let Some(term) = NSRunningApplication::runningApplicationWithProcessIdentifier(pid as i32)
else {
eprintln!("Terminal-Prozess {pid} nicht gefunden");
return;
};
let mtm = MainThreadMarker::new().expect("focus_terminal läuft nicht auf dem Main-Thread");
NSApplication::sharedApplication(mtm).yieldActivationToApplication(&term);
term.activateWithOptions(NSApplicationActivationOptions::ActivateAllWindows);
}
/// Baut das Terminal-Fenster des Terminal-Prozesses. Die PTY entsteht erst,
/// wenn das Fenster geladen ist und `term_start` ruft — so gehen keine
/// Ausgaben verloren, bevor der Event-Listener steht.