Cross-platform Stride.Launcher#3276
Open
Kryptos-FR wants to merge 51 commits into
Open
Conversation
Use MarkView.Avalonia library for markdown
Complete the launcher README with build, versioning and layout notes, and add a hub-and-spoke documentation set under docs/launcher/ covering architecture, view models, views, version management, self-update, settings, localization, packaging, lifecycle and cross-platform notes.
Captures the full delta between the current Avalonia branch and the WPF launcher on master — including silent regressions that are not marked with TODO/FIXME — and a phased roadmap to close the gap for cross-platform parity. Notes Stride.Metrics and PrivacyPolicyHelper as deliberate, permanent removals.
…ncher port roadmap Adds a test-infrastructure phase covering bootstrap of Stride.Launcher.Tests, view-model and Avalonia-headless integration tests, and CI wiring for both Windows and Linux.
…rsistence proposal
… versioning scheme
…wn ViewModelBase Copies the ViewModelBase implementation from Stride.Core.Presentation (minus IDestroyable/IViewModelServiceProvider) so the runner has no external MVVM dependency. Renames SetProperty → SetValue to match Stride's API.
System.Drawing.Common was previously imported as a dependency for Avalonia.
…uncement panels
- Root Grid gains ClipToBounds="True" so panels are hidden while off-screen.
- Release-notes Grid: IsVisible replaced by Classes.visible + TransformOperationsTransition
(translateX(2000px) → translateX(0), 1s CubicEaseOut). Selector anchored to class
rn-slide to prevent descendant Grids from inheriting the transform.
- Release-notes header: empty Button/TextBlock stubs replaced with a working close
button (ActiveReleaseNotes.ToggleCommand) and a version title TextBlock.
- Release-notes content Grid gains Margin="{StaticResource BorderThicknessTile}" (12px)
to match master's TileBorderThickness spacing.
- Release-notes DockPanel gains BackgroundTileAlpha background (matches master's
TileAlphaBackgroundBrush = #C0434343).
- Announcement Border: IsVisible replaced by Classes.visible + same transition approach,
selector anchored to class ann-slide.
- docs: mark Phase 3 items complete in port-status.md; correct two pre-existing
entries (CurrentToolTip and StaysOpenContextMenu) that were already implemented.
Master rewrote URLs ending in .md to .html before opening so docs links resolve to rendered pages instead of raw markdown source.
…ttingsService wrapper
…behind to ILauncherSettingsService
…Service in port-status
- InstallLatestVersion: add missing return after 'already in progress' dialog so DownloadCommand.Execute() is not called while a download is already running (MainViewModel.cs) - AnnouncementViewModel: clear MainViewModel.Announcement when Validated becomes true so the overlay actually slides out when the user clicks OK; the Announcement setter now subscribes/unsubscribes PropertyChanged on the incoming view model (MainViewModel.cs) - SelfUpdater: gate the force-reinstall probe inside if (OperatingSystem.IsWindows()); on Linux the probe was silently downloading StrideSetup.exe and then crashing at Process.Start (SelfUpdater.cs) docs/launcher/port-status.md updated with struck-through entries for all three fixes and the Phase 4 self-update item revised accordingly.
The commented-out RevokeAllPrivacyPolicy() call in UninstallAsync was a placeholder from the WPF-to-Avalonia port. Telemetry and the privacy-policy consent flow were permanently removed when the port started, so any residual registry keys or settings files left by the old WPF launcher are harmless orphans that do not need to be scrubbed. - Remove the commented line and its FIXME: xplat-launcher marker (Launcher.cs) - Update cross-platform.md: drop the 'keep it for now' note - Update port-status.md: mark Phase 2 item 4 closed; update the Deliberate changes table row for privacy policy
…pleted is intentional
MinimalApp.OnFrameworkInitializationCompleted is empty by design: the
crash-report and already-running-instance dialog paths in Launcher.cs
each construct and wire their window directly inside their own AppMain
callback, so no framework-level initialisation (no MainViewModel, no
markdown pipeline, no services) is needed.
- Update 'Features removed without a replacement' section to explain the
design rather than flag it as a concern
- Close Phase 2 item 3 ('Review MinimalApp paths')
… right-click offset Right-click events on the Button inside each row were not reliably bubbling up to the outer Border's ContextMenu on Linux. Moving the ContextMenu to the Button directly — and adding VerticalAlignment="Stretch" — ensures the menu opens wherever the row is visually hit-tested.
- Mark 'Show in Explorer' as fixed (cross-platform since commit c2555d0): update 'already ported' bullet and strike through the regression entry with the three-platform implementation detail - Correct slide animation duration from 0.5s to 1s in both the Fixed description and the Phase 3 roadmap entries (1s was intentional)
- Add cross-platform IPC: Windows HWND broadcast + Linux named pipe - Update launcher documentation (port-status.md, cross-platform.md)
- Add editor selector ComboBox to choose between WPF and Avalonia GameStudio - Auto-install companion editor package (WPF/Avalonia) after primary install - Query NuGet store directly for installed editor paths (works across sessions) - Persist preferred editor choice in launcher settings - Add EditorNameConverter for friendly display names - Disable editor/framework selectors during install - Update launcher documentation (port-status.md)
On Linux (and other non-Windows platforms): - CanStart requires the Avalonia editor to be present; Start button stays greyed out for versions that only have a WPF (Stride.GameStudio) package. - UpdateAvailableEditors re-evaluates CanStart after editor discovery, since UpdateStatus runs before AvailableEditors is populated. - EditorNameConverter returns 'Game Studio' without '(Avalonia)' qualifier, as there is no WPF alternative to distinguish from. - TryInstallCompanionsAsync skips the Stride.GameStudio (WPF) companion install on non-Windows platforms. The EditorSelector ComboBox is already hidden when AvailableEditors.Count <= 1, so the dropdown never appears on Linux.
- Drop all Xenko package references (Names.Xenko, GameStudioNames.Xenko, MainPackageIds entries for Xenko/Xenko.GameStudio) since backward compatibility with pre-Stride packages is no longer needed - Simplify PackageFilterExtensions to only match Stride.GameStudio and Stride.GameStudio.Avalonia.Desktop - Remove CheckDeprecatedSourcesCommand (prompted users to add the old Xenko NuGet source) and its AskAddNugetDeprecatedSource string resource - Remove old Xenko executable fallback paths from StrideVersionViewModel - Remove the 'Show/Hide beta versions' toggle button: it existed solely to surface old Xenko (major < 3) packages; with those gone the button had no effect. Removes ShowBetaVersions, IsBeta, IsBetaVersion, the toggle button AXAML, and the ToggleShowBetaVersions/ToggleHideBetaVersions string resources - Update NugetStore.MainPackageIds to include Stride.GameStudio.Avalonia.Desktop - Update launcher README
Update all docs under docs/launcher/ to match the code changes: - cross-platform.md: remove Xenko.GameStudio.exe from Windows fallbacks - lifecycle.md: remove Bin/Windows/Xenko.GameStudio.exe legacy path - README.md: s/Stride\/Xenko versions/Stride versions/ - versions.md: remove 'Beta filter' section (ShowBetaVersions / IsBetaVersion), update StrideStoreAlternateVersionViewModel description, remove Xenko.GameStudio.exe mention, update RemoveUnusedPackages description - viewmodels.md: remove IsBeta from StrideVersionViewModel description, remove 'e.g. legacy Xenko ID' from StrideStoreAlternateVersionViewModel - port-status.md: remove ShowBetaVersions toggle bullet
Replace the verbose in-progress tracking doc with a focused reviewer reference. Drop all resolved regression history and done roadmap items. Keep only: - What's ported (brief feature list) - Deliberate changes table (so reviewers don't revert intentional choices) - Open items: .NET 10.0 probe decision + post-merge future work - Cross-references
Resolve launcher (Avalonia) vs WPF conflicts; take master's xunit runner; add Stride.Cli to launcher solution; implement multi-checkbox dialog for Avalonia.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Details
New Launcher using Avalonia instead of WPF. Still needs some love.
(note: recreated from #3027 after history rewrite)
Related Issue
#1503
Types of changes
Checklist