fix(shell): scroll long tray menus

This commit is contained in:
Carlos Armando
2026-07-22 18:49:18 -07:00
parent e294d8278f
commit be71149500
2 changed files with 117 additions and 98 deletions
+15 -1
View File
@@ -1,5 +1,6 @@
import Quickshell import Quickshell
import QtQuick import QtQuick
import QtQuick.Controls
import QtQuick.Effects import QtQuick.Effects
import Quickshell.Services.SystemTray import Quickshell.Services.SystemTray
import qs.Commons import qs.Commons
@@ -446,9 +447,21 @@ BarWidget {
contentWidth: trayMenuPopup.fittedContentWidth(Style.space(232)) contentWidth: trayMenuPopup.fittedContentWidth(Style.space(232))
contentHeight: trayMenuPopup.fittedContentHeight(trayMenuColumn.implicitHeight, Style.space(420)) contentHeight: trayMenuPopup.fittedContentHeight(trayMenuColumn.implicitHeight, Style.space(420))
Flickable {
id: trayMenuFlick
anchors.fill: parent
contentWidth: width
contentHeight: trayMenuColumn.implicitHeight
clip: true
boundsBehavior: Flickable.StopAtBounds
flickableDirection: Flickable.VerticalFlick
interactive: contentHeight > height
ScrollBar.vertical: ScrollBar { policy: ScrollBar.AsNeeded }
Column { Column {
id: trayMenuColumn id: trayMenuColumn
anchors.fill: parent width: trayMenuFlick.width
spacing: 0 spacing: 0
Repeater { Repeater {
@@ -563,6 +576,7 @@ BarWidget {
} }
} }
} }
}
// Renders a tray icon, recoloring symbolic icons to the bar foreground so // Renders a tray icon, recoloring symbolic icons to the bar foreground so
// they stay visible on any theme (a raw symbolic icon keeps its baked-in // they stay visible on any theme (a raw symbolic icon keeps its baked-in
+5
View File
@@ -4,6 +4,11 @@ set -euo pipefail
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
if ! perl -0ne 'exit(/id:\s*trayMenuPopup.*?Flickable\s*\{.*?contentHeight:\s*trayMenuColumn\.implicitHeight.*?ScrollBar\.vertical:\s*ScrollBar/s ? 0 : 1)' "$ROOT/shell/plugins/bar/widgets/Tray.qml"; then
fail "tray menu keeps capped content scrollable"
fi
pass "tray menu keeps capped content scrollable"
run_node_test "tray model helpers" <<'JS' run_node_test "tray model helpers" <<'JS'
const tray = requireFromRoot('shell/plugins/bar/widgets/TrayModel.js') const tray = requireFromRoot('shell/plugins/bar/widgets/TrayModel.js')