use tauri::{Emitter, Manager, WebviewUrl, WebviewWindowBuilder}; /// Open a floating always-on-top task window. #[tauri::command] pub async fn open_task_window( app: tauri::AppHandle, ) -> Result<(), String> { if let Some(window) = app.get_webview_window("tasks-float") { window.show().map_err(|e| e.to_string())?; window.set_focus().map_err(|e| e.to_string())?; app.emit("task-window-focus", ()) .map_err(|e| e.to_string())?; return Ok(()); } WebviewWindowBuilder::new( &app, "tasks-float", WebviewUrl::App("/float".into()), ) .title("Kon Tasks") .inner_size(480.0, 520.0) .min_inner_size(400.0, 400.0) .always_on_top(true) .decorations(false) .resizable(true) .build() .map_err(|e| e.to_string())?; Ok(()) } /// Open the transcript viewer window. #[tauri::command] pub async fn open_viewer_window( app: tauri::AppHandle, ) -> Result<(), String> { if let Some(window) = app.get_webview_window("transcript-viewer") { window.show().map_err(|e| e.to_string())?; window.set_focus().map_err(|e| e.to_string())?; return Ok(()); } WebviewWindowBuilder::new( &app, "transcript-viewer", WebviewUrl::App("/viewer".into()), ) .title("Kon - Viewer") .inner_size(600.0, 700.0) .min_inner_size(450.0, 500.0) .decorations(false) .resizable(true) .build() .map_err(|e| e.to_string())?; Ok(()) }