Skip to content

Commit a4375a1

Browse files
committed
docs(launcher): reflect cross-platform services parity
1 parent 1f82ab6 commit a4375a1

2 files changed

Lines changed: 12 additions & 17 deletions

File tree

docs/launcher/cross-platform.md

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,6 @@ The choice is in `StrideVersionViewModel.GetExecutableNames` and `MainViewModel.
1515

1616
Searching for `OperatingSystem.IsWindows()` in the launcher shows the remaining divergences.
1717

18-
### Registry-backed one-shot tasks
19-
20-
`MainViewModel.HasDoneTask` / `SaveTaskAsDone` use `HKCU\SOFTWARE\Stride\` to remember whether a one-off action has run (`PrerequisitesRun`, announcement dismissal). On Linux/macOS:
21-
22-
- `HasDoneTask` returns `true` unconditionally, so the one-off tasks never fire a second time — but they never fire a first time either.
23-
- `SaveTaskAsDone` is a no-op.
24-
25-
Consequences:
26-
27-
- The prerequisites installer is never auto-launched on Linux — which is fine, it's a Windows-only redistributable bundle.
28-
- Announcements gated by `AnnouncementViewModel` are skipped.
29-
30-
There is a `FIXME xplat-editor` marker for a file-based implementation.
31-
3218
### Prerequisites installer
3319

3420
`StrideStoreVersionViewModel.RunPrerequisitesInstaller` runs `{InstallPath}/Bin/Prerequisites/install-prerequisites.exe`. That binary is a Windows installer — it is simply skipped on non-Windows since the DirectX / .NET prerequisites it ships don't apply.
@@ -65,6 +51,16 @@ The launcher writes `LauncherSettings.conf` and the `launcher.lock` single-insta
6551

6652
Window icons (`Launcher.ico`) are served through Avalonia's resource system. The `.ico` format is used on every platform; Avalonia picks the best-matching size at runtime.
6753

54+
## Recent-project "Show in Explorer"
55+
56+
`RecentProjectViewModel.Explore` reveals the selected recent project in the platform's native file manager:
57+
58+
- **Windows:** `explorer.exe /select,{path}` (unchanged from master).
59+
- **macOS:** `open -R {path}` — reveals the file in Finder.
60+
- **Linux:** `dbus-send` invocation of `org.freedesktop.FileManager1.ShowItems` on the session bus (implemented by GNOME Nautilus, KDE Dolphin, Cinnamon Nemo, XFCE Thunar, LXDE PCManFM, and others). Falls back to `xdg-open {parent-dir}` when the DBus call fails — e.g. on minimal WMs without an `org.freedesktop.FileManager1` implementer, or headless environments without a session bus.
61+
62+
All failures are swallowed silently (no dialog, no crash) since they are not actionable from inside the launcher.
63+
6864
## Testing surface
6965

7066
When exercising changes, run the launcher on both Windows and Linux. Known gaps that will not reproduce on Linux:

docs/launcher/port-status.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ The core is in place:
2525

2626
Documented there, recapped for completeness:
2727

28-
- `MainViewModel.HasDoneTask` / `SaveTaskAsDone` use `HKCU\SOFTWARE\Stride\`; on Linux/macOS both are no-ops with a `FIXME xplat-editor` marker. Consequence: announcement dismissal state and `PrerequisitesRun` flag do not persist outside Windows.
2928
- Prerequisites installer (`install-prerequisites.exe`) and Advanced Installer bundles are Windows-only by construction.
3029

3130
## Silent regressions (not flagged)
@@ -115,8 +114,8 @@ These change observable behaviour on both Windows and Linux and should ship firs
115114
1. ~~**Wire `WindowHandle` on Avalonia `MainWindow`.**~~ **Done** (2026-04-22): HWND captured in `MainWindow.OnOpened` on Windows via `TryGetPlatformHandle()`; stays `IntPtr.Zero` on Linux until xplat-GameStudio lands. See [cross-platform.md](cross-platform.md) § Launcher ↔ GameStudio IPC.
116115
2. ~~**Restore `MainWindow.OnClosing`.**~~ **Done** (2026-04-22): confirmation dialog with `Close anyway` / `Keep launcher open` buttons shown when any version `IsProcessing`; `LauncherSettings.ActiveVersion` persisted on close via `MainViewModel.TryCloseAsync`.
117116
3. ~~**Persist `LauncherSettings.CurrentTab` on tab change.**~~ **Done** (2026-04-22): `MainViewModel.CurrentTab` persisted-on-set, two-way bound from the `TabControl`.
118-
4. **Port `HasDoneTask` / `SaveTaskAsDone` to a file under `EditorPath.UserDataPath`.** Replace `HKCU\SOFTWARE\Stride` with something like a JSON `one-shot-tasks.json`. Removes the current "announcement never displays on Linux" and "prerequisites installer never auto-runs" gaps in one shot.
119-
5. **Fix `explorer.exe` hard-coding** in `RecentProjectViewModel.Explore`platform switch on `OperatingSystem.IsWindows()` / `IsMacOS()` / `IsLinux()`.
117+
4. ~~**Port `HasDoneTask` / `SaveTaskAsDone` to a file under `EditorPath.UserDataPath`.**~~ **Done** (2026-04-22): one-shot task state moved into `Internal/Launcher/CompletedTasks` inside the existing `LauncherSettings.conf`. No migration — pre-existing `HKCU\SOFTWARE\Stride\` keys on Windows become harmless orphans.
118+
5. ~~**Fix `explorer.exe` hard-coding** in `RecentProjectViewModel.Explore`.~~ **Done** (2026-04-22): platform switch — Windows `explorer.exe /select`, macOS `open -R`, Linux DBus `FileManager1.ShowItems` with `xdg-open` fallback. See [cross-platform.md](cross-platform.md) § Recent-project "Show in Explorer".
120119

121120
### Phase 2 — feature restoration
122121

0 commit comments

Comments
 (0)