diff options
Diffstat (limited to '')
| -rw-r--r-- | src/dialog.rs | 8 | ||||
| -rw-r--r-- | src/main.rs | 10 | ||||
| -rw-r--r-- | src/types.rs | 1 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/dialog.rs b/src/dialog.rs index d5fdc14..3a79dd4 100644 --- a/src/dialog.rs +++ b/src/dialog.rs @@ -10,7 +10,7 @@ pub const UNSAVED_CHANGES_TITLE: &str = "Hold on for a sec!"; pub const WARNING_TITLE: &str = "Heads up!"; pub const ERROR_TITLE: &str = "Oops! Something went wrong."; -#[derive(Debug, Clone, Copy, Default)] +#[derive(Debug, Clone, Copy, Default, PartialEq)] pub enum Action { #[default] None, @@ -18,7 +18,7 @@ pub enum Action { UnsavedChanges(UnsavedChanges), } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq)] pub enum UnsavedChanges { New, Open, @@ -99,5 +99,9 @@ impl Dialog { self.action.into(), ) .title(&*self.title) + .on_press_maybe( + matches!(self.action, Action::Close) + .then_some(Message::CloseDialog), + ) } } diff --git a/src/main.rs b/src/main.rs index 389c827..4df5922 100644 --- a/src/main.rs +++ b/src/main.rs @@ -427,6 +427,12 @@ impl IcedBuilder { Message::CloseApp => { return window::get_latest().and_then(window::close); } + Message::EscapePressed + if self.dialog.action() == dialog::Action::Close => + { + self.dialog.close(); + } + Message::EscapePressed => {} Message::WindowEvent(window::Event::CloseRequested) => { if self.is_dirty { self.dialog = Dialog::unsaved_changes( @@ -458,6 +464,10 @@ impl IcedBuilder { keyboard::Key::Character("n") => Some(Message::NewFile), _ => None, } + } else if key.as_ref() + == keyboard::Key::Named(keyboard::key::Named::Escape) + { + Some(Message::EscapePressed) } else { None } diff --git a/src/types.rs b/src/types.rs index eb3028d..9a81139 100644 --- a/src/types.rs +++ b/src/types.rs @@ -47,6 +47,7 @@ pub enum Message { SaveFileAs, FileSaved(Result<PathBuf, Error>), CloseApp, + EscapePressed, WindowEvent(window::Event), } |
