Fix action drawer toolButtons ref and page indicator sync

NotificationDrawer referenced toolButtons, a sibling defined in
ContentContainer, not a local property. Add toolButtonsItem: Item
and wire it at the call site. Replace the magic literal 10 with
Kirigami.Units.largeSpacing while here.

The PageIndicator had a one-way binding to swipeView.currentIndex
that would break after a user tap. Make it bidirectional with a
Connections block and a loop guard on both sides.
This commit is contained in:
Marco Allegretti 2026-04-18 19:04:49 +02:00
parent 2059f14faf
commit 9b94c200ee
3 changed files with 19 additions and 2 deletions

View file

@ -186,6 +186,7 @@ Item {
// In convergence, cap the height so it doesn't stretch full-screen // In convergence, cap the height so it doesn't stretch full-screen
maximumHeight: isConvergence ? root.height * 0.6 : -1 maximumHeight: isConvergence ? root.height * 0.6 : -1
toolButtonsItem: toolButtons
} }
// Secondary swipe area for uses in portrait. // Secondary swipe area for uses in portrait.

View file

@ -25,6 +25,9 @@ Item {
property alias notificationWidget: notificationWidget property alias notificationWidget: notificationWidget
property real contentY: notificationWidget.listView.contentY property real contentY: notificationWidget.listView.contentY
// The sibling toolbar whose height must be subtracted from the available space.
property Item toolButtonsItem: null
property real topPadding: { property real topPadding: {
if (actionDrawer.mode == MobileShell.ActionDrawer.Portrait) if (actionDrawer.mode == MobileShell.ActionDrawer.Portrait)
return Kirigami.Units.largeSpacing; return Kirigami.Units.largeSpacing;
@ -42,7 +45,8 @@ Item {
property real maximumHeight: -1 property real maximumHeight: -1
height: { height: {
let h = Math.min(actionDrawer.height - toolButtons.height, notificationWidget.listView.contentHeight + 10 + topMargin); let toolH = toolButtonsItem ? toolButtonsItem.height : 0;
let h = Math.min(actionDrawer.height - toolH, notificationWidget.listView.contentHeight + Kirigami.Units.largeSpacing + topMargin);
return maximumHeight > 0 ? Math.min(h, maximumHeight) : h; return maximumHeight > 0 ? Math.min(h, maximumHeight) : h;
} }

View file

@ -241,10 +241,22 @@ Item {
asynchronous: true asynchronous: true
sourceComponent: PageIndicator { sourceComponent: PageIndicator {
id: pageIndicatorItem
count: swipeView.count count: swipeView.count
currentIndex: swipeView.currentIndex currentIndex: swipeView.currentIndex
interactive: true interactive: true
onCurrentIndexChanged: swipeView.currentIndex = currentIndex onCurrentIndexChanged: {
if (swipeView.currentIndex !== currentIndex)
swipeView.currentIndex = currentIndex;
}
Connections {
target: swipeView
function onCurrentIndexChanged() {
if (pageIndicatorItem.currentIndex !== swipeView.currentIndex)
pageIndicatorItem.currentIndex = swipeView.currentIndex;
}
}
delegate: Rectangle { delegate: Rectangle {
implicitWidth: 8 implicitWidth: 8