From 06a847420732b1cc7d6fe06e4f209142483e88d3 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Fri, 31 Jan 2025 14:01:33 +0100 Subject: [PATCH] edit: Disable save actions --- .../48.beta/fixed-edit-disable-save-actions | 1 + src/widgets/edit_window.rs | 42 ++++++++++++------- src/widgets/edit_window.ui | 3 +- 3 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 news.d/48.beta/fixed-edit-disable-save-actions diff --git a/news.d/48.beta/fixed-edit-disable-save-actions b/news.d/48.beta/fixed-edit-disable-save-actions new file mode 100644 index 0000000..5db6824 --- /dev/null +++ b/news.d/48.beta/fixed-edit-disable-save-actions @@ -0,0 +1 @@ +edit: Disable save actions when saving or no changes have been done. diff --git a/src/widgets/edit_window.rs b/src/widgets/edit_window.rs index b985347..9fcbebc 100644 --- a/src/widgets/edit_window.rs +++ b/src/widgets/edit_window.rs @@ -41,7 +41,7 @@ mod imp { #[template_child] cancel: TemplateChild, #[template_child] - pub(crate) done: TemplateChild, + pub(crate) save: TemplateChild, #[template_child] saving_revealer: TemplateChild, #[template_child] @@ -148,8 +148,10 @@ mod imp { .connect_cropped_notify(glib::clone!( #[weak] obj, - move |_| obj.imp().done.set_sensitive(obj.is_done_sensitive()) + move |_| obj.imp().update_save_state(false) )); + + self.update_save_state(false); } } impl BinImpl for LpEditWindow {} @@ -166,7 +168,7 @@ mod imp { async fn save_copy(&self) { let obj = self.obj(); - self.done.popdown(); + self.save.popdown(); if let Some(current_file) = obj.original_image().file() { let cancellable = gio::Cancellable::new(); @@ -246,7 +248,7 @@ mod imp { async fn save_overwrite(&self) { let obj = self.obj(); - self.done.popdown(); + self.save.popdown(); if let Some(current_file) = obj.original_image().file() { if let Some(current_path) = current_file.path() { @@ -387,7 +389,7 @@ mod imp { let is_saving = message.is_some(); self.saving_status.set_label(&message.unwrap_or_default()); self.saving_revealer.set_reveal_child(is_saving); - self.done.set_sensitive(!is_saving); + self.update_save_state(is_saving); if is_saving { // Show text and spinner delayed @@ -407,6 +409,25 @@ mod imp { self.saving_info.set_reveal_child(false); } } + + fn is_save_sensitive(&self) -> bool { + let obj = self.obj(); + + self.operations + .borrow() + .as_ref() + .is_some_and(|x| !x.operations().is_empty()) + || obj.edit_crop().selection().cropped() + } + + pub fn update_save_state(&self, force_disabled: bool) { + let obj = self.obj(); + let enabled = self.is_save_sensitive() && !force_disabled; + + self.save.set_sensitive(enabled); + obj.action_set_enabled("edit.save-overwrite", enabled); + obj.action_set_enabled("edit.save-copy", enabled); + } } } @@ -436,16 +457,7 @@ impl LpEditWindow { pub fn set_operations(&self, operations: Option>) { let imp = self.imp(); imp.operations.replace(operations); - imp.done.set_sensitive(self.is_done_sensitive()); - } - - pub fn is_done_sensitive(&self) -> bool { - self.imp() - .operations - .borrow() - .as_ref() - .is_some_and(|x| !x.operations().is_empty()) - || self.edit_crop().selection().cropped() + imp.update_save_state(false); } pub fn add_operation(&self, operation: glycin::Operation) { diff --git a/src/widgets/edit_window.ui b/src/widgets/edit_window.ui index 8df7adc..f25e792 100644 --- a/src/widgets/edit_window.ui +++ b/src/widgets/edit_window.ui @@ -67,10 +67,9 @@ - + _Save true - false