Some checks failed
Build AppImage / build (push) Failing after 15s
- 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>
50 lines
1.8 KiB
Rust
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(())
|
|
}
|