diff --git a/src-tauri/src/chat_window.rs b/src-tauri/src/chat_window.rs index 063a869..1033c55 100644 --- a/src-tauri/src/chat_window.rs +++ b/src-tauri/src/chat_window.rs @@ -1,17 +1,22 @@ // Claude Desktop — Chat-Fenster herauslösen -// Öffnet den Chat-Panel in einem separaten Fenster +// Öffnet den Chat-Panel in einem separaten Fenster. +// Sendet Events an das Hauptfenster damit es den Chat-Bereich aus-/einblendet. -use tauri::{AppHandle, Manager, WebviewUrl, WebviewWindowBuilder}; +use tauri::{AppHandle, Emitter, Manager, WebviewUrl, WebviewWindowBuilder}; #[tauri::command] pub async fn chat_window_open(app: AppHandle) -> Result<(), String> { + // Falls Fenster schon existiert: anzeigen und fokussieren if let Some(win) = app.get_webview_window("chat-detached") { win.show().map_err(|e| e.to_string())?; win.set_focus().map_err(|e| e.to_string())?; + // Event ans Hauptfenster: Chat ist herausgelöst + app.emit("chat-detached", ()).ok(); return Ok(()); } - WebviewWindowBuilder::new(&app, "chat-detached", WebviewUrl::App("/chat-window".into())) + // Neues Fenster erstellen + let win = WebviewWindowBuilder::new(&app, "chat-detached", WebviewUrl::App("/chat-window".into())) .title("Claude \u{2014} Chat") .inner_size(800.0, 900.0) .min_inner_size(500.0, 400.0) @@ -19,6 +24,17 @@ pub async fn chat_window_open(app: AppHandle) -> Result<(), String> { .build() .map_err(|e| e.to_string())?; + // Event ans Hauptfenster: Chat ist herausgelöst + app.emit("chat-detached", ()).ok(); + + // Wenn das Chat-Fenster geschlossen wird → Hauptfenster benachrichtigen + let app_clone = app.clone(); + win.on_window_event(move |event| { + if let tauri::WindowEvent::Destroyed = event { + app_clone.emit("chat-reattached", ()).ok(); + } + }); + Ok(()) } @@ -27,5 +43,8 @@ pub async fn chat_window_close(app: AppHandle) -> Result<(), String> { if let Some(win) = app.get_webview_window("chat-detached") { win.close().map_err(|e| e.to_string())?; } + // Event wird automatisch durch on_window_event/Destroyed gesendet + // Zur Sicherheit aber auch manuell senden + app.emit("chat-reattached", ()).ok(); Ok(()) } diff --git a/src/lib/stores/app.ts b/src/lib/stores/app.ts index 4924f5f..66e8e18 100644 --- a/src/lib/stores/app.ts +++ b/src/lib/stores/app.ts @@ -54,6 +54,7 @@ export const permissions = writable([]); // UI-State export const isProcessing = writable(false); +export const chatDetached = writable(false); export const currentInput = writable(''); export const selectedAgentId = writable(null); export const currentModel = writable(''); diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 7ac74dd..9261997 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,9 +1,25 @@