Skip to content

Commit

Permalink
Merge pull request #1606 from iced-rs/feature/window-close
Browse files Browse the repository at this point in the history
Implement `window::close` action and remove `should_exit`
  • Loading branch information
hecrj committed Dec 15, 2022
2 parents e0c728c + b5ab50b commit d2d1847
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 15 deletions.
5 changes: 3 additions & 2 deletions glutin/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ async fn run_instance<A, E, C>(
let mut cache = user_interface::Cache::default();
let mut state = application::State::new(&application, context.window());
let mut viewport_version = state.viewport_version();
let mut should_exit = false;

application::run_command(
&application,
Expand All @@ -209,6 +210,7 @@ async fn run_instance<A, E, C>(
init_command,
&mut runtime,
&mut clipboard,
&mut should_exit,
&mut proxy,
&mut debug,
context.window(),
Expand Down Expand Up @@ -271,6 +273,7 @@ async fn run_instance<A, E, C>(
&mut renderer,
&mut runtime,
&mut clipboard,
&mut should_exit,
&mut proxy,
&mut debug,
&mut messages,
Expand All @@ -281,8 +284,6 @@ async fn run_instance<A, E, C>(
// Update window
state.synchronize(&application, context.window());

let should_exit = application.should_exit();

user_interface =
ManuallyDrop::new(application::build_user_interface(
&application,
Expand Down
4 changes: 4 additions & 0 deletions native/src/window/action.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ use std::fmt;

/// An operation to be performed on some window.
pub enum Action<T> {
/// Closes the current window and exits the application.
Close,
/// Moves the window with the left mouse button until the button is
/// released.
///
Expand Down Expand Up @@ -54,6 +56,7 @@ impl<T> Action<T> {
T: 'static,
{
match self {
Self::Close => Action::Close,
Self::Drag => Action::Drag,
Self::Resize { width, height } => Action::Resize { width, height },
Self::Maximize(bool) => Action::Maximize(bool),
Expand All @@ -70,6 +73,7 @@ impl<T> Action<T> {
impl<T> fmt::Debug for Action<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Close => write!(f, "Action::Close"),
Self::Drag => write!(f, "Action::Drag"),
Self::Resize { width, height } => write!(
f,
Expand Down
4 changes: 0 additions & 4 deletions src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,8 +270,4 @@ where
fn scale_factor(&self) -> f64 {
self.0.scale_factor()
}

fn should_exit(&self) -> bool {
self.0.should_exit()
}
}
18 changes: 9 additions & 9 deletions winit/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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();
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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>,
Expand All @@ -578,6 +573,7 @@ pub fn update<A: Application, E: Executor>(
command,
runtime,
clipboard,
should_exit,
proxy,
debug,
window,
Expand All @@ -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,
Expand Down Expand Up @@ -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();
}
Expand Down
5 changes: 5 additions & 0 deletions winit/src/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ use iced_native::window;

pub use window::{Event, Mode};

/// Closes the current window and exits the application.
pub fn close<Message>() -> Command<Message> {
Command::single(command::Action::Window(window::Action::Close))
}

/// Begins dragging the window while the left mouse button is held.
pub fn drag<Message>() -> Command<Message> {
Command::single(command::Action::Window(window::Action::Drag))
Expand Down

0 comments on commit d2d1847

Please sign in to comment.