Commit Graph
496 Commits
Author SHA1 Message Date
Mat Strangeandopencode f87ab00a61 The Document Inspector refuses its removals while the document tracks changes
The inspector's removals delete straight from the document: the hidden
text, the comments, the revisions and the headers go without ever reaching
the engine's tracked-delete path. On a document that tracks changes — and
`trackedChanges` protection turns tracking on — the content was gone with
no revision to show for it, and the revision trail was broken behind the
user's back.

The removals are not tracked, so they cannot be: rather than untrack them
silently, the inspector refuses the whole removal form while the document
tracks changes, and says why ("the document tracks changes: stop tracking
before removing content"). The check comes before anything is removed, so
the document is left untouched, and reading the document — the inspector
without removals — keeps working. A document that does not track changes
is inspected as before.

Co-Authored-By: opencode <noreply@opencode.ai>
2026-10-22 21:19:58 -06:00
Mat Strangeandopencode ec1b539395 The inspector's removals are refused in every protected mode
`file.inspect` with removals takes content out of the document — the
comments, the revisions, the properties, the hidden text, the headers.
Under readOnly and comments it was refused, or rolled back by the
post-check where the document had an exception; under trackedChanges
nothing stopped it, so a document that tracks changes could have its
comments and revisions taken out with no revision to show for it.

The removals are refused now, in every mode a protected document can be
in, next to the properties and the privacy options. An inspection without
removals only reads the document, and still works.

The protection test covers the modes now, not only readOnly.

Co-Authored-By: opencode <noreply@opencode.ai>
2026-10-22 23:51:19 +01:00
Mat Strangeandopencode 5151809e11 Merge origin/main into fix/protection-file-commands
Resolves the conflicts with the changes that landed since the branch was cut:

- crates/engine/src/cmd/protect.rs: the forms-mode refusals stay behind
  upstream's `greyed_out()` (so the ribbon still greys the Developer tab's
  control buttons out), and the refusal of the document's properties and its
  privacy options is added on top of it.
- ROADMAP.md, docs/file-format-parity.md, docs/gaps.md: both sides' entries
  are kept; the status lines carry the merge's date and this change at the
  front.

