 308e092153
			
		
	
	
		308e092153
		
	
	
	
	
		
			
			Add a method to get the focused window. Use this instead of `WindowFocused` events in `close_on_esc`. Seems that the OS/window manager might not always send focused events on application startup. Sadly, not a fix for #5646. Co-authored-by: devil-ira <justthecooldude@gmail.com>
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use crate::{Window, WindowCloseRequested, Windows};
 | |
| 
 | |
| use bevy_app::AppExit;
 | |
| use bevy_ecs::prelude::*;
 | |
| use bevy_input::{keyboard::KeyCode, Input};
 | |
| 
 | |
| /// Exit the application when there are no open windows.
 | |
| ///
 | |
| /// This system is added by the [`WindowPlugin`] in the default configuration.
 | |
| /// To disable this behaviour, set `close_when_requested` (on the [`WindowPlugin`]) to `false`.
 | |
| /// Ensure that you read the caveats documented on that field if doing so.
 | |
| ///
 | |
| /// [`WindowPlugin`]: crate::WindowPlugin
 | |
| pub fn exit_on_all_closed(mut app_exit_events: EventWriter<AppExit>, windows: Res<Windows>) {
 | |
|     if windows.iter().count() == 0 {
 | |
|         app_exit_events.send(AppExit);
 | |
|     }
 | |
| }
 | |
| 
 | |
| /// Close windows in response to [`WindowCloseRequested`] (e.g.  when the close button is pressed).
 | |
| ///
 | |
| /// This system is added by the [`WindowPlugin`] in the default configuration.
 | |
| /// To disable this behaviour, set `close_when_requested` (on the [`WindowPlugin`]) to `false`.
 | |
| /// Ensure that you read the caveats documented on that field if doing so.
 | |
| ///
 | |
| /// [`WindowPlugin`]: crate::WindowPlugin
 | |
| pub fn close_when_requested(
 | |
|     mut windows: ResMut<Windows>,
 | |
|     mut closed: EventReader<WindowCloseRequested>,
 | |
| ) {
 | |
|     for event in closed.iter() {
 | |
|         windows.get_mut(event.id).map(Window::close);
 | |
|     }
 | |
| }
 | |
| 
 | |
| /// Close the focused window whenever the escape key (<kbd>Esc</kbd>) is pressed
 | |
| ///
 | |
| /// This is useful for examples or prototyping.
 | |
| pub fn close_on_esc(mut windows: ResMut<Windows>, input: Res<Input<KeyCode>>) {
 | |
|     if input.just_pressed(KeyCode::Escape) {
 | |
|         if let Some(window) = windows.get_focused_mut() {
 | |
|             window.close();
 | |
|         }
 | |
|     }
 | |
| }
 |