Files
illogical-impulse/.config/quickshell/modules/dock/DockApps.qml
T
2025-05-29 09:22:31 +02:00

56 lines
1.8 KiB
QML

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
import QtQuick.Layouts
import Quickshell.Io
import Quickshell
import Quickshell.Widgets
import Quickshell.Wayland
import Quickshell.Hyprland
RowLayout {
readonly property list<var> windowList: HyprlandData.windowList
readonly property list<string> 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}`);
}
}
}
}