From 2769642d3c7bd3c0d830b2f18ef6b3bf6a710bf4 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 14 Sep 2025 23:43:20 +0200 Subject: [PATCH] Fix most reply rendering issues with qt 6.9.2 --- resources/qml/TimelineBubbleMessageStyle.qml | 31 ++++---- resources/qml/TimelineDefaultMessageStyle.qml | 32 ++++----- resources/qml/TopBar.qml | 2 +- resources/qml/delegates/Reply.qml | 70 ++++++++++--------- 4 files changed, 65 insertions(+), 70 deletions(-) diff --git a/resources/qml/TimelineBubbleMessageStyle.qml b/resources/qml/TimelineBubbleMessageStyle.qml index 560cb1338..722718bc4 100644 --- a/resources/qml/TimelineBubbleMessageStyle.qml +++ b/resources/qml/TimelineBubbleMessageStyle.qml @@ -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: { diff --git a/resources/qml/TimelineDefaultMessageStyle.qml b/resources/qml/TimelineDefaultMessageStyle.qml index 2bc0171a8..49454ac0b 100644 --- a/resources/qml/TimelineDefaultMessageStyle.qml +++ b/resources/qml/TimelineDefaultMessageStyle.qml @@ -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: { diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index 900e59e8b..cd20e94ec 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -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") diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml index 7ee2a0a14..77cad0f0a 100644 --- a/resources/qml/delegates/Reply.qml +++ b/resources/qml/delegates/Reply.qml @@ -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 - - width: 4 - height: content.height - - color: TimelineManager.userColor(r.userId, palette.base) - } - - Column { - id: content - spacing: 0 + // FIXME: I have no idea, why this name doesn't render in the reply popup on Qt 6.9.2 + AbstractButton { + id: usernameBtn - AbstractButton { - id: usernameBtn + visible: r.eventId - - 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 + } } }