bar: add kb layout status icon

Closes #280
This commit is contained in:
2 * r + 2 * t 2025-07-27 22:59:45 +10:00
parent 71ce357d63
commit a3ca244c15
3 changed files with 31 additions and 1 deletions

View file

@ -22,6 +22,7 @@ JsonObject {
component Status: JsonObject {
property bool showAudio: false
property bool showKbLayout: false
property bool showNetwork: true
property bool showBluetooth: true
property bool showBattery: true

View file

@ -63,6 +63,23 @@ Item {
}
}
// Keyboard layout icon
Loader {
id: kbLayout
Layout.alignment: Qt.AlignHCenter
asynchronous: true
active: Config.bar.status.showKbLayout
visible: active
sourceComponent: StyledText {
animate: true
text: Hyprland.kbLayout
color: root.colour
font.family: Appearance.font.family.mono
}
}
// Network icon
Loader {
id: networkIcon

View file

@ -2,6 +2,7 @@ pragma Singleton
import Quickshell
import Quickshell.Hyprland
import Quickshell.Io
import QtQuick
Singleton {
@ -14,6 +15,7 @@ Singleton {
readonly property HyprlandWorkspace focusedWorkspace: Hyprland.focusedWorkspace
readonly property HyprlandMonitor focusedMonitor: Hyprland.focusedMonitor
readonly property int activeWsId: focusedWorkspace?.id ?? 1
property string kbLayout: "?"
function dispatch(request: string): void {
Hyprland.dispatch(request);
@ -27,7 +29,9 @@ Singleton {
if (n.endsWith("v2"))
return;
if (["workspace", "moveworkspace", "activespecial", "focusedmon"].includes(n)) {
if (n === "activelayout") {
root.kbLayout = event.parse(2)[1];
} else if (["workspace", "moveworkspace", "activespecial", "focusedmon"].includes(n)) {
Hyprland.refreshWorkspaces();
Hyprland.refreshMonitors();
} else if (["openwindow", "closewindow", "movewindow"].includes(n)) {
@ -42,4 +46,12 @@ Singleton {
}
}
}
Process {
running: true
command: ["hyprctl", "-j", "devices"]
stdout: StdioCollector {
onStreamFinished: root.kbLayout = JSON.parse(text).keyboards.find(k => k.main).layout
}
}
}