From 2ce9518be8dd56dea0a9b231ec9e168c53783d41 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 20 Oct 2026 11:37:55 +0800 Subject: [PATCH] Status bar names footnotes and endnotes, not just header/footer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "editing a non-body story" status line only checked "not the body, not a text box" and always said "Editing header/footer" — including while editing a footnote or endnote, which isn't one. Found while checking #3057 against current main (already fixed elsewhere): a headless screenshot of editing a footnote showed this label, which turned out to be an unrelated, still-live bug. Co-Authored-By: Claude Sonnet 5 --- crates/ui-egui/src/canvas.rs | 2 +- crates/ui-egui/src/chrome.rs | 39 +++++++++++++++++++++++++++-- crates/ui-egui/src/i18n/bg.tsv | 2 ++ crates/ui-egui/src/i18n/cs.tsv | 2 ++ crates/ui-egui/src/i18n/de.tsv | 2 ++ crates/ui-egui/src/i18n/es.tsv | 2 ++ crates/ui-egui/src/i18n/et.tsv | 2 ++ crates/ui-egui/src/i18n/fr.tsv | 2 ++ crates/ui-egui/src/i18n/hr.tsv | 2 ++ crates/ui-egui/src/i18n/hu.tsv | 2 ++ crates/ui-egui/src/i18n/it.tsv | 2 ++ crates/ui-egui/src/i18n/ja.tsv | 2 ++ crates/ui-egui/src/i18n/ko.tsv | 2 ++ crates/ui-egui/src/i18n/pl.tsv | 2 ++ crates/ui-egui/src/i18n/pt-br.tsv | 2 ++ crates/ui-egui/src/i18n/ru.tsv | 2 ++ crates/ui-egui/src/i18n/sr-latn.tsv | 2 ++ crates/ui-egui/src/i18n/sr.tsv | 2 ++ crates/ui-egui/src/i18n/sv.tsv | 2 ++ crates/ui-egui/src/i18n/tr.tsv | 2 ++ crates/ui-egui/src/i18n/uk.tsv | 2 ++ crates/ui-egui/src/i18n/vi.tsv | 2 ++ crates/ui-egui/src/i18n/zh-hans.tsv | 2 ++ crates/ui-egui/src/i18n/zh-hant.tsv | 2 ++ 24 files changed, 82 insertions(+), 3 deletions(-) diff --git a/crates/ui-egui/src/canvas.rs b/crates/ui-egui/src/canvas.rs index fabe1d43d..555b1c047 100644 --- a/crates/ui-egui/src/canvas.rs +++ b/crates/ui-egui/src/canvas.rs @@ -2996,7 +2996,7 @@ pub fn in_text_box(app: &WordApp) -> bool { part_kind(app, app.session.sel.focus.story) == Some(PartKind::TextBox) } -fn part_kind(app: &WordApp, s: StoryRef) -> Option { +pub(crate) fn part_kind(app: &WordApp, s: StoryRef) -> Option { match s { StoryRef::Part(id) => app.session.doc.parts.get(&id).map(|p| p.kind), StoryRef::Body => None, diff --git a/crates/ui-egui/src/chrome.rs b/crates/ui-egui/src/chrome.rs index b5b63d141..529e0059c 100644 --- a/crates/ui-egui/src/chrome.rs +++ b/crates/ui-egui/src/chrome.rs @@ -2,7 +2,7 @@ use egui::{Align2, Rect, Sense, Stroke, Ui, pos2, vec2}; use serde_json::json; -use wordcraft_doc::StoryRef; +use wordcraft_doc::{PartKind, StoryRef}; use crate::theme::{Tokens, TypeRung, medium, paint_text, regular, semibold, text_width}; use crate::{WordApp, icons}; @@ -477,7 +477,12 @@ pub fn status_bar(app: &mut WordApp, ui: &mut Ui) { let _ = app.run("ui.dialog", json!({"name": "wordCount"})); } if app.session.sel.focus.story != StoryRef::Body && !crate::canvas::in_text_box(app) { - st(ui, tl!("Editing header/footer")); + let label = match crate::canvas::part_kind(app, app.session.sel.focus.story) { + Some(PartKind::Footnote) => tl!("Editing footnote"), + Some(PartKind::Endnote) => tl!("Editing endnote"), + _ => tl!("Editing header/footer"), + }; + st(ui, label); } // The language at the caret; a click sets the proofing language (Review › Language). let lang = crate::ribbon::caret_language(app); @@ -724,6 +729,36 @@ mod tests { } } + /// The status bar's "editing a non-body story" line named every one of them "Editing + /// header/footer", footnotes and endnotes included — it only ever checked "not the body, + /// not a text box", with no regard for which kind of part it actually was. + #[test] + fn status_bar_names_the_actual_part_being_edited() { + let label = |a: &mut WordApp| { + let ctx = ctx(); + ctx.enable_accesskit(); + let input = egui::RawInput { screen_rect: Some(egui::Rect::from_min_size(egui::Pos2::ZERO, vec2(1200.0, 800.0))), ..Default::default() }; + let mut out = ctx.run_ui(input, |ui| status_bar(a, ui)); + out.textures_delta.clear(); + let update = out.platform_output.accesskit_update.take().unwrap(); + for prefix in ["Editing footnote", "Editing endnote", "Editing header/footer"] { + if update.nodes.iter().any(|(_, node)| node.label().is_some_and(|l| l == prefix)) { + return prefix.to_string(); + } + } + "(none shown)".to_string() + }; + let mut a = WordApp::new(wordcraft_engine::Session::new(wordcraft_doc::Document::new()), crate::Services::default()); + a.run("text.insert", json!({"text": "Body text"})).unwrap(); + a.run("references.footnote", json!({})).unwrap(); + assert_eq!(label(&mut a), "Editing footnote"); + a.run("caret.docEnd", json!({})).unwrap(); + a.run("references.endnote", json!({})).unwrap(); + assert_eq!(label(&mut a), "Editing endnote"); + a.run("insert.createHeader", json!({})).unwrap(); + assert_eq!(label(&mut a), "Editing header/footer"); + } + /// #1903: the footer's Cancel row closes the Undo list without undoing anything. #[test] fn undo_list_cancel_closes_without_undoing() { diff --git a/crates/ui-egui/src/i18n/bg.tsv b/crates/ui-egui/src/i18n/bg.tsv index 1994f2a15..f7dd6bdd6 100644 --- a/crates/ui-egui/src/i18n/bg.tsv +++ b/crates/ui-egui/src/i18n/bg.tsv @@ -320,6 +320,8 @@ Edit\nRecipient List Редактиране на\nсписъка с получатели Edited Редактиран Editing Редактиране + Editing endnote Редактиране на бележка в края + Editing footnote Редактиране на бележка под линия Editing header/footer Редактиране на горен/долен колонтитул Editing — edit the document directly Редактиране – директно редактиране на документа Editor Редактор diff --git a/crates/ui-egui/src/i18n/cs.tsv b/crates/ui-egui/src/i18n/cs.tsv index a7c506073..e891b4309 100644 --- a/crates/ui-egui/src/i18n/cs.tsv +++ b/crates/ui-egui/src/i18n/cs.tsv @@ -377,6 +377,8 @@ Edit\nRecipient List Upravit seznam\npříjemců Edited Upraveno Editing Úpravy + Editing endnote Úprava vysvětlivky + Editing footnote Úprava poznámky pod čarou Editing header/footer Úprava záhlaví/zápatí Editing — edit the document directly Úpravy — přímá úprava dokumentu Editor Editor diff --git a/crates/ui-egui/src/i18n/de.tsv b/crates/ui-egui/src/i18n/de.tsv index eeb70c65e..af83ca259 100644 --- a/crates/ui-egui/src/i18n/de.tsv +++ b/crates/ui-egui/src/i18n/de.tsv @@ -322,6 +322,8 @@ Edit\nRecipient List Empfängerliste\nbearbeiten Edited Bearbeitet Editing Bearbeitung + Editing endnote Endnote bearbeiten + Editing footnote Fußnote bearbeiten Editing header/footer Kopf-/Fußzeile bearbeiten Editing — edit the document directly Bearbeitung — das Dokument direkt bearbeiten Editor Editor diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv index 19ef8fcf5..bb7fbef71 100644 --- a/crates/ui-egui/src/i18n/es.tsv +++ b/crates/ui-egui/src/i18n/es.tsv @@ -374,6 +374,8 @@ Edit\nRecipient List Editar lista de\ndestinatarios Edited Editado Editing Edición + Editing endnote Editando nota final + Editing footnote Editando nota al pie Editing header/footer Editando encabezado y pie de página Editing — edit the document directly Edición — edita el documento directamente Editor Editor diff --git a/crates/ui-egui/src/i18n/et.tsv b/crates/ui-egui/src/i18n/et.tsv index 0aa9e52c1..914180ae1 100644 --- a/crates/ui-egui/src/i18n/et.tsv +++ b/crates/ui-egui/src/i18n/et.tsv @@ -238,6 +238,8 @@ Edit\nRecipient List Muuda\nadressaatide loendit Edited Muudetud Editing Redigeerimine + Editing endnote Lõpumärkuse redigeerimine + Editing footnote Allmärkuse redigeerimine Editing header/footer Päise või jaluse redigeerimine Editing — edit the document directly Redigeerimine — muuda dokumenti otse Editor Toimetaja diff --git a/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv index 44c9cb937..76249e5bc 100644 --- a/crates/ui-egui/src/i18n/fr.tsv +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -332,6 +332,8 @@ Edit\nRecipient List Modifier\nla liste des destinataires Edited Modifié Editing Modification + Editing endnote Modification de la note de fin + Editing footnote Modification de la note de bas de page Editing header/footer Modification de l’en-tête/pied de page Editing — edit the document directly Modification — modifier directement le document Editor Éditeur diff --git a/crates/ui-egui/src/i18n/hr.tsv b/crates/ui-egui/src/i18n/hr.tsv index 15bbbb54d..0ee437f69 100644 --- a/crates/ui-egui/src/i18n/hr.tsv +++ b/crates/ui-egui/src/i18n/hr.tsv @@ -745,6 +745,8 @@ Edit\nRecipient List Uredi\npopis primatelja Edited Uređeno Editing Uređivanje + Editing endnote Uređivanje bilješke na kraju + Editing footnote Uređivanje fusnote Editing header/footer Uređivanje zaglavlja/podnožja Editing in this document is restricted. Uređivanje u ovom dokumentu je ograničeno. Editing — edit the document directly Uređivanje – izravno uređujte dokument diff --git a/crates/ui-egui/src/i18n/hu.tsv b/crates/ui-egui/src/i18n/hu.tsv index 33951fee5..f1a904d9d 100644 --- a/crates/ui-egui/src/i18n/hu.tsv +++ b/crates/ui-egui/src/i18n/hu.tsv @@ -234,6 +234,8 @@ Edit\nRecipient List Címzettlista\nszerkesztése Edited Szerkesztve Editing Szerkesztés + Editing endnote Végjegyzet szerkesztése + Editing footnote Lábjegyzet szerkesztése Editing header/footer Élőfej és élőláb szerkesztése Editing — edit the document directly Szerkesztés – a dokumentum közvetlen módosítása Editor Szerkesztő diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv index 3dd2b6d61..f1230ce15 100644 --- a/crates/ui-egui/src/i18n/it.tsv +++ b/crates/ui-egui/src/i18n/it.tsv @@ -315,6 +315,8 @@ Edit\nRecipient List Modifica elenco\ndestinatari Edited Modificato Editing Modifica + Editing endnote Modifica nota di chiusura + Editing footnote Modifica nota a piè di pagina Editing header/footer Modifica intestazione/piè di pagina Editing — edit the document directly Modifica — modifica direttamente il documento Editor Editor diff --git a/crates/ui-egui/src/i18n/ja.tsv b/crates/ui-egui/src/i18n/ja.tsv index d633eac51..1fc1b401c 100644 --- a/crates/ui-egui/src/i18n/ja.tsv +++ b/crates/ui-egui/src/i18n/ja.tsv @@ -378,6 +378,8 @@ Edit\nRecipient List アドレス帳の編集 Edited 編集済み Editing 編集 + Editing endnote 文末脚注を編集中 + Editing footnote 脚注を編集中 Editing header/footer ヘッダー/フッターを編集中 Editing — edit the document directly 編集 — 文書を直接編集します Editor エディター diff --git a/crates/ui-egui/src/i18n/ko.tsv b/crates/ui-egui/src/i18n/ko.tsv index 7e50812e0..1933aa726 100644 --- a/crates/ui-egui/src/i18n/ko.tsv +++ b/crates/ui-egui/src/i18n/ko.tsv @@ -369,6 +369,8 @@ Edit\nRecipient List 받는 사람\n목록 편집 Edited 편집됨 Editing 편집 + Editing endnote 미주 편집 + Editing footnote 각주 편집 Editing header/footer 머리글/바닥글 편집 Editing — edit the document directly 편집 — 문서를 직접 편집합니다 Editor 편집기 diff --git a/crates/ui-egui/src/i18n/pl.tsv b/crates/ui-egui/src/i18n/pl.tsv index ccbeb471f..c0d8a2ebd 100644 --- a/crates/ui-egui/src/i18n/pl.tsv +++ b/crates/ui-egui/src/i18n/pl.tsv @@ -236,6 +236,8 @@ Edit\nRecipient List Edytuj listę\nadresatów Edited Zmieniony Editing Edytowanie + Editing endnote Edycja przypisu końcowego + Editing footnote Edycja przypisu dolnego Editing header/footer Edycja nagłówka/stopki Editing — edit the document directly Edytowanie — zmiany trafiają wprost do dokumentu Editor Edytor diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 1a1038e1a..7176f094d 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -379,6 +379,8 @@ Edit\nRecipient List Editar lista\nde destinatários Edited Editado Editing Edição + Editing endnote Editando nota de fim + Editing footnote Editando nota de rodapé Editing header/footer Editando cabeçalho/rodapé Editing — edit the document directly Edição — edite o documento diretamente Editor Editor diff --git a/crates/ui-egui/src/i18n/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv index cd064b4ee..712cb3db8 100644 --- a/crates/ui-egui/src/i18n/ru.tsv +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -236,6 +236,8 @@ Edit\nRecipient List Изменить список\nполучателей Edited Изменено Editing Редактирование + Editing endnote Редактирование концевой сноски + Editing footnote Редактирование сноски Editing header/footer Редактирование колонтитула Editing — edit the document directly Редактирование — правка документа напрямую Editor Редактор diff --git a/crates/ui-egui/src/i18n/sr-latn.tsv b/crates/ui-egui/src/i18n/sr-latn.tsv index 8e0a9136c..174ab0a33 100644 --- a/crates/ui-egui/src/i18n/sr-latn.tsv +++ b/crates/ui-egui/src/i18n/sr-latn.tsv @@ -426,6 +426,8 @@ Edit\nRecipient List Uredi\nlistu primalaca Edited Izmenjeno Editing Uređivanje + Editing endnote Uređivanje endnote + Editing footnote Uređivanje fusnote Editing header/footer Uređivanje zaglavlja/podnožja Editing — edit the document directly Uređivanje — menjajte dokument direktno Editor Urednik diff --git a/crates/ui-egui/src/i18n/sr.tsv b/crates/ui-egui/src/i18n/sr.tsv index c55fa2c7e..7d5393224 100644 --- a/crates/ui-egui/src/i18n/sr.tsv +++ b/crates/ui-egui/src/i18n/sr.tsv @@ -430,6 +430,8 @@ Edit\nRecipient List Уреди\nлисту прималаца Edited Измењено Editing Уређивање + Editing endnote Уређивање ендноте + Editing footnote Уређивање фусноте Editing header/footer Уређивање заглавља/подножја Editing — edit the document directly Уређивање — мењајте документ директно Editor Уредник diff --git a/crates/ui-egui/src/i18n/sv.tsv b/crates/ui-egui/src/i18n/sv.tsv index 2098fc278..42938fb93 100644 --- a/crates/ui-egui/src/i18n/sv.tsv +++ b/crates/ui-egui/src/i18n/sv.tsv @@ -367,6 +367,8 @@ Edit\nRecipient List Redigera\nmottagarlista Edited Ändrat Editing Redigering + Editing endnote Redigerar slutnot + Editing footnote Redigerar fotnot Editing header/footer Redigerar sidhuvud/sidfot Editing — edit the document directly Redigering – redigera dokumentet direkt Editor Språkkontroll diff --git a/crates/ui-egui/src/i18n/tr.tsv b/crates/ui-egui/src/i18n/tr.tsv index 50799c62d..2795ccd3c 100644 --- a/crates/ui-egui/src/i18n/tr.tsv +++ b/crates/ui-egui/src/i18n/tr.tsv @@ -232,6 +232,8 @@ Edit\nRecipient List Alıcı Listesini\nDüzenle Edited Düzenlendi Editing Düzenleme + Editing endnote Sonnot düzenleniyor + Editing footnote Dipnot düzenleniyor Editing header/footer Üstbilgi/altbilgi düzenleniyor Editing — edit the document directly Düzenleme — belgeyi doğrudan düzenleyin Editor Düzenleyici diff --git a/crates/ui-egui/src/i18n/uk.tsv b/crates/ui-egui/src/i18n/uk.tsv index f32758595..9e84b6219 100644 --- a/crates/ui-egui/src/i18n/uk.tsv +++ b/crates/ui-egui/src/i18n/uk.tsv @@ -388,6 +388,8 @@ Edit\nRecipient List Редагувати\nсписок одержувачів Edited Відредаговано Editing Редагування + Editing endnote Редагування кінцевої виноски + Editing footnote Редагування виноски Editing header/footer Редагування колонтитула Editing — edit the document directly Редагування — безпосередні зміни в документі Editor Редактор diff --git a/crates/ui-egui/src/i18n/vi.tsv b/crates/ui-egui/src/i18n/vi.tsv index e2bfe75ec..76c7d469b 100644 --- a/crates/ui-egui/src/i18n/vi.tsv +++ b/crates/ui-egui/src/i18n/vi.tsv @@ -314,6 +314,8 @@ Edit\nRecipient List Sửa\ndanh sách người nhận Edited Đã sửa Editing Chỉnh sửa + Editing endnote Đang chỉnh sửa chú thích cuối tài liệu + Editing footnote Đang chỉnh sửa chú thích chân trang Editing header/footer Đang chỉnh sửa đầu trang/chân trang Editing — edit the document directly Chỉnh sửa — sửa tài liệu trực tiếp Editor Trình biên tập diff --git a/crates/ui-egui/src/i18n/zh-hans.tsv b/crates/ui-egui/src/i18n/zh-hans.tsv index d733ca8f0..a8a21e71e 100644 --- a/crates/ui-egui/src/i18n/zh-hans.tsv +++ b/crates/ui-egui/src/i18n/zh-hans.tsv @@ -390,6 +390,8 @@ Edit\nRecipient List 编辑收件人列表 Edited 已编辑 Editing 编辑 + Editing endnote 正在编辑尾注 + Editing footnote 正在编辑脚注 Editing header/footer 正在编辑页眉/页脚 Editing — edit the document directly 编辑 — 直接编辑文档 Editor 编辑器 diff --git a/crates/ui-egui/src/i18n/zh-hant.tsv b/crates/ui-egui/src/i18n/zh-hant.tsv index a8bc708ea..81021e477 100644 --- a/crates/ui-egui/src/i18n/zh-hant.tsv +++ b/crates/ui-egui/src/i18n/zh-hant.tsv @@ -379,6 +379,8 @@ Edit\nRecipient List 編輯收件者清單 Edited 已編輯 Editing 編輯 + Editing endnote 正在編輯章節附註 + Editing footnote 正在編輯註腳 Editing header/footer 正在編輯頁首/頁尾 Editing — edit the document directly 編輯 — 直接編輯文件 Editor 編輯器