From 5b423e9aea7bc672b879359871a5c4c2b8a50e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Reucher?= Date: Tue, 31 May 2022 19:20:34 +0200 Subject: [PATCH] wip: first version with support for QWebEngine instead of QWebKit --- qmc2.pro | 2 +- src/htmleditor/htmleditor.cpp | 178 ++++++++++++++++++++-------------- src/htmleditor/htmleditor.ui | 74 +++++++------- src/macros.h | 3 - src/miniwebbrowser.cpp | 171 +++++++++++++++++--------------- src/miniwebbrowser.h | 15 ++- src/options.cpp | 19 ++-- src/qmc2main.cpp | 12 ++- 9 files changed, 261 insertions(+), 218 deletions(-) diff --git a/qmc2.pro b/qmc2.pro index 46c736d60..15eae4c44 100644 --- a/qmc2.pro +++ b/qmc2.pro @@ -1,6 +1,6 @@ # general project settings isEmpty(TARGET):TARGET = qmc2 -QT += core gui widgets xml xmlpatterns network sql svg testlib webkitwidgets +QT += core gui widgets xml xmlpatterns network sql svg testlib webenginewidgets win32 { QT += winextras } diff --git a/src/htmleditor/htmleditor.cpp b/src/htmleditor/htmleditor.cpp index 2dff0d3cc..deb0f747b 100644 --- a/src/htmleditor/htmleditor.cpp +++ b/src/htmleditor/htmleditor.cpp @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include #include // std::sort() @@ -120,7 +120,6 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : { ui->setupUi(this); - // replace the standard QWebView with the MiniWebBrowser's tweaked one ui->verticalLayoutWYSIWYG->removeWidget(ui->webView); delete ui->webView; ui->webView = new BrowserWidget(ui->tabWYSIWYG, 0); @@ -224,6 +223,7 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : connect(zoomSlider, SIGNAL(valueChanged(int)), SLOT(changeZoom(int))); ui->standardToolBar->insertWidget(ui->actionZoomIn, zoomSlider); + /* #if defined(QMC2_BROWSER_PLUGINS_ENABLED) ui->webView->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true); #else @@ -231,6 +231,7 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : #endif ui->webView->page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, false); ui->webView->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); + */ connect(ui->webView, SIGNAL(loadStarted()), this, SLOT(setLoadActive())); connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(setLoadInactive())); @@ -260,19 +261,17 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : connect(ui->actionZoomOut, SIGNAL(triggered()), SLOT(zoomOut())); connect(ui->actionZoomIn, SIGNAL(triggered()), SLOT(zoomIn())); - // these are forwarded to the internal QWebView - FORWARD_ACTION(ui->actionEditUndo, QWebPage::Undo); - FORWARD_ACTION(ui->actionEditRedo, QWebPage::Redo); - FORWARD_ACTION(ui->actionEditCut, QWebPage::Cut); - FORWARD_ACTION(ui->actionEditCopy, QWebPage::Copy); - FORWARD_ACTION(ui->actionEditPaste, QWebPage::Paste); - FORWARD_ACTION(ui->actionFormatBold, QWebPage::ToggleBold); - FORWARD_ACTION(ui->actionFormatItalic, QWebPage::ToggleItalic); - FORWARD_ACTION(ui->actionFormatUnderline, QWebPage::ToggleUnderline); - - // Qt 4.5.0 has a bug: always returns 0 for QWebPage::SelectAll - connect(ui->actionEditSelectAll, SIGNAL(triggered()), SLOT(editSelectAll())); - // FIXME: still required? + // these are forwarded to the internal QWebEngineView + FORWARD_ACTION(ui->actionEditUndo, QWebEnginePage::Undo); + FORWARD_ACTION(ui->actionEditRedo, QWebEnginePage::Redo); + FORWARD_ACTION(ui->actionEditCut, QWebEnginePage::Cut); + FORWARD_ACTION(ui->actionEditCopy, QWebEnginePage::Copy); + FORWARD_ACTION(ui->actionEditPaste, QWebEnginePage::Paste); + /* + FORWARD_ACTION(ui->actionFormatBold, QWebEnginePage::ToggleBold); + FORWARD_ACTION(ui->actionFormatItalic, QWebEnginePage::ToggleItalic); + FORWARD_ACTION(ui->actionFormatUnderline, QWebEnginePage::ToggleUnderline); + */ connect(ui->actionStyleParagraph, SIGNAL(triggered()), SLOT(styleParagraph())); connect(ui->actionStyleHeading1, SIGNAL(triggered()), SLOT(styleHeading1())); @@ -310,27 +309,31 @@ HtmlEditor::HtmlEditor(QString editorName, bool embedded, QWidget *parent) : connect(ui->webView->page(), SIGNAL(linkHovered(const QString &, const QString &, const QString &)), SLOT(linkHovered(const QString &, const QString &, const QString &))); // this effectively *disables* internal link-following - ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + //ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); connect(ui->webView, SIGNAL(linkClicked(QUrl)), SLOT(openLink(QUrl))); - ui->webView->pageAction(QWebPage::OpenImageInNewWindow)->setVisible(false); - ui->webView->pageAction(QWebPage::DownloadImageToDisk)->setVisible(false); - ui->webView->pageAction(QWebPage::OpenFrameInNewWindow)->setVisible(false); - ui->webView->pageAction(QWebPage::OpenLinkInNewWindow)->setVisible(false); - ui->webView->pageAction(QWebPage::OpenLink)->setVisible(false); - ui->webView->pageAction(QWebPage::DownloadLinkToDisk)->setVisible(false); - ui->webView->pageAction(QWebPage::Back)->setVisible(false); - ui->webView->pageAction(QWebPage::Forward)->setVisible(false); - ui->webView->pageAction(QWebPage::Stop)->setVisible(false); - ui->webView->pageAction(QWebPage::Reload)->setVisible(false); + //ui->webView->pageAction(QWebEnginePage::OpenImageInNewWindow)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::DownloadImageToDisk)->setVisible(false); + //ui->webView->pageAction(QWebEnginePage::OpenFrameInNewWindow)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::OpenLinkInNewWindow)->setVisible(false); + //ui->webView->pageAction(QWebEnginePage::OpenLink)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::DownloadLinkToDisk)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::Back)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::Forward)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::Stop)->setVisible(false); + ui->webView->pageAction(QWebEnginePage::Reload)->setVisible(false); ui->webView->setFocus(); - ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); + if ( actionReadOnly->isChecked() ) + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); + else + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); if ( !actionShowHTML->isChecked() ) showHtmlTab(false); - connect(ui->webView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); + // FIXME + //connect(ui->webView->page(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); changeZoom(qmc2Config->value(QMC2_FRONTEND_PREFIX + QString("HtmlEditor/%1/Zoom").arg(myEditorName), 100).toInt()); @@ -399,22 +402,26 @@ void HtmlEditor::loadFinished(bool) void HtmlEditor::setContentEditable(bool readonly) { - ui->webView->page()->setContentEditable(!readonly); + if ( readonly ) + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); + else + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); ui->plainTextEdit->setReadOnly(readonly); } void HtmlEditor::checkRevertStatus() { if ( !fileName.isEmpty() ) { - bool wasModified; - if ( loadedContent.isEmpty() ) - wasModified = false; - else if ( ui->tabWidget->currentIndex() == 0 ) - wasModified = loadedContent != ui->webView->page()->mainFrame()->toHtml(); - else + bool wasModified = !loadedContent.isEmpty(); + if ( ui->tabWidget->currentIndex() == 0 ) { + QString data("%1"); + ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); + wasModified = loadedContent != data; + } else wasModified = loadedContent != ui->plainTextEdit->toPlainText(); - - if ( ui->webView->page()->mainFrame()->toHtml() != emptyContent && wasModified ) { + QString data("%1"); + ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); + if ( data != emptyContent && wasModified ) { QFile f(fileName); ui->actionFileRevert->setVisible(f.exists()); } else @@ -446,13 +453,16 @@ QString &HtmlEditor::noScript(QString &data) void HtmlEditor::fileNew() { - ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); + if ( actionReadOnly->isChecked() ) + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); + else + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); if ( !isEmbeddedEditor ) setCurrentFileName(QString()); - // quirk in QWebView: need an initial mouse click to show the cursor + // quirk in QWebEngineView: need an initial mouse click to show the cursor int mx = ui->webView->width() / 2; int my = ui->webView->height() / 2; QPoint center = QPoint(mx, my); @@ -510,11 +520,12 @@ void HtmlEditor::fileOpenInBrowser() } connect(webBrowser->webViewBrowser->page(), SIGNAL(windowCloseRequested()), webBrowser, SLOT(close())); if ( ui->tabWidget->currentIndex() == 1 ) { - ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); + ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); wysiwygDirty = false; } - QString data(ui->webView->page()->mainFrame()->toHtml()); - webBrowser->webViewBrowser->setHtml(noScript(data)); + QString data("%1"); + webBrowser->webViewBrowser->page()->toHtml([data](const QString &result) { data.arg(result); }); + webBrowser->webViewBrowser->page()->setHtml(noScript(data)); if ( !fileName.isEmpty() && QFile(fileName).exists() ) { webBrowser->homeUrl = QUrl::fromUserInput(fileName); webBrowser->comboBoxURL->lineEdit()->setText(webBrowser->homeUrl.toString()); @@ -540,10 +551,11 @@ bool HtmlEditor::fileSave() bool success = file.open(QIODevice::WriteOnly); if ( success ) { if ( ui->tabWidget->currentIndex() == 1 ) { - ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); + ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); wysiwygDirty = false; } - QString content(ui->webView->page()->mainFrame()->toHtml()); + QString content("%1"); + ui->webView->page()->toHtml([content](const QString &result) { content.arg(result); }); QTextStream ts(&file); ts << noScript(content); ts.flush(); @@ -572,10 +584,11 @@ bool HtmlEditor::fileSaveAs() bool success = file.open(QIODevice::WriteOnly); if ( success ) { if ( ui->tabWidget->currentIndex() == 1 ) { - ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); + ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); wysiwygDirty = false; } - QString content(ui->webView->page()->mainFrame()->toHtml()); + QString content("%1"); + ui->webView->page()->toHtml([content](const QString &result) { content.arg(result); }); QTextStream ts(&file); ts << noScript(content); ts.flush(); @@ -751,38 +764,41 @@ void HtmlEditor::zoomIn() void HtmlEditor::editSelectAll() { - ui->webView->triggerPageAction(QWebPage::SelectAll); + ui->webView->triggerPageAction(QWebEnginePage::SelectAll); } void HtmlEditor::execCommand(const QString &cmd) { - QWebFrame *frame = ui->webView->page()->mainFrame(); + QWebEnginePage *page = ui->webView->page(); QString js(QString("document.execCommand(\"%1\", false, null)").arg(cmd)); - frame->evaluateJavaScript(js); + page->runJavaScript(js); localModified = true; } void HtmlEditor::execCommand(const QString &cmd, const QString &arg) { - QWebFrame *frame = ui->webView->page()->mainFrame(); + QWebEnginePage *page = ui->webView->page(); QString js(QString("document.execCommand(\"%1\", false, \"%2\")").arg(cmd).arg(arg)); - frame->evaluateJavaScript(js); + page->runJavaScript(js); localModified = true; } bool HtmlEditor::queryCommandState(const QString &cmd) { - QWebFrame *frame = ui->webView->page()->mainFrame(); + QWebEnginePage *page = ui->webView->page(); QString js(QString("document.queryCommandState(\"%1\", false, null)").arg(cmd)); - QVariant result = frame->evaluateJavaScript(js); - return result.toString().simplified().toLower() == "true"; + QString result("%1"); + page->runJavaScript(js, [result](const QVariant &r) { result.arg(r.toString()); }); + return result.simplified().toLower() == "true"; } void HtmlEditor::styleParagraph() { execCommand("formatBlock", "p"); if ( generateEmptyContent ) { - emptyContent = ui->webView->page()->mainFrame()->toHtml(); + QString data("%1"); + ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); + emptyContent = data; generateEmptyContent = false; } } @@ -907,14 +923,16 @@ void HtmlEditor::formatBackgroundColor() void HtmlEditor::adjustActions() { - FOLLOW_ENABLE(ui->actionEditUndo, QWebPage::Undo); - FOLLOW_ENABLE(ui->actionEditRedo, QWebPage::Redo); - FOLLOW_ENABLE(ui->actionEditCut, QWebPage::Cut); - FOLLOW_ENABLE(ui->actionEditCopy, QWebPage::Copy); - FOLLOW_ENABLE(ui->actionEditPaste, QWebPage::Paste); - FOLLOW_CHECK(ui->actionFormatBold, QWebPage::ToggleBold); - FOLLOW_CHECK(ui->actionFormatItalic, QWebPage::ToggleItalic); - FOLLOW_CHECK(ui->actionFormatUnderline, QWebPage::ToggleUnderline); + FOLLOW_ENABLE(ui->actionEditUndo, QWebEnginePage::Undo); + FOLLOW_ENABLE(ui->actionEditRedo, QWebEnginePage::Redo); + FOLLOW_ENABLE(ui->actionEditCut, QWebEnginePage::Cut); + FOLLOW_ENABLE(ui->actionEditCopy, QWebEnginePage::Copy); + FOLLOW_ENABLE(ui->actionEditPaste, QWebEnginePage::Paste); + /* + FOLLOW_CHECK(ui->actionFormatBold, QWebEnginePage::ToggleBold); + FOLLOW_CHECK(ui->actionFormatItalic, QWebEnginePage::ToggleItalic); + FOLLOW_CHECK(ui->actionFormatUnderline, QWebEnginePage::ToggleUnderline); + */ ui->actionFormatStrikethrough->setChecked(queryCommandState("strikeThrough")); ui->actionFormatNumberedList->setChecked(queryCommandState("insertOrderedList")); @@ -940,7 +958,7 @@ void HtmlEditor::changeTab(int index) switch ( index ) { case 0: if ( wysiwygDirty ) { - ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); + ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); wysiwygDirty = false; } break; @@ -948,7 +966,9 @@ void HtmlEditor::changeTab(int index) case 1: if ( htmlDirty ) { ui->plainTextEdit->blockSignals(true); - ui->plainTextEdit->setPlainText(ui->webView->page()->mainFrame()->toHtml()); + QString data("%1"); + ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); + ui->plainTextEdit->setPlainText(data); ui->plainTextEdit->blockSignals(false); htmlDirty = false; } @@ -1021,7 +1041,10 @@ bool HtmlEditor::load(const QString &f) loadedContent = data; ui->webView->setHtml(data); - ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); + if ( actionReadOnly->isChecked() ) + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); + else + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); if ( fileName.isEmpty() ) @@ -1093,11 +1116,16 @@ bool HtmlEditor::loadTemplate(const QString &f) } if ( !qmc2CleaningUp && !stopLoading ) { ui->webView->setHtml(data, QUrl::fromLocalFile(f)); - ui->webView->page()->setContentEditable(!actionReadOnly->isChecked()); + if ( actionReadOnly->isChecked() ) + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = false"); + else + ui->webView->page()->runJavaScript("document.documentElement.contentEditable = true"); ui->plainTextEdit->setReadOnly(actionReadOnly->isChecked()); if ( fileName.isEmpty() ) setCurrentFileName(f); - emptyContent = ui->webView->page()->mainFrame()->toHtml(); + QString data("%1"); + ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); + emptyContent = data; adjustHTML(); } else emptyContent = "QMC2_INVALID"; @@ -1107,8 +1135,9 @@ bool HtmlEditor::loadTemplate(const QString &f) void HtmlEditor::javaScriptWindowObjectCleared() { - ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("qmc2NotesEditorObject", this); - ui->webView->page()->mainFrame()->addToJavaScriptWindowObject("qmc2NEO", this); + // FIXME + //ui->webView->page()->addToJavaScriptWindowObject("qmc2NotesEditorObject", this); + //ui->webView->page()->addToJavaScriptWindowObject("qmc2NEO", this); } QString HtmlEditor::getIconData() @@ -1627,18 +1656,17 @@ bool HtmlEditor::save() if ( emptyContent == "QMC2_INVALID" ) return true; - if ( !ui->webView->page()->isModified() && !ui->plainTextEdit->document()->isModified() && !localModified ) - return true; - if ( fileName.isEmpty() ) return false; if ( ui->tabWidget->currentIndex() == 1 ) { - ui->webView->page()->mainFrame()->setHtml(ui->plainTextEdit->toPlainText()); + ui->webView->page()->setHtml(ui->plainTextEdit->toPlainText()); wysiwygDirty = false; } - loadedContent = ui->webView->page()->mainFrame()->toHtml(); + QString data("%1"); + ui->webView->page()->toHtml([data](const QString &result) { data.arg(result); }); + loadedContent = data; if ( loadedContent == emptyContent ) { QFile f(fileName); diff --git a/src/htmleditor/htmleditor.ui b/src/htmleditor/htmleditor.ui index 8f64543bb..1bdab5bfa 100644 --- a/src/htmleditor/htmleditor.ui +++ b/src/htmleditor/htmleditor.ui @@ -41,7 +41,7 @@ 0 - + about:blank @@ -107,7 +107,7 @@ Insert &image - + :/htmleditor/images/image-x-generic.png:/htmleditor/images/image-x-generic.png @@ -236,7 +236,7 @@ - + :/htmleditor/images/document-new.png:/htmleditor/images/document-new.png @@ -254,7 +254,7 @@ - + :/htmleditor/images/document-new.png:/htmleditor/images/document-new.png @@ -272,7 +272,7 @@ - + :/htmleditor/images/edit-undo.png:/htmleditor/images/edit-undo.png @@ -290,7 +290,7 @@ - + :/htmleditor/images/document-open.png:/htmleditor/images/document-open.png @@ -308,7 +308,7 @@ - + :/htmleditor/images/document-save.png:/htmleditor/images/document-save.png @@ -326,7 +326,7 @@ - + :/data/img/filesaveas.png:/data/img/filesaveas.png @@ -344,7 +344,7 @@ - + :/data/img/browser.png:/data/img/browser.png @@ -362,7 +362,7 @@ - + :/htmleditor/images/edit-undo.png:/htmleditor/images/edit-undo.png @@ -374,7 +374,7 @@ - + :/htmleditor/images/edit-redo.png:/htmleditor/images/edit-redo.png @@ -386,7 +386,7 @@ - + :/htmleditor/images/edit-cut.png:/htmleditor/images/edit-cut.png @@ -398,7 +398,7 @@ - + :/htmleditor/images/edit-copy.png:/htmleditor/images/edit-copy.png @@ -410,7 +410,7 @@ - + :/htmleditor/images/edit-paste.png:/htmleditor/images/edit-paste.png @@ -422,7 +422,7 @@ - + :/htmleditor/images/edit-select-all.png:/htmleditor/images/edit-select-all.png @@ -437,7 +437,7 @@ true - + :/htmleditor/images/format-text-bold.png:/htmleditor/images/format-text-bold.png @@ -452,7 +452,7 @@ true - + :/htmleditor/images/format-text-italic.png:/htmleditor/images/format-text-italic.png @@ -467,7 +467,7 @@ true - + :/htmleditor/images/format-text-underline.png:/htmleditor/images/format-text-underline.png @@ -482,7 +482,7 @@ true - + :/htmleditor/images/format-text-strikethrough.png:/htmleditor/images/format-text-strikethrough.png @@ -494,7 +494,7 @@ - + :/htmleditor/images/format-justify-left.png:/htmleditor/images/format-justify-left.png @@ -506,7 +506,7 @@ - + :/htmleditor/images/format-justify-center.png:/htmleditor/images/format-justify-center.png @@ -518,7 +518,7 @@ - + :/htmleditor/images/format-justify-right.png:/htmleditor/images/format-justify-right.png @@ -530,7 +530,7 @@ - + :/htmleditor/images/format-justify-fill.png:/htmleditor/images/format-justify-fill.png @@ -542,7 +542,7 @@ - + :/htmleditor/images/format-indent-more.png:/htmleditor/images/format-indent-more.png @@ -554,7 +554,7 @@ - + :/htmleditor/images/format-indent-less.png:/htmleditor/images/format-indent-less.png @@ -569,7 +569,7 @@ true - + :/htmleditor/images/bulleted-list.png:/htmleditor/images/bulleted-list.png @@ -584,7 +584,7 @@ true - + :/htmleditor/images/numbered-list.png:/htmleditor/images/numbered-list.png @@ -596,7 +596,7 @@ - + :/htmleditor/images/document-open.png:/htmleditor/images/document-open.png @@ -608,7 +608,7 @@ - + :/htmleditor/images/text-html.png:/htmleditor/images/text-html.png @@ -620,7 +620,7 @@ - + :/htmleditor/images/text-html.png:/htmleditor/images/text-html.png @@ -632,7 +632,7 @@ - + :/htmleditor/images/list-remove.png:/htmleditor/images/list-remove.png @@ -644,7 +644,7 @@ - + :/htmleditor/images/list-add.png:/htmleditor/images/list-add.png @@ -733,7 +733,7 @@ - + :/htmleditor/images/insert-html.png:/htmleditor/images/insert-html.png @@ -751,7 +751,7 @@ - + :/htmleditor/images/insert-table.png:/htmleditor/images/insert-table.png @@ -769,13 +769,13 @@ - QWebView + QWebEngineView QWidget -
QtWebKitWidgets/QWebView
+
QWebEngineView
- + diff --git a/src/macros.h b/src/macros.h index a7b15451d..66b7534e7 100644 --- a/src/macros.h +++ b/src/macros.h @@ -558,9 +558,6 @@ // ProjectMESS base URL (default) #define QMC2_PROJECT_MESS_BASE_URL "http://www.progettoemma.net/mess/gioco.php?game=%1&list=%2" -// maximum number of pages held in QtWebKit's page cache -#define QMC2_BROWSER_CACHE_PAGES 100 - // type conversions #define QMC2_TO_UINT32(a) ((uchar)*((a) + 0) * (quint32)16777216ULL + \ (uchar)*((a) + 1) * (quint32)65536ULL + \ diff --git a/src/miniwebbrowser.cpp b/src/miniwebbrowser.cpp index c704088fb..b9dbddae4 100644 --- a/src/miniwebbrowser.cpp +++ b/src/miniwebbrowser.cpp @@ -4,9 +4,8 @@ #include #include #include -#include -#include -#include +#include +#include #include #include "settings.h" @@ -29,8 +28,6 @@ MiniWebBrowser::MiniWebBrowser(QWidget *parent, bool useAsPdfViewer) setObjectName("MiniWebBrowser"); m_isPdfViewer = useAsPdfViewer; - QWebSettings::setMaximumPagesInCache(QMC2_BROWSER_CACHE_PAGES); - if ( MiniWebBrowser::supportedSchemes.isEmpty() ) MiniWebBrowser::supportedSchemes << "http" << "ftp" << "file"; @@ -64,17 +61,16 @@ MiniWebBrowser::MiniWebBrowser(QWidget *parent, bool useAsPdfViewer) iconCache.setMaxCost(QMC2_BROWSER_ICONCACHE_SIZE); // we want the same global network access manager for all browsers - webViewBrowser->page()->setNetworkAccessManager(qmc2NetworkAccessManager); + //webViewBrowser->page()->setNetworkAccessManager(qmc2NetworkAccessManager); // we want to manipulate the link activation - webViewBrowser->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + //webViewBrowser->page()->setLinkDelegationPolicy(QWebEnginePage::DelegateAllLinks); // connect page actions we provide connect(webViewBrowser->page(), SIGNAL(downloadRequested(const QNetworkRequest &)), this, SLOT(processPageActionDownloadRequested(const QNetworkRequest &))); connect(webViewBrowser->page(), SIGNAL(unsupportedContent(QNetworkReply *)), this, SLOT(processPageActionHandleUnsupportedContent(QNetworkReply *))); connect(webViewBrowser->page(), SIGNAL(linkHovered(const QString &, const QString &, const QString &)), this, SLOT(webViewBrowser_linkHovered(const QString &, const QString &, const QString &))); connect(webViewBrowser->page(), SIGNAL(statusBarVisibilityChangeRequested(bool)), this, SLOT(webViewBrowser_statusBarVisibilityChangeRequested(bool))); - connect(webViewBrowser->page(), SIGNAL(frameCreated(QWebFrame *)), this, SLOT(webViewBrowser_frameCreated(QWebFrame *))); connect(webViewBrowser, SIGNAL(linkClicked(const QUrl)), this, SLOT(webViewBrowser_linkClicked(const QUrl))); connect(webViewBrowser, SIGNAL(urlChanged(const QUrl)), this, SLOT(webViewBrowser_urlChanged(const QUrl))); @@ -89,97 +85,103 @@ MiniWebBrowser::MiniWebBrowser(QWidget *parent, bool useAsPdfViewer) if ( isPdfViewer() ) { frameUrl->hide(); // hide all page actions - for (QWebPage::WebAction pa = QWebPage::OpenLink; pa != QWebPage::AlignRight; pa = static_cast(static_cast(pa) + 1)) { + /* + for (QWebEnginePage::WebAction pa = QWebEnginePage::Back; pa != QWebEnginePage::InsertUnorderedList; pa = static_cast(static_cast(pa) + 1)) { QAction *a= webViewBrowser->pageAction(pa); if ( a ) a->setVisible(false); } + */ } else { + /* // hide page actions we don't provide - webViewBrowser->pageAction(QWebPage::OpenFrameInNewWindow)->setVisible(false); + webViewBrowser->pageAction(QWebEnginePage::OpenFrameInNewWindow)->setVisible(false); // change provided page actions to better fit our usage / integrate into QMC2's look - webViewBrowser->pageAction(QWebPage::OpenLink)->setText(tr("Open link")); - webViewBrowser->pageAction(QWebPage::OpenLink)->setIcon(QIcon(QString::fromUtf8(":/data/img/fileopen.png"))); - webViewBrowser->pageAction(QWebPage::OpenLinkInNewWindow)->setText(tr("Open link in new window")); - webViewBrowser->pageAction(QWebPage::OpenLinkInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/browser.png"))); - webViewBrowser->pageAction(QWebPage::OpenImageInNewWindow)->setText(tr("Open image in new window")); - webViewBrowser->pageAction(QWebPage::OpenImageInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/thumbnail.png"))); - webViewBrowser->pageAction(QWebPage::DownloadLinkToDisk)->setText(tr("Save link as...")); - webViewBrowser->pageAction(QWebPage::DownloadLinkToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); - webViewBrowser->pageAction(QWebPage::CopyLinkToClipboard)->setText(tr("Copy link")); - webViewBrowser->pageAction(QWebPage::CopyLinkToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); - webViewBrowser->pageAction(QWebPage::DownloadImageToDisk)->setText(tr("Save image as...")); - webViewBrowser->pageAction(QWebPage::DownloadImageToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); - webViewBrowser->pageAction(QWebPage::CopyImageToClipboard)->setText(tr("Copy image")); - webViewBrowser->pageAction(QWebPage::CopyImageToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); - webViewBrowser->pageAction(QWebPage::CopyImageUrlToClipboard)->setText(tr("Copy image address")); - webViewBrowser->pageAction(QWebPage::Back)->setText(tr("Go back")); - webViewBrowser->pageAction(QWebPage::Back)->setIcon(QIcon(QString::fromUtf8(":/data/img/back.png"))); - webViewBrowser->pageAction(QWebPage::Forward)->setText(tr("Go forward")); - webViewBrowser->pageAction(QWebPage::Forward)->setIcon(QIcon(QString::fromUtf8(":/data/img/forward.png"))); - webViewBrowser->pageAction(QWebPage::Reload)->setText(tr("Reload")); - webViewBrowser->pageAction(QWebPage::Reload)->setIcon(QIcon(QString::fromUtf8(":/data/img/reload.png"))); - webViewBrowser->pageAction(QWebPage::Stop)->setText(tr("Stop")); - webViewBrowser->pageAction(QWebPage::Stop)->setIcon(QIcon(QString::fromUtf8(":/data/img/stop_browser.png"))); - webViewBrowser->pageAction(QWebPage::Copy)->setText(tr("Copy")); - webViewBrowser->pageAction(QWebPage::Copy)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); + webViewBrowser->pageAction(QWebEnginePage::OpenLink)->setText(tr("Open link")); + webViewBrowser->pageAction(QWebEnginePage::OpenLink)->setIcon(QIcon(QString::fromUtf8(":/data/img/fileopen.png"))); + webViewBrowser->pageAction(QWebEnginePage::OpenLinkInNewWindow)->setText(tr("Open link in new window")); + webViewBrowser->pageAction(QWebEnginePage::OpenLinkInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/browser.png"))); + webViewBrowser->pageAction(QWebEnginePage::OpenImageInNewWindow)->setText(tr("Open image in new window")); + webViewBrowser->pageAction(QWebEnginePage::OpenImageInNewWindow)->setIcon(QIcon(QString::fromUtf8(":/data/img/thumbnail.png"))); + webViewBrowser->pageAction(QWebEnginePage::DownloadLinkToDisk)->setText(tr("Save link as...")); + webViewBrowser->pageAction(QWebEnginePage::DownloadLinkToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); + webViewBrowser->pageAction(QWebEnginePage::CopyLinkToClipboard)->setText(tr("Copy link")); + webViewBrowser->pageAction(QWebEnginePage::CopyLinkToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); + webViewBrowser->pageAction(QWebEnginePage::DownloadImageToDisk)->setText(tr("Save image as...")); + webViewBrowser->pageAction(QWebEnginePage::DownloadImageToDisk)->setIcon(QIcon(QString::fromUtf8(":/data/img/filesaveas.png"))); + webViewBrowser->pageAction(QWebEnginePage::CopyImageToClipboard)->setText(tr("Copy image")); + webViewBrowser->pageAction(QWebEnginePage::CopyImageToClipboard)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); + webViewBrowser->pageAction(QWebEnginePage::CopyImageUrlToClipboard)->setText(tr("Copy image address")); + webViewBrowser->pageAction(QWebEnginePage::Back)->setText(tr("Go back")); + webViewBrowser->pageAction(QWebEnginePage::Back)->setIcon(QIcon(QString::fromUtf8(":/data/img/back.png"))); + webViewBrowser->pageAction(QWebEnginePage::Forward)->setText(tr("Go forward")); + webViewBrowser->pageAction(QWebEnginePage::Forward)->setIcon(QIcon(QString::fromUtf8(":/data/img/forward.png"))); + webViewBrowser->pageAction(QWebEnginePage::Reload)->setText(tr("Reload")); + webViewBrowser->pageAction(QWebEnginePage::Reload)->setIcon(QIcon(QString::fromUtf8(":/data/img/reload.png"))); + webViewBrowser->pageAction(QWebEnginePage::Stop)->setText(tr("Stop")); + webViewBrowser->pageAction(QWebEnginePage::Stop)->setIcon(QIcon(QString::fromUtf8(":/data/img/stop_browser.png"))); + webViewBrowser->pageAction(QWebEnginePage::Copy)->setText(tr("Copy")); + webViewBrowser->pageAction(QWebEnginePage::Copy)->setIcon(QIcon(QString::fromUtf8(":/data/img/editcopy.png"))); #if defined(QMC2_BROWSER_EXTRAS_ENABLED) - webViewBrowser->pageAction(QWebPage::InspectElement)->setText(tr("Inspect")); - webViewBrowser->pageAction(QWebPage::InspectElement)->setIcon(QIcon(QString::fromUtf8(":/data/img/inspect.png"))); + webViewBrowser->pageAction(QWebEnginePage::InspectElement)->setText(tr("Inspect")); + webViewBrowser->pageAction(QWebEnginePage::InspectElement)->setIcon(QIcon(QString::fromUtf8(":/data/img/inspect.png"))); #endif + */ // connect page actions to own routines - connect(webViewBrowser->pageAction(QWebPage::Back), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); - connect(webViewBrowser->pageAction(QWebPage::Forward), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); + connect(webViewBrowser->pageAction(QWebEnginePage::Back), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); + connect(webViewBrowser->pageAction(QWebEnginePage::Forward), SIGNAL(triggered()), this, SLOT(checkBackAndForward())); } // setup browser settings + /* webViewBrowser->page()->settings()->setIconDatabasePath(Options::configPath()); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::AutoLoadImages, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, true); #if defined(QMC2_BROWSER_JAVASCRIPT_ENABLED) - webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled, true); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptCanOpenWindows, true); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptCanAccessClipboard, true); #else - webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); #endif #if defined(QMC2_BROWSER_JAVA_ENABLED) - webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavaEnabled, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavaEnabled, true); #else - webViewBrowser->page()->settings()->setAttribute(QWebSettings::JavaEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::JavaEnabled, false); #endif #if defined(QMC2_BROWSER_PLUGINS_ENABLED) - webViewBrowser->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true); #else - webViewBrowser->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, false); #endif - webViewBrowser->page()->settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PrivateBrowsingEnabled, false); #if defined(QMC2_BROWSER_EXTRAS_ENABLED) - webViewBrowser->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DeveloperExtrasEnabled, true); #else - webViewBrowser->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DeveloperExtrasEnabled, false); #endif - webViewBrowser->page()->settings()->setAttribute(QWebSettings::LinksIncludedInFocusChain, false); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, false); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::PrintElementBackgrounds, false); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, false); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, false); - webViewBrowser->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::LinksIncludedInFocusChain, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::ZoomTextOnly, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::PrintElementBackgrounds, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::OfflineStorageDatabaseEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::OfflineWebApplicationCacheEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); #if defined(QMC2_BROWSER_PREFETCH_DNS_ENABLED) - webViewBrowser->page()->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DnsPrefetchEnabled, true); #else - webViewBrowser->page()->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, false); + webViewBrowser->page()->settings()->setAttribute(QWebEngineSettings::DnsPrefetchEnabled, false); #endif + */ connect(this, SIGNAL(titleChanged(QString &)), this, SLOT(changeTitle(QString &))); #if defined(QMC2_BROWSER_EXTRAS_ENABLED) - connect(webViewBrowser->pageAction(QWebPage::InspectElement), SIGNAL(triggered()), this, SLOT(postProcessPageActionInspect()), Qt::QueuedConnection); + connect(webViewBrowser->pageAction(QWebEnginePage::InspectElement), SIGNAL(triggered()), this, SLOT(postProcessPageActionInspect()), Qt::QueuedConnection); #endif // we want to detect/handle unsupported content - webViewBrowser->page()->setForwardUnsupportedContent(true); + //webViewBrowser->page()->setForwardUnsupportedContent(true); // status bar timeout connection connect(&statusTimer, SIGNAL(timeout()), this, SLOT(statusTimeout())); @@ -230,26 +232,32 @@ void MiniWebBrowser::on_toolButtonHighlight_clicked() void MiniWebBrowser::on_toolButtonNext_clicked() { + // FIXME + /* searchTimer.stop(); - webViewBrowser->page()->findText("", QWebPage::HighlightAllOccurrences); - QWebPage::FindFlags flags = QWebPage::FindWrapsAroundDocument; + webViewBrowser->page()->findText("", QWebEnginePage::HighlightAllOccurrences); + QWebEnginePage::FindFlags flags = QWebEnginePage::FindWrapsAroundDocument; if ( toolButtonCaseSensitive->isChecked() ) - flags |= QWebPage::FindCaseSensitively; + flags |= QWebEnginePage::FindCaseSensitively; webViewBrowser->page()->findText(iconLineEditSearch->text(), flags); if ( toolButtonHighlight->isChecked() ) - webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebPage::HighlightAllOccurrences); + webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebEnginePage::HighlightAllOccurrences); + */ } void MiniWebBrowser::on_toolButtonPrevious_clicked() { + // FIXME + /* searchTimer.stop(); - webViewBrowser->page()->findText("", QWebPage::HighlightAllOccurrences); - QWebPage::FindFlags flags = QWebPage::FindWrapsAroundDocument | QWebPage::FindBackward; + webViewBrowser->page()->findText("", QWebEnginePage::HighlightAllOccurrences); + QWebEnginePage::FindFlags flags = QWebEnginePage::FindWrapsAroundDocument | QWebEnginePage::FindBackward; if ( toolButtonCaseSensitive->isChecked() ) - flags |= QWebPage::FindCaseSensitively; + flags |= QWebEnginePage::FindCaseSensitively; webViewBrowser->page()->findText(iconLineEditSearch->text(), flags); if ( toolButtonHighlight->isChecked() ) - webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebPage::HighlightAllOccurrences); + webViewBrowser->page()->findText(iconLineEditSearch->text(), flags | QWebEnginePage::HighlightAllOccurrences); + */ } void MiniWebBrowser::on_toolButtonToggleSearchBar_clicked() @@ -287,6 +295,8 @@ void MiniWebBrowser::on_toolButtonForward_clicked() void MiniWebBrowser::hideEvent(QHideEvent *e) { #if defined(QMC2_BROWSER_EXTRAS_ENABLED) + // FIXME + /* foreach (QWidget *widget, QApplication::topLevelWidgets()) { if ( widget->inherits("QWebInspector") ) { QWebInspector *inspector = (QWebInspector *)widget; @@ -299,6 +309,7 @@ void MiniWebBrowser::hideEvent(QHideEvent *e) } } } + */ #endif if ( !e ) return; @@ -309,6 +320,8 @@ void MiniWebBrowser::hideEvent(QHideEvent *e) void MiniWebBrowser::postProcessPageActionInspect() { #if defined(QMC2_BROWSER_EXTRAS_ENABLED) + // FIXME + /* foreach (QWidget *widget, QApplication::topLevelWidgets()) { if ( widget->inherits("QWebInspector") ) { QWebInspector *inspector = (QWebInspector *)widget; @@ -318,6 +331,7 @@ void MiniWebBrowser::postProcessPageActionInspect() } } } + */ #endif } @@ -383,6 +397,7 @@ void MiniWebBrowser::webViewBrowser_linkClicked(const QUrl url) webBrowser->webViewBrowser->load(url); webBrowser->show(); } else { + /* QWebHitTestResult hitTest = webViewBrowser->page()->mainFrame()->hitTestContent(webViewBrowser->lastMouseClickPosition); if ( hitTest.linkTargetFrame() ) hitTest.linkTargetFrame()->load(url); @@ -390,6 +405,9 @@ void MiniWebBrowser::webViewBrowser_linkClicked(const QUrl url) webViewBrowser->load(url); webViewBrowser_urlChanged(url); } + */ + webViewBrowser->load(url); + webViewBrowser_urlChanged(url); } } QTimer::singleShot(0, this, SLOT(checkBackAndForward())); @@ -517,7 +535,7 @@ void MiniWebBrowser::webViewBrowser_iconChanged() if ( iconCache.contains(urlStr) ) pageIcon = *iconCache[urlStr]; if ( pageIcon.isNull() ) { - pageIcon = QWebSettings::iconForUrl(webViewBrowser->url()); + //pageIcon = QWebEngineSettings::iconForUrl(webViewBrowser->url()); if ( pageIcon.isNull() ) pageIcon = QIcon(QString::fromUtf8(":/data/img/browser.png")); else @@ -546,11 +564,6 @@ void MiniWebBrowser::webViewBrowser_statusBarVisibilityChangeRequested(bool visi progressBar->setVisible(visible); } -void MiniWebBrowser::webViewBrowser_frameCreated(QWebFrame *frame) -{ - // NOP -} - void MiniWebBrowser::statusTimeout() { statusTimer.stop(); @@ -652,11 +665,11 @@ void MiniWebBrowser::setStatus(QString statusMessage) updateGeometry(); } -QWebView *BrowserWidget::createWindow(QWebPage::WebWindowType type) +QWebEngineView *BrowserWidget::createWindow(QWebEnginePage::WebWindowType type) { MiniWebBrowser *webBrowser = new MiniWebBrowser(0); - if ( type == QWebPage::WebModalDialog ) - webBrowser->setWindowModality(Qt::ApplicationModal); + //if ( type == QWebEnginePage::WebModalDialog ) + // webBrowser->setWindowModality(Qt::ApplicationModal); webBrowser->setAttribute(Qt::WA_DeleteOnClose); if ( parentBrowser ) webBrowser->spinBoxZoom->setValue(parentBrowser->spinBoxZoom->value()); @@ -679,6 +692,6 @@ void BrowserWidget::wheelEvent(QWheelEvent *e) e->accept(); } else { e->ignore(); - QWebView::wheelEvent(e); + QWebEngineView::wheelEvent(e); } } diff --git a/src/miniwebbrowser.h b/src/miniwebbrowser.h index 4beaafeb3..945892a01 100644 --- a/src/miniwebbrowser.h +++ b/src/miniwebbrowser.h @@ -2,7 +2,7 @@ #define MINIWEBBROWSER_H #include -#include +#include #include #include #include @@ -13,7 +13,7 @@ class MiniWebBrowser; -class BrowserWidget : public QWebView +class BrowserWidget : public QWebEngineView { Q_OBJECT @@ -23,7 +23,7 @@ class BrowserWidget : public QWebView QTimer bwuDelayTimer; MiniWebBrowser *parentBrowser; - BrowserWidget(QWidget *parent, MiniWebBrowser *browserParent) : QWebView(parent) + BrowserWidget(QWidget *parent, MiniWebBrowser *browserParent) : QWebEngineView(parent) { bwuDelayTimer.setSingleShot(true); lastMouseClickPosition = QPoint(-1, -1); @@ -38,22 +38,22 @@ class BrowserWidget : public QWebView void mousePressEvent(QMouseEvent *e) { lastMouseClickPosition = e->pos(); - QWebView::mousePressEvent(e); + QWebEngineView::mousePressEvent(e); } void enterEvent(QEvent *e) { - QWebView::enterEvent(e); + QWebEngineView::enterEvent(e); mouseCurrentlyOnView = true; emit mouseOnView(true); } void leaveEvent(QEvent *e) { - QWebView::leaveEvent(e); + QWebEngineView::leaveEvent(e); mouseCurrentlyOnView = false; emit mouseOnView(false); } void wheelEvent(QWheelEvent *); - QWebView *createWindow(QWebPage::WebWindowType); + QWebEngineView *createWindow(QWebEnginePage::WebWindowType); }; class MiniWebBrowser : public QWidget, public Ui::MiniWebBrowser @@ -110,7 +110,6 @@ class MiniWebBrowser : public QWidget, public Ui::MiniWebBrowser void webViewBrowser_iconChanged(); void webViewBrowser_linkHovered(const QString &, const QString &, const QString &); void webViewBrowser_statusBarVisibilityChangeRequested(bool); - void webViewBrowser_frameCreated(QWebFrame *); void statusTimeout(); void adjustIconSizes(); void setStatus(QString); diff --git a/src/options.cpp b/src/options.cpp index 0e0ee627a..4c92135fc 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "options.h" #include "emuopt.h" @@ -207,7 +208,7 @@ Options::Options(QWidget *parent) : config = new Settings(QSettings::IniFormat, QSettings::UserScope, "qmc2"); - QWebSettings::enablePersistentStorage(userScopePath); + //QWebEngineSettings::enablePersistentStorage(userScopePath); setupUi(this); @@ -600,14 +601,14 @@ void Options::apply() tb->setIconSize(iconSizeMiddle); } // global web-browser fonts - QWebSettings::globalSettings()->setFontFamily(QWebSettings::StandardFont, qApp->font().family()); - QWebSettings::globalSettings()->setFontFamily(QWebSettings::SerifFont, qApp->font().family()); - QWebSettings::globalSettings()->setFontFamily(QWebSettings::SansSerifFont, qApp->font().family()); - QWebSettings::globalSettings()->setFontFamily(QWebSettings::FantasyFont, qApp->font().family()); - QWebSettings::globalSettings()->setFontFamily(QWebSettings::CursiveFont, qApp->font().family()); - QWebSettings::globalSettings()->setFontFamily(QWebSettings::FixedFont, logFont.family()); - QWebSettings::globalSettings()->setFontSize(QWebSettings::DefaultFontSize, qApp->font().pointSize() + 1); - QWebSettings::globalSettings()->setFontSize(QWebSettings::DefaultFixedFontSize, logFont.pointSize() + 1); + QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::StandardFont, qApp->font().family()); + QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::SerifFont, qApp->font().family()); + QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::SansSerifFont, qApp->font().family()); + QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FantasyFont, qApp->font().family()); + QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::CursiveFont, qApp->font().family()); + QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FixedFont, logFont.family()); + QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFontSize, qApp->font().pointSize() + 1); + QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFixedFontSize, logFont.pointSize() + 1); #if QMC2_JOYSTICK == 1 pushButtonRescanJoysticks->setIconSize(iconSize); pushButtonRemapJoystickFunction->setIconSize(iconSize); diff --git a/src/qmc2main.cpp b/src/qmc2main.cpp index 2298f0b4a..4cd3ed24f 100644 --- a/src/qmc2main.cpp +++ b/src/qmc2main.cpp @@ -8130,8 +8130,10 @@ void MainWindow::projectMessLoadFinished(bool ok) QString cacheKey = qmc2SoftwareList->currentItem->text(QMC2_SWLIST_COLUMN_LIST) + "_" + qmc2SoftwareList->currentItem->text(QMC2_SWLIST_COLUMN_NAME); if ( qmc2ProjectMESSCache.contains(cacheKey) ) qmc2ProjectMESSCache.remove(cacheKey); - QByteArray data = QMC2_COMPRESS(qmc2ProjectMESS->webViewBrowser->page()->mainFrame()->toHtml().toUtf8()); - qmc2ProjectMESSCache.insert(cacheKey, new QByteArray(data), data.size()); + QString data("%1"); + qmc2ProjectMESS->webViewBrowser->page()->toHtml([data](const QString &result) { data.arg(result); }); + QByteArray cdata = QMC2_COMPRESS(data.toUtf8()); + qmc2ProjectMESSCache.insert(cacheKey, new QByteArray(cdata), cdata.size()); } // we only want to know this ONCE @@ -8146,8 +8148,10 @@ void MainWindow::projectMessSystemLoadStarted() void MainWindow::projectMessSystemLoadFinished(bool ok) { if ( ok ) { - QByteArray projectMessData = QMC2_COMPRESS(qmc2ProjectMESSLookup->webViewBrowser->page()->mainFrame()->toHtml().toUtf8()); - QString machName = qmc2CurrentItem->text(QMC2_MACHINELIST_COLUMN_NAME); + QString data("%1"); + qmc2ProjectMESSLookup->webViewBrowser->page()->toHtml([data](const QString &result) { data.arg(result); }); + QByteArray projectMessData = QMC2_COMPRESS(data.toUtf8()); + QString machName(qmc2CurrentItem->text(QMC2_MACHINELIST_COLUMN_NAME)); if ( qmc2ProjectMESSCache.contains(machName) ) qmc2ProjectMESSCache.remove(machName); qmc2ProjectMESSCache.insert(machName, new QByteArray(projectMessData), projectMessData.size()); diff --git a/src/qmc2main.cpp b/src/qmc2main.cpp index 4cd3ed24f..ec16009b2 100644 --- a/src/qmc2main.cpp +++ b/src/qmc2main.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include // std::sort() diff --git a/src/machinelist.cpp b/src/machinelist.cpp index 8c6944b29..4ccdc3c4b 100644 --- a/src/machinelist.cpp +++ b/src/machinelist.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include