7#include "webenginepage.h"
8#include "webenginemanagescript.h"
11#include <KLocalizedString>
13#include <KColorScheme>
16#include <QGuiApplication>
20#include <QWebEngineDownloadRequest>
21#include <QWebEngineProfile>
22#include <QWebEngineScriptCollection>
23#include <QWebEngineView>
25using namespace WebEngineViewer;
27class WebEnginePage::Private
30 std::optional<QPalette> lastPalette;
31 std::optional<KColorScheme> lastColorScheme;
32 QWebEngineScript refreshScript;
36 : QWebEnginePage(new QWebEngineProfile, parent)
53 profile()->setParent(
this);
59 : QWebEnginePage(profile, parent)
67void WebEnginePage::init()
69 connect(profile(), &QWebEngineProfile::downloadRequested,
this, &WebEnginePage::saveHtml);
70 qGuiApp->installEventFilter(
this);
73 d->refreshScript.setName(QStringLiteral(
"injectColorScheme"));
74 d->refreshScript.setSourceCode(refreshCssVariablesScript());
75 d->refreshScript.setInjectionPoint(QWebEngineScript::DocumentReady);
76 d->refreshScript.setRunsOnSubFrames(
true);
77 d->refreshScript.setWorldId(QWebEngineScript::ApplicationWorld);
78 scripts().insert(d->refreshScript);
89 auto cssVariablesScript = refreshCssVariablesScript();
90 runJavaScript(cssVariablesScript, WebEngineViewer::WebEngineManageScript::scriptWordId());
92 d->refreshScript.setSourceCode(cssVariablesScript);
93 scripts().remove(d->refreshScript);
94 scripts().insert(d->refreshScript);
99QString WebEnginePage::refreshCssVariablesScript()
102 auto palette = qGuiApp->palette();
103 if (!d->lastColorScheme || !d->lastPalette || palette != d->lastPalette) {
104 d->lastPalette = palette;
108 const auto script = QStringLiteral(R
"RAW(
110 const root = document.querySelector(':root');
111 root.style.setProperty('--kcolorscheme-background', '%1');
112 root.style.setProperty('--kcolorscheme-text', '%2');
113 root.style.setProperty('--kcolorscheme-highlight', '%3');
114 root.style.setProperty('--kcolorscheme-highlight-text', '%4');
115 root.style.setProperty('--kcolorscheme-accent', '%5');
116 root.style.setProperty('--kcolorscheme-positive-text', '%6');
117 root.style.setProperty('--kcolorscheme-positive-background', '%7');
118 root.style.setProperty('--kcolorscheme-neutral-text', '%8');
119 root.style.setProperty('--kcolorscheme-neutral-background', '%9');
120 root.style.setProperty('--kcolorscheme-negative-text', '%10');
121 root.style.setProperty('--kcolorscheme-negative-background', '%11');
122 root.style.setProperty('--kcolorscheme-active-text', '%12');
123 root.style.setProperty('--kcolorscheme-active-background', '%13');
124 root.style.setProperty('--kcolorscheme-text-disabled', '%14');
125 root.style.setProperty('--kcolorscheme-text-link', '%15');
130 palette.highlight().color().name(),
131 palette.highlightedText().color().name(),
132 palette.accent().color().name(),
149 return new WebHitTest(
this, mapToViewport(pos), pos);
152QPoint WebEnginePage::mapToViewport(
const QPoint &pos)
const
154 return QPoint(pos.
x() / zoomFactor(), pos.
y() / zoomFactor());
157void WebEnginePage::saveHtml(QWebEngineDownloadRequest *download)
161 download->setSavePageFormat(QWebEngineDownloadRequest::SingleHtmlSaveFormat);
163 download->setDownloadFileName(
QFileInfo(fileName).fileName());
168bool WebEnginePage::acceptNavigationRequest(
const QUrl &url, NavigationType type,
bool isMainFrame)
170 if (isMainFrame && type == NavigationTypeLinkClicked) {
171 Q_EMIT urlClicked(url);
177void WebEnginePage::javaScriptConsoleMessage(QWebEnginePage::JavaScriptConsoleMessageLevel level,
185 qDebug() <<
"WebEnginePage::javaScriptConsoleMessage lineNumber: " << lineNumber <<
" message: " << message;
186 Q_EMIT showConsoleMessage(message);
189#include "moc_webenginepage.cpp"
~WebEnginePage() override
Destructor.
WebEnginePage(QObject *parent=nullptr)
Constructor.
QString i18n(const char *text, const TYPE &arg...)
AKONADI_CALENDAR_EXPORT KCalendarCore::Event::Ptr event(const Akonadi::Item &item)
QString path(const QString &relativePath)
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, Options options)
virtual bool eventFilter(QObject *watched, QEvent *event)
bool isEmpty() const const