From f2b79757e26823cc1db1cf077dc03f1781562861 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 28 Aug 2025 15:13:40 +1000 Subject: lock: add caps/num lock indicator Closes #485 --- services/Hypr.qml | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) (limited to 'services') diff --git a/services/Hypr.qml b/services/Hypr.qml index d4782dc..c90ccf03 100644 --- a/services/Hypr.qml +++ b/services/Hypr.qml @@ -1,5 +1,6 @@ pragma Singleton +import qs.components.misc import Quickshell import Quickshell.Hyprland import Quickshell.Io @@ -15,11 +16,14 @@ Singleton { readonly property HyprlandToplevel activeToplevel: Hyprland.activeToplevel?.wayland?.activated ? Hyprland.activeToplevel : null readonly property HyprlandWorkspace focusedWorkspace: Hyprland.focusedWorkspace readonly property HyprlandMonitor focusedMonitor: Hyprland.focusedMonitor - readonly property int activeWsId: focusedWorkspace?.id ?? 1 + + property var keyboard + readonly property bool capsLock: keyboard?.capsLock ?? false + readonly property bool numLock: keyboard?.numLock ?? false + readonly property string kbLayoutFull: keyboard?.active_keymap ?? "?" readonly property string kbLayout: kbMap.get(kbLayoutFull) ?? "??" - property string kbLayoutFull: "?" - property var kbMap: new Map() + readonly property var kbMap: new Map() function dispatch(request: string): void { Hyprland.dispatch(request); @@ -37,8 +41,10 @@ Singleton { if (n.endsWith("v2")) return; - if (n === "activelayout") { - root.kbLayoutFull = event.parse(2)[1]; + if (n === "configreloaded") { + setDynamicConfsProc.running = true; + } else if (n === "activelayout") { + devicesProc.running = true; } else if (["workspace", "moveworkspace", "activespecial", "focusedmon"].includes(n)) { Hyprland.refreshWorkspaces(); Hyprland.refreshMonitors(); @@ -73,10 +79,34 @@ Singleton { } Process { + id: devicesProc + running: true command: ["hyprctl", "-j", "devices"] stdout: StdioCollector { - onStreamFinished: root.kbLayoutFull = JSON.parse(text).keyboards.find(k => k.main).active_keymap + onStreamFinished: root.keyboard = JSON.parse(text).keyboards.find(k => k.main) + } + } + + Process { + id: setDynamicConfsProc + + running: true + command: ["hyprctl", "--batch", "keyword bindln ,Caps_Lock,global,caelestia:reloadDevices;keyword bindln ,Num_Lock,global,caelestia:reloadDevices"] + } + + IpcHandler { + target: "hypr" + + function reloadDevices(): void { + devicesProc.running = true; } } + + CustomShortcut { + name: "reloadDevices" + description: "Reload devices" + onPressed: devicesProc.running = true + onReleased: devicesProc.running = true + } } -- cgit v1.2.3-freya