diff options
| author | Ja.KooLit <85185940+JaKooLit@users.noreply.github.com> | 2025-07-15 19:48:59 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-15 19:48:59 +0900 |
| commit | 30f73308e232b49cfb30dc8015b315ea24e6b80c (patch) | |
| tree | 69e8b1f219b2638d3119c70aea870730d7dae105 /config/quickshell/services/HyprlandData.qml | |
| parent | ccc57814f5b72f5481d5ea7fe4de4958dc80f553 (diff) | |
| parent | d3a59bcfac1f24b0f44e4bc798a59ac494bfedeb (diff) | |
Merge pull request #762 from JaKooLit/dev-quickshell
Merging Dev-quickshell to development
Diffstat (limited to 'config/quickshell/services/HyprlandData.qml')
| -rw-r--r-- | config/quickshell/services/HyprlandData.qml | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/config/quickshell/services/HyprlandData.qml b/config/quickshell/services/HyprlandData.qml new file mode 100644 index 00000000..2b88ad9c --- /dev/null +++ b/config/quickshell/services/HyprlandData.qml @@ -0,0 +1,69 @@ +pragma Singleton +pragma ComponentBehavior: Bound + +import QtQuick +import Quickshell +import Quickshell.Io +import Quickshell.Wayland +import Quickshell.Hyprland + +/** + * Provides access to some Hyprland data not available in Quickshell.Hyprland. + */ +Singleton { + id: root + property var windowList: [] + property var addresses: [] + property var windowByAddress: ({}) + property var monitors: [] + + function updateWindowList() { + getClients.running = true + getMonitors.running = true + } + + Component.onCompleted: { + updateWindowList() + } + + Connections { + target: Hyprland + + function onRawEvent(event) { + // Filter out redundant old v1 events for the same thing + if(event.name in [ + "activewindow", "focusedmon", "monitoradded", + "createworkspace", "destroyworkspace", "moveworkspace", + "activespecial", "movewindow", "windowtitle" + ]) return ; + updateWindowList() + } + } + + Process { + id: getClients + command: ["bash", "-c", "hyprctl clients -j | jq -c"] + stdout: SplitParser { + onRead: (data) => { + root.windowList = JSON.parse(data) + let tempWinByAddress = {} + for (var i = 0; i < root.windowList.length; ++i) { + var win = root.windowList[i] + tempWinByAddress[win.address] = win + } + root.windowByAddress = tempWinByAddress + root.addresses = root.windowList.map((win) => win.address) + } + } + } + Process { + id: getMonitors + command: ["bash", "-c", "hyprctl monitors -j | jq -c"] + stdout: SplitParser { + onRead: (data) => { + root.monitors = JSON.parse(data) + } + } + } +} + |
