Fix most reply rendering issues with qt 6.9.2

This commit is contained in:
Nicolas Werner 2025-09-14 23:43:20 +02:00
parent 53cd31d181
commit 2769642d3c
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
4 changed files with 65 additions and 70 deletions

View file

@ -210,9 +210,10 @@ TimelineEvent {
AbstractButton {
id: replyRow
visible: wrapper.reply
visible: wrapper.replyTo
leftPadding: Nheko.paddingSmall + 4
height: replyLine.height
anchors.left: parent.left
anchors.right: parent.right
@ -225,19 +226,7 @@ TimelineEvent {
cursorShape: Qt.PointingHandCursor
}
contentItem: Row {
id: replyRowLay
spacing: Nheko.paddingSmall
Rectangle {
id: replyLine
height: Math.min( wrapper.reply?.height, timelineView.height / 10) + Nheko.paddingSmall + replyUserButton.height
color: replyRow.userColor
width: 4
}
Column {
contentItem: Column {
spacing: 0
id: replyCol
@ -247,7 +236,7 @@ TimelineEvent {
contentItem: Label {
id: userName_
text: wrapper.reply?.userName ?? ''
text: wrapper.reply?.userName ?? 'missing name'
color: replyRow.userColor
textFormat: Text.RichText
width: wrapper.maxWidth
@ -259,12 +248,20 @@ TimelineEvent {
replyUserButton,
wrapper.reply,
]
}
}
background: Rectangle {
//width: replyRow.implicitContentWidth
color: Qt.tint(palette.base, Qt.hsla(replyRow.userColor.hslHue, 0.5, replyRow.userColor.hslLightness, 0.1))
Rectangle {
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
id: replyLine
color: replyRow.userColor
width: 4
}
}
onClicked: {

View file

@ -192,9 +192,9 @@ TimelineEvent {
AbstractButton {
id: replyRow
visible: wrapper.reply
visible: wrapper.replyTo
height: replyLine.height
leftPadding: Nheko.paddingSmall + 4
property color userColor: TimelineManager.userColor(wrapper.reply?.userId ?? '', palette.base)
@ -205,19 +205,7 @@ TimelineEvent {
cursorShape: Qt.PointingHandCursor
}
contentItem: Row {
id: replyRowLay
spacing: Nheko.paddingSmall
Rectangle {
id: replyLine
height: Math.min( wrapper.reply?.height, timelineView.height / 10) + Nheko.paddingSmall + replyUserButton.height
color: replyRow.userColor
width: 4
}
Column {
contentItem: Column {
spacing: 0
id: replyCol
@ -227,7 +215,7 @@ TimelineEvent {
contentItem: Label {
id: userName_
text: wrapper.reply?.userName ?? ''
text: wrapper.reply?.userName ?? 'missing name'
color: replyRow.userColor
textFormat: Text.RichText
width: wrapper.maxWidth
@ -239,12 +227,20 @@ TimelineEvent {
replyUserButton,
wrapper.reply,
]
}
}
background: Rectangle {
//width: replyRow.implicitContentWidth
color: Qt.tint(palette.base, Qt.hsla(replyRow.userColor.hslHue, 0.5, replyRow.userColor.hslLightness, 0.1))
Rectangle {
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
id: replyLine
color: replyRow.userColor
width: 4
}
}
onClicked: {

View file

@ -330,7 +330,7 @@ Pane {
ImageButton {
id: deletePinButton
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
Layout.alignment: Qt.AlignTop | Qt.AlignRight
Layout.preferredHeight: 16
Layout.preferredWidth: 16
ToolTip.text: qsTr("Unpin")

View file

@ -5,6 +5,7 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Window
import QtQuick.Layouts
import im.nheko
import "../"
@ -21,7 +22,11 @@ AbstractButton {
property string userId: eventId ? room.dataById(eventId, Room.UserId, "") : ""
property string userName: eventId ? room.dataById(eventId, Room.UserName, "") : ""
implicitHeight: replyContainer.height
implicitWidth: replyContainer.implicitWidth
implicitWidth: replyContainer.implicitWidth + leftPadding + rightPadding
leftPadding: 4 + Nheko.paddingSmall
rightPadding: Nheko.paddingSmall
required property int maxWidth
property bool limitHeight: false
@ -31,14 +36,14 @@ AbstractButton {
}
onClicked: {
let link = reply.child.linkAt != undefined && reply.child.linkAt(pressX-colorline.width, pressY - userName_.implicitHeight);
let link = timelineEvent.main.linkAt != undefined && timelineEvent.main.linkAt(pressX-colorline.width, pressY - userName_.implicitHeight);
if (link) {
Nheko.openLink(link)
} else {
room.showEvent(r.eventId)
}
}
onPressAndHold: replyContextMenu.show(reply.child.copyText, reply.child.linkAt(pressX-colorline.width, pressY - userName_.implicitHeight), r.eventId)
onPressAndHold: replyContextMenu.show(timelineEvent.main.copyText, timelineEvent.main.linkAt(pressX-colorline.width, pressY - userName_.implicitHeight), r.eventId)
contentItem: TimelineEvent {
id: timelineEvent
@ -51,49 +56,36 @@ AbstractButton {
maxWidth: r.maxWidth
limitAsReply: r.limitHeight
//height: replyContainer.implicitHeight
data: Row {
data: Column {
id: replyContainer
spacing: Nheko.paddingSmall
spacing: 0
clip: r.limitHeight
height: r.limitHeight ? Math.min( timelineEvent.main?.height, timelineView.height / 10) + Nheko.paddingSmall + usernameBtn.height : undefined
Rectangle {
id: colorline
// FIXME: I have no idea, why this name doesn't render in the reply popup on Qt 6.9.2
AbstractButton {
id: usernameBtn
width: 4
height: content.height
visible: r.eventId
color: TimelineManager.userColor(r.userId, palette.base)
}
Column {
id: content
spacing: 0
AbstractButton {
id: usernameBtn
contentItem: Label {
id: userName_
text: r.userName
color: r.userColor
textFormat: Text.RichText
width: timelineEvent.main?.width
}
onClicked: room.openUserProfile(r.userId)
contentItem: Label {
visible: r.eventId
id: userName_
text: r.userName
color: r.userColor
textFormat: Text.RichText
width: timelineEvent.main?.width
}
data: [
usernameBtn, timelineEvent.main,
]
onClicked: room.openUserProfile(r.userId)
}
data: [
usernameBtn, timelineEvent.main,
]
}
}
background: Rectangle {
@ -103,6 +95,16 @@ AbstractButton {
property color userColor: TimelineManager.userColor(r.userId, palette.base)
property color bgColor: palette.base
color: Qt.tint(bgColor, Qt.hsla(userColor.hslHue, 0.5, userColor.hslLightness, 0.1))
Rectangle {
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
id: colorline
color: backgroundItem.userColor
width: 4
}
}
}