bar/activewindow: add compact option (#1201)

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
This commit is contained in:
Ezekiel Gonzales 2026-03-15 15:55:55 +08:00 committed by GitHub
parent 0903a6a84b
commit b68f0bae14
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 73 additions and 20 deletions

View file

@ -331,6 +331,10 @@ default, you must create it manually.
}
},
"bar": {
"activeWindow": {
"compact": false,
"inverted": false
},
"clock": {
"showIcon": true
},

View file

@ -82,6 +82,7 @@ JsonObject {
}
component ActiveWindow: JsonObject {
property bool compact: false
property bool inverted: false
}

View file

@ -178,6 +178,10 @@ Singleton {
capitalisation: bar.workspaces.capitalisation,
specialWorkspaceIcons: bar.workspaces.specialWorkspaceIcons
},
activeWindow: {
compact: bar.activeWindow.compact,
inverted: bar.activeWindow.inverted
},
tray: {
background: bar.tray.background,
recolour: bar.tray.recolour,

View file

@ -13,6 +13,18 @@ Item {
required property Brightness.Monitor monitor
property color colour: Colours.palette.m3primary
readonly property string windowTitle: Hypr.activeToplevel?.title ?? qsTr("Desktop")
function getCompactName() {
if (!root.windowTitle || root.windowTitle === qsTr("Desktop"))
return qsTr("Desktop");
// " - " (standard hyphen), " " (em dash), " " (en dash)
const parts = root.windowTitle.split(/\s+[\-\u2013\u2014]\s+/);
if (parts.length > 1)
return parts[parts.length - 1].trim();
return root.windowTitle;
}
readonly property int maxHeight: {
const otherModules = bar.children.filter(c => c.id && c.item !== this && c.id !== "spacer");
const otherHeight = otherModules.reduce((acc, curr) => acc + (curr.item.nonAnimHeight ?? curr.height), 0);
@ -46,7 +58,7 @@ Item {
TextMetrics {
id: metrics
text: Hypr.activeToplevel?.title ?? qsTr("Desktop")
text: Config.bar.activeWindow.compact ? root.getCompactName() : root.windowTitle
font.pointSize: Appearance.font.size.smaller
font.family: Appearance.font.family.mono
elide: Qt.ElideRight

View file

@ -19,6 +19,8 @@ Item {
required property Session session
property bool activeWindowCompact: Config.bar.activeWindow.compact ?? false
property bool activeWindowInverted: Config.bar.activeWindow.inverted ?? false
property bool clockShowIcon: Config.bar.clock.showIcon ?? true
property bool persistent: Config.bar.persistent ?? true
property bool showOnHover: Config.bar.showOnHover ?? true
@ -65,6 +67,8 @@ Item {
}
function saveConfig(entryIndex, entryEnabled) {
Config.bar.activeWindow.compact = root.activeWindowCompact;
Config.bar.activeWindow.inverted = root.activeWindowInverted;
Config.bar.clock.showIcon = root.clockShowIcon;
Config.bar.persistent = root.persistent;
Config.bar.showOnHover = root.showOnHover;
@ -595,6 +599,34 @@ Item {
}
}
}
SectionContainer {
Layout.fillWidth: true
alignTop: true
StyledText {
text: qsTr("Active window")
font.pointSize: Appearance.font.size.normal
}
SwitchRow {
label: qsTr("Compact")
checked: root.activeWindowCompact
onToggled: checked => {
root.activeWindowCompact = checked;
root.saveConfig();
}
}
SwitchRow {
label: qsTr("Inverted")
checked: root.activeWindowInverted
onToggled: checked => {
root.activeWindowInverted = checked;
root.saveConfig();
}
}
}
}
ColumnLayout {
@ -696,25 +728,25 @@ Item {
rows: Math.ceil(root.monitorNames.length / 3)
options: root.monitorNames.map(e => ({
label: qsTr(e),
propertyName: `monitor${e}`,
onToggled: function (_) {
// if the given monitor is in the excluded list, it should be added back
let addedBack = excludedScreens.includes(e)
if (addedBack) {
const index = excludedScreens.indexOf(e);
if (index !== -1) {
excludedScreens.splice(index, 1);
}
} else {
if (!excludedScreens.includes(e)) {
excludedScreens.push(e);
}
}
root.saveConfig();
},
state: !Strings.testRegexList(root.excludedScreens, e)
}))
label: qsTr(e),
propertyName: `monitor${e}`,
onToggled: function (_) {
// if the given monitor is in the excluded list, it should be added back
let addedBack = excludedScreens.includes(e);
if (addedBack) {
const index = excludedScreens.indexOf(e);
if (index !== -1) {
excludedScreens.splice(index, 1);
}
} else {
if (!excludedScreens.includes(e)) {
excludedScreens.push(e);
}
}
root.saveConfig();
},
state: !Strings.testRegexList(root.excludedScreens, e)
}))
}
}
}