Co-Authored-By: opencode <noreply@opencode.ai>
2026-10-22 23:08:09 +01:00
aiongg 2060f86e8e Merge PR #3139: Fix #3137: Cannot insert a tab inside table cells (missing Ctrl+Tab shortcut)
docs/typing-parity.md: status entry prepended to main's line.
2026-10-22 01:54:35 +00:00
aiongg c354162712 Merge PR #3056: Insert Table of Figures: a dialog with the caption label (Table, Equation, your own) (#3013)
ROADMAP.md: the PR's status entry prepended to main's first status line. i18n catalogs: union by key.
2026-10-22 01:51:21 +00:00
aiongg d99ac8c5a7 Merge PR #2784: #2738: Home › Underline drop-down shows its lines, None, More Underlines… and Underline Color
ROADMAP.md: the PR's status entry prepended to main's first status line. docs/parity-checklist.md: main's side, regenerated after the merges. ko.tsv: union.
2026-10-22 01:50:43 +00:00
aiongg 5dc68481ed Integration: track t09
crates/ui-egui/src/backstage.rs: t03's bidi_display on the Recent names over t09's borrowed name/path. people.toml: union. Tests: both tracks' tests kept whole. Docs: status lines combined, rows unioned or word-merged.
2026-10-22 01:48:25 +00:00
aiongg e1e258e4d9 Integration: track t08
contributors/people.toml: union. crates/layout/src/tests.rs: both tracks' tests kept whole. Docs: status lines combined, rows unioned or word-merged.
2026-10-22 01:47:56 +00:00
aiongg 04b3881e3e Integration: track t06
docs/gaps.md row 4: one row (t06 had kept a second, older copy of it); t05's #1840 and t06's #2964 clauses both in, main's #2963 clause kept. docs/recovery.md: t06's retry sentence with t01's base64 size text. Test files: both tracks' tests kept whole.
2026-10-22 01:47:34 +00:00
aiongg 16d1c8a933 Integration: track t05
crates/pdf/src/lib.rs: t01's vector_text kept before t05's watermark (box area signature). Test files and canvas.rs tests: both tracks' tests kept whole. Docs: status lines combined, rows unioned or word-merged.
2026-10-22 01:46:47 +00:00
aiongg 0d3b8eb0cb Integration: track t04
crates/formats/src/odt.rs: t01's Body::new/take_blocks kept; take_blocks finishes tables with t04's TableB::finish (column widths). Test files: both tracks' tests kept whole. Docs: status lines combined, rows unioned or word-merged.
2026-10-22 01:46:17 +00:00
aiongg 245b5bd8d0 Integration: track t02
Docs: status lines combined (t02's entries first); log rows unioned; file-format-parity .rtf row from t02 (#1653, duplicate .rtf row dropped as t02 did), .odt row word-merged.
2026-10-22 01:44:01 +00:00
aiongg ef00b55870 Merge PR #3429: #3415: banded rows shade the same rows in the reference app and WordCraft (table style band sizes)
crates/docx/tests/fixtures.rs: union, keeps main's shape-gradient test and the PR's band-size tests.
ROADMAP.md, docs/file-format-parity.md: main's status lines with this change added to the newest; log rows from both sides in date order.
2026-10-22 01:25:02 +00:00
aiongg c91ac7f68f Merge PR #3291: #2428: the table's move and resize handles show while the caret is in it
ROADMAP.md, docs/ui-parity.md: main's status lines with this change added to the newest; log rows from both sides in date order.
2026-10-22 01:24:49 +00:00
aiongg c7d5a949a7 Merge PR #3232: #2038: a click below a floating table goes to the text, not its last row
ROADMAP.md, docs/layout-parity.md: main's status lines with this change added to the newest; log rows from both sides in date order.
2026-10-22 01:24:36 +00:00
aiongg eb5d0b74ed Merge PR #3205: #2802: Delete on whole table cells leaves one empty paragraph in each
ROADMAP.md: main's status lines with this change added to the newest; progress-log rows from both sides in date order.
2026-10-22 01:23:54 +00:00
aiongg f90a9896ad Merge PR #3481: fix(engine): toggle off style-inherited lists (#3459)
ROADMAP.md, docs/gaps.md, docs/typing-parity.md: status lines and revision histories carry both sides.
2026-10-22 01:23:52 +00:00
aiongg b0fb2b9386 Merge PR #2101: File: recovery copies and .json files store pictures as base64 (#586 follow-up)
ROADMAP.md: status line, progress log and revision history carry both sides.
docs/file-format-parity.md: status line and change log carry both sides.
2026-10-22 01:22:47 +00:00
aiongg 9e2b624792 Integration: #3434 drop review-bot notes from test doc comments 2026-10-22 01:22:31 +00:00
aiongg 833a75d59c Merge PR #3434: Save As no longer swallows a failed save silently
crates/ui-egui/src/lib.rs: kept main's removal of the Focus Escape block from logic() (Escape handling moved in #1733); took #3434's comment on the Recent/Save As error reset.
2026-10-22 01:22:25 +00:00
aiongg f247a0f1c9 Integration: #1985 only ^0nnn codes read as Windows-1252 2026-10-22 01:22:10 +00:00
aiongg e362772dee Integration: #1851 DOCPROPERTY accepts the reference app's LastSavedBy name 2026-10-22 01:22:02 +00:00
aiongg 1d0916bfec Merge PR #3478: fix(engine, layout): evaluate FILENAME field and support \p switch
crates/engine/src/cmd/references.rs: Update Field keeps both the DOCPROPERTY (#1851) and FILENAME arms.
crates/layout/src/tests.rs: main's #2048 tests and the PR's cache tests kept.
2026-10-22 01:21:44 +00:00
aiongg 6bdd901cc9 Merge PR #3335: #3331: closing the header or footer returns to the body selection
ROADMAP.md,docs/ui-parity.md: status lines keep main's with the PR's item added; tables and lists union.
2026-10-22 01:21:41 +00:00
aiongg 1cb405ea48 Merge PR #3269: #3003: Save to a NAS share mounted by GVFS keeps working when it refuses a mode change
ROADMAP.md,docs/file-format-parity.md: status lines keep main's with the PR's item added; tables and lists union.
2026-10-22 01:21:41 +00:00
aiongg 5c63e25ddc Merge PR #3178: Dragging a picture near the bottom of a page moves it off the page (#3169)
ROADMAP.md,docs/layout-parity.md: status lines keep main's with the PR's item added; tables and lists union.
2026-10-22 01:21:41 +00:00
aiongg 3df5e8ec39 Merge PR #2373: Tables: dragging a single selected cell's border resizes only that cell (UI gap)
ROADMAP.md, docs/ui-parity.md: main's status lines kept; the PR's log rows added.
2026-10-22 01:21:40 +00:00
aiongg 93bfd4671c Merge PR #3234: Restrict Editing: forms protection greys out the content-control buttons
ROADMAP.md: status line kept main's, #3234's change added as a previous change; both progress-log and revision rows.
docs/ui-parity.md: status line kept main's, #3234's change added as a previous change; Ribbon row keeps main's text plus the forms-protection sentence; both revision rows.
2026-10-22 01:21:35 +00:00
aiongg ecef6d4ab6 Merge PR #3299: M15: persist the default proofing language across restarts (#2882)
ROADMAP.md: main's status lines; both progress-log rows kept.
docs/gaps.md: main's status line; revision rows unioned.
docs/localization-parity.md: main's status line; revision rows unioned.
2026-10-22 01:21:35 +00:00
aiongg dcf2763480 Merge PR #3071: Layout: Format Page Numbers dialog (#1113)
ROADMAP.md,docs/gaps.md,docs/ui-parity.md: status lines keep main's with the PR's item added; tables and lists union.
2026-10-22 01:21:17 +00:00
aiongg 992c74e5c8 Merge PR #2506: #2233, #2234: inline pictures drag to a dashed insertion cursor and stay inline
crates/ui-egui/src/objects.rs: kept both new functions (dragged_off_page from main, drop_point from the PR).
ROADMAP.md, docs/ui-parity.md: status lines keep main's with the PR's item added; log rows union.
2026-10-22 01:21:17 +00:00
aiongg 43b922e667 Merge PR #2692: Formatting revisions: track table, row, cell and section property changes
ROADMAP.md: both progress-log rows, #2692's under main's newest 2026-10-17 row.
docs/gaps.md: status line kept main's, #2692's change added as a previous change.
2026-10-22 01:20:55 +00:00
aiongg 53418631eb Merge PR #1739: Tables nest 24 deep at most, so pasting a table into its own cell can't build a document that crashes (#1596)
ROADMAP.md: main's status line kept; both progress-log lines added.
docs/target-app-parity.md: main's status line and Tables row kept, #1596 sentence added to the row; log row added.
2026-10-22 01:20:47 +00:00
aiongg 9b1d6c8393 Merge PR #2470: File: a text file saved over itself closes without asking (#2376)
ROADMAP.md,docs/ui-parity.md: status lines keep main's with the PR's item added; tables and lists union.
2026-10-22 01:20:37 +00:00
aiongg 0ee24065e6 Merge PR #3358: List AutoFormat triggers in front of already-written text 2026-10-22 01:20:01 +00:00
aiongg cbc3246c2c Merge PR #2298: Comments: comments in headers, footers, notes and text boxes are listed, get balloons and are reached by Next/Previous (#2289) 2026-10-22 01:20:00 +00:00
aiongg 861236167f Merge PR #2098: Opening a named pipe or a device no longer hangs or eats memory, whatever its name (#1444 follow-up)
contributors/people.toml: union of both sides' new entries.
2026-10-22 01:19:58 +00:00
aiongg 2e67eba0e7 Merge PR #3511: fix(engine): validate bookmark names by character count and character classes 2026-10-22 01:19:56 +00:00
aiongg 2d4455ff34 Integration: #1847 reject comment IDs above u32::MAX 2026-10-22 01:19:54 +00:00
aiongg 60cd2547e2 Merge PR #3497: Date pictures: pad hh on the 12-hour clock
crates/engine/src/cmd/insert.rs: date_pictures test keeps both PRs' assertions.
2026-10-22 01:19:53 +00:00
aiongg bfbf732047 Merge PR #3496: Date pictures: accept uppercase D and Y 2026-10-22 01:19:47 +00:00
aiongg 3784187781 Merge PR #3252: Russian and Czech dictionaries are reported, not just checked (#3226) 2026-10-22 01:19:47 +00:00
aiongg d21c8825c2 Merge PR #2429: DOCX: keep the reference app's Table of Contents content control around a TOC the writer doesn't rebuild 2026-10-22 01:19:47 +00:00
aiongg 81fbf9fb77 Merge PR #3322: wasm: use the browser clock only on wasm32-unknown-unknown, not on WASI 2026-10-22 01:19:46 +00:00
aiongg abd1c7fb36 Merge PR #1760: Tables: rows with gridBefore/gridAfter keep their grid columns 2026-10-22 01:19:46 +00:00
aiongg ade6481d98 Merge PR #1851: engine: Update Field evaluates DOCPROPERTY against custom and built-in properties 2026-10-22 01:19:46 +00:00
aiongg c5a9c6c6d2 Merge PR #1850: engine: Check spelling as you type is saved with the proofing options, so it survives a restart 2026-10-22 01:19:46 +00:00
aiongg bd3f8d45e7 Merge PR #3287: #3271: edit.replace / edit.replaceAll without text or an earlier search fail 2026-10-22 01:19:45 +00:00
aiongg 934b3495ad Merge PR #3220: Wait for recovery cleanup before the app exits (#3140) 2026-10-22 01:19:45 +00:00
aiongg 885c9fad59 Merge PR #3128: Rename: a name given with the document's extension keeps it, once 2026-10-22 01:19:45 +00:00