Commit Graph
3291 Commits
Author SHA1 Message Date
KenM76andClaude Opus 5.5 ea8b729925 M6: a joined radio button stays selected, keeps its actions, and always gets a free value
Review follow-ups on #4977:

- ui-egui: after a rename, the Properties dialog re-selects the edited
  widget by object, not by its old index. A button that joins a group is
  appended after the group's own buttons, so the old index selected the
  group's first button and a nudge moved the wrong one.
- split_merged (join and Duplicate): the new widget takes /A and the
  widget triggers of /AA (E X D U Fo Bl PO PC PV PI); the field keeps
  K F V C.
- join: a clashing export value searches at most taken + 1 ChoiceN
  names, so one is always free, and the names are chosen before
  anything is written.

Tests: a_joined_merged_groups_button_keeps_its_actions,
a_joining_button_gets_a_free_export_value_when_choice_names_run_long,
a_radio_button_joining_a_group_by_name_stays_selected (ui-egui). Each
fails with its fix reverted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SqmHYx8FiWM5PcsoiErgp9
2026-10-27 12:20:30 -04:00
KenM76andClaude Opus 5.5 2c054abdce M6: a radio group with an indirect /Kids keeps its buttons when joined
Review follow-up (CodeRabbit): the join read the target's /Kids only when
it was a direct array, so an indirect one was replaced by the moved
buttons alone and the group's own buttons were lost. It now reads
through the reference with tree.rs's list_of, as link() does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SqmHYx8FiWM5PcsoiErgp9
2026-10-27 08:54:15 -04:00
KenM76andClaude Opus 5.5 27a0cd6eb2 M6: joining radio buttons that share an export value keep sharing it
Review follow-up. A clash is checked against the group's own values only,
and each clashing value gets one fresh ChoiceN shared by every joining
button that had it, so a button repeated on another page stays in unison.
The group's value selects a moved button only when one of the group's own
buttons has it. A joining field that is its own widget leaves the
calculation order too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SqmHYx8FiWM5PcsoiErgp9
2026-10-27 08:17:02 -04:00
KenM76andClaude Opus 5.5 a9ddf79a19 M6: a radio button renamed to a radio group's name joins that group (#4949)
Renaming a radio button to an existing radio group's name was refused as
a duplicate, so buttons placed separately could never become one group.
set_props now moves the renamed field's buttons into the named group
(ISO 32000-2 §12.7.5.2.4: a group is one field whose widgets are its
buttons). A clashing export value is renamed to the first free ChoiceN
in /AP /N, /D and /R; a moved button is on only if its value is the
group's value; merged field+widgets are handled on both sides (the
target split via split_merged, now shared with duplicate_field).
Refused when either group has /Opt, has no button, or the target is
locked.

Adapted from pdfcer (MIT, same author) 79870b56 and 116f48d3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SqmHYx8FiWM5PcsoiErgp9
2026-10-27 08:05:28 -04:00
aiongg 1dd2737b47 Merge pull request #4889 from aiongg/layout
refactor: shared module layout (craft-contrib#20)
2026-10-26 21:31:30 -04:00
aiongg f022ef0671 style: cargo fmt on moved files 2026-10-27 00:34:32 +00:00
aiongg 323172e860 test(automation): end the file access scan at the test module, not at a cfg(test) use 2026-10-27 00:34:32 +00:00
aiongg d449f2ce63 docs: name the ui-egui files by their new directories 2026-10-27 00:34:32 +00:00
aiongg 064632e0e8 test(ui-egui): name the page modules by their new directories 2026-10-27 00:34:32 +00:00
aiongg 3dbea4e7a0 docs(parity): point evidence at the ui-egui files' new directories 2026-10-27 00:34:32 +00:00
aiongg cb94c8f047 refactor(ui-egui): move open_worker_tests.rs to platform/open_worker/tests.rs 2026-10-27 00:34:32 +00:00
aiongg 636656a9ea refactor(ui-egui): move tab_context.rs into menus/ 2026-10-27 00:34:32 +00:00
aiongg cd0fc37c8d refactor(ui-egui): move folders_ui.rs into home/ 2026-10-27 00:34:32 +00:00
aiongg 7b3d688754 test(ui-egui): rerun the fontconfig tests by their platform:: path 2026-10-27 00:34:32 +00:00
aiongg 80c4572cfa refactor(ui-egui): move system_fonts.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg ed09547ecf refactor(ui-egui): move window_state.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg d25378c336 refactor(ui-egui): move units.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg dc25a6e341 refactor(ui-egui): move recovery.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg 615232d0e5 refactor(ui-egui): move last_view.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg 5527f931c9 refactor(ui-egui): move last_session.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg 687f6f6187 refactor(ui-egui): move window_controls.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 90a1880aee refactor(ui-egui): move updates.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg dc97e74e57 refactor(ui-egui): move ui_scale.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 2b4f7694dc refactor(ui-egui): move portable.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg b37c3a934c refactor(ui-egui): move pickers.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 16b49776de refactor(ui-egui): move open_worker.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg d3cfadd9e2 refactor(ui-egui): move motion.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 6638646314 refactor(ui-egui): move macos_association.rs into platform/ 2026-10-27 00:34:23 +00:00
skylar taylor-barrick 9a9813bf7d Merge pull request #4880 from storytold/fix/nextest-0.9.150
ci: require nextest 0.9.150
2026-10-26 17:39:25 -06:00
aiongg d15c5a2e21 refactor(ui-egui): move file_watch.rs into platform/ 2026-10-26 22:46:12 +00:00
aiongg 3e7cc6e5cb refactor(ui-egui): move drag_pointer.rs into platform/ 2026-10-26 22:46:12 +00:00
aiongg 73cd1b16db refactor(ui-egui): move icons.rs into widgets/ 2026-10-26 22:46:12 +00:00
aiongg 228a91c19a refactor(ui-egui): move icon_data.rs into widgets/ 2026-10-26 22:46:12 +00:00
aiongg 963b25f59b refactor(ui-egui): move side_panels.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg 9c27b333f5 refactor(ui-egui): move search_ui.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg dc6b6a5c4e refactor(ui-egui): move page_selection_ui.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg 946767d22d refactor(ui-egui): move organize_panel.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg 9771123c72 refactor(ui-egui): move format_text_ui.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg 604ad52c7d refactor(ui-egui): move comments_panel.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg 81e489b23f refactor(ui-egui): move all_tools_ui.rs into panels/ 2026-10-26 22:46:12 +00:00
aiongg 900d56c411 refactor(ui-egui): move word_count_ui.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg 1096b2a6b7 refactor(ui-egui): move standards_ui.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg de0e370792 refactor(ui-egui): move protect.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg e080461257 refactor(ui-egui): move palette.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg 7f0799c8bd refactor(ui-egui): move pageboxes.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg e901fb838b refactor(ui-egui): move marks_ui.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg f877aaf1c4 refactor(ui-egui): move credits.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg 385e24ec2f refactor(ui-egui): move comment_props.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg 40bb91b402 refactor(ui-egui): move appearance.rs into dialogs/ 2026-10-26 22:46:12 +00:00
aiongg c5d498227d refactor(ui-egui): move web_print.rs into workflows/ 2026-10-26 22:46:12 +00:00