diff --git a/SnapActions/Config/AppSettings.cs b/SnapActions/Config/AppSettings.cs index 6a5d753..66d546f 100644 --- a/SnapActions/Config/AppSettings.cs +++ b/SnapActions/Config/AppSettings.cs @@ -79,6 +79,15 @@ public class AppSettings "KeePass", "KeePassXC", "1Password", "Bitwarden", "Dashlane", "Enpass", "LastPass", "RoboForm", "NordPass", "ProtonPass", "KeeperPasswordManager" ]; + /// + /// Tracks which "default ExcludedApps additions" generation this settings file has + /// already absorbed. SettingsManager.MigrateExcludedAppsDefaults merges new entries + /// forward on Load — users upgrading from an earlier version pick up newly-added + /// exclusions automatically without overwriting their own customizations. Removing + /// an entry sticks because we only ever *add*, and we only add once per generation. + /// + public int ExcludedAppsDefaultsVersion { get; set; } = 0; + public bool ReplaceSelectionOnTransform { get; set; } = true; /// diff --git a/SnapActions/Config/SettingsManager.cs b/SnapActions/Config/SettingsManager.cs index 991fc30..dd8a301 100644 --- a/SnapActions/Config/SettingsManager.cs +++ b/SnapActions/Config/SettingsManager.cs @@ -43,10 +43,42 @@ public static void Load() // Migrate: update built-in search engines to latest defaults MigrateSearchEngines(); MigrateActionIds(); + MigrateExcludedAppsDefaults(); PruneStaleActionIds(); PruneStaleBackups(); } + /// + /// Newly-added default ExcludedApps entries, grouped by the version that introduced them. + /// Each existing settings.json moves forward through this list once — users keep their + /// own additions, and any entry they explicitly remove stays removed because we record + /// the highest applied version in ExcludedAppsDefaultsVersion. New entries should + /// always be appended with the next sequential version. + /// + private static readonly (int Version, string[] Apps)[] ExcludedAppsDefaultsHistory = + { + // v1.6.15: PotPlayer reacts to a synthetic Ctrl+Insert (the capture-cascade's last + // resort) as a non-copy shortcut, and its custom-chrome title bar reports as client + // area to NCHITTEST so a drag-as-title-bar isn't suppressed earlier. Excluding it + // entirely is the surgical fix for the user-reported interference; users who do want + // capture in PotPlayer can remove these from Settings → Excluded apps. + (Version: 1, Apps: new[] { "PotPlayerMini64", "PotPlayerMini" }), + }; + + private static void MigrateExcludedAppsDefaults() + { + foreach (var (version, apps) in ExcludedAppsDefaultsHistory) + { + if (Current.ExcludedAppsDefaultsVersion >= version) continue; + foreach (var app in apps) + { + if (!Current.ExcludedApps.Any(e => e.Equals(app, StringComparison.OrdinalIgnoreCase))) + Current.ExcludedApps.Add(app); + } + Current.ExcludedAppsDefaultsVersion = version; + } + } + /// /// Keep only the 5 most recent settings.json.broken-* backups. Without this, repeated load /// failures (dying disk, AV scanner racing) accumulate junk in %AppData%\SnapActions forever. diff --git a/SnapActions/SnapActions.csproj b/SnapActions/SnapActions.csproj index 4b8bd9e..38ab19a 100644 --- a/SnapActions/SnapActions.csproj +++ b/SnapActions/SnapActions.csproj @@ -11,7 +11,7 @@ app.manifest SnapActions SnapActions - 1.6.14 + 1.6.15 $(NoWarn);WFO0003