use crate::FocusMode;
pub fn try_focus(app_name: &str, _tty_device: &str, mode: FocusMode) -> bool {
bring_to_front(app_name, mode)
}
fn bring_to_front(app_name: &str, mode: FocusMode) -> bool {
if bring_to_front_open_command(app_name) {
return true;
}
match mode {
FocusMode::SingleWindow => bring_to_front_single_window(app_name),
FocusMode::ActivateApp => bring_to_front_activate_app(app_name),
}
}
#[cfg(target_os = "macos")]
fn bring_to_front_open_command(app_name: &str) -> bool {
std::process::Command::new("open")
.args(["-a", app_name])
.status()
.is_ok_and(|s| s.success())
}
#[cfg(not(target_os = "macos"))]
fn bring_to_front_open_command(_app_name: &str) -> bool {
false
}
fn bring_to_front_activate_app(app_name: &str) -> bool {
super::jxa::activate_app(app_name)
}
fn bring_to_front_single_window(app_name: &str) -> bool {
super::jxa::raise_front_window(app_name)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[ignore = "steals window focus when VS Code is running"]
fn test_try_focus_vscode_single_window() {
let result = try_focus("Code", "ttys999999", FocusMode::SingleWindow);
let _ = result;
}
#[test]
#[ignore = "steals window focus when Cursor is running"]
fn test_try_focus_cursor_single_window() {
let result = try_focus("Cursor", "ttys999999", FocusMode::SingleWindow);
let _ = result;
}
#[test]
#[ignore = "steals window focus when VS Code is running"]
fn test_try_focus_activate_app() {
let result = try_focus("Code", "ttys999999", FocusMode::ActivateApp);
let _ = result;
}
}