summaryrefslogtreecommitdiff
path: root/services/Hypr.qml
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-24 14:14:30 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-24 14:14:30 +1000
commitd1e5f484461e27133317c78b81347d05dc3a2760 (patch)
tree7e84f152a66b69366d6abb67af63ec7306fca7bd /services/Hypr.qml
parent[CI] chore: update flake (diff)
downloadcaelestia-shell-d1e5f484461e27133317c78b81347d05dc3a2760.tar.gz
caelestia-shell-d1e5f484461e27133317c78b81347d05dc3a2760.tar.bz2
caelestia-shell-d1e5f484461e27133317c78b81347d05dc3a2760.zip
internal: rename Hyprland -> Hypr
Prevent shadowing Fixes window info not changing on switching to an empty workspace
Diffstat (limited to 'services/Hypr.qml')
-rw-r--r--services/Hypr.qml69
1 files changed, 69 insertions, 0 deletions
diff --git a/services/Hypr.qml b/services/Hypr.qml
new file mode 100644
index 0000000..0f31453
--- /dev/null
+++ b/services/Hypr.qml
@@ -0,0 +1,69 @@
+pragma Singleton
+
+import Quickshell
+import Quickshell.Hyprland
+import Quickshell.Io
+import QtQuick
+
+Singleton {
+ id: root
+
+ readonly property var toplevels: Hyprland.toplevels
+ readonly property var workspaces: Hyprland.workspaces
+ readonly property var monitors: Hyprland.monitors
+
+ readonly property HyprlandToplevel activeToplevel: {
+ const t = Hyprland.activeToplevel;
+ if (t?.workspace?.focused || t?.workspace?.name.startsWith("special:"))
+ return t;
+ return null;
+ }
+ readonly property HyprlandWorkspace focusedWorkspace: Hyprland.focusedWorkspace
+ readonly property HyprlandMonitor focusedMonitor: Hyprland.focusedMonitor
+
+ readonly property int activeWsId: focusedWorkspace?.id ?? 1
+ readonly property string kbLayout: kbLayoutFull.slice(0, 2).toLowerCase()
+ property string kbLayoutFull: "?"
+
+ function dispatch(request: string): void {
+ Hyprland.dispatch(request);
+ }
+
+ function monitorFor(screen: ShellScreen): HyprlandMonitor {
+ return Hyprland.monitorFor(screen);
+ }
+
+ Connections {
+ target: Hyprland
+
+ function onRawEvent(event: HyprlandEvent): void {
+ const n = event.name;
+ if (n.endsWith("v2"))
+ return;
+
+ if (n === "activelayout") {
+ root.kbLayoutFull = event.parse(2)[1];
+ } else if (["workspace", "moveworkspace", "activespecial", "focusedmon"].includes(n)) {
+ Hyprland.refreshWorkspaces();
+ Hyprland.refreshMonitors();
+ } else if (["openwindow", "closewindow", "movewindow"].includes(n)) {
+ Hyprland.refreshToplevels();
+ Hyprland.refreshWorkspaces();
+ } else if (n.includes("mon")) {
+ Hyprland.refreshMonitors();
+ } else if (n.includes("workspace")) {
+ Hyprland.refreshWorkspaces();
+ } else if (n.includes("window") || n.includes("group") || ["pin", "fullscreen", "changefloatingmode", "minimize"].includes(n)) {
+ Hyprland.refreshToplevels();
+ }
+ }
+ }
+
+ Process {
+ running: true
+ command: ["hyprctl", "-j", "devices"]
+ stdout: StdioCollector {
+ onStreamFinished: root.kbLayoutFull = JSON.parse(text).keyboards.find(k => k.main).active_keymap
+ }
+ }
+}