Skip to content

Commit

Permalink
fix(registry,ui): restore docset icons on tabs
Browse files Browse the repository at this point in the history
A regression from switching to serving content over HTTP.

Reported in #1202.
  • Loading branch information
trollixx committed Apr 5, 2020
1 parent 753ce5b commit c2acb42
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 17 deletions.
10 changes: 10 additions & 0 deletions src/libs/registry/docsetregistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,16 @@ Docset *DocsetRegistry::docset(int index) const
return (m_docsets.cbegin() + index).value();
}

Docset *DocsetRegistry::docsetForUrl(const QUrl &url)
{
for (Docset *docset : qAsConst(m_docsets)) {
if (docset->baseUrl().isParentOf(url))
return docset;
}

return nullptr;
}

QList<Docset *> DocsetRegistry::docsets() const
{
return m_docsets.values();
Expand Down
1 change: 1 addition & 0 deletions src/libs/registry/docsetregistry.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ class DocsetRegistry final : public QObject

Docset *docset(const QString &name) const;
Docset *docset(int index) const;
Docset *docsetForUrl(const QUrl &url);
QList<Docset *> docsets() const;

void search(const QString &query);
Expand Down
28 changes: 13 additions & 15 deletions src/libs/ui/browsertab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,10 @@ BrowserTab::BrowserTab(QWidget *parent)
m_webControl = new Browser::WebControl(this);
connect(m_webControl, &Browser::WebControl::titleChanged, this, &BrowserTab::titleChanged);
connect(m_webControl, &Browser::WebControl::urlChanged, this, [this](const QUrl &url) {
const QString name = docsetName(url);
// TODO: Check if changed.
emit iconChanged(docsetIcon(name));
emit iconChanged(docsetIcon(url));

Registry::Docset *docset = Core::Application::instance()->docsetRegistry()->docset(name);
Registry::Docset *docset = Core::Application::instance()->docsetRegistry()->docsetForUrl(url);
if (docset) {
searchSidebar()->pageTocModel()->setResults(docset->relatedLinks(url));
m_webControl->setJavaScriptEnabled(docset->isJavaScriptEnabled());
Expand Down Expand Up @@ -87,7 +86,7 @@ BrowserTab::BrowserTab(QWidget *parent)
QWebHistory *history = m_webControl->history();
QList<QWebHistoryItem> items = history->backItems(10);
for (auto it = items.crbegin(); it != items.crend(); ++it) {
const QIcon icon = docsetIcon(docsetName(it->url()));
const QIcon icon = docsetIcon(it->url());
const QWebHistoryItem item = *it;
backMenu->addAction(icon, it->title(), this, [=](bool) { history->goToItem(item); });
}
Expand All @@ -109,7 +108,7 @@ BrowserTab::BrowserTab(QWidget *parent)
QWebHistory *history = m_webControl->history();
const auto forwardItems = history->forwardItems(10);
for (const QWebHistoryItem &item : forwardItems) {
const QIcon icon = docsetIcon(docsetName(item.url()));
const QIcon icon = docsetIcon(item.url());
forwardMenu->addAction(icon, item.title(), this, [=](bool) { history->goToItem(item); });
}
});
Expand Down Expand Up @@ -145,12 +144,17 @@ BrowserTab::BrowserTab(QWidget *parent)

auto registry = Core::Application::instance()->docsetRegistry();
using Registry::DocsetRegistry;
connect(registry, &DocsetRegistry::docsetAboutToBeUnloaded, this, [this](const QString &name) {
if (docsetName(m_webControl->url()) != name)
connect(registry, &DocsetRegistry::docsetAboutToBeUnloaded,
this, [this, registry](const QString &name) {
Registry::Docset *docset = registry->docsetForUrl(m_webControl->url());
if (docset == nullptr || docset->name() != name) {
return;
}


// TODO: Add custom 'Page has been removed' page.
navigateToStartPage();

// TODO: Cleanup history.
});
}
Expand Down Expand Up @@ -213,14 +217,8 @@ void BrowserTab::search(const Registry::SearchQuery &query)
m_searchSidebar->search(query);
}

QString BrowserTab::docsetName(const QUrl &url) const
{
const QRegExp docsetRegex(QStringLiteral("/([^/]+)[.]docset"));
return docsetRegex.indexIn(url.path()) != -1 ? docsetRegex.cap(1) : QString();
}

QIcon BrowserTab::docsetIcon(const QString &docsetName) const
QIcon BrowserTab::docsetIcon(const QUrl &url) const
{
Registry::Docset *docset = Core::Application::instance()->docsetRegistry()->docset(docsetName);
Registry::Docset *docset = Core::Application::instance()->docsetRegistry()->docsetForUrl(url);
return docset ? docset->icon() : QIcon(QStringLiteral(":/icons/logo/icon.png"));
}
3 changes: 1 addition & 2 deletions src/libs/ui/browsertab.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,7 @@ public slots:

private:
Q_DISABLE_COPY(BrowserTab)
QString docsetName(const QUrl &url) const;
QIcon docsetIcon(const QString &docsetName) const;
QIcon docsetIcon(const QUrl &url) const;

// Widgets.
SearchSidebar *m_searchSidebar = nullptr;
Expand Down

0 comments on commit c2acb42

Please sign in to comment.