Exit when the desktop window closes

This commit is contained in:
2026-07-23 09:02:50 +02:00
parent 4de0b6b0d1
commit fa0a510b8b
4 changed files with 38 additions and 5 deletions

View File

@@ -186,6 +186,7 @@ pub enum Message {
task_id: TaskId,
result: Result<engine::blogmark::BlogmarkImportResult, String>,
},
WindowCloseRequested,
MainWindowLoaded(Option<window::Id>),
EmbeddedPreviewReady(Result<(), String>),
EmbeddedStylePreviewReady(Result<(), String>),
@@ -1363,6 +1364,11 @@ impl BdsApp {
pub fn update(&mut self, message: Message) -> Task<Message> {
match message {
Message::WindowCloseRequested => {
self.persist_project_ui_state();
iced::exit()
}
// ── Menu event dispatch ──
Message::MenuEvent(id) => {
if let Some(action) = self.menu_registry.lookup(&id) {
@@ -3583,6 +3589,7 @@ impl BdsApp {
}
_ => None,
});
let window_close_sub = window::close_requests().map(|_| Message::WindowCloseRequested);
// Global mouse tracking for sidebar resize dragging.
// The 4px drag handle mouse_area only fires on_press; move/release
@@ -3637,6 +3644,7 @@ impl BdsApp {
domain_event_tick,
toast_tick,
file_drop_sub,
window_close_sub,
drag_sub,
menu_interaction_sub,
menu_expand_tick,

View File

@@ -30,15 +30,20 @@ fn main() -> anyhow::Result<()> {
iced::application("bDS", BdsApp::update, BdsApp::view)
.subscription(BdsApp::subscription)
.theme(|_| inputs::app_theme())
.window(iced::window::Settings {
size: iced::Size::new(1200.0, 800.0),
icon: Some(icon),
..Default::default()
})
.window(desktop_window_settings(Some(icon)))
.run_with(BdsApp::new)?;
Ok(())
}
fn desktop_window_settings(icon: Option<iced::window::Icon>) -> iced::window::Settings {
iced::window::Settings {
size: iced::Size::new(1200.0, 800.0),
icon,
exit_on_close_request: false,
..Default::default()
}
}
fn current_platform() -> Platform {
#[cfg(target_os = "macos")]
return Platform::MacOs;
@@ -49,3 +54,13 @@ fn current_platform() -> Platform {
#[allow(unreachable_code)]
Platform::Windows
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn single_window_close_is_owned_by_the_application() {
assert!(!desktop_window_settings(None).exit_on_close_request);
}
}