Shortcuts you invent, rules you write, gestures you own - all still just data

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-25 01:51:59 -04:00
parent f9e5d3f470
commit 06c53d6c21
48 changed files with 4749 additions and 140 deletions
@@ -45,6 +45,24 @@ Column {
property string failedSsid: ""
property string failedText: ""
// The hidden-network form. Its passphrase lives here only while the form is
// open: the form is a Loader, so closing it destroys the field, and
// closeHidden empties this alongside it.
property bool hiddenOpen: false
property string hiddenSsid: ""
property string hiddenSecurity: "wpa-psk"
property string hiddenPassword: ""
readonly property bool hiddenReady: root.hiddenSsid.trim() !== ""
&& (root.hiddenSecurity === "none" || root.hiddenPassword !== "")
function closeHidden(): void {
root.hiddenOpen = false;
root.hiddenSsid = "";
root.hiddenSecurity = "wpa-psk";
root.hiddenPassword = "";
}
// The list shows what matters and folds the rest: connected and saved
// networks always render (they lead the sort, so a slice keeps them), and
// strangers fill the remaining slots up to the cap. Everything else waits
@@ -72,6 +90,10 @@ Column {
root.confirmingForget = "";
}
// closeAll is called from row activation, which the hidden form is not part
// of -- opening a network's drawer should not throw away a half-typed
// hidden SSID, but joining one should close the form.
// One click on a row means whatever that row's state makes it mean. The
// connected network opens rather than reconnecting to itself.
function activate(network: var): void {
@@ -202,6 +224,7 @@ Column {
ConnectionDetails {
width: parent.width
connection: entry.ssid
details: entry.details
}
@@ -426,4 +449,116 @@ Column {
: ""
divider: false
}
// ── A network that does not say it is there ─────────────────────────────
//
// A hidden network cannot appear in the list above by definition, so the
// only way in is to name it. This was the last thing on the Wi-Fi card that
// sent people back to GNOME's panel.
ActionRow {
width: parent.width
visible: Connectivity.wifiDevice !== null && Connectivity.wifiEnabled
label: "Join a hidden network…"
detail: "A network that does not broadcast its name — you type the name and its security"
action: root.hiddenOpen ? "Cancel" : "Join…"
enabled: !NetworkTools.busy
divider: root.hiddenOpen
onTriggered: {
if (root.hiddenOpen) {
root.closeHidden();
return;
}
root.closeAll();
root.hiddenOpen = true;
}
}
// Loaded rather than hidden, for the same reason the enterprise form is:
// closing it destroys the field, and with it the passphrase that was typed.
Loader {
id: hiddenLoader
width: parent.width
active: root.hiddenOpen
visible: hiddenLoader.active
sourceComponent: Column {
width: hiddenLoader.width
TextFieldRow {
width: parent.width
label: "Network name"
detail: "Exactly as whoever runs the network wrote it — a hidden network is found by name, so a typo simply never connects"
placeholder: "office-private"
text: root.hiddenSsid
enabled: !NetworkTools.busy
onAccepted: value => root.hiddenSsid = value.trim()
}
OptionPickerRow {
width: parent.width
label: "Security"
detail: "What the network expects. The wrong one associates and then fails, with nothing to say why."
enabled: !NetworkTools.busy
options: [
{
value: "wpa-psk",
label: "WPA2 (password)",
detail: "What almost every home and office network uses"
},
{
value: "sae",
label: "WPA3 (password)",
detail: "Newer, and refused outright by anything older"
},
{
value: "none",
label: "Open",
detail: "No password at all"
}
]
current: root.hiddenSecurity
onPicked: value => {
root.hiddenSecurity = String(value);
// An open network has no passphrase, so a passphrase typed
// before the mode changed must not sit in memory waiting to
// be sent to a network that will not ask for one.
if (root.hiddenSecurity === "none")
root.hiddenPassword = "";
}
}
SecretFieldRow {
width: parent.width
visible: root.hiddenSecurity !== "none"
label: "Password"
detail: "Handed to NetworkManager down a pipe, never as a command argument"
enabled: !NetworkTools.busy
onChanged: value => root.hiddenPassword = value
}
ActionRow {
width: parent.width
label: "Join this network"
detail: root.hiddenSsid.trim() === ""
? "Give the network a name first."
: (root.hiddenSecurity !== "none" && root.hiddenPassword === ""
? "This network needs a password."
: "Saves a profile that probes for " + root.hiddenSsid.trim()
+ " by name, and connects to it.")
action: NetworkTools.busy ? "Joining…" : "Join"
enabled: !NetworkTools.busy && root.hiddenReady
divider: false
onTriggered: {
if (!root.hiddenReady)
return;
const ssid = root.hiddenSsid.trim();
NetworkTools.joinHidden(ssid, ssid, root.hiddenSecurity,
root.hiddenPassword);
root.closeHidden();
}
}
}
}
}