Add "double-press to copy status" toggle + document the spoken-status changes (held for next release)
Preferences General-tab checkbox "Double-press the speak-status hotkey to copy the status to the clipboard" (Alt+C), machine-wide (AppConfig.DoublePressStatusToCopy), on by default. When off, a double press just reads the status again. SpeakStatusLine reads the flag only when the timing already qualifies, so a normal single press never touches the config. Manual's speak-status section now covers the line-by-line read, GB totals, and the double-press copy + its toggle. Held for the next release. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
0fe9637356
commit
be32a060e7
@@ -813,7 +813,9 @@ If RemSound was minimised to the system tray when you pressed the hotkey, it swi
|
||||
|
||||
The main window has a **status line** that updates every second with how long you've been connected, how many peers you have, whether sound is flowing, and how healthy the connection is. Normally your screen reader reads it like any other text — but now and then, for reasons that have nothing to do with RemSound, a screen reader loses sight of it and says there's nothing there.
|
||||
|
||||
This hotkey is the cure. Give **Speak the RemSound status information** a key in the Keyboard shortcuts dialog, and from then on pressing it reads the whole status line out loud, wherever you are — even when RemSound is tucked away in the tray or another program is in front. It's unset to start with, so the key is yours to choose.
|
||||
This hotkey is the cure. Give **Speak the RemSound status information** a key in the Keyboard shortcuts dialog, and from then on pressing it reads the whole status out loud, wherever you are — even when RemSound is tucked away in the tray or another program is in front. It's unset to start with, so the key is yours to choose.
|
||||
|
||||
It reads the status out **a line at a time** — peers, ping, uptime, data rates, totals — so each piece lands as its own short phrase rather than one long run-on, and big totals show in gigabytes once they pass a gigabyte. A quick **double press** of the same hotkey **copies the status to the clipboard** instead of reading it, so you can paste it to someone if you're comparing notes. If you'd rather a double press just read it again, untick **Double-press the speak-status hotkey to copy the status to the clipboard** on the **General** tab of Preferences (it's on by default).
|
||||
|
||||
This one is just for screen-reader users: it talks straight through your screen reader. It works with the screen readers RemSound's speech helper supports — **NVDA** , JAWS, Window-Eyes, System Access, SuperNova and ZoomText — and falls back to Windows' own built-in speech if none of those is running. If you don't use a screen reader, just leave this one unset.
|
||||
|
||||
|
||||
+3
-1
@@ -858,7 +858,9 @@ Audient USB Audio ASIO Driver — Pair 3 (channels 5/6): Loop-back 1 (L) / L
|
||||
|
||||
<p>The main window has a <strong>status line</strong> that updates every second with how long you've been connected, how many peers you have, whether sound is flowing, and how healthy the connection is. Normally your screen reader reads it like any other text — but now and then, for reasons that have nothing to do with RemSound, a screen reader loses sight of it and says there's nothing there.</p>
|
||||
|
||||
<p>This hotkey is the cure. Give <strong>Speak the RemSound status information</strong> a key in the Keyboard shortcuts dialog, and from then on pressing it reads the whole status line out loud, wherever you are — even when RemSound is tucked away in the tray or another program is in front. It's unset to start with, so the key is yours to choose.</p>
|
||||
<p>This hotkey is the cure. Give <strong>Speak the RemSound status information</strong> a key in the Keyboard shortcuts dialog, and from then on pressing it reads the whole status out loud, wherever you are — even when RemSound is tucked away in the tray or another program is in front. It's unset to start with, so the key is yours to choose.</p>
|
||||
|
||||
<p>It reads the status out <strong>a line at a time</strong> — peers, ping, uptime, data rates, totals — so each piece lands as its own short phrase rather than one long run-on, and big totals show in gigabytes once they pass a gigabyte. A quick <strong>double press</strong> of the same hotkey <strong>copies the status to the clipboard</strong> instead of reading it, so you can paste it to someone if you're comparing notes. If you'd rather a double press just read it again, untick <strong>Double-press the speak-status hotkey to copy the status to the clipboard</strong> on the <strong>General</strong> tab of Preferences (it's on by default).</p>
|
||||
|
||||
<p>This one is just for screen-reader users: it talks straight through your screen reader. It works with the screen readers RemSound's speech helper supports — <strong>NVDA</strong>, JAWS, Window-Eyes, System Access, SuperNova and ZoomText — and falls back to Windows' own built-in speech if none of those is running. If you don't use a screen reader, just leave this one unset.</p>
|
||||
|
||||
|
||||
@@ -3360,13 +3360,16 @@ public sealed class MainForm : Form
|
||||
private void SpeakStatusLine()
|
||||
{
|
||||
var now = DateTime.UtcNow;
|
||||
var doublePress = now - lastSpeakStatusPressUtc <= TimeSpan.FromMilliseconds(600);
|
||||
var withinDoublePressWindow = now - lastSpeakStatusPressUtc <= TimeSpan.FromMilliseconds(600);
|
||||
lastSpeakStatusPressUtc = now;
|
||||
|
||||
var text = statusReadout.Text;
|
||||
if (string.IsNullOrWhiteSpace(text)) text = "No status information available.";
|
||||
|
||||
if (doublePress)
|
||||
// Double press copies to the clipboard — but only if the user has left that on (Preferences →
|
||||
// General). Read the flag only when the timing already qualifies, so a normal single press never
|
||||
// touches the config file.
|
||||
if (withinDoublePressWindow && AppConfig.Load().DoublePressStatusToCopy)
|
||||
{
|
||||
// Second quick press: copy the status to the clipboard so it can be shared. Clipboard access
|
||||
// needs the UI thread — this runs on it (the hotkey is marshalled onto the owner form).
|
||||
|
||||
@@ -210,6 +210,15 @@ internal sealed class PreferencesDialog : Form
|
||||
AutoSize = true,
|
||||
};
|
||||
|
||||
// Screen-reader convenience (machine-wide, AppConfig). On by default. When off, a double press of
|
||||
// the speak-status hotkey just reads the status again rather than copying it.
|
||||
private readonly AccessibleCheckBox doublePressCopyBox = new()
|
||||
{
|
||||
Text = "Double-press the speak-status hotkey to copy the status to the clipboard (Alt+&C)",
|
||||
AccessibleName = "Double-press the speak-status hotkey to copy the status to the clipboard",
|
||||
AutoSize = true,
|
||||
};
|
||||
|
||||
// Update settings — startup-check checkbox, frequency dropdown, manual check button,
|
||||
// silent-install checkbox. Sits above the logging row so users meet it during setup; the
|
||||
// canonical order in the dialog is "things related to the program staying current" before
|
||||
@@ -566,6 +575,15 @@ internal sealed class PreferencesDialog : Form
|
||||
silentlyInstallUpdatesBox.Checked = cfgForLoad.SilentlyInstallUpdates;
|
||||
upnpEnabledBox.Checked = cfgForLoad.UpnpEnabled;
|
||||
|
||||
// Double-press-the-speak-status-hotkey-to-copy toggle (machine-wide, AppConfig). On by default.
|
||||
doublePressCopyBox.Checked = cfgForLoad.DoublePressStatusToCopy;
|
||||
doublePressCopyBox.CheckedChanged += (_, _) =>
|
||||
{
|
||||
var cfg = AppConfig.Load();
|
||||
cfg.DoublePressStatusToCopy = doublePressCopyBox.Checked;
|
||||
try { cfg.Save(); } catch { /* harmless — choice just won't survive a restart */ }
|
||||
};
|
||||
|
||||
checkForUpdatesOnStartupBox.CheckedChanged += (_, _) =>
|
||||
{
|
||||
var cfg = AppConfig.Load();
|
||||
@@ -798,7 +816,7 @@ internal sealed class PreferencesDialog : Form
|
||||
// is a field (declared above) so OnShown can focus it when the dialog opens. Logging is its
|
||||
// own tab (2026-06-19); the two logging controls moved off the General tab to lead it.
|
||||
tabs.TabPages.Add(MakeTab("General",
|
||||
browseProfilesFolderButton, acceptRemoteVolumeBox, upnpEnabledBox, upnpStatusLabel));
|
||||
browseProfilesFolderButton, acceptRemoteVolumeBox, upnpEnabledBox, upnpStatusLabel, doublePressCopyBox));
|
||||
tabs.TabPages.Add(MakeTab("Audio cues", cueGroup));
|
||||
tabs.TabPages.Add(MakeTab("Startup behaviour",
|
||||
startMinimisedBox, startWithUserBox, startWithProfileBox, startupListPanel));
|
||||
|
||||
@@ -196,6 +196,11 @@ public sealed class AppConfig
|
||||
public bool? UntickOthersWhenUsingDefaultOutput { get; set; }
|
||||
public bool? UntickOthersWhenUsingDefaultInput { get; set; }
|
||||
|
||||
/// <summary>If true, pressing the "speak status" global hotkey twice in quick succession copies the
|
||||
/// status text to the clipboard (instead of just reading it again). On by default; the user can turn
|
||||
/// it off on the Preferences General tab. Machine-wide; a screen-reader convenience (Andre's idea).</summary>
|
||||
public bool DoublePressStatusToCopy { get; set; } = true;
|
||||
|
||||
/// <summary>If non-null and a profile with this title exists, RemSound skips the
|
||||
/// startup profile picker and loads this profile directly. Combine with
|
||||
/// <see cref="StartMinimised"/> + the Windows auto-start registry entry
|
||||
|
||||
Reference in New Issue
Block a user