Release v4.4: keyboard shortcuts are now machine-wide, not per-profile

Fixes issue #14: shortcuts were stored on each Profile, so one set on profile A
didn't apply on profile B and seemed to vanish on switch. They now live in
AppConfig (one set shared by every profile). RemSoundSettingsStore's Load*/Save*
hotkey methods re-point to AppConfig (callers unchanged); the per-profile cache
fields, profile load/save plumbing, and the HotkeySetting helper class are removed.
Profile's HotkeyRecord fields stay only for back-compat deserialization.

On upgrade, shortcuts reset to defaults (there's no single correct set to carry over
since profiles could hold different/partial sets). A one-time startup notice tells
upgraders to re-set them; fresh installs are silently marked done (nothing to reset).

Manual, About changelog and RELEASE_NOTES updated; csproj <Version> 4.4.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-06-19 23:11:53 +01:00
co-authored by Claude Opus 4.8
parent 32be3426e7
commit 8a1bc0c813
8 changed files with 153 additions and 199 deletions
+14
View File
@@ -20,6 +20,20 @@ internal sealed class AboutDialog : Form
/// updates" path.</summary>
private const string ReleaseNotes =
"""
RemSound v4.4
Keyboard shortcuts are now shared across all
your profiles, instead of being saved separately
in each one. Set a shortcut once and it works on
every profile, and stays put when you switch
which is what people asked for.
Because of this change, your shortcuts have gone
back to their defaults. If you'd set up any of
your own, please set them again in Options
Keyboard shortcuts (Ctrl+K). You only need to do
this once.
RemSound v4.3.1
A gentler update sound. The cue that plays when
+51
View File
@@ -1380,6 +1380,8 @@ public sealed class MainForm : Form
/// </summary>
private void RunStartupNotices()
{
if (IsDisposed) return;
MaybeShowKeyboardShortcutsGlobalNotice();
if (IsDisposed) return;
MaybeShowWhatsNewAfterUpdate();
if (IsDisposed) return;
@@ -1431,6 +1433,55 @@ public sealed class MainForm : Form
}
}
/// <summary>One-time notice (v4.4) telling upgraders that keyboard shortcuts have moved from
/// per-profile to machine-wide storage (issue #14), so their shortcuts have reset to defaults and
/// need re-setting. Shown once to anyone who ran an earlier version; on a brand-new install (which
/// has nothing to reset) it's silently marked done and never shown. Must run BEFORE
/// <see cref="MaybeShowWhatsNewAfterUpdate"/>, which overwrites the LastWhatsNewVersion we read to
/// tell upgraders apart from fresh installs.</summary>
private void MaybeShowKeyboardShortcutsGlobalNotice()
{
if (IsDisposed) return;
AppConfig cfg;
try { cfg = AppConfig.Load(); }
catch { return; }
if (cfg.KeyboardShortcutsGlobalNoticeShown) return;
// A non-empty LastWhatsNewVersion means a previous version has run on this machine — i.e. this
// is an upgrade, so there were per-profile shortcuts that have now reset. A fresh install has it
// empty (it's set later, by MaybeShowWhatsNewAfterUpdate) and has nothing to reset.
var isUpgrade = !string.IsNullOrEmpty(cfg.LastWhatsNewVersion);
if (isUpgrade)
{
logFile.Event("keyboard shortcuts: showing one-time 'now shared across profiles' notice");
var page = new TaskDialogPage
{
Caption = "RemSound",
Heading = "Your keyboard shortcuts are now shared across profiles",
Text = "Keyboard shortcuts used to be saved separately for each profile, so a shortcut you set on one "
+ "profile wouldn't work on another. From this version they're shared across all your profiles "
+ "instead — one set for the whole app, which our users have requested.\n\n"
+ "Because of this change, your shortcuts have started fresh at their defaults. If you'd set up any "
+ "shortcuts of your own, please set them again in Options → Keyboard shortcuts (Ctrl+K). You only "
+ "need to do this once — from now on they'll stay put whatever profile you're on.",
Icon = TaskDialogIcon.Information,
Buttons = { TaskDialogButton.OK },
AllowCancel = true,
};
try { ForegroundDialog.Show(owner => TaskDialog.ShowDialog(owner, page)); }
catch (Exception ex) { logFile.Event($"keyboard shortcuts notice failed: {ex.GetType().Name}: {ex.Message}"); }
}
// Mark done either way (shown to upgraders, silently to fresh installs) so it's strictly one-time.
try
{
var fresh = AppConfig.Load();
fresh.KeyboardShortcutsGlobalNoticeShown = true;
fresh.Save();
}
catch { /* harmless — at worst the notice shows again next launch */ }
}
/// <summary>If the user opted in (<see cref="AppConfig.ShowWhatsNewAfterUpdate"/>) and the
/// running version changed since the last launch we recorded, open the About box once so
/// they see what changed in the update just installed. Always records the current version
+1 -1
View File
@@ -14,7 +14,7 @@
tag_name on the latest GitHub release; bump it on every public release. The
AssemblyVersion / FileVersion default to this value, and Assembly.GetName().Version
is what the About dialog and the updater both read. -->
<Version>4.3.1</Version>
<Version>4.4</Version>
</PropertyGroup>
<ItemGroup>