Skip to content

Commit 746feb0

Browse files
hifihedgehogclaude
andcommitted
Fix sidebar showing yellow icons when starting minimized to tray
Driver detection (ViGEm, HidHide, vJoy, MIDI Services) and the 5-second refresh timer were initialized inside OnLoaded, which never fires when starting minimized to tray (Show() is skipped). Moved driver detection and timer setup to the constructor so they run before the sidebar is built, ensuring correct power icon colors on all startup modes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 74967d8 commit 746feb0

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

PadForge.App/MainWindow.xaml.cs

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,16 @@ await RunDriverOperationAsync(
661661
if (_inputService.EnsureTypeGroupOrder(silent: true))
662662
_settingsService.MarkDirty();
663663

664+
// Detect drivers early (before sidebar rebuild) so power icons show correct
665+
// colors even when starting minimized to tray (where OnLoaded never fires).
666+
RefreshViGEmStatus();
667+
_previousViGEmInstalled = _viewModel.Dashboard.IsViGEmInstalled;
668+
RefreshHidHideStatus();
669+
RefreshVJoyStatus();
670+
_previousVJoyInstalled = _viewModel.Dashboard.IsVJoyInstalled;
671+
RefreshMidiServicesStatus();
672+
StartDriverStatusTimer();
673+
664674
// Populate sidebar and dashboard with saved slots regardless of engine state,
665675
// so virtual controllers are visible for configuration even when the engine is off.
666676
_viewModel.RefreshNavControllerItems();
@@ -682,31 +692,9 @@ await RunDriverOperationAsync(
682692
// Lifecycle
683693
// ─────────────────────────────────────────────
684694

685-
private void OnLoaded(object sender, RoutedEventArgs e)
695+
private void StartDriverStatusTimer()
686696
{
687-
// Settings and tray icon are already initialized in the constructor
688-
// (before Show) so that App.OnStartup can decide whether to show the window.
689-
690-
// Populate diagnostic info.
691-
_viewModel.Settings.ApplicationVersion =
692-
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? "1.0.0";
693-
_viewModel.Settings.RuntimeVersion = Environment.Version.ToString();
694-
695-
// Detect ViGEmBus driver.
696-
RefreshViGEmStatus();
697-
_previousViGEmInstalled = _viewModel.Dashboard.IsViGEmInstalled;
698-
699-
// Detect HidHide driver.
700-
RefreshHidHideStatus();
701-
702-
// Detect vJoy driver.
703-
RefreshVJoyStatus();
704-
_previousVJoyInstalled = _viewModel.Dashboard.IsVJoyInstalled;
705-
706-
// Detect MIDI Services.
707-
RefreshMidiServicesStatus();
708-
709-
// Periodically refresh driver install states (every 5 seconds).
697+
if (_driverStatusTimer != null) return;
710698
_driverStatusTimer = new System.Windows.Threading.DispatcherTimer
711699
{
712700
Interval = TimeSpan.FromSeconds(5)
@@ -753,6 +741,17 @@ private void OnLoaded(object sender, RoutedEventArgs e)
753741
}
754742
};
755743
_driverStatusTimer.Start();
744+
}
745+
746+
private void OnLoaded(object sender, RoutedEventArgs e)
747+
{
748+
// Driver detection and timer are initialized in the constructor so they
749+
// work even when starting minimized to tray (where OnLoaded never fires).
750+
751+
// Populate diagnostic info.
752+
_viewModel.Settings.ApplicationVersion =
753+
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? "1.0.0";
754+
_viewModel.Settings.RuntimeVersion = Environment.Version.ToString();
756755

757756
// Check SDL3.dll availability.
758757
try

0 commit comments

Comments
 (0)