Fix flickering in hover menu

This commit is contained in:
Nicolas Werner 2022-03-07 23:16:18 +01:00
parent fd041ce58d
commit 9c622b60b9
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9

View file

@ -56,7 +56,7 @@ Item {
anchors.rightMargin: scrollbar.interactive? scrollbar.width : 0 anchors.rightMargin: scrollbar.interactive? scrollbar.width : 0
Rectangle { Control {
//closePolicy: Popup.NoAutoClose //closePolicy: Popup.NoAutoClose
id: messageActions id: messageActions
@ -64,27 +64,22 @@ Item {
property Item attached: null property Item attached: null
property alias model: row.model property alias model: row.model
// use comma to update on scroll // use comma to update on scroll
property var attachedPos: chat.contentY, chat.count, attached ? chat.mapFromItem(attached, attached ? attached.width - width : 0, -height) : null property var attachedPos: chat.contentY, attached ? chat.mapFromItem(attached, attached ? attached.width - width : 0, -height) : null
readonly property int padding: Nheko.paddingSmall padding: Nheko.paddingSmall
visible: Settings.buttonsInTimeline && !!attached && (attached.hovered || messageActionHover.hovered) visible: Settings.buttonsInTimeline && !!attached && (attached.hovered || hovered)
x: attached ? attachedPos.x : 0 x: attached ? attachedPos.x : 0
y: attached ? attachedPos.y : 0 y: attached ? attachedPos.y : 0
z: 10 z: 10
height: row.implicitHeight + padding * 2
width: row.implicitWidth + padding * 2 background: Rectangle {
color: Nheko.colors.window color: Nheko.colors.window
border.color: Nheko.colors.buttonText border.color: Nheko.colors.buttonText
border.width: 1 border.width: 1
radius: padding radius: padding
HoverHandler {
id: messageActionHover
grabPermissions: PointerHandler.CanTakeOverFromAnything
} }
Row { contentItem: Row {
id: row id: row
property var model property var model
@ -479,7 +474,7 @@ Item {
TimelineRow { TimelineRow {
id: timelinerow id: timelinerow
hovered: messageActionHover.hovered ? (messageActions.model != undefined && messageActions.model.eventId == timelinerow.eventId) : wrapper.hovered hovered: messageActions.hovered ? (messageActions.model != undefined && messageActions.model == timelinerow) : wrapper.hovered
proportionalHeight: wrapper.proportionalHeight proportionalHeight: wrapper.proportionalHeight
type: chat.model, wrapper.type type: chat.model, wrapper.type
@ -512,17 +507,19 @@ Item {
status: wrapper.status status: wrapper.status
relatedEventCacheBuster: wrapper.relatedEventCacheBuster relatedEventCacheBuster: wrapper.relatedEventCacheBuster
y: section.visible && section.active ? section.y + section.height : 0 y: section.visible && section.active ? section.y + section.height : 0
}
onHoveredChanged: { onHoveredChanged: {
console.log("Hover changed: " + hovered + " w: " + wrapper.hovered + " h: "+ messageActions.hovered + " obj: " + timelinerow)
if (!Settings.mobileMode && hovered) { if (!Settings.mobileMode && hovered) {
if (!messageActionHover.hovered) { if (!messageActions.hovered) {
messageActions.attached = timelinerow; messageActions.attached = timelinerow;
messageActions.model = timelinerow; messageActions.model = timelinerow;
} }
} }
} }
}
Connections { Connections {
function onMovementEnded() { function onMovementEnded() {
if (y + height + 2 * chat.spacing > chat.contentY + chat.height && y < chat.contentY + chat.height) if (y + height + 2 * chat.spacing > chat.contentY + chat.height && y < chat.contentY + chat.height)