Remove Fluent theme dependency - #660
Conversation
Vendor Fluent fallback controls and complete resource layers in an isolated child scope. Preserve Yaru resources, fixed accent palette, and menu-pack ownership.
Vendor Fluent-compatible fallback controls and resources, then own system accent resource detection without altering outer MacOS, Liquid Glass, or menu alias precedence.\n\nKeep the migration plan current until macOS runtime validation and visual baseline review complete.
There was a problem hiding this comment.
🟡 Changes recommended
The macOS fallback leaves two required named control themes unresolved after removing Fluent.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Removes direct Fluent theme dependencies by vendoring required Avalonia 12.1.2 resources and fallback control themes across macOS, Linux, and DevExpress themes.
Changes:
- Adds self-contained Fluent-compatible resources and fallback templates.
- Upgrades Avalonia to 12.1.2 and removes obsolete dependencies.
- Completes inherited control behavior and trimming annotations.
File summaries
| File | Description |
|---|---|
Common.props |
Updates Avalonia versions. |
samples/SampleApp/SampleApp.csproj |
Removes obsolete DBus pin. |
src/Devolutions.AvaloniaControls/Devolutions.AvaloniaControls.csproj |
Uses Avalonia behaviors meta-package. |
src/Devolutions.AvaloniaControls/Controls/GroupedListBox/GroupedListBox.axaml.cs |
Adds dynamic-code annotation. |
src/Devolutions.AvaloniaControls/Controls/GroupedTileListBox/GroupedTileListBox.axaml.cs |
Adds annotation and loop cleanup. |
src/Devolutions.AvaloniaTheme.MacOS/ThemeRoot.axaml |
Loads vendored fallback resources. |
src/Devolutions.AvaloniaTheme.MacOS/README.md |
Documents self-contained fallback. |
src/Devolutions.AvaloniaTheme.MacOS/Devolutions.AvaloniaTheme.MacOS.csproj |
Removes Fluent package reference. |
src/Devolutions.AvaloniaTheme.MacOS/Accents/ThemeResources.axaml |
Updates resource documentation. |
src/Devolutions.AvaloniaTheme.MacOS/Accents/Fluent/InvariantResources.axaml |
Adds invariant strings. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/AdornerLayer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/Calendar.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/CalendarButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/CalendarDatePicker.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/CalendarDayButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/CalendarItem.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/Carousel.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/CarouselPage.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/ContentPage.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/DropDownButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/Expander.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/FluentFallbackControls.axaml |
Registers fallback controls. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/FlyoutPresenter.axaml |
Makes theme self-contained. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/HeaderedContentControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/HyperlinkButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/ItemsControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/Label.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/OverlayPopupHost.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/PopupRoot.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/RadioButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/RefreshContainer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/RefreshVisualizer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/RepeatButton.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/SelectableTextBlock.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/TableViewCell.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/TableViewColumnHeader.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/TableViewRow.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/TabStrip.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/TabStripItem.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/ThemeVariantScope.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/TransitioningContentControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.MacOS/Controls/WindowNotificationManager.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/ThemeRoot.axaml |
Loads vendored fallback resources. |
src/Devolutions.AvaloniaTheme.Linux/Devolutions.AvaloniaTheme.Linux.csproj |
Removes Fluent package reference. |
src/Devolutions.AvaloniaTheme.Linux/Accents/YaruAccentColors.cs |
Provides fixed Yaru accent colors. |
src/Devolutions.AvaloniaTheme.Linux/Accents/Fluent/InvariantResources.axaml |
Adds invariant strings. |
src/Devolutions.AvaloniaTheme.Linux/Controls/_index.axaml |
Reorders DataGrid resources. |
src/Devolutions.AvaloniaTheme.Linux/Controls/AdornerLayer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/AutoCompleteBox.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Button.axaml |
Restores access-key behavior. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ButtonSpinner.axaml |
Removes Fluent inheritance. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Calendar.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/CalendarButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/CalendarDatePicker.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/CalendarDayButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/CalendarItem.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Carousel.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/CarouselPage.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/CheckBox.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ColorPicker.axaml |
Cleans formatting. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ComboBox.axaml |
Documents vendored basis. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ComboBoxItem.axaml |
Documents vendored basis. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ContentPage.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ContextMenu.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/DataGrid.axaml |
Cleans formatting. |
src/Devolutions.AvaloniaTheme.Linux/Controls/DataValidationErrors.axaml |
Adds tooltip validation theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/DropDownButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/EmbeddableControlRoot.axaml |
Adds required template part name. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Expander.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/FluentFallbackControls.axaml |
Registers fallback controls. |
src/Devolutions.AvaloniaTheme.Linux/Controls/FlyoutPresenter.axaml |
Makes theme self-contained. |
src/Devolutions.AvaloniaTheme.Linux/Controls/GridSplitter.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/HeaderedContentControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/HyperlinkButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ItemsControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Label.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ListBox.axaml |
Removes Fluent inheritance. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Menu.axaml |
Makes top-level theme independent. |
src/Devolutions.AvaloniaTheme.Linux/Controls/MenuFlyoutPresenter.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/MenuItem.axaml |
Adds horizontal item theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/NumericUpDown.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/OverlayPopupHost.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/PopupRoot.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/RefreshContainer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/RefreshVisualizer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/RepeatButton.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ScrollViewer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/SelectableTextBlock.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Separator.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/SplitButton.axaml |
Restores access-key behavior. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TableViewCell.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TableViewColumnHeader.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TableViewRow.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TabControl.axaml |
Adds transition presenter. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TabItem.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TabStrip.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TabStripItem.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TagInput.axaml |
Cleans formatting. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TextBox.axaml |
Restores touch context flyout. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ThemeVariantScope.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TimePickerUpDown.axaml |
Cleans attribution formatting. |
src/Devolutions.AvaloniaTheme.Linux/Controls/ToolTip.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TransitioningContentControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TreeDataGrid.axaml |
Cleans formatting. |
src/Devolutions.AvaloniaTheme.Linux/Controls/TreeView.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.Linux/Controls/Window.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.Linux/Controls/WindowNotificationManager.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/ThemeRoot.axaml |
Loads vendored fallback resources. |
src/Devolutions.AvaloniaTheme.DevExpress/Devolutions.AvaloniaTheme.DevExpress.csproj |
Removes Fluent package reference. |
src/Devolutions.AvaloniaTheme.DevExpress/Accents/MenuResources.axaml |
Adds horizontal menu metrics. |
src/Devolutions.AvaloniaTheme.DevExpress/Accents/Fluent/InvariantResources.axaml |
Adds invariant strings. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/_index.axaml |
Normalizes file ending. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/AdornerLayer.axaml |
Adds fallback focus metrics. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/AutoCompleteBox.axaml |
Restores inherited bindings. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Button.axaml |
Restores access-key behavior. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ButtonSpinner.axaml |
Adds attribution and formatting. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Calendar.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/CalendarButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/CalendarDatePicker.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/CalendarDayButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/CalendarItem.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Carousel.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/CarouselPage.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/CheckBox.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ComboBox.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ComboBoxItem.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ContentPage.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ContextMenu.axaml |
Applies custom menu scroller. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/DataValidationErrors.axaml |
Adds tooltip validation theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/DropDownButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/EmbeddableControlRoot.axaml |
Adds required template part name. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Expander.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/FluentFallbackControls.axaml |
Registers fallback controls. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/FlyoutPresenter.axaml |
Makes theme self-contained. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/GridSplitter.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/HeaderedContentControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/HyperlinkButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ItemsControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Label.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ListBox.axaml |
Documents inherited-setting review. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ListBoxItem.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Menu.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/MenuFlyoutPresenter.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/MenuItem.axaml |
Adds horizontal item theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/NumericUpDown.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/OverlayPopupHost.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/PopupRoot.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/RadioButton.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/RefreshContainer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/RefreshVisualizer.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/RepeatButton.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ScrollViewer.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/SelectableTextBlock.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Separator.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/SplitButton.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TableViewCell.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TableViewColumnHeader.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TableViewRow.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TabControl.axaml |
Pins upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TabItem.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TabStrip.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ThemeVariantScope.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/ToolTip.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TransitioningContentControl.axaml |
Adds fallback theme. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TreeView.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/TreeViewItem.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/Window.axaml |
Adds upstream attribution. |
src/Devolutions.AvaloniaTheme.DevExpress/Controls/WindowNotificationManager.axaml |
Adds fallback theme. |
Review details
- Files reviewed: 216/253 changed files
- Comments generated: 3
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Define horizontal menu item and tooltip validation themes used by TextBox and DataGrid without restoring Fluent fallback ownership.
There was a problem hiding this comment.
🟡 Changes recommended
The new named-theme and Linux accent-precedence paths lack focused regression coverage, and two added AOT diagnostics contain grammatical errors.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (2)
src/Devolutions.AvaloniaControls/Controls/GroupedListBox/GroupedListBox.axaml.cs:46
- The diagnostic message has incorrect subject-verb agreement; use “requires” so the emitted AOT warning reads clearly.
[RequiresDynamicCode("BindingEvaluator requires preserved types")]
src/Devolutions.AvaloniaControls/Controls/GroupedTileListBox/GroupedTileListBox.axaml.cs:26
- The diagnostic message has incorrect subject-verb agreement; use “requires” so the emitted AOT warning reads clearly.
[RequiresDynamicCode("BindingEvaluator requires preserved types")]
- Files reviewed: 217/257 changed files
- Comments generated: 2
- Review effort level: Balanced
There was a problem hiding this comment.
🤖 Pull request was approved automatically: the AI review is complete and all its review threads are resolved. 🎉
Integration Details
{
"deliveryId": "9e44a3f0-ae19-11f1-8764-ab8b78860522",
"headSha": "3d45316ca7ce2a32da9ea061bde501b62412fa02",
"reviewer": "copilot-pull-request-reviewer[bot]"
}deliveryId: a66d3f20-b6fb-11f1-9e00-57681e033810
No description provided.