diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp index d886584db077bc463a39043b3b7a39ed5d552114..d2f7ec7ac2793a14b0b3c96cc0f277dd9aefaf0d 100644 --- a/src/plugins/projectexplorer/outputwindow.cpp +++ b/src/plugins/projectexplorer/outputwindow.cpp @@ -341,6 +341,7 @@ OutputWindow::OutputWindow(QWidget *parent) : QPlainTextEdit(parent) { m_enforceNewline = false; + m_scrollToBottom = false; setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); //setCenterOnScroll(false); @@ -392,8 +393,18 @@ OutputWindow::~OutputWindow() Core::ICore::instance()->removeContextObject(m_outputWindowContext); } +void OutputWindow::showEvent(QShowEvent *e) +{ + QPlainTextEdit::showEvent(e); + if (m_scrollToBottom) { + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + } + m_scrollToBottom = false; +} + void OutputWindow::appendOutput(const QString &out) { + m_scrollToBottom = true; QString s = out; m_enforceNewline = true; // make appendOutputInline put in a newline next time if (s.endsWith(QLatin1Char('\n'))) { @@ -407,6 +418,7 @@ void OutputWindow::appendOutput(const QString &out) void OutputWindow::appendOutputInline(const QString &out) { + m_scrollToBottom = true; setMaximumBlockCount(MaxBlockCount); int newline = -1; @@ -439,6 +451,7 @@ void OutputWindow::appendOutputInline(const QString &out) void OutputWindow::insertLine() { + m_scrollToBottom = true; setMaximumBlockCount(MaxBlockCount); appendPlainText(QString()); enableUndoRedo(); diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h index 6820f5076e012f368f2e25c211fbb1de09a95316..ce81025bdbda87623d56710547b88eb979307213 100644 --- a/src/plugins/projectexplorer/outputwindow.h +++ b/src/plugins/projectexplorer/outputwindow.h @@ -126,10 +126,13 @@ public: void appendOutputInline(const QString &out); void insertLine(); + void showEvent(QShowEvent *); + private: Core::BaseContext *m_outputWindowContext; void enableUndoRedo(); bool m_enforceNewline; + bool m_scrollToBottom; }; #if 0