summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpml68 <contact@pml68.dev>2025-07-10 02:50:21 +0200
committerpml68 <contact@pml68.dev>2025-07-10 02:51:02 +0200
commit55f4a4db74209ddfb6a67b3ed431b360807e039e (patch)
treeabb2a3ac459776f5a9ef790f7b11c99c1c07c775 /src
parentchore: switch to `[patch.crates-io]` according to `iced_dialog` changes (diff)
downloadiced-builder-55f4a4db74209ddfb6a67b3ed431b360807e039e.tar.gz
feat: make close-only dialogs closable via `Esc` or clicking the backdrop
Diffstat (limited to 'src')
-rw-r--r--src/dialog.rs8
-rw-r--r--src/main.rs10
-rw-r--r--src/types.rs1
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),
}