diff options
Diffstat (limited to 'winit/src/application.rs')
-rw-r--r-- | winit/src/application.rs | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index 1706d2e9..7092e124 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -93,13 +93,6 @@ where fn scale_factor(&self) -> f64 { 1.0 } - - /// Returns whether the [`Application`] should be terminated. - /// - /// By default, it returns `false`. - fn should_exit(&self) -> bool { - false - } } /// Runs an [`Application`] with an executor, compositor, and the provided @@ -255,6 +248,7 @@ async fn run_instance<A, E, C>( let mut clipboard = Clipboard::connect(&window); let mut cache = user_interface::Cache::default(); let mut surface = compositor.create_surface(&window); + let mut should_exit = false; let mut state = State::new(&application, &window); let mut viewport_version = state.viewport_version(); @@ -275,6 +269,7 @@ async fn run_instance<A, E, C>( init_command, &mut runtime, &mut clipboard, + &mut should_exit, &mut proxy, &mut debug, &window, @@ -336,6 +331,7 @@ async fn run_instance<A, E, C>( &mut renderer, &mut runtime, &mut clipboard, + &mut should_exit, &mut proxy, &mut debug, &mut messages, @@ -346,8 +342,6 @@ async fn run_instance<A, E, C>( // Update window state.synchronize(&application, &window); - let should_exit = application.should_exit(); - user_interface = ManuallyDrop::new(build_user_interface( &application, cache, @@ -555,6 +549,7 @@ pub fn update<A: Application, E: Executor>( renderer: &mut A::Renderer, runtime: &mut Runtime<E, Proxy<A::Message>, A::Message>, clipboard: &mut Clipboard, + should_exit: &mut bool, proxy: &mut winit::event_loop::EventLoopProxy<A::Message>, debug: &mut Debug, messages: &mut Vec<A::Message>, @@ -578,6 +573,7 @@ pub fn update<A: Application, E: Executor>( command, runtime, clipboard, + should_exit, proxy, debug, window, @@ -598,6 +594,7 @@ pub fn run_command<A, E>( command: Command<A::Message>, runtime: &mut Runtime<E, Proxy<A::Message>, A::Message>, clipboard: &mut Clipboard, + should_exit: &mut bool, proxy: &mut winit::event_loop::EventLoopProxy<A::Message>, debug: &mut Debug, window: &winit::window::Window, @@ -629,6 +626,9 @@ pub fn run_command<A, E>( } }, command::Action::Window(action) => match action { + window::Action::Close => { + *should_exit = true; + } window::Action::Drag => { let _res = window.drag_window(); } @@ -657,9 +657,6 @@ pub fn run_command<A, E>( mode, )); } - window::Action::ToggleMaximize => { - window.set_maximized(!window.is_maximized()) - } window::Action::FetchMode(tag) => { let mode = if window.is_visible().unwrap_or(true) { conversion::mode(window.fullscreen()) @@ -671,6 +668,16 @@ pub fn run_command<A, E>( .send_event(tag(mode)) .expect("Send message to event loop"); } + window::Action::ToggleMaximize => { + window.set_maximized(!window.is_maximized()) + } + window::Action::ToggleDecorations => { + window.set_decorations(!window.is_decorated()) + } + window::Action::RequestUserAttention(user_attention) => window + .request_user_attention( + user_attention.map(conversion::user_attention), + ), }, command::Action::System(action) => match action { system::Action::QueryInformation(_tag) => { |