aboutsummaryrefslogtreecommitdiffstats
path: root/config/quickshell/overview-backup/services/HyprlandData.qml
diff options
context:
space:
mode:
authorDon Williams <Don.e.williams@gmail.com>2026-07-11 20:50:52 -0400
committerPinapelz <yukais@pinapelz.com>2026-08-29 21:40:34 -0700
commit9dab91abe13fc6cf1c8e609f71131609ae9c64bb (patch)
treed848f7b3c180aba0ae1576d1f7ede0f951e63f11 /config/quickshell/overview-backup/services/HyprlandData.qml
parentcfdf5b2c2c24d312b2f2ff3da8eb73f9dced8dcf (diff)
Using previous version of overview config seems to work better
Signed-off-by: Don Williams <Don.e.williams@gmail.com> On branch development Your branch is up to date with 'origin/development'. Changes to be committed: new file: overview-backup/README.md renamed: overview/assets/Workspace_Wallpaper.png -> overview-backup/assets/Workspace_Wallpaper.png new file: overview-backup/assets/image.png new file: overview-backup/common/Appearance.qml new file: overview-backup/common/Config.qml new file: overview-backup/common/functions/ColorUtils.qml new file: overview-backup/common/functions/qmldir new file: overview-backup/common/qmldir renamed: overview/common/widgets/RectangularShadow.qml -> overview-backup/common/widgets/RectangularShadow.qml new file: overview-backup/common/widgets/StyledRectangularShadow.qml new file: overview-backup/common/widgets/StyledText.qml new file: overview-backup/common/widgets/StyledToolTip.qml new file: overview-backup/common/widgets/StyledToolTipContent.qml new file: overview-backup/common/widgets/qmldir renamed: overview/config.example.json -> overview-backup/config.example.json renamed: overview/config.json -> overview-backup/config.json new file: overview-backup/modules/overview/Overview.qml new file: overview-backup/modules/overview/OverviewWidget.qml new file: overview-backup/modules/overview/OverviewWindow.qml new file: overview-backup/modules/overview/qmldir renamed: overview/quickshell-overview.qml -> overview-backup/quickshell-overview.qml new file: overview-backup/services/GlobalStates.qml new file: overview-backup/services/HyprlandData.qml new file: overview-backup/services/qmldir new file: overview-backup/shell.qml modified: overview/README.md modified: overview/assets/image.png modified: overview/common/Appearance.qml modified: overview/common/Config.qml modified: overview/common/widgets/StyledRectangularShadow.qml modified: overview/common/widgets/qmldir modified: overview/modules/overview/Overview.qml modified: overview/modules/overview/OverviewWidget.qml modified: overview/modules/overview/OverviewWindow.qml modified: overview/services/HyprlandData.qml modified: overview/shell.qml
Diffstat (limited to 'config/quickshell/overview-backup/services/HyprlandData.qml')
-rw-r--r--config/quickshell/overview-backup/services/HyprlandData.qml209
1 files changed, 209 insertions, 0 deletions
diff --git a/config/quickshell/overview-backup/services/HyprlandData.qml b/config/quickshell/overview-backup/services/HyprlandData.qml
new file mode 100644
index 00000000..6127e989
--- /dev/null
+++ b/config/quickshell/overview-backup/services/HyprlandData.qml
@@ -0,0 +1,209 @@
+pragma Singleton
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import Quickshell
+import Quickshell.Io
+import Quickshell.Hyprland
+import "../common"
+
+/**
+ * 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 workspaces: []
+ property var allWorkspaces: []
+ property var workspaceIds: []
+ property var workspaceById: ({})
+ property var activeWorkspace: null
+ property var monitors: []
+ property var layers: ({})
+ property bool pendingWindowsUpdate: false
+ property bool pendingMonitorsUpdate: false
+ property bool pendingLayersUpdate: false
+ property bool pendingWorkspacesUpdate: false
+ property bool pendingActiveWorkspaceUpdate: false
+
+ function updateWindowList() {
+ getClients.running = true;
+ }
+
+ function updateLayers() {
+ getLayers.running = true;
+ }
+
+ function updateMonitors() {
+ getMonitors.running = true;
+ }
+
+ function updateWorkspaces() {
+ getWorkspaces.running = true;
+ getActiveWorkspace.running = true;
+ }
+
+ function updateAll() {
+ scheduleUpdates(true, true, true, true, true);
+ }
+
+ function scheduleUpdates(windows, monitors, layers, workspaces, activeWorkspace) {
+ pendingWindowsUpdate = pendingWindowsUpdate || !!windows;
+ pendingMonitorsUpdate = pendingMonitorsUpdate || !!monitors;
+ pendingLayersUpdate = pendingLayersUpdate || !!layers;
+ pendingWorkspacesUpdate = pendingWorkspacesUpdate || !!workspaces;
+ pendingActiveWorkspaceUpdate = pendingActiveWorkspaceUpdate || !!activeWorkspace;
+
+ const debounceMs = Math.max(0, Config.options.hacks.hyprlandEventDebounceMs);
+ if (debounceMs === 0) {
+ flushPendingUpdates();
+ } else {
+ eventDebounceTimer.interval = debounceMs;
+ eventDebounceTimer.restart();
+ }
+ }
+
+ function flushPendingUpdates() {
+ if (pendingWindowsUpdate) {
+ pendingWindowsUpdate = false;
+ updateWindowList();
+ }
+ if (pendingMonitorsUpdate) {
+ pendingMonitorsUpdate = false;
+ updateMonitors();
+ }
+ if (pendingLayersUpdate) {
+ pendingLayersUpdate = false;
+ updateLayers();
+ }
+ if (pendingWorkspacesUpdate) {
+ pendingWorkspacesUpdate = false;
+ getWorkspaces.running = true;
+ }
+ if (pendingActiveWorkspaceUpdate) {
+ pendingActiveWorkspaceUpdate = false;
+ getActiveWorkspace.running = true;
+ }
+ }
+
+ function biggestWindowForWorkspace(workspaceId) {
+ const windowsInThisWorkspace = HyprlandData.windowList.filter(w => w.workspace.id == workspaceId);
+ return windowsInThisWorkspace.reduce((maxWin, win) => {
+ const maxArea = (maxWin?.size?.[0] ?? 0) * (maxWin?.size?.[1] ?? 0);
+ const winArea = (win?.size?.[0] ?? 0) * (win?.size?.[1] ?? 0);
+ return winArea > maxArea ? win : maxWin;
+ }, null);
+ }
+
+ Component.onCompleted: {
+ scheduleUpdates(true, true, true, true, true);
+ flushPendingUpdates();
+ }
+
+ Connections {
+ target: Hyprland
+
+ function onRawEvent(event) {
+ const eventName = `${event?.name ?? event?.event ?? event?.type ?? ""}`;
+ if (["openlayer", "closelayer", "screencast"].includes(eventName))
+ return;
+
+ if (eventName === "openwindow" || eventName === "closewindow" || eventName === "movewindow" || eventName === "movewindowv2" || eventName === "windowtitle") {
+ scheduleUpdates(true, false, false, true, false);
+ return;
+ }
+
+ if (eventName === "workspace" || eventName === "workspacev2" || eventName === "focusedmon" || eventName === "focusedmonv2" || eventName === "activewindow" || eventName === "activewindowv2") {
+ scheduleUpdates(false, false, false, true, true);
+ return;
+ }
+
+ if (eventName.startsWith("monitor") || eventName === "configreloaded") {
+ scheduleUpdates(true, true, false, true, true);
+ return;
+ }
+
+ scheduleUpdates(true, true, true, true, true);
+ }
+ }
+
+ Timer {
+ id: eventDebounceTimer
+ interval: Math.max(0, Config.options.hacks.hyprlandEventDebounceMs)
+ repeat: false
+ onTriggered: root.flushPendingUpdates()
+ }
+
+ Process {
+ id: getClients
+ command: ["hyprctl", "clients", "-j"]
+ stdout: StdioCollector {
+ id: clientsCollector
+ onStreamFinished: {
+ root.windowList = JSON.parse(clientsCollector.text);
+ 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: ["hyprctl", "monitors", "-j"]
+ stdout: StdioCollector {
+ id: monitorsCollector
+ onStreamFinished: {
+ root.monitors = JSON.parse(monitorsCollector.text);
+ }
+ }
+ }
+
+ Process {
+ id: getLayers
+ command: ["hyprctl", "layers", "-j"]
+ stdout: StdioCollector {
+ id: layersCollector
+ onStreamFinished: {
+ root.layers = JSON.parse(layersCollector.text);
+ }
+ }
+ }
+
+ Process {
+ id: getWorkspaces
+ command: ["hyprctl", "workspaces", "-j"]
+ stdout: StdioCollector {
+ id: workspacesCollector
+ onStreamFinished: {
+ const rawWorkspaces = JSON.parse(workspacesCollector.text);
+ root.allWorkspaces = rawWorkspaces;
+ root.workspaces = rawWorkspaces.filter(ws => ws.id >= 1 && ws.id <= 100);
+ let tempWorkspaceById = {};
+ for (var i = 0; i < root.workspaces.length; ++i) {
+ var ws = root.workspaces[i];
+ tempWorkspaceById[ws.id] = ws;
+ }
+ root.workspaceById = tempWorkspaceById;
+ root.workspaceIds = root.workspaces.map(ws => ws.id);
+ }
+ }
+ }
+
+ Process {
+ id: getActiveWorkspace
+ command: ["hyprctl", "activeworkspace", "-j"]
+ stdout: StdioCollector {
+ id: activeWorkspaceCollector
+ onStreamFinished: {
+ root.activeWorkspace = JSON.parse(activeWorkspaceCollector.text);
+ }
+ }
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage