Commit Graph
490 Commits
Author SHA1 Message Date
aiongg 9feaa3d480 W3b: UI: one native window per open document
New and Open open the document in a window of its own (an egui viewport,
craft-window's window list and driver), focused and cascaded; Open replaces
an untouched blank document in its window and brings an already-open file's
window forward. Each window keeps its own interface state and draws its own
document. Close and a window's close button close that window, asking first;
the root viewport adopts another window when its own closes; the last window
stays. Quitting asks about each document in its window. Requests for another
window's document go to that window. Control input, screenshots and the saved
geometry follow the active window. The web app keeps one window.
2026-10-22 16:54:37 +00:00
aiongg 3d0fcaccbf W2: The first blank document from the Start screen is Document1
The Start screen's stand-in document, and the one left after closing the
last document, give back their untitled name when it is the newest.
2026-10-22 15:28:19 +00:00
aiongg 4480fd50d9 W2: Recovery: every open document keeps its own copy
One recovery worker and store serve every open document. Each document
keeps its slot (record id, revision, timer) and is ticked in place, parked
or active. Closing a document deletes its copy, Don't Save when quitting
does too, and a clean exit covers every open document. File > Recover
lists only copies no open document keeps; Restore opens a copy beside the
open documents or in place of an untouched blank one.
2026-10-22 15:26:38 +00:00
aiongg a8e39fec53 Engine: find_open resolves paths through io, inside the readable roots 2026-10-22 15:06:45 +00:00
aiongg 08028c44c0 Engine: several open documents; file.new opens another
One session holds several open documents. The active document stays in
the Session's own fields, so commands and the UI keep working on it; the
others are parked as DocState values and swapped in field by field
(std::mem::swap, no clones or relayout). Session and DocState are
destructured exhaustively, so a new field must be classified as per
document or shared before it builds.

- Session::documents, activate, add_document, close_document,
  is_untouched_blank, with_document, find_open, is_open; DocInfo.
- Document ids come from a process-wide counter.
- file.new opens beside the open documents; file.open replaces an
  untouched blank document, opens beside the others otherwise, and
  activates a file that is already open ("alreadyOpen": true).
- file.closeDocument {id?, force?} closes a document without a window
  (refuses unsaved changes unless forced); file.close is unchanged.
- view.switchWindows {id?} lists the open documents or activates one.
- Envelopes, Labels, Finish & Merge and New from Template open their
  result as a new document; the main document stays open, with no undo
  step for the command.
- Each document keeps its own recovery worker and copy; Read Aloud
  readings name their document; with_document tags UI requests with the
  document they came from.
2026-10-22 14:41:20 +00: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