diff --git a/src/qml/Component/Timeline/LinkPreviewDelegate.qml b/src/qml/Component/Timeline/LinkPreviewDelegate.qml index d41ee42e6..64cb84078 100644 --- a/src/qml/Component/Timeline/LinkPreviewDelegate.qml +++ b/src/qml/Component/Timeline/LinkPreviewDelegate.qml @@ -44,6 +44,11 @@ Loader { */ property var defaultHeight : Kirigami.Units.gridUnit * 3 + Kirigami.Units.smallSpacing * 2 + /** + * @brief Whether the loading indicator should animate if visible. + */ + property bool indicatorEnabled: false + active: !currentRoom.usesEncryption && model.display && links && links.length > 0 visible: Config.showLinkPreview && active sourceComponent: linkPreviewer.loaded ? linkPreviewComponent : loadingComponent @@ -129,7 +134,7 @@ Loader { Component { id: loadingComponent RowLayout { - property bool hovered: false + id: componentRoot property bool truncated: false Rectangle { @@ -137,7 +142,9 @@ Loader { width: Kirigami.Units.smallSpacing color: Kirigami.Theme.highlightColor } - QQC2.BusyIndicator { } + QQC2.BusyIndicator { + running: root.indicatorEnabled + } Kirigami.Heading { Layout.fillWidth: true Layout.minimumHeight: root.defaultHeight diff --git a/src/qml/Component/Timeline/MessageDelegate.qml b/src/qml/Component/Timeline/MessageDelegate.qml index 44db5ec30..bd6e22dd0 100644 --- a/src/qml/Component/Timeline/MessageDelegate.qml +++ b/src/qml/Component/Timeline/MessageDelegate.qml @@ -31,6 +31,7 @@ TimelineContainer { } LinkPreviewDelegate { Layout.fillWidth: true + indicatorEnabled: messageDelegate.isVisibleInTimeline() } } } diff --git a/src/qml/Component/Timeline/TimelineContainer.qml b/src/qml/Component/Timeline/TimelineContainer.qml index 7400612f4..62f2b85f0 100644 --- a/src/qml/Component/Timeline/TimelineContainer.qml +++ b/src/qml/Component/Timeline/TimelineContainer.qml @@ -320,4 +320,9 @@ ColumnLayout { visible: eventType !== MessageEventModel.State && eventType !== MessageEventModel.Notice && reaction != undefined && reaction.length > 0 } + + function isVisibleInTimeline() { + let yoff = Math.round(y - ListView.view.contentY); + return (yoff + height > 0 && yoff < ListView.view.height) + } }