Add workaround for delegate stuck transition bug
Sometimes and randomly, a HListView/HGridView delegate's add/populate transition will stop before completion. This especially happens on startup when loading a large room list, one room might get stuck and left tiny or invisible, despite its normal space still being taken.
This commit is contained in:
parent
35fa1fa16b
commit
8acc7299e9
35
src/gui/Base/DelegateTransitionFixer.qml
Normal file
35
src/gui/Base/DelegateTransitionFixer.qml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
|
||||||
|
import QtQuick 2.12
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
// Sometimes and randomly, a HListView/HGridView delegate's add/populate
|
||||||
|
// Transition will stop too early, leaving a stuck invisible or tiny item.
|
||||||
|
// This is a workaround for this Qt bug happening despite the neccessary
|
||||||
|
// Transition precautions from the docs being applied.
|
||||||
|
|
||||||
|
property Item delegate: parent
|
||||||
|
|
||||||
|
readonly property HNumberAnimation opacityFixer: HNumberAnimation {
|
||||||
|
target: delegate
|
||||||
|
property: "opacity"
|
||||||
|
from: delegate.opacity
|
||||||
|
to: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
readonly property HNumberAnimation scaleFixer: HNumberAnimation {
|
||||||
|
target: delegate
|
||||||
|
property: "scale"
|
||||||
|
from: delegate.scale
|
||||||
|
to: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interval: theme.animationDuration * 2
|
||||||
|
running: true
|
||||||
|
onTriggered: {
|
||||||
|
// if (delegate.opacity < 1 || delegate.scale < 1) print(delegate)
|
||||||
|
if (delegate.opacity < 1) opacityFixer.start()
|
||||||
|
if (delegate.scale < 1) scaleFixer.start()
|
||||||
|
}
|
||||||
|
}
|
|
@ -243,4 +243,6 @@ HTile {
|
||||||
sequences: window.settings.keys.togglePresenceOffline
|
sequences: window.settings.keys.togglePresenceOffline
|
||||||
onActivated: account.togglePresence("offline")
|
onActivated: account.togglePresence("offline")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,6 +207,8 @@ HTile {
|
||||||
if (loadEventsFutureId) py.cancelCoro(loadEventsFutureId)
|
if (loadEventsFutureId) py.cancelCoro(loadEventsFutureId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
interval: 1000
|
interval: 1000
|
||||||
triggeredOnStart: true
|
triggeredOnStart: true
|
||||||
|
|
|
@ -173,4 +173,6 @@ HTile {
|
||||||
}
|
}
|
||||||
|
|
||||||
onLeftClicked: checkBox.clicked()
|
onLeftClicked: checkBox.clicked()
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,4 +92,6 @@ HTile {
|
||||||
}
|
}
|
||||||
|
|
||||||
Behavior on contentOpacity { HNumberAnimation {} }
|
Behavior on contentOpacity { HNumberAnimation {} }
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,4 +49,6 @@ HTile {
|
||||||
Behavior on color { HColorAnimation {} }
|
Behavior on color { HColorAnimation {} }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ HColumnLayout {
|
||||||
|
|
||||||
Behavior on height { HNumberAnimation {} }
|
Behavior on height { HNumberAnimation {} }
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
|
|
||||||
HRowLayout {
|
HRowLayout {
|
||||||
HIcon {
|
HIcon {
|
||||||
svgName: "uploading"
|
svgName: "uploading"
|
||||||
|
|
|
@ -171,4 +171,6 @@ HTile {
|
||||||
value: (roomPane.minimumSize - avatar.width) / 2
|
value: (roomPane.minimumSize - avatar.width) / 2
|
||||||
when: avatar && roomPane.width < avatar.width + theme.spacing * 2
|
when: avatar && roomPane.width < avatar.width + theme.spacing * 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,4 +64,6 @@ HTile {
|
||||||
)
|
)
|
||||||
item.trustSet.connect(deviceTile.trustSet)
|
item.trustSet.connect(deviceTile.trustSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,6 +84,8 @@ HColumnLayout {
|
||||||
|
|
||||||
ListView.onRemove: eventList.uncheck(model.id)
|
ListView.onRemove: eventList.uncheck(model.id)
|
||||||
|
|
||||||
|
DelegateTransitionFixer {}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
visible: model.event_type !== "RoomCreateEvent"
|
visible: model.event_type !== "RoomCreateEvent"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user