Conversation
This was referenced Mar 4, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Implements a new Volume Flyout / Volume Mixer UI intended to replace the native Windows volume OSD, plus supporting settings, animations, and caching improvements.
Changes:
- Added a new
VolumeMixerWindow(WPF flyout) with a master volume slider and expandable per-app session mixer. - Integrated volume flyout triggering into the global keyboard hook and updated open/close animation plumbing to support stacking flyouts.
- Expanded settings + localization strings and updated media player icon caching utilities.
Reviewed changes
Copilot reviewed 24 out of 25 changed files in this pull request and generated 11 comments.
Show a summary per file
| File | Description |
|---|---|
| FluentFlyoutWPF/Windows/VolumeMixerWindow.xaml.cs | Implements volume flyout show/hide behavior, OSD hide/restore, and expand/collapse animations. |
| FluentFlyoutWPF/Windows/VolumeMixerWindow.xaml | Defines the volume flyout UI (master volume + expandable session list). |
| FluentFlyoutWPF/Windows/LockWindow.xaml.cs | Updates calls to OpenAnimation/CloseAnimation after signature changes. |
| FluentFlyoutWPF/ViewModels/VolumeMixerViewModel.cs | Adds view model for master volume + enumerating per-app audio sessions. |
| FluentFlyoutWPF/ViewModels/UserSettings.cs | Adds settings for volume flyout/mixer and premium-gated highlight option. |
| FluentFlyoutWPF/SettingsWindow.xaml | Adds navigation entry for the new Volume Flyout settings page and adjusts ordering. |
| FluentFlyoutWPF/Resources/Localization/Dictionary-en-US.xaml | Adds English strings for Volume Flyout/Mixer UI and premium perk text. |
| FluentFlyoutWPF/Pages/VolumeMixerPage.xaml.cs | Adds settings page code-behind and premium unlock handler. |
| FluentFlyoutWPF/Pages/VolumeMixerPage.xaml | Adds Volume Flyout/Mixer settings UI (toggles + duration). |
| FluentFlyoutWPF/Pages/HomePage.xaml.cs | Adds navigation handler to Volume Flyout page. |
| FluentFlyoutWPF/Pages/HomePage.xaml | Adds Volume Flyout card to the home dashboard and reflows grid layout. |
| FluentFlyoutWPF/Models/AudioSessionModel.cs | Introduces model for a single audio session (volume/mute/state/icon). |
| FluentFlyoutWPF/MainWindow.xaml.cs | Hooks volume flyout into keyboard events, syncs mouse-over across flyouts, updates media icon caching call, and updates animation helpers. |
| FluentFlyoutWPF/FluentFlyout.csproj | Adds the volume flyout demo image as content. |
| FluentFlyoutWPF/Classes/WindowHelper.cs | Adds IsMouseOverWindow Win32-based hit testing helper. |
| FluentFlyoutWPF/Classes/WindowBlurHelper.cs | Adds acrylic blur settings mapping for VolumeMixerWindow. |
| FluentFlyoutWPF/Classes/Utils/VolumeToSpeakerSymbolConverter.cs | Adds converter to choose speaker icon based on volume. |
| FluentFlyoutWPF/Classes/Utils/NullToVisibilityConverter.cs | Adds converter to toggle visibility based on null values (icons). |
| FluentFlyoutWPF/Classes/Utils/MediaPlayerData.cs | Refactors caching and adds PID-based icon caching for better performance. |
| FluentFlyoutWPF/Classes/Utils/DecimalPercentageToFullConverter.cs | Adds converter to display volume scalar as percentage. |
| FluentFlyoutWPF/Classes/Utils/BoolToAccentBrushConverter.cs | Adds converter to highlight active sessions using accent brush (premium setting). |
| FluentFlyoutWPF/Classes/NativeMethods.cs | Adds Win32 constants and ShowWindow P/Invoke for hiding/restoring native OSD. |
| FluentFlyoutWPF/Classes/AudioDeviceMonitor.cs | Modifies audio device monitoring implementation (currently removes notifications wiring). |
| FluentFlyoutWPF/App.xaml | Adds a new app-wide converter resource for opacity behavior. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+68
to
+72
| public void SyncFromDevice() | ||
| { | ||
| var vol = _sessionControl.SimpleAudioVolume.Volume; | ||
| var mute = _sessionControl.SimpleAudioVolume.Mute; | ||
|
|
There was a problem hiding this comment.
SyncFromDevice() doesn't update the session State, so IsActive (and the active-app highlight) becomes stale after initial enumeration. Consider syncing _sessionControl.State into the State property here, and ensure IsActive raises change notifications when State changes.
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.
WIP volume control/mixer flyout, closes #26
"A standalone volume control flyout that expands into a volume mixer, replacing the default Windows volume flyout."
Other updates:
Expanded flyout screenshots


Collapsed flyout