Commit Graph
4857 Commits
Author SHA1 Message Date
BFlat bbaf7b02c3 Merge pull request #3557 from dotCooCoo/fix/artboard-paste-makes-the-new-artboard-active
Artboards: the active artboard follows the Artboard tool after Paste, Cut and tool.setOption
2026-10-22 17:07:02 +07:00
dotCooCoo 5d4cac31cf Artboards: the active artboard follows the Artboard tool after Paste, Cut and tool.setOption
With the Artboard tool, Paste and Paste in Place select the pasted
artboards, Cut gives the tool the artboard before the first cut one
(the new first artboard when artboard 1 is cut), and tool.setOption
sets its selected or active artboard. The active artboard, the view's,
stayed where it was, so the navigator showed another artboard than the
tool and the Artboards panel. document.activate and File › Revert
started the tool on artboard 1, while choosing a document's tab starts
it on that document's active artboard.

After a command that changes the artboards the Artboard tool has
selected, the app now makes the tool's active artboard the active one,
as a click with the tool does. After a command that chooses another
document, and after Revert, the tool starts on the document's active
artboard.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-22 16:59:38 +07:00
BFlat 22c83b5951 Merge pull request #3554 from Taha-Mahmoodi/fix/3443-layers-scrollbar
Fix #3443: the Layers list's scroll bar no longer covers the rows' selection marks
2026-10-22 16:50:18 +07:00
Taha-Mahmoodi 7141932dfb Fix #3443: the Layers list's scroll bar no longer covers the rows' selection marks
The Layers list scrolls in its own scroll area, which kept egui's floating
scroll bar when #3093 gave the panel bodies a bar in a column of their own.
Hovering the list showed the bar over the right edge of the rows, over the
target circles and the selection squares the user clicks to select a layer.

The list now uses the menus' slim solid bar (list_scroll_style) in its own
column, and the rows end beside it. The list knows its total height before
it lays the rows out, so the bar is shown exactly when the rows overflow
(decided up front): the rows never shift sideways a frame after the bar
appears.

Test: dock::tests::the_layers_scroll_bar_covers_no_row (40 layers in a
1440x600 window: no row's accessibility rect intersects the bar). It fails
without the change and passes with it. The Layers tests that pin row
positions across frames still pass. Checked live: the bar sits beside the
rows.
2026-10-22 16:43:39 +07:00
BFlat bbc9bd3de2 Merge pull request #3551 from Taha-Mahmoodi/fix/2452-hover-while-panning
Fix #2452: panning or zooming over detailed art no longer hit-tests it every frame
2026-10-22 16:17:18 +07:00
BFlat 423bc71705 Merge pull request #3550 from Taha-Mahmoodi/fix/3093-panel-scrollbars
Fix #3093: panel scroll bars take a column of their own instead of covering controls
2026-10-22 16:17:03 +07:00
BFlat c60ad8dcfa Merge pull request #3549 from Taha-Mahmoodi/fix/2103-artboard-nudge
Fix #2103: arrow keys with the Artboard tool move the selected artboards and their art
2026-10-22 16:16:48 +07:00
Taha-Mahmoodi 6ee972c4da Fix #2452: panning or zooming over detailed art no longer hit-tests it every frame
With the pointer resting over art while the view moves (trackpad or wheel
scrolling, pinch zoom, a Hand/space pan), the document point under the
pointer changes every frame, and the canvas hit-tested the art there on
each one, up to three times: Object Highlighting (canvas.rs
hover_highlight -> selection_hit_at) and the Selection tool's cursor
(select.rs cursor: hit_test, and with Snap to Point the nearest-anchor
search). Over a detailed engraving in a clip group (the reporter's
PhotoCraft icon: one path of tens of thousands of segments) each of those
costs roughly 3-6 ms, so every frame of the move took 12-15 ms of UI time;
off the art they return at once.

- canvas.rs: the canvas notes when its view (rect, zoom, centre,
  rotation) last changed. Until it has been still for HOVER_STILL_SECS
  (0.15 s) it draws no hover highlight and keeps the cursor the tool last
  gave for the same tool and modifier keys instead of asking again; it
  asks for a repaint then, so both come back without the pointer moving.
  Pointer moves still reach the tool as before.
- test: a_moving_view_leaves_the_art_under_the_pointer_unhighlighted_until_it_stops
  (wheel frames draw no hover outline and keep the cursor; once still,
  the outline returns and the cursor follows the art). It fails on main
  at the first wheel frame.

Measured on an Apple M4 (release build, 1440x900 window, the PhotoCraft
app icon SVG fitted at 138%, Selection tool, Smart Guides and Snap to
Point on), median UI frame time over 60 wheel-pan frames with the pointer
resting:
  before: over the art 12.3-15.0 ms, off the art 1.0 ms
  after:  over the art 0.4-1.0 ms,  off the art 0.6 ms
The render readout is the art's own raster time on the render worker,
which this change doesn't touch.
2026-10-22 16:06:55 +07:00
Taha-Mahmoodi a8bdf5043f Fix #3093: panel scroll bars take a column of their own instead of covering controls
The panels' scroll areas used egui's default floating scroll bar, which
is drawn over the right edge of the content: in a window too short for
the Properties panel it covered the Image Trace button's dropdown arrow
and the W/H constrain link, and in a dock column too tall for the window
it covered the panels' menu buttons and right-hand controls. Menus
(#2086, list_scroll_style) and the toolbar and dock icon column (#808,
strip_scroll) had already been given bars that keep clear of their
items; the panel bodies hadn't.

- widgets: panel_scroll shows a panel's scroll area with the menus' slim
  solid bar (list_scroll_style), in a column of its own at the right
  edge; scroll areas inside the body keep their own style.
- dock.rs: the docked Properties panel and Properties in a flyout,
  floating group or shared dock group use it.
- floating.rs: a dock column too tall for the window uses it.
- panel_docking.rs: a panel's body in the shared dock uses it, laid out
  as wide as the scroll area leaves beside the bar; the shared dock's
  icon column scrolls with strip_scroll, as the dock's icon column does.
- test: the_properties_scroll_bar_covers_no_control (a 1440x600 frame of
  the dock with an image selected: no control's rect meets the
  Properties scroll bar). It fails on main with "Tracing Presets" (the
  Image Trace arrow) and "Constrain Width and Height Proportions" under
  the bar.

Verified live at 1440x600 with an image selected: before, the hovered
bar sat over the Image Trace arrow and the right ends of the Quick
Action buttons, and a dock column's bar over the Swatches panel menu;
after, both bars sit in their own 8 pt column and nothing is covered.
2026-10-22 16:06:54 +07:00
Taha-Mahmoodi b0d5ab3f68 Fix #2103: arrow keys with the Artboard tool move the selected artboards and their art
With the Artboard tool the arrow keys did nothing to the artboards: the
tool claimed only Escape, Delete and Backspace (tools/src/xform/artboard.rs
claims_key), so the arrows fell through to object.nudge in
ui-egui/src/shortcuts.rs, which moved the selected art on its own (or
nothing, with no art selected) and left the artboard where it was.

- artboard.rs: the tool claims the arrow keys and turns each press into
  one artboard.move of the selected artboards that aren't locked, by the
  keyboard increment (Preferences > General > Keyboard Increment, read
  from the tool context as Touch Type does), Shift ten times as far as
  object.nudge does, with moveArt from the tool's Move/Copy Artwork with
  Artboard option, as a drag sends it. One undo step per press; nothing
  during a drag or with only locked artboards selected.
- tests: arrow_keys_nudge_the_selected_artboards (tools: claims, step,
  Shift, moveArt, several boards, locked, mid-drag) and
  artboard_tool_arrow_keys_move_the_selected_artboards_with_their_art
  (engine: the artboards and the art on them move, one step per press).

Verified live over --control: a 400x300 artboard with a selected 40 pt
square, Artboard tool, ArrowRight: before, the artboard stayed at x 0 and
the square moved to x 51 ("Move"); after, the artboard goes to x 1 and the
square with it ("Move Artboard"); Shift+Down moves both 10 pt; with
Move Artwork off only the artboard moves; increment 5 moves 5 pt.

The drag case in the report: a drag already moves the art, but only the
art that lies wholly inside the artboard and is unlocked and visible
(doc/src/lib.rs art_on_artboard; locked and hidden art only with
Move Locked and Hidden Artwork with Artboard). Art overlapping the
artboard's edge stays behind by design, which may be what the reporter
saw when dragging.
2026-10-22 16:06:54 +07:00
BFlat c49a1faa4b Merge pull request #3542 from nrq6993-a11y/stream/vc-feat3-g4-mixed-justification-dialog
G4: Mixed Justification dialog fields
2026-10-22 15:48:04 +07:00
bflatastic 5498b62a3d G4: Mixed Justification dialog fields
Squashed from #3542 onto main.
2026-10-22 15:35:44 +07:00
BFlat a65d3f2313 Merge pull request #3541 from lehni/fix/stretched-text-redraw 2026-10-22 15:34:38 +07:00
Jürg Lehni 81dca05eb1 Render: moved stretched type redraws where its strokes reach
Follows #3484: characters' strokes stretch with the type, past what its scale factor covers.
2026-10-22 15:29:37 +07:00
Jürg Lehni a2e7a2a562 Render: moved stretched type redraws where its strokes reach
Follows #3484: characters' strokes stretch with the type, past what its scale factor covers.
2026-10-22 10:26:50 +02:00
BFlat 3b8e1aef43 Merge pull request #3539 from nrq6993-a11y/stream/vc-featD-g4-mixed-paragraph-kinsoku-mojikumi
G4: Mixed paragraph kinsoku and mojikumi dropdowns
2026-10-22 15:17:07 +07:00
BFlat 8862058388 Merge pull request #3537 from nrq6993-a11y/stream/vc-featD-g4-mixed-paragraph-hyphenate
G4: Mixed paragraph Hyphenate checkbox
2026-10-22 15:16:56 +07:00
bflatastic b833187ff8 G4: Mixed paragraph kinsoku and mojikumi dropdowns
Squashed from #3539 onto main.
2026-10-22 15:08:51 +07:00
Cursor Agentandnrq6993-a11y 2bf0595f09 G4: mixed paragraph Hyphenate checkbox
## Summary
When the Paragraph and Properties panels act on multiple paragraphs with different hyphenation settings, the Hyphenate checkbox is off, matching Illustrator mixed-value behaviour alongside mixed indents, alignment and composer. Toggling still applies through `text.setFormat` to every paragraph in scope.

## Tests
- `paragraph_mixed_hyphenate_checks_off` in `vectorcraft-ui-egui` paragraph panel tests.

Part of gap G4

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 15:08:31 +07:00
BFlat 388c653cd1 Merge pull request #3534 from nrq6993-a11y/stream/vc-feat1-3505-type-on-path-fill-hit
Type on a Path hits filled paths without a stroke (#3505)
2026-10-22 15:02:46 +07:00
Cursor Agentandnrq6993-a11y 8735170a34 Type tools: hit path outline only for area and path type
## Summary
Adobe help documents Area Type and Type on a Path as starting from a click on the path or shape border, not inside a filled interior. Restore outline-only hit testing for those tools (no fill-interior hits that would steal point-type clicks). Strokeless filled paths still accept clicks on the outline.

## Tests
- area_and_path_tools_hit_path_outline_not_fill_interior

Part of storytold/vectorcraft#3505 (review feedback on PR #3534)

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 15:01:36 +07:00
Cursor Agentandnrq6993-a11y 6883235bad G11: Type on a Path hits filled paths without a stroke (#3505)
## Summary
Area Type and Type on a Path locate the path under the click with the same hit rules as the other tools, so a filled shape with no stroke can be clicked in its interior. Illustrator accepts those clicks for area type and for type on a path (the start follows the click on the path). VectorCraft had forced outline-only hit testing here, so interior clicks missed and the tools fell back to ordinary point or area text with placeholder copy.

## Tests
- type_on_path_and_area_type_hit_filled_paths_without_a_stroke in vectorcraft-tools

Closes storytold/vectorcraft#3505

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 15:01:36 +07:00
BFlat 0414a13ace Merge pull request #3535 from MorningFrog/feat/3515-recent-fonts
Type: show recently used fonts in font pickers (#3515)
2026-10-22 14:43:08 +07:00
BFlat f1dc5e50a3 Merge pull request #3533 from nrq6993-a11y/stream/vc-feat1-3440-color-proxy-drag
G11: Color Picker and popover Fill/Stroke proxy drags (#3440)
2026-10-22 14:42:54 +07:00
MorningFrog 4ae1b3d51a #3515: show recent fonts in font pickers 2026-10-22 14:35:57 +07:00
Cursor Agentandnrq6993-a11y 36eed1ac77 Keep fill/stroke chip popover open during proxy drags
## Summary
The fill/stroke chip popover no longer closes while the pointer is down, a panel paint drag is active, or the opening click is still on the chip anchor, so dragging fill onto stroke (or the reverse) inside the popover can finish. Color Picker proxies are not added; the reference app edits only the colour the picker was opened for.

## Tests
- panels::tests::dropping_a_proxy_paint_on_the_other_proxy_applies_it (unchanged)

Closes storytold/vectorcraft#3440

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 14:35:56 +07:00
Cursor Agentandnrq6993-a11y 5a7689c3b4 G11: Color Picker and popover Fill/Stroke proxy drags (#3440)
## Summary
Illustrator lets you drag the fill colour onto the stroke (or the other way) in the Color Picker and in the fill/stroke chip popover. VectorCraft now shows the Fill/Stroke proxy pair in the Color Picker (except for artboard background edits) and applies paint.setFill or paint.setStroke when a proxy paint is dropped on either square; clicking a square switches which side the picker edits. The fill/stroke chip popover stays open while the pointer is down, while a panel paint drag is active, or when the opening click is on the chip anchor, so drags between the proxies can finish.

## Tests
- color_picker_proxy_drag_applies_fill_to_stroke (headless egui)
- existing dropping_a_proxy_paint_on_the_other_proxy_applies_it unchanged

Closes storytold/vectorcraft#3440

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 14:35:56 +07:00
BFlat af520a7cf3 Merge pull request #3469 from dennisklappe/fix/3410-preferences-storage-label
Rename the Preferences "Performance & Storage" category to "Storage" (#3410)
2026-10-22 14:03:07 +07:00
Dennis Klappe b11b41d5f3 Name the Preferences category Plug-ins & Scratch Disks
Fixes #3410
2026-10-22 14:01:18 +07:00
Dennis Klappe 6ee357a6d4 Rename Preferences category Performance & Storage to Storage
Fixes #3410
2026-10-22 13:54:04 +07:00
BFlat bb4767fca5 Merge pull request #3507 from nrq6993-a11y/stream/vc-feat-g11-arc-tool-dialog
G11: Open Arc tool options on canvas click
2026-10-22 13:50:46 +07:00
Cursor Agent b1befcfa02 G11: translate Arc Segment Tool Options dialog in all catalogs
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>

# Conflicts:
#	crates/ui-egui/src/i18n/bg.tsv
#	crates/ui-egui/src/i18n/cs.tsv
#	crates/ui-egui/src/i18n/da.tsv
#	crates/ui-egui/src/i18n/de.tsv
#	crates/ui-egui/src/i18n/el.tsv
#	crates/ui-egui/src/i18n/es.tsv
#	crates/ui-egui/src/i18n/fi.tsv
#	crates/ui-egui/src/i18n/fr.tsv
#	crates/ui-egui/src/i18n/hu.tsv
#	crates/ui-egui/src/i18n/id.tsv
#	crates/ui-egui/src/i18n/it.tsv
#	crates/ui-egui/src/i18n/ja.tsv
#	crates/ui-egui/src/i18n/ka.tsv
#	crates/ui-egui/src/i18n/ko.tsv
#	crates/ui-egui/src/i18n/nl.tsv
#	crates/ui-egui/src/i18n/pl.tsv
#	crates/ui-egui/src/i18n/pt-br.tsv
#	crates/ui-egui/src/i18n/ru.tsv
#	crates/ui-egui/src/i18n/sv.tsv
#	crates/ui-egui/src/i18n/tr.tsv
#	crates/ui-egui/src/i18n/uk.tsv
#	crates/ui-egui/src/i18n/vi.tsv
#	crates/ui-egui/src/i18n/zh-hans.tsv
#	crates/ui-egui/src/i18n/zh-hant.tsv
2026-10-22 13:38:09 +07:00
Cursor Agentandnrq6993-a11y 71b5c9c45c G11: Arc tool keeps segment options and uses them on drag
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
Cursor Agentandnrq6993-a11y 5359c92a19 G11: Arc segment dialog options wired to shape.arc
Replace length/angle with Length X/Y, reference point, Type, Base Along, Slope and Fill Arc; extend geom and shape.arc params.

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
Cursor Agentandnrq6993-a11y d6e64cb080 G11: open Arc tool options on canvas click
## Summary
A click on the artboard with the Arc tool (no drag) opens an Arc options
dialog at the pointer, matching Illustrator. Length, angle, and Closed
follow the same form as Line Segment; OK runs shape.arc and remembers
Closed via tool.setOption.

## Tests
- dialogs::tests::arc_click_opens_options_and_ok_draws
- Existing draw2::family::tests::click_opens_dialog_and_arc_shift (tools)

Part of gap G11

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
Cursor Agentandnrq6993-a11y fa3d6d9298 G11: open Arc tool options on canvas click (WIP)
Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 13:38:04 +07:00
BFlat 5013189fd3 Merge pull request #3524 from odgrim/fix/2160-x1a-flatten-keeps-cmyk-inks
PDF/X-1a and X-3: flattening keeps a CMYK document's inks where it rasterizes (#2160)
2026-10-22 12:44:27 +07:00
Brian TorresandClaude Opus 5.5 945fa338d0 PDF/X-1a and X-3: flattening keeps a CMYK document's inks where it rasterizes (#2160)
Exporting a CMYK document to PDF/X-1a or PDF/X-3 flattens transparency
first. Where the flattener has no single colour (an image with see-through
pixels over a flat fill, gradients, masks, raster effects) it renders the
area into an image, and that image was always an RGB PNG. The PDF writer
then separated it back to CMYK, so CMYK art behind the image came back with
other inks: a C100 M6 Y41 K3 panel printed C75 M14 Y35 K5 under a
transparent logo, with a hard edge against the rest of the panel, and K
moved into C, M and Y.

For files without transparency the flattener's images are opaque and
clipped to their regions anyway, so in a CMYK document it now draws them
as ink amounts over the paper (Renderer::render_region_inks) and stores a
CMYK TIFF, which the PDF writer keeps as DeviceCMYK samples. An area too
large for a CMYK image falls back to the PNG it made before. In-app
Flatten Transparency and other flattening, whose images keep alpha, are
unchanged.

Test: tests_pdfx::pdfx_1a_flattening_keeps_the_inks_behind_an_image_in_a_cmyk_document
exports a CMYK panel under a half see-through PNG to PDF/X-1a, opens the
file again and checks the inks behind the see-through half.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 12:32:05 +07:00
BFlat 5a258e4c73 Merge pull request #3523 from nrq6993-a11y/stream/vc-featD-g4-mixed-paragraph-composer
G4: Mixed paragraph composer menu checks
2026-10-22 12:22:48 +07:00
Cursor Agentandnrq6993-a11y 7fa5173962 G4: mixed paragraph composer menu checks
## Summary
When the Paragraph panel menu acts on multiple paragraphs with different composers (single-line vs every-line), neither composer item is checked, matching Illustrator mixed-value behaviour and the panel's other mixed fields (indents, alignment).

## Tests
- `paragraph_mixed_composer_checks_neither_menu_item` in `vectorcraft-ui-egui` paragraph panel tests.

Part of gap G4

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 12:11:07 +07:00
BFlat 379b033728 Merge pull request #3520 from dotCooCoo/fix/locate-library-checks-the-library-not-persistence
Library panels: Locate Library… reads a missing library whose panel isn't persistent
2026-10-22 11:41:31 +07:00
dotCooCoo de1182fbe3 Library panels: Locate Library… reads a missing library whose panel isn't persistent
ui.libraryPanel.locate decided whether a panel's library was missing
through missing_file, which answers only for a persistent panel. A
command that turns Persistent off leaves the panel open on its missing
library until the next drawn frame closes it, and while the window is
hidden the app draws no frame between control requests. Locate
Library… on that panel answered "isn't missing its library" and read
no file.

The check now asks whether the panel's library can be found, the
lookup the tab label and the per-frame tidy use. A panel whose library
is there is still refused, persistent or not.

window.swatchLibrary and window.graphicStyleLibrary had the same
check: given the library id of such a panel, they answered "no
library". They now bring the open panel forward and answer its file's
name with count 0; the panel still closes at the next tidy.

Docs: docs/mcp.md (ui.libraryPanel.locate, window.swatchLibrary).
2026-10-22 11:34:47 +07:00
BFlat 0834be2989 Merge pull request #3506 from nrq6993-a11y/stream/vc-feat1-3494-package-status-i18n
Fix #3494: translatable package status message
2026-10-22 11:34:23 +07:00
Cursor Agentandnrq6993-a11y fd8459592d Fix #3494: package status spacing without notes
## Summary
Package status notes are parenthetical fragments joined with spaces; templates without {note} are used when there are no missing links or skipped fonts, so folder paths are not followed by stray spaces or double gaps.

## Tests
- package_status_without_notes_has_no_extra_spaces
- package_status_message_templates_parse extended

Closes storytold/vectorcraft#3494

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:32:58 +07:00
BFlat ae13bd7dee Merge pull request #3518 from nrq6993-a11y/stream/vc-feat1-3395-acb-tab-filename
Fix #3395: color book library tabs use file name
2026-10-22 11:27:01 +07:00
Cursor Agentandnrq6993-a11y b14fa518fb Fix #3494: translatable package status message
## Summary
Package completion status and the show-folder prompt use i18n templates with
literal text between {folder} and {note}, so @msg rows parse and translate in
every locale (Illustrator-style localized status feedback).

## Tests
package_status_message_templates_parse; dialogs::tests_package; complete_languages_translate_every_message.

Closes storytold/vectorcraft#3494

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:22:56 +07:00
Cursor Agentandnrq6993-a11y 3d4d34fc15 Fix #3395: color book library tabs use file name
## Summary
Swatch library panels title imported and User Defined .acb color books from the file name (without the extension), matching Illustrator. Host temporary import paths still fall back to the book title when copying into the user library folder (#2996).

## Tests
- `color_book_tab_titles_use_the_file_name` covers user-folder scan, load by path, and copyToUser keeping the source file name.
- Existing `copying_a_color_book_from_a_temporary_path_uses_its_title` unchanged.

Closes storytold/vectorcraft#3395

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:17:31 +07:00
BFlat 15b041be81 Merge pull request #3502 from nrq6993-a11y/stream/vc-feat1-3455-home-reopen-focus
Fix #3455: Home recent reopen focuses existing document
2026-10-22 11:08:42 +07:00
Cursor Agentandnrq6993-a11y e4db022f49 Fix #3455: focus open tab from Home/Open Recent only
## Summary
Home › Recent Files and File › Open Recent switch to an already-open document tab instead of calling document.open again. document.open is unchanged for File › Open, MCP, and save-and-reopen tests.

## Tests
- home_recent_reopen_focuses_an_already_open_document (ui-egui)
- Removed engine open_same_path_activates_existing_document

Closes storytold/vectorcraft#3455

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:01:58 +07:00
Cursor Agentandnrq6993-a11y 11eb27b127 Fix #3455: Home recent reopen focuses existing document
## Summary
document.open with a path that is already open in another tab now activates
that document instead of reading the file again and opening a second window,
matching Illustrator Home › Recent Files when the file is already open.

The result includes activated: true; unsaved edits and the active tab are kept.

## Tests
open_same_path_activates_existing_document in cmd::fileio::tests.

Closes storytold/vectorcraft#3455

Co-authored-by: nrq6993-a11y <nrq6993-a11y@users.noreply.github.com>
2026-10-22 11:01:57 +07:00