From 2d7c007eb2cab03f0a5860eba40bd640b05cd94a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 9 Jun 2023 20:14:41 +0200 Subject: [PATCH] Fix binding loop in roomlist --- resources/qml/RoomList.qml | 73 ++++++++++--------- .../qml/components/NotificationBubble.qml | 1 + 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index ac4f8c3a..615c67fa 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -546,66 +546,73 @@ Page { visible: !collapsed width: roomItem.width - avatar.width - NotificationBubble { - 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 { + Item { id: titleRow Layout.alignment: Qt.AlignTop - Layout.preferredWidth: roomItem.width - avatar.width - spacing: Nheko.paddingSmall + Layout.fillWidth: true + Layout.preferredHeight: subtitleText.implicitHeight - Item { - Layout.alignment: Qt.AlignBottom - Layout.fillWidth: true + ElidedLabel { + id: titleText - ElidedLabel { - anchors.bottom: parent.bottom - color: roomItem.importantText - elideWidth: parent.width - fullText: TimelineManager.htmlEscape(roomName) - textFormat: Text.RichText - } + anchors.left: parent.left + color: roomItem.importantText + elideWidth: parent.width - (timestamp.visible ? timestamp.implicitWidth : 0) - (spaceNotificationBubble.visible ? spaceNotificationBubble.implicitWidth : 0) + fullText: TimelineManager.htmlEscape(roomName) + textFormat: Text.RichText } Label { id: timestamp - Layout.alignment: Qt.AlignRight | Qt.AlignBottom + anchors.baseline: titleText.baseline + anchors.right: parent.right color: roomItem.unimportantText font.pixelSize: fontMetrics.font.pixelSize * 0.9 text: time 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 Layout.alignment: Qt.AlignBottom Layout.fillWidth: true - height: visible ? 0 : undefined - spacing: 0 + Layout.preferredHeight: subtitleText.implicitHeight visible: !isSpace ElidedLabel { - Layout.fillWidth: true + id: subtitleText + + anchors.left: parent.left color: roomItem.unimportantText - elideWidth: width + elideWidth: subtextRow.width - (subtextNotificationBubble.visible ? subtextNotificationBubble.implicitWidth : 0) font.pixelSize: fontMetrics.font.pixelSize * 0.9 fullText: TimelineManager.htmlEscape(lastMessage) 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 + } } } } diff --git a/resources/qml/components/NotificationBubble.qml b/resources/qml/components/NotificationBubble.qml index f0a526d0..d4838e92 100644 --- a/resources/qml/components/NotificationBubble.qml +++ b/resources/qml/components/NotificationBubble.qml @@ -15,6 +15,7 @@ Rectangle { required property color bubbleTextColor property bool mayBeVisible: true property alias font: notificationBubbleText.font + baselineOffset: notificationBubbleText.baseline - bubbleRoot.top visible: mayBeVisible && notificationCount > 0 implicitHeight: notificationBubbleText.height + Nheko.paddingMedium