forked from Shinonome/dots-hyprland
61 lines
1.7 KiB
QML
61 lines
1.7 KiB
QML
pragma Singleton
|
|
|
|
import qs.modules.common
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Wayland
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
property list<var> apps: {
|
|
var map = new Map();
|
|
|
|
// Pinned apps
|
|
const pinnedApps = Config.options?.dock.pinnedApps ?? [];
|
|
for (const appId of pinnedApps) {
|
|
if (!map.has(appId.toLowerCase())) map.set(appId.toLowerCase(), ({
|
|
pinned: true,
|
|
toplevels: []
|
|
}));
|
|
}
|
|
|
|
// Separator
|
|
if (pinnedApps.length > 0) {
|
|
map.set("SEPARATOR", { pinned: false, toplevels: [] });
|
|
}
|
|
|
|
// Ignored apps
|
|
const ignoredRegexStrings = Config.options?.dock.ignoredAppRegexes ?? [];
|
|
const ignoredRegexes = ignoredRegexStrings.map(pattern => new RegExp(pattern, "i"));
|
|
// Open windows
|
|
for (const toplevel of ToplevelManager.toplevels.values) {
|
|
if (ignoredRegexes.some(re => re.test(toplevel.appId))) continue;
|
|
if (!map.has(toplevel.appId.toLowerCase())) map.set(toplevel.appId.toLowerCase(), ({
|
|
pinned: false,
|
|
toplevels: []
|
|
}));
|
|
map.get(toplevel.appId.toLowerCase()).toplevels.push(toplevel);
|
|
}
|
|
|
|
var values = [];
|
|
|
|
for (const [key, value] of map) {
|
|
values.push(appEntryComp.createObject(null, { appId: key, toplevels: value.toplevels, pinned: value.pinned }));
|
|
}
|
|
|
|
return values;
|
|
}
|
|
|
|
component TaskbarAppEntry: QtObject {
|
|
id: wrapper
|
|
required property string appId
|
|
required property list<var> toplevels
|
|
required property bool pinned
|
|
}
|
|
Component {
|
|
id: appEntryComp
|
|
TaskbarAppEntry {}
|
|
}
|
|
}
|