diff --git a/crates/ui-egui/src/edit_text_ui.rs b/crates/ui-egui/src/edit_text_ui.rs index f5d530713..946a3080c 100644 --- a/crates/ui-egui/src/edit_text_ui.rs +++ b/crates/ui-egui/src/edit_text_ui.rs @@ -87,6 +87,11 @@ impl LineEditor { (self.max_width > self.rect.width()).then_some(self.max_width) } + /// Whether the edited text differs from the original (unsaved changes). + pub fn has_unsaved_text(&self) -> bool { + self.text != self.original + } + /// The formatting the panel changed. pub fn style(&self) -> pdfcraft_engine::BlockStyle { let (l, o) = (&self.look, &self.look0); diff --git a/crates/ui-egui/src/editing.rs b/crates/ui-egui/src/editing.rs index f1b3166e7..08aab2873 100644 --- a/crates/ui-egui/src/editing.rs +++ b/crates/ui-egui/src/editing.rs @@ -349,6 +349,7 @@ impl PdfCraftApp { || v.content.blocked().is_some() || v.forms.focus.as_ref().is_some_and(|f| crate::forms_ui::draft_edit(f, &doc.form).is_some()) || v.fill_text.as_ref().is_some_and(|t| !t.text.trim().is_empty()) + || v.line_editor.as_ref().map_or_else(|| false, |ed| ed.has_unsaved_text()) } /// Save the active document. Returns `true` if it was written.