From 1508abd3e13fe30bd90bc11d80b52aa8d8d4596e Mon Sep 17 00:00:00 2001 From: Robin Seger Date: Sun, 15 Mar 2026 07:34:52 +0100 Subject: workspaces: window icons limit (#1267) * workspace window icons display limit * serialization --- .../components/workspaces/SpecialWorkspaces.qml | 6 +++- modules/bar/components/workspaces/Workspace.qml | 6 +++- modules/controlcenter/taskbar/TaskbarPane.qml | 37 ++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) (limited to 'modules') diff --git a/modules/bar/components/workspaces/SpecialWorkspaces.qml b/modules/bar/components/workspaces/SpecialWorkspaces.qml index ad85af8..cd3572b 100644 --- a/modules/bar/components/workspaces/SpecialWorkspaces.qml +++ b/modules/bar/components/workspaces/SpecialWorkspaces.qml @@ -224,7 +224,11 @@ Item { Repeater { model: ScriptModel { - values: Hypr.toplevels.values.filter(c => c.workspace?.id === ws.wsId) + values: { + const windows = Hypr.toplevels.values.filter(c => c.workspace?.id === ws.wsId); + const maxIcons = Config.bar.workspaces.maxWindowIcons; + return maxIcons > 0 ? windows.slice(0, maxIcons) : windows; + } } MaterialIcon { diff --git a/modules/bar/components/workspaces/Workspace.qml b/modules/bar/components/workspaces/Workspace.qml index 3c8238b..f6e767e 100644 --- a/modules/bar/components/workspaces/Workspace.qml +++ b/modules/bar/components/workspaces/Workspace.qml @@ -87,7 +87,11 @@ ColumnLayout { Repeater { model: ScriptModel { - values: Hypr.toplevels.values.filter(c => c.workspace?.id === root.ws) + values: { + const windows = Hypr.toplevels.values.filter(c => c.workspace?.id === root.ws); + const maxIcons = Config.bar.workspaces.maxWindowIcons; + return maxIcons > 0 ? windows.slice(0, maxIcons) : windows; + } } MaterialIcon { diff --git a/modules/controlcenter/taskbar/TaskbarPane.qml b/modules/controlcenter/taskbar/TaskbarPane.qml index d12d174..9c999e5 100644 --- a/modules/controlcenter/taskbar/TaskbarPane.qml +++ b/modules/controlcenter/taskbar/TaskbarPane.qml @@ -38,6 +38,7 @@ Item { property bool workspacesActiveIndicator: Config.bar.workspaces.activeIndicator ?? true property bool workspacesOccupiedBg: Config.bar.workspaces.occupiedBg ?? false property bool workspacesShowWindows: Config.bar.workspaces.showWindows ?? false + property int workspacesMaxWindowIcons: Config.bar.workspaces.maxWindowIcons ?? 0 property bool workspacesPerMonitor: Config.bar.workspaces.perMonitorWorkspaces ?? true property bool scrollWorkspaces: Config.bar.scrollActions.workspaces ?? true property bool scrollVolume: Config.bar.scrollActions.volume ?? true @@ -81,6 +82,7 @@ Item { Config.bar.workspaces.activeIndicator = root.workspacesActiveIndicator; Config.bar.workspaces.occupiedBg = root.workspacesOccupiedBg; Config.bar.workspaces.showWindows = root.workspacesShowWindows; + Config.bar.workspaces.maxWindowIcons = root.workspacesMaxWindowIcons; Config.bar.workspaces.perMonitorWorkspaces = root.workspacesPerMonitor; Config.bar.scrollActions.workspaces = root.scrollWorkspaces; Config.bar.scrollActions.volume = root.scrollVolume; @@ -402,6 +404,41 @@ Item { } } + StyledRect { + Layout.fillWidth: true + implicitHeight: workspacesMaxWindowIconsRow.implicitHeight + Appearance.padding.large * 2 + radius: Appearance.rounding.normal + color: Colours.layer(Colours.palette.m3surfaceContainer, 2) + + Behavior on implicitHeight { + Anim {} + } + + RowLayout { + id: workspacesMaxWindowIconsRow + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.margins: Appearance.padding.large + spacing: Appearance.spacing.normal + + StyledText { + Layout.fillWidth: true + text: qsTr("Max window icons") + } + + CustomSpinBox { + min: 0 + max: 20 + value: root.workspacesMaxWindowIcons + onValueModified: value => { + root.workspacesMaxWindowIcons = value; + root.saveConfig(); + } + } + } + } + StyledRect { Layout.fillWidth: true implicitHeight: workspacesPerMonitorRow.implicitHeight + Appearance.padding.large * 2 -- cgit v1.2.3-freya