diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 80e1250d8..66c179e50 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -5,8 +5,9 @@ use std::time::Instant; use egui::{epaint::ahash::HashMap, window::ViewportBuilder}; use raw_window_handle::{HasRawDisplayHandle as _, HasRawWindowHandle as _}; -use winit::event_loop::{ - ControlFlow, EventLoop, EventLoopBuilder, EventLoopProxy, EventLoopWindowTarget, +use winit::{ + event_loop::{ControlFlow, EventLoop, EventLoopBuilder, EventLoopProxy, EventLoopWindowTarget}, + window::WindowButtons, }; #[cfg(feature = "accesskit")] @@ -1943,6 +1944,15 @@ fn create_winit_window_builder(builder: &ViewportBuilder) -> winit::window::Wind .fullscreen .then(|| winit::window::Fullscreen::Borderless(None)), ) + .with_enabled_buttons( + WindowButtons::MAXIMIZE + | WindowButtons::MINIMIZE + | if builder.close_button { + WindowButtons::CLOSE + } else { + WindowButtons::empty() + }, + ) .with_active(builder.active); if let Some(inner_size) = builder.inner_size { window_builder = window_builder diff --git a/crates/egui/src/containers/window.rs b/crates/egui/src/containers/window.rs index 07c13bd7f..a2df4b4c2 100644 --- a/crates/egui/src/containers/window.rs +++ b/crates/egui/src/containers/window.rs @@ -26,6 +26,8 @@ pub struct ViewportBuilder { pub min_inner_size: Option<(u32, u32)>, pub max_inner_size: Option<(u32, u32)>, pub drag_and_drop: bool, + + pub close_button: bool, } impl Default for ViewportBuilder { @@ -49,6 +51,7 @@ impl Default for ViewportBuilder { min_inner_size: None, max_inner_size: None, drag_and_drop: true, + close_button: true, } } } @@ -468,6 +471,7 @@ impl<'open> Window<'open> { window_builder = window_builder.with_inner_size((size.x as u32 + 1, size.y as u32 + 1)); } + window_builder.close_button = open.is_some(); let area_id = area.id;