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()));