edit_window: Add save and cancel shortcuts

This commit is contained in:
Sophie Herold 2025-01-31 13:49:20 +01:00
parent 11553bdab0
commit 8bb6f8da88
4 changed files with 70 additions and 11 deletions

View file

@ -48,6 +48,8 @@ mod imp {
saving_status: TemplateChild<gtk::Label>,
#[template_child]
saving_info: TemplateChild<gtk::Revealer>,
#[template_child]
shortcut_controller: TemplateChild<gtk::ShortcutController>,
#[property(get, construct_only)]
original_image: OnceCell<LpImage>,
@ -82,6 +84,10 @@ mod imp {
async move { obj.imp().save_overwrite().await }
));
});
klass.install_action("edit.cancel", None, move |obj, _, _| {
obj.imp().cancel();
});
}
fn instance_init(obj: &glib::subclass::InitializingObject<Self>) {
@ -96,17 +102,6 @@ mod imp {
let obj = self.obj();
self.cancel.connect_clicked(glib::clone!(
#[weak]
obj,
move |_| {
if let Some(cancellable) = obj.imp().save_cancellable.replace(None) {
cancellable.cancel();
}
obj.window().show_image();
}
));
glib::spawn_future_local(glib::clone!(
#[weak]
obj,
@ -115,6 +110,30 @@ mod imp {
obj.action_set_enabled("edit.save-overwrite", can_trash);
}
));
self.shortcut_controller.add_shortcut(gtk::Shortcut::new(
Some(gtk::KeyvalTrigger::new(
gdk::Key::S,
gdk::ModifierType::CONTROL_MASK,
)),
Some(gtk::NamedAction::new("edit.save-overwrite")),
));
self.shortcut_controller.add_shortcut(gtk::Shortcut::new(
Some(gtk::KeyvalTrigger::new(
gdk::Key::S,
gdk::ModifierType::CONTROL_MASK.union(gdk::ModifierType::SHIFT_MASK),
)),
Some(gtk::NamedAction::new("edit.save-copy")),
));
self.shortcut_controller.add_shortcut(gtk::Shortcut::new(
Some(gtk::KeyvalTrigger::new(
gdk::Key::Escape,
gdk::ModifierType::NO_MODIFIER_MASK,
)),
Some(gtk::NamedAction::new("edit.cancel")),
));
}
}
@ -136,6 +155,15 @@ mod imp {
impl BinImpl for LpEditWindow {}
impl LpEditWindow {
fn cancel(&self) {
let obj = self.obj();
if let Some(cancellable) = obj.imp().save_cancellable.replace(None) {
cancellable.cancel();
}
obj.window().show_image();
}
async fn save_copy(&self) {
let obj = self.obj();
self.done.popdown();