diff options
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | config/BarConfig.qml | 1 | ||||
| -rw-r--r-- | config/Config.qml | 4 | ||||
| -rw-r--r-- | modules/bar/components/ActiveWindow.qml | 14 | ||||
| -rw-r--r-- | modules/controlcenter/taskbar/TaskbarPane.qml | 70 |
5 files changed, 73 insertions, 20 deletions
@@ -331,6 +331,10 @@ default, you must create it manually. } }, "bar": { + "activeWindow": { + "compact": false, + "inverted": false + }, "clock": { "showIcon": true }, diff --git a/config/BarConfig.qml b/config/BarConfig.qml index 62d6b17..6254d94 100644 --- a/config/BarConfig.qml +++ b/config/BarConfig.qml @@ -82,6 +82,7 @@ JsonObject { } component ActiveWindow: JsonObject { + property bool compact: false property bool inverted: false } diff --git a/config/Config.qml b/config/Config.qml index 07530fc..2a261e7 100644 --- a/config/Config.qml +++ b/config/Config.qml @@ -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, diff --git a/modules/bar/components/ActiveWindow.qml b/modules/bar/components/ActiveWindow.qml index 0c9b21e..b21c525 100644 --- a/modules/bar/components/ActiveWindow.qml +++ b/modules/bar/components/ActiveWindow.qml @@ -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 diff --git a/modules/controlcenter/taskbar/TaskbarPane.qml b/modules/controlcenter/taskbar/TaskbarPane.qml index 6c6b5e5..ba65c1e 100644 --- a/modules/controlcenter/taskbar/TaskbarPane.qml +++ b/modules/controlcenter/taskbar/TaskbarPane.qml @@ -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) + })) } } } |