Watch
1
0
Fork
You've already forked souveraine
0

osk: retire the dead dual-keyboard path

This commit is contained in:
Fimeg 2026-08-11 19:21:21 -04:00
commit fb5e9bb80c
4 changed files with 36 additions and 179 deletions

View file

@ -35,12 +35,6 @@ Singleton {
property string squeezeAction: "dial"
property string squeezeHoldAction: "assistant"
property string edgeAction: "dial"
// The nav pill's extra detent, past swipe-to-maximum, while an OSK is up.
// Named here rather than wired into the pill for the same reason as the
// squeeze: TASK-38 says this registers as an action, not as a hardcoded
// pill binding (INTERFACE-ARCHITECTURE §4).
property string oskSwapAction: "oskSwap"
// Last gesture seen, so a surface can show that the hardware is alive even
// before anything is bound to it the difference between "grip does
// nothing" and "grip is not reaching us" is the whole debugging story.
@ -63,34 +57,6 @@ Singleton {
Haptics.tick();
GlobalStates.oskOpen = !GlobalStates.oskOpen;
},
// Swap which on-screen keyboard is running: stevia (daily word
// completion, dictation mic) <-> squeekboard (terminal arrows, fn,
// dense grid). stevia dropped its terminal layout and the
// POS_INPUT_METHOD_PURPOSE_TERMINAL auto-switch with it, so without
// this there is no way to reach a terminal layout by gesture at all.
//
// Called by name, not by path: osk-switch is /usr/bin/osk-switch, owned
// by souveraine-osk-switch (Pixel3Arch cd8b67e), which depends on both
// souveraine-stevia and souveraine-squeekboard. It was unowned at
// /usr/local/bin until 2026-07-29 a shipped gesture whose only effect
// was a file no package knew about and a reprovision would lose.
//
// confirm(), not tick(): the detent already ticked when the drag
// crossed it, and a swap that has actually been committed should not
// feel the same as crossing the line.
"oskSwap": () => {
Haptics.confirm();
// Declare the intent before the swap, not after it. osk-switch
// deliberately re-shows the keyboard on the new daemon ("so the
// swap is visible immediately"), and OnScreenKeyboard re-asserts
// oskOpen at whoever takes the sm.puri.OSK0 name. If the shell
// did not record that a swap means "keyboard up", those two would
// fight: osk-switch shows it, the shell pushes its stale false,
// and which one the user gets is a race. A swap is a request for
// a keyboard.
GlobalStates.oskOpen = true;
Quickshell.execDetached(["osk-switch"]);
},
"screenshot": () => {
Haptics.confirm();
Quickshell.execDetached(["sh", "-c",
@ -143,16 +109,6 @@ Singleton {
});
}
// The nav pill's past-maximum detent. Exposed here so the swap is
// testable without a touchscreen `qs -c souveraine ipc call gesture
// oskSwap` is the same path the pill takes.
function oskSwap(): string {
return JSON.stringify({
ok: root.deliver("osk-swap", root.oskSwapAction),
action: root.oskSwapAction
});
}
// What is bound to what, and what was last seen. An agent or a
// settings page reads this instead of guessing.
function state(): string {
@ -160,7 +116,6 @@ Singleton {
squeeze: root.squeezeAction,
squeezeHold: root.squeezeHoldAction,
edge: root.edgeAction,
oskSwap: root.oskSwapAction,
available: Object.keys(root.actions),
lastGesture: root.lastGesture,
lastGestureAt: root.lastGestureAt
@ -175,7 +130,6 @@ Singleton {
case "squeeze": root.squeezeAction = action; break;
case "squeeze-hold": root.squeezeHoldAction = action; break;
case "edge": root.edgeAction = action; break;
case "osk-swap": root.oskSwapAction = action; break;
default:
return JSON.stringify({ ok: false, reason: "no such gesture: " + gesture });
}