From 0e62a1c678f9321431ab9547db93fd4e3a790b0e Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Fri, 12 Feb 2010 14:41:19 +0100 Subject: [PATCH] VCSBase: Fix assert about log window widget being 0. ...when p4 initialization fails on Windows. --- src/plugins/vcsbase/vcsbaseoutputwindow.cpp | 59 ++++++++++++--------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/src/plugins/vcsbase/vcsbaseoutputwindow.cpp b/src/plugins/vcsbase/vcsbaseoutputwindow.cpp index 0f5812920f9..966ec44a9e6 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 } -- GitLab