blob: d7e8e7c52d08657c74c663d314caaa70bd56bb27 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
import QtQuick
import qs.Services
import Quickshell
import Quickshell.Widgets
Item {
id: activeWindowDisplay
required property int maxWidth
property var activeWindow: {
let currWindowId = Array.from(NiriService.workspaces).find(ws => {
return ws.output === bar.screen.name && ws.is_active;
})?.active_window_id;
return currWindowId ? Array.from(NiriService.windows).find(win => win.id == currWindowId) : null;
}
property var windowEntry: activeWindow ? DesktopEntries.heuristicLookup(activeWindow.app_id) : null
anchors.verticalCenter: parent.verticalCenter
width: activeWindowDisplayContent.width
height: parent.height
Row {
id: activeWindowDisplayContent
width: childrenRect.width
height: parent.height
anchors.verticalCenter: parent.verticalCenter
spacing: 8
IconImage {
id: activeWindowIcon
height: 14
width: 14
anchors.verticalCenter: parent.verticalCenter
source: {
let icon = activeWindowDisplay.windowEntry?.icon
if (typeof icon === 'string' || icon instanceof String) {
if (icon.includes("?path=")) {
const split = icon.split("?path=")
if (split.length !== 2)
return icon
const name = split[0]
const path = split[1]
const fileName = name.substring(
name.lastIndexOf("/") + 1)
return `file://${path}/${fileName}`
} else
icon = Quickshell.iconPath(icon);
return icon
}
return ""
}
asynchronous: true
smooth: true
mipmap: true
}
Text {
id: windowTitle
width: Math.min(implicitWidth, activeWindowDisplay.maxWidth - activeWindowIcon.width - activeWindowDisplayContent.spacing)
property var appAliases: { "Firefox": "Mozilla Firefox", "mpv Media Player": "mpv", "Thunderbird": "Mozilla Thunderbird", "Thunderbird (LMU)": "Mozilla Thunderbird" }
elide: Text.ElideRight
maximumLineCount: 1
color: "white"
anchors.verticalCenter: parent.verticalCenter
text: {
if (!activeWindowDisplay.activeWindow)
return "";
var title = activeWindowDisplay.activeWindow.title;
var appName = activeWindowDisplay.windowEntry?.name;
if (appAliases[appName])
appName = appAliases[appName];
if (appName && title.endsWith(appName)) {
const oldTitle = title;
title = title.substring(0, title.length - appName.length);
title = title.replace(/\s*(—|-)\s*$/, "");
if (!title)
title = oldTitle;
}
return title;
}
}
}
}
|