mirror of
https://github.com/zoriya/noctalia-shell.git
synced 2025-12-06 06:36:15 +00:00
86 lines
2.5 KiB
QML
86 lines
2.5 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Commons
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
property bool capsLockOn: false
|
|
property bool numLockOn: false
|
|
property bool scrollLockOn: false
|
|
|
|
signal capsLockChanged(bool active)
|
|
signal numLockChanged(bool active)
|
|
signal scrollLockChanged(bool active)
|
|
|
|
Process {
|
|
id: stateCheckProcess
|
|
|
|
property string checkCommand: " \
|
|
caps=0; cat /sys/class/leds/input*::capslock/brightness 2>/dev/null | grep -q 1 && caps=1; echo \"caps:${caps}\"; \
|
|
num=0; cat /sys/class/leds/input*::numlock/brightness 2>/dev/null | grep -q 1 && num=1; echo \"num:${num}\"; \
|
|
scroll=0; cat /sys/class/leds/input*::scrolllock/brightness 2>/dev/null | grep -q 1 && scroll=1; echo \"scroll:${scroll}\"; \
|
|
"
|
|
command: ["sh", "-c", stateCheckProcess.checkCommand]
|
|
|
|
stdout: StdioCollector {
|
|
onStreamFinished: {
|
|
var lines = this.text.trim().split('\n')
|
|
for (var i = 0; i < lines.length; i++) {
|
|
var parts = lines[i].split(':')
|
|
if (parts.length === 2) {
|
|
var key = parts[0]
|
|
var newState = (parts[1] === '1')
|
|
|
|
if (key === "caps") {
|
|
if (root.capsLockOn !== newState) {
|
|
root.capsLockOn = newState
|
|
root.capsLockChanged(newState)
|
|
Logger.i("LockKeysService", "Caps Lock:", capsLockOn)
|
|
}
|
|
} else if (key === "num") {
|
|
if (root.numLockOn !== newState) {
|
|
root.numLockOn = newState
|
|
root.numLockChanged(newState)
|
|
Logger.i("LockKeysService", "Num Lock:", numLockOn)
|
|
}
|
|
} else if (key === "scroll") {
|
|
if (root.scrollLockOn !== newState) {
|
|
root.scrollLockOn = newState
|
|
root.scrollLockChanged(newState)
|
|
Logger.i("LockKeysService", "Scroll Lock:", scrollLockOn)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
stderr: StdioCollector {
|
|
onStreamFinished: {
|
|
if (this.text.trim().length > 0)
|
|
Logger.i("LockKeysService", "Error running state check:", this.text.trim())
|
|
}
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
id: pollTimer
|
|
interval: 200
|
|
running: true
|
|
repeat: true
|
|
onTriggered: {
|
|
if (!stateCheckProcess.running) {
|
|
stateCheckProcess.running = true
|
|
}
|
|
}
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
Logger.i("LockKeysService", "Service started, performing initial state check.")
|
|
stateCheckProcess.running = true
|
|
}
|
|
}
|