diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp index 0f5812920f959ac4137579c9fb5d127b1fc23e8d..966ec44a9e694cb223cbc3dea6e83def2de11cd1 100644 --- a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp +++ b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp @@ -65,7 +65,7 @@ private: // and functions to append specially formatted entries. class OutputWindowPlainTextEdit : public QPlainTextEdit { public: - explicit OutputWindowPlainTextEdit(QWidget *parent); + explicit OutputWindowPlainTextEdit(QWidget *parent = 0); void appendLines(QString s, const QString &repository = QString()); // Append red error text and pop up. @@ -225,10 +225,22 @@ void OutputWindowPlainTextEdit::appendCommand(const QString &text) // ------------------- VCSBaseOutputWindowPrivate struct VCSBaseOutputWindowPrivate { static VCSBaseOutputWindow *instance; - QPointer<Internal::OutputWindowPlainTextEdit> plainTextEdit; + Internal::OutputWindowPlainTextEdit *plainTextEdit(); + + QPointer<Internal::OutputWindowPlainTextEdit> m_plainTextEdit; QString repository; }; +// Create log editor on demand. Some errors might be logged +// before CorePlugin::extensionsInitialized() pulls up the windows. + +Internal::OutputWindowPlainTextEdit *VCSBaseOutputWindowPrivate::plainTextEdit() +{ + if (!m_plainTextEdit) + m_plainTextEdit = new Internal::OutputWindowPlainTextEdit(); + return m_plainTextEdit; +} + VCSBaseOutputWindow *VCSBaseOutputWindowPrivate::instance = 0; VCSBaseOutputWindow::VCSBaseOutputWindow() : @@ -245,9 +257,13 @@ VCSBaseOutputWindow::~VCSBaseOutputWindow() QWidget *VCSBaseOutputWindow::outputWidget(QWidget *parent) { - if (!d->plainTextEdit) - d->plainTextEdit = new Internal::OutputWindowPlainTextEdit(parent); - return d->plainTextEdit; + if (d->m_plainTextEdit) { + if (parent != d->m_plainTextEdit->parent()) + d->m_plainTextEdit->setParent(parent); + } else { + d->m_plainTextEdit = new Internal::OutputWindowPlainTextEdit(parent); + } + return d->m_plainTextEdit; } QWidgetList VCSBaseOutputWindow::toolBarWidgets() const @@ -267,14 +283,14 @@ int VCSBaseOutputWindow::priorityInStatusBar() const void VCSBaseOutputWindow::clearContents() { - QTC_ASSERT(d->plainTextEdit, return) - d->plainTextEdit->clear(); + if (d->m_plainTextEdit) + d->m_plainTextEdit->clear(); } void VCSBaseOutputWindow::visibilityChanged(bool visible) { - if (visible && d->plainTextEdit) - d->plainTextEdit->setFocus(); + if (visible && d->m_plainTextEdit) + d->m_plainTextEdit->setFocus(); } void VCSBaseOutputWindow::setFocus() @@ -316,8 +332,7 @@ void VCSBaseOutputWindow::goToPrev() void VCSBaseOutputWindow::setText(const QString &text) { - QTC_ASSERT(d->plainTextEdit, return) - d->plainTextEdit->setPlainText(text); + d->plainTextEdit()->setPlainText(text); } void VCSBaseOutputWindow::setData(const QByteArray &data) @@ -327,46 +342,40 @@ void VCSBaseOutputWindow::setData(const QByteArray &data) void VCSBaseOutputWindow::appendSilently(const QString &text) { - QTC_ASSERT(d->plainTextEdit, return) - d->plainTextEdit->appendLines(text, d->repository); + d->plainTextEdit()->appendLines(text, d->repository); } void VCSBaseOutputWindow::append(const QString &text) { - QTC_ASSERT(d->plainTextEdit, return) appendSilently(text); // Pop up without focus - if (!d->plainTextEdit->isVisible()) + if (!d->plainTextEdit()->isVisible()) popup(false); } void VCSBaseOutputWindow::appendError(const QString &text) { - QTC_ASSERT(d->plainTextEdit, return) - d->plainTextEdit->appendError(text); - if (!d->plainTextEdit->isVisible()) + d->plainTextEdit()->appendError(text); + if (!d->plainTextEdit()->isVisible()) popup(false); // Pop up without focus } void VCSBaseOutputWindow::appendWarning(const QString &text) { - QTC_ASSERT(d->plainTextEdit, return) - d->plainTextEdit->appendWarning(text); - if (!d->plainTextEdit->isVisible()) + d->plainTextEdit()->appendWarning(text); + if (!d->plainTextEdit()->isVisible()) popup(false); // Pop up without focus } void VCSBaseOutputWindow::appendCommand(const QString &text) { - QTC_ASSERT(d->plainTextEdit, return) - d->plainTextEdit->appendCommand(text); + d->plainTextEdit()->appendCommand(text); } void VCSBaseOutputWindow::appendData(const QByteArray &data) { - QTC_ASSERT(d->plainTextEdit, return) appendDataSilently(data); - if (!d->plainTextEdit->isVisible()) + if (!d->plainTextEdit()->isVisible()) popup(false); // Pop up without focus }