forked from Shinonome/dots-hyprland
dock: apps
This commit is contained in:
@@ -2,6 +2,7 @@ import "root:/"
|
|||||||
import "root:/services"
|
import "root:/services"
|
||||||
import "root:/modules/common"
|
import "root:/modules/common"
|
||||||
import "root:/modules/common/widgets"
|
import "root:/modules/common/widgets"
|
||||||
|
import "root:/modules/common/functions/icons.js" as Icons
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import QtQuick.Effects
|
import QtQuick.Effects
|
||||||
@@ -13,5 +14,43 @@ import Quickshell.Wayland
|
|||||||
import Quickshell.Hyprland
|
import Quickshell.Hyprland
|
||||||
|
|
||||||
RowLayout {
|
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}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user