Made sure that context menu stays inside the screen area

This commit is contained in:
Slava Monich 2022-05-01 17:11:17 +03:00
parent 81cf5b6852
commit 23df9d05ee

View file

@ -25,6 +25,7 @@ import "../../js/functions.js" as Functions
AccordionItem { AccordionItem {
text: qsTr("Sessions") text: qsTr("Sessions")
property SilicaFlickable flickable: parent.flickable
Component { Component {
Column { Column {
id: activeSessionsItem id: activeSessionsItem
@ -63,11 +64,7 @@ AccordionItem {
SilicaListView { SilicaListView {
id: activeSessionsListView id: activeSessionsListView
width: parent.width width: parent.width
// one activeSessionListItem is about 1.52 times itemSizeLarge height: contentHeight
// show max 5 items at a time
height: Theme.itemSizeLarge * 1.5 * Math.min(5 , activeSessionsItem.activeSessions.length )
clip: true
model: activeSessionsItem.activeSessions model: activeSessionsItem.activeSessions
headerPositioning: ListView.OverlayHeader headerPositioning: ListView.OverlayHeader
header: Separator { header: Separator {
@ -82,6 +79,15 @@ AccordionItem {
menu: ContextMenu { menu: ContextMenu {
hasContent: !modelData.is_current hasContent: !modelData.is_current
onHeightChanged: {
if (parent && flickable) {
// Make sure we are inside the screen area
var bottom = parent.mapToItem(flickable, x, y).y + height
if (bottom > flickable.height) {
flickable.contentY += bottom - flickable.height
}
}
}
MenuItem { MenuItem {
onClicked: { onClicked: {
var sessionId = modelData.id; var sessionId = modelData.id;
@ -172,8 +178,6 @@ AccordionItem {
} }
} }
VerticalScrollDecorator {}
} }
} }
} }