From c58c3d2174ee3c363d8df8a096b2e946bca67c49 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 29 May 2025 09:22:31 +0200 Subject: [PATCH] dock: apps --- .config/quickshell/modules/dock/DockApps.qml | 41 +++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/.config/quickshell/modules/dock/DockApps.qml b/.config/quickshell/modules/dock/DockApps.qml index 5dbddfac..1383f41f 100644 --- a/.config/quickshell/modules/dock/DockApps.qml +++ b/.config/quickshell/modules/dock/DockApps.qml @@ -2,6 +2,7 @@ import "root:/" import "root:/services" import "root:/modules/common" import "root:/modules/common/widgets" +import "root:/modules/common/functions/icons.js" as Icons import QtQuick import QtQuick.Controls import QtQuick.Effects @@ -13,5 +14,43 @@ import Quickshell.Wayland import Quickshell.Hyprland RowLayout { - + readonly property list windowList: HyprlandData.windowList + readonly property list apps: { + let uniqueClasses = new Set() + for (let window of windowList) { + if (window.class && window.class.trim() !== "") { + uniqueClasses.add(window.class) + } + } + return Array.from(uniqueClasses) + } + readonly property var windowsByApp: { + let grouped = {} + for (let window of windowList) { + if (window.class && window.class.trim() !== "") { + if (!grouped[window.class]) { + grouped[window.class] = [] + } + grouped[window.class].push(window) + } + } + return grouped + } + + Repeater { + model: apps + delegate: DockButton { + required property string modelData + property int lastFocusedIndex: -1 + contentItem: IconImage { + source: Quickshell.iconPath(Icons.noKnowledgeIconGuess(modelData), "image-missing") + } + onClicked: () => { + lastFocusedIndex = (lastFocusedIndex + 1) % windowsByApp[modelData].length + const targetWindow = windowsByApp[modelData][lastFocusedIndex]; + const targetAddress = targetWindow.address; + Hyprland.dispatch(`focuswindow address:${targetAddress}`); + } + } + } } \ No newline at end of file