Commit Graph
716 Commits
Author SHA1 Message Date
aiongg 1a14a6802f Merge branch 'lang-3-fonts' into lang-4-window 2026-10-26 01:55:56 +00:00
aiongg 1f1c1ab490 Merge branch 'lang-2-ui' into lang-3-fonts 2026-10-26 01:55:48 +00:00
aiongg fdd6ad530e Merge remote-tracking branch 'upstream/main' into lang-2-ui
# Conflicts:
#	Cargo.lock
2026-10-26 01:55:42 +00:00
aiongg 5e31171462 Merge branch 'lang-1-text' into lang-2-ui 2026-10-26 01:55:34 +00:00
aiongg fdecd50f47 font-store: removing a family's last style keeps files the store didn't install 2026-10-26 01:55:20 +00:00
aiongg f4c6718d68 craft-text: a locale's script must match the hyphenation patterns' script 2026-10-26 01:54:26 +00:00
skylar taylor-barrick cb53221767 fix(print): stop relying on inflate error output; bump miniz_oxide to 0.9 (#348)
* fix(print): do not treat early inflate errors as partial output

* chore(deps): bump miniz_oxide to 0.9
2026-10-25 20:37:49 -04:00
Dylan M. Taylor e3bcd5657f update(install): retry a busy disk-image attach for about a minute (#349) 2026-10-25 19:56:47 -04:00
Dylan M. Taylor c5a345e472 Merge pull request #347 from storytold/chore/deps-safe-refresh
chore(deps): safe dependency refresh (serde_json, fixed_decimal, roxmltree, miniz_oxide)
2026-10-25 19:03:41 -04:00
skylar 8e42b9ff4e fix(print): keep miniz_oxide at 0.8 2026-10-25 16:52:57 -06:00
skylar ce020c5811 chore(deps): bump roxmltree, miniz_oxide, serde_json, fixed_decimal
craft-print: roxmltree 0.20 -> 0.21 (locked 0.21.2, fixes a stack
overflow on deeply nested XML) and miniz_oxide 0.8 -> 0.9.
Lockfile only: serde_json 1.0.154, fixed_decimal 0.7.3.
2026-10-25 16:35:43 -06:00
Dylan M. Taylor 495e5971bc Merge pull request #344 from dylanmtaylor/fix/update-prompt-glyphs
fix(update): draw the prompt's close mark and version pill without glyphs a font may lack
2026-10-25 16:36:37 -04:00
Dylan M. Taylor 47edfe3255 fix(update): use egui::Role for the close button's accessibility info 2026-10-25 16:31:38 -04:00
Dylan M. Taylor 4f6fe25d77 fix(update): draw the prompt's close mark and version pill without glyphs a font may lack
The close button was a ✕ (U+2715) text glyph and the version pill used →, neither of which the bundled faces are guaranteed to have; apps that panic on a missing glyph took the whole prompt down. The close mark is two painted strokes, the pill reads 'v0.1.0 to 0.2.0', and a test asserts the prompt paints only ASCII text.

Fixes #343
2026-10-25 16:31:12 -04:00
aiongg 0ca797fbcd Merge branch 'lang-3-fonts' into lang-4-window 2026-10-25 19:44:12 +00:00
aiongg e51a392278 Merge branch 'lang-2-ui' into lang-3-fonts 2026-10-25 19:44:10 +00:00
aiongg 91eb5f19cd ui workflow: path filters list craft-ui and craft-i18n only 2026-10-25 19:44:08 +00:00
aiongg 47b9e5bf05 Merge branch 'lang-3-fonts' into lang-4-window 2026-10-25 19:42:40 +00:00
aiongg 402828151d Merge branch 'lang-2-ui' into lang-3-fonts 2026-10-25 19:42:34 +00:00
aiongg 5120c0ce2d Font store and Font Manager: review fixes
- FontStore::remove_files only touches names the family's manifest entry
  lists and that are safe file names.
- A user source's folder carries a hash of its full ID, so sources whose
  IDs slug alike don't share a folder.
- The download dialog and the sidebar note name the family's own source,
  and the server for a source the user added.
- The face cache takes out only faces the last frame didn't draw.
- The catalog test lists missing translations instead of failing.
- ATTRIBUTION lists the three bundled craft-font-index files.
2026-10-25 19:41:46 +00:00
aiongg 4617a971ae craft-ui, craft-fonts-build: harness direction, caret clamp, served-face conversion, byte-equal font copies 2026-10-25 19:40:45 +00:00
aiongg 4577959305 Merge branch 'lang-1-text' into lang-2-ui 2026-10-25 19:37:14 +00:00
aiongg a04bb9da2a craft-text: locale codes with a script or year subtag; Slovak data through feature unification 2026-10-25 19:37:05 +00:00
aiongg e3b9e239c5 docking: a window-edge drop beside an iconic column highlights only the edge (#336)
A group dragged to the window edge where an iconic column sits showed the
edge line and an outline around the column. The edge line is drawn just
inside the window, so it lay in the column's body, and paint_drop_line
outlines the iconic column a line lies in. That outline is for drops into
the column; a window-edge drop docks beside it, so it now shows the line
alone.
2026-10-25 15:20:32 -04:00
aiongg f8a83e8204 craft-window: window list, cascade placement, Window menu and viewports for apps with one window per document 2026-10-25 19:09:54 +00:00
aiongg 06a4ec194a craft-font-catalog, craft-font-store and craft-font-manager: installed fonts, the font store and the Font Manager panel 2026-10-25 19:09:33 +00:00
aiongg 3c574ddc61 craft-ui: interface fonts, text direction, IME composer, localized widgets and screen testing
craft-fonts-build gains Embed::serve (served faces for web builds) and the coverage module that craft-ui's fonts use.
2026-10-25 19:08:59 +00:00
aiongg acf6f79739 craft-text: hyphenation, line-break segmentation, bidi and line breaking 2026-10-25 19:08:20 +00:00
Dylan M. Taylor db19c373c8 Merge pull request #333 from dylanmtaylor/fix/updater-pending-close
fix(update): keep the close request pending while the app holds unsaved work
2026-10-25 15:03:02 -04:00
aiongg 271594c081 window: the title bar's empty area takes no keyboard focus (#334) 2026-10-25 14:36:07 -04:00
Dylan M. Taylor 05c9f70e6e fix(update): keep the close request pending while the app holds unsaved work
A user can dismiss the prompt while the update installs and then edit. The close request is now kept until the app can close, so a close the user cancels is asked again once the work is saved. The installed message is set when the install finishes.
2026-10-25 14:05:40 -04:00
Dylan M. Taylor 5b0f3c572a Merge pull request #332 from dylanmtaylor/feat/updater-can-start
feat(update): Updater::show_if holds the install back while the app has unsaved work
2026-10-25 14:03:27 -04:00
aiongg c13668493c docking: test send_keys from a native input hook (#331) 2026-10-25 14:02:27 -04:00
Dylan M. Taylor 12f199b2b5 feat(update): Updater::show_if holds the install back while the app has unsaved work
The restart helper is scheduled before the app closes, so a close the user then cancels would leave it waiting for an exit that never comes. Apps pass whether it is safe to start.
2026-10-25 13:55:49 -04:00
Dylan M. Taylor b9ba47f589 Merge pull request #330 from storytold/fix/zip9-windows
fix(update): zip 9's entry name is fallible (Windows build)
2026-10-25 13:18:52 -04:00
Dylan M. Taylor f3540a1327 fix(update): check the executable's name before the app quits for an update
windows_precheck now refuses an executable that isn't the app's own, as the helper does, so the error is shown while the app can still show it. check_helper keeps the same check as the final guard.
2026-10-25 13:18:35 -04:00
Dylan M. Taylor 51da82901c test(update): a standalone executable updates from the portable zip
Detection now treats any executable as a standalone install, so the helper's test no longer expects a refusal once portable.txt is gone.
2026-10-25 13:12:18 -04:00
Dylan M. Taylor 8b7e8a13de fix(update): the update helper only restarts the app's own executable
check_helper accepted any existing file as a standalone install, so a differently named executable passed (the Windows test caught it). The program's name must be one of the app's own.
2026-10-25 13:05:31 -04:00
Dylan M. Taylor dbc86fdbf3 fix(update): zip 9's entry name is fallible
Fixes the Windows build after the move to zip 9: an entry whose name can't be read counts as unsafe.
2026-10-25 12:59:00 -04:00
Dylan M. Taylor a0916808f7 Merge pull request #268 from storytold/migration/egui-037-20261024
Migrate shared UI to egui 0.37 and preserve current docking and printing fixes
2026-10-25 12:57:14 -04:00
Dylan M. Taylor 9eba2520da fix(update): clean clippy on macOS and Windows
The macOS module imported staging_dir without using it, and the Windows helper never used its app argument.
2026-10-25 12:55:32 -04:00
Dylan M. Taylor 6ff2a458b4 Merge remote-tracking branch 'storytold/main' into migration/egui-037-20261024 2026-10-25 12:54:10 -04:00
Dylan M. Taylor 1c59a349f0 Merge pull request #327 from dylanmtaylor/fix/update-deny
fix(update): drop dirs, move to zip 9, add an Updater for egui apps
2026-10-25 12:50:44 -04:00
Dylan M. Taylor 13ceaf2f31 fix(update): keep Windows known-folder locations and never start a second install
Local AppData comes from the known-folder API (a redirected profile is honoured), with the environment variable as the fallback. Once an update is installed and waits for the app to exit, no check, offer or install starts, so a cancelled close cannot relaunch the app twice.
2026-10-25 12:41:38 -04:00
skylar taylor-barrick 42e30cd5b3 Reconcile native docking fixes with egui 0.37 input routing 2026-10-25 17:41:23 +01:00
Dylan M. Taylor 9285cbcd1f Merge pull request #177 from storytold/dependabot/github_actions/actions-e91bde37dc
ci(deps): bump the actions group across 1 directory with 2 updates
2026-10-25 12:30:06 -04:00
skylar taylor-barrick f71bccb65e Merge latest docking preview changes into egui 0.37 migration 2026-10-25 17:24:24 +01:00
aiongg 5bbe9f6254 docking: menu key equivalents reach the text field of a native panel window (#318)
* docking: menu key equivalents reach the focused text field of a native window

On macOS the menu bar takes key equivalents such as Cmd+C and Cmd+V before
the key window sees them, and an app's menu glue reports them in the main
window's input, where they ran on the document even while a text field in a
floating panel's own window had focus. Each native window notes its text
focus as it draws. While the window with the keyboard has a focused field,
the main window's input hands that window the keys a text field acts on
(Cmd+C/X/V/A, Cmd+Z and Shift+Cmd+Z, Cmd with the arrows, Cmd+Backspace and
Cmd+Delete, and Copy, Cut and Paste events); Cmd+C and Cmd+X arrive as Copy
and Cut, and Cmd+V asks the window for the clipboard text. Other command
keys stay with the main window, and nothing moves while input is blocked.

typing_window and send_keys expose the same routing to menus that run
commands themselves.

* docking: typing_window answers between frames with the last frame's focus
2026-10-25 12:23:34 -04:00
aiongg 8b19c44267 docking: a dragged window fades only while it highlights a drop target (#321)
* docking: a dragged native window fades only while a drop target is highlighted

The dragged window stays opaque over empty space and goes to 75% only
while the bar, only-tab or only-tab-row drag shows a drop preview.
paint_group_drag reports whether it highlighted a target; end_cross keeps
that for the next frame, since the dragged window sets its opacity before
the preview is drawn.

* docking: a dragged in-window floating window fades only while a drop target is highlighted

The rule for native windows covers in-window floating windows too. A
title bar drag draws its window at DRAG_OPACITY (75%) while the drag
highlights a drop target, and opaque over empty space and after a drop,
Escape or focus loss. finish_group_drag keeps paint_group_drag's result
for the next frame, since the window draws before the preview.
FloatingFrame takes an opacity for the whole frame, contents included.

* docking: a title-bar drag also fades over a preview the host draws
2026-10-25 12:21:53 -04:00
Dylan M. Taylor 9d2bea410e feat(update): Updater::offer, and dismissing a running check keeps it quiet 2026-10-25 12:18:20 -04:00