5 Commits
Author SHA1 Message Date
RealtaNuaandClaude Opus 5.5 8d855ecbcb Queue system installs so several apps can install at once
Each install ran its own pkexec call at the same time; all but the first
lost the dpkg lock and failed with error 100. Installs that reach the
system installer now wait their turn ("Waiting for another app…", with
Cancel), and Linux packages waiting together go into one privileged call,
so they share one password prompt. apt waits up to 60 s for another
package tool's lock. On Windows msiexec runs one at a time (error 1618).
The launcher's own update waits for other installs before it restarts.

Ported onto main and onto "Keep the verified download when the install
step fails", with these changes from the original PR:
- A failed job counts as installed when the new version is found
  afterwards only if it failed in a Linux call shared with other apps;
  an MSI, AppImage or single-package error, a pause, and either
  cancellation (including INSTALL_CANCELLED) stand.
- The launcher's update waits for other installs at most 10 minutes and
  can be cancelled from its banner ("Cancel update"); giving up names the
  apps still installing and says to answer or close the password prompt.
- Cancellation toasts say what was called off: "Download cancelled",
  "Install cancelled" (download kept), "Uninstall cancelled" or
  "Update cancelled", instead of a bare "Cancelled".
- The waiting card uses the restyled layout and the app's own colour,
  with no hard-coded sizes.

Fixes #6

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:40:12 -04:00
RealtaNuaandClaude Opus 5.5 5f74027176 Keep the verified download when the install step fails
A download that passed its SHA-256 check was deleted whether or not the
install succeeded, so every retry downloaded it again (usually after the
password prompt was dismissed). It now stays until the install succeeds,
is hashed again before it is reused, and shows as "Retry install" (or
"Retry update to <version>") with "Download again" in the menu. A
dismissed system prompt now says "Install cancelled" rather than
"Download cancelled". A download checked by size only is still deleted.

Ported onto main from the original PR: the check thread, rewritten for
ArtCraft's release feed, reports kept downloads after it marks the apps
loaded; the Retry button uses the restyled widgets::button; the backend
tests build on main's Shared and ask no real service; the grid test
scrolls the card into view. Finished files kept after a failed install
are now cleaned up after 7 days instead of 30 (paused downloads keep 30).

Fixes #5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:39:59 -04:00
RealtaNuaandClaude Opus 5.5 7a193042fd Stay in the tray on Wayland when the window closes
winit cannot hide a Wayland window, so closing to the tray cancelled the
close and then did nothing. Where the window cannot hide, the close now
goes through and the launcher keeps running with only the tray; a tray
click or a second launch opens a new window in the same process. Other
platforms keep the single hidden window. The header's own close button
(no decorations) takes the same path as the window manager's.

With no window, settings that change (the last check, updates announced)
are saved to eframe's app.ron as they change, so quitting from the tray
no longer loses them. A --hidden start at login on Wayland now starts in
the tray without mapping a window first, so none flashes up.

Rebased onto main from the original PR: the Launcher/Shell split now
carries main's custom title bar, has_desktops, macOS "show on the current
desktop", wgpu options and theme-token clear colour. The settings saving
with no window and the windowless start at login were added here.

Fixes #4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:32:53 -04:00
RealtaNuaandClaude Opus 5.5 f464b8145e Centre the app name and tagline on the icon in the grid
The grid card's text started at the top of its row and sat 11 pt below the
icon's centre. The text is now measured (centered_lines) and the icon's slot
is as tall as the text, so the two share a centre at any scale. The table
already centred its rows on main. The icon now reports itself to
accessibility, which the alignment test uses to find it.

Ported onto the restyled card from the original PR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 12:23:01 -04:00
RealtaNuaandClaude Opus 5.5 b9397ff845 UI tests: create a GPU device only when rendering a snapshot
harness() called .wgpu(), which builds a wgpu device for every test up
front. Nine tests then created, used and destroyed a Vulkan device at the
same time on parallel test threads, and Vulkan loaders before 1.4.350
crash on that (KhronosGroup/Vulkan-Loader#1863): about one run in ten
ended in SIGSEGV here.

Without .wgpu() egui_kittest's default renderer builds the same wgpu
renderer on the first render, which only happens when
ARTCRAFT_LAUNCHER_SNAPSHOTS is set. Ordinary runs no longer need a
graphics adapter at all.

Fixes #12

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-10 12:19:47 -04:00