Files
racket-webview/rktwebview_qt/webviewwindow.cpp
2026-03-03 09:39:15 +01:00

60 lines
1.8 KiB
C++

#include "webviewwindow.h"
#include "webviewqt.h"
#include "rktwebview_qt.h"
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
void WebviewWindow::processJsEvents()
{
QWebEnginePage *p = _view->page();
p->runJavaScript("window.getPendingEvents();",
[this](const QVariant &v) {
QString s = v.toString();
QJsonParseError err;
QJsonDocument doc(QJsonDocument::fromJson(s.toUtf8(), &err));
if (err.error == QJsonParseError::NoError) {
QJsonArray a = doc.array();
int i, N;
for(i = 0, N = a.size(); i < N; i++) {
QJsonObject evt = a[i].toObject();
QJsonDocument doc_out(evt);
QString msg = doc_out.toJson(QJsonDocument::JsonFormat::Compact);
this->_container->triggerJsEvent(_view->id(), msg);
}
}
}
);
}
void WebviewWindow::closeEvent(QCloseEvent *evt)
{
_container->removeView(_view->id());
}
void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c)
{
_container = c;
_view = v;
this->setCentralWidget(v);
QWebEnginePage *page = _view->page();
connect(page, &QWebEnginePage::loadFinished, this, [this](bool ok) {
_container->pageLoaded(_view->id(), ok);
});
}
WebViewQt *WebviewWindow::view()
{
return _view;
}
WebviewWindow::WebviewWindow(QWidget *parent)
: QMainWindow{parent}
{
_view = nullptr;
connect(&_process_js_events, &QTimer::timeout, this, &WebviewWindow::processJsEvents);
}