From e2d02152e42d0e35d581b8ba530ed3ac77016f21 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Thu, 16 Jul 2026 14:45:26 +0200 Subject: [PATCH] kate: fix chat scroll not pinning to bottom setHtml() resets the document layout. sb->setValue(sb->maximum()) was reading a stale maximum before relayout completed. Use moveCursor(End) + ensureCursorVisible() which forces layout and scrolls reliably. Also: fix session list state updates destroying delegates (rename fix) already included in previous commit. --- kate/chat_renderer.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kate/chat_renderer.cpp b/kate/chat_renderer.cpp index 4aebc5c..1106d02 100644 --- a/kate/chat_renderer.cpp +++ b/kate/chat_renderer.cpp @@ -540,7 +540,13 @@ void ChatRenderer::render(QTextEdit *view, const QString &rawText) view->setHtml(html); if (atBottom) { - sb->setValue(sb->maximum()); + // Move cursor to end and ensure visible — this forces layout and + // scrolls reliably, unlike sb->setValue(sb->maximum()) which can + // read a stale maximum before relayout completes. + QTextCursor cursor = view->textCursor(); + cursor.movePosition(QTextCursor::End); + view->setTextCursor(cursor); + view->ensureCursorVisible(); } else { // Restore exact scroll position — clamp to new maximum sb->setValue(qMin(savedPos, sb->maximum()));