Commit 64f94b6b authored by Stefano Crocco's avatar Stefano Crocco
Browse files

Port the About page to QtWebEngine

Summary:
Replace the old About Page based on KHtml with one based on QtWebEngine.

This has been obtained creating a new QWebEngineUrlSchemeHandler for the `konq``
scheme which will display the contents of the about page. The old `about` scheme
can't be used because it's used internally by QtWebEngine.

There are two problems. The first is that if the user's konquerorrc file
contains old default value for the StartURL entry, that value will be used
instead of the new one, which will result in an error message. I don't know how
to force the use of the new default instead of the old one.

The second problem is that clicking on the "Home Folder" link in the launch page
will open the link in the WebEngine part instead of Dolphin part.

Test Plan:
after removing the StartURL entry from the user's konquerorrc file,
launch Konqueror and check that the intro page is displayed. Click on one of the
links in the page (Introduction, Tips, Specifications) and check that the
correct page is displayed.

Reviewers: dfaure

Reviewed By: dfaure

Differential Revision: https://phabricator.kde.org/D26253
parent e3565729
......@@ -62,7 +62,6 @@ if(BUILD_TESTING)
endif()
add_subdirectory( webenginepart )
add_subdirectory( about )
add_subdirectory( pics )
#add_subdirectory( sidebar )
add_subdirectory( settings )
......
......@@ -276,7 +276,7 @@ void ViewMgrTest::testCreateFirstView()
void ViewMgrTest::testEmptyWindow()
{
QScopedPointer<KonqMainWindow> emptyWindow(KonqMainWindowFactory::createNewWindow());
QCOMPARE(emptyWindow->currentView()->url().url(), QString("about:konqueror"));
QCOMPARE(emptyWindow->currentView()->url().url(), QString("konq:konqueror"));
QCOMPARE(emptyWindow->focusWidget()->metaObject()->className(), "KonqCombo");
}
......
......@@ -34,7 +34,7 @@
#include "ui_advancedTabOptions.h"
// Keep in sync with konqueror.kcfg
static const char DEFAULT_STARTPAGE[] = "about:konqueror";
static const char DEFAULT_STARTPAGE[] = "konq:konqueror";
static const char DEFAULT_HOMEPAGE[] = "https://www.kde.org/";
// Keep in sync with the order in the combo
enum StartPage { ShowAboutPage, ShowStartUrlPage, ShowBlankPage, ShowBookmarksPage };
......@@ -141,10 +141,10 @@ KKonqGeneralOptions::~KKonqGeneralOptions()
static StartPage urlToStartPageEnum(const QString &startUrl)
{
if (startUrl == QLatin1String("about:blank")) {
if (startUrl == QLatin1String("konq:blank")) {
return ShowBlankPage;
}
if (startUrl == QLatin1String("about:") || startUrl == QLatin1String("about:konqueror")) {
if (startUrl == QLatin1String("konq:") || startUrl == QLatin1String("konq:konqueror")) {
return ShowAboutPage;
}
if (startUrl == QLatin1String("bookmarks:") || startUrl == QLatin1String("bookmarks:/")) {
......@@ -157,9 +157,9 @@ static QString startPageEnumToUrl(StartPage startPage)
{
switch (startPage) {
case ShowBlankPage:
return QStringLiteral("about:blank");
return QStringLiteral("konq:blank");
case ShowAboutPage:
return QStringLiteral("about:konqueror");
return QStringLiteral("konq:konqueror");
case ShowBookmarksPage:
return QStringLiteral("bookmarks:/");
case ShowStartUrlPage:
......
......@@ -19,6 +19,7 @@ set(konquerorprivate_SRCS
konqhistoryproxymodel.cpp
konqhistoryview.cpp
konqhistorysettings.cpp
konqurl.cpp
)
ecm_qt_declare_logging_category(konquerorprivate_SRCS HEADER konqdebug.h IDENTIFIER KONQUEROR_LOG CATEGORY_NAME org.kde.konqueror)
......@@ -82,6 +83,7 @@ set(konqueror_KDEINIT_SRCS
konqcloseditem.cpp
konqhistorydialog.cpp
konqstatusbarmessagelabel.cpp
konqurl.cpp
)
kconfig_add_kcfg_files(konqueror_KDEINIT_SRCS konqsettingsxt.kcfgc)
......
......@@ -19,6 +19,7 @@
// Own
#include "konqframe.h"
#include "konqurl.h"
// Local
#include "konqtabs.h"
......@@ -240,7 +241,7 @@ void KonqFrame::activateChild()
if (m_pView && !m_pView->isPassiveMode()) {
m_pView->mainWindow()->viewManager()->setActivePart(part());
if (!m_pView->isLoading() && (m_pView->url().isEmpty() || m_pView->url() == QUrl(QStringLiteral("about:blank")))) {
if (!m_pView->isLoading() && (m_pView->url().isEmpty() || KonqUrl::isKonqBlank(m_pView->url()))) {
//qCDebug(KONQUEROR_LOG) << "SET FOCUS on the location bar";
m_pView->mainWindow()->focusLocationBar(); // #84867 usability improvement
}
......
......@@ -20,6 +20,7 @@
#include "konqhistorymanager.h"
#include <kbookmarkmanager.h>
#include "konqurl.h"
#include <QTimer>
#include "konqdebug.h"
......@@ -155,7 +156,7 @@ void KonqHistoryManager::addToHistory(bool pending, const QUrl &_url,
void KonqHistoryManager::insert(const QString &url)
{
QUrl u(url);
if (!filterOut(u) || u.scheme() == QLatin1String("about")) { // remote URL
if (!filterOut(u) || KonqUrl::hasKonqScheme(u)) { // remote URL
return;
}
// Local URL -> add to history
......
......@@ -26,6 +26,7 @@
#include "konqsessionmanager.h"
#include "konqview.h"
#include "konqsettingsxt.h"
#include "konqurl.h"
#include <KAboutData>
#include <KCrash>
......@@ -157,6 +158,15 @@ static KonqMainWindow* handleCommandLine(QCommandLineParser &parser, const QStri
return nullptr;
}
static void fixOldStartUrl() {
QUrl startUrl(KonqSettings::startURL());
if (startUrl.scheme() == "about") {
startUrl.setScheme(KonqUrl::scheme());
KonqSettings::setStartURL(startUrl.url());
KonqSettings::self()->save();
}
}
extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
{
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); // says QtWebEngine
......@@ -247,6 +257,8 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
KWindowSystem::forceActiveWindow(mainWindow->winId());
}
});
fixOldStartUrl();
if (app.isSessionRestored()) {
KonqSessionManager::self()->askUserToRestoreAutosavedAbandonedSessions();
......@@ -262,7 +274,7 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
++n;
}
} else if (parser.isSet("preload")) {
new KonqMainWindow(QUrl(QStringLiteral("about:blank"))); // prepare an empty window, with the web renderer preloaded
new KonqMainWindow(KonqUrl::url(KonqUrl::Type::Blank)); // prepare an empty window, with the web renderer preloaded
} else {
int ret = 0;
KonqMainWindow *mainWindow = handleCommandLine(parser, QDir::currentPath(), &ret);
......
......@@ -51,6 +51,7 @@
#include "konqhistorydialog.h"
#include <config-konqueror.h>
#include <kstringhandler.h>
#include "konqurl.h"
#include <konq_events.h>
#include <konqpixmapprovider.h>
......@@ -501,7 +502,6 @@ void KonqMainWindow::openUrl(KonqView *_view, const QUrl &_url,
qCDebug(KONQUEROR_LOG) << "url=" << _url << "mimeType=" << _mimeType
<< "_req=" << _req.debug() << "view=" << _view;
#endif
// We like modifying args in this method :)
QUrl url(_url);
QString mimeType(_mimeType);
......@@ -510,18 +510,17 @@ void KonqMainWindow::openUrl(KonqView *_view, const QUrl &_url,
if (mimeType.isEmpty()) {
mimeType = req.args.mimeType();
}
if (!url.isValid()) {
// I think we can't really get here anymore; I tried and didn't succeed.
// URL filtering catches this case before hand, and in cases without filtering
// (e.g. HTML link), the url is empty here, not invalid.
// But just to be safe, let's keep this code path
url = KParts::BrowserRun::makeErrorUrl(KIO::ERR_MALFORMED_URL, url.url(), url);
} else if (!KProtocolInfo::isKnownProtocol(url) && url.scheme() != QLatin1String("error") && url.scheme() != QLatin1String("about") && url.scheme() != QLatin1String("mailto")) {
} else if (!KProtocolInfo::isKnownProtocol(url) && url.scheme() != QLatin1String("error") && !KonqUrl::hasKonqScheme(url) && url.scheme() != QLatin1String("mailto")) {
url = KParts::BrowserRun::makeErrorUrl(KIO::ERR_UNSUPPORTED_PROTOCOL, url.scheme(), url);
}
if (url.url() == QLatin1String("about:blank") || url.scheme() == QLatin1String("error")) {
if (KonqUrl::isKonqBlank(url) || url.scheme() == QLatin1String("error")) {
mimeType = QStringLiteral("text/html");
}
......@@ -640,7 +639,7 @@ void KonqMainWindow::openUrl(KonqView *_view, const QUrl &_url,
}
//qCDebug(KONQUEROR_LOG) << "trying openView for" << url << "( mimeType" << mimeType << ")";
if (hasMimeType || url.url() == QLatin1String("about:") || url.url().startsWith(QLatin1String("about:konqueror")) || url.url() == QLatin1String("about:plugins")) {
if (hasMimeType || KonqUrl::isValidNotBlank(url)) {
// Built-in view ?
if (!openView(mimeType, url, view /* can be 0 */, req)) {
......@@ -797,11 +796,10 @@ bool KonqMainWindow::openView(QString mimeType, const QUrl &_url, KonqView *chil
QString serviceName = req.serviceName; // default: none provided
const QString urlStr = url.url();
if (urlStr == QLatin1String("about:") || urlStr.startsWith(QLatin1String("about:konqueror")) || urlStr == QLatin1String("about:plugins")) {
mimeType = QStringLiteral("KonqAboutPage"); // not KParts/ReadOnlyPart, it fills the Location menu ! :)
serviceName = QStringLiteral("konq_aboutpage");
if (KonqUrl::isValidNotBlank(urlStr)) {
mimeType = QStringLiteral("text/html");
originalURL = req.typedUrl.isEmpty() ? QString() : req.typedUrl;
} else if (urlStr == QLatin1String("about:blank") && req.typedUrl.isEmpty()) {
} else if (KonqUrl::isKonqBlank(urlStr) && req.typedUrl.isEmpty()) {
originalURL.clear();
}
......@@ -809,7 +807,7 @@ bool KonqMainWindow::openView(QString mimeType, const QUrl &_url, KonqView *chil
if (!req.typedUrl.isEmpty()) { // the user _typed_ the URL, he wants it in Konq.
forceAutoEmbed = true;
}
if (url.scheme() == QLatin1String("about") || url.scheme() == QLatin1String("error")) {
if (KonqUrl::hasKonqScheme(url) || url.scheme() == QLatin1String("error")) {
forceAutoEmbed = true;
}
// Related to KonqFactory::createView
......@@ -1200,7 +1198,7 @@ void KonqMainWindow::slotCreateNewWindow(const QUrl &url,
m_pViewManager->showTab(newView);
}
openUrl(newView, url.isEmpty() ? QUrl(QStringLiteral("about:blank")) : url, QString(), req);
openUrl(newView, url.isEmpty() ? KonqUrl::url(KonqUrl::Type::Blank) : url, QString(), req);
newView->setViewName(browserArgs.frameName);
*part = newView->part();
......@@ -2318,7 +2316,7 @@ void KonqMainWindow::slotSplitViewVertical()
void KonqMainWindow::slotAddTab()
{
// we can hardcode text/html because this is what about:blank will use anyway
// we can hardcode text/html because this is what konq:blank will use anyway
KonqView *newView = m_pViewManager->addTab(QStringLiteral("text/html"),
QString(),
false,
......@@ -2327,7 +2325,7 @@ void KonqMainWindow::slotAddTab()
return;
}
openUrl(newView, QUrl(QStringLiteral("about:blank")), QString());
openUrl(newView, KonqUrl::url(KonqUrl::Type::Blank), QString());
//HACK!! QTabBar likes to steal focus when changing widgets. This can result
//in a flicker since we don't want it to get focus we want the combo to get
......@@ -3908,7 +3906,7 @@ void KonqMainWindow::updateHistoryActions()
bool KonqMainWindow::isPreloaded() const
{
return !isVisible() && m_mapViews.count() == 1 && m_currentView->url().toString() == "about:blank";
return !isVisible() && m_mapViews.count() == 1 && KonqUrl::isKonqBlank(m_currentView->url().toString());
}
void KonqMainWindow::updateToolBarActions(bool pendingAction /*=false*/)
......@@ -4999,7 +4997,7 @@ void KonqMainWindow::updateWindowIcon()
void KonqMainWindow::slotIntro()
{
openUrl(nullptr, QUrl(QStringLiteral("about:")));
openUrl(nullptr, KonqUrl::url(KonqUrl::Type::NoPath));
}
void KonqMainWindow::goURL()
......@@ -5020,7 +5018,7 @@ void KonqMainWindow::goURL()
void KonqMainWindow::slotAddClosedUrl(KonqFrameBase *tab)
{
qCDebug(KONQUEROR_LOG);
QString title(i18n("no name")), url(QStringLiteral("about:blank"));
QString title(i18n("no name")), url(KonqUrl::string(KonqUrl::Type::Blank));
// Did the tab contain a single frame, or a splitter?
KonqFrame *frame = dynamic_cast<KonqFrame *>(tab);
......
......@@ -22,6 +22,8 @@
#include "konqview.h"
#include "konqsettingsxt.h"
#include "konqdebug.h"
#include "konqurl.h"
#include <KWindowInfo>
#include <KStartupInfo>
#include <QTimer>
......@@ -46,7 +48,7 @@ static void abortFullScreenMode()
static void ensurePreloadedWindow()
{
if (KonqSettings::alwaysHavePreloaded()) {
QTimer::singleShot(500, nullptr, []() { new KonqMainWindow(QUrl(QStringLiteral("about:blank"))); });
QTimer::singleShot(500, nullptr, []() { new KonqMainWindow(KonqUrl::url(KonqUrl::Type::Blank)); });
}
}
......
......@@ -23,6 +23,7 @@
#include "konqviewmanager.h"
#include "konqview.h"
#include "konqmainwindowfactory.h"
#include "konqurl.h"
#include "konqdebug.h"
#include <kurifilter.h>
......@@ -70,7 +71,7 @@ QUrl KonqMisc::konqFilteredURL(KonqMainWindow *parent, const QString &_url, cons
{
Q_UNUSED(parent); // Useful if we want to change the error handling again
if (!_url.startsWith(QLatin1String("about:"))) { // Don't filter "about:" URLs
if (!KonqUrl::canBeKonqUrl(_url)) { // Don't filter "konq:" URLs
KUriFilterData data(_url);
if (currentDirectory.isLocalFile()) {
......@@ -98,11 +99,9 @@ QUrl KonqMisc::konqFilteredURL(KonqMainWindow *parent, const QString &_url, cons
return KParts::BrowserRun::makeErrorUrl(KIO::ERR_MALFORMED_URL, _url, QUrl(_url));
}
const bool isKnownAbout = (_url == QLatin1String("about:blank")
|| _url == QLatin1String("about:plugins")
|| _url.startsWith(QLatin1String("about:konqueror")));
const bool isKnownAbout = KonqUrl::hasKnownPathRoot(_url);
return isKnownAbout ? QUrl(_url) : QUrl(QStringLiteral("about:"));
return isKnownAbout ? QUrl(_url) : KonqUrl::url(KonqUrl::Type::NoPath);
}
QString KonqMisc::encodeFilename(QString filename)
......
......@@ -7,7 +7,7 @@
<group name="UserSettings">
<entry key="StartURL" type="Path">
<default>about:konqueror</default>
<default>konq:konqueror</default>
<label>Start Page</label>
<whatsthis>This is the URL of the web page where Konqueror will start from.</whatsthis>
</entry>
......
/*
* This file is part of the KDE project.
*
* Copyright (C) 2020 Stefano Crocco <stefano.crocco@alice.it>
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "konqurl.h"
namespace KonqUrl {
QLatin1String string(KonqUrl::Type type)
{
static QLatin1String s_konqUrls[] = {
QLatin1String("konq:"),
QLatin1String("konq:blank"),
QLatin1String("konq:konqueror"),
QLatin1String("konq:konqueror/launch"),
QLatin1String("konq:konqueror/specs"),
QLatin1String("konq:konqueror/intro"),
QLatin1String("konq:konqueror/tips"),
QLatin1String("konq:plugins"),
};
return s_konqUrls[static_cast<int>(type)];
}
QLatin1String scheme()
{
static QLatin1String s_konqScheme = QLatin1String("konq");
return s_konqScheme;
}
QUrl url(KonqUrl::Type type) {
return QUrl(string(type));
}
bool hasKonqScheme(const QUrl& url)
{
return url.scheme() == scheme();
}
bool canBeKonqUrl(const QString &url) {
return url.startsWith(string(Type::NoPath));
}
bool hasKnownPathRoot(const QString &url) {
return url == string(Type::Blank) || url == string(Type::Plugins) || url.startsWith(string(Type::Konqueror));
}
bool isValidNotBlank(const QString &url) {
return url == string(Type::NoPath) || url == string(Type::Plugins) || url.startsWith(string(Type::Konqueror));
}
bool isValidNotBlank(const QUrl &url) {
return isValidNotBlank(url.url());
}
bool isKonqBlank(const QString &url) {
return url == string(Type::Blank);
}
bool isKonqBlank(const QUrl &url) {
return url.url() == string(Type::Blank);
}
}
/*
* This file is part of the KDE project.
*
* Copyright (C) 2020 Stefano Crocco <stefano.crocco@alice.it>
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License, or (at your
* option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef KONQURL_H
#define KONQURL_H
#include <QLatin1String>
#include <QString>
#include <QUrl>
namespace KonqUrl {
enum class Type{
NoPath,
Blank,
Konqueror,
Launch,
Specs,
Intro,
Tips,
Plugins
};
QLatin1String scheme();
QLatin1String string(Type type = Type::NoPath);
QUrl url(Type type = Type::NoPath);
bool hasKonqScheme(const QUrl &url);
bool canBeKonqUrl(const QString &url);
bool hasKnownPathRoot(const QString &url);
bool isValidNotBlank(const QString &url);
bool isValidNotBlank(const QUrl &url);
bool isKonqBlank(const QString &url);
bool isKonqBlank(const QUrl &url);
};
#endif // KONQURL_H
......@@ -29,6 +29,7 @@
#include "konqsettingsxt.h"
#include "konqframevisitor.h"
#include <konq_events.h>
#include "konqurl.h"
#include <QFileInfo>
#include <QDBusMessage>
......@@ -911,7 +912,7 @@ void KonqViewManager::loadViewConfigFromGroup(const KConfigGroup &profileGroup,
clear();
if (forcedUrl.url() != QLatin1String("about:blank")) {
if (!KonqUrl::isKonqBlank(forcedUrl)) {
loadRootItem(profileGroup, m_pMainWindow, defaultURL, openUrl && forcedUrl.isEmpty(), forcedUrl, req.serviceName);
} else {
// ## in this case we won't resize the window, so bool resetWindow could be useful after all?
......@@ -1134,7 +1135,7 @@ void KonqViewManager::loadItem(const KConfigGroup &cfg, KonqFrameContainerBase *
serviceType = cfg.readEntry(QStringLiteral("ServiceType").prepend(prefix), QStringLiteral("inode/directory"));
serviceName = cfg.readEntry(QStringLiteral("ServiceName").prepend(prefix), QString());
if (serviceName == QLatin1String("konq_aboutpage")) {
if ((!forcedUrl.isEmpty() && forcedUrl.scheme() != QLatin1String("about")) ||
if ((!forcedUrl.isEmpty() && !KonqUrl::hasKonqScheme(forcedUrl)) ||
(forcedUrl.isEmpty() && openUrl == false)) { // e.g. window.open
// No point in loading the about page if we're going to replace it with a KHTML part right away
serviceType = QStringLiteral("text/html");
......@@ -1186,9 +1187,9 @@ void KonqViewManager::loadItem(const KConfigGroup &cfg, KonqFrameContainerBase *
const QString urlKey = QStringLiteral("URL").prepend(prefix);
QUrl url;
if (cfg.hasKey(urlKey)) {
url = QUrl(cfg.readPathEntry(urlKey, QStringLiteral("about:blank")));
url = QUrl(cfg.readPathEntry(urlKey, KonqUrl::string(KonqUrl::Type::Blank)));
} else if (urlKey == QLatin1String("empty_URL")) { // old stuff, not in use anymore
url = QUrl(QStringLiteral("about:blank"));
url = KonqUrl::url(KonqUrl::Type::Blank);
} else {
url = defaultURL;
}
......@@ -1198,7 +1199,7 @@ void KonqViewManager::loadItem(const KConfigGroup &cfg, KonqFrameContainerBase *
//childView->openUrl( url, url.toDisplayString() );
// We need view-follows-view (for the dirtree, for instance)
KonqOpenURLRequest req;
if (url.scheme() != QLatin1String("about")) {
if (!KonqUrl::hasKonqScheme(url)) {
req.typedUrl = url.toDisplayString();
}
m_pMainWindow->openView(serviceType, url, childView, req);
......
......@@ -25,6 +25,7 @@ set(kwebenginepartlib_LIB_SRCS
ui/searchbar.cpp
ui/passwordbar.cpp
ui/featurepermissionbar.cpp
about/konq_aboutpage.cpp
)
if(NOT Qt5WebEngineWidgets_VERSION VERSION_LESS "5.12.0")
......@@ -82,3 +83,5 @@ install(FILES webenginepart.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR})
install(FILES webenginepart.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/webenginepart)
install(FILES error.html DESTINATION ${KDE_INSTALL_DATADIR}/webenginepart)
add_subdirectory(about)
add_library(konq_aboutpage MODULE konq_aboutpage.cpp)
target_link_libraries(konq_aboutpage
KF5::KHtml
KF5::IconThemes
Qt5::Widgets
)
install(TARGETS konq_aboutpage DESTINATION ${KDE_INSTALL_PLUGINDIR})
install(FILES
top-left-konqueror.png
launch.html
......@@ -18,5 +8,3 @@ install(FILES
plugins_rtl.html
konq.css
DESTINATION ${KDE_INSTALL_DATADIR}/konqueror/about)
install(FILES konqaboutpage.desktop DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR})
install(FILES konq_aboutpage.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR})
......@@ -41,10 +41,10 @@
%6<br />
<!-- Konqueror is your file manager, web browser and universal document viewer. -->
<ul>
<li><a href="about:konqueror">%7</a><!--launch--></li>
<li><a href="konq:konqueror">%7</a><!--launch--></li>
<li><a class="selected">%8<!-- introduction --></a></li>
<li><a href="about:konqueror/tips">%9<!--tips--></a></li>
<li><a href="about:konqueror/specs">%10<!-- specs --></a></li>
<li><a href="konq:konqueror/tips">%9<!--tips--></a></li>
<li><a href="konq:konqueror/specs">%10<!-- specs --></a></li>
</ul>
</div>
</div>
......@@ -70,7 +70,7 @@
%15</p>
<p><!--For more detailed documentation on Konqueror click here --></p>
<p id="nextlink"><a href="about:konqueror/tips">%16&nbsp;%18
<p id="nextlink"><a href="konq:konqueror/tips">%16&nbsp;%18
<!-- Continue --></a></p>
</div>
</div>
......
......@@ -5,16 +5,14 @@
#include <QSaveFile>
#include <QStandardPaths>
#include <QTextCodec>
#include <QTextStream>
#include <QUrl>
#include <QDebug>
#include <QBuffer>
#include <QWebEngineUrlRequestJob>
#include <kaboutdata.h>
#include <kactioncollection.h>
#include <kiconloader.h>
#include <klocalizedstring.h>
#include <kmessagebox.h>
#include <kpluginfactory.h>
#include <ktoolinvocation.h>
K_PLUGIN_FACTORY(KonqAboutPageFactory, registerPlugin<KonqAboutPage>();)
#include <KI18n/KLocalizedString>
Q_GLOBAL_STATIC(KonqAboutPageSingleton, s_staticData)
......@@ -35,7 +33,7 @@ static QString loadFile(const QString &file)
res = t.readAll();
// otherwise all embedded objects are referenced as about:/...
// otherwise all embedded objects are referenced as konq/...
QString basehref = QLatin1String("<BASE HREF=\"file:") +
file.left(file.lastIndexOf('/')) +
QLatin1String("/\">\n");
......@@ -216,7 +214,7 @@ QString KonqAboutPageSingleton::specs()
.arg(i18n("Enable Java (globally) <A HREF=\"%1\">here</A>.", QStringLiteral("exec:/kcmshell5 khtml_java_js"))) // TODO Maybe test if Java is enabled ?