P2 leftovers: every inline dialog now audited + one shared sample clamp (review complete bar peer extraction)

Inline-built dialogs were invisible to the accessibility audit - which is exactly how
mnemonic-less buttons kept slipping through (the single-instance dialog Andre caught,
and now TWO more found by this very change: ManualPeerPrompt's OK/Cancel and
ProfileSaveAsPrompt's Cancel had no mnemonics - both fixed). Each inline dialog's
construction is split from its ShowDialog into a Build seam, and the audit now covers
15 dialog surfaces (was 8): manual peer prompt, quick profile switch, change password,
password manager, profile name prompt, and the service Additional-options window join
the eight Form dialogs. Behaviour unchanged.

The encoder-boundary clamp is now ONE shared rule (Core SampleClamp) instead of three
private copies in MixingEngine / AsioCaptureBackend / PushModeWasapiBackend - and the
ASIO copy's up-to-four interlocked increments per frame became one batched add per
buffer on the RT thread. Pinned by a new self-test (over-range clamps to exactly +/-1
and counts; +/-1 exactly passes untouched).

Gate 61/61.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-07-26 22:38:40 +01:00
co-authored by Claude Fable 5
parent e2211f8a40
commit e3bf28a414
10 changed files with 160 additions and 77 deletions
+34 -21
View File
@@ -23,7 +23,38 @@ internal static class ProfileSaveAsPrompt
string dialogTitle = "Save profile as",
string promptLabel = "Profile name:")
{
using var dialog = new Form
var (dialog, textBox) = Build(defaultName, dialogTitle, promptLabel);
using (dialog)
{
while (true)
{
if (dialog.ShowDialog(owner) != DialogResult.OK) return null;
var name = textBox.Text.Trim();
if (string.IsNullOrWhiteSpace(name))
{
MessageBox.Show(owner, "Please enter a profile name.", "RemSound", MessageBoxButtons.OK, MessageBoxIcon.Warning);
continue;
}
if (store is not null && store.Exists(name))
{
var overwrite = MessageBox.Show(owner,
$"A profile named \"{name}\" already exists. Overwrite?",
"Confirm overwrite", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (overwrite != DialogResult.Yes) continue;
}
return name;
}
}
}
/// <summary>Construction split from ShowDialog so the accessibility audit can inspect the real
/// dialog (inline-built dialogs used to be invisible to the audit).</summary>
internal static (Form Dialog, TextBox Input) Build(
string? defaultName = null,
string dialogTitle = "Save profile as",
string promptLabel = "Profile name:")
{
var dialog = new Form
{
Text = dialogTitle,
StartPosition = FormStartPosition.CenterParent,
@@ -40,7 +71,7 @@ internal static class ProfileSaveAsPrompt
AccessibleName = promptLabel.TrimEnd(':', ' '),
};
var okButton = new Button { Text = "&OK", AutoSize = true, DialogResult = DialogResult.OK };
var cancelButton = new Button { Text = "Cancel", AutoSize = true, DialogResult = DialogResult.Cancel };
var cancelButton = new Button { Text = "&Cancel", AutoSize = true, DialogResult = DialogResult.Cancel };
textBox.KeyDown += (_, args) =>
{
if (args.KeyCode == Keys.Enter)
@@ -72,24 +103,6 @@ internal static class ProfileSaveAsPrompt
dialog.Controls.Add(panel);
dialog.AcceptButton = okButton;
dialog.CancelButton = cancelButton;
while (true)
{
if (dialog.ShowDialog(owner) != DialogResult.OK) return null;
var name = textBox.Text.Trim();
if (string.IsNullOrWhiteSpace(name))
{
MessageBox.Show(owner, "Please enter a profile name.", "RemSound", MessageBoxButtons.OK, MessageBoxIcon.Warning);
continue;
}
if (store is not null && store.Exists(name))
{
var overwrite = MessageBox.Show(owner,
$"A profile named \"{name}\" already exists. Overwrite?",
"Confirm overwrite", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (overwrite != DialogResult.Yes) continue;
}
return name;
}
return (dialog, textBox);
}
}