diff --git a/app/Config.cs b/app/Config.cs
index 55ae3a5..e302d64 100644
--- a/app/Config.cs
+++ b/app/Config.cs
@@ -15,10 +15,15 @@ namespace ParsecVDisplay
set => SetString(nameof(Language), value);
}
- public static int DisplayCount
+ ///
+ /// Whether to restore previously-added virtual displays at startup and
+ /// after sleep/resume. The actual saved state lives in
+ /// ; this is just the on/off switch.
+ ///
+ public static bool RestoreDisplays
{
- get => GetInt(nameof(DisplayCount), 0);
- set => SetInt(nameof(DisplayCount), value);
+ get => GetInt(nameof(RestoreDisplays), 1) != 0;
+ set => SetInt(nameof(RestoreDisplays), value ? 1 : 0);
}
///
diff --git a/app/Tray.cs b/app/Tray.cs
index 12f4ba2..a308f7f 100644
--- a/app/Tray.cs
+++ b/app/Tray.cs
@@ -99,7 +99,7 @@ namespace ParsecVDisplay
(MI_RunOnStartup = new ToolStripMenuItem("t_run_on_startup",
null, OptionsCheck) { CheckOnClick = true, Checked = Config.RunOnStartup }),
(MI_RestoreDisplays = new ToolStripMenuItem("t_restore_displays",
- null, OptionsCheck) { CheckOnClick = true, Checked = Config.DisplayCount >= 0 }),
+ null, OptionsCheck) { CheckOnClick = true, Checked = Config.RestoreDisplays }),
new ToolStripSeparator(),
(MI_FallbackDisplay = new ToolStripMenuItem("t_fallback_display",
null, OptionsCheck) { CheckOnClick = true, Checked = Config.FallbackDisplay }),
@@ -238,8 +238,7 @@ namespace ParsecVDisplay
///
void RestoreDisplays()
{
- // Toggle off => skip
- if (Config.DisplayCount < 0)
+ if (!Config.RestoreDisplays)
return;
var states = Display.UnpackStates(Config.SavedDisplays);
@@ -488,16 +487,15 @@ namespace ParsecVDisplay
Config.RunOnStartup = MI_RunOnStartup.Checked;
else if (sender == MI_RestoreDisplays)
{
+ Config.RestoreDisplays = MI_RestoreDisplays.Checked;
if (MI_RestoreDisplays.Checked)
{
// Enabling → snapshot the current state right away so a quick
// restart restores what the user has on screen.
- Config.DisplayCount = Vdd.Core.GetDisplays().Count;
SaveDisplayState(null, EventArgs.Empty);
}
else
{
- Config.DisplayCount = -1;
Config.SavedDisplays = string.Empty;
}
}
@@ -527,19 +525,17 @@ namespace ParsecVDisplay
if (Vdd.Controller.IsSuspended)
return;
- if (Config.DisplayCount >= 0)
- {
- var displays = Vdd.Core.GetDisplays();
- Config.DisplayCount = displays.Count;
+ if (!Config.RestoreDisplays)
+ return;
- var states = new List(displays.Count);
- foreach (var d in displays)
- {
- if (d.Active && d.CurrentMode != null)
- states.Add(d.Snapshot());
- }
- Config.SavedDisplays = Display.PackStates(states);
+ var displays = Vdd.Core.GetDisplays();
+ var states = new List(displays.Count);
+ foreach (var d in displays)
+ {
+ if (d.Active && d.CurrentMode != null)
+ states.Add(d.Snapshot());
}
+ Config.SavedDisplays = Display.PackStates(states);
}
public void ShowApp()
@@ -586,7 +582,9 @@ namespace ParsecVDisplay
void Exit(object sender, EventArgs e)
{
var displays = Vdd.Core.GetDisplays();
- if (displays.Count > 0)
+ // Skip the "remove all displays?" prompt when restore is enabled —
+ // the next launch will bring them right back.
+ if (displays.Count > 0 && !Config.RestoreDisplays)
{
if (MessageBox.Show(Owner, App.GetTranslation("t_msg_prompt_leave_all"),
Program.AppName, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
@@ -600,8 +598,9 @@ namespace ParsecVDisplay
PowerEvents.PowerModeChanged -= OnPowerModeChanged;
FallbackTimer?.Dispose();
- if (Config.DisplayCount >= 0)
- Config.DisplayCount = displays.Count;
+ // Snapshot one last time so next launch's restore matches the
+ // displays the user is exiting with.
+ SaveDisplayState(null, EventArgs.Empty);
// Best-effort explicit removal in reverse order (preserves Windows 10
// Connectivity registry config). Per-display failures are swallowed —