Commit Graph
4320 Commits
Author SHA1 Message Date
aiongg c4bd091eeb Integration: #2544 say that only the mode is copied to the staging file 2026-10-16 14:02:52 +00:00
aiongg fcab31b764 Merge PR #2544: A save keeps the permissions of the file it replaces 2026-10-16 14:02:47 +00:00
aiongg 6b3aade2eb Integration: #2699 describe the read-only refusal in the Windows staging test 2026-10-16 14:02:44 +00:00
aiongg 145896d7e8 Merge PR #2699: M1: saving refuses to replace a read-only file (#2658) 2026-10-16 14:02:36 +00:00
aiongg 7d69b6ebc7 Merge PR #2580: Encryption: /Perms limits what an edited /P allows in AES-256 files 2026-10-16 14:02:36 +00:00
aiongg a463e32eef Integration: #2717 move the valid_xref_range doc comment back above its function 2026-10-16 14:02:33 +00:00
aiongg c198fbb509 Merge PR #2638: fix(ui): Copy in the selection action bar closes the bar 2026-10-16 14:02:30 +00:00
aiongg 6431fdfb88 Merge PR #2703: Go to page brings the page into view horizontally too
crates/ui-egui/src/canvas.rs: goto branch keeps #2595's clamped vertical offset, then #2703's horizontal block
2026-10-16 14:02:30 +00:00
aiongg 1a773e8098 Merge PR #2717: M1: read an xref table numbered from 1 that begins with object 0 (#2676)
crates/cos/src/document.rs: union with #2525: header_relative revisions, the renumbering log line, and log passed to read_section on the first try and the header-relative retry
2026-10-16 14:02:26 +00:00
aiongg 0c0995b62e Merge PR #2595: M3: a page jumped to in single-page view no longer hops into place
crates/ui-egui/tests/view.rs: kept #2587's two tests and #2595's test, all after single_page_layout_shows_one_page_at_a_time
2026-10-16 14:02:21 +00:00
aiongg 2366b0c513 Merge PR #2710: fix(edit): wrap single turned rows at the page margin (#2578) 2026-10-16 14:02:18 +00:00
aiongg 53b8fda93f Integration: #2532 save the structure-tree test without object streams
The default save packs annotation dictionaries into compressed object
streams, so the URL and comment-text byte checks passed without the fix.
2026-10-16 14:02:18 +00:00
aiongg d77066be2b Merge PR #2577: M7: rewrap a paragraph at a slant at the width its rows have 2026-10-16 14:02:18 +00:00
aiongg 28942c4c7d Merge PR #2558: fix(edit): emit rewritten paragraph after backgrounds between its rows (#2377) 2026-10-16 14:02:18 +00:00
aiongg 6ad30957c3 Merge PR #2590: fix(edit): keep overlapping watermarks and distinct paragraphs on text edit (#1756) 2026-10-16 14:02:17 +00:00
aiongg 62f3375297 Merge PR #2594: M7: write a full font program compressed and find it again on any page 2026-10-16 14:02:17 +00:00
aiongg 5406355729 Integration: #2681 make the self-reply assertion able to fail 2026-10-16 14:02:13 +00:00
aiongg dfcb844340 Merge PR #2794: Fix wrapped revision buttons overlapping Binding 2026-10-16 14:02:10 +00:00
aiongg bb695240f0 Merge PR #2525: fix(cos): an incremental save of a file with bytes before its header counts from the header 2026-10-16 14:02:08 +00:00
aiongg 9477e2a3fd Merge PR #2793: M10: preserve component Decode in lossless image export 2026-10-16 14:02:08 +00:00
aiongg 405ad489c2 Merge PR #2681: Replace Text: give the caret its own /NM (#2666) 2026-10-16 14:02:08 +00:00
aiongg eb403f84ec Merge PR #2702: Remove security also from files with /Encrypt inline in the trailer 2026-10-16 14:02:08 +00:00
aiongg fae7f4451c Merge PR #2532: fix(redact): removed links and comments leave the structure tree too (#2447) 2026-10-16 14:02:08 +00:00
aiongg c2a634ec4c Merge PR #2816: M10: running text is not a table row in Word, HTML and PowerPoint export (#2806) 2026-10-16 14:02:08 +00:00
aiongg a17794f170 Merge PR #2698: M8: the redaction audit finds a cover over one word of a long line (#2662) 2026-10-16 14:02:08 +00:00
aiongg 5ed4b67bab Merge PR #2754: Keep leading spaces and tabs when wrapping plain text into a PDF 2026-10-16 14:02:08 +00:00
aiongg 8c5074b982 Merge PR #2600: Shorten over-long part file names in doc_split by bookmarks 2026-10-16 14:02:08 +00:00
aiongg 0b68d0e3c6 Merge PR #2679: fix(annot): percent-encode non-ASCII bytes written into link /URI 2026-10-16 14:02:08 +00:00
aiongg e902b975fa Merge PR #2678: Round FormCalc Str and Format exact ties away from zero 2026-10-16 14:02:07 +00:00
aiongg 624e6343fb Merge PR #2587: M3: single-page view turns pages without a blank frame 2026-10-16 14:02:07 +00:00
aiongg 938d171652 Merge PR #2730: M3: closing PdfCraft while minimized no longer saves a 0 x 0 window 2026-10-16 14:02:07 +00:00
aiongg c859bf2aac Merge PR #2602: Don't treat a date ending in "Sep" as PM in AFDate/AFTime parsing 2026-10-16 14:02:07 +00:00
aiongg ca443792d3 Merge PR #2810: fix(select): a picked picture that is edited away no longer leaves its highlight behind 2026-10-16 14:02:07 +00:00
aiongg d3ca9ea7aa Merge PR #2606: M14: no PdfCraft lion over PDF thumbnails and the preview pane 2026-10-16 14:02:07 +00:00
aiongg 77f2b295cc Merge PR #2687: fix(inspect): report /OpenAction JavaScript in document info 2026-10-16 14:02:07 +00:00
aiongg 17b7effd6f Merge PR #2704: M3: ⌘G and ⇧⌘G step through matches from the find field (#2669) 2026-10-16 14:02:07 +00:00
aiongg cc898fc382 Merge PR #2601: Web: host mode needs a parent page on the same origin 2026-10-16 14:02:07 +00:00
aiongg 3eaff53a94 Merge PR #2642: Let the page range select page 1 alone 2026-10-16 14:02:07 +00:00
aiongg 2b3bbd0690 Merge PR #2625: fix(ui): Reveal in File Explorer selects files whose path has a space (#2579) 2026-10-16 14:02:07 +00:00
aiongg e947aa6754 Merge PR #2757: fix(ui): Save asks where to keep an Apple Mail attachment 2026-10-16 14:02:07 +00:00
Guillem Hermida cdb1010f40 fix(edit): a paragraph's width handle rewraps it from its whole handle, not just the inner half (#2276)
In Edit text & images, a paragraph's width handle is drawn centred on its
box's edge, and the edge grabs from up to 6 px outside the box. Object
selection sees a press first, though, and handed it to the paragraph tool only
on the box itself. A press on the outer half of the handle started an area
selection instead: its rectangle followed the pointer like a resized frame,
and on release the paragraph kept its old width and the text never moved.

Object selection now also leaves a press on a closed paragraph's edge grip to
the paragraph tool, through edit_text_ui::grabs_edge. That uses the same edge
test, box and upright-page rule as the tool itself, so the two can't drift
apart. The rewrap is the existing EditTextBlock with a width, so undo, redo
and save are unchanged.

Fixes #2276
2026-10-16 15:59:12 +02:00
mixlnwuu 299af11786 i18n(th): translate the 80 strings added upstream since 0.8.0
Word count, untagged content, image crop, print as image, signature labels, full screen prompt and the other new interface strings. th.tsv now covers every key any bundled catalog translates (2,672).
2026-10-16 20:10:21 +07:00
jonathanwxh-cellandGuillem Hermida cba63a26e4 M3: wait for OS-open preparation before removing its fixture
The open worker can still be reading after the harness's four startup frames.
Removing the synthetic file then asserted zero tabs before opening completed.
A fixture-specific 300 ms delay reproduced the exact ui.rs:843 failure on
644f7ab6; waiting by state passes under the same delay. Keep the file until
its tab opens, retaining the one-tab, filename and OS-quit assertions.
The diagnostic delay is removed. CropBox production code is unchanged.

Narrowly adapted from Guillem Hermida's OS-event test repair in upstream
https://github.com/storytold/pdfcraft/pull/2812 at
47e5398b6b (MIT OR Apache-2.0).
No other changes from that PR are included.

Validation: controlled red/green; final UI suite 52 passed, zero ignored;
CropBox render regression passed with its fully qualified exact test name;
strict UI Clippy all targets, formatting, layers, assets and wasm (31 crates).
The CLI CropBox acceptance test will also be verified in automatic exact-head CI.

Co-authored-by: Guillem Hermida <guillemhr2@gmail.com>
2026-10-16 20:29:42 +08:00
mixlnwuu d5bbf60efe i18n: add Thai (th) interface language
A clean-room Thai catalog covering every key the bundled catalogs translate, its LANGUAGES row (one plural form) and Thai month and weekday names in DATE_LANGUAGES.
2026-10-16 19:22:00 +07:00
midasmatterhorn 1cb113f110 Audit: find opaque square annotations over text 2026-10-16 15:18:39 +03:00
midasmatterhorn 4f0493cc21 organize: split a combined field/widget so every copied page owns its widget 2026-10-16 15:05:53 +03:00
mtlcl410andClaude Opus 5.5 942be18504 parity: form.fill-sign-date has 14 presets now
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RUNQSPVXx3dDBabRZHAnjz
2026-10-16 19:20:48 +08:00
mtlcl410andClaude Opus 5.5 b97e59190f M5: year-first slash dates (yyyy/mm/dd, yyyy/m/d) for Fill & Sign and headers
Taiwan, Japan and China write dates year first with slashes (Windows'
zh-TW short date is yyyy/M/d), and neither the Fill & Sign presets nor
the header and footer date tokens offered it. Both now have yyyy/mm/dd
and yyyy/m/d. The header and footer list gains them at its end, since
its selection is an index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RUNQSPVXx3dDBabRZHAnjz
2026-10-16 19:20:48 +08:00
mtlcl410andClaude Opus 5.5 30c174be9e M3: closing PdfCraft while minimized no longer saves a 0 x 0 window
eframe stores the window's size and place just before App::save. A
minimized window has none: Windows reports 0 x 0 at (-32000, -32000),
and the next start opened at egui's 64-point floor in the screen's
corner (seen on a 6K display at 225%: a 144 x 206 px window). While the
window is minimized the app now puts back the last settings it was
shown with (or none), and a window that opens at that floor from
settings saved before this fix is given a usable size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RUNQSPVXx3dDBabRZHAnjz
2026-10-16 19:20:47 +08:00
boneylandandClaude Opus 5.5 bf2eb470ed M6: detected form fields get no border or fill
Prepare a form ▸ Detect form fields places each field on a line or box the
page already draws, but every new widget got a grey /MK /BC and an opaque
white /MK /BG, so the fill hid the printed form underneath. Detected fields
now clear both in the same undoable step; fields drawn by hand keep the
defaults.

Refs #294, #2831.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 18:59:09 +08:00