claude-desktop/src-tauri/src/chat_window.rs
Eddy e87ac9ffc1
Some checks failed
Build AppImage / build (push) Failing after 15s
feat: Chat-Detach richtig — Hauptfenster blendet Chat aus, separates Fenster lädt Session
- chatDetached Store: Hauptfenster blendet Chat-Pane aus wenn Fenster offen
- Placeholder mit "Zurückholen"-Button statt leerem Pane
- Backend sendet chat-detached/chat-reattached Events ans Hauptfenster
- on_window_event(Destroyed): Automatisches Reattach wenn Fenster geschlossen
- Chat-Window lädt aktive Session + Nachrichten aus DB beim Öffnen
- Mehr Platz für andere Panels wenn Chat herausgelöst

[appimage]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-21 09:41:38 +02:00

50 lines
1.8 KiB
Rust

// Claude Desktop — Chat-Fenster herauslösen
// Öffnet den Chat-Panel in einem separaten Fenster.
// Sendet Events an das Hauptfenster damit es den Chat-Bereich aus-/einblendet.
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(());
}
// 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)
.center()
.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(())
}
#[tauri::command]
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(())
}