diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 4ae12c70c7f..b5c82ab8dc7 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -444,8 +444,13 @@ void HelpPlugin::updateSideBarSource() void HelpPlugin::updateSideBarSource(const QUrl &newUrl) { - if (m_rightPaneSideBarWidget) - m_rightPaneSideBarWidget->currentViewer()->setSource(newUrl); + if (m_rightPaneSideBarWidget) { + // This is called when setSource on the central widget is called. + // Avoid nested setSource calls (even of different help viewers) by scheduling the + // sidebar viewer update on the event loop (QTCREATORBUG-12742) + QMetaObject::invokeMethod(m_rightPaneSideBarWidget->currentViewer(), "setSource", + Qt::QueuedConnection, Q_ARG(QUrl, newUrl)); + } } void HelpPlugin::fontChanged() diff --git a/src/plugins/help/helpviewer.h b/src/plugins/help/helpviewer.h index e57f3e20b5c..8672f53f88c 100644 --- a/src/plugins/help/helpviewer.h +++ b/src/plugins/help/helpviewer.h @@ -59,7 +59,8 @@ public: virtual QString title() const = 0; virtual QUrl source() const = 0; - virtual void setSource(const QUrl &url) = 0; + // metacall in HelpPlugin::updateSideBarSource + Q_INVOKABLE virtual void setSource(const QUrl &url) = 0; virtual void scrollToAnchor(const QString &anchor) = 0; virtual void highlightId(const QString &id) { Q_UNUSED(id) }