Skip to content

Remove Fluent theme dependency - #660

Merged
Samuel Bergeron-Drouin (Samuel-B-D) merged 9 commits into
masterfrom
remove-fluent-dependency
Sep 14, 2026
Merged

Samuel Bergeron-Drouin (Samuel-B-D) merged 9 commits into
masterfrom
remove-fluent-dependency

Conversation

@Samuel-B-D

Copy link
Copy Markdown
Contributor

No description provided.

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Comment thread src/Devolutions.AvaloniaTheme.MacOS/ThemeRoot.axaml
Comment thread src/Devolutions.AvaloniaControls/Controls/GroupedListBox/GroupedListBox.axaml.cs Outdated
Define horizontal menu item and tooltip validation themes used by TextBox and DataGrid without restoring Fluent fallback ownership.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment thread src/Devolutions.AvaloniaTheme.Linux/Accents/YaruAccentColors.cs

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The broad resource-precedence and visual-behavior migration across three themes requires final human validation.

Review details
  • Files reviewed: 217/257 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@randy-but-a-ro randy-but-a-ro Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 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]"
}

@Samuel-B-D
Samuel Bergeron-Drouin (Samuel-B-D) merged commit 8f07ab6 into master Sep 14, 2026
1 check passed
@Samuel-B-D
Samuel Bergeron-Drouin (Samuel-B-D) deleted the remove-fluent-dependency branch September 14, 2026 13:47
randy-but-a-ro Bot pushed a commit that referenced this pull request Sep 23, 2026
deliveryId: a66d3f20-b6fb-11f1-9e00-57681e033810
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants