Fix binding loop in roomlist

This commit is contained in:
Nicolas Werner 2023-06-09 20:14:41 +02:00
parent 805f0a3032
commit 2d7c007eb2
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
2 changed files with 41 additions and 33 deletions

View file

@ -546,66 +546,73 @@ Page {
visible: !collapsed visible: !collapsed
width: roomItem.width - avatar.width width: roomItem.width - avatar.width
NotificationBubble { Item {
id: notificationBubble
Layout.alignment: Qt.AlignRight
Layout.leftMargin: Nheko.paddingSmall
Layout.preferredHeight: implicitHeight
Layout.preferredWidth: implicitWidth
bubbleBackgroundColor: roomItem.bubbleBackground
bubbleTextColor: roomItem.bubbleText
hasLoudNotification: roomItem.hasLoudNotification
mayBeVisible: !collapsed && (isSpace ? Settings.spaceNotifications : true)
notificationCount: roomItem.notificationCount
parent: isSpace ? titleRow : subtextRow
}
RowLayout {
id: titleRow id: titleRow
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
Layout.preferredWidth: roomItem.width - avatar.width
spacing: Nheko.paddingSmall
Item {
Layout.alignment: Qt.AlignBottom
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: subtitleText.implicitHeight
ElidedLabel { ElidedLabel {
anchors.bottom: parent.bottom id: titleText
anchors.left: parent.left
color: roomItem.importantText color: roomItem.importantText
elideWidth: parent.width elideWidth: parent.width - (timestamp.visible ? timestamp.implicitWidth : 0) - (spaceNotificationBubble.visible ? spaceNotificationBubble.implicitWidth : 0)
fullText: TimelineManager.htmlEscape(roomName) fullText: TimelineManager.htmlEscape(roomName)
textFormat: Text.RichText textFormat: Text.RichText
} }
}
Label { Label {
id: timestamp id: timestamp
Layout.alignment: Qt.AlignRight | Qt.AlignBottom anchors.baseline: titleText.baseline
anchors.right: parent.right
color: roomItem.unimportantText color: roomItem.unimportantText
font.pixelSize: fontMetrics.font.pixelSize * 0.9 font.pixelSize: fontMetrics.font.pixelSize * 0.9
text: time text: time
visible: !isInvite && !isSpace visible: !isInvite && !isSpace
} }
NotificationBubble {
id: spaceNotificationBubble
anchors.right: parent.right
bubbleBackgroundColor: roomItem.bubbleBackground
bubbleTextColor: roomItem.bubbleText
hasLoudNotification: roomItem.hasLoudNotification
mayBeVisible: !collapsed && (isSpace ? Settings.spaceNotifications : false)
notificationCount: roomItem.notificationCount
parent: isSpace ? titleRow : subtextRow
} }
RowLayout { }
Item {
id: subtextRow id: subtextRow
Layout.alignment: Qt.AlignBottom Layout.alignment: Qt.AlignBottom
Layout.fillWidth: true Layout.fillWidth: true
height: visible ? 0 : undefined Layout.preferredHeight: subtitleText.implicitHeight
spacing: 0
visible: !isSpace visible: !isSpace
ElidedLabel { ElidedLabel {
Layout.fillWidth: true id: subtitleText
anchors.left: parent.left
color: roomItem.unimportantText color: roomItem.unimportantText
elideWidth: width elideWidth: subtextRow.width - (subtextNotificationBubble.visible ? subtextNotificationBubble.implicitWidth : 0)
font.pixelSize: fontMetrics.font.pixelSize * 0.9 font.pixelSize: fontMetrics.font.pixelSize * 0.9
fullText: TimelineManager.htmlEscape(lastMessage) fullText: TimelineManager.htmlEscape(lastMessage)
textFormat: Text.RichText textFormat: Text.RichText
} }
NotificationBubble {
id: subtextNotificationBubble
anchors.baseline: subtitleText.baseline
anchors.right: parent.right
bubbleBackgroundColor: roomItem.bubbleBackground
bubbleTextColor: roomItem.bubbleText
hasLoudNotification: roomItem.hasLoudNotification
mayBeVisible: !collapsed
notificationCount: roomItem.notificationCount
}
} }
} }
} }

View file

@ -15,6 +15,7 @@ Rectangle {
required property color bubbleTextColor required property color bubbleTextColor
property bool mayBeVisible: true property bool mayBeVisible: true
property alias font: notificationBubbleText.font property alias font: notificationBubbleText.font
baselineOffset: notificationBubbleText.baseline - bubbleRoot.top
visible: mayBeVisible && notificationCount > 0 visible: mayBeVisible && notificationCount > 0
implicitHeight: notificationBubbleText.height + Nheko.paddingMedium implicitHeight: notificationBubbleText.height + Nheko.paddingMedium