Commit 727b9187 authored by Eike Ziller's avatar Eike Ziller

Help: Fix issues with scrolling to right position

The different viewer backends have different issues with scrolling to
the right position if the URL contains an anchor. In all combinations of
"viewer was visible/invisible when help was requested" and "viewer last
showed the same/a different page then the requested URL".

Move the special logic from help plugin to the viewer backends.

Task-number: QTCREATORBUG-15548
Change-Id: I962c90695ceaee48800a3590676e1d28343cf790
Reviewed-by: default avatarKarsten Heimrich <karsten.heimrich@theqtcompany.com>
Reviewed-by: default avatarAndré Hartmann <aha_1980@gmx.de>
Reviewed-by: default avatarEike Ziller <eike.ziller@theqtcompany.com>
parent 9bde1227
......@@ -593,14 +593,9 @@ void HelpPlugin::showContextHelp()
.arg(contextHelpId)
.arg(creatorTheme()->color(Theme::TextColorNormal).name()));
} else {
const QUrl &oldSource = viewer->source();
if (source != oldSource) {
viewer->stop();
viewer->setSource(source); // triggers loadFinished which triggers id highlighting
} else {
viewer->scrollToAnchor(source.fragment());
}
viewer->setFocus();
viewer->stop();
viewer->setSource(source); // triggers loadFinished which triggers id highlighting
ICore::raiseWindow(viewer);
}
}
......
......@@ -57,7 +57,6 @@ public:
virtual QUrl source() const = 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) }
virtual void setHtml(const QString &html) = 0;
......
......@@ -467,16 +467,12 @@ void QtWebKitHelpViewer::setSource(const QUrl &url)
QUrl newWithoutFragment = url;
newWithoutFragment.setFragment(QString());
if (oldWithoutFragment == newWithoutFragment) {
m_webView->page()->mainFrame()->scrollToAnchor(url.fragment());
slotLoadStarted();
slotLoadFinished();
}
}
void QtWebKitHelpViewer::scrollToAnchor(const QString &anchor)
{
m_webView->page()->mainFrame()->scrollToAnchor(anchor);
}
void QtWebKitHelpViewer::highlightId(const QString &id)
{
if (m_oldHighlightId == id)
......
......@@ -56,7 +56,6 @@ public:
QUrl source() const;
void setSource(const QUrl &url);
void scrollToAnchor(const QString &anchor);
void highlightId(const QString &id);
void setHtml(const QString &html);
......
......@@ -38,6 +38,8 @@
#include <QHelpEngine>
#include <QKeyEvent>
#include <QMenu>
#include <QScrollBar>
#include <QTimer>
#include <QToolTip>
#include <QVBoxLayout>
......@@ -145,12 +147,13 @@ void TextBrowserHelpViewer::setSource(const QUrl &url)
slotLoadStarted();
m_textBrowser->setSource(url);
slotLoadFinished();
}
void TextBrowserHelpViewer::scrollToAnchor(const QString &anchor)
{
m_textBrowser->scrollToAnchor(anchor);
QTimer::singleShot(0, this, [this, url]() {
if (!url.fragment().isEmpty())
m_textBrowser->scrollToAnchor(url.fragment());
if (QScrollBar *hScrollBar = m_textBrowser->horizontalScrollBar())
hScrollBar->setValue(0);
slotLoadFinished();
});
}
void TextBrowserHelpViewer::setHtml(const QString &html)
......
......@@ -55,7 +55,6 @@ public:
QUrl source() const;
void setSource(const QUrl &url);
void scrollToAnchor(const QString &anchor);
void setHtml(const QString &html);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